소스 검색

deleted everything but the docs acquired from the previous merge

Dennis Furey 12 년 전
부모
커밋
e34c58efae
81개의 변경된 파일0개의 추가작업 그리고 58959개의 파일을 삭제
  1. 0 1
      AUTHORS
  2. 0 674
      COPYING
  3. 0 146
      ChangeLog
  4. 0 37
      FAQ
  5. 0 8
      HISTORY
  6. 0 182
      INSTALL
  7. 0 10
      Makefile.am
  8. 0 692
      Makefile.in
  9. 0 115
      README
  10. 0 1107
      aclocal.m4
  11. 0 14
      avm/Makefile.am
  12. 0 426
      avm/Makefile.in
  13. 0 23
      avm/apply.h
  14. 0 19
      avm/bes.h
  15. 0 36
      avm/branches.h
  16. 0 45
      avm/chrcodes.h
  17. 0 27
      avm/cmdline.h
  18. 0 58
      avm/common.h
  19. 0 21
      avm/compare.h
  20. 0 19
      avm/complexlib.h
  21. 0 20
      avm/decons.h
  22. 0 26
      avm/error.h
  23. 0 25
      avm/exmodes.h
  24. 0 52
      avm/farms.h
  25. 0 19
      avm/fftw.h
  26. 0 29
      avm/fnames.h
  27. 0 22
      avm/formin.h
  28. 0 23
      avm/formout.h
  29. 0 19
      avm/glpklib.h
  30. 0 19
      avm/gsldiflib.h
  31. 0 19
      avm/gslevu.h
  32. 0 19
      avm/gslintlib.h
  33. 0 19
      avm/harminv.h
  34. 0 50
      avm/instruct.h
  35. 0 45
      avm/jobs.h
  36. 0 19
      avm/kinsol.h
  37. 0 19
      avm/lapack.h
  38. 0 19
      avm/libfuns.h
  39. 0 28
      avm/listfuns.h
  40. 0 73
      avm/lists.h
  41. 0 19
      avm/lpsolve.h
  42. 0 29
      avm/matcon.h
  43. 0 19
      avm/mathlib.h
  44. 0 19
      avm/minpack.h
  45. 0 35
      avm/mpfr.h
  46. 0 19
      avm/mtwist.h
  47. 0 44
      avm/mwrap.h
  48. 0 21
      avm/portals.h
  49. 0 22
      avm/ports.h
  50. 0 36
      avm/profile.h
  51. 0 23
      avm/rawio.h
  52. 0 43
      avm/remote.h
  53. 0 19
      avm/rmathlib.h
  54. 0 65
      avm/servlist.h
  55. 0 19
      avm/umf.h
  56. 0 27
      avm/vglue.h
  57. 0 20
      avm/vman.h
  58. 0 32
      avram.lsm.in
  59. 0 61
      avram.spec.in
  60. 0 142
      compile
  61. 0 1432
      config.guess
  62. 0 166
      config.h.in
  63. 0 1537
      config.sub
  64. 0 7488
      configure
  65. 0 345
      configure.in
  66. 0 411
      depcomp
  67. 0 10
      doc/Makefile.am
  68. 0 653
      doc/Makefile.in
  69. 0 837
      doc/avram.1
  70. 0 253
      doc/avram.info
  71. 0 6618
      doc/avram.info-1
  72. 0 6116
      doc/avram.info-2
  73. BIN
      doc/avram.pdf
  74. 0 12110
      doc/avram.texinfo
  75. 0 396
      doc/gpl.texinfo
  76. 0 5484
      doc/texinfo.tex
  77. 0 251
      install-sh
  78. 0 3115
      ltconfig
  79. 0 6399
      ltmain.sh
  80. 0 360
      missing
  81. 0 40
      mkinstalldirs

+ 0 - 1
AUTHORS

@@ -1 +0,0 @@
-Dennis Furey <[email protected]>

+ 0 - 674
COPYING

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

+ 0 - 146
ChangeLog

@@ -1,146 +0,0 @@
-2012-09-01 Dennis Furey <[email protected]>
-
-	* avram 0.13.0:
-	- tcl configuration bug fixed in configure.in
-	- kinsol support partially updated but not quite working
-	- ceiling function added to the math library
-	- nextafter function added to the math library
-	- main command line parsing and processing refactored in avram.c
-	- remote distributed evaluation of map, reduce, sort, and couple
-	combinators by new modules remote.c, farms.c, jobs.c, servlist.c,
-	and vglue.c, and changes to apply.c and rawio.c (currently client
-	side only)
-	- updated FAQ, HISTORY, and COPYING files
-
-2010-03-15 Dennis Furey <[email protected]>
-
-	* avram 0.12.0:
-	- mixed integer programming features added to the lpsolve
-	interface
-
-2010-03-01 Dennis Furey <[email protected]>
-
-	* avram 0.11.1:
-	- compiler switches -mtune=native -march=native added to
-	configure.in resulting in roughly double speed (thanks to
-	Sami Abdin for the suggestion)
-	- umf library urls updated in documentation
-	- copyright years updated
-
-2009-08-03 Dennis Furey <[email protected]>
-
-	* avram 0.11.0:
-	- complex inverse trig functions casin, cacos, and catan added
-
-2009-05-13 Dennis Furey <[email protected]>
-
-	* avram 0.10.2:
-	- removed references to -lltdl from configure.in that prevented
-	detection of some other libraries during configuration
-
-2009-02-27 Dennis Furey <[email protected]>
-
-	* avram 0.10.1:
-	- adjusted configure.in for new location of the
-	nvector_serial.h the Debian package of libsundials-dev-2.3.0-1
-	- given up on trying to package a shared library due to compile
-	time errors; only an executable is shipped henceforth
-
-2008-09-12 Dennis Furey <[email protected]>
-
-	* avram 0.10.0:
-	- added an interface to the harminv library for
-	harmonic inversion
-	- rounding functions added to the math library,
-	ceil, floor, trunc, and round
-
-2008-07-11 Dennis Furey <[email protected]>
-
-	* avram 0.9.1:
-	- fixed some condiitonal compilation errors caused when
-	mpfr, lpsolve, expect, or ltdl libraries are not present
-
-2007-11-19 Dennis Furey <[email protected]>
-
-	* avram 0.9.0:
-	- new search paths in /usr/share
-
-2007-11-19 Dennis Furey <[email protected]>
-
-	* avram 0.8.1:
-	- recompiled against libfttw3
-
-2007-09-29 Dennis Furey <[email protected]>
-
-	* avram 0.8.0:
-	- liblpsolve55 interface added
-	- pcx interface withdrawn
-	- updated from libufsparse to libsuitesparse
-	- updated glpk library detection in configure script
-	- examples subdirectory withdrawn due to new Ursala release
-
-2007-06-14 Dennis Furey <[email protected]>
-
-	* avram 0.7.0:
-	- gsl differentiation functions with tolerances
-	- interact combinator routines rewritten
-	- trace command line option meaning changed
-
-2007-01-11 Dennis Furey <[email protected]>
-
-	* avram 0.6.0:
-	- gsl bessel functions library interface added
-	- real and complex hyperbolic functions added
-	- minor bug fixes and optimizations
-	- updates to documentation
-
-2006-10-04 Dennis Furey <[email protected]>
-
-	* avram 0.5.0:
-	- kinsol library functions added
-	- documentation on library functions updated
-	- race combinator no longer supported and all relevant code
-	removed (i.e., tasks.c, tasks.h, parts of apply.c, avram.c, and
-	lists.h, and examples/stdlib.fun)
-	- library and interact combinators added to examples/stdlib.fun
-	- new command line options -j and --jail to disable the interaction
-	combinator as a security feature
-	- trapping of user specified "%s" formatted numbers to prevent
-	segfaults
-	- glpk and gslint library modules rewritten again and interior
-	point method added to glpk
-	- some new API routines for matrices and memory management in
-	matcon.c and mwrap.c
-	- complex sparse matrices added to umf
-
-2006-08-28 Dennis Furey <[email protected]>
-
-	* avram 0.4.0:
-	- changes to configure.in to improve portability and non-root
-	installations
-	- library functions from pcx, fftw, apack, and minpack
-        - new command line options -e and --external-libraries to list
-	library functions
-	- gsl differentiation functions updated to gslderiv from old
-	glsdiff
-	- substantial rewrites of all other library interfaces
-
-2006-07-14 Dennis Furey <[email protected]>
-
-	* avram 0.3.0: umf and mpfr library functions, general cleaning up
-	of the code, adjustment of the expect library soname, new "have"
-	combinator to check for available library functions
-
-2005-11-18  Dennis Furey  <[email protected]>
-
-	* avram 0.2.1: updated the rewriter
-
-2003-10-04  Dennis Furey  <[email protected]>
-
-	* avram 0.2.0: some new floating point library functions; see
-	Appendix C
-
-2000-11-23  Dennis Furey  <[email protected]>
-
-	* avram: initial version.
-

+ 0 - 37
FAQ

@@ -1,37 +0,0 @@
-avram FAQ
----------
-
-This question was asked when avram used to be on sourceforge.
-
-Q1: 
-
-What is the purpose of avram and how does it differ from other virtual
-machines that exist?
-
-A1:
-
-There's quite a bit of documentation about avram on the home page but
-the short answer to your question is that its purpose is to make it
-easy to write compilers for functional programming languages by
-eliminating most of the code generation phase.
-
-Functional languages are more difficult than most other languages to
-translate into native code because the kinds of operations commonly
-used at the source level involve things like list processing, which
-are very far removed from the kinds of operations that are convenient
-to express in assembly language. Usually they also have no concept of
-assignment statements, use recursion or combinators instead of loops
-and branches, and may have functions taking functions as arguments and
-returning functions as results.
-
-The way avram differs from other virtual machines is a consequence of
-the support for functional programming operations. Other virtual
-machines are (to my knowledge) based on the traditional von Neumann
-model of a central processor with registers, an instruction set, and a
-writable memory, or at best an ensemble of thereof. In this model, a
-computation is defined by the cumulative effect of many instructions
-operating on individual words of memory. By contrast, avram has none
-of these characteristics. A program is described by a tree-like
-structure specifying a transformation from inputs to outputs, which is
-the computation itself. The essence of the virtual machine is the way
-it defines how larger programs are built from smaller ones.

+ 0 - 8
HISTORY

@@ -1,8 +0,0 @@
-July 10, 2001
-
-Prior art relating to this software is on record in my doctoral
-dissertation submitted in 1994 and published in 1995 by the University
-of London, "A functional approach to asynchronous circuit design and
-verification".
-
-Dennis Furey

+ 0 - 182
INSTALL

@@ -1,182 +0,0 @@
-Basic Installation
-==================
-
-   These are generic installation instructions.
-
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, a file
-`config.cache' that saves the results of its tests to speed up
-reconfiguring, and a file `config.log' containing compiler output
-(useful mainly for debugging `configure').
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If at some point `config.cache'
-contains results you don't want to keep, you may remove or edit it.
-
-   The file `configure.in' is used to create `configure' by a program
-called `autoconf'.  You only need `configure.in' if you want to change
-it or regenerate `configure' using a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.  If you're
-     using `csh' on an old version of System V, you might need to type
-     `sh ./configure' instead to prevent `csh' from trying to execute
-     `configure' itself.
-
-     Running `configure' takes awhile.  While running, it prints some
-     messages telling which features it is checking for.
-
-  2. Type `make' to compile the package.
-
-  3. Optionally, type `make check' to run any self-tests that come with
-     the package.
-
-  4. Type `make install' to install the programs and any data files and
-     documentation.
-
-  5. You can remove the program binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
-     a different kind of computer), type `make distclean'.  There is
-     also a `make maintainer-clean' target, but that is intended mainly
-     for the package's developers.  If you use it, you may have to get
-     all sorts of other programs in order to regenerate files that came
-     with the distribution.
-
-Compilers and Options
-=====================
-
-   Some systems require unusual options for compilation or linking that
-the `configure' script does not know about.  You can give `configure'
-initial values for variables by setting them in the environment.  Using
-a Bourne-compatible shell, you can do that on the command line like
-this:
-     CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
-
-Or on systems that have the `env' program, you can do it like this:
-     env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
-
-Compiling For Multiple Architectures
-====================================
-
-   You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory.  To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'.  `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
-   If you have to use a `make' that does not supports the `VPATH'
-variable, you have to compile the package for one architecture at a time
-in the source code directory.  After you have installed the package for
-one architecture, use `make distclean' before reconfiguring for another
-architecture.
-
-Installation Names
-==================
-
-   By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc.  You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PATH'.
-
-   You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files.  If you
-give `configure' the option `--exec-prefix=PATH', the package will use
-PATH as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
-
-   In addition, if you use an unusual directory layout you can give
-options like `--bindir=PATH' to specify different values for particular
-kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
-   If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
-   Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System).  The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
-   For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
-   There may be some features `configure' can not figure out
-automatically, but needs to determine by the type of host the package
-will run on.  Usually `configure' can figure that out, but if it prints
-a message saying it can not guess the host type, give it the
-`--host=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name with three fields:
-     CPU-COMPANY-SYSTEM
-
-See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the host type.
-
-   If you are building compiler tools for cross-compiling, you can also
-use the `--target=TYPE' option to select the type of system they will
-produce code for and the `--build=TYPE' option to select the type of
-system on which you are compiling the package.
-
-Sharing Defaults
-================
-
-   If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists.  Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Operation Controls
-==================
-
-   `configure' recognizes the following options to control how it
-operates.
-
-`--cache-file=FILE'
-     Use and save the results of the tests in FILE instead of
-     `./config.cache'.  Set FILE to `/dev/null' to disable caching, for
-     debugging `configure'.
-
-`--help'
-     Print a summary of the options to `configure', and exit.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
-     messages will still be shown).
-
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
-
-`--version'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`configure' also accepts some other, not widely useful, options.

+ 0 - 10
Makefile.am

@@ -1,10 +0,0 @@
-
-EXTRA_DIST=avram.lsm.in avram.spec.in depcomp FAQ HISTORY
-
-SUBDIRS = doc src avm
-
-#  if you write a self-test script named `chk', uncomment the
-#  following and add `chk' to the EXTRA_DIST list
-#TESTS=chk
-
-MAINTAINERCLEANFILES	= Makefile.in

+ 0 - 692
Makefile.in

@@ -1,692 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-subdir = .
-DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(srcdir)/avram.lsm.in \
-	$(srcdir)/avram.spec.in $(srcdir)/config.h.in \
-	$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
-	THANKS compile config.guess config.sub depcomp install-sh \
-	ltconfig ltmain.sh missing mkinstalldirs
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno config.status.lineno
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES = avram.lsm avram.spec
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir dist dist-all distcheck
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
-am__remove_distdir = \
-  { test ! -d "$(distdir)" \
-    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr "$(distdir)"; }; }
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-DIST_ARCHIVES = $(distdir).tar.gz
-GZIP_ENV = --best
-distuninstallcheck_listfiles = find . -type f -print
-distcleancheck_listfiles = find . -type f -print
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-GREP = @GREP@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-ISODATE = @ISODATE@
-LDFLAGS = @LDFLAGS@
-LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
-LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
-LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build_alias = @build_alias@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host_alias = @host_alias@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-EXTRA_DIST = avram.lsm.in avram.spec.in depcomp FAQ HISTORY
-SUBDIRS = doc src avm
-
-#  if you write a self-test script named `chk', uncomment the
-#  following and add `chk' to the EXTRA_DIST list
-#TESTS=chk
-MAINTAINERCLEANFILES = Makefile.in
-all: config.h
-	$(MAKE) $(AM_MAKEFLAGS) all-recursive
-
-.SUFFIXES:
-am--refresh:
-	@:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
-	      $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    echo ' $(SHELL) ./config.status'; \
-	    $(SHELL) ./config.status;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	$(SHELL) ./config.status --recheck
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	$(am__cd) $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
-$(am__aclocal_m4_deps):
-
-config.h: stamp-h1
-	@if test ! -f $@; then \
-	  rm -f stamp-h1; \
-	  $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
-	else :; fi
-
-stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
-	@rm -f stamp-h1
-	cd $(top_builddir) && $(SHELL) ./config.status config.h
-$(srcdir)/config.h.in:  $(am__configure_deps) 
-	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
-	rm -f stamp-h1
-	touch $@
-
-distclean-hdr:
-	-rm -f config.h stamp-h1
-avram.lsm: $(top_builddir)/config.status $(srcdir)/avram.lsm.in
-	cd $(top_builddir) && $(SHELL) ./config.status $@
-avram.spec: $(top_builddir)/config.status $(srcdir)/avram.spec.in
-	cd $(top_builddir) && $(SHELL) ./config.status $@
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	$(am__remove_distdir)
-	test -d "$(distdir)" || mkdir "$(distdir)"
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-	-test -n "$(am__skip_mode_fix)" \
-	|| find "$(distdir)" -type d ! -perm -755 \
-		-exec chmod u+rwx,go+rx {} \; -o \
-	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
-	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
-	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
-	|| chmod -R a+r "$(distdir)"
-dist-gzip: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-	$(am__remove_distdir)
-
-dist-bzip2: distdir
-	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
-	$(am__remove_distdir)
-
-dist-lzma: distdir
-	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
-	$(am__remove_distdir)
-
-dist-xz: distdir
-	tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
-	$(am__remove_distdir)
-
-dist-tarZ: distdir
-	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
-	$(am__remove_distdir)
-
-dist-shar: distdir
-	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-	$(am__remove_distdir)
-
-dist-zip: distdir
-	-rm -f $(distdir).zip
-	zip -rq $(distdir).zip $(distdir)
-	$(am__remove_distdir)
-
-dist dist-all: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-	$(am__remove_distdir)
-
-# This target untars the dist file and tries a VPATH configuration.  Then
-# it guarantees that the distribution is self-contained by making another
-# tarfile.
-distcheck: dist
-	case '$(DIST_ARCHIVES)' in \
-	*.tar.gz*) \
-	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
-	*.tar.bz2*) \
-	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
-	*.tar.lzma*) \
-	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
-	*.tar.xz*) \
-	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
-	*.tar.Z*) \
-	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
-	*.shar.gz*) \
-	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
-	*.zip*) \
-	  unzip $(distdir).zip ;;\
-	esac
-	chmod -R a-w $(distdir); chmod a+w $(distdir)
-	mkdir $(distdir)/_build
-	mkdir $(distdir)/_inst
-	chmod a-w $(distdir)
-	test -d $(distdir)/_build || exit 0; \
-	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
-	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
-	  && am__cwd=`pwd` \
-	  && $(am__cd) $(distdir)/_build \
-	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
-	    $(DISTCHECK_CONFIGURE_FLAGS) \
-	  && $(MAKE) $(AM_MAKEFLAGS) \
-	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
-	  && $(MAKE) $(AM_MAKEFLAGS) check \
-	  && $(MAKE) $(AM_MAKEFLAGS) install \
-	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
-	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
-	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
-	        distuninstallcheck \
-	  && chmod -R a-w "$$dc_install_base" \
-	  && ({ \
-	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
-	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
-	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
-	  && rm -rf "$$dc_destdir" \
-	  && $(MAKE) $(AM_MAKEFLAGS) dist \
-	  && rm -rf $(DIST_ARCHIVES) \
-	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
-	  && cd "$$am__cwd" \
-	  || exit 1
-	$(am__remove_distdir)
-	@(echo "$(distdir) archives ready for distribution: "; \
-	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
-	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
-distuninstallcheck:
-	@$(am__cd) '$(distuninstallcheck_dir)' \
-	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
-	   || { echo "ERROR: files left after uninstall:" ; \
-	        if test -n "$(DESTDIR)"; then \
-	          echo "  (check DESTDIR support)"; \
-	        fi ; \
-	        $(distuninstallcheck_listfiles) ; \
-	        exit 1; } >&2
-distcleancheck: distclean
-	@if test '$(srcdir)' = . ; then \
-	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
-	  exit 1 ; \
-	fi
-	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
-	  || { echo "ERROR: files left in build directory after distclean:" ; \
-	       $(distcleancheck_listfiles) ; \
-	       exit 1; } >&2
-check-am: all-am
-check: check-recursive
-all-am: Makefile config.h
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-recursive
-
-clean-am: clean-generic mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -rf $(top_srcdir)/autom4te.cache
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
-	ctags-recursive install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am am--refresh check check-am clean clean-generic \
-	ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
-	dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \
-	distclean distclean-generic distclean-hdr distclean-tags \
-	distcleancheck distdir distuninstallcheck dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs installdirs-am maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
-	pdf-am ps ps-am tags tags-recursive uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:

+ 0 - 115
README

@@ -1,115 +0,0 @@
-avram - applicative virtual machine code interpreter
-
-Copyright (C) 2006,2007,2012 Dennis Furey
-
-This package includes a virtual machine code interpreter and a
-development library. It enables you to run programs that have been
-compiled into the virtual code format that it uses. A compiler to
-generate code in this format is available separately at
-http://gueststar.github.com/ursala. 
-
-The quick install guide (assuming you have root):
------------------------
-
-Change to the directory with this README file in it, and do the
-following.
-
-configure
-make
-su
-make install
-
-If this doesn't work, try reading INSTALL, and please let me know what
-you had to do to get it to work so I can include it in this file or
-improve the configuration script.
-
-Installation for non-root users (whose admins are busy):
--------------------------------
-
-Change to the directory with this README file in it and type
-
-configure --prefix=$HOME
-make
-make install
-
-The avram binary will be installed under $HOME/bin, which you need to
-put in your path. You might also want to modify your $MANPATH and your
-$INFOPATH environment variables to include $HOME/man and $HOME/info.
-You may substitute any directory you own for $HOME.
-
-See below if you want to link avram with external math libraries,
-which will need to be installed first.
-
-Installation for non-root users with small disk quotas (aka students):
-------------------------------------------------------
-
-Unpack the tarball in /tmp, which is world writable on most systems,
-cd to /tmp/avram-0.3.0 (or current version) and type
-
-configure --prefix=/tmp
-make
-strip src/avram
-
-The third line is optional but recommended. When it's finished
-building, copy src/avram to your home directory wherever you keep your
-executables (probably ~/bin). You won't have any on-line documentation
-with this kind of installation, but you can always read it on the home
-page. Nor will you be able to link your own code against the avram
-library, but you'll use only a few hundred kbytes for the executable
-and will be able to execute unmodified virtual code scripts if they're
-done right.
-
-A combination of the above installations is to follow the building in
-/tmp with make install, and then copy /tmp/lib to your home directory
-as well as /tmp/bin/avram. That will give you the executable and the
-library but no documentation.
-
-Installation of Expect
-----------------------
-
-Avram has cooler features when built on a machine with the expect
-library, available at http://expect.sourceforge.net. If your system
-doesn't have any files named /usr/lib/*expect* or
-/usr/local/lib/*expect*, you might want to install the expect library
-in order to get the full benefit before installing avram. Version
-numbers shown below may vary.
-
-1) download tcl8.5.12-src.tar.gz and expect5.45.tar.gz
-2) tar -zxvf tcl8.5.12-src.tar.gz
-3) tar -zxvf expect5.45.tar.gz
-4) cd tcl8.5.12/unix
-5) su
-6) configure; make; make install
-7) cd ../../expect-5.45
-8) configure; make; make install
-
-It is possible to install these libraries non-root by using configure
---prefix=$HOME. As a show of my solidarity with non-root users, I've
-made the avram configure script look under $HOME for shared libraries
-and header files. You will then have to put your $HOME/lib directory
-in your LD_LIBRARY_PATH environment variable.
-
-Installation of other libraries
--------------------------------
-
-Some other libraries with which avram is able to interface may be of
-interest. These should be installed prior to compiling avram, if you
-want, but avram will also work without them.
-
-* gsl      integration, differentiation, and series acceleration
-* mpfr     arbitrary precision arithmetic
-* minpack  non-linear optimization
-* lapack   linear algebra
-* fftw     fast fourier transforms
-* Rmath    statistical and transcendental functions
-* ufsparse sparse matrices
-* glpk     linear programming by the simplex method
-
-Keep an eye on the output messages from the configuration script to
-ensure the libraries you want have been detected if you're compiling
-avram yourself, and then as a check execute "avram -e" with the newly
-built binary.
-
-Comments are welcome.
-
-	- Dennis Furey <[email protected]>

+ 0 - 1107
aclocal.m4

@@ -1,1107 +0,0 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-m4_ifndef([AC_AUTOCONF_VERSION],
-  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
-[m4_warning([this file was generated for autoconf 2.68.
-You have another version of autoconf.  It may work, but is not guaranteed to.
-If you have problems, you may need to regenerate the build system entirely.
-To do so, use the procedure documented by the package, typically `autoreconf'.])])
-
-dnl Autoconf macros for libgcrypt
-dnl       Copyright (C) 2002, 2004 Free Software Foundation, Inc.
-dnl
-dnl This file is free software; as a special exception the author gives
-dnl unlimited permission to copy and/or distribute it, with or without
-dnl modifications, as long as this notice is preserved.
-dnl
-dnl This file is distributed in the hope that it will be useful, but
-dnl WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
-dnl implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-
-dnl AM_PATH_LIBGCRYPT([MINIMUM-VERSION,
-dnl                   [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
-dnl Test for libgcrypt and define LIBGCRYPT_CFLAGS and LIBGCRYPT_LIBS.
-dnl MINIMUN-VERSION is a string with the version number optionalliy prefixed
-dnl with the API version to also check the API compatibility. Example:
-dnl a MINIMUN-VERSION of 1:1.2.5 won't pass the test unless the installed 
-dnl version of libgcrypt is at least 1.2.5 *and* the API number is 1.  Using
-dnl this features allows to prevent build against newer versions of libgcrypt
-dnl with a changed API.
-dnl
-AC_DEFUN([AM_PATH_LIBGCRYPT],
-[ AC_ARG_WITH(libgcrypt-prefix,
-            AC_HELP_STRING([--with-libgcrypt-prefix=PFX],
-                           [prefix where LIBGCRYPT is installed (optional)]),
-     libgcrypt_config_prefix="$withval", libgcrypt_config_prefix="")
-  if test x$libgcrypt_config_prefix != x ; then
-     if test x${LIBGCRYPT_CONFIG+set} != xset ; then
-        LIBGCRYPT_CONFIG=$libgcrypt_config_prefix/bin/libgcrypt-config
-     fi
-  fi
-
-  AC_PATH_PROG(LIBGCRYPT_CONFIG, libgcrypt-config, no)
-  tmp=ifelse([$1], ,1:1.2.0,$1)
-  if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
-     req_libgcrypt_api=`echo "$tmp"     | sed 's/\(.*\):\(.*\)/\1/'`
-     min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'`
-  else
-     req_libgcrypt_api=0
-     min_libgcrypt_version="$tmp"
-  fi
-
-  AC_MSG_CHECKING(for LIBGCRYPT - version >= $min_libgcrypt_version)
-  ok=no
-  if test "$LIBGCRYPT_CONFIG" != "no" ; then
-    req_major=`echo $min_libgcrypt_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
-    req_minor=`echo $min_libgcrypt_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
-    req_micro=`echo $min_libgcrypt_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
-    libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version`
-    major=`echo $libgcrypt_config_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
-    minor=`echo $libgcrypt_config_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
-    micro=`echo $libgcrypt_config_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
-    if test "$major" -gt "$req_major"; then
-        ok=yes
-    else 
-        if test "$major" -eq "$req_major"; then
-            if test "$minor" -gt "$req_minor"; then
-               ok=yes
-            else
-               if test "$minor" -eq "$req_minor"; then
-                   if test "$micro" -ge "$req_micro"; then
-                     ok=yes
-                   fi
-               fi
-            fi
-        fi
-    fi
-  fi
-  if test $ok = yes; then
-    AC_MSG_RESULT([yes ($libgcrypt_config_version)])
-  else
-    AC_MSG_RESULT(no)
-  fi
-  if test $ok = yes; then
-     # If we have a recent libgcrypt, we should also check that the
-     # API is compatible
-     if test "$req_libgcrypt_api" -gt 0 ; then
-        tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0`
-        if test "$tmp" -gt 0 ; then
-           AC_MSG_CHECKING([LIBGCRYPT API version])
-           if test "$req_libgcrypt_api" -eq "$tmp" ; then
-             AC_MSG_RESULT([okay])
-           else
-             ok=no
-             AC_MSG_RESULT([does not match. want=$req_libgcrypt_api got=$tmp])
-           fi
-        fi
-     fi
-  fi
-  if test $ok = yes; then
-    LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags`
-    LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs`
-    ifelse([$2], , :, [$2])
-  else
-    LIBGCRYPT_CFLAGS=""
-    LIBGCRYPT_LIBS=""
-    ifelse([$3], , :, [$3])
-  fi
-  AC_SUBST(LIBGCRYPT_CFLAGS)
-  AC_SUBST(LIBGCRYPT_LIBS)
-])
-
-# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_AUTOMAKE_VERSION(VERSION)
-# ----------------------------
-# Automake X.Y traces this macro to ensure aclocal.m4 has been
-# generated from the m4 files accompanying Automake X.Y.
-# (This private macro should not be called outside this file.)
-AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.11'
-dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
-dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.11.1], [],
-      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
-])
-
-# _AM_AUTOCONF_VERSION(VERSION)
-# -----------------------------
-# aclocal traces this macro to find the Autoconf version.
-# This is a private macro too.  Using m4_define simplifies
-# the logic in aclocal, which can simply ignore this definition.
-m4_define([_AM_AUTOCONF_VERSION], [])
-
-# AM_SET_CURRENT_AUTOMAKE_VERSION
-# -------------------------------
-# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
-# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
-AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11.1])dnl
-m4_ifndef([AC_AUTOCONF_VERSION],
-  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
-
-# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
-
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
-#
-# Of course, Automake must honor this variable whenever it calls a
-# tool from the auxiliary directory.  The problem is that $srcdir (and
-# therefore $ac_aux_dir as well) can be either absolute or relative,
-# depending on how configure is run.  This is pretty annoying, since
-# it makes $ac_aux_dir quite unusable in subdirectories: in the top
-# source directory, any form will work fine, but in subdirectories a
-# relative path needs to be adjusted first.
-#
-# $ac_aux_dir/missing
-#    fails when called from a subdirectory if $ac_aux_dir is relative
-# $top_srcdir/$ac_aux_dir/missing
-#    fails if $ac_aux_dir is absolute,
-#    fails when called from a subdirectory in a VPATH build with
-#          a relative $ac_aux_dir
-#
-# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
-# are both prefixed by $srcdir.  In an in-source build this is usually
-# harmless because $srcdir is `.', but things will broke when you
-# start a VPATH build or use an absolute $srcdir.
-#
-# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
-# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
-#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
-# and then we would define $MISSING as
-#   MISSING="\${SHELL} $am_aux_dir/missing"
-# This will work as long as MISSING is not called from configure, because
-# unfortunately $(top_srcdir) has no meaning in configure.
-# However there are other variables, like CC, which are often used in
-# configure, and could therefore not use this "fixed" $ac_aux_dir.
-#
-# Another solution, used here, is to always expand $ac_aux_dir to an
-# absolute PATH.  The drawback is that using absolute paths prevent a
-# configured tree to be moved without reconfiguration.
-
-AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-])
-
-# AM_CONDITIONAL                                            -*- Autoconf -*-
-
-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 9
-
-# AM_CONDITIONAL(NAME, SHELL-CONDITION)
-# -------------------------------------
-# Define a conditional.
-AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ(2.52)dnl
- ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
-	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
-AC_SUBST([$1_TRUE])dnl
-AC_SUBST([$1_FALSE])dnl
-_AM_SUBST_NOTMAKE([$1_TRUE])dnl
-_AM_SUBST_NOTMAKE([$1_FALSE])dnl
-m4_define([_AM_COND_VALUE_$1], [$2])dnl
-if $2; then
-  $1_TRUE=
-  $1_FALSE='#'
-else
-  $1_TRUE='#'
-  $1_FALSE=
-fi
-AC_CONFIG_COMMANDS_PRE(
-[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
-  AC_MSG_ERROR([[conditional "$1" was never defined.
-Usually this means the macro was only invoked conditionally.]])
-fi])])
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 10
-
-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
-# written in clear, in which case automake, when reading aclocal.m4,
-# will think it sees a *use*, and therefore will trigger all it's
-# C support machinery.  Also note that it means that autoscan, seeing
-# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
-
-
-# _AM_DEPENDENCIES(NAME)
-# ----------------------
-# See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "GCJ", or "OBJC".
-# We try a few techniques and use that to set a single cache variable.
-#
-# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
-# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
-# dependency, and given that the user is not expected to run this macro,
-# just rely on AC_PROG_CC.
-AC_DEFUN([_AM_DEPENDENCIES],
-[AC_REQUIRE([AM_SET_DEPDIR])dnl
-AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
-AC_REQUIRE([AM_MAKE_INCLUDE])dnl
-AC_REQUIRE([AM_DEP_TRACK])dnl
-
-ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
-       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
-       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
-       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
-       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
-                   [depcc="$$1"   am_compiler_list=])
-
-AC_CACHE_CHECK([dependency style of $depcc],
-               [am_cv_$1_dependencies_compiler_type],
-[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_$1_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
-  fi
-  am__universal=false
-  m4_case([$1], [CC],
-    [case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac],
-    [CXX],
-    [case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac])
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
-      ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_$1_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_$1_dependencies_compiler_type=none
-fi
-])
-AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
-AM_CONDITIONAL([am__fastdep$1], [
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
-])
-
-
-# AM_SET_DEPDIR
-# -------------
-# Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES
-AC_DEFUN([AM_SET_DEPDIR],
-[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
-])
-
-
-# AM_DEP_TRACK
-# ------------
-AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE(dependency-tracking,
-[  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors])
-if test "x$enable_dependency_tracking" != xno; then
-  am_depcomp="$ac_aux_dir/depcomp"
-  AMDEPBACKSLASH='\'
-fi
-AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
-AC_SUBST([AMDEPBACKSLASH])dnl
-_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
-])
-
-# Generate code to set up dependency tracking.              -*- Autoconf -*-
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-#serial 5
-
-# _AM_OUTPUT_DEPENDENCY_COMMANDS
-# ------------------------------
-AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-[{
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
-  # are listed without --file.  Let's play safe and only enable the eval
-  # if we detect the quoting.
-  case $CONFIG_FILES in
-  *\'*) eval set x "$CONFIG_FILES" ;;
-  *)   set x $CONFIG_FILES ;;
-  esac
-  shift
-  for mf
-  do
-    # Strip MF so we end up with the name of the file.
-    mf=`echo "$mf" | sed -e 's/:.*$//'`
-    # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named `Makefile.in', but
-    # some people rename them; so instead we look at the file content.
-    # Grep'ing the first line is not enough: some people post-process
-    # each Makefile.in and add a new line on top of each file to say so.
-    # Grep'ing the whole file is not good either: AIX grep has a line
-    # limit of 2048, but all sed's we know have understand at least 4000.
-    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
-      dirpart=`AS_DIRNAME("$mf")`
-    else
-      continue
-    fi
-    # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running `make'.
-    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-    test -z "$DEPDIR" && continue
-    am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "am__include" && continue
-    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # When using ansi2knr, U may be empty or an underscore; expand it
-    U=`sed -n 's/^U = //p' < "$mf"`
-    # Find all dependency output files, they are included files with
-    # $(DEPDIR) in their names.  We invoke sed twice because it is the
-    # simplest approach to changing $(DEPDIR) to its actual value in the
-    # expansion.
-    for file in `sed -n "
-      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-      # Make sure the directory exists.
-      test -f "$dirpart/$file" && continue
-      fdir=`AS_DIRNAME(["$file"])`
-      AS_MKDIR_P([$dirpart/$fdir])
-      # echo "creating $dirpart/$file"
-      echo '# dummy' > "$dirpart/$file"
-    done
-  done
-}
-])# _AM_OUTPUT_DEPENDENCY_COMMANDS
-
-
-# AM_OUTPUT_DEPENDENCY_COMMANDS
-# -----------------------------
-# This macro should only be invoked once -- use via AC_REQUIRE.
-#
-# This code is only required when automatic dependency tracking
-# is enabled.  FIXME.  This creates each `.P' file that we will
-# need in order to bootstrap the dependency handling code.
-AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
-[AC_CONFIG_COMMANDS([depfiles],
-     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
-     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
-])
-
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 8
-
-# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
-AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
-
-# Do all the work for Automake.                             -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 16
-
-# This macro actually does too much.  Some checks are only needed if
-# your package does certain things.  But this isn't really a big deal.
-
-# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
-# AM_INIT_AUTOMAKE([OPTIONS])
-# -----------------------------------------------
-# The call with PACKAGE and VERSION arguments is the old style
-# call (pre autoconf-2.50), which is being phased out.  PACKAGE
-# and VERSION should now be passed to AC_INIT and removed from
-# the call to AM_INIT_AUTOMAKE.
-# We support both call styles for the transition.  After
-# the next Automake release, Autoconf can make the AC_INIT
-# arguments mandatory, and then we can depend on a new Autoconf
-# release and drop the old call support.
-AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.62])dnl
-dnl Autoconf wants to disallow AM_ names.  We explicitly allow
-dnl the ones we care about.
-m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
-AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
-AC_REQUIRE([AC_PROG_INSTALL])dnl
-if test "`cd $srcdir && pwd`" != "`pwd`"; then
-  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
-  # is not polluted with repeated "-I."
-  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
-  # test to see if srcdir already configured
-  if test -f $srcdir/config.status; then
-    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
-  fi
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
-  if (cygpath --version) >/dev/null 2>/dev/null; then
-    CYGPATH_W='cygpath -w'
-  else
-    CYGPATH_W=echo
-  fi
-fi
-AC_SUBST([CYGPATH_W])
-
-# Define the identity of the package.
-dnl Distinguish between old-style and new-style calls.
-m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
- AC_SUBST([PACKAGE], [$1])dnl
- AC_SUBST([VERSION], [$2])],
-[_AM_SET_OPTIONS([$1])dnl
-dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
-m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
-  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
-
-_AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
-
-# Some tools Automake needs.
-AC_REQUIRE([AM_SANITY_CHECK])dnl
-AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
-AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
-AC_REQUIRE([AC_PROG_AWK])dnl
-AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
-	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
-			     [_AM_PROG_TAR([v7])])])
-_AM_IF_OPTION([no-dependencies],,
-[AC_PROVIDE_IFELSE([AC_PROG_CC],
-		  [_AM_DEPENDENCIES(CC)],
-		  [define([AC_PROG_CC],
-			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_CXX],
-		  [_AM_DEPENDENCIES(CXX)],
-		  [define([AC_PROG_CXX],
-			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_OBJC],
-		  [_AM_DEPENDENCIES(OBJC)],
-		  [define([AC_PROG_OBJC],
-			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
-])
-_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
-dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
-dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
-dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
-AC_CONFIG_COMMANDS_PRE(dnl
-[m4_provide_if([_AM_COMPILER_EXEEXT],
-  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
-])
-
-dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
-dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
-dnl mangled by Autoconf and run in a shell conditional statement.
-m4_define([_AC_COMPILER_EXEEXT],
-m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
-
-
-# When config.status generates a header, we must update the stamp-h file.
-# This file resides in the same directory as the config header
-# that is generated.  The stamp files are numbered to have different names.
-
-# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
-# loop where config.status creates the headers, so we can generate
-# our stamp files there.
-AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
-[# Compute $1's index in $config_headers.
-_am_arg=$1
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $_am_arg | $_am_arg:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-
-# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_SH
-# ------------------
-# Define $install_sh.
-AC_DEFUN([AM_PROG_INSTALL_SH],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-if test x"${install_sh}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\	*)
-    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
-  *)
-    install_sh="\${SHELL} $am_aux_dir/install-sh"
-  esac
-fi
-AC_SUBST(install_sh)])
-
-# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# Check whether the underlying file-system supports filenames
-# with a leading dot.  For instance MS-DOS doesn't.
-AC_DEFUN([AM_SET_LEADING_DOT],
-[rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-AC_SUBST([am__leading_dot])])
-
-# Check to see how 'make' treats includes.	            -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 4
-
-# AM_MAKE_INCLUDE()
-# -----------------
-# Check to see how make treats includes.
-AC_DEFUN([AM_MAKE_INCLUDE],
-[am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
-	@echo this is the am__doit target
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-AC_MSG_CHECKING([for style of include used by $am_make])
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
-  am__include=include
-  am__quote=
-  _am_result=GNU
-  ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   case `$am_make -s -f confmf 2> /dev/null` in #(
-   *the\ am__doit\ target*)
-     am__include=.include
-     am__quote="\""
-     _am_result=BSD
-     ;;
-   esac
-fi
-AC_SUBST([am__include])
-AC_SUBST([am__quote])
-AC_MSG_RESULT([$_am_result])
-rm -f confinc confmf
-])
-
-# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 6
-
-# AM_PROG_CC_C_O
-# --------------
-# Like AC_PROG_CC_C_O, but changed for automake.
-AC_DEFUN([AM_PROG_CC_C_O],
-[AC_REQUIRE([AC_PROG_CC_C_O])dnl
-AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([compile])dnl
-# FIXME: we rely on the cache variable name because
-# there is no other way.
-set dummy $CC
-am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
-eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
-if test "$am_t" != yes; then
-   # Losing compiler, so override with the script.
-   # FIXME: It is wrong to rewrite CC.
-   # But if we don't then we get into trouble of one sort or another.
-   # A longer-term fix would be to have automake use am__CC in this case,
-   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
-   CC="$am_aux_dir/compile $CC"
-fi
-dnl Make sure AC_PROG_CC is never called again, or it will override our
-dnl setting of CC.
-m4_define([AC_PROG_CC],
-          [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
-])
-
-# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
-
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 6
-
-# AM_MISSING_PROG(NAME, PROGRAM)
-# ------------------------------
-AC_DEFUN([AM_MISSING_PROG],
-[AC_REQUIRE([AM_MISSING_HAS_RUN])
-$1=${$1-"${am_missing_run}$2"}
-AC_SUBST($1)])
-
-
-# AM_MISSING_HAS_RUN
-# ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
-AC_DEFUN([AM_MISSING_HAS_RUN],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([missing])dnl
-if test x"${MISSING+set}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\	*)
-    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
-  *)
-    MISSING="\${SHELL} $am_aux_dir/missing" ;;
-  esac
-fi
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
-else
-  am_missing_run=
-  AC_MSG_WARN([`missing' script is too old or missing])
-fi
-])
-
-# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check for `mkdir -p'.
-AC_DEFUN([AM_PROG_MKDIR_P],
-[AC_PREREQ([2.60])dnl
-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
-dnl while keeping a definition of mkdir_p for backward compatibility.
-dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
-dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
-dnl Makefile.ins that do not define MKDIR_P, so we do our own
-dnl adjustment using top_builddir (which is defined more often than
-dnl MKDIR_P).
-AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
-case $mkdir_p in
-  [[\\/$]]* | ?:[[\\/]]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-])
-
-# Helper functions for option handling.                     -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 4
-
-# _AM_MANGLE_OPTION(NAME)
-# -----------------------
-AC_DEFUN([_AM_MANGLE_OPTION],
-[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
-
-# _AM_SET_OPTION(NAME)
-# ------------------------------
-# Set option NAME.  Presently that only means defining a flag for this option.
-AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
-
-# _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
-# OPTIONS is a space-separated list of Automake options.
-AC_DEFUN([_AM_SET_OPTIONS],
-[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
-
-# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
-# -------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-AC_DEFUN([_AM_IF_OPTION],
-[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-
-# Check to make sure that the build environment is sane.    -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 5
-
-# AM_SANITY_CHECK
-# ---------------
-AC_DEFUN([AM_SANITY_CHECK],
-[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Reject unsafe characters in $srcdir or the absolute working directory
-# name.  Accept space and tab only in the latter.
-am_lf='
-'
-case `pwd` in
-  *[[\\\"\#\$\&\'\`$am_lf]]*)
-    AC_MSG_ERROR([unsafe absolute working directory name]);;
-esac
-case $srcdir in
-  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
-    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
-esac
-
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-   if test "$[*]" = "X"; then
-      # -L didn't work.
-      set X `ls -t "$srcdir/configure" conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$[*]" != "X $srcdir/configure conftest.file" \
-      && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
-alias in your environment])
-   fi
-
-   test "$[2]" = conftest.file
-   )
-then
-   # Ok.
-   :
-else
-   AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
-fi
-AC_MSG_RESULT(yes)])
-
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_STRIP
-# ---------------------
-# One issue with vendor `install' (even GNU) is that you can't
-# specify the program used to strip binaries.  This is especially
-# annoying in cross-compiling environments, where the build's strip
-# is unlikely to handle the host's binaries.
-# Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
-# STRIPPROG with the value of the STRIP variable (set by the user).
-AC_DEFUN([AM_PROG_INSTALL_STRIP],
-[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
-if test "$cross_compiling" != no; then
-  AC_CHECK_TOOL([STRIP], [strip], :)
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-AC_SUBST([INSTALL_STRIP_PROGRAM])])
-
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# _AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
-# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
-# This macro is traced by Automake.
-AC_DEFUN([_AM_SUBST_NOTMAKE])
-
-# AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
-# Public sister of _AM_SUBST_NOTMAKE.
-AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
-
-# Check how to create a tarball.                            -*- Autoconf -*-
-
-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# _AM_PROG_TAR(FORMAT)
-# --------------------
-# Check how to create a tarball in format FORMAT.
-# FORMAT should be one of `v7', `ustar', or `pax'.
-#
-# Substitute a variable $(am__tar) that is a command
-# writing to stdout a FORMAT-tarball containing the directory
-# $tardir.
-#     tardir=directory && $(am__tar) > result.tar
-#
-# Substitute a variable $(am__untar) that extract such
-# a tarball read from stdin.
-#     $(am__untar) < result.tar
-AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
-m4_if([$1], [v7],
-     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
-     [m4_case([$1], [ustar],, [pax],,
-              [m4_fatal([Unknown tar format])])
-AC_MSG_CHECKING([how to create a $1 tar archive])
-# Loop over all known methods to create a tar archive until one works.
-_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-_am_tools=${am_cv_prog_tar_$1-$_am_tools}
-# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of `-'.
-for _am_tool in $_am_tools
-do
-  case $_am_tool in
-  gnutar)
-    for _am_tar in tar gnutar gtar;
-    do
-      AM_RUN_LOG([$_am_tar --version]) && break
-    done
-    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
-    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
-    am__untar="$_am_tar -xf -"
-    ;;
-  plaintar)
-    # Must skip GNU tar: if it does not support --format= it doesn't create
-    # ustar tarball either.
-    (tar --version) >/dev/null 2>&1 && continue
-    am__tar='tar chf - "$$tardir"'
-    am__tar_='tar chf - "$tardir"'
-    am__untar='tar xf -'
-    ;;
-  pax)
-    am__tar='pax -L -x $1 -w "$$tardir"'
-    am__tar_='pax -L -x $1 -w "$tardir"'
-    am__untar='pax -r'
-    ;;
-  cpio)
-    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
-    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
-    am__untar='cpio -i -H $1 -d'
-    ;;
-  none)
-    am__tar=false
-    am__tar_=false
-    am__untar=false
-    ;;
-  esac
-
-  # If the value was cached, stop now.  We just wanted to have am__tar
-  # and am__untar set.
-  test -n "${am_cv_prog_tar_$1}" && break
-
-  # tar/untar a dummy directory, and stop if the command works
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  echo GrepMe > conftest.dir/file
-  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
-  rm -rf conftest.dir
-  if test -s conftest.tar; then
-    AM_RUN_LOG([$am__untar <conftest.tar])
-    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
-  fi
-done
-rm -rf conftest.dir
-
-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-AC_MSG_RESULT([$am_cv_prog_tar_$1])])
-AC_SUBST([am__tar])
-AC_SUBST([am__untar])
-]) # _AM_PROG_TAR
-

+ 0 - 14
avm/Makefile.am

@@ -1,14 +0,0 @@
-MAINTAINERCLEANFILES	= Makefile.in
-
-pkgincludedir		= $(includedir)/avm
-
-INCLUDES		= -I$(top_builddir) -I$(top_srcdir)
-
-pkginclude_HEADERS=error.h lists.h branches.h chrcodes.h rawio.h \
-formin.h formout.h fnames.h cmdline.h compare.h decons.h ports.h portals.h \
-profile.h instruct.h listfuns.h matcon.h apply.h exmodes.h common.h vman.h \
-libfuns.h mathlib.h complexlib.h rmathlib.h mtwist.h gslintlib.h \
-gsldiflib.h gslevu.h glpklib.h umf.h mpfr.h lapack.h fftw.h minpack.h \
-kinsol.h mwrap.h bes.h lpsolve.h harminv.h remote.h servlist.h jobs.h \
-farms.h vglue.h
-

+ 0 - 426
avm/Makefile.in

@@ -1,426 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-subdir = avm
-DIST_COMMON = $(pkginclude_HEADERS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(pkgincludedir)"
-HEADERS = $(pkginclude_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-pkgincludedir = $(includedir)/avm
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-GREP = @GREP@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-ISODATE = @ISODATE@
-LDFLAGS = @LDFLAGS@
-LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
-LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
-LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build_alias = @build_alias@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host_alias = @host_alias@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-MAINTAINERCLEANFILES = Makefile.in
-INCLUDES = -I$(top_builddir) -I$(top_srcdir)
-pkginclude_HEADERS = error.h lists.h branches.h chrcodes.h rawio.h \
-formin.h formout.h fnames.h cmdline.h compare.h decons.h ports.h portals.h \
-profile.h instruct.h listfuns.h matcon.h apply.h exmodes.h common.h vman.h \
-libfuns.h mathlib.h complexlib.h rmathlib.h mtwist.h gslintlib.h \
-gsldiflib.h gslevu.h glpklib.h umf.h mpfr.h lapack.h fftw.h minpack.h \
-kinsol.h mwrap.h bes.h lpsolve.h harminv.h remote.h servlist.h jobs.h \
-farms.h vglue.h
-
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu avm/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu avm/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-pkgincludeHEADERS: $(pkginclude_HEADERS)
-	@$(NORMAL_INSTALL)
-	test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
-	@list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \
-	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \
-	done
-
-uninstall-pkgincludeHEADERS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
-	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(HEADERS)
-installdirs:
-	for dir in "$(DESTDIR)$(pkgincludedir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-pkgincludeHEADERS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-pkgincludeHEADERS
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	ctags distclean distclean-generic distclean-tags distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-man install-pdf \
-	install-pdf-am install-pkgincludeHEADERS install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
-	uninstall uninstall-am uninstall-pkgincludeHEADERS
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:

+ 0 - 23
avm/apply.h

@@ -1,23 +0,0 @@
-#ifndef AVM_APPLY_H
-#define AVM_APPLY_H 1
-
-#include <avm/lists.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern flag _avm_reset;
-
-  extern list avm_apply (list operator, list operand);
-  extern list avm_recoverable_apply (list operator, list operand, int *fault);
-  extern void avm_initialize_apply ();
-  extern void avm_count_apply ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_APPLY_H */

+ 0 - 19
avm/bes.h

@@ -1,19 +0,0 @@
-#ifndef AVM_LIBBES_H
-#define AVM_LIBBES_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_bes_call (list function_name, list argument, int *fault);
-  extern list avm_have_bes_call (list function_name, int *fault);
-  extern void avm_initialize_bes ();
-  extern void avm_count_bes ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_LIBBES_H */

+ 0 - 36
avm/branches.h

@@ -1,36 +0,0 @@
-#ifndef AVM_BRANCHES_H
-#define AVM_BRANCHES_H 1
-
-#include <avm/lists.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-  typedef list *branch;
-
-  struct branch_node
-  {
-    branch above;
-    struct branch_node *following;
-  };
-
-  typedef struct branch_node *branch_queue;
-
-  extern void avm_anticipate (branch_queue * front, branch_queue * back, branch operand);
-  extern void avm_recoverable_anticipate (branch_queue * front, branch_queue * back, branch operand, int *fault);
-  extern void avm_enqueue_branch (branch_queue * front, branch_queue * back, int received_bit);
-  extern void avm_recoverable_enqueue_branch (branch_queue * front, branch_queue * back, int received_bit, int *fault);
-  extern void avm_dispose_branch_queue  (branch_queue front);
-  extern void avm_dispose_branch  (branch_queue old);
-  extern void avm_initialize_branches ();
-  extern void avm_count_branches ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_BRANCHES_H */

+ 0 - 45
avm/chrcodes.h

@@ -1,45 +0,0 @@
-#ifndef AVM_CHRCODES_H
-#define AVM_CHRCODES_H 1
-
-#include <avm/lists.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-#define avm_character_representation(character)\
-  (((_avm_temporary_character=_avm_representations[character&0xff])->sharers)++?\
-   _avm_temporary_character:_avm_temporary_character)
-
-#define avm_standard_character_representation(character)\
-  (((_avm_temporary_character=_avm_standard_representations[character&0xff])->sharers)++?\
-   _avm_temporary_character:_avm_temporary_character)
-
-  extern list _avm_temporary_character;
-  extern list _avm_representations[256];
-  extern list _avm_standard_representations[256];
-
-  extern int avm_character_code (list operand);
-  extern int avm_standard_character_code  (list operand);
-  extern list avm_scanned_list (char *string);
-  extern char *avm_prompt (list prompt_strings);
-  extern char *avm_recoverable_prompt (list prompt_strings, list *message, int *fault);
-  extern list avm_multiscanned (char **strings);
-  extern list avm_strung (char *string);
-  extern list avm_standard_strung (char *string);
-  extern char *avm_unstrung (list string, list *message, int *fault);
-  extern char *avm_standard_unstrung (list string, list *message, int *fault);
-  extern list avm_recoverable_strung (char *string, int *fault);
-  extern list avm_recoverable_standard_strung (char *string, int *fault);
-  extern void avm_initialize_chrcodes ();
-  extern void avm_count_chrcodes ();
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_CHRCODES_H */

+ 0 - 27
avm/cmdline.h

@@ -1,27 +0,0 @@
-#ifndef AVM_CMDLINE_H
-#define AVM_CMDLINE_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_default_command_line (int argc, 
-					char *argv[],
-					int index,
-					char *extension,
-					char *paths,
-					int default_to_stdin_mode,
-					int force_text_input_mode,
-					int *file_ordinal);
-
-  extern list avm_environment (char *env[]);
-  extern void avm_initialize_cmdline ();
-  extern void avm_count_cmdline ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_CMDLINE_H */

+ 0 - 58
avm/common.h

@@ -1,58 +0,0 @@
-#ifndef AVM_COMMON_H
-#define AVM_COMMON_H 1
-
-/* adapted from the autobook reference */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <stdint.h>
-
-#define _GNU_SOURCE
-#define _REENTRANT
-
-#if STDC_HEADERS
-#  include <stdlib.h>
-#include <string.h>
-#elif HAVE_STRINGS_H
-#include <strings.h>
-#endif				/*STDC_HEADERS */
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if HAVE_ERRNO_H
-#include <errno.h>
-#endif				/*HAVE_ERRNO_H */
-
-  typedef uintmax_t counter;
-
-#ifndef errno
-/* Some systems #define this! */
-#include <errno.h>
-  extern int errno;
-#endif
-
-#ifndef EXIT_SUCCESS
-#define EXIT_SUCCESS  0
-#define EXIT_FAILURE  1
-#endif
-
-  extern char *xstrerror (int errnum);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif				/* AVM_COMMON_H */

+ 0 - 21
avm/compare.h

@@ -1,21 +0,0 @@
-#ifndef AVM_COMPARE_H
-#define AVM_COMPARE_H 1
-
-#include <avm/lists.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_comparison (list operand, int *fault);
-  extern list avm_binary_comparison (list left_operand, list right_operand, int *fault);
-  extern void avm_initialize_compare ();
-  extern void avm_count_compare ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_COMPARE_H */

+ 0 - 19
avm/complexlib.h

@@ -1,19 +0,0 @@
-#ifndef AVM_LIBCOMPLEX_H
-#define AVM_LIBCOMPLEX_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_complex_call (list function_name, list argument, int *fault);
-  extern list avm_have_complex_call (list function_name, int *fault);
-  extern void avm_initialize_complex ();
-  extern void avm_count_complex ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_LIBCOMPLEX_H */

+ 0 - 20
avm/decons.h

@@ -1,20 +0,0 @@
-#ifndef AVM_DECONS_H
-#define AVM_DECONS_H 1
-
-#include <avm/lists.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_deconstruction (list pointer, list operand, int *fault);
-  extern void avm_initialize_decons ();
-  extern void avm_count_decons ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_DECONS_H */

+ 0 - 26
avm/error.h

@@ -1,26 +0,0 @@
-#ifndef AVM_ERROR_H
-#define AVM_ERROR_H 1
-
-#include <avm/common.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern char *avm_program_name ();
-  extern void avm_set_program_name (char *argv0);
-  extern void avm_warning (char *message);
-  extern void avm_error (char *message);
-  extern void avm_fatal_io_error (char *message, char *filename, int reason);
-  extern void avm_non_fatal_io_error (char *message, char *filename, int reason);
-  extern void avm_internal_error (int code);
-  extern void avm_reclamation_failure (char *entity, counter count);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_ERROR_H */

+ 0 - 25
avm/exmodes.h

@@ -1,25 +0,0 @@
-#ifndef AVM_EXMODES_H
-#define AVM_EXMODES_H 1
-
-#include <avm/lists.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern void avm_interact (list interactor, int step_mode, int ask_to_overwrite_mode, int quiet_mode);
-  extern list avm_recoverable_interact (list interactor, int *fault);
-  extern void avm_byte_transduce (list operator);
-  extern void avm_line_map (list operator);
-  extern void avm_disable_interaction ();
-  extern void avm_trace_interaction ();
-  extern void avm_initialize_exmodes ();
-  extern void avm_count_exmodes ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_EXMODES_H */

+ 0 - 52
avm/farms.h

@@ -1,52 +0,0 @@
-#ifndef AVM_FARMS_H
-#define AVM_FARMS_H 1
-
-#include <avm/lists.h>
-#include <avm/jobs.h>
-#include <avm/servlist.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* number of seconds between status checks on running jobs */
-#define WAIT (time_t) 60
-
-/* number of seconds between reconnection attempts to unresponsive servers */
-#define RETRY (time_t) 300
-
-typedef struct farm_struct *farm;
-
-/* A farm represents a queue of pending jobs whose dependences are
-   resolved. We start by planting the independent (leaf) nodes in a
-   job tree and launching them asynchronously via the harvest
-   function. As each one finishes, its dependent is checked for any
-   remaining dependences and launched if possible, until the whole job
-   is completed in an order consistent with its dependence
-   constraints. */
-
-struct farm_struct
-{
-  job site;            /* the quantum of computation assigned to this farm */
-  server_list runner;  /* the remote server working on this job, if any */
-  flag cache_hit;      /* the server is running with a remotely cached copy of the function site->root */
-  list operand;        /* the argument to the site->root function; this is freed when the farm is freed */
-  farm prev;           /* doubly linked list pointers */
-  farm next;
-};
-
-
-  extern void avm_plant (farm *maggie, job top, int *fault);
-  extern void avm_harvest (farm maggie, flag balanceable, int *fault);
-  extern void avm_abnormally_terminate (farm *maggie);
-  extern void avm_initialize_farms ();
-  extern void avm_count_farms ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_FARMS_H */
-

+ 0 - 19
avm/fftw.h

@@ -1,19 +0,0 @@
-#ifndef AVM_FFTW_H
-#define AVM_FFTW_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_fftw_call (list function_name, list argument, int *fault);
-  extern list avm_have_fftw_call (list function_name, int *fault);
-  extern void avm_initialize_fftw ();
-  extern void avm_count_fftw ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_FFTW_H */

+ 0 - 29
avm/fnames.h

@@ -1,29 +0,0 @@
-#ifndef AVM_FNAMES_H
-#define AVM_FNAMES_H 1
-
-#include <avm/lists.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#define avm_path_separator_character '/'
-#define avm_path_separator_string "/"
-#define avm_root_directory_prefix "/"
-#define avm_current_directory_prefix "./"
-#define avm_parent_directory_prefix "../"
-
-  extern list avm_path_representation (char *path);
-  extern list avm_date_representation (char *path);
-  extern char *avm_path_name (list path);
-  extern void avm_initialize_fnames ();
-  extern void avm_count_fnames ();
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_FNAMES_H */

+ 0 - 22
avm/formin.h

@@ -1,22 +0,0 @@
-#ifndef AVM_FORMIN_H
-#define AVM_FORMIN_H 1
-
-#include <avm/lists.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_preamble_and_contents (FILE * source, char *filename);
-  extern list avm_load (FILE * source, char *filename, int raw);
-  extern void avm_initialize_formin ();
-  extern void avm_count_formin ();
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_FORMIN_H */

+ 0 - 23
avm/formout.h

@@ -1,23 +0,0 @@
-#ifndef AVM_FORMOUT_H
-#define AVM_FORMOUT_H 1
-
-#include <avm/lists.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern void avm_output (FILE * repository, char *filename, list preamble, list contents, int trace_mode);
-  extern void avm_output_as_directed (list data, int ask_to_overwrite_mode, int verbose_mode);
-  extern void avm_put_bytes (list bytes);
-  extern void avm_initialize_formout ();
-  extern void avm_count_formout ();
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_FORMOUT_H */

+ 0 - 19
avm/glpklib.h

@@ -1,19 +0,0 @@
-#ifndef AVM_GLPKLIB_H
-#define AVM_GLPKLIB_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_glpk_call (list function_name, list argument, int *fault);
-  extern list avm_have_glpk_call (list function_name, int *fault);
-  extern void avm_initialize_glpk ();
-  extern void avm_count_glpk ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_GLPKLIB_H */

+ 0 - 19
avm/gsldiflib.h

@@ -1,19 +0,0 @@
-#ifndef AVM_GSLDIFLIB_H
-#define AVM_GSLDIFLIB_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_gsldif_call (list function_name, list argument, int *fault);
-  extern list avm_have_gsldif_call (list function_name, int *fault);
-  extern void avm_initialize_gsldif ();
-  extern void avm_count_gsldif ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_GSLDIFLIB_H */

+ 0 - 19
avm/gslevu.h

@@ -1,19 +0,0 @@
-#ifndef AVM_GSLEVU_H
-#define AVM_GSLEVU_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_gslevu_call (list function_name, list argument, int *fault);
-  extern list avm_have_gslevu_call (list function_name, int *fault);
-  extern void avm_initialize_gslevu ();
-  extern void avm_count_gslevu ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_GSLEVU_H */

+ 0 - 19
avm/gslintlib.h

@@ -1,19 +0,0 @@
-#ifndef AVM_GSLINTLIB_H
-#define AVM_GSLINTLIB_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_gslint_call (list function_name, list argument, int *fault);
-  extern list avm_have_gslint_call (list function_name, int *fault);
-  extern void avm_initialize_gslint ();
-  extern void avm_count_gslint ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_GSLINTLIB_H */

+ 0 - 19
avm/harminv.h

@@ -1,19 +0,0 @@
-#ifndef AVM_LIBHARMINV_H
-#define AVM_LIBHARMINV_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_harminv_call (list function_name, list argument, int *fault);
-  extern list avm_have_harminv_call (list function_name, int *fault);
-  extern void avm_initialize_harminv ();
-  extern void avm_count_harminv ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_LIBHARMINV_H */

+ 0 - 50
avm/instruct.h

@@ -1,50 +0,0 @@
-#ifndef AVM_INSTRUCT_H
-#define AVM_INSTRUCT_H 1
-
-#include <avm/lists.h>
-#include <avm/common.h>
-#include <avm/profile.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  typedef struct instruction_node *instruction;
-
-  struct instruction_node
-  {
-    port client;
-    score sheet;
-    flag remotely_executable;
-    flag non_deterministic;
-    counter granularity;
-    struct avm_packet actor;
-    struct avm_packet datum;
-    instruction dependents;
-  };
-
-  extern int avm_scheduled (list actor_contents, 
-			    counter datum_errors,
-			    list datum_contents,
-			    port client,
-			    instruction *next,
-			    score sheet,
-			    flag remote,
-			    flag balanceable,
-			    counter granularity);
-
-  extern void avm_retire (instruction *done);
-
-  extern void avm_reschedule (instruction *next);
-
-  extern void avm_initialize_instruct ();
-
-  extern void avm_count_instruct ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_INSTRUCT_H */

+ 0 - 45
avm/jobs.h

@@ -1,45 +0,0 @@
-#ifndef AVM_JOBS_H
-#define AVM_JOBS_H 1
-
-#include <avm/lists.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-typedef struct job_struct *job;
-
-/* A job represents an ensemble of computations and their dependence
-   relation as a tree.  The value of a terminal job tree is its root,
-   the value of a non-terminal tree with an empty root is the list of
-   values of its prerequisites, the value of a non-terminal tree with
-   a single celled root is the flattened list of its prerequisites,
-   and the value of a non-terminal tree with an otherwise non-empty
-   root is the root applied to the list of values of its
-   prerequisites. */
-
-struct job_struct
-{
-  list root;             /* this is to be freed when the job is freed */
-  flag running;          /* set when there is a remote server working on it */
-  int dependence;        /* the number of unevaluated prerequisites  */
-  int deficit;           /* used temporarily by the rebalancing algorithm */
-  job dependent;         /* the thing that can't get evaluated until this is */
-  job prerequisites;     /* the things that have to be evaluted before this */
-  job corequisites;      /* things that can be evaluated concurrently on which the dependent also depends */
-};
-
-  extern void avm_free_job (job *front);
-  extern void avm_new_job (job *front, job *back, list root, job dependent, job prerequisites, int dependence, int *fault);
-  extern void avm_queue_job (job *front, job *back, job *top, job dependent);
-  extern list avm_evaluation (job top, flag balanceable, int *fault);
-  extern void avm_initialize_jobs ();
-  extern void avm_count_jobs ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_JOBS_H */

+ 0 - 19
avm/kinsol.h

@@ -1,19 +0,0 @@
-#ifndef AVM_KINSOL_H
-#define AVM_KINSOL_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_kinsol_call (list function_name, list argument, int *fault);
-  extern list avm_have_kinsol_call (list function_name, int *fault);
-  extern void avm_initialize_kinsol ();
-  extern void avm_count_kinsol ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_KINSOL_H */

+ 0 - 19
avm/lapack.h

@@ -1,19 +0,0 @@
-#ifndef AVM_LAPACK_H
-#define AVM_LAPACK_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_lapack_call (list function_name, list argument, int *fault);
-  extern list avm_have_lapack_call (list function_name, int *fault);
-  extern void avm_initialize_lapack ();
-  extern void avm_count_lapack ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_LAPACK_H */

+ 0 - 19
avm/libfuns.h

@@ -1,19 +0,0 @@
-#ifndef AVM_LIBFUNS_H
-#define AVM_LIBFUNS_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_library_call (list library_name, list function_name, list argument, int *fault);
-  extern list avm_have_library_call (list library_name, list function_name, int *fault);
-  extern void avm_initialize_libfuns ();
-  extern void avm_count_libfuns ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_LIBFUNS_H */

+ 0 - 28
avm/listfuns.h

@@ -1,28 +0,0 @@
-#ifndef AVM_LISTFUNS_H
-#define AVM_LISTFUNS_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_reversal (list operand, int *fault);
-  extern list avm_distribution (list operand, int *fault);
-  extern list avm_concatenation (list operand, int *fault);
-  extern list avm_transposition (list operand, int *fault);
-  extern list avm_membership (list operand, int *fault);
-  extern list avm_flattened (list operand, int *fault);
-  extern list avm_binary_membership (list operand, list members, int *fault);
-  extern list avm_measurement (list operand, int *fault);
-  extern list avm_position (list key, list table, int *fault);
-  extern void *avm_value_of_list (list operand, list *message, int *fault);
-  extern list avm_list_of_value (void *contents, size_t size, int *fault);
-  extern void avm_initialize_listfuns ();
-  extern void avm_count_listfuns ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_LISTFUNS_H */

+ 0 - 73
avm/lists.h

@@ -1,73 +0,0 @@
-#ifndef AVM_LISTS_H
-#define AVM_LISTS_H 1
-
-#include <avm/common.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  typedef unsigned short flag;
-
-  struct node;
-  struct avm_packet;
-  struct port_pair;
-
-  typedef struct node *list;
-  typedef struct avm_packet *port;
-  typedef struct port_pair *portal;
-
-  struct port_pair
-  {
-    port left;
-    port right;
-    portal alters;
-  };
-
-  struct avm_packet
-  {
-    port parent;
-    counter errors;
-    portal descendents;
-    list impetus, contents;
-    flag predicating;
-  };
-
-  struct node
-  {
-    list head, tail;
-    counter sharers;		/* reference count */
-    counter known_weight;	/* number of nodes */
-    port facilitator;		/* impetus points back here */
-    int characterization;	/* character it represents */
-    void *value;                /* used by library functions */
-    flag discontiguous;         /* -> not to be combined by comparison */
-    flag internal;		/* -> part of the interpreter */
-    flag characteristic;	/* -> represents a character */
-    list interpretation;	/* virtual code equivalent */
-  };
-
-  extern void avm_dispose (list front);
-  extern list avm_recoverable_join (list left, list right);
-  extern list avm_join (list left, list right);
-  extern list avm_copied (list operand);
-  extern void avm_enqueue (list * front, list *back, list operand);
-  extern void avm_recoverable_enqueue (list *front, list *back, list operand, int *fault);
-  extern counter avm_length (list operand);
-  extern counter avm_recoverable_length (list operand);
-  extern counter avm_area (list operand);
-  extern counter avm_recoverable_area (list operand, int *fault);
-  extern list avm_natural (counter number);
-  extern list avm_recoverable_natural (counter number);
-  extern counter avm_counter (list number);
-  extern void avm_print_list (list operand);
-  extern void avm_initialize_lists ();
-  extern void avm_count_lists ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_LISTS_H */

+ 0 - 19
avm/lpsolve.h

@@ -1,19 +0,0 @@
-#ifndef AVM_LPSOLVE_H
-#define AVM_LPSOLVE_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_lpsolve_call (list function_name, list argument, int *fault);
-  extern list avm_have_lpsolve_call (list function_name, int *fault);
-  extern void avm_initialize_lpsolve ();
-  extern void avm_count_lpsolve ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_LPSOLVE_H */

+ 0 - 29
avm/matcon.h

@@ -1,29 +0,0 @@
-#ifndef AVM_MATCON_H
-#define AVM_MATCON_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern void *avm_vector_of_list (list operand,size_t item_size,list *message,int *fault);
-  extern list avm_list_of_vector (void *vector,int num_items,size_t item_size,int *fault);
-  extern void *avm_matrix_of_list (int square, int upper_triangular, int lower_triangular,int column_major,
-						    list operand,size_t item_size,list *message,int *fault);
-  extern list avm_list_of_matrix (void *matrix,int rows,int cols,size_t item_size,int *fault);
-  extern void *avm_matrix_transposition  (void *matrix, int rows, int cols, size_t item_size);
-  extern void *avm_matrix_reflection  (int upper_triangular, void *matrix, int n, size_t item_size);
-  extern list avm_list_of_packed_matrix (int upper_trianguler,void *operand,int n,size_t item_size, int *fault);
-  extern void *avm_packed_matrix_of_list (int upper_triangular,list operand,int n,size_t item_size,
-							   list *message,int *fault);
-  extern list *avm_row_number_array (counter m,int *fault);
-  extern void avm_dispose_rows (counter m,list *row_number);
-  extern void avm_initialize_matcon ();
-  extern void avm_count_matcon ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_MATCON_H */

+ 0 - 19
avm/mathlib.h

@@ -1,19 +0,0 @@
-#ifndef AVM_LIBMATH_H
-#define AVM_LIBMATH_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_math_call (list function_name, list argument, int *fault);
-  extern list avm_have_math_call (list function_name, int *fault);
-  extern void avm_initialize_math ();
-  extern void avm_count_math ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_LIBMATH_H */

+ 0 - 19
avm/minpack.h

@@ -1,19 +0,0 @@
-#ifndef AVM_MINPACK_H
-#define AVM_MINPACK_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_minpack_call (list function_name, list argument, int *fault);
-  extern list avm_have_minpack_call (list function_name, int *fault);
-  extern void avm_initialize_minpack ();
-  extern void avm_count_minpack ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_MINPACK_H */

+ 0 - 35
avm/mpfr.h

@@ -1,35 +0,0 @@
-#ifndef AVM_MPFR_H
-#define AVM_MPFR_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#if HAVE_MPFR
-#include <mpfr.h>
-#if HAVE_GMP
-#include <gmp.h>
-#include <mpf2mpfr.h>
-#endif
-#endif
-
-#if HAVE_MPFR
-  typedef mpfr_t *avm_mpfr_ptr;
-#else
-  typedef void *avm_mpfr_ptr;
-#endif
-
-  extern list avm_mpfr_call (list function_name, list argument, int *fault);
-  extern list avm_have_mpfr_call (list function_name, int *fault);
-  extern avm_mpfr_ptr avm_mpfr_of_list (list operand, list *message, int *fault);
-  extern list avm_list_of_mpfr (avm_mpfr_ptr x,int *fault);
-  extern void avm_initialize_mpfr ();
-  extern void avm_count_mpfr ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_MPFR_H */

+ 0 - 19
avm/mtwist.h

@@ -1,19 +0,0 @@
-#ifndef AVM_MTWIST_H
-#define AVM_MTWIST_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_mtwist_call (list function_name, list argument, int *fault);
-  extern list avm_have_mtwist_call (list function_name, int *fault);
-  extern void avm_initialize_mtwist ();
-  extern void avm_count_mtwist ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_MTWIST_H */

+ 0 - 44
avm/mwrap.h

@@ -1,44 +0,0 @@
-#ifndef AVM_MWRAP_H
-#define AVM_MWRAP_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#if HAVE_SETJMP
-#include <setjmp.h>
-#else
-  typedef int jmp_buf;
-  extern int setjmp (jmp_buf);
-#endif
-
-  extern jmp_buf *_avm_mwrap_client;
-
-#if HAVE_SETJMP
-#define avm_setjmp() ((_avm_mwrap_client = avm_new_jmp_buf()) ? setjmp(*_avm_mwrap_client) : -1)
-#else
-#define avm_setjmp() 0
-#endif
-
-  extern void avm_clearjmp ();
-  extern void avm_setnonjmp ();
-  extern jmp_buf *avm_new_jmp_buf ();  /* should be called only by way of avm_setjmp() */
-  extern void avm_debug_memory ();
-  extern void avm_dont_debug_memory ();
-  extern inline void avm_manage_memory ();
-  extern inline void avm_dont_manage_memory ();
-  extern void avm_free_managed_memory ();
-  extern void avm_turn_off_stdout ();
-  extern void avm_turn_off_stderr ();
-  extern void avm_turn_on_stdout ();
-  extern void avm_turn_on_stderr ();
-  extern void avm_initialize_mwrap ();
-  extern void avm_count_mwrap ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_MWRAP_H */

+ 0 - 21
avm/portals.h

@@ -1,21 +0,0 @@
-#ifndef AVM_PORTALS_H
-#define AVM_PORTALS_H 1
-
-#include <avm/lists.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern portal avm_new_portal (portal alters);
-  extern void avm_seal (portal fate);
-  extern void avm_initialize_portals ();
-  extern void avm_count_portals ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_PORTALS_H */

+ 0 - 22
avm/ports.h

@@ -1,22 +0,0 @@
-#ifndef AVM_PORTS_H
-#define AVM_PORTS_H 1
-
-#include <avm/common.h>
-#include <avm/lists.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern port avm_newport (counter errors, port parent, int predicating);
-  extern void avm_sever (port appendage);
-  extern void avm_initialize_ports ();
-  extern void avm_count_ports ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_PORTS_H */

+ 0 - 36
avm/profile.h

@@ -1,36 +0,0 @@
-#ifndef AVM_PROFILE_H
-#define AVM_PROFILE_H 1
-
-#include <avm/common.h>
-#include <avm/lists.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  /* Anyone who can figure out how to change the unsigned long fields
-     to counter types without causing profile information to be
-     incorrectly recorded or reported should do it. */
-
-  struct score_node
-  {
-    list team;
-    unsigned long calls;
-    unsigned long reductions;
-    struct score_node *league;
-  };
-
-  typedef struct score_node *score;
-
-  extern score avm_entries (list team, list * message, int *fault);
-  extern void avm_tally (char *filename);
-  extern void avm_initialize_profile ();
-  extern void avm_count_profile ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_PROFILE_H */

+ 0 - 23
avm/rawio.h

@@ -1,23 +0,0 @@
-#ifndef AVM_RAWIO_H
-#define AVM_RAWIO_H 1
-
-#include <avm/lists.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern void avm_send_list (FILE * repository, list operand, char *filename);
-  extern void avm_recoverable_send_list (int sockfd, list operand, char **crc, int *timeout, int *closed, int *fault);
-  extern list avm_recoverable_received_list (int sockfd, char **crc, int *timeout, int *closed, int *fault);
-  extern list avm_received_list (FILE *object, char *filename);
-  extern void avm_initialize_rawio ();
-  extern void avm_count_rawio ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_RAWIO_H */

+ 0 - 43
avm/remote.h

@@ -1,43 +0,0 @@
-#ifndef AVM_REMOTE_H
-#define AVM_REMOTE_H 1
-
-#include <avm/lists.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern int avm_remotely_reduced (list operator, 
-				   list vacuous_case, 
-				   list operand, 
-				   list *result, 
-				   counter granularity,
-				   flag balanceable,
-				   int *fault);
-
-  extern int avm_remotely_mapped (list operator, list operand, list *result, counter granularity, int *fault);
-
-  extern int avm_remotely_sorted (list operator, list operand, list *result, counter granularity, int *fault);
-
-  extern int avm_remotely_constructed (list left_side, list right_side, list operand, list *result, int *fault);
-
-  extern void avm_register_server (char *host, int port_number, int *fault);
-
-  extern void avm_initialize_remote ();
-
-  extern void avm_count_remote ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_REMOTE_H */
-
-
-
-
-
-
-

+ 0 - 19
avm/rmathlib.h

@@ -1,19 +0,0 @@
-#ifndef AVM_RMATHLIB_H
-#define AVM_RMATHLIB_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_rmath_call (list function_name, list argument, int *fault);
-  extern list avm_have_rmath_call (list function_name, int *fault);
-  extern void avm_initialize_rmath ();
-  extern void avm_count_rmath ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_RMATHLIB_H */

+ 0 - 65
avm/servlist.h

@@ -1,65 +0,0 @@
-#ifndef AVM_SERVLIST_H
-#define AVM_SERVLIST_H 1
-
-#include <avm/lists.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#define AVM_MSG_RESET "R"
-#define AVM_MSG_STATUS "S"
-#define AVM_DEFAULT_TIMEOUT 10
-
-typedef struct server_list_struct *server_list;
-
-/* A server list stores information about the registered servers. */
-
-struct server_list_struct
-{
-  int data_fd;         /* socket descriptor for the data path; set to blocking with a short timeout */
-  int status_fd;       /* socket descriptor for the control path; set to non-blocking */
-  char *host;          /* host name passed to getaddrinfo */
-  char *data_port;     /* data path port number passed to getaddrinfo */
-  char *status_port;   /* control path port number passed to getaddrinfo; usually the next consecutive port */
-  flag opened;         /* socket descriptors are valid */
-  flag connected;      /* socket descriptors are valid and the connection has been established */
-  list cache;          /* the last function sent to the server */
-  time_t state_change; /* the last time it changed among busy, idle, and dead, or had its status requested */
-  flag queried;        /* a status requested hasn't been answered yet */
-  time_t request_time; /* the last time a status request was sent */
-  char *expected_crc;  /* cyclic redundancy check for the last job sent to this server */
-  double load_metric;  /* returned by the remote server in status requests and used for load balancing */
-  server_list peer;    /* points to next server in a linked list */
-};
-
-struct statpacket      /* sent by a server in response to a status request */
-{
-  double load_average;
-  unsigned short protocol_version;
-  char payload[128];                 /* in protocol version 0, the null terminated crc for the running job */
-};
-
-  extern int avm_offline ();
-  extern void avm_count_servlist ();
-  extern void avm_initialize_servlist ();
-  extern int avm_connectable (server_list server);
-  extern void avm_wait_for_event (time_t interval);
-  extern void avm_watch_server (server_list server);
-  extern void avm_flush_server (server_list server);
-  extern void avm_release_server (server_list *server);
-  extern int avm_writable (server_list server, int *fault);
-  extern void avm_unregister_server (server_list *servers);
-  extern int avm_readable (server_list *server, int *fault);
-  extern int avm_registered_server (char *host, int port_number);
-  extern server_list avm_revived_server (time_t interval, int *fault);
-  extern server_list avm_acquired_server (time_t interval, int *fault);
-  extern int avm_unresponsive (server_list *server, time_t interval, list *value, int *fault);
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_SERVLIST_H */

+ 0 - 19
avm/umf.h

@@ -1,19 +0,0 @@
-#ifndef AVM_UMF_H
-#define AVM_UMF_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_umf_call (list function_name, list argument, int *fault);
-  extern list avm_have_umf_call (list function_name, int *fault);
-  extern void avm_initialize_umf ();
-  extern void avm_count_umf ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_UMF_H */

+ 0 - 27
avm/vglue.h

@@ -1,27 +0,0 @@
-#ifndef AVM_VGLUE_H
-#define AVM_VGLUE_H 1
-
-#include <avm/lists.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern list avm_compose (list operator, list preprocessor, int *fault);
-  extern list avm_map (list operator, int *fault);
-  extern list avm_reduce (list operator, int *fault);
-  extern list avm_sort (list operator, int *fault);
-  extern list avm_merge (list predicate, int *fault);
-  extern void avm_initialize_vglue ();
-  extern void avm_count_vglue ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_VGLUE_H */
-
-
-

+ 0 - 20
avm/vman.h

@@ -1,20 +0,0 @@
-#ifndef AVM_VMAN_H
-#define AVM_VMAN_H 1
-
-#include <avm/common.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-  extern void avm_set_version (char *number);
-  extern int avm_prior_to_version (char *number);
-  extern char *avm_version ();
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif				/* !AVM_VMAN_H */

+ 0 - 32
avram.lsm.in

@@ -1,32 +0,0 @@
-Begin3
-Title:		avram
-Version:	@VERSION@
-Entered-date:	@ISODATE@
-Description:	An acronym for "Applicative ViRtuAl Machine", avram
-is a virtual machine code interpreter. It reads an input file
-containing a user-supplied application expressed in virtual machine
-code, and executes it on the host machine. Notable features are strong
-support for functional programming operations (e.g., list processing),
-interoperability of virtual code applications with other console
-applications or shells through libexpect, the ability to package
-virtual code applications conveniently as self contained shell
-scripts, and a choice of operating modes providing for either a simple
-high-level interface to files, environment variables and command line
-arguments, or various styles of stateless or persistent stream
-processors (a.k.a. filters). The intended audience is writers of
-compilers for programming, scripting, or special purpose languages,
-whose projects stand to gain portability and ease of implementation.
-The package includes a toy compiler for a simple lisp-like language
-as a proof of concept.
-@configure_input@
-Keywords:	[virtual machine functional programming interpreter]
-Author: 	[email protected] (Dennis Furey)
-Maintained-by:	[email protected] (Dennis Furey)
-Primary-site:	http://www.lsbu.ac.uk/~fureyd/avram
-		1.8M avram-@[email protected]
-		1449  avram.lsm
-Alternate-site: 
-Original-site:  
-Platforms:      GNU/Linux
-Copying-policy:	GNU copyleft
-End

+ 0 - 61
avram.spec.in

@@ -1,61 +0,0 @@
-%define name	avram
-%define version @VERSION@
-%define release 1
-%define builddir $RPM_BUILD_DIR/%{name}-%{version}
-
-Name:		%{name}
-Version:	%{version}
-Release:	%{release}
-Vendor:		Dennis Furey 
-Packager:	Dennis Furey [email protected]
-URL:		http://www.lsbu.ac.uk/~fureyd/avram
-Source:         %{name}-%{version}.tar.gz
-#Patch:		
-Group:		Application/Generic
-Copyright:	GPL
-#Icon:		
-#Requires:	
-BuildRoot:	/var/tmp/%{name}-%{version}
-Summary:	applicative virtual machine code interpreter
-%description
-An acronym for "Applicative ViRtuAl Machine", avram is a virtual
-machine code interpreter. It reads an input file containing a
-user-supplied application expressed in virtual machine code, and
-executes it on the host machine. Notable features are strong support
-for functional programming operations (e.g., list processing),
-interoperability of virtual code applications with other console
-applications or shells through libexpect, the ability to package
-virtual code applications conveniently as self contained shell
-scripts, and a choice of operating modes providing for either a simple
-high-level interface to files, environment variables and command line
-arguments, or various styles of stateless or persistent stream
-processors (a.k.a. filters). The intended audience is writers of
-compilers for programming, scripting, or special purpose languages,
-whose projects stand to gain portability and ease of implementation.
-The package includes a toy compiler for a simple lisp-like language
-as a proof of concept.
-@configure_input@		
-%prep
-%setup -n %{name}-%{version} 
-#%patch -p1
-
-%build
-CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{_prefix}
-make
-
-%install
-if [ -d $RPM_BUILD_ROOT ]; then rm -rf $RPM_BUILD_ROOT; fi
-mkdir -p $RPM_BUILD_ROOT
-make install DESTDIR=$RPM_BUILD_ROOT
-# Build the file-list automagically :)
-cd $RPM_BUILD_ROOT
-find . -type d | sed '1,2d;s,^\.,\%attr(-\,root\,root) \%dir ,' > $RPM_BUILD_DIR/file.list.%{name}
-find . -type f | sed 's,^\.,\%attr(-\,root\,root) ,' >> $RPM_BUILD_DIR/file.list.%{name}
-find . -type l | sed 's,^\.,\%attr(-\,root\,root) ,' >> $RPM_BUILD_DIR/file.list.%{name}
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-rm ../file.list.%{name}
-
-%files -f ../file.list.%{name}
-%doc README

+ 0 - 142
compile

@@ -1,142 +0,0 @@
-#! /bin/sh
-# Wrapper for compilers which do not understand `-c -o'.
-
-scriptversion=2005-05-14.22
-
-# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
-# Written by Tom Tromey <[email protected]>.
-#
-# 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 2, 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, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# This file is maintained in Automake, please report
-# bugs to <[email protected]> or send patches to
-# <[email protected]>.
-
-case $1 in
-  '')
-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
-  -h | --h*)
-    cat <<\EOF
-Usage: compile [--help] [--version] PROGRAM [ARGS]
-
-Wrapper for compilers which do not understand `-c -o'.
-Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
-arguments, and rename the output as expected.
-
-If you are trying to build a whole package this is not the
-right script to run: please start by reading the file `INSTALL'.
-
-Report bugs to <[email protected]>.
-EOF
-    exit $?
-    ;;
-  -v | --v*)
-    echo "compile $scriptversion"
-    exit $?
-    ;;
-esac
-
-ofile=
-cfile=
-eat=
-
-for arg
-do
-  if test -n "$eat"; then
-    eat=
-  else
-    case $1 in
-      -o)
-	# configure might choose to run compile as `compile cc -o foo foo.c'.
-	# So we strip `-o arg' only if arg is an object.
-	eat=1
-	case $2 in
-	  *.o | *.obj)
-	    ofile=$2
-	    ;;
-	  *)
-	    set x "$@" -o "$2"
-	    shift
-	    ;;
-	esac
-	;;
-      *.c)
-	cfile=$1
-	set x "$@" "$1"
-	shift
-	;;
-      *)
-	set x "$@" "$1"
-	shift
-	;;
-    esac
-  fi
-  shift
-done
-
-if test -z "$ofile" || test -z "$cfile"; then
-  # If no `-o' option was seen then we might have been invoked from a
-  # pattern rule where we don't need one.  That is ok -- this is a
-  # normal compilation that the losing compiler can handle.  If no
-  # `.c' file was seen then we are probably linking.  That is also
-  # ok.
-  exec "$@"
-fi
-
-# Name of file we expect compiler to create.
-cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
-
-# Create the lock directory.
-# Note: use `[/.-]' here to ensure that we don't use the same name
-# that we are using for the .o file.  Also, base the name on the expected
-# object file name, since that is what matters with a parallel build.
-lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
-while true; do
-  if mkdir "$lockdir" >/dev/null 2>&1; then
-    break
-  fi
-  sleep 1
-done
-# FIXME: race condition here if user kills between mkdir and trap.
-trap "rmdir '$lockdir'; exit 1" 1 2 15
-
-# Run the compile.
-"$@"
-ret=$?
-
-if test -f "$cofile"; then
-  mv "$cofile" "$ofile"
-elif test -f "${cofile}bj"; then
-  mv "${cofile}bj" "$ofile"
-fi
-
-rmdir "$lockdir"
-exit $ret
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:

+ 0 - 1432
config.guess

@@ -1,1432 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-
-timestamp='2004-01-05'
-
-# This file 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 2 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, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Originally written by Per Bothner <[email protected]>.
-# Please send patches to <[email protected]>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub.  If it succeeds, it prints the system name on stdout, and
-# exits with 0.  Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <[email protected]>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit 0 ;;
-    --version | -v )
-       echo "$version" ; exit 0 ;;
-    --help | --h* | -h )
-       echo "$usage"; exit 0 ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )	# Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help" >&2
-       exit 1 ;;
-    * )
-       break ;;
-  esac
-done
-
-if test $# != 0; then
-  echo "$me: too many arguments$help" >&2
-  exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > $dummy.c ;
-	for c in cc gcc c89 c99 ; do
-	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
-	     CC_FOR_BUILD="$c"; break ;
-	  fi ;
-	done ;
-	if test x"$CC_FOR_BUILD" = x ; then
-	  CC_FOR_BUILD=no_compiler_found ;
-	fi
-	;;
- ,,*)   CC_FOR_BUILD=$CC ;;
- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# ([email protected] 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
-	PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-    *:NetBSD:*:*)
-	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
-	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
-	# switched to ELF, *-*-netbsd* would select the old
-	# object file format.  This provides both forward
-	# compatibility and a consistent mechanism for selecting the
-	# object file format.
-	#
-	# Note: NetBSD doesn't particularly care about the vendor
-	# portion of the name.  We always set it to "unknown".
-	sysctl="sysctl -n hw.machine_arch"
-	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
-	case "${UNAME_MACHINE_ARCH}" in
-	    armeb) machine=armeb-unknown ;;
-	    arm*) machine=arm-unknown ;;
-	    sh3el) machine=shl-unknown ;;
-	    sh3eb) machine=sh-unknown ;;
-	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
-	esac
-	# The Operating System including object format, if it has switched
-	# to ELF recently, or will in the future.
-	case "${UNAME_MACHINE_ARCH}" in
-	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-		eval $set_cc_for_build
-		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-			| grep __ELF__ >/dev/null
-		then
-		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
-		    # Return netbsd for either.  FIX?
-		    os=netbsd
-		else
-		    os=netbsdelf
-		fi
-		;;
-	    *)
-	        os=netbsd
-		;;
-	esac
-	# The OS release
-	# Debian GNU/NetBSD machines have a different userland, and
-	# thus, need a distinct triplet. However, they do not need
-	# kernel version information, so it can be replaced with a
-	# suitable tag, in the style of linux-gnu.
-	case "${UNAME_VERSION}" in
-	    Debian*)
-		release='-gnu'
-		;;
-	    *)
-		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-		;;
-	esac
-	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
-	# contains redundant information, the shorter form:
-	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-	echo "${machine}-${os}${release}"
-	exit 0 ;;
-    amiga:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    arc:OpenBSD:*:*)
-	echo mipsel-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    hp300:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mac68k:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    macppc:OpenBSD:*:*)
-	echo powerpc-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mvme68k:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mvme88k:OpenBSD:*:*)
-	echo m88k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mvmeppc:OpenBSD:*:*)
-	echo powerpc-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    pegasos:OpenBSD:*:*)
-	echo powerpc-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    pmax:OpenBSD:*:*)
-	echo mipsel-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    sgi:OpenBSD:*:*)
-	echo mipseb-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    sun3:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    wgrisc:OpenBSD:*:*)
-	echo mipsel-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    *:OpenBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    alpha:OSF1:*:*)
-	if test $UNAME_RELEASE = "V4.0"; then
-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-	fi
-	# According to Compaq, /usr/sbin/psrinfo has been available on
-	# OSF/1 and Tru64 systems produced since 1995.  I hope that
-	# covers most systems running today.  This code pipes the CPU
-	# types through head -n 1, so we only detect the type of CPU 0.
-	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
-	case "$ALPHA_CPU_TYPE" in
-	    "EV4 (21064)")
-		UNAME_MACHINE="alpha" ;;
-	    "EV4.5 (21064)")
-		UNAME_MACHINE="alpha" ;;
-	    "LCA4 (21066/21068)")
-		UNAME_MACHINE="alpha" ;;
-	    "EV5 (21164)")
-		UNAME_MACHINE="alphaev5" ;;
-	    "EV5.6 (21164A)")
-		UNAME_MACHINE="alphaev56" ;;
-	    "EV5.6 (21164PC)")
-		UNAME_MACHINE="alphapca56" ;;
-	    "EV5.7 (21164PC)")
-		UNAME_MACHINE="alphapca57" ;;
-	    "EV6 (21264)")
-		UNAME_MACHINE="alphaev6" ;;
-	    "EV6.7 (21264A)")
-		UNAME_MACHINE="alphaev67" ;;
-	    "EV6.8CB (21264C)")
-		UNAME_MACHINE="alphaev68" ;;
-	    "EV6.8AL (21264B)")
-		UNAME_MACHINE="alphaev68" ;;
-	    "EV6.8CX (21264D)")
-		UNAME_MACHINE="alphaev68" ;;
-	    "EV6.9A (21264/EV69A)")
-		UNAME_MACHINE="alphaev69" ;;
-	    "EV7 (21364)")
-		UNAME_MACHINE="alphaev7" ;;
-	    "EV7.9 (21364A)")
-		UNAME_MACHINE="alphaev79" ;;
-	esac
-	# A Vn.n version is a released version.
-	# A Tn.n version is a released field test version.
-	# A Xn.n version is an unreleased experimental baselevel.
-	# 1.2 uses "1.2" for uname -r.
-	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	exit 0 ;;
-    Alpha*:OpenVMS:*:*)
-	echo alpha-hp-vms
-	exit 0 ;;
-    Alpha\ *:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# Should we change UNAME_MACHINE based on the output of uname instead
-	# of the specific Alpha model?
-	echo alpha-pc-interix
-	exit 0 ;;
-    21064:Windows_NT:50:3)
-	echo alpha-dec-winnt3.5
-	exit 0 ;;
-    Amiga*:UNIX_System_V:4.0:*)
-	echo m68k-unknown-sysv4
-	exit 0;;
-    *:[Aa]miga[Oo][Ss]:*:*)
-	echo ${UNAME_MACHINE}-unknown-amigaos
-	exit 0 ;;
-    *:[Mm]orph[Oo][Ss]:*:*)
-	echo ${UNAME_MACHINE}-unknown-morphos
-	exit 0 ;;
-    *:OS/390:*:*)
-	echo i370-ibm-openedition
-	exit 0 ;;
-    *:OS400:*:*)
-        echo powerpc-ibm-os400
-	exit 0 ;;
-    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-	echo arm-acorn-riscix${UNAME_RELEASE}
-	exit 0;;
-    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-	echo hppa1.1-hitachi-hiuxmpp
-	exit 0;;
-    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
-	# [email protected] (Earle F. Ake) contributed MIS and NILE.
-	if test "`(/bin/universe) 2>/dev/null`" = att ; then
-		echo pyramid-pyramid-sysv3
-	else
-		echo pyramid-pyramid-bsd
-	fi
-	exit 0 ;;
-    NILE*:*:*:dcosx)
-	echo pyramid-pyramid-svr4
-	exit 0 ;;
-    DRS?6000:unix:4.0:6*)
-	echo sparc-icl-nx6
-	exit 0 ;;
-    DRS?6000:UNIX_SV:4.2*:7*)
-	case `/usr/bin/uname -p` in
-	    sparc) echo sparc-icl-nx7 && exit 0 ;;
-	esac ;;
-    sun4H:SunOS:5.*:*)
-	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
-    i86pc:SunOS:5.*:*)
-	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
-    sun4*:SunOS:6*:*)
-	# According to config.sub, this is the proper way to canonicalize
-	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
-	# it's likely to be more like Solaris than SunOS4.
-	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
-    sun4*:SunOS:*:*)
-	case "`/usr/bin/arch -k`" in
-	    Series*|S4*)
-		UNAME_RELEASE=`uname -v`
-		;;
-	esac
-	# Japanese Language versions have a version number like `4.1.3-JL'.
-	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-	exit 0 ;;
-    sun3*:SunOS:*:*)
-	echo m68k-sun-sunos${UNAME_RELEASE}
-	exit 0 ;;
-    sun*:*:4.2BSD:*)
-	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
-	case "`/bin/arch`" in
-	    sun3)
-		echo m68k-sun-sunos${UNAME_RELEASE}
-		;;
-	    sun4)
-		echo sparc-sun-sunos${UNAME_RELEASE}
-		;;
-	esac
-	exit 0 ;;
-    aushp:SunOS:*:*)
-	echo sparc-auspex-sunos${UNAME_RELEASE}
-	exit 0 ;;
-    # The situation for MiNT is a little confusing.  The machine name
-    # can be virtually everything (everything which is not
-    # "atarist" or "atariste" at least should have a processor
-    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
-    # to the lowercase version "mint" (or "freemint").  Finally
-    # the system name "TOS" denotes a system which is actually not
-    # MiNT.  But MiNT is downward compatible to TOS, so this should
-    # be no problem.
-    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
-	exit 0 ;;
-    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-        exit 0 ;;
-    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
-	exit 0 ;;
-    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit 0 ;;
-    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit 0 ;;
-    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit 0 ;;
-    powerpc:machten:*:*)
-	echo powerpc-apple-machten${UNAME_RELEASE}
-	exit 0 ;;
-    RISC*:Mach:*:*)
-	echo mips-dec-mach_bsd4.3
-	exit 0 ;;
-    RISC*:ULTRIX:*:*)
-	echo mips-dec-ultrix${UNAME_RELEASE}
-	exit 0 ;;
-    VAX*:ULTRIX*:*:*)
-	echo vax-dec-ultrix${UNAME_RELEASE}
-	exit 0 ;;
-    2020:CLIX:*:* | 2430:CLIX:*:*)
-	echo clipper-intergraph-clix${UNAME_RELEASE}
-	exit 0 ;;
-    mips:*:*:UMIPS | mips:*:*:RISCos)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h>  /* for printf() prototype */
-	int main (int argc, char *argv[]) {
-#else
-	int main (argc, argv) int argc; char *argv[]; {
-#endif
-	#if defined (host_mips) && defined (MIPSEB)
-	#if defined (SYSTYPE_SYSV)
-	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
-	#endif
-	#if defined (SYSTYPE_SVR4)
-	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
-	#endif
-	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
-	#endif
-	#endif
-	  exit (-1);
-	}
-EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c \
-	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
-	  && exit 0
-	echo mips-mips-riscos${UNAME_RELEASE}
-	exit 0 ;;
-    Motorola:PowerMAX_OS:*:*)
-	echo powerpc-motorola-powermax
-	exit 0 ;;
-    Motorola:*:4.3:PL8-*)
-	echo powerpc-harris-powermax
-	exit 0 ;;
-    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-	echo powerpc-harris-powermax
-	exit 0 ;;
-    Night_Hawk:Power_UNIX:*:*)
-	echo powerpc-harris-powerunix
-	exit 0 ;;
-    m88k:CX/UX:7*:*)
-	echo m88k-harris-cxux7
-	exit 0 ;;
-    m88k:*:4*:R4*)
-	echo m88k-motorola-sysv4
-	exit 0 ;;
-    m88k:*:3*:R3*)
-	echo m88k-motorola-sysv3
-	exit 0 ;;
-    AViiON:dgux:*:*)
-        # DG/UX returns AViiON for all architectures
-        UNAME_PROCESSOR=`/usr/bin/uname -p`
-	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
-	then
-	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-	       [ ${TARGET_BINARY_INTERFACE}x = x ]
-	    then
-		echo m88k-dg-dgux${UNAME_RELEASE}
-	    else
-		echo m88k-dg-dguxbcs${UNAME_RELEASE}
-	    fi
-	else
-	    echo i586-dg-dgux${UNAME_RELEASE}
-	fi
- 	exit 0 ;;
-    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
-	echo m88k-dolphin-sysv3
-	exit 0 ;;
-    M88*:*:R3*:*)
-	# Delta 88k system running SVR3
-	echo m88k-motorola-sysv3
-	exit 0 ;;
-    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-	echo m88k-tektronix-sysv3
-	exit 0 ;;
-    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-	echo m68k-tektronix-bsd
-	exit 0 ;;
-    *:IRIX*:*:*)
-	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-	exit 0 ;;
-    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
-	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
-    i*86:AIX:*:*)
-	echo i386-ibm-aix
-	exit 0 ;;
-    ia64:AIX:*:*)
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
-	else
-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-	fi
-	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-	exit 0 ;;
-    *:AIX:2:3)
-	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-		eval $set_cc_for_build
-		sed 's/^		//' << EOF >$dummy.c
-		#include <sys/systemcfg.h>
-
-		main()
-			{
-			if (!__power_pc())
-				exit(1);
-			puts("powerpc-ibm-aix3.2.5");
-			exit(0);
-			}
-EOF
-		$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
-		echo rs6000-ibm-aix3.2.5
-	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-		echo rs6000-ibm-aix3.2.4
-	else
-		echo rs6000-ibm-aix3.2
-	fi
-	exit 0 ;;
-    *:AIX:*:[45])
-	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
-		IBM_ARCH=rs6000
-	else
-		IBM_ARCH=powerpc
-	fi
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
-	else
-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-	fi
-	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-	exit 0 ;;
-    *:AIX:*:*)
-	echo rs6000-ibm-aix
-	exit 0 ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-	echo romp-ibm-bsd4.4
-	exit 0 ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-	exit 0 ;;                           # report: romp-ibm BSD 4.3
-    *:BOSX:*:*)
-	echo rs6000-bull-bosx
-	exit 0 ;;
-    DPX/2?00:B.O.S.:*:*)
-	echo m68k-bull-sysv3
-	exit 0 ;;
-    9000/[34]??:4.3bsd:1.*:*)
-	echo m68k-hp-bsd
-	exit 0 ;;
-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-	echo m68k-hp-bsd4.4
-	exit 0 ;;
-    9000/[34678]??:HP-UX:*:*)
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	case "${UNAME_MACHINE}" in
-	    9000/31? )            HP_ARCH=m68000 ;;
-	    9000/[34]?? )         HP_ARCH=m68k ;;
-	    9000/[678][0-9][0-9])
-		if [ -x /usr/bin/getconf ]; then
-		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                    case "${sc_cpu_version}" in
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                      532)                      # CPU_PA_RISC2_0
-                        case "${sc_kernel_bits}" in
-                          32) HP_ARCH="hppa2.0n" ;;
-                          64) HP_ARCH="hppa2.0w" ;;
-			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                        esac ;;
-                    esac
-		fi
-		if [ "${HP_ARCH}" = "" ]; then
-		    eval $set_cc_for_build
-		    sed 's/^              //' << EOF >$dummy.c
-
-              #define _HPUX_SOURCE
-              #include <stdlib.h>
-              #include <unistd.h>
-
-              int main ()
-              {
-              #if defined(_SC_KERNEL_BITS)
-                  long bits = sysconf(_SC_KERNEL_BITS);
-              #endif
-                  long cpu  = sysconf (_SC_CPU_VERSION);
-
-                  switch (cpu)
-              	{
-              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-              	case CPU_PA_RISC2_0:
-              #if defined(_SC_KERNEL_BITS)
-              	    switch (bits)
-              		{
-              		case 64: puts ("hppa2.0w"); break;
-              		case 32: puts ("hppa2.0n"); break;
-              		default: puts ("hppa2.0"); break;
-              		} break;
-              #else  /* !defined(_SC_KERNEL_BITS) */
-              	    puts ("hppa2.0"); break;
-              #endif
-              	default: puts ("hppa1.0"); break;
-              	}
-                  exit (0);
-              }
-EOF
-		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
-		    test -z "$HP_ARCH" && HP_ARCH=hppa
-		fi ;;
-	esac
-	if [ ${HP_ARCH} = "hppa2.0w" ]
-	then
-	    # avoid double evaluation of $set_cc_for_build
-	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
-	    then
-		HP_ARCH="hppa2.0w"
-	    else
-		HP_ARCH="hppa64"
-	    fi
-	fi
-	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-	exit 0 ;;
-    ia64:HP-UX:*:*)
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	echo ia64-hp-hpux${HPUX_REV}
-	exit 0 ;;
-    3050*:HI-UX:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <unistd.h>
-	int
-	main ()
-	{
-	  long cpu = sysconf (_SC_CPU_VERSION);
-	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
-	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
-	     results, however.  */
-	  if (CPU_IS_PA_RISC (cpu))
-	    {
-	      switch (cpu)
-		{
-		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
-		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
-		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
-		  default: puts ("hppa-hitachi-hiuxwe2"); break;
-		}
-	    }
-	  else if (CPU_IS_HP_MC68K (cpu))
-	    puts ("m68k-hitachi-hiuxwe2");
-	  else puts ("unknown-hitachi-hiuxwe2");
-	  exit (0);
-	}
-EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
-	echo unknown-hitachi-hiuxwe2
-	exit 0 ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
-	echo hppa1.1-hp-bsd
-	exit 0 ;;
-    9000/8??:4.3bsd:*:*)
-	echo hppa1.0-hp-bsd
-	exit 0 ;;
-    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-	echo hppa1.0-hp-mpeix
-	exit 0 ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
-	echo hppa1.1-hp-osf
-	exit 0 ;;
-    hp8??:OSF1:*:*)
-	echo hppa1.0-hp-osf
-	exit 0 ;;
-    i*86:OSF1:*:*)
-	if [ -x /usr/sbin/sysversion ] ; then
-	    echo ${UNAME_MACHINE}-unknown-osf1mk
-	else
-	    echo ${UNAME_MACHINE}-unknown-osf1
-	fi
-	exit 0 ;;
-    parisc*:Lites*:*:*)
-	echo hppa1.1-hp-lites
-	exit 0 ;;
-    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-	echo c1-convex-bsd
-        exit 0 ;;
-    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
-	if getsysinfo -f scalar_acc
-	then echo c32-convex-bsd
-	else echo c2-convex-bsd
-	fi
-        exit 0 ;;
-    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-	echo c34-convex-bsd
-        exit 0 ;;
-    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-	echo c38-convex-bsd
-        exit 0 ;;
-    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-	echo c4-convex-bsd
-        exit 0 ;;
-    CRAY*Y-MP:*:*:*)
-	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
-    CRAY*[A-Z]90:*:*:*)
-	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
-	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-	      -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
-    CRAY*TS:*:*:*)
-	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
-    CRAY*T3E:*:*:*)
-	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
-    CRAY*SV1:*:*:*)
-	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
-    *:UNICOS/mp:*:*)
-	echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
-    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit 0 ;;
-    5000:UNIX_System_V:4.*:*)
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit 0 ;;
-    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-	exit 0 ;;
-    sparc*:BSD/OS:*:*)
-	echo sparc-unknown-bsdi${UNAME_RELEASE}
-	exit 0 ;;
-    *:BSD/OS:*:*)
-	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-	exit 0 ;;
-    *:FreeBSD:*:*)
-	# Determine whether the default compiler uses glibc.
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <features.h>
-	#if __GLIBC__ >= 2
-	LIBC=gnu
-	#else
-	LIBC=
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
-	# GNU/KFreeBSD systems have a "k" prefix to indicate we are using
-	# FreeBSD's kernel, but not the complete OS.
-	case ${LIBC} in gnu) kernel_only='k' ;; esac
-	echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
-	exit 0 ;;
-    i*:CYGWIN*:*)
-	echo ${UNAME_MACHINE}-pc-cygwin
-	exit 0 ;;
-    i*:MINGW*:*)
-	echo ${UNAME_MACHINE}-pc-mingw32
-	exit 0 ;;
-    i*:PW*:*)
-	echo ${UNAME_MACHINE}-pc-pw32
-	exit 0 ;;
-    x86:Interix*:[34]*)
-	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
-	exit 0 ;;
-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-	echo i${UNAME_MACHINE}-pc-mks
-	exit 0 ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-	# UNAME_MACHINE based on the output of uname instead of i386?
-	echo i586-pc-interix
-	exit 0 ;;
-    i*:UWIN*:*)
-	echo ${UNAME_MACHINE}-pc-uwin
-	exit 0 ;;
-    p*:CYGWIN*:*)
-	echo powerpcle-unknown-cygwin
-	exit 0 ;;
-    prep*:SunOS:5.*:*)
-	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
-    *:GNU:*:*)
-	# the GNU system
-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-	exit 0 ;;
-    *:GNU/*:*:*)
-	# other systems with GNU libc and userland
-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
-	exit 0 ;;
-    i*86:Minix:*:*)
-	echo ${UNAME_MACHINE}-pc-minix
-	exit 0 ;;
-    arm*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
-    cris:Linux:*:*)
-	echo cris-axis-linux-gnu
-	exit 0 ;;
-    ia64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
-    m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
-    mips:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#undef CPU
-	#undef mips
-	#undef mipsel
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=mipsel
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=mips
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
-	;;
-    mips64:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#undef CPU
-	#undef mips64
-	#undef mips64el
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=mips64el
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=mips64
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
-	;;
-    ppc:Linux:*:*)
-	echo powerpc-unknown-linux-gnu
-	exit 0 ;;
-    ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-gnu
-	exit 0 ;;
-    alpha:Linux:*:*)
-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-	  EV5)   UNAME_MACHINE=alphaev5 ;;
-	  EV56)  UNAME_MACHINE=alphaev56 ;;
-	  PCA56) UNAME_MACHINE=alphapca56 ;;
-	  PCA57) UNAME_MACHINE=alphapca56 ;;
-	  EV6)   UNAME_MACHINE=alphaev6 ;;
-	  EV67)  UNAME_MACHINE=alphaev67 ;;
-	  EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
-	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
-	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
-	exit 0 ;;
-    parisc:Linux:*:* | hppa:Linux:*:*)
-	# Look for CPU level
-	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
-	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
-	  *)    echo hppa-unknown-linux-gnu ;;
-	esac
-	exit 0 ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-gnu
-	exit 0 ;;
-    s390:Linux:*:* | s390x:Linux:*:*)
-	echo ${UNAME_MACHINE}-ibm-linux
-	exit 0 ;;
-    sh64*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
-    sh*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
-    sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
-    x86_64:Linux:*:*)
-	echo x86_64-unknown-linux-gnu
-	exit 0 ;;
-    i*86:Linux:*:*)
-	# The BFD linker knows what the default object file format is, so
-	# first see if it will tell us. cd to the root directory to prevent
-	# problems with other programs or directories called `ld' in the path.
-	# Set LC_ALL=C to ensure ld outputs messages in English.
-	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
-			 | sed -ne '/supported targets:/!d
-				    s/[ 	][ 	]*/ /g
-				    s/.*supported targets: *//
-				    s/ .*//
-				    p'`
-        case "$ld_supported_targets" in
-	  elf32-i386)
-		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
-		;;
-	  a.out-i386-linux)
-		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-		exit 0 ;;
-	  coff-i386)
-		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-		exit 0 ;;
-	  "")
-		# Either a pre-BFD a.out linker (linux-gnuoldld) or
-		# one that does not give us useful --help.
-		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
-		exit 0 ;;
-	esac
-	# Determine whether the default compiler is a.out or elf
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <features.h>
-	#ifdef __ELF__
-	# ifdef __GLIBC__
-	#  if __GLIBC__ >= 2
-	LIBC=gnu
-	#  else
-	LIBC=gnulibc1
-	#  endif
-	# else
-	LIBC=gnulibc1
-	# endif
-	#else
-	#ifdef __INTEL_COMPILER
-	LIBC=gnu
-	#else
-	LIBC=gnuaout
-	#endif
-	#endif
-	#ifdef __dietlibc__
-	LIBC=dietlibc
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
-	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
-	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
-	;;
-    i*86:DYNIX/ptx:4*:*)
-	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
-	# earlier versions are messed up and put the nodename in both
-	# sysname and nodename.
-	echo i386-sequent-sysv4
-	exit 0 ;;
-    i*86:UNIX_SV:4.2MP:2.*)
-        # Unixware is an offshoot of SVR4, but it has its own version
-        # number series starting with 2...
-        # I am not positive that other SVR4 systems won't match this,
-	# I just have to hope.  -- rms.
-        # Use sysv4.2uw... so that sysv4* matches it.
-	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-	exit 0 ;;
-    i*86:OS/2:*:*)
-	# If we were able to find `uname', then EMX Unix compatibility
-	# is probably installed.
-	echo ${UNAME_MACHINE}-pc-os2-emx
-	exit 0 ;;
-    i*86:XTS-300:*:STOP)
-	echo ${UNAME_MACHINE}-unknown-stop
-	exit 0 ;;
-    i*86:atheos:*:*)
-	echo ${UNAME_MACHINE}-unknown-atheos
-	exit 0 ;;
-	i*86:syllable:*:*)
-	echo ${UNAME_MACHINE}-pc-syllable
-	exit 0 ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
-	echo i386-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
-    i*86:*DOS:*:*)
-	echo ${UNAME_MACHINE}-pc-msdosdjgpp
-	exit 0 ;;
-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
-	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
-	else
-		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
-	fi
-	exit 0 ;;
-    i*86:*:5:[78]*)
-	case `/bin/uname -X | grep "^Machine"` in
-	    *486*)	     UNAME_MACHINE=i486 ;;
-	    *Pentium)	     UNAME_MACHINE=i586 ;;
-	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
-	esac
-	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-	exit 0 ;;
-    i*86:*:3.2:*)
-	if test -f /usr/options/cb.name; then
-		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
-	elif /bin/uname -X 2>/dev/null >/dev/null ; then
-		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
-		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
-		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
-			&& UNAME_MACHINE=i586
-		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
-			&& UNAME_MACHINE=i686
-		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
-			&& UNAME_MACHINE=i686
-		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
-	else
-		echo ${UNAME_MACHINE}-pc-sysv32
-	fi
-	exit 0 ;;
-    pc:*:*:*)
-	# Left here for compatibility:
-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i386.
-	echo i386-pc-msdosdjgpp
-        exit 0 ;;
-    Intel:Mach:3*:*)
-	echo i386-pc-mach3
-	exit 0 ;;
-    paragon:*:*:*)
-	echo i860-intel-osf1
-	exit 0 ;;
-    i860:*:4.*:*) # i860-SVR4
-	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
-	else # Add other i860-SVR4 vendors below as they are discovered.
-	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
-	fi
-	exit 0 ;;
-    mini*:CTIX:SYS*5:*)
-	# "miniframe"
-	echo m68010-convergent-sysv
-	exit 0 ;;
-    mc68k:UNIX:SYSTEM5:3.51m)
-	echo m68k-convergent-sysv
-	exit 0 ;;
-    M680?0:D-NIX:5.3:*)
-	echo m68k-diab-dnix
-	exit 0 ;;
-    M68*:*:R3V[567]*:*)
-	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
-    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
-	OS_REL=''
-	test -r /etc/.relid \
-	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
-	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
-    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && echo i486-ncr-sysv4 && exit 0 ;;
-    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-	echo m68k-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
-    mc68030:UNIX_System_V:4.*:*)
-	echo m68k-atari-sysv4
-	exit 0 ;;
-    TSUNAMI:LynxOS:2.*:*)
-	echo sparc-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
-    rs6000:LynxOS:2.*:*)
-	echo rs6000-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
-	echo powerpc-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
-    SM[BE]S:UNIX_SV:*:*)
-	echo mips-dde-sysv${UNAME_RELEASE}
-	exit 0 ;;
-    RM*:ReliantUNIX-*:*:*)
-	echo mips-sni-sysv4
-	exit 0 ;;
-    RM*:SINIX-*:*:*)
-	echo mips-sni-sysv4
-	exit 0 ;;
-    *:SINIX-*:*:*)
-	if uname -p 2>/dev/null >/dev/null ; then
-		UNAME_MACHINE=`(uname -p) 2>/dev/null`
-		echo ${UNAME_MACHINE}-sni-sysv4
-	else
-		echo ns32k-sni-sysv
-	fi
-	exit 0 ;;
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                      # says <[email protected]>
-        echo i586-unisys-sysv4
-        exit 0 ;;
-    *:UNIX_System_V:4*:FTX*)
-	# From Gerald Hewes <[email protected]>.
-	# How about differentiating between stratus architectures? -djm
-	echo hppa1.1-stratus-sysv4
-	exit 0 ;;
-    *:*:*:FTX*)
-	# From [email protected].
-	echo i860-stratus-sysv4
-	exit 0 ;;
-    *:VOS:*:*)
-	# From [email protected].
-	echo hppa1.1-stratus-vos
-	exit 0 ;;
-    mc68*:A/UX:*:*)
-	echo m68k-apple-aux${UNAME_RELEASE}
-	exit 0 ;;
-    news*:NEWS-OS:6*:*)
-	echo mips-sony-newsos6
-	exit 0 ;;
-    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-	if [ -d /usr/nec ]; then
-	        echo mips-nec-sysv${UNAME_RELEASE}
-	else
-	        echo mips-unknown-sysv${UNAME_RELEASE}
-	fi
-        exit 0 ;;
-    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
-	echo powerpc-be-beos
-	exit 0 ;;
-    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
-	echo powerpc-apple-beos
-	exit 0 ;;
-    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
-	echo i586-pc-beos
-	exit 0 ;;
-    SX-4:SUPER-UX:*:*)
-	echo sx4-nec-superux${UNAME_RELEASE}
-	exit 0 ;;
-    SX-5:SUPER-UX:*:*)
-	echo sx5-nec-superux${UNAME_RELEASE}
-	exit 0 ;;
-    SX-6:SUPER-UX:*:*)
-	echo sx6-nec-superux${UNAME_RELEASE}
-	exit 0 ;;
-    Power*:Rhapsody:*:*)
-	echo powerpc-apple-rhapsody${UNAME_RELEASE}
-	exit 0 ;;
-    *:Rhapsody:*:*)
-	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-	exit 0 ;;
-    *:Darwin:*:*)
-	case `uname -p` in
-	    *86) UNAME_PROCESSOR=i686 ;;
-	    powerpc) UNAME_PROCESSOR=powerpc ;;
-	esac
-	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-	exit 0 ;;
-    *:procnto*:*:* | *:QNX:[0123456789]*:*)
-	UNAME_PROCESSOR=`uname -p`
-	if test "$UNAME_PROCESSOR" = "x86"; then
-		UNAME_PROCESSOR=i386
-		UNAME_MACHINE=pc
-	fi
-	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-	exit 0 ;;
-    *:QNX:*:4*)
-	echo i386-pc-qnx
-	exit 0 ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
-	echo nsr-tandem-nsk${UNAME_RELEASE}
-	exit 0 ;;
-    *:NonStop-UX:*:*)
-	echo mips-compaq-nonstopux
-	exit 0 ;;
-    BS2000:POSIX*:*:*)
-	echo bs2000-siemens-sysv
-	exit 0 ;;
-    DS/*:UNIX_System_V:*:*)
-	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-	exit 0 ;;
-    *:Plan9:*:*)
-	# "uname -m" is not consistent, so use $cputype instead. 386
-	# is converted to i386 for consistency with other x86
-	# operating systems.
-	if test "$cputype" = "386"; then
-	    UNAME_MACHINE=i386
-	else
-	    UNAME_MACHINE="$cputype"
-	fi
-	echo ${UNAME_MACHINE}-unknown-plan9
-	exit 0 ;;
-    *:TOPS-10:*:*)
-	echo pdp10-unknown-tops10
-	exit 0 ;;
-    *:TENEX:*:*)
-	echo pdp10-unknown-tenex
-	exit 0 ;;
-    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-	echo pdp10-dec-tops20
-	exit 0 ;;
-    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-	echo pdp10-xkl-tops20
-	exit 0 ;;
-    *:TOPS-20:*:*)
-	echo pdp10-unknown-tops20
-	exit 0 ;;
-    *:ITS:*:*)
-	echo pdp10-unknown-its
-	exit 0 ;;
-    SEI:*:*:SEIUX)
-        echo mips-sei-seiux${UNAME_RELEASE}
-	exit 0 ;;
-    *:DRAGONFLY:*:*)
-	echo ${UNAME_MACHINE}-unknown-dragonfly${UNAME_RELEASE}
-	exit 0 ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
-  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
-     I don't know....  */
-  printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
-  printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
-          "4"
-#else
-	  ""
-#endif
-         ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
-  printf ("arm-acorn-riscix"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
-  printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
-  int version;
-  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-  if (version < 4)
-    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
-  else
-    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
-  exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
-  printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
-  printf ("ns32k-encore-mach\n"); exit (0);
-#else
-  printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
-  printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
-  printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
-  printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
-    struct utsname un;
-
-    uname(&un);
-
-    if (strncmp(un.version, "V2", 2) == 0) {
-	printf ("i386-sequent-ptx2\n"); exit (0);
-    }
-    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
-	printf ("i386-sequent-ptx1\n"); exit (0);
-    }
-    printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-#  include <sys/param.h>
-#  if defined (BSD)
-#   if BSD == 43
-      printf ("vax-dec-bsd4.3\n"); exit (0);
-#   else
-#    if BSD == 199006
-      printf ("vax-dec-bsd4.3reno\n"); exit (0);
-#    else
-      printf ("vax-dec-bsd\n"); exit (0);
-#    endif
-#   endif
-#  else
-    printf ("vax-dec-bsd\n"); exit (0);
-#  endif
-# else
-    printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
-  printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
-  exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
-    case `getsysinfo -f cpu_type` in
-    c1*)
-	echo c1-convex-bsd
-	exit 0 ;;
-    c2*)
-	if getsysinfo -f scalar_acc
-	then echo c32-convex-bsd
-	else echo c2-convex-bsd
-	fi
-	exit 0 ;;
-    c34*)
-	echo c34-convex-bsd
-	exit 0 ;;
-    c38*)
-	echo c38-convex-bsd
-	exit 0 ;;
-    c4*)
-	echo c4-convex-bsd
-	exit 0 ;;
-    esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
-    ftp://ftp.gnu.org/pub/gnu/config/
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <[email protected]> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo               = `(hostinfo) 2>/dev/null`
-/bin/universe          = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch              = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM  = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:

+ 0 - 166
config.h.in

@@ -1,166 +0,0 @@
-/* config.h.in.  Generated from configure.in by autoheader.  */
-
-/* if you have the argz library */
-#undef HAVE_ARGZ_H
-
-/* if you have complex math */
-#undef HAVE_COMPLEX
-
-/* Define to 1 if you have the `ctime_r' function. */
-#undef HAVE_CTIME_R
-
-/* Define to 1 if you have the <ctype.h> header file. */
-#undef HAVE_CTYPE_H
-
-/* Define to 1 if you have the declaration of `__free_hook', and to 0 if you
-   don't. */
-#undef HAVE_DECL___FREE_HOOK
-
-/* Define to 1 if you have the declaration of `__malloc_hook', and to 0 if you
-   don't. */
-#undef HAVE_DECL___MALLOC_HOOK
-
-/* Define to 1 if you have the declaration of `__realloc_hook', and to 0 if
-   you don't. */
-#undef HAVE_DECL___REALLOC_HOOK
-
-/* Define if you have libexpect */
-#undef HAVE_EXPECT
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
-/* if you have floating point math */
-#undef HAVE_FENV
-
-/* Define if you have the fftw library */
-#undef HAVE_FFTW
-
-/* Define if you have libgcrypt */
-#undef HAVE_GCRYPT
-
-/* Define if you have the GNU linear programming kit */
-#undef HAVE_GLPK
-
-/* Define if you have GNU multiple precision library */
-#undef HAVE_GMP
-
-/* Define if you have the GNU Scientific library */
-#undef HAVE_GSL
-
-/* Define if you have the harminv library */
-#undef HAVE_HARMINV
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define for sundials */
-#undef HAVE_KINSOL
-
-/* Define if you have the lapack library */
-#undef HAVE_LAPACK
-
-/* Define if you have lpsolve */
-#undef HAVE_LPSOLVE
-
-/* Define if you have the standard malloc.h header */
-#undef HAVE_MALLOC
-
-/* Define to 1 if you have the <math.h> header file. */
-#undef HAVE_MATH_H
-
-/* Define to 1 if you have the `memmove' function. */
-#undef HAVE_MEMMOVE
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define if you have the minpack library */
-#undef HAVE_MINPACK
-
-/* Define if you have the mpfr arbitrary precision library */
-#undef HAVE_MPFR
-
-/* Define if you have the GNU R math library */
-#undef HAVE_RMATH
-
-/* Define if you have setjmp functions */
-#undef HAVE_SETJMP
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the `strdup' function. */
-#undef HAVE_STRDUP
-
-/* Define to 1 if you have the `strerror' function. */
-#undef HAVE_STRERROR
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the `strstr' function. */
-#undef HAVE_STRSTR
-
-/* Define to 1 if you have the <sys/file.h> header file. */
-#undef HAVE_SYS_FILE_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <time.h> header file. */
-#undef HAVE_TIME_H
-
-/* Define if you have the ufsparse libraries */
-#undef HAVE_UMF
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if your C compiler doesn't accept -c and -o together. */
-#undef NO_MINUS_C_MINUS_O
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the home page for this package. */
-#undef PACKAGE_URL
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Version number of package */
-#undef VERSION
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-#undef size_t

+ 0 - 1537
config.sub

@@ -1,1537 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-
-timestamp='2004-01-05'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine.  It does not imply ALL GNU software can.
-#
-# This file 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 2 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, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Please send patches to <[email protected]>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support.  The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <[email protected]>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit 0 ;;
-    --version | -v )
-       echo "$version" ; exit 0 ;;
-    --help | --h* | -h )
-       echo "$usage"; exit 0 ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )	# Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help"
-       exit 1 ;;
-
-    *local*)
-       # First pass through any local machine types.
-       echo $1
-       exit 0;;
-
-    * )
-       break ;;
-  esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
-    exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
-    exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
-  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
-    os=-$maybe_os
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  *)
-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-    if [ $basic_machine != $1 ]
-    then os=`echo $1 | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-	-sun*os*)
-		# Prevent following clause from handling this invalid input.
-		;;
-	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis)
-		os=
-		basic_machine=$1
-		;;
-	-sim | -cisco | -oki | -wec | -winbond)
-		os=
-		basic_machine=$1
-		;;
-	-scout)
-		;;
-	-wrs)
-		os=-vxworks
-		basic_machine=$1
-		;;
-	-chorusos*)
-		os=-chorusos
-		basic_machine=$1
-		;;
- 	-chorusrdb)
- 		os=-chorusrdb
-		basic_machine=$1
- 		;;
-	-hiux*)
-		os=-hiuxwe2
-		;;
-	-sco5)
-		os=-sco3.2v5
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco4)
-		os=-sco3.2v4
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2.[4-9]*)
-		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2v[4-9]*)
-		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco*)
-		os=-sco3.2v2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-udk*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-isc)
-		os=-isc2.2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-clix*)
-		basic_machine=clipper-intergraph
-		;;
-	-isc*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-lynx*)
-		os=-lynxos
-		;;
-	-ptx*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
-		;;
-	-windowsnt*)
-		os=`echo $os | sed -e 's/windowsnt/winnt/'`
-		;;
-	-psos*)
-		os=-psos
-		;;
-	-mint | -mint[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
-	# Recognize the basic CPU types without company name.
-	# Some are omitted here because they have special meanings below.
-	1750a | 580 \
-	| a29k \
-	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
-	| am33_2.0 \
-	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
-	| c4x | clipper \
-	| d10v | d30v | dlx | dsp16xx \
-	| fr30 | frv \
-	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-	| i370 | i860 | i960 | ia64 \
-	| ip2k | iq2000 \
-	| m32r | m68000 | m68k | m88k | mcore \
-	| mips | mipsbe | mipseb | mipsel | mipsle \
-	| mips16 \
-	| mips64 | mips64el \
-	| mips64vr | mips64vrel \
-	| mips64orion | mips64orionel \
-	| mips64vr4100 | mips64vr4100el \
-	| mips64vr4300 | mips64vr4300el \
-	| mips64vr5000 | mips64vr5000el \
-	| mipsisa32 | mipsisa32el \
-	| mipsisa32r2 | mipsisa32r2el \
-	| mipsisa64 | mipsisa64el \
-	| mipsisa64r2 | mipsisa64r2el \
-	| mipsisa64sb1 | mipsisa64sb1el \
-	| mipsisa64sr71k | mipsisa64sr71kel \
-	| mipstx39 | mipstx39el \
-	| mn10200 | mn10300 \
-	| msp430 \
-	| ns16k | ns32k \
-	| openrisc | or32 \
-	| pdp10 | pdp11 | pj | pjl \
-	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
-	| pyramid \
-	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
-	| sh64 | sh64le \
-	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
-	| strongarm \
-	| tahoe | thumb | tic4x | tic80 | tron \
-	| v850 | v850e \
-	| we32k \
-	| x86 | xscale | xstormy16 | xtensa \
-	| z8k)
-		basic_machine=$basic_machine-unknown
-		;;
-	m6811 | m68hc11 | m6812 | m68hc12)
-		# Motorola 68HC11/12.
-		basic_machine=$basic_machine-unknown
-		os=-none
-		;;
-	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
-		;;
-
-	# We use `pc' rather than `unknown'
-	# because (1) that's what they normally are, and
-	# (2) the word "unknown" tends to confuse beginning users.
-	i*86 | x86_64)
-	  basic_machine=$basic_machine-pc
-	  ;;
-	# Object if more than one company name word.
-	*-*-*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
-		;;
-	# Recognize the basic CPU types with company name.
-	580-* \
-	| a29k-* \
-	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
-	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
-	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-	| avr-* \
-	| bs2000-* \
-	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
-	| clipper-* | cydra-* \
-	| d10v-* | d30v-* | dlx-* \
-	| elxsi-* \
-	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
-	| h8300-* | h8500-* \
-	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-	| i*86-* | i860-* | i960-* | ia64-* \
-	| ip2k-* | iq2000-* \
-	| m32r-* \
-	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | mcore-* \
-	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-	| mips16-* \
-	| mips64-* | mips64el-* \
-	| mips64vr-* | mips64vrel-* \
-	| mips64orion-* | mips64orionel-* \
-	| mips64vr4100-* | mips64vr4100el-* \
-	| mips64vr4300-* | mips64vr4300el-* \
-	| mips64vr5000-* | mips64vr5000el-* \
-	| mipsisa32-* | mipsisa32el-* \
-	| mipsisa32r2-* | mipsisa32r2el-* \
-	| mipsisa64-* | mipsisa64el-* \
-	| mipsisa64r2-* | mipsisa64r2el-* \
-	| mipsisa64sb1-* | mipsisa64sb1el-* \
-	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
-	| mipstx39-* | mipstx39el-* \
-	| msp430-* \
-	| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
-	| orion-* \
-	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
-	| pyramid-* \
-	| romp-* | rs6000-* \
-	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
-	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
-	| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
-	| tahoe-* | thumb-* \
-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-	| tron-* \
-	| v850-* | v850e-* | vax-* \
-	| we32k-* \
-	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
-	| xtensa-* \
-	| ymp-* \
-	| z8k-*)
-		;;
-	# Recognize the various machine names and aliases which stand
-	# for a CPU type and a company and sometimes even an OS.
-	386bsd)
-		basic_machine=i386-unknown
-		os=-bsd
-		;;
-	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-		basic_machine=m68000-att
-		;;
-	3b*)
-		basic_machine=we32k-att
-		;;
-	a29khif)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	adobe68k)
-		basic_machine=m68010-adobe
-		os=-scout
-		;;
-	alliant | fx80)
-		basic_machine=fx80-alliant
-		;;
-	altos | altos3068)
-		basic_machine=m68k-altos
-		;;
-	am29k)
-		basic_machine=a29k-none
-		os=-bsd
-		;;
-	amd64)
-		basic_machine=x86_64-pc
-		;;
-	amd64-*)
-		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	amdahl)
-		basic_machine=580-amdahl
-		os=-sysv
-		;;
-	amiga | amiga-*)
-		basic_machine=m68k-unknown
-		;;
-	amigaos | amigados)
-		basic_machine=m68k-unknown
-		os=-amigaos
-		;;
-	amigaunix | amix)
-		basic_machine=m68k-unknown
-		os=-sysv4
-		;;
-	apollo68)
-		basic_machine=m68k-apollo
-		os=-sysv
-		;;
-	apollo68bsd)
-		basic_machine=m68k-apollo
-		os=-bsd
-		;;
-	aux)
-		basic_machine=m68k-apple
-		os=-aux
-		;;
-	balance)
-		basic_machine=ns32k-sequent
-		os=-dynix
-		;;
-	c90)
-		basic_machine=c90-cray
-		os=-unicos
-		;;
-	convex-c1)
-		basic_machine=c1-convex
-		os=-bsd
-		;;
-	convex-c2)
-		basic_machine=c2-convex
-		os=-bsd
-		;;
-	convex-c32)
-		basic_machine=c32-convex
-		os=-bsd
-		;;
-	convex-c34)
-		basic_machine=c34-convex
-		os=-bsd
-		;;
-	convex-c38)
-		basic_machine=c38-convex
-		os=-bsd
-		;;
-	cray | j90)
-		basic_machine=j90-cray
-		os=-unicos
-		;;
-	crds | unos)
-		basic_machine=m68k-crds
-		;;
-	cris | cris-* | etrax*)
-		basic_machine=cris-axis
-		;;
-	da30 | da30-*)
-		basic_machine=m68k-da30
-		;;
-	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-		basic_machine=mips-dec
-		;;
-	decsystem10* | dec10*)
-		basic_machine=pdp10-dec
-		os=-tops10
-		;;
-	decsystem20* | dec20*)
-		basic_machine=pdp10-dec
-		os=-tops20
-		;;
-	delta | 3300 | motorola-3300 | motorola-delta \
-	      | 3300-motorola | delta-motorola)
-		basic_machine=m68k-motorola
-		;;
-	delta88)
-		basic_machine=m88k-motorola
-		os=-sysv3
-		;;
-	dpx20 | dpx20-*)
-		basic_machine=rs6000-bull
-		os=-bosx
-		;;
-	dpx2* | dpx2*-bull)
-		basic_machine=m68k-bull
-		os=-sysv3
-		;;
-	ebmon29k)
-		basic_machine=a29k-amd
-		os=-ebmon
-		;;
-	elxsi)
-		basic_machine=elxsi-elxsi
-		os=-bsd
-		;;
-	encore | umax | mmax)
-		basic_machine=ns32k-encore
-		;;
-	es1800 | OSE68k | ose68k | ose | OSE)
-		basic_machine=m68k-ericsson
-		os=-ose
-		;;
-	fx2800)
-		basic_machine=i860-alliant
-		;;
-	genix)
-		basic_machine=ns32k-ns
-		;;
-	gmicro)
-		basic_machine=tron-gmicro
-		os=-sysv
-		;;
-	go32)
-		basic_machine=i386-pc
-		os=-go32
-		;;
-	h3050r* | hiux*)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	h8300hms)
-		basic_machine=h8300-hitachi
-		os=-hms
-		;;
-	h8300xray)
-		basic_machine=h8300-hitachi
-		os=-xray
-		;;
-	h8500hms)
-		basic_machine=h8500-hitachi
-		os=-hms
-		;;
-	harris)
-		basic_machine=m88k-harris
-		os=-sysv3
-		;;
-	hp300-*)
-		basic_machine=m68k-hp
-		;;
-	hp300bsd)
-		basic_machine=m68k-hp
-		os=-bsd
-		;;
-	hp300hpux)
-		basic_machine=m68k-hp
-		os=-hpux
-		;;
-	hp3k9[0-9][0-9] | hp9[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k2[0-9][0-9] | hp9k31[0-9])
-		basic_machine=m68000-hp
-		;;
-	hp9k3[2-9][0-9])
-		basic_machine=m68k-hp
-		;;
-	hp9k6[0-9][0-9] | hp6[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k7[0-79][0-9] | hp7[0-79][0-9])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k78[0-9] | hp78[0-9])
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][13679] | hp8[0-9][13679])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][0-9] | hp8[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hppa-next)
-		os=-nextstep3
-		;;
-	hppaosf)
-		basic_machine=hppa1.1-hp
-		os=-osf
-		;;
-	hppro)
-		basic_machine=hppa1.1-hp
-		os=-proelf
-		;;
-	i370-ibm* | ibm*)
-		basic_machine=i370-ibm
-		;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
-	i*86v32)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv32
-		;;
-	i*86v4*)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv4
-		;;
-	i*86v)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv
-		;;
-	i*86sol2)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-solaris2
-		;;
-	i386mach)
-		basic_machine=i386-mach
-		os=-mach
-		;;
-	i386-vsta | vsta)
-		basic_machine=i386-unknown
-		os=-vsta
-		;;
-	iris | iris4d)
-		basic_machine=mips-sgi
-		case $os in
-		    -irix*)
-			;;
-		    *)
-			os=-irix4
-			;;
-		esac
-		;;
-	isi68 | isi)
-		basic_machine=m68k-isi
-		os=-sysv
-		;;
-	m88k-omron*)
-		basic_machine=m88k-omron
-		;;
-	magnum | m3230)
-		basic_machine=mips-mips
-		os=-sysv
-		;;
-	merlin)
-		basic_machine=ns32k-utek
-		os=-sysv
-		;;
-	mingw32)
-		basic_machine=i386-pc
-		os=-mingw32
-		;;
-	miniframe)
-		basic_machine=m68000-convergent
-		;;
-	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-	mips3*-*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-		;;
-	mips3*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-		;;
-	mmix*)
-		basic_machine=mmix-knuth
-		os=-mmixware
-		;;
-	monitor)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	morphos)
-		basic_machine=powerpc-unknown
-		os=-morphos
-		;;
-	msdos)
-		basic_machine=i386-pc
-		os=-msdos
-		;;
-	mvs)
-		basic_machine=i370-ibm
-		os=-mvs
-		;;
-	ncr3000)
-		basic_machine=i486-ncr
-		os=-sysv4
-		;;
-	netbsd386)
-		basic_machine=i386-unknown
-		os=-netbsd
-		;;
-	netwinder)
-		basic_machine=armv4l-rebel
-		os=-linux
-		;;
-	news | news700 | news800 | news900)
-		basic_machine=m68k-sony
-		os=-newsos
-		;;
-	news1000)
-		basic_machine=m68030-sony
-		os=-newsos
-		;;
-	news-3600 | risc-news)
-		basic_machine=mips-sony
-		os=-newsos
-		;;
-	necv70)
-		basic_machine=v70-nec
-		os=-sysv
-		;;
-	next | m*-next )
-		basic_machine=m68k-next
-		case $os in
-		    -nextstep* )
-			;;
-		    -ns2*)
-		      os=-nextstep2
-			;;
-		    *)
-		      os=-nextstep3
-			;;
-		esac
-		;;
-	nh3000)
-		basic_machine=m68k-harris
-		os=-cxux
-		;;
-	nh[45]000)
-		basic_machine=m88k-harris
-		os=-cxux
-		;;
-	nindy960)
-		basic_machine=i960-intel
-		os=-nindy
-		;;
-	mon960)
-		basic_machine=i960-intel
-		os=-mon960
-		;;
-	nonstopux)
-		basic_machine=mips-compaq
-		os=-nonstopux
-		;;
-	np1)
-		basic_machine=np1-gould
-		;;
-	nv1)
-		basic_machine=nv1-cray
-		os=-unicosmp
-		;;
-	nsr-tandem)
-		basic_machine=nsr-tandem
-		;;
-	op50n-* | op60c-*)
-		basic_machine=hppa1.1-oki
-		os=-proelf
-		;;
-	or32 | or32-*)
-		basic_machine=or32-unknown
-		os=-coff
-		;;
-	os400)
-		basic_machine=powerpc-ibm
-		os=-os400
-		;;
-	OSE68000 | ose68000)
-		basic_machine=m68000-ericsson
-		os=-ose
-		;;
-	os68k)
-		basic_machine=m68k-none
-		os=-os68k
-		;;
-	pa-hitachi)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	paragon)
-		basic_machine=i860-intel
-		os=-osf
-		;;
-	pbd)
-		basic_machine=sparc-tti
-		;;
-	pbb)
-		basic_machine=m68k-tti
-		;;
-	pc532 | pc532-*)
-		basic_machine=ns32k-pc532
-		;;
-	pentium | p5 | k5 | k6 | nexgen | viac3)
-		basic_machine=i586-pc
-		;;
-	pentiumpro | p6 | 6x86 | athlon | athlon_*)
-		basic_machine=i686-pc
-		;;
-	pentiumii | pentium2 | pentiumiii | pentium3)
-		basic_machine=i686-pc
-		;;
-	pentium4)
-		basic_machine=i786-pc
-		;;
-	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentiumpro-* | p6-* | 6x86-* | athlon-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentium4-*)
-		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pn)
-		basic_machine=pn-gould
-		;;
-	power)	basic_machine=power-ibm
-		;;
-	ppc)	basic_machine=powerpc-unknown
-		;;
-	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppcle | powerpclittle | ppc-le | powerpc-little)
-		basic_machine=powerpcle-unknown
-		;;
-	ppcle-* | powerpclittle-*)
-		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppc64)	basic_machine=powerpc64-unknown
-		;;
-	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
-		basic_machine=powerpc64le-unknown
-		;;
-	ppc64le-* | powerpc64little-*)
-		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ps2)
-		basic_machine=i386-ibm
-		;;
-	pw32)
-		basic_machine=i586-unknown
-		os=-pw32
-		;;
-	rom68k)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	rm[46]00)
-		basic_machine=mips-siemens
-		;;
-	rtpc | rtpc-*)
-		basic_machine=romp-ibm
-		;;
-	s390 | s390-*)
-		basic_machine=s390-ibm
-		;;
-	s390x | s390x-*)
-		basic_machine=s390x-ibm
-		;;
-	sa29200)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	sb1)
-		basic_machine=mipsisa64sb1-unknown
-		;;
-	sb1el)
-		basic_machine=mipsisa64sb1el-unknown
-		;;
-	sei)
-		basic_machine=mips-sei
-		os=-seiux
-		;;
-	sequent)
-		basic_machine=i386-sequent
-		;;
-	sh)
-		basic_machine=sh-hitachi
-		os=-hms
-		;;
-	sh64)
-		basic_machine=sh64-unknown
-		;;
-	sparclite-wrs | simso-wrs)
-		basic_machine=sparclite-wrs
-		os=-vxworks
-		;;
-	sps7)
-		basic_machine=m68k-bull
-		os=-sysv2
-		;;
-	spur)
-		basic_machine=spur-unknown
-		;;
-	st2000)
-		basic_machine=m68k-tandem
-		;;
-	stratus)
-		basic_machine=i860-stratus
-		os=-sysv4
-		;;
-	sun2)
-		basic_machine=m68000-sun
-		;;
-	sun2os3)
-		basic_machine=m68000-sun
-		os=-sunos3
-		;;
-	sun2os4)
-		basic_machine=m68000-sun
-		os=-sunos4
-		;;
-	sun3os3)
-		basic_machine=m68k-sun
-		os=-sunos3
-		;;
-	sun3os4)
-		basic_machine=m68k-sun
-		os=-sunos4
-		;;
-	sun4os3)
-		basic_machine=sparc-sun
-		os=-sunos3
-		;;
-	sun4os4)
-		basic_machine=sparc-sun
-		os=-sunos4
-		;;
-	sun4sol2)
-		basic_machine=sparc-sun
-		os=-solaris2
-		;;
-	sun3 | sun3-*)
-		basic_machine=m68k-sun
-		;;
-	sun4)
-		basic_machine=sparc-sun
-		;;
-	sun386 | sun386i | roadrunner)
-		basic_machine=i386-sun
-		;;
-	sv1)
-		basic_machine=sv1-cray
-		os=-unicos
-		;;
-	symmetry)
-		basic_machine=i386-sequent
-		os=-dynix
-		;;
-	t3e)
-		basic_machine=alphaev5-cray
-		os=-unicos
-		;;
-	t90)
-		basic_machine=t90-cray
-		os=-unicos
-		;;
-	tic54x | c54x*)
-		basic_machine=tic54x-unknown
-		os=-coff
-		;;
-	tic55x | c55x*)
-		basic_machine=tic55x-unknown
-		os=-coff
-		;;
-	tic6x | c6x*)
-		basic_machine=tic6x-unknown
-		os=-coff
-		;;
-	tx39)
-		basic_machine=mipstx39-unknown
-		;;
-	tx39el)
-		basic_machine=mipstx39el-unknown
-		;;
-	toad1)
-		basic_machine=pdp10-xkl
-		os=-tops20
-		;;
-	tower | tower-32)
-		basic_machine=m68k-ncr
-		;;
-	tpf)
-		basic_machine=s390x-ibm
-		os=-tpf
-		;;
-	udi29k)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	ultra3)
-		basic_machine=a29k-nyu
-		os=-sym1
-		;;
-	v810 | necv810)
-		basic_machine=v810-nec
-		os=-none
-		;;
-	vaxv)
-		basic_machine=vax-dec
-		os=-sysv
-		;;
-	vms)
-		basic_machine=vax-dec
-		os=-vms
-		;;
-	vpp*|vx|vx-*)
-		basic_machine=f301-fujitsu
-		;;
-	vxworks960)
-		basic_machine=i960-wrs
-		os=-vxworks
-		;;
-	vxworks68)
-		basic_machine=m68k-wrs
-		os=-vxworks
-		;;
-	vxworks29k)
-		basic_machine=a29k-wrs
-		os=-vxworks
-		;;
-	w65*)
-		basic_machine=w65-wdc
-		os=-none
-		;;
-	w89k-*)
-		basic_machine=hppa1.1-winbond
-		os=-proelf
-		;;
-	xps | xps100)
-		basic_machine=xps100-honeywell
-		;;
-	ymp)
-		basic_machine=ymp-cray
-		os=-unicos
-		;;
-	z8k-*-coff)
-		basic_machine=z8k-unknown
-		os=-sim
-		;;
-	none)
-		basic_machine=none-none
-		os=-none
-		;;
-
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-	w89k)
-		basic_machine=hppa1.1-winbond
-		;;
-	op50n)
-		basic_machine=hppa1.1-oki
-		;;
-	op60c)
-		basic_machine=hppa1.1-oki
-		;;
-	romp)
-		basic_machine=romp-ibm
-		;;
-	rs6000)
-		basic_machine=rs6000-ibm
-		;;
-	vax)
-		basic_machine=vax-dec
-		;;
-	pdp10)
-		# there are many clones, so DEC is not a safe bet
-		basic_machine=pdp10-unknown
-		;;
-	pdp11)
-		basic_machine=pdp11-dec
-		;;
-	we32k)
-		basic_machine=we32k-att
-		;;
-	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
-		basic_machine=sh-unknown
-		;;
-	sh64)
-		basic_machine=sh64-unknown
-		;;
-	sparc | sparcv9 | sparcv9b)
-		basic_machine=sparc-sun
-		;;
-	cydra)
-		basic_machine=cydra-cydrome
-		;;
-	orion)
-		basic_machine=orion-highlevel
-		;;
-	orion105)
-		basic_machine=clipper-highlevel
-		;;
-	mac | mpw | mac-mpw)
-		basic_machine=m68k-apple
-		;;
-	pmac | pmac-mpw)
-		basic_machine=powerpc-apple
-		;;
-	*-unknown)
-		# Make sure to match an already-canonicalized machine name.
-		;;
-	*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
-		;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-	*-digital*)
-		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
-		;;
-	*-commodore*)
-		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
-		;;
-	*)
-		;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
-        # First match some system type aliases
-        # that might get confused with valid system types.
-	# -solaris* is a basic system type, with this one exception.
-	-solaris1 | -solaris1.*)
-		os=`echo $os | sed -e 's|solaris1|sunos4|'`
-		;;
-	-solaris)
-		os=-solaris2
-		;;
-	-svr4*)
-		os=-sysv4
-		;;
-	-unixware*)
-		os=-sysv4.2uw
-		;;
-	-gnu/linux*)
-		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
-		;;
-	# First accept the basic system types.
-	# The portable systems comes first.
-	# Each alternative MUST END IN A *, to match a version number.
-	# -sysv* is not here because it comes later, after sysvr4.
-	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
-	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* \
-	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -386bsd* | -knetbsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \
-	      | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -chorusos* | -chorusrdb* \
-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
-	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
-	# Remember, each alternative MUST END IN *, to match a version number.
-		;;
-	-qnx*)
-		case $basic_machine in
-		    x86-* | i*86-*)
-			;;
-		    *)
-			os=-nto$os
-			;;
-		esac
-		;;
-	-nto-qnx*)
-		;;
-	-nto*)
-		os=`echo $os | sed -e 's|nto|nto-qnx|'`
-		;;
-	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
-	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
-		;;
-	-mac*)
-		os=`echo $os | sed -e 's|mac|macos|'`
-		;;
-	-linux-dietlibc)
-		os=-linux-dietlibc
-		;;
-	-linux*)
-		os=`echo $os | sed -e 's|linux|linux-gnu|'`
-		;;
-	-sunos5*)
-		os=`echo $os | sed -e 's|sunos5|solaris2|'`
-		;;
-	-sunos6*)
-		os=`echo $os | sed -e 's|sunos6|solaris3|'`
-		;;
-	-opened*)
-		os=-openedition
-		;;
-        -os400*)
-		os=-os400
-		;;
-	-wince*)
-		os=-wince
-		;;
-	-osfrose*)
-		os=-osfrose
-		;;
-	-osf*)
-		os=-osf
-		;;
-	-utek*)
-		os=-bsd
-		;;
-	-dynix*)
-		os=-bsd
-		;;
-	-acis*)
-		os=-aos
-		;;
-	-atheos*)
-		os=-atheos
-		;;
-	-syllable*)
-		os=-syllable
-		;;
-	-386bsd)
-		os=-bsd
-		;;
-	-ctix* | -uts*)
-		os=-sysv
-		;;
-	-nova*)
-		os=-rtmk-nova
-		;;
-	-ns2 )
-		os=-nextstep2
-		;;
-	-nsk*)
-		os=-nsk
-		;;
-	# Preserve the version number of sinix5.
-	-sinix5.*)
-		os=`echo $os | sed -e 's|sinix|sysv|'`
-		;;
-	-sinix*)
-		os=-sysv4
-		;;
-        -tpf*)
-		os=-tpf
-		;;
-	-triton*)
-		os=-sysv3
-		;;
-	-oss*)
-		os=-sysv3
-		;;
-	-svr4)
-		os=-sysv4
-		;;
-	-svr3)
-		os=-sysv3
-		;;
-	-sysvr4)
-		os=-sysv4
-		;;
-	# This must come after -sysvr4.
-	-sysv*)
-		;;
-	-ose*)
-		os=-ose
-		;;
-	-es1800*)
-		os=-ose
-		;;
-	-xenix)
-		os=-xenix
-		;;
-	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-		os=-mint
-		;;
-	-aros*)
-		os=-aros
-		;;
-	-kaos*)
-		os=-kaos
-		;;
-	-none)
-		;;
-	*)
-		# Get rid of the `-' at the beginning of $os.
-		os=`echo $os | sed 's/[^-]*-//'`
-		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
-		exit 1
-		;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system.  Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
-	*-acorn)
-		os=-riscix1.2
-		;;
-	arm*-rebel)
-		os=-linux
-		;;
-	arm*-semi)
-		os=-aout
-		;;
-    c4x-* | tic4x-*)
-        os=-coff
-        ;;
-	# This must come before the *-dec entry.
-	pdp10-*)
-		os=-tops20
-		;;
-	pdp11-*)
-		os=-none
-		;;
-	*-dec | vax-*)
-		os=-ultrix4.2
-		;;
-	m68*-apollo)
-		os=-domain
-		;;
-	i386-sun)
-		os=-sunos4.0.2
-		;;
-	m68000-sun)
-		os=-sunos3
-		# This also exists in the configure program, but was not the
-		# default.
-		# os=-sunos4
-		;;
-	m68*-cisco)
-		os=-aout
-		;;
-	mips*-cisco)
-		os=-elf
-		;;
-	mips*-*)
-		os=-elf
-		;;
-	or32-*)
-		os=-coff
-		;;
-	*-tti)	# must be before sparc entry or we get the wrong os.
-		os=-sysv3
-		;;
-	sparc-* | *-sun)
-		os=-sunos4.1.1
-		;;
-	*-be)
-		os=-beos
-		;;
-	*-ibm)
-		os=-aix
-		;;
-	*-wec)
-		os=-proelf
-		;;
-	*-winbond)
-		os=-proelf
-		;;
-	*-oki)
-		os=-proelf
-		;;
-	*-hp)
-		os=-hpux
-		;;
-	*-hitachi)
-		os=-hiux
-		;;
-	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-		os=-sysv
-		;;
-	*-cbm)
-		os=-amigaos
-		;;
-	*-dg)
-		os=-dgux
-		;;
-	*-dolphin)
-		os=-sysv3
-		;;
-	m68k-ccur)
-		os=-rtu
-		;;
-	m88k-omron*)
-		os=-luna
-		;;
-	*-next )
-		os=-nextstep
-		;;
-	*-sequent)
-		os=-ptx
-		;;
-	*-crds)
-		os=-unos
-		;;
-	*-ns)
-		os=-genix
-		;;
-	i370-*)
-		os=-mvs
-		;;
-	*-next)
-		os=-nextstep3
-		;;
-	*-gould)
-		os=-sysv
-		;;
-	*-highlevel)
-		os=-bsd
-		;;
-	*-encore)
-		os=-bsd
-		;;
-	*-sgi)
-		os=-irix
-		;;
-	*-siemens)
-		os=-sysv4
-		;;
-	*-masscomp)
-		os=-rtu
-		;;
-	f30[01]-fujitsu | f700-fujitsu)
-		os=-uxpv
-		;;
-	*-rom68k)
-		os=-coff
-		;;
-	*-*bug)
-		os=-coff
-		;;
-	*-apple)
-		os=-macos
-		;;
-	*-atari*)
-		os=-mint
-		;;
-	*)
-		os=-none
-		;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-	*-unknown)
-		case $os in
-			-riscix*)
-				vendor=acorn
-				;;
-			-sunos*)
-				vendor=sun
-				;;
-			-aix*)
-				vendor=ibm
-				;;
-			-beos*)
-				vendor=be
-				;;
-			-hpux*)
-				vendor=hp
-				;;
-			-mpeix*)
-				vendor=hp
-				;;
-			-hiux*)
-				vendor=hitachi
-				;;
-			-unos*)
-				vendor=crds
-				;;
-			-dgux*)
-				vendor=dg
-				;;
-			-luna*)
-				vendor=omron
-				;;
-			-genix*)
-				vendor=ns
-				;;
-			-mvs* | -opened*)
-				vendor=ibm
-				;;
-			-os400*)
-				vendor=ibm
-				;;
-			-ptx*)
-				vendor=sequent
-				;;
-			-tpf*)
-				vendor=ibm
-				;;
-			-vxsim* | -vxworks* | -windiss*)
-				vendor=wrs
-				;;
-			-aux*)
-				vendor=apple
-				;;
-			-hms*)
-				vendor=hitachi
-				;;
-			-mpw* | -macos*)
-				vendor=apple
-				;;
-			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-				vendor=atari
-				;;
-			-vos*)
-				vendor=stratus
-				;;
-		esac
-		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
-		;;
-esac
-
-echo $basic_machine$os
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:

+ 0 - 7488
configure

@@ -1,7488 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for avram 0.11.0.
-#
-# Report bugs to <[email protected]>.
-#
-#
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
-# Foundation, Inc.
-#
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-	expr "X$arg" : "X\\(.*\\)$as_nl";
-	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""	$as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test "x$CONFIG_SHELL" = x; then
-  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '\${1+\"\$@\"}'='\"\$@\"'
-  setopt NO_GLOB_SUBST
-else
-  case \`(set -o) 2>/dev/null\` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-"
-  as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
-  exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1"
-  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
-  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
-  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
-  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
-  if (eval "$as_required") 2>/dev/null; then :
-  as_have_required=yes
-else
-  as_have_required=no
-fi
-  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  as_found=:
-  case $as_dir in #(
-	 /*)
-	   for as_base in sh bash ksh sh5; do
-	     # Try only shells that exist, to save several forks.
-	     as_shell=$as_dir/$as_base
-	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  CONFIG_SHELL=$as_shell as_have_required=yes
-		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  break 2
-fi
-fi
-	   done;;
-       esac
-  as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
-	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
-  CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
-      if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-	# neutralization value for shells without unset; and this also
-	# works around shells that cannot unset nonexistent variables.
-	# Preserve -v and -x to the replacement shell.
-	BASH_ENV=/dev/null
-	ENV=/dev/null
-	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-	export CONFIG_SHELL
-	case $- in # ((((
-	  *v*x* | *x*v* ) as_opts=-vx ;;
-	  *v* ) as_opts=-v ;;
-	  *x* ) as_opts=-x ;;
-	  * ) as_opts= ;;
-	esac
-	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
-fi
-
-    if test x$as_have_required = xno; then :
-  $as_echo "$0: This script requires a shell more modern than all"
-  $as_echo "$0: the shells that I found on your system."
-  if test x${ZSH_VERSION+set} = xset ; then
-    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
-    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
-  else
-    $as_echo "$0: Please tell [email protected] and
-$0: [email protected] about your system,
-$0: including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
-  fi
-  exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-
-  as_lineno_1=$LINENO as_lineno_1a=$LINENO
-  as_lineno_2=$LINENO as_lineno_2a=$LINENO
-  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
-  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
-  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
-  sed -n '
-    p
-    /[$]LINENO/=
-  ' <$as_myself |
-    sed '
-      s/[$]LINENO.*/&-/
-      t lineno
-      b
-      :lineno
-      N
-      :loop
-      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
-      t loop
-      s/-\n.*//
-    ' >$as_me.lineno &&
-  chmod +x "$as_me.lineno" ||
-    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensitive to this).
-  . "./$as_me.lineno"
-  # Exit status is that of the last command.
-  exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='	';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -p'
-  fi
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-	test -d "$1/.";
-      else
-	case $1 in #(
-	-*)set "./$1";;
-	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-	???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='avram'
-PACKAGE_TARNAME='avram'
-PACKAGE_VERSION='0.11.0'
-PACKAGE_STRING='avram 0.11.0'
-PACKAGE_BUGREPORT='[email protected]'
-PACKAGE_URL=''
-
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-#  include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='am__EXEEXT_FALSE
-am__EXEEXT_TRUE
-LTLIBOBJS
-LIBGCRYPT_LIBS
-LIBGCRYPT_CFLAGS
-LIBGCRYPT_CONFIG
-LIBOBJS
-EGREP
-GREP
-CPP
-am__fastdepCC_FALSE
-am__fastdepCC_TRUE
-CCDEPMODE
-AMDEPBACKSLASH
-AMDEP_FALSE
-AMDEP_TRUE
-am__quote
-am__include
-DEPDIR
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-ISODATE
-am__untar
-am__tar
-AMTAR
-am__leading_dot
-SET_MAKE
-AWK
-mkdir_p
-MKDIR_P
-INSTALL_STRIP_PROGRAM
-STRIP
-install_sh
-MAKEINFO
-AUTOHEADER
-AUTOMAKE
-AUTOCONF
-ACLOCAL
-VERSION
-PACKAGE
-CYGPATH_W
-am__isrc
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-enable_dependency_tracking
-with_libgcrypt_prefix
-'
-      ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval $ac_prev=\$ac_option
-    ac_prev=
-    continue
-  fi
-
-  case $ac_option in
-  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *=)   ac_optarg= ;;
-  *)    ac_optarg=yes ;;
-  esac
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case $ac_dashdash$ac_option in
-  --)
-    ac_dashdash=yes ;;
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir=$ac_optarg ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build_alias ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build_alias=$ac_optarg ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file=$ac_optarg ;;
-
-  --config-cache | -C)
-    cache_file=config.cache ;;
-
-  -datadir | --datadir | --datadi | --datad)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=*)
-    datadir=$ac_optarg ;;
-
-  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
-  | --dataroo | --dataro | --datar)
-    ac_prev=datarootdir ;;
-  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
-  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
-    datarootdir=$ac_optarg ;;
-
-  -disable-* | --disable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=no ;;
-
-  -docdir | --docdir | --docdi | --doc | --do)
-    ac_prev=docdir ;;
-  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
-    docdir=$ac_optarg ;;
-
-  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
-    ac_prev=dvidir ;;
-  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
-    dvidir=$ac_optarg ;;
-
-  -enable-* | --enable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=\$ac_optarg ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he | -h)
-    ac_init_help=long ;;
-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-    ac_init_help=recursive ;;
-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-    ac_init_help=short ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host_alias ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host_alias=$ac_optarg ;;
-
-  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
-    ac_prev=htmldir ;;
-  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
-  | --ht=*)
-    htmldir=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localedir | --localedir | --localedi | --localed | --locale)
-    ac_prev=localedir ;;
-  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
-    localedir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst | --locals)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix=$ac_optarg ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix=$ac_optarg ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name=$ac_optarg ;;
-
-  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
-    ac_prev=pdfdir ;;
-  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
-    pdfdir=$ac_optarg ;;
-
-  -psdir | --psdir | --psdi | --psd | --ps)
-    ac_prev=psdir ;;
-  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
-    psdir=$ac_optarg ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site=$ac_optarg ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target_alias ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target_alias=$ac_optarg ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers | -V)
-    ac_init_version=: ;;
-
-  -with-* | --with-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=\$ac_optarg ;;
-
-  -without-* | --without-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=no ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes=$ac_optarg ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries=$ac_optarg ;;
-
-  -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    case $ac_envvar in #(
-      '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
-    esac
-    eval $ac_envvar=\$ac_optarg
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
-  case $enable_option_checking in
-    no) ;;
-    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
-    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
-  esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
-		datadir sysconfdir sharedstatedir localstatedir includedir \
-		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-		libdir localedir mandir
-do
-  eval ac_val=\$$ac_var
-  # Remove trailing slashes.
-  case $ac_val in
-    */ )
-      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
-      eval $ac_var=\$ac_val;;
-  esac
-  # Be sure to have absolute directory names.
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* )  continue;;
-    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
-  esac
-  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
-  if test "x$build_alias" = x; then
-    cross_compiling=maybe
-    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used" >&2
-  elif test "x$build_alias" != "x$host_alias"; then
-    cross_compiling=yes
-  fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error $? "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then the parent directory.
-  ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_myself" : 'X\(//\)[^/]' \| \
-	 X"$as_myself" : 'X\(//\)$' \| \
-	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  srcdir=$ac_confdir
-  if test ! -r "$srcdir/$ac_unique_file"; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
-  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
-	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
-	pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
-  srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
-  eval ac_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_env_${ac_var}_value=\$${ac_var}
-  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
-  # Omit some internal or obsolete options to make the list less imposing.
-  # This message is too long to be a string in the A/UX 3.1 sh.
-  cat <<_ACEOF
-\`configure' configures avram 0.11.0 to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE.  See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
-  -h, --help              display this help and exit
-      --help=short        display options specific to this package
-      --help=recursive    display the short help of all the included packages
-  -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking ...' messages
-      --cache-file=FILE   cache test results in FILE [disabled]
-  -C, --config-cache      alias for \`--cache-file=config.cache'
-  -n, --no-create         do not create output files
-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
-
-Installation directories:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
-  --bindir=DIR            user executables [EPREFIX/bin]
-  --sbindir=DIR           system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR        program executables [EPREFIX/libexec]
-  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
-  --libdir=DIR            object code libraries [EPREFIX/lib]
-  --includedir=DIR        C header files [PREFIX/include]
-  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
-  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
-  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
-  --infodir=DIR           info documentation [DATAROOTDIR/info]
-  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
-  --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/avram]
-  --htmldir=DIR           html documentation [DOCDIR]
-  --dvidir=DIR            dvi documentation [DOCDIR]
-  --pdfdir=DIR            pdf documentation [DOCDIR]
-  --psdir=DIR             ps documentation [DOCDIR]
-_ACEOF
-
-  cat <<\_ACEOF
-
-Program names:
-  --program-prefix=PREFIX            prepend PREFIX to installed program names
-  --program-suffix=SUFFIX            append SUFFIX to installed program names
-  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-  case $ac_init_help in
-     short | recursive ) echo "Configuration of avram 0.11.0:";;
-   esac
-  cat <<\_ACEOF
-
-Optional Features:
-  --disable-option-checking  ignore unrecognized --enable/--with options
-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors
-
-Optional Packages:
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-libgcrypt-prefix=PFX
-                          prefix where LIBGCRYPT is installed (optional)
-
-Some influential environment variables:
-  CC          C compiler command
-  CFLAGS      C compiler flags
-  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
-              nonstandard directory <lib dir>
-  LIBS        libraries to pass to the linker, e.g. -l<library>
-  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
-              you have headers in a nonstandard directory <include dir>
-  CPP         C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to <[email protected]>.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d "$ac_dir" ||
-      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
-      continue
-    ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-    cd "$ac_dir" || { ac_status=$?; continue; }
-    # Check for guested configure.
-    if test -f "$ac_srcdir/configure.gnu"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
-    elif test -f "$ac_srcdir/configure"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure" --help=recursive
-    else
-      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi || ac_status=$?
-    cd "$ac_pwd" || { ac_status=$?; break; }
-  done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
-  cat <<\_ACEOF
-avram configure 0.11.0
-generated by GNU Autoconf 2.68
-
-Copyright (C) 2010 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
-  exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
-  if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } > conftest.i && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-    ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-       $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=$ac_status
-fi
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval \${$3+:} false; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_header_compiler=yes
-else
-  ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  ac_header_preproc=yes
-else
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
-  yes:no: )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( $as_echo "## ---------------------------------------------- ##
-## Report this to [email protected] ##
-## ---------------------------------------------- ##"
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
-
-# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-# ---------------------------------------------
-# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-# accordingly.
-ac_fn_c_check_decl ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  as_decl_name=`echo $2|sed 's/ *(.*//'`
-  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-#ifndef $as_decl_name
-#ifdef __cplusplus
-  (void) $as_decl_use;
-#else
-  (void) $as_decl_name;
-#endif
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_decl
-
-# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
-# -------------------------------------------
-# Tests whether TYPE exists after having included INCLUDES, setting cache
-# variable VAR accordingly.
-ac_fn_c_check_type ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=no"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-if (sizeof ($2))
-	 return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-if (sizeof (($2)))
-	    return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  eval "$3=yes"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_type
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
-  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
-  # interfere with the next link command; also delete a directory that is
-  # left behind by Apple's compiler.  We do this before executing the actions.
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_c_check_func ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $2 (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $2
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $2 ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_func
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by avram $as_me 0.11.0, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
-
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    $as_echo "PATH: $as_dir"
-  done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
-  for ac_arg
-  do
-    case $ac_arg in
-    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-    | -silent | --silent | --silen | --sile | --sil)
-      continue ;;
-    *\'*)
-      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
-    2)
-      as_fn_append ac_configure_args1 " '$ac_arg'"
-      if test $ac_must_keep_next = true; then
-	ac_must_keep_next=false # Got value, back to normal.
-      else
-	case $ac_arg in
-	  *=* | --config-cache | -C | -disable-* | --disable-* \
-	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-	  | -with-* | --with-* | -without-* | --without-* | --x)
-	    case "$ac_configure_args0 " in
-	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-	    esac
-	    ;;
-	  -* ) ac_must_keep_next=true ;;
-	esac
-      fi
-      as_fn_append ac_configure_args " '$ac_arg'"
-      ;;
-    esac
-  done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log.  We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
-  # Save into config.log some information that might help in debugging.
-  {
-    echo
-
-    $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
-    echo
-    # The following way of writing the cache mishandles newlines in values,
-(
-  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-  (set) 2>&1 |
-    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      sed -n \
-	"s/'\''/'\''\\\\'\'''\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
-      ;; #(
-    *)
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-)
-    echo
-
-    $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=\$$ac_var
-      case $ac_val in
-      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-      esac
-      $as_echo "$ac_var='\''$ac_val'\''"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
-      echo
-      for ac_var in $ac_subst_files
-      do
-	eval ac_val=\$$ac_var
-	case $ac_val in
-	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-	esac
-	$as_echo "$ac_var='\''$ac_val'\''"
-      done | sort
-      echo
-    fi
-
-    if test -s confdefs.h; then
-      $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
-      echo
-      cat confdefs.h
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      $as_echo "$as_me: caught signal $ac_signal"
-    $as_echo "$as_me: exit $exit_status"
-  } >&5
-  rm -f core *.core core.conftest.* &&
-    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
-    exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
-  # We do not want a PATH search for config.site.
-  case $CONFIG_SITE in #((
-    -*)  ac_site_file1=./$CONFIG_SITE;;
-    */*) ac_site_file1=$CONFIG_SITE;;
-    *)   ac_site_file1=./$CONFIG_SITE;;
-  esac
-elif test "x$prefix" != xNONE; then
-  ac_site_file1=$prefix/share/config.site
-  ac_site_file2=$prefix/etc/config.site
-else
-  ac_site_file1=$ac_default_prefix/share/config.site
-  ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
-  test "x$ac_site_file" = xNONE && continue
-  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file" \
-      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
-  fi
-done
-
-if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special files
-  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
-  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . "$cache_file";;
-      *)                      . "./$cache_file";;
-    esac
-  fi
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
-  >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
-  eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val=\$ac_cv_env_${ac_var}_value
-  eval ac_new_val=\$ac_env_${ac_var}_value
-  case $ac_old_set,$ac_new_set in
-    set,)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,);;
-    *)
-      if test "x$ac_old_val" != "x$ac_new_val"; then
-	# differences in whitespace do not lead to failure.
-	ac_old_val_w=`echo x $ac_old_val`
-	ac_new_val_w=`echo x $ac_new_val`
-	if test "$ac_old_val_w" != "$ac_new_val_w"; then
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-	  ac_cache_corrupted=:
-	else
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
-	  eval $ac_var=\$ac_old_val
-	fi
-	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
-$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
-	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
-$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-    *) ac_arg=$ac_var=$ac_new_val ;;
-    esac
-    case " $ac_configure_args " in
-      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-am__api_version='1.11'
-
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
-  if test -f "$ac_dir/install-sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f "$ac_dir/install.sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f "$ac_dir/shtool"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
-
-
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
-$as_echo_n "checking whether build environment is sane... " >&6; }
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Reject unsafe characters in $srcdir or the absolute working directory
-# name.  Accept space and tab only in the latter.
-am_lf='
-'
-case `pwd` in
-  *[\\\"\#\$\&\'\`$am_lf]*)
-    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
-esac
-case $srcdir in
-  *[\\\"\#\$\&\'\`$am_lf\ \	]*)
-    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
-esac
-
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-   if test "$*" = "X"; then
-      # -L didn't work.
-      set X `ls -t "$srcdir/configure" conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$*" != "X $srcdir/configure conftest.file" \
-      && test "$*" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" "$LINENO" 5
-   fi
-
-   test "$2" = conftest.file
-   )
-then
-   # Ok.
-   :
-else
-   as_fn_error $? "newly created file is older than distributed files!
-Check your system clock" "$LINENO" 5
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-
-if test x"${MISSING+set}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\	*)
-    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
-  *)
-    MISSING="\${SHELL} $am_aux_dir/missing" ;;
-  esac
-fi
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
-else
-  am_missing_run=
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
-$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
-fi
-
-if test x"${install_sh}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\	*)
-    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
-  *)
-    install_sh="\${SHELL} $am_aux_dir/install-sh"
-  esac
-fi
-
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-if test "$cross_compiling" != no; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$STRIP"; then
-  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_STRIP"; then
-  ac_ct_STRIP=$STRIP
-  # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_STRIP"; then
-  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_STRIP="strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_STRIP" = x; then
-    STRIP=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    STRIP=$ac_ct_STRIP
-  fi
-else
-  STRIP="$ac_cv_prog_STRIP"
-fi
-
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
-$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
-if test -z "$MKDIR_P"; then
-  if ${ac_cv_path_mkdir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in mkdir gmkdir; do
-	 for ac_exec_ext in '' $ac_executable_extensions; do
-	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
-	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
-	     'mkdir (GNU coreutils) '* | \
-	     'mkdir (coreutils) '* | \
-	     'mkdir (fileutils) '4.1*)
-	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
-	       break 3;;
-	   esac
-	 done
-       done
-  done
-IFS=$as_save_IFS
-
-fi
-
-  test -d ./--version && rmdir ./--version
-  if test "${ac_cv_path_mkdir+set}" = set; then
-    MKDIR_P="$ac_cv_path_mkdir -p"
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for MKDIR_P within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    MKDIR_P="$ac_install_sh -d"
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
-$as_echo "$MKDIR_P" >&6; }
-
-mkdir_p="$MKDIR_P"
-case $mkdir_p in
-  [\\/$]* | ?:[\\/]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-
-for ac_prog in gawk mawk nawk awk
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AWK+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$AWK"; then
-  ac_cv_prog_AWK="$AWK" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_AWK="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$AWK" && break
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
-set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
-	@echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
-  *@@@%%%=?*=@@@%%%*)
-    eval ac_cv_prog_make_${ac_make}_set=yes;;
-  *)
-    eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-  SET_MAKE=
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-if test "`cd $srcdir && pwd`" != "`pwd`"; then
-  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
-  # is not polluted with repeated "-I."
-  am__isrc=' -I$(srcdir)'
-  # test to see if srcdir already configured
-  if test -f $srcdir/config.status; then
-    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
-  fi
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
-  if (cygpath --version) >/dev/null 2>/dev/null; then
-    CYGPATH_W='cygpath -w'
-  else
-    CYGPATH_W=echo
-  fi
-fi
-
-
-# Define the identity of the package.
- PACKAGE=avram
- VERSION=0.13.0
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$PACKAGE"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define VERSION "$VERSION"
-_ACEOF
-
-# Some tools Automake needs.
-
-ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
-
-
-AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
-
-
-AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
-
-
-AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
-
-
-MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
-
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
-# Always define AMTAR for backward compatibility.
-
-AMTAR=${AMTAR-"${am_missing_run}tar"}
-
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
-
-
-
-
-
-ac_config_headers="$ac_config_headers config.h"
-
-
-
-ISODATE=`date +%Y-%m-%d`
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-          if test -n "$ac_tool_prefix"; then
-    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  fi
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl.exe
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl.exe
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CC" && break
-done
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
-  esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link_default") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile.  We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
-	;;
-    [ab].out )
-	# We found the default executable, but exeext='' is most
-	# certainly right.
-	break;;
-    *.* )
-	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
-	then :; else
-	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	fi
-	# We set ac_cv_exeext here because the later test for it is not
-	# safe: cross compilers may not add the suffix if given an `-o'
-	# argument, so we may need to know it at that point already.
-	# Even if this section looks crufty: it has the advantage of
-	# actually working.
-	break;;
-    * )
-	break;;
-  esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
-  ac_file=''
-fi
-if test -z "$ac_file"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	  break;;
-    * ) break;;
-  esac
-done
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
-  { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-  if { ac_try='./conftest$ac_cv_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
-    fi
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  for ac_file in conftest.o conftest.obj conftest.*; do
-  test -f "$ac_file" || continue;
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GCC=yes
-else
-  GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_c_werror_flag=$ac_c_werror_flag
-   ac_c_werror_flag=yes
-   ac_cv_prog_cc_g=no
-   CFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-else
-  CFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  ac_c_werror_flag=$ac_save_c_werror_flag
-	 CFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
-   inside strings and character constants.  */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
-  test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-DEPDIR="${am__leading_dot}deps"
-
-ac_config_commands="$ac_config_commands depfiles"
-
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
-	@echo this is the am__doit target
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
-$as_echo_n "checking for style of include used by $am_make... " >&6; }
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
-  am__include=include
-  am__quote=
-  _am_result=GNU
-  ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   case `$am_make -s -f confmf 2> /dev/null` in #(
-   *the\ am__doit\ target*)
-     am__include=.include
-     am__quote="\""
-     _am_result=BSD
-     ;;
-   esac
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
-$as_echo "$_am_result" >&6; }
-rm -f confinc confmf
-
-# Check whether --enable-dependency-tracking was given.
-if test "${enable_dependency_tracking+set}" = set; then :
-  enableval=$enable_dependency_tracking;
-fi
-
-if test "x$enable_dependency_tracking" != xno; then
-  am_depcomp="$ac_aux_dir/depcomp"
-  AMDEPBACKSLASH='\'
-fi
- if test "x$enable_dependency_tracking" != xno; then
-  AMDEP_TRUE=
-  AMDEP_FALSE='#'
-else
-  AMDEP_TRUE='#'
-  AMDEP_FALSE=
-fi
-
-
-
-depcc="$CC"   am_compiler_list=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if ${am_cv_CC_dependencies_compiler_type+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CC_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  am__universal=false
-  case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
-      ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CC_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CC_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
-CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
-
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
-  am__fastdepCC_TRUE=
-  am__fastdepCC_FALSE='#'
-else
-  am__fastdepCC_TRUE='#'
-  am__fastdepCC_FALSE=
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
-set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
-	@echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
-  *@@@%%%=?*=@@@%%%*)
-    eval ac_cv_prog_make_${ac_make}_set=yes;;
-  *)
-    eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-  SET_MAKE=
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-if test "x$CC" != xcc; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
-$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
-$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
-fi
-set dummy $CC; ac_cc=`$as_echo "$2" |
-		      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
-if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-# Make sure it works both with $CC and with simple cc.
-# We do the test twice because some compilers refuse to overwrite an
-# existing .o file with -o, though they will create one.
-ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
-rm -f conftest2.*
-if { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } &&
-   test -f conftest2.$ac_objext && { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; };
-then
-  eval ac_cv_prog_cc_${ac_cc}_c_o=yes
-  if test "x$CC" != xcc; then
-    # Test first that cc exists at all.
-    if { ac_try='cc -c conftest.$ac_ext >&5'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-      ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
-      rm -f conftest2.*
-      if { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } &&
-	 test -f conftest2.$ac_objext && { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; };
-      then
-	# cc works too.
-	:
-      else
-	# cc exists but doesn't like -o.
-	eval ac_cv_prog_cc_${ac_cc}_c_o=no
-      fi
-    fi
-  fi
-else
-  eval ac_cv_prog_cc_${ac_cc}_c_o=no
-fi
-rm -f core conftest*
-
-fi
-if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
-
-fi
-
-# FIXME: we rely on the cache variable name because
-# there is no other way.
-set dummy $CC
-am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
-eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
-if test "$am_t" != yes; then
-   # Losing compiler, so override with the script.
-   # FIXME: It is wrong to rewrite CC.
-   # But if we don't then we get into trouble of one sort or another.
-   # A longer-term fix would be to have automake use am__CC in this case,
-   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
-   CC="$am_aux_dir/compile $CC"
-fi
-
-
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if ${ac_cv_prog_CPP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
-fi
-
-    done
-    ac_cv_prog_CPP=$CPP
-
-fi
-  CPP=$ac_cv_prog_CPP
-else
-  ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$GREP"; then
-  ac_path_GREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in grep ggrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
-# Check for GNU ac_path_GREP and select it if it is found.
-  # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'GREP' >> "conftest.nl"
-    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_GREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_GREP="$ac_path_GREP"
-      ac_path_GREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_GREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_GREP"; then
-    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
-   then ac_cv_path_EGREP="$GREP -E"
-   else
-     if test -z "$EGREP"; then
-  ac_path_EGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in egrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
-  # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'EGREP' >> "conftest.nl"
-    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_EGREP="$ac_path_EGREP"
-      ac_path_EGREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_EGREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_EGREP=$EGREP
-fi
-
-   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_stdc=yes
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-		   (('a' <= (c) && (c) <= 'i') \
-		     || ('j' <= (c) && (c) <= 'r') \
-		     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-	|| toupper (i) != TOUPPER (i))
-      return 2;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-		  inttypes.h stdint.h unistd.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_header in ctype.h fcntl.h strings.h time.h sys/file.h sys/time.h unistd.h math.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-else
-  as_fn_error $? "missing one of ctype.h fcntl.h strings.h time.h sys/file.h sys/time.h unistd.h math.h" "$LINENO" 5
-fi
-
-done
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "argz.h" "ac_cv_header_argz_h" "$ac_includes_default"
-if test "x$ac_cv_header_argz_h" = xyes; then :
-
-$as_echo "#define HAVE_ARGZ_H 1" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no argz.h so AVMINPUTS unsupported" >&5
-$as_echo "$as_me: WARNING: no argz.h so AVMINPUTS unsupported" >&2;}
-fi
-
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "fenv.h" "ac_cv_header_fenv_h" "$ac_includes_default"
-if test "x$ac_cv_header_fenv_h" = xyes; then :
-
-$as_echo "#define HAVE_FENV 1" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no fenv.h so floating math unsupported" >&5
-$as_echo "$as_me: WARNING: no fenv.h so floating math unsupported" >&2;}
-fi
-
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "complex.h" "ac_cv_header_complex_h" "$ac_includes_default"
-if test "x$ac_cv_header_complex_h" = xyes; then :
-
-$as_echo "#define HAVE_COMPLEX 1" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no complex.h so complex math unsupported" >&5
-$as_echo "$as_me: WARNING: no complex.h so complex math unsupported" >&2;}
-fi
-
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "setjmp.h" "ac_cv_header_setjmp_h" "$ac_includes_default"
-if test "x$ac_cv_header_setjmp_h" = xyes; then :
-
-$as_echo "#define HAVE_SETJMP 1" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: setjmp not detected for memory management" >&5
-$as_echo "$as_me: WARNING: setjmp not detected for memory management" >&2;}
-fi
-
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default"
-if test "x$ac_cv_header_malloc_h" = xyes; then :
-  ac_fn_c_check_decl "$LINENO" "__malloc_hook" "ac_cv_have_decl___malloc_hook" "#include<malloc.h>
-"
-if test "x$ac_cv_have_decl___malloc_hook" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL___MALLOC_HOOK $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
-  ac_fn_c_check_decl "$LINENO" "__realloc_hook" "ac_cv_have_decl___realloc_hook" "#include<malloc.h>
-"
-if test "x$ac_cv_have_decl___realloc_hook" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL___REALLOC_HOOK $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
-  ac_fn_c_check_decl "$LINENO" "__free_hook" "ac_cv_have_decl___free_hook" "#include<malloc.h>
-"
-if test "x$ac_cv_have_decl___free_hook" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL___FREE_HOOK $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
-
-$as_echo "#define HAVE_MALLOC 1" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: __free_hook not detected for memory management" >&5
-$as_echo "$as_me: WARNING: __free_hook not detected for memory management" >&2;}
-fi
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: __realloc_hook not detected for memory management" >&5
-$as_echo "$as_me: WARNING: __realloc_hook not detected for memory management" >&2;}
-fi
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: __malloc_hook not detected for memory management" >&5
-$as_echo "$as_me: WARNING: __malloc_hook not detected for memory management" >&2;}
-fi
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: malloc.h header not detected for memory management" >&5
-$as_echo "$as_me: WARNING: malloc.h header not detected for memory management" >&2;}
-fi
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
-$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if ${ac_cv_c_const+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-/* FIXME: Include the comments suggested by Paul. */
-#ifndef __cplusplus
-  /* Ultrix mips cc rejects this.  */
-  typedef int charset[2];
-  const charset cs;
-  /* SunOS 4.1.1 cc rejects this.  */
-  char const *const *pcpcc;
-  char **ppc;
-  /* NEC SVR4.0.2 mips cc rejects this.  */
-  struct point {int x, y;};
-  static struct point const zero = {0,0};
-  /* AIX XL C 1.02.0.0 rejects this.
-     It does not let you subtract one const X* pointer from another in
-     an arm of an if-expression whose if-part is not a constant
-     expression */
-  const char *g = "string";
-  pcpcc = &g + (g ? g-g : 0);
-  /* HPUX 7.0 cc rejects these. */
-  ++pcpcc;
-  ppc = (char**) pcpcc;
-  pcpcc = (char const *const *) ppc;
-  { /* SCO 3.2v4 cc rejects this.  */
-    char *t;
-    char const *s = 0 ? (char *) 0 : (char const *) 0;
-
-    *t++ = 0;
-    if (s) return 0;
-  }
-  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
-    int x[] = {25, 17};
-    const int *foo = &x[0];
-    ++foo;
-  }
-  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
-    typedef const int *iptr;
-    iptr p = 0;
-    ++p;
-  }
-  { /* AIX XL C 1.02.0.0 rejects this saying
-       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
-    struct s { int j; const int *ap[3]; };
-    struct s *b; b->j = 5;
-  }
-  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
-    const int foo = 10;
-    if (!foo) return 0;
-  }
-  return !cs[0] && !zero.x;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_const=yes
-else
-  ac_cv_c_const=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
-$as_echo "$ac_cv_c_const" >&6; }
-if test $ac_cv_c_const = no; then
-
-$as_echo "#define const /**/" >>confdefs.h
-
-fi
-
-ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
-_ACEOF
-
-fi
-
-
-
-for ac_func in strdup strstr
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
-  as_fn_error $? "missing either strdup or strstr" "$LINENO" 5
-fi
-done
-
-
-for ac_func in ctime_r
-do :
-  ac_fn_c_check_func "$LINENO" "ctime_r" "ac_cv_func_ctime_r"
-if test "x$ac_cv_func_ctime_r" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_CTIME_R 1
-_ACEOF
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no ctime_r so using non-reentrant ctime" >&5
-$as_echo "$as_me: WARNING: no ctime_r so using non-reentrant ctime" >&2;}
-fi
-done
-
-for ac_func in strerror
-do :
-  ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror"
-if test "x$ac_cv_func_strerror" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_STRERROR 1
-_ACEOF
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no strerror so error messages truncated" >&5
-$as_echo "$as_me: WARNING: no strerror so error messages truncated" >&2;}
-fi
-done
-
-ac_fn_c_check_func "$LINENO" "memmove" "ac_cv_func_memmove"
-if test "x$ac_cv_func_memmove" = xyes; then :
-  $as_echo "#define HAVE_MEMMOVE 1" >>confdefs.h
-
-else
-  case " $LIBOBJS " in
-  *" memmove.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS memmove.$ac_objext"
- ;;
-esac
-
-fi
-
-
-
-
-
-# Check whether --with-libgcrypt-prefix was given.
-if test "${with_libgcrypt_prefix+set}" = set; then :
-  withval=$with_libgcrypt_prefix; libgcrypt_config_prefix="$withval"
-else
-  libgcrypt_config_prefix=""
-fi
-
-  if test x$libgcrypt_config_prefix != x ; then
-     if test x${LIBGCRYPT_CONFIG+set} != xset ; then
-        LIBGCRYPT_CONFIG=$libgcrypt_config_prefix/bin/libgcrypt-config
-     fi
-  fi
-
-  # Extract the first word of "libgcrypt-config", so it can be a program name with args.
-set dummy libgcrypt-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_LIBGCRYPT_CONFIG+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $LIBGCRYPT_CONFIG in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_LIBGCRYPT_CONFIG="$LIBGCRYPT_CONFIG" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_path_LIBGCRYPT_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  test -z "$ac_cv_path_LIBGCRYPT_CONFIG" && ac_cv_path_LIBGCRYPT_CONFIG="no"
-  ;;
-esac
-fi
-LIBGCRYPT_CONFIG=$ac_cv_path_LIBGCRYPT_CONFIG
-if test -n "$LIBGCRYPT_CONFIG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBGCRYPT_CONFIG" >&5
-$as_echo "$LIBGCRYPT_CONFIG" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  tmp=1:1.2.0
-  if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
-     req_libgcrypt_api=`echo "$tmp"     | sed 's/\(.*\):\(.*\)/\1/'`
-     min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'`
-  else
-     req_libgcrypt_api=0
-     min_libgcrypt_version="$tmp"
-  fi
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBGCRYPT - version >= $min_libgcrypt_version" >&5
-$as_echo_n "checking for LIBGCRYPT - version >= $min_libgcrypt_version... " >&6; }
-  ok=no
-  if test "$LIBGCRYPT_CONFIG" != "no" ; then
-    req_major=`echo $min_libgcrypt_version | \
-               sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1/'`
-    req_minor=`echo $min_libgcrypt_version | \
-               sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\2/'`
-    req_micro=`echo $min_libgcrypt_version | \
-               sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\3/'`
-    libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version`
-    major=`echo $libgcrypt_config_version | \
-               sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1/'`
-    minor=`echo $libgcrypt_config_version | \
-               sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\2/'`
-    micro=`echo $libgcrypt_config_version | \
-               sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\3/'`
-    if test "$major" -gt "$req_major"; then
-        ok=yes
-    else
-        if test "$major" -eq "$req_major"; then
-            if test "$minor" -gt "$req_minor"; then
-               ok=yes
-            else
-               if test "$minor" -eq "$req_minor"; then
-                   if test "$micro" -ge "$req_micro"; then
-                     ok=yes
-                   fi
-               fi
-            fi
-        fi
-    fi
-  fi
-  if test $ok = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($libgcrypt_config_version)" >&5
-$as_echo "yes ($libgcrypt_config_version)" >&6; }
-  else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  fi
-  if test $ok = yes; then
-     # If we have a recent libgcrypt, we should also check that the
-     # API is compatible
-     if test "$req_libgcrypt_api" -gt 0 ; then
-        tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0`
-        if test "$tmp" -gt 0 ; then
-           { $as_echo "$as_me:${as_lineno-$LINENO}: checking LIBGCRYPT API version" >&5
-$as_echo_n "checking LIBGCRYPT API version... " >&6; }
-           if test "$req_libgcrypt_api" -eq "$tmp" ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: result: okay" >&5
-$as_echo "okay" >&6; }
-           else
-             ok=no
-             { $as_echo "$as_me:${as_lineno-$LINENO}: result: does not match. want=$req_libgcrypt_api got=$tmp" >&5
-$as_echo "does not match. want=$req_libgcrypt_api got=$tmp" >&6; }
-           fi
-        fi
-     fi
-  fi
-  if test $ok = yes; then
-    LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags`
-    LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs`
-
-$as_echo "#define HAVE_GCRYPT 1" >>confdefs.h
- LIBS="$LIBGCRYPT_LIBS $LIBS"
-  else
-    LIBGCRYPT_CFLAGS=""
-    LIBGCRYPT_LIBS=""
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no gcrypt so remote execution disabled" >&5
-$as_echo "$as_me: WARNING: no gcrypt so remote execution disabled" >&2;}
-  fi
-
-
-
-
-LDFLAGS="$LDFLAGS -L$HOME/lib"
-CPPFLAGS="$CPPFLAGS -I$HOME/include"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cblas_xerbla in -lgslcblas" >&5
-$as_echo_n "checking for cblas_xerbla in -lgslcblas... " >&6; }
-if ${ac_cv_lib_gslcblas_cblas_xerbla+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lgslcblas  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char cblas_xerbla ();
-int
-main ()
-{
-return cblas_xerbla ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_gslcblas_cblas_xerbla=yes
-else
-  ac_cv_lib_gslcblas_cblas_xerbla=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gslcblas_cblas_xerbla" >&5
-$as_echo "$ac_cv_lib_gslcblas_cblas_xerbla" >&6; }
-if test "x$ac_cv_lib_gslcblas_cblas_xerbla" = xyes; then :
-  LIBS="-lgslcblas "$LIBS; { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gsl_sf_bessel_J0 in -lgsl" >&5
-$as_echo_n "checking for gsl_sf_bessel_J0 in -lgsl... " >&6; }
-if ${ac_cv_lib_gsl_gsl_sf_bessel_J0+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lgsl  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char gsl_sf_bessel_J0 ();
-int
-main ()
-{
-return gsl_sf_bessel_J0 ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_gsl_gsl_sf_bessel_J0=yes
-else
-  ac_cv_lib_gsl_gsl_sf_bessel_J0=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gsl_gsl_sf_bessel_J0" >&5
-$as_echo "$ac_cv_lib_gsl_gsl_sf_bessel_J0" >&6; }
-if test "x$ac_cv_lib_gsl_gsl_sf_bessel_J0" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "gsl/gsl_deriv.h" "ac_cv_header_gsl_gsl_deriv_h" "$ac_includes_default"
-if test "x$ac_cv_header_gsl_gsl_deriv_h" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "gsl/gsl_sum.h" "ac_cv_header_gsl_gsl_sum_h" "$ac_includes_default"
-if test "x$ac_cv_header_gsl_gsl_sum_h" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "gsl/gsl_integration.h" "ac_cv_header_gsl_gsl_integration_h" "$ac_includes_default"
-if test "x$ac_cv_header_gsl_gsl_integration_h" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "gsl/gsl_math.h" "ac_cv_header_gsl_gsl_math_h" "$ac_includes_default"
-if test "x$ac_cv_header_gsl_gsl_math_h" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "gsl/gsl_sf_bessel.h" "ac_cv_header_gsl_gsl_sf_bessel_h" "$ac_includes_default"
-if test "x$ac_cv_header_gsl_gsl_sf_bessel_h" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "gsl/gsl_errno.h" "ac_cv_header_gsl_gsl_errno_h" "$ac_includes_default"
-if test "x$ac_cv_header_gsl_gsl_errno_h" = xyes; then :
-
-$as_echo "#define HAVE_GSL 1" >>confdefs.h
- LIBS="-lgsl "$LIBS
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no gsl headers so numerical analysis functions disabled" >&5
-$as_echo "$as_me: WARNING: no gsl headers so numerical analysis functions disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no gsl headers so numerical analysis functions disabled" >&5
-$as_echo "$as_me: WARNING: no gsl headers so numerical analysis functions disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no gsl headers so numerical analysis functions disabled" >&5
-$as_echo "$as_me: WARNING: no gsl headers so numerical analysis functions disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no gsl headers so numerical analysis functions disabled" >&5
-$as_echo "$as_me: WARNING: no gsl headers so numerical analysis functions disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no gsl headers so numerical analysis functions disabled" >&5
-$as_echo "$as_me: WARNING: no gsl headers so numerical analysis functions disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no gsl headers so numerical analysis functions disabled" >&5
-$as_echo "$as_me: WARNING: no gsl headers so numerical analysis functions disabled" >&2;}
-fi
-
-
-fi
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no gsl cblas library so numerical functions disabled" >&5
-$as_echo "$as_me: WARNING: no gsl cblas library so numerical functions disabled" >&2;}
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for glp_create_index in -lglpk" >&5
-$as_echo_n "checking for glp_create_index in -lglpk... " >&6; }
-if ${ac_cv_lib_glpk_glp_create_index+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lglpk  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char glp_create_index ();
-int
-main ()
-{
-return glp_create_index ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_glpk_glp_create_index=yes
-else
-  ac_cv_lib_glpk_glp_create_index=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_glpk_glp_create_index" >&5
-$as_echo "$ac_cv_lib_glpk_glp_create_index" >&6; }
-if test "x$ac_cv_lib_glpk_glp_create_index" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "glpk.h" "ac_cv_header_glpk_h" "$ac_includes_default"
-if test "x$ac_cv_header_glpk_h" = xyes; then :
-
-$as_echo "#define HAVE_GLPK 1" >>confdefs.h
- LIBS="-lglpk "$LIBS
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no glpk.h so linear programming functions disabled" >&5
-$as_echo "$as_me: WARNING: no glpk.h so linear programming functions disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no glpk lib so linear programming disabled" >&5
-$as_echo "$as_me: WARNING: no glpk lib so linear programming disabled" >&2;}
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for symamd in -lcolamd" >&5
-$as_echo_n "checking for symamd in -lcolamd... " >&6; }
-if ${ac_cv_lib_colamd_symamd+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcolamd  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char symamd ();
-int
-main ()
-{
-return symamd ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_colamd_symamd=yes
-else
-  ac_cv_lib_colamd_symamd=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_colamd_symamd" >&5
-$as_echo "$ac_cv_lib_colamd_symamd" >&6; }
-if test "x$ac_cv_lib_colamd_symamd" = xyes; then :
-  LIBS="-lcolamd "$LIBS; { $as_echo "$as_me:${as_lineno-$LINENO}: checking for make_lp in -llpsolve55" >&5
-$as_echo_n "checking for make_lp in -llpsolve55... " >&6; }
-if ${ac_cv_lib_lpsolve55_make_lp+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-llpsolve55  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char make_lp ();
-int
-main ()
-{
-return make_lp ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_lpsolve55_make_lp=yes
-else
-  ac_cv_lib_lpsolve55_make_lp=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lpsolve55_make_lp" >&5
-$as_echo "$ac_cv_lib_lpsolve55_make_lp" >&6; }
-if test "x$ac_cv_lib_lpsolve55_make_lp" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "lpsolve/lp_lib.h" "ac_cv_header_lpsolve_lp_lib_h" "$ac_includes_default"
-if test "x$ac_cv_header_lpsolve_lp_lib_h" = xyes; then :
-
-$as_echo "#define HAVE_LPSOLVE 1" >>confdefs.h
- LIBS="-llpsolve55 "$LIBS
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no lp_lib.h so linear programming functions disabled" >&5
-$as_echo "$as_me: WARNING: no lp_lib.h so linear programming functions disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no lpsolve55 lib so linear programming disabled" >&5
-$as_echo "$as_me: WARNING: no lpsolve55 lib so linear programming disabled" >&2;}
-fi
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no libltdl so lpsolve disabled" >&5
-$as_echo "$as_me: WARNING: no libltdl so lpsolve disabled" >&2;}
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mpfr_add in -lmpfr" >&5
-$as_echo_n "checking for mpfr_add in -lmpfr... " >&6; }
-if ${ac_cv_lib_mpfr_mpfr_add+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lmpfr  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char mpfr_add ();
-int
-main ()
-{
-return mpfr_add ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_mpfr_mpfr_add=yes
-else
-  ac_cv_lib_mpfr_mpfr_add=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpfr_mpfr_add" >&5
-$as_echo "$ac_cv_lib_mpfr_mpfr_add" >&6; }
-if test "x$ac_cv_lib_mpfr_mpfr_add" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "mpfr.h" "ac_cv_header_mpfr_h" "$ac_includes_default"
-if test "x$ac_cv_header_mpfr_h" = xyes; then :
-
-$as_echo "#define HAVE_MPFR 1" >>confdefs.h
- LIBS="-lmpfr "$LIBS
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no mpfr.h header so arbitrary precision math disabled" >&5
-$as_echo "$as_me: WARNING: no mpfr.h header so arbitrary precision math disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no mpfr library so arbitrary precision math disabled" >&5
-$as_echo "$as_me: WARNING: no mpfr library so arbitrary precision math disabled" >&2;}
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __gmp_randinit_default in -lgmp" >&5
-$as_echo_n "checking for __gmp_randinit_default in -lgmp... " >&6; }
-if ${ac_cv_lib_gmp___gmp_randinit_default+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lgmp  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char __gmp_randinit_default ();
-int
-main ()
-{
-return __gmp_randinit_default ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_gmp___gmp_randinit_default=yes
-else
-  ac_cv_lib_gmp___gmp_randinit_default=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gmp___gmp_randinit_default" >&5
-$as_echo "$ac_cv_lib_gmp___gmp_randinit_default" >&6; }
-if test "x$ac_cv_lib_gmp___gmp_randinit_default" = xyes; then :
-
-$as_echo "#define HAVE_GMP 1" >>confdefs.h
- LIBS="-lgmp "$LIBS
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no libgmp so arbitrary precision math partly disabled" >&5
-$as_echo "$as_me: WARNING: no libgmp so arbitrary precision math partly disabled" >&2;}
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dscal_ in -lblas" >&5
-$as_echo_n "checking for dscal_ in -lblas... " >&6; }
-if ${ac_cv_lib_blas_dscal_+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lblas  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dscal_ ();
-int
-main ()
-{
-return dscal_ ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_blas_dscal_=yes
-else
-  ac_cv_lib_blas_dscal_=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_blas_dscal_" >&5
-$as_echo "$ac_cv_lib_blas_dscal_" >&6; }
-if test "x$ac_cv_lib_blas_dscal_" = xyes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for amd_free in -lamd" >&5
-$as_echo_n "checking for amd_free in -lamd... " >&6; }
-if ${ac_cv_lib_amd_amd_free+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lamd  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char amd_free ();
-int
-main ()
-{
-return amd_free ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_amd_amd_free=yes
-else
-  ac_cv_lib_amd_amd_free=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_amd_amd_free" >&5
-$as_echo "$ac_cv_lib_amd_amd_free" >&6; }
-if test "x$ac_cv_lib_amd_amd_free" = xyes; then :
-  LIBS="-lblas -lamd "$LIBS; { $as_echo "$as_me:${as_lineno-$LINENO}: checking for umfpack_di_free_numeric in -lumfpack" >&5
-$as_echo_n "checking for umfpack_di_free_numeric in -lumfpack... " >&6; }
-if ${ac_cv_lib_umfpack_umfpack_di_free_numeric+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lumfpack  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char umfpack_di_free_numeric ();
-int
-main ()
-{
-return umfpack_di_free_numeric ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_umfpack_umfpack_di_free_numeric=yes
-else
-  ac_cv_lib_umfpack_umfpack_di_free_numeric=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_umfpack_umfpack_di_free_numeric" >&5
-$as_echo "$ac_cv_lib_umfpack_umfpack_di_free_numeric" >&6; }
-if test "x$ac_cv_lib_umfpack_umfpack_di_free_numeric" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "suitesparse/umfpack.h" "ac_cv_header_suitesparse_umfpack_h" "$ac_includes_default"
-if test "x$ac_cv_header_suitesparse_umfpack_h" = xyes; then :
-
-$as_echo "#define HAVE_UMF 1" >>confdefs.h
- LIBS="-lumfpack "$LIBS
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no umfpack.h header so sparse matrices disabled" >&5
-$as_echo "$as_me: WARNING: no umfpack.h header so sparse matrices disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no umfpack library so sparse matrices disabled" >&5
-$as_echo "$as_me: WARNING: no umfpack library so sparse matrices disabled" >&2;}
-fi
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no amd library so sparse matrices disabled" >&5
-$as_echo "$as_me: WARNING: no amd library so sparse matrices disabled" >&2;}
-fi
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no blas so sparse matrices disabled" >&5
-$as_echo "$as_me: WARNING: no blas so sparse matrices disabled" >&2;}
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgesvx_ in -llapack" >&5
-$as_echo_n "checking for dgesvx_ in -llapack... " >&6; }
-if ${ac_cv_lib_lapack_dgesvx_+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-llapack  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dgesvx_ ();
-int
-main ()
-{
-return dgesvx_ ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_lapack_dgesvx_=yes
-else
-  ac_cv_lib_lapack_dgesvx_=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lapack_dgesvx_" >&5
-$as_echo "$ac_cv_lib_lapack_dgesvx_" >&6; }
-if test "x$ac_cv_lib_lapack_dgesvx_" = xyes; then :
-
-$as_echo "#define HAVE_LAPACK 1" >>confdefs.h
- LIBS="-llapack "$LIBS; { $as_echo "$as_me:${as_lineno-$LINENO}: checking for harminv_solve in -lharminv" >&5
-$as_echo_n "checking for harminv_solve in -lharminv... " >&6; }
-if ${ac_cv_lib_harminv_harminv_solve+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lharminv  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char harminv_solve ();
-int
-main ()
-{
-return harminv_solve ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_harminv_harminv_solve=yes
-else
-  ac_cv_lib_harminv_harminv_solve=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_harminv_harminv_solve" >&5
-$as_echo "$ac_cv_lib_harminv_harminv_solve" >&6; }
-if test "x$ac_cv_lib_harminv_harminv_solve" = xyes; then :
-
-$as_echo "#define HAVE_HARMINV 1" >>confdefs.h
- LIBS="-lharminv  "$LIBS
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no harminv library so harmonic inversiondisabled" >&5
-$as_echo "$as_me: WARNING: no harminv library so harmonic inversiondisabled" >&2;}
-fi
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no lapack so some linear algebra functions disabled" >&5
-$as_echo "$as_me: WARNING: no lapack so some linear algebra functions disabled" >&2;}
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_plan_dft_1d in -lfftw3" >&5
-$as_echo_n "checking for fftw_plan_dft_1d in -lfftw3... " >&6; }
-if ${ac_cv_lib_fftw3_fftw_plan_dft_1d+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lfftw3  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char fftw_plan_dft_1d ();
-int
-main ()
-{
-return fftw_plan_dft_1d ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_fftw3_fftw_plan_dft_1d=yes
-else
-  ac_cv_lib_fftw3_fftw_plan_dft_1d=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fftw3_fftw_plan_dft_1d" >&5
-$as_echo "$ac_cv_lib_fftw3_fftw_plan_dft_1d" >&6; }
-if test "x$ac_cv_lib_fftw3_fftw_plan_dft_1d" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "fftw3.h" "ac_cv_header_fftw3_h" "$ac_includes_default"
-if test "x$ac_cv_header_fftw3_h" = xyes; then :
-
-$as_echo "#define HAVE_FFTW 1" >>confdefs.h
- LIBS=$LIBS" -lfftw3"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no fftw.h header so fourier transforms disabled" >&5
-$as_echo "$as_me: WARNING: no fftw.h header so fourier transforms disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no fftw library so fourier transforms disabled" >&5
-$as_echo "$as_me: WARNING: no fftw library so fourier transforms disabled" >&2;}
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for hybrd_ in -lminpack" >&5
-$as_echo_n "checking for hybrd_ in -lminpack... " >&6; }
-if ${ac_cv_lib_minpack_hybrd_+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lminpack  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char hybrd_ ();
-int
-main ()
-{
-return hybrd_ ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_minpack_hybrd_=yes
-else
-  ac_cv_lib_minpack_hybrd_=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_minpack_hybrd_" >&5
-$as_echo "$ac_cv_lib_minpack_hybrd_" >&6; }
-if test "x$ac_cv_lib_minpack_hybrd_" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "minpack.h" "ac_cv_header_minpack_h" "$ac_includes_default"
-if test "x$ac_cv_header_minpack_h" = xyes; then :
-
-$as_echo "#define HAVE_MINPACK 1" >>confdefs.h
- LIBS="-lminpack "$LIBS
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no minpack.h header so non-linear optimization disabled" >&5
-$as_echo "$as_me: WARNING: no minpack.h header so non-linear optimization disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no minpack library so non-linear optimization disabled" >&5
-$as_echo "$as_me: WARNING: no minpack library so non-linear optimization disabled" >&2;}
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for KINCreate in -lsundials_kinsol" >&5
-$as_echo_n "checking for KINCreate in -lsundials_kinsol... " >&6; }
-if ${ac_cv_lib_sundials_kinsol_KINCreate+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsundials_kinsol  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char KINCreate ();
-int
-main ()
-{
-return KINCreate ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_sundials_kinsol_KINCreate=yes
-else
-  ac_cv_lib_sundials_kinsol_KINCreate=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sundials_kinsol_KINCreate" >&5
-$as_echo "$ac_cv_lib_sundials_kinsol_KINCreate" >&6; }
-if test "x$ac_cv_lib_sundials_kinsol_KINCreate" = xyes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for N_VNew_Serial in -lsundials_nvecserial" >&5
-$as_echo_n "checking for N_VNew_Serial in -lsundials_nvecserial... " >&6; }
-if ${ac_cv_lib_sundials_nvecserial_N_VNew_Serial+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsundials_nvecserial  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char N_VNew_Serial ();
-int
-main ()
-{
-return N_VNew_Serial ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_sundials_nvecserial_N_VNew_Serial=yes
-else
-  ac_cv_lib_sundials_nvecserial_N_VNew_Serial=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sundials_nvecserial_N_VNew_Serial" >&5
-$as_echo "$ac_cv_lib_sundials_nvecserial_N_VNew_Serial" >&6; }
-if test "x$ac_cv_lib_sundials_nvecserial_N_VNew_Serial" = xyes; then :
-  CPPFLAGS="$CPPFLAGS -I/usr/include/sundials -I/usr/include/kinsol -I/usr/include/nvector"; ac_fn_c_check_header_mongrel "$LINENO" "sundials_types.h" "ac_cv_header_sundials_types_h" "$ac_includes_default"
-if test "x$ac_cv_header_sundials_types_h" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "sundials_math.h" "ac_cv_header_sundials_math_h" "$ac_includes_default"
-if test "x$ac_cv_header_sundials_math_h" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "sundials_nvector.h" "ac_cv_header_sundials_nvector_h" "$ac_includes_default"
-if test "x$ac_cv_header_sundials_nvector_h" = xyes; then :
-                    ac_fn_c_check_header_mongrel "$LINENO" "kinsol.h" "ac_cv_header_kinsol_h" "$ac_includes_default"
-if test "x$ac_cv_header_kinsol_h" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "kinsol_dense.h" "ac_cv_header_kinsol_dense_h" "$ac_includes_default"
-if test "x$ac_cv_header_kinsol_dense_h" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "kinsol_spgmr.h" "ac_cv_header_kinsol_spgmr_h" "$ac_includes_default"
-if test "x$ac_cv_header_kinsol_spgmr_h" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "kinsol_spbcgs.h" "ac_cv_header_kinsol_spbcgs_h" "$ac_includes_default"
-if test "x$ac_cv_header_kinsol_spbcgs_h" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "kinsol_sptfqmr.h" "ac_cv_header_kinsol_sptfqmr_h" "$ac_includes_default"
-if test "x$ac_cv_header_kinsol_sptfqmr_h" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "kinsol_spils.h" "ac_cv_header_kinsol_spils_h" "$ac_includes_default"
-if test "x$ac_cv_header_kinsol_spils_h" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "nvector_serial.h" "ac_cv_header_nvector_serial_h" "$ac_includes_default"
-if test "x$ac_cv_header_nvector_serial_h" = xyes; then :
-
-$as_echo "#define HAVE_KINSOL 1" >>confdefs.h
- LIBS="-lsundials_kinsol -lsundials_nvecserial "$LIBS
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no kinsol headers so non-linear optimization disabled" >&5
-$as_echo "$as_me: WARNING: no kinsol headers so non-linear optimization disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no kinsol headers so non-linear optimization disabled" >&5
-$as_echo "$as_me: WARNING: no kinsol headers so non-linear optimization disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no kinsol headers so non-linear optimization disabled" >&5
-$as_echo "$as_me: WARNING: no kinsol headers so non-linear optimization disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no kinsol headers so non-linear optimization disabled" >&5
-$as_echo "$as_me: WARNING: no kinsol headers so non-linear optimization disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no kinsol headers so non-linear optimization disabled" >&5
-$as_echo "$as_me: WARNING: no kinsol headers so non-linear optimization disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no kinsol headers so non-linear optimization disabled" >&5
-$as_echo "$as_me: WARNING: no kinsol headers so non-linear optimization disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no kinsol headers so non-linear optimization disabled" >&5
-$as_echo "$as_me: WARNING: no kinsol headers so non-linear optimization disabled" >&2;}
-fi
-
-
-else
-                 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no kinsol headers so non-linear optimization disabled" >&5
-$as_echo "$as_me: WARNING: no kinsol headers so non-linear optimization disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no kinsol headers so non-linear optimization disabled" >&5
-$as_echo "$as_me: WARNING: no kinsol headers so non-linear optimization disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no kinsol headers so non-linear optimization disabled" >&5
-$as_echo "$as_me: WARNING: no kinsol headers so non-linear optimization disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no kinsol library so non-linear optimization disabled" >&5
-$as_echo "$as_me: WARNING: no kinsol library so non-linear optimization disabled" >&2;}
-fi
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no kinsol library so non-linear optimization disabled" >&5
-$as_echo "$as_me: WARNING: no kinsol library so non-linear optimization disabled" >&2;}
-fi
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for bessel_i in -lRmath" >&5
-$as_echo_n "checking for bessel_i in -lRmath... " >&6; }
-if ${ac_cv_lib_Rmath_bessel_i+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lRmath  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char bessel_i ();
-int
-main ()
-{
-return bessel_i ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_Rmath_bessel_i=yes
-else
-  ac_cv_lib_Rmath_bessel_i=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Rmath_bessel_i" >&5
-$as_echo "$ac_cv_lib_Rmath_bessel_i" >&6; }
-if test "x$ac_cv_lib_Rmath_bessel_i" = xyes; then :
-  CPPFLAGS="$CPPFLAGS -DMATHLIB_STANDALONE"; ac_fn_c_check_header_mongrel "$LINENO" "Rmath.h" "ac_cv_header_Rmath_h" "$ac_includes_default"
-if test "x$ac_cv_header_Rmath_h" = xyes; then :
-
-$as_echo "#define HAVE_RMATH 1" >>confdefs.h
- LIBS="-lRmath -lm "$LIBS
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no Rmath.h header so statistical functions disabled" >&5
-$as_echo "$as_me: WARNING: no Rmath.h header so statistical functions disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no Rmath library so statistical functions disabled" >&5
-$as_echo "$as_me: WARNING: no Rmath library so statistical functions disabled" >&2;}
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for /usr/lib/libexpect.so.5" >&5
-$as_echo_n "checking for /usr/lib/libexpect.so.5... " >&6; }
-if ${ac_cv_file__usr_lib_libexpect_so_5+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  test "$cross_compiling" = yes &&
-  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "/usr/lib/libexpect.so.5"; then
-  ac_cv_file__usr_lib_libexpect_so_5=yes
-else
-  ac_cv_file__usr_lib_libexpect_so_5=no
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__usr_lib_libexpect_so_5" >&5
-$as_echo "$ac_cv_file__usr_lib_libexpect_so_5" >&6; }
-if test "x$ac_cv_file__usr_lib_libexpect_so_5" = xyes; then :
-  EXPATH=" /usr/lib/libexpect.so.5"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /usr/local/lib/libexpect.so.5" >&5
-$as_echo_n "checking for /usr/local/lib/libexpect.so.5... " >&6; }
-if ${ac_cv_file__usr_local_lib_libexpect_so_5+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  test "$cross_compiling" = yes &&
-  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "/usr/local/lib/libexpect.so.5"; then
-  ac_cv_file__usr_local_lib_libexpect_so_5=yes
-else
-  ac_cv_file__usr_local_lib_libexpect_so_5=no
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__usr_local_lib_libexpect_so_5" >&5
-$as_echo "$ac_cv_file__usr_local_lib_libexpect_so_5" >&6; }
-if test "x$ac_cv_file__usr_local_lib_libexpect_so_5" = xyes; then :
-  EXPATH=" /usr/local/lib/libexpect.so.5"
-else
-  as_ac_File=`$as_echo "ac_cv_file_$HOME/lib/libexpect.so.5" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $HOME/lib/libexpect.so.5" >&5
-$as_echo_n "checking for $HOME/lib/libexpect.so.5... " >&6; }
-if eval \${$as_ac_File+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  test "$cross_compiling" = yes &&
-  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "$HOME/lib/libexpect.so.5"; then
-  eval "$as_ac_File=yes"
-else
-  eval "$as_ac_File=no"
-fi
-fi
-eval ac_res=\$$as_ac_File
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
-  EXPATH=" $HOME/lib/libexpect.so.5"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /lib/libexpect.so.5" >&5
-$as_echo_n "checking for /lib/libexpect.so.5... " >&6; }
-if ${ac_cv_file__lib_libexpect_so_5+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  test "$cross_compiling" = yes &&
-  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "/lib/libexpect.so.5"; then
-  ac_cv_file__lib_libexpect_so_5=yes
-else
-  ac_cv_file__lib_libexpect_so_5=no
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__lib_libexpect_so_5" >&5
-$as_echo "$ac_cv_file__lib_libexpect_so_5" >&6; }
-if test "x$ac_cv_file__lib_libexpect_so_5" = xyes; then :
-  EXPATH=" /lib/libexpect.so.5"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /usr/lib/libexpect.so" >&5
-$as_echo_n "checking for /usr/lib/libexpect.so... " >&6; }
-if ${ac_cv_file__usr_lib_libexpect_so+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  test "$cross_compiling" = yes &&
-  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "/usr/lib/libexpect.so"; then
-  ac_cv_file__usr_lib_libexpect_so=yes
-else
-  ac_cv_file__usr_lib_libexpect_so=no
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__usr_lib_libexpect_so" >&5
-$as_echo "$ac_cv_file__usr_lib_libexpect_so" >&6; }
-if test "x$ac_cv_file__usr_lib_libexpect_so" = xyes; then :
-  EXPATH=" /usr/lib/libexpect.so"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /usr/local/lib/libexpect.so" >&5
-$as_echo_n "checking for /usr/local/lib/libexpect.so... " >&6; }
-if ${ac_cv_file__usr_local_lib_libexpect_so+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  test "$cross_compiling" = yes &&
-  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "/usr/local/lib/libexpect.so"; then
-  ac_cv_file__usr_local_lib_libexpect_so=yes
-else
-  ac_cv_file__usr_local_lib_libexpect_so=no
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__usr_local_lib_libexpect_so" >&5
-$as_echo "$ac_cv_file__usr_local_lib_libexpect_so" >&6; }
-if test "x$ac_cv_file__usr_local_lib_libexpect_so" = xyes; then :
-  EXPATH=" /usr/local/lib/libexpect.so"
-else
-  as_ac_File=`$as_echo "ac_cv_file_$HOME/lib/libexpect.so" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $HOME/lib/libexpect.so" >&5
-$as_echo_n "checking for $HOME/lib/libexpect.so... " >&6; }
-if eval \${$as_ac_File+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  test "$cross_compiling" = yes &&
-  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "$HOME/lib/libexpect.so"; then
-  eval "$as_ac_File=yes"
-else
-  eval "$as_ac_File=no"
-fi
-fi
-eval ac_res=\$$as_ac_File
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
-  EXPATH=" $HOME/lib/libexpect.so"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /lib/libexpect.so" >&5
-$as_echo_n "checking for /lib/libexpect.so... " >&6; }
-if ${ac_cv_file__lib_libexpect_so+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  test "$cross_compiling" = yes &&
-  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "/lib/libexpect.so"; then
-  ac_cv_file__lib_libexpect_so=yes
-else
-  ac_cv_file__lib_libexpect_so=no
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__lib_libexpect_so" >&5
-$as_echo "$ac_cv_file__lib_libexpect_so" >&6; }
-if test "x$ac_cv_file__lib_libexpect_so" = xyes; then :
-  EXPATH=" /lib/libexpect.so"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /usr/lib/libexpect5.43.so" >&5
-$as_echo_n "checking for /usr/lib/libexpect5.43.so... " >&6; }
-if ${ac_cv_file__usr_lib_libexpect5_43_so+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  test "$cross_compiling" = yes &&
-  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "/usr/lib/libexpect5.43.so"; then
-  ac_cv_file__usr_lib_libexpect5_43_so=yes
-else
-  ac_cv_file__usr_lib_libexpect5_43_so=no
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__usr_lib_libexpect5_43_so" >&5
-$as_echo "$ac_cv_file__usr_lib_libexpect5_43_so" >&6; }
-if test "x$ac_cv_file__usr_lib_libexpect5_43_so" = xyes; then :
-  EXPATH=" /usr/lib/libexpect5.43.so"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /usr/local/lib/libexpect5.43.so" >&5
-$as_echo_n "checking for /usr/local/lib/libexpect5.43.so... " >&6; }
-if ${ac_cv_file__usr_local_lib_libexpect5_43_so+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  test "$cross_compiling" = yes &&
-  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "/usr/local/lib/libexpect5.43.so"; then
-  ac_cv_file__usr_local_lib_libexpect5_43_so=yes
-else
-  ac_cv_file__usr_local_lib_libexpect5_43_so=no
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__usr_local_lib_libexpect5_43_so" >&5
-$as_echo "$ac_cv_file__usr_local_lib_libexpect5_43_so" >&6; }
-if test "x$ac_cv_file__usr_local_lib_libexpect5_43_so" = xyes; then :
-  EXPATH=" /usr/local/lib/libexpect5.43.so"
-else
-  as_ac_File=`$as_echo "ac_cv_file_$HOME/lib/libexpect5.43.so" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $HOME/lib/libexpect5.43.so" >&5
-$as_echo_n "checking for $HOME/lib/libexpect5.43.so... " >&6; }
-if eval \${$as_ac_File+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  test "$cross_compiling" = yes &&
-  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "$HOME/lib/libexpect5.43.so"; then
-  eval "$as_ac_File=yes"
-else
-  eval "$as_ac_File=no"
-fi
-fi
-eval ac_res=\$$as_ac_File
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
-  EXPATH=" $HOME/lib/libexpect5.43.so"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /lib/libexpect5.43.so" >&5
-$as_echo_n "checking for /lib/libexpect5.43.so... " >&6; }
-if ${ac_cv_file__lib_libexpect5_43_so+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  test "$cross_compiling" = yes &&
-  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "/lib/libexpect5.43.so"; then
-  ac_cv_file__lib_libexpect5_43_so=yes
-else
-  ac_cv_file__lib_libexpect5_43_so=no
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__lib_libexpect5_43_so" >&5
-$as_echo "$ac_cv_file__lib_libexpect5_43_so" >&6; }
-if test "x$ac_cv_file__lib_libexpect5_43_so" = xyes; then :
-  EXPATH=" /lib/libexpect5.43.so"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /lib/libexpect5.44.so" >&5
-$as_echo_n "checking for /lib/libexpect5.44.so... " >&6; }
-if ${ac_cv_file__lib_libexpect5_44_so+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  test "$cross_compiling" = yes &&
-  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "/lib/libexpect5.44.so"; then
-  ac_cv_file__lib_libexpect5_44_so=yes
-else
-  ac_cv_file__lib_libexpect5_44_so=no
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__lib_libexpect5_44_so" >&5
-$as_echo "$ac_cv_file__lib_libexpect5_44_so" >&6; }
-if test "x$ac_cv_file__lib_libexpect5_44_so" = xyes; then :
-  EXPATH=" /lib/libexpect5.44.so"
-fi
-
-fi
-
-fi
-
-fi
-
-fi
-
-fi
-
-fi
-
-fi
-
-fi
-
-fi
-
-fi
-
-fi
-
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for openpty in -lutil" >&5
-$as_echo_n "checking for openpty in -lutil... " >&6; }
-if ${ac_cv_lib_util_openpty+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lutil  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char openpty ();
-int
-main ()
-{
-return openpty ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_util_openpty=yes
-else
-  ac_cv_lib_util_openpty=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_openpty" >&5
-$as_echo "$ac_cv_lib_util_openpty" >&6; }
-if test "x$ac_cv_lib_util_openpty" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "tcl8.4/expect.h" "ac_cv_header_tcl8_4_expect_h" "$ac_includes_default"
-if test "x$ac_cv_header_tcl8_4_expect_h" = xyes; then :
-
-$as_echo "#define HAVE_EXPECT 1" >>confdefs.h
- LIBS="-lutil -ltcl8.4"$EXPATH" "$LIBS
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openpty in -lutil" >&5
-$as_echo_n "checking for openpty in -lutil... " >&6; }
-if ${ac_cv_lib_util_openpty+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lutil  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char openpty ();
-int
-main ()
-{
-return openpty ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_util_openpty=yes
-else
-  ac_cv_lib_util_openpty=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_openpty" >&5
-$as_echo "$ac_cv_lib_util_openpty" >&6; }
-if test "x$ac_cv_lib_util_openpty" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "tcl8.5/expect.h" "ac_cv_header_tcl8_5_expect_h" "$ac_includes_default"
-if test "x$ac_cv_header_tcl8_5_expect_h" = xyes; then :
-
-$as_echo "#define HAVE_EXPECT 1" >>confdefs.h
- LIBS="-lutil -ltcl8.5"$EXPATH" "$LIBS
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no libexpect so --interactive is disabled" >&5
-$as_echo "$as_me: WARNING: no libexpect so --interactive is disabled" >&2;}
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no openpty in libutil so --interactive is disabled" >&5
-$as_echo "$as_me: WARNING: no openpty in libutil so --interactive is disabled" >&2;}
-fi
-
-fi
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no openpty in libutil so --interactive is disabled" >&5
-$as_echo "$as_me: WARNING: no openpty in libutil so --interactive is disabled" >&2;}
-fi
-
-
-
-CFLAGS="-O3 -mtune=native -march=native"
-
-ac_config_files="$ac_config_files Makefile avram.lsm avram.spec avm/Makefile src/Makefile doc/Makefile"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems.  If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
-  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-
-  (set) 2>&1 |
-    case $as_nl`(ac_space=' '; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      # `set' does not quote correctly, so add quotes: double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \.
-      sed -n \
-	"s/'/'\\\\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;; #(
-    *)
-      # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-) |
-  sed '
-     /^ac_cv_env_/b end
-     t clear
-     :clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
-  if test -w "$cache_file"; then
-    if test "x$cache_file" != "x/dev/null"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
-      if test ! -f "$cache_file" || test -h "$cache_file"; then
-	cat confcache >"$cache_file"
-      else
-        case $cache_file in #(
-        */* | ?:*)
-	  mv -f confcache "$cache_file"$$ &&
-	  mv -f "$cache_file"$$ "$cache_file" ;; #(
-        *)
-	  mv -f confcache "$cache_file" ;;
-	esac
-      fi
-    fi
-  else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
-  fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
-  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
-  #    will be set to the directory where LIBOBJS objects are built.
-  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
- if test -n "$EXEEXT"; then
-  am__EXEEXT_TRUE=
-  am__EXEEXT_FALSE='#'
-else
-  am__EXEEXT_TRUE='#'
-  am__EXEEXT_FALSE=
-fi
-
-if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  as_fn_error $? "conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-	expr "X$arg" : "X\\(.*\\)$as_nl";
-	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""	$as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='	';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -p'
-  fi
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-	test -d "$1/.";
-      else
-	case $1 in #(
-	-*)set "./$1";;
-	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-	???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by avram $as_me 0.11.0, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-config_commands="$ac_config_commands"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration.  Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number and configuration settings, then exit
-      --config     print configuration, then exit
-  -q, --quiet, --silent
-                   do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-      --file=FILE[:TEMPLATE]
-                   instantiate the configuration file FILE
-      --header=FILE[:TEMPLATE]
-                   instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Configuration commands:
-$config_commands
-
-Report bugs to <[email protected]>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-avram config.status 0.11.0
-configured by $0, generated by GNU Autoconf 2.68,
-  with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2010 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-MKDIR_P='$MKDIR_P'
-AWK='$AWK'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=?*)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  --*=)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=
-    ac_shift=:
-    ;;
-  *)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    $as_echo "$ac_cs_version"; exit ;;
-  --config | --confi | --conf | --con | --co | --c )
-    $as_echo "$ac_cs_config"; exit ;;
-  --debug | --debu | --deb | --de | --d | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    '') as_fn_error $? "missing file argument" ;;
-    esac
-    as_fn_append CONFIG_FILES " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --he | --h)
-    # Conflict between --help and --header
-    as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
-  --help | --hel | -h )
-    $as_echo "$ac_cs_usage"; exit ;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
-  *) as_fn_append ac_config_targets " $1"
-     ac_need_defaults=false ;;
-
-  esac
-  shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-  shift
-  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
-  CONFIG_SHELL='$SHELL'
-  export CONFIG_SHELL
-  exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-  $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-#
-# INIT-COMMANDS
-#
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
-  case $ac_config_target in
-    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
-    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
-    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "avram.lsm") CONFIG_FILES="$CONFIG_FILES avram.lsm" ;;
-    "avram.spec") CONFIG_FILES="$CONFIG_FILES avram.spec" ;;
-    "avm/Makefile") CONFIG_FILES="$CONFIG_FILES avm/Makefile" ;;
-    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
-    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
-
-  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
-  esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
-fi
-
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
-  tmp= ac_tmp=
-  trap 'exit_status=$?
-  : "${ac_tmp:=$tmp}"
-  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
-  trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -d "$tmp"
-}  ||
-{
-  tmp=./conf$$-$RANDOM
-  (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
-  eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\\r'
-else
-  ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
-  echo "cat >conf$$subs.awk <<_ACEOF" &&
-  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
-  echo "_ACEOF"
-} >conf$$subs.sh ||
-  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  . ./conf$$subs.sh ||
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
-  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
-  if test $ac_delim_n = $ac_delim_num; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
-  N
-  s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
-  for (key in S) S_is_set[key] = 1
-  FS = ""
-
-}
-{
-  line = $ 0
-  nfields = split(line, field, "@")
-  substed = 0
-  len = length(field[1])
-  for (i = 2; i < nfields; i++) {
-    key = field[i]
-    keylen = length(key)
-    if (S_is_set[key]) {
-      value = S[key]
-      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
-      len += length(value) + length(field[++i])
-      substed = 1
-    } else
-      len += 1 + keylen
-  }
-
-  print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
-  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
-  cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
-  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
-h
-s///
-s/^/:/
-s/[	 ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[	 ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[	 ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
-  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_tt"; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any.  Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  for (key in D) D_is_set[key] = 1
-  FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
-  line = \$ 0
-  split(line, arg, " ")
-  if (arg[1] == "#") {
-    defundef = arg[2]
-    mac1 = arg[3]
-  } else {
-    defundef = substr(arg[1], 2)
-    mac1 = arg[2]
-  }
-  split(mac1, mac2, "(") #)
-  macro = mac2[1]
-  prefix = substr(line, 1, index(line, defundef) - 1)
-  if (D_is_set[macro]) {
-    # Preserve the white space surrounding the "#".
-    print prefix "define", macro P[macro] D[macro]
-    next
-  } else {
-    # Replace #undef with comments.  This is necessary, for example,
-    # in the case of _POSIX_SOURCE, which is predefined and required
-    # on some systems where configure will not decide to define it.
-    if (defundef == "undef") {
-      print "/*", prefix defundef, macro, "*/"
-      next
-    }
-  }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
-shift
-for ac_tag
-do
-  case $ac_tag in
-  :[FHLC]) ac_mode=$ac_tag; continue;;
-  esac
-  case $ac_mode$ac_tag in
-  :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
-  :[FH]-) ac_tag=-:-;;
-  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
-  esac
-  ac_save_IFS=$IFS
-  IFS=:
-  set x $ac_tag
-  IFS=$ac_save_IFS
-  shift
-  ac_file=$1
-  shift
-
-  case $ac_mode in
-  :L) ac_source=$1;;
-  :[FH])
-    ac_file_inputs=
-    for ac_f
-    do
-      case $ac_f in
-      -) ac_f="$ac_tmp/stdin";;
-      *) # Look for the file first in the build tree, then in the source tree
-	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
-	 # because $ac_f cannot contain `:'.
-	 test -f "$ac_f" ||
-	   case $ac_f in
-	   [\\/$]*) false;;
-	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
-	   esac ||
-	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
-      esac
-      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
-      as_fn_append ac_file_inputs " '$ac_f'"
-    done
-
-    # Let's still pretend it is `configure' which instantiates (i.e., don't
-    # use $as_me), people would be surprised to read:
-    #    /* config.h.  Generated by config.status.  */
-    configure_input='Generated from '`
-	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
-	`' by configure.'
-    if test x"$ac_file" != x-; then
-      configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
-    fi
-    # Neutralize special characters interpreted by sed in replacement strings.
-    case $configure_input in #(
-    *\&* | *\|* | *\\* )
-       ac_sed_conf_input=`$as_echo "$configure_input" |
-       sed 's/[\\\\&|]/\\\\&/g'`;; #(
-    *) ac_sed_conf_input=$configure_input;;
-    esac
-
-    case $ac_tag in
-    *:-:* | *:-) cat >"$ac_tmp/stdin" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
-    esac
-    ;;
-  esac
-
-  ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  as_dir="$ac_dir"; as_fn_mkdir_p
-  ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
-  case $ac_mode in
-  :F)
-  #
-  # CONFIG_FILE
-  #
-
-  case $INSTALL in
-  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
-  esac
-  ac_MKDIR_P=$MKDIR_P
-  case $MKDIR_P in
-  [\\/$]* | ?:[\\/]* ) ;;
-  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
-  esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
-  p
-  q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  ac_datarootdir_hack='
-  s&@datadir@&$datadir&g
-  s&@docdir@&$docdir&g
-  s&@infodir@&$infodir&g
-  s&@localedir@&$localedir&g
-  s&@mandir@&$mandir&g
-  s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-s&@MKDIR_P@&$ac_MKDIR_P&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
-  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
-      "$ac_tmp/out"`; test -z "$ac_out"; } &&
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&2;}
-
-  rm -f "$ac_tmp/stdin"
-  case $ac_file in
-  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
-  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
-  esac \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-  :H)
-  #
-  # CONFIG_HEADER
-  #
-  if test x"$ac_file" != x-; then
-    {
-      $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
-    } >"$ac_tmp/config.h" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
-    else
-      rm -f "$ac_file"
-      mv "$ac_tmp/config.h" "$ac_file" \
-	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    fi
-  else
-    $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error $? "could not create -" "$LINENO" 5
-  fi
-# Compute "$ac_file"'s index in $config_headers.
-_am_arg="$ac_file"
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $_am_arg | $_am_arg:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
-$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$_am_arg" : 'X\(//\)[^/]' \| \
-	 X"$_am_arg" : 'X\(//\)$' \| \
-	 X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$_am_arg" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`/stamp-h$_am_stamp_count
- ;;
-
-  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
-$as_echo "$as_me: executing $ac_file commands" >&6;}
- ;;
-  esac
-
-
-  case $ac_file$ac_mode in
-    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
-  # are listed without --file.  Let's play safe and only enable the eval
-  # if we detect the quoting.
-  case $CONFIG_FILES in
-  *\'*) eval set x "$CONFIG_FILES" ;;
-  *)   set x $CONFIG_FILES ;;
-  esac
-  shift
-  for mf
-  do
-    # Strip MF so we end up with the name of the file.
-    mf=`echo "$mf" | sed -e 's/:.*$//'`
-    # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named `Makefile.in', but
-    # some people rename them; so instead we look at the file content.
-    # Grep'ing the first line is not enough: some people post-process
-    # each Makefile.in and add a new line on top of each file to say so.
-    # Grep'ing the whole file is not good either: AIX grep has a line
-    # limit of 2048, but all sed's we know have understand at least 4000.
-    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
-      dirpart=`$as_dirname -- "$mf" ||
-$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$mf" : 'X\(//\)[^/]' \| \
-	 X"$mf" : 'X\(//\)$' \| \
-	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$mf" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-    else
-      continue
-    fi
-    # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running `make'.
-    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-    test -z "$DEPDIR" && continue
-    am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "am__include" && continue
-    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # When using ansi2knr, U may be empty or an underscore; expand it
-    U=`sed -n 's/^U = //p' < "$mf"`
-    # Find all dependency output files, they are included files with
-    # $(DEPDIR) in their names.  We invoke sed twice because it is the
-    # simplest approach to changing $(DEPDIR) to its actual value in the
-    # expansion.
-    for file in `sed -n "
-      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-      # Make sure the directory exists.
-      test -f "$dirpart/$file" && continue
-      fdir=`$as_dirname -- "$file" ||
-$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$file" : 'X\(//\)[^/]' \| \
-	 X"$file" : 'X\(//\)$' \| \
-	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      as_dir=$dirpart/$fdir; as_fn_mkdir_p
-      # echo "creating $dirpart/$file"
-      echo '# dummy' > "$dirpart/$file"
-    done
-  done
-}
- ;;
-
-  esac
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
-  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded.  So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status.  When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
-  ac_cs_success=:
-  ac_config_status_args=
-  test "$silent" = yes &&
-    ac_config_status_args="$ac_config_status_args --quiet"
-  exec 5>/dev/null
-  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-  exec 5>>config.log
-  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-  # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-

+ 0 - 345
configure.in

@@ -1,345 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-
-AC_INIT(avram,0.11.0,[email protected])
-dnl Every other copy of the package version number gets its value from here
-AM_INIT_AUTOMAKE(avram, 0.13.0)
-AM_CONFIG_HEADER(config.h)
-AC_SUBST(VERSION)
-
-ISODATE=`date +%Y-%m-%d`
-AC_SUBST(ISODATE)
-
-dnl Checks for programs.
-AC_PROG_INSTALL
-AC_PROG_CC
-AC_PROG_MAKE_SET
-AM_PROG_CC_C_O
-
-dnl Checks for header files.
-
-AC_HEADER_STDC
-
-AC_CHECK_HEADERS(
-   ctype.h fcntl.h strings.h time.h sys/file.h sys/time.h unistd.h math.h,,
-   [AC_MSG_ERROR(missing one of ctype.h fcntl.h strings.h time.h sys/file.h sys/time.h unistd.h math.h)])
-
-AC_CHECK_HEADER(
-   argz.h,
-   [AC_DEFINE([HAVE_ARGZ_H],1,[if you have the argz library])],
-   [AC_MSG_WARN(no argz.h so AVMINPUTS unsupported)])
-
-AC_CHECK_HEADER(
-   fenv.h,
-   [AC_DEFINE([HAVE_FENV],1,[if you have floating point math])],
-   [AC_MSG_WARN(no fenv.h so floating math unsupported)])
-
-AC_CHECK_HEADER(
-   complex.h,
-   [AC_DEFINE([HAVE_COMPLEX],1,[if you have complex math])],
-   [AC_MSG_WARN(no complex.h so complex math unsupported)])
-
-AC_CHECK_HEADER(
-   setjmp.h,
-   [AC_DEFINE([HAVE_SETJMP],1,[Define if you have setjmp functions])],
-   [AC_MSG_WARN(setjmp not detected for memory management)])
-
-AC_CHECK_HEADER(
-   malloc.h,
-   [AC_CHECK_DECLS(
-      __malloc_hook,
-      [AC_CHECK_DECLS(
-         __realloc_hook,
-         [AC_CHECK_DECLS(
-            __free_hook,
-            [AC_DEFINE([HAVE_MALLOC],1,[Define if you have the standard malloc.h header])],
-            [AC_MSG_WARN(__free_hook not detected for memory management)],
-            [#include<malloc.h>])],
-         [AC_MSG_WARN(__realloc_hook not detected for memory management)],
-         [#include<malloc.h>])],
-      [AC_MSG_WARN(__malloc_hook not detected for memory management)],
-      [#include<malloc.h>])],
-   [AC_MSG_WARN(malloc.h header not detected for memory management)])
-
-dnl Checks for typedefs, structures, and compiler characteristics.
-
-dnl AC_CANONICAL_HOST
-AC_C_CONST
-AC_TYPE_SIZE_T
-
-dnl Checks for library functions.
-
-AC_CHECK_FUNCS(
-  strdup strstr,,
-  [AC_MSG_ERROR(missing either strdup or strstr)])
-
-AC_CHECK_FUNCS(ctime_r,,[AC_MSG_WARN(no ctime_r so using non-reentrant ctime)])
-AC_CHECK_FUNCS(strerror,,[AC_MSG_WARN(no strerror so error messages truncated)])
-AC_REPLACE_FUNCS(memmove)
-
-dnl checks for libraries
-
-AM_PATH_LIBGCRYPT(
-    ,
-    [AC_DEFINE([HAVE_GCRYPT],1,[Define if you have libgcrypt]) LIBS="$LIBGCRYPT_LIBS $LIBS"],
-    [AC_MSG_WARN(no gcrypt so remote execution disabled)])
-
-dnl allow for a non-root installation
-LDFLAGS="$LDFLAGS -L$HOME/lib"
-CPPFLAGS="$CPPFLAGS -I$HOME/include"
-dnl LDFLAGS="$LDFLAGS -L$HOME/lib $LIBLTDL"
-dnl CPPFLAGS="$CPPFLAGS -I$HOME/include $LTDLINCL"
-
-dnl is there a macro to check for a list of headers atomically?
-
-AC_CHECK_LIB(
-   gslcblas,
-   cblas_xerbla,
-   LIBS="-lgslcblas "$LIBS; [AC_CHECK_LIB(
-      gsl,
-      gsl_sf_bessel_J0,
-      [AC_CHECK_HEADER(
-         gsl/gsl_deriv.h,
-         [AC_CHECK_HEADER(
-            gsl/gsl_sum.h,
-            [AC_CHECK_HEADER(
-               gsl/gsl_integration.h,
-               [AC_CHECK_HEADER(
-                  gsl/gsl_math.h,
-                  [AC_CHECK_HEADER(
-                     gsl/gsl_sf_bessel.h,
-                     [AC_CHECK_HEADER(
-                        gsl/gsl_errno.h,
-                        [AC_DEFINE([HAVE_GSL],1,[Define if you have the GNU Scientific library]) LIBS="-lgsl "$LIBS],
-                        [AC_MSG_WARN(no gsl headers so numerical analysis functions disabled)])],
-                     [AC_MSG_WARN(no gsl headers so numerical analysis functions disabled)])],
-                  [AC_MSG_WARN(no gsl headers so numerical analysis functions disabled)])],
-               [AC_MSG_WARN(no gsl headers so numerical analysis functions disabled)])],
-            [AC_MSG_WARN(no gsl headers so numerical analysis functions disabled)])],
-         [AC_MSG_WARN(no gsl headers so numerical analysis functions disabled)])],
-      [])],
-   [AC_MSG_WARN(no gsl cblas library so numerical functions disabled)],
-   [])
-
-AC_CHECK_LIB(
-   glpk,
-   glp_create_index,
-   [AC_CHECK_HEADER(
-      glpk.h,
-      [AC_DEFINE([HAVE_GLPK],1,[Define if you have the GNU linear programming kit]) LIBS="-lglpk "$LIBS],
-      [AC_MSG_WARN(no glpk.h so linear programming functions disabled)])],
-   [AC_MSG_WARN(no glpk lib so linear programming disabled)])
-
-AC_CHECK_LIB(
-   colamd,
-   symamd,
-   LIBS="-lcolamd "$LIBS; [AC_CHECK_LIB(
-      lpsolve55,
-      make_lp,
-      [AC_CHECK_HEADER(
-         lpsolve/lp_lib.h,
-         [AC_DEFINE([HAVE_LPSOLVE],1,[Define if you have lpsolve]) LIBS="-llpsolve55 "$LIBS],
-         [AC_MSG_WARN(no lp_lib.h so linear programming functions disabled)])],
-      [AC_MSG_WARN(no lpsolve55 lib so linear programming disabled)])],
-   [AC_MSG_WARN(no libltdl so lpsolve disabled)])
-
-AC_CHECK_LIB(
-   mpfr,
-   mpfr_add,
-   [AC_CHECK_HEADER(
-      mpfr.h,
-      AC_DEFINE([HAVE_MPFR],1,[Define if you have the mpfr arbitrary precision library]) LIBS="-lmpfr "$LIBS,
-      [AC_MSG_WARN(no mpfr.h header so arbitrary precision math disabled)])],
-   [AC_MSG_WARN(no mpfr library so arbitrary precision math disabled)])
-
-dnl the gmp header file isn't needed
-
-AC_CHECK_LIB(
-   gmp,
-   __gmp_randinit_default,
-   [AC_DEFINE([HAVE_GMP],1,[Define if you have GNU multiple precision library]) LIBS="-lgmp "$LIBS],
-   [AC_MSG_WARN(no libgmp so arbitrary precision math partly disabled)])
-
-dnl umfpak requires blas and amd libraries already defined or else the check for it won't work
-
-AC_CHECK_LIB(
-   blas,
-   dscal_,
-   [AC_CHECK_LIB(
-      amd,
-      amd_free,
-      LIBS="-lblas -lamd "$LIBS; [AC_CHECK_LIB(
-         umfpack,
-         umfpack_di_free_numeric,
-         [AC_CHECK_HEADER(
-            suitesparse/umfpack.h,
-            [AC_DEFINE([HAVE_UMF],1,[Define if you have the ufsparse libraries]) LIBS="-lumfpack "$LIBS],
-            [AC_MSG_WARN(no umfpack.h header so sparse matrices disabled)])],
-         [AC_MSG_WARN(no umfpack library so sparse matrices disabled)],
-         [])],
-      [AC_MSG_WARN(no amd library so sparse matrices disabled)],
-      [])],
-   [AC_MSG_WARN(no blas so sparse matrices disabled)],
-   [])
-
-dnl lapack has no header file so only the library is checked
-dnl harminv is checked only if lapack is present
-
-AC_CHECK_LIB(
-   lapack,
-   dgesvx_,
-   [AC_DEFINE([HAVE_LAPACK],1,[Define if you have the lapack library]) LIBS="-llapack "$LIBS; AC_CHECK_LIB(
-      harminv,
-      harminv_solve,
-      AC_DEFINE([HAVE_HARMINV],1,[Define if you have the harminv library]) LIBS="-lharminv  "$LIBS,
-      [AC_MSG_WARN(no harminv library so harmonic inversiondisabled)],
-      [])],
-   [AC_MSG_WARN(no lapack so some linear algebra functions disabled)],
-   [])
-
-AC_CHECK_LIB(
-   fftw3,
-   fftw_plan_dft_1d,
-   [AC_CHECK_HEADER(
-      fftw3.h,
-      [AC_DEFINE([HAVE_FFTW],1,[Define if you have the fftw library]) LIBS=$LIBS" -lfftw3"],
-      [AC_MSG_WARN(no fftw.h header so fourier transforms disabled)])],
-   [AC_MSG_WARN(no fftw library so fourier transforms disabled)],
-   [])
-
-dnl minpack.h might be a Debian addition
-
-AC_CHECK_LIB(
-   minpack,
-   hybrd_,
-   [AC_CHECK_HEADER(
-      minpack.h,
-      [AC_DEFINE([HAVE_MINPACK],1,[Define if you have the minpack library]) LIBS="-lminpack "$LIBS],
-      [AC_MSG_WARN(no minpack.h header so non-linear optimization disabled)])],
-   [AC_MSG_WARN(no minpack library so non-linear optimization disabled)],
-   [])
-
-AC_CHECK_LIB(
-   sundials_kinsol,
-   KINCreate,
-   [AC_CHECK_LIB(
-      sundials_nvecserial,
-      N_VNew_Serial,
-      CPPFLAGS="$CPPFLAGS -I/usr/include/sundials -I/usr/include/kinsol -I/usr/include/nvector"; [AC_CHECK_HEADER(
-         sundials_types.h,
-         [AC_CHECK_HEADER(
-            sundials_math.h,
-            [AC_CHECK_HEADER(
-               sundials_nvector.h,
-dnl            [AC_CHECK_HEADER(
-dnl               sundials_smalldense.h,
-                  [AC_CHECK_HEADER(
-                     kinsol.h,
-                     [AC_CHECK_HEADER(
-                        kinsol_dense.h,
-                        [AC_CHECK_HEADER(
-                           kinsol_spgmr.h,
-                           [AC_CHECK_HEADER(
-                              kinsol_spbcgs.h,
-                              [AC_CHECK_HEADER(
-                                 kinsol_sptfqmr.h,
-                                 [AC_CHECK_HEADER(
-                                    kinsol_spils.h,
-                                    [AC_CHECK_HEADER(
-                                       nvector_serial.h,
-                                       [AC_DEFINE(
-                                          [HAVE_KINSOL],
-                                          1,
-                                          [Define for sundials]) LIBS="-lsundials_kinsol -lsundials_nvecserial "$LIBS],
-                                       [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
-                                    [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
-                                 [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
-                              [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
-                           [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
-                        [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
-                     [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
-dnl               [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
-               [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
-            [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
-         [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
-      [AC_MSG_WARN(no kinsol library so non-linear optimization disabled)],
-      [])],
-   [AC_MSG_WARN(no kinsol library so non-linear optimization disabled)],
-   [])
-
-
-dnl checking for the Rmath header requires MATHLIB_STANDALONE to be defined or it won't work
-
-AC_CHECK_LIB(
-   Rmath,
-   bessel_i,
-   CPPFLAGS="$CPPFLAGS -DMATHLIB_STANDALONE"; [AC_CHECK_HEADER(
-      Rmath.h,
-      [AC_DEFINE([HAVE_RMATH],1,[Define if you have the GNU R math library]) LIBS="-lRmath -lm "$LIBS],   
-      [AC_MSG_WARN(no Rmath.h header so statistical functions disabled)])],
-   [AC_MSG_WARN(no Rmath library so statistical functions disabled)],
-   [])
-
-dnl is there a right way to detect and link a shared library whose filename ends with .so.something?
-
-AC_CHECK_FILE(
-   /usr/lib/libexpect.so.5,
-   EXPATH=" /usr/lib/libexpect.so.5",
-   [AC_CHECK_FILE(
-      /usr/local/lib/libexpect.so.5,
-      EXPATH=" /usr/local/lib/libexpect.so.5",
-      [AC_CHECK_FILE(
-         $HOME/lib/libexpect.so.5,
-         EXPATH=" $HOME/lib/libexpect.so.5",
-         [AC_CHECK_FILE(
-            /lib/libexpect.so.5,
-            EXPATH=" /lib/libexpect.so.5",
-            [AC_CHECK_FILE(
-               /usr/lib/libexpect.so,
-               EXPATH=" /usr/lib/libexpect.so",
-               [AC_CHECK_FILE(
-                  /usr/local/lib/libexpect.so,
-                  EXPATH=" /usr/local/lib/libexpect.so",
-                  [AC_CHECK_FILE(
-                     $HOME/lib/libexpect.so,
-                     EXPATH=" $HOME/lib/libexpect.so",
-                     [AC_CHECK_FILE(
-                        /lib/libexpect.so,
-                        EXPATH=" /lib/libexpect.so",
-                        [AC_CHECK_FILE(
-                           /usr/lib/libexpect5.43.so,
-                           EXPATH=" /usr/lib/libexpect5.43.so",
-                           [AC_CHECK_FILE(
-                              /usr/local/lib/libexpect5.43.so,
-                              EXPATH=" /usr/local/lib/libexpect5.43.so",
-                              [AC_CHECK_FILE(
-                                 $HOME/lib/libexpect5.43.so,
-                                 EXPATH=" $HOME/lib/libexpect5.43.so",
-                                 [AC_CHECK_FILE(
-                                    /lib/libexpect5.43.so,
-                                    EXPATH=" /lib/libexpect5.43.so",
-                                    [AC_CHECK_FILE(
-                                       /lib/libexpect5.44.so,
-                                       EXPATH=" /lib/libexpect5.44.so",
-                                       [])])])])])])])])])])])])])
-
-AC_CHECK_LIB(
-   util,
-   openpty,
-   [AC_CHECK_HEADER(
-      tcl8.4/expect.h,
-      AC_DEFINE([HAVE_EXPECT],1,[Define if you have libexpect]) LIBS="-lutil -ltcl8.4"$EXPATH" "$LIBS,
-      [AC_CHECK_LIB(
-         util,
-         openpty,
-         [AC_CHECK_HEADER(
-            tcl8.5/expect.h,
-            AC_DEFINE([HAVE_EXPECT],1,[Define if you have libexpect]) LIBS="-lutil -ltcl8.5"$EXPATH" "$LIBS,
-            [AC_MSG_WARN(no libexpect so --interactive is disabled)])],
-         [AC_MSG_WARN(no openpty in libutil so --interactive is disabled)])])],
-   [AC_MSG_WARN(no openpty in libutil so --interactive is disabled)])
-
-dnl CPPFLAGS="$CPPFLAGS -pedantic -Wall"
-
-CFLAGS="-O3 -mtune=native -march=native"
-
-AC_OUTPUT(Makefile avram.lsm avram.spec avm/Makefile src/Makefile doc/Makefile)

+ 0 - 411
depcomp

@@ -1,411 +0,0 @@
-#! /bin/sh
-
-# depcomp - compile a program generating dependencies as side-effects
-# Copyright 1999, 2000 Free Software Foundation, Inc.
-
-# 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 2, 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, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Originally written by Alexandre Oliva <[email protected]>.
-
-if test -z "$depmode" || test -z "$source" || test -z "$object"; then
-  echo "depcomp: Variables source, object and depmode must be set" 1>&2
-  exit 1
-fi
-# `libtool' can also be set to `yes' or `no'.
-
-depfile=${depfile-`echo "$object" | sed 's,\([^/]*\)$,.deps/\1,;s/\.\([^.]*\)$/.P\1/'`}
-tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
-
-rm -f "$tmpdepfile"
-
-# Some modes work just like other modes, but use different flags.  We
-# parameterize here, but still list the modes in the big case below,
-# to make depend.m4 easier to write.  Note that we *cannot* use a case
-# here, because this file can only contain one case statement.
-if test "$depmode" = hp; then
-  # HP compiler uses -M and no extra arg.
-  gccflag=-M
-  depmode=gcc
-fi
-
-if test "$depmode" = dashXmstdout; then
-   # This is just like dashmstdout with a different argument.
-   dashmflag=-xM
-   depmode=dashmstdout
-fi
-
-case "$depmode" in
-gcc3)
-## gcc 3 implements dependency tracking that does exactly what
-## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
-## it if -MD -MP comes after the -MF stuff.  Hmm.
-  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  mv "$tmpdepfile" "$depfile"
-  ;;
-
-gcc)
-## There are various ways to get dependency output from gcc.  Here's
-## why we pick this rather obscure method:
-## - Don't want to use -MD because we'd like the dependencies to end
-##   up in a subdir.  Having to rename by hand is ugly.
-##   (We might end up doing this anyway to support other compilers.)
-## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
-##   -MM, not -M (despite what the docs say).
-## - Using -M directly means running the compiler twice (even worse
-##   than renaming).
-  if test -z "$gccflag"; then
-    gccflag=-MD,
-  fi
-  "$@" -Wp,"$gccflag$tmpdepfile"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
-## The second -e expression handles DOS-style file names with drive letters.
-  sed -e 's/^[^:]*: / /' \
-      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
-## The problem is that when a header file which appears in a .P file
-## is deleted, the dependency causes make to die (because there is
-## typically no way to rebuild the header).  We avoid this by adding
-## dummy dependencies for each header file.  Too bad gcc doesn't do
-## this for us directly.
-  tr ' ' '
-' < "$tmpdepfile" |
-## Some versions of gcc put a space before the `:'.  On the theory
-## that the space means something, we add a space to the output as
-## well.
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-hp)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-sgi)
-  if test "$libtool" = yes; then
-    "$@" "-Wp,-MDupdate,$tmpdepfile"
-  else
-    "$@" -MDupdate "$tmpdepfile"
-  fi
-  stat=$?
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-
-  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
-    echo "$object : \\" > "$depfile"
-
-    # Clip off the initial element (the dependent).  Don't try to be
-    # clever and replace this with sed code, as IRIX sed won't handle
-    # lines with more than a fixed number of characters (4096 in
-    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
-    # the IRIX cc adds comments like `#:fec' to the end of the
-    # dependency line.
-    tr ' ' '
-' < "$tmpdepfile" \
-    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
-    tr '
-' ' ' >> $depfile
-    echo >> $depfile
-
-    # The second pass generates a dummy entry for each header file.
-    tr ' ' '
-' < "$tmpdepfile" \
-   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
-   >> $depfile
-  else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
-  fi
-  rm -f "$tmpdepfile"
-  ;;
-
-aix)
-  # The C for AIX Compiler uses -M and outputs the dependencies
-  # in a .u file.  This file always lives in the current directory.
-  # Also, the AIX compiler puts `$object:' at the start of each line;
-  # $object doesn't have directory information.
-  stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
-  tmpdepfile="$stripped.u"
-  outname="$stripped.o"
-  if test "$libtool" = yes; then
-    "$@" -Wc,-M
-  else
-    "$@" -M
-  fi
-
-  stat=$?
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-
-  if test -f "$tmpdepfile"; then
-    # Each line is of the form `foo.o: dependent.h'.
-    # Do two passes, one to just change these to
-    # `$object: dependent.h' and one to simply `dependent.h:'.
-    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
-    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
-  else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
-  fi
-  rm -f "$tmpdepfile"
-  ;;
-
-tru64)
-   # The Tru64 AIX compiler uses -MD to generate dependencies as a side
-   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
-   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 
-   # dependencies in `foo.d' instead, so we check for that too.
-   # Subdirectories are respected.
-
-   tmpdepfile1="$object.d"
-   tmpdepfile2=`echo "$object" | sed -e 's/.o$/.d/'` 
-   if test "$libtool" = yes; then
-      "$@" -Wc,-MD
-   else
-      "$@" -MD
-   fi
-
-   stat=$?
-   if test $stat -eq 0; then :
-   else
-      rm -f "$tmpdepfile1" "$tmpdepfile2"
-      exit $stat
-   fi
-
-   if test -f "$tmpdepfile1"; then
-      tmpdepfile="$tmpdepfile1"
-   else
-      tmpdepfile="$tmpdepfile2"
-   fi
-   if test -f "$tmpdepfile"; then
-      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-      # That's a space and a tab in the [].
-      sed -e 's,^.*\.[a-z]*:[ 	]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
-   else
-      echo "#dummy" > "$depfile"
-   fi
-   rm -f "$tmpdepfile"
-   ;;
-
-#nosideeffect)
-  # This comment above is used by automake to tell side-effect
-  # dependency tracking mechanisms from slower ones.
-
-dashmstdout)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the proprocessed file to stdout, regardless of -o,
-  # because we must use -o when running libtool.
-  test -z "$dashmflag" && dashmflag=-M
-  ( IFS=" "
-    case " $* " in
-    *" --mode=compile "*) # this is libtool, let us make it quiet
-      for arg
-      do # cycle over the arguments
-        case "$arg" in
-	"--mode=compile")
-	  # insert --quiet before "--mode=compile"
-	  set fnord "$@" --quiet
-	  shift # fnord
-	  ;;
-	esac
-	set fnord "$@" "$arg"
-	shift # fnord
-	shift # "$arg"
-      done
-      ;;
-    esac
-    "$@" $dashmflag | sed 's:^[^:]*\:[ 	]*:'"$object"'\: :' > "$tmpdepfile"
-  ) &
-  proc=$!
-  "$@"
-  stat=$?
-  wait "$proc"
-  if test "$stat" != 0; then exit $stat; fi
-  rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
-  tr ' ' '
-' < "$tmpdepfile" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-dashXmstdout)
-  # This case only exists to satisfy depend.m4.  It is never actually
-  # run, as this mode is specially recognized in the preamble.
-  exit 1
-  ;;
-
-makedepend)
-  # X makedepend
-  (
-    shift
-    cleared=no
-    for arg in "$@"; do
-      case $cleared in no)
-        set ""; shift
-	cleared=yes
-      esac
-      case "$arg" in
-        -D*|-I*)
-	  set fnord "$@" "$arg"; shift;;
-	-*)
-	  ;;
-	*)
-	  set fnord "$@" "$arg"; shift;;
-      esac
-    done
-    obj_suffix="`echo $object | sed 's/^.*\././'`"
-    touch "$tmpdepfile"
-    ${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@"
-  ) &
-  proc=$!
-  "$@"
-  stat=$?
-  wait "$proc"
-  if test "$stat" != 0; then exit $stat; fi
-  rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
-  tail +3 "$tmpdepfile" | tr ' ' '
-' | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile" "$tmpdepfile".bak
-  ;;
-
-cpp)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the proprocessed file to stdout, regardless of -o,
-  # because we must use -o when running libtool.
-  ( IFS=" "
-    case " $* " in
-    *" --mode=compile "*)
-      for arg
-      do # cycle over the arguments
-        case $arg in
-	"--mode=compile")
-	  # insert --quiet before "--mode=compile"
-	  set fnord "$@" --quiet
-	  shift # fnord
-	  ;;
-	esac
-	set fnord "$@" "$arg"
-	shift # fnord
-	shift # "$arg"
-      done
-      ;;
-    esac
-    "$@" -E |
-    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
-    sed '$ s: \\$::' > "$tmpdepfile"
-  ) &
-  proc=$!
-  "$@"
-  stat=$?
-  wait "$proc"
-  if test "$stat" != 0; then exit $stat; fi
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  cat < "$tmpdepfile" >> "$depfile"
-  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-msvisualcpp)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the proprocessed file to stdout, regardless of -o,
-  # because we must use -o when running libtool.
-  ( IFS=" "
-    case " $* " in
-    *" --mode=compile "*)
-      for arg
-      do # cycle over the arguments
-        case $arg in
-	"--mode=compile")
-	  # insert --quiet before "--mode=compile"
-	  set fnord "$@" --quiet
-	  shift # fnord
-	  ;;
-	esac
-	set fnord "$@" "$arg"
-	shift # fnord
-	shift # "$arg"
-      done
-      ;;
-    esac
-    "$@" -E |
-    sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
-  ) &
-  proc=$!
-  "$@"
-  stat=$?
-  wait "$proc"
-  if test "$stat" != 0; then exit $stat; fi
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
-  echo "	" >> "$depfile"
-  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-none)
-  exec "$@"
-  ;;
-
-*)
-  echo "Unknown depmode $depmode" 1>&2
-  exit 1
-  ;;
-esac
-
-exit 0

+ 0 - 10
doc/Makefile.am

@@ -1,10 +0,0 @@
-EXTRA_DIST=avram.1 avram.ps avram.html gpl.texinfo
-
-#  build and install the .info pages
-info_TEXINFOS = avram.texinfo
-# avram_TEXINFOS = gpl.texinfo
-
-#  install the man pages
-man_MANS=avram.1
-
-MAINTAINERCLEANFILES	= Makefile.in

+ 0 - 653
doc/Makefile.in

@@ -1,653 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-subdir = doc
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in texinfo.tex
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-INFO_DEPS = $(srcdir)/avram.info
-am__TEXINFO_TEX_DIR = $(srcdir)
-DVIS = avram.dvi
-PDFS = avram.pdf
-PSS = avram.ps
-HTMLS = avram.html
-TEXINFOS = avram.texinfo
-TEXI2DVI = texi2dvi
-TEXI2PDF = $(TEXI2DVI) --pdf --batch
-MAKEINFOHTML = $(MAKEINFO) --html
-AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
-DVIPS = dvips
-am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-man1dir = $(mandir)/man1
-NROFF = nroff
-MANS = $(man_MANS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-GREP = @GREP@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-ISODATE = @ISODATE@
-LDFLAGS = @LDFLAGS@
-LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
-LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
-LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build_alias = @build_alias@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host_alias = @host_alias@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-EXTRA_DIST = avram.1 avram.ps avram.html gpl.texinfo
-
-#  build and install the .info pages
-info_TEXINFOS = avram.texinfo
-# avram_TEXINFOS = gpl.texinfo
-
-#  install the man pages
-man_MANS = avram.1
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .dvi .html .info .pdf .ps .texinfo
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu doc/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-.texinfo.info:
-	restore=: && backupdir="$(am__leading_dot)am$$$$" && \
-	am__cwd=`pwd` && $(am__cd) $(srcdir) && \
-	rm -rf $$backupdir && mkdir $$backupdir && \
-	if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
-	  for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
-	    if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
-	  done; \
-	else :; fi && \
-	cd "$$am__cwd"; \
-	if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-	 -o $@ $<; \
-	then \
-	  rc=0; \
-	  $(am__cd) $(srcdir); \
-	else \
-	  rc=$$?; \
-	  $(am__cd) $(srcdir) && \
-	  $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
-	fi; \
-	rm -rf $$backupdir; exit $$rc
-
-.texinfo.dvi:
-	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
-	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
-	$(TEXI2DVI) $<
-
-.texinfo.pdf:
-	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
-	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
-	$(TEXI2PDF) $<
-
-.texinfo.html:
-	rm -rf $(@:.html=.htp)
-	if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-	 -o $(@:.html=.htp) $<; \
-	then \
-	  rm -rf $@; \
-	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
-	    mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
-	else \
-	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
-	    rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
-	  exit 1; \
-	fi
-$(srcdir)/avram.info: avram.texinfo 
-avram.dvi: avram.texinfo 
-avram.pdf: avram.texinfo 
-avram.html: avram.texinfo 
-.dvi.ps:
-	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
-	$(DVIPS) -o $@ $<
-
-uninstall-dvi-am:
-	@$(NORMAL_UNINSTALL)
-	@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
-	for p in $$list; do \
-	  $(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(dvidir)/$$f"; \
-	done
-
-uninstall-html-am:
-	@$(NORMAL_UNINSTALL)
-	@list='$(HTMLS)'; test -n "$(htmldir)" || list=; \
-	for p in $$list; do \
-	  $(am__strip_dir) \
-	  echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
-	  rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
-	done
-
-uninstall-info-am:
-	@$(PRE_UNINSTALL)
-	@if test -d '$(DESTDIR)$(infodir)' && \
-	    (install-info --version && \
-	     install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
-	  list='$(INFO_DEPS)'; \
-	  for file in $$list; do \
-	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
-	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
-	    if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
-	    then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \
-	  done; \
-	else :; fi
-	@$(NORMAL_UNINSTALL)
-	@list='$(INFO_DEPS)'; \
-	for file in $$list; do \
-	  relfile=`echo "$$file" | sed 's|^.*/||'`; \
-	  relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
-	  (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
-	     echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
-	     rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
-	   else :; fi); \
-	done
-
-uninstall-pdf-am:
-	@$(NORMAL_UNINSTALL)
-	@list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
-	for p in $$list; do \
-	  $(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
-	done
-
-uninstall-ps-am:
-	@$(NORMAL_UNINSTALL)
-	@list='$(PSS)'; test -n "$(psdir)" || list=; \
-	for p in $$list; do \
-	  $(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(psdir)/$$f"; \
-	done
-
-dist-info: $(INFO_DEPS)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	list='$(INFO_DEPS)'; \
-	for base in $$list; do \
-	  case $$base in \
-	    $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
-	  esac; \
-	  if test -f $$base; then d=.; else d=$(srcdir); fi; \
-	  base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
-	  for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
-	    if test -f $$file; then \
-	      relfile=`expr "$$file" : "$$d/\(.*\)"`; \
-	      test -f "$(distdir)/$$relfile" || \
-		cp -p $$file "$(distdir)/$$relfile"; \
-	    else :; fi; \
-	  done; \
-	done
-
-mostlyclean-aminfo:
-	-rm -rf avram.aux avram.cp avram.cps avram.fn avram.fns avram.ky avram.kys \
-	  avram.log avram.pg avram.pgs avram.tmp avram.toc avram.tp \
-	  avram.tps avram.vr avram.vrs
-
-clean-aminfo:
-	-test -z "avram.dvi avram.pdf avram.ps avram.html" \
-	|| rm -rf avram.dvi avram.pdf avram.ps avram.html
-
-maintainer-clean-aminfo:
-	@list='$(INFO_DEPS)'; for i in $$list; do \
-	  i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
-	  echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
-	  rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
-	done
-install-man1: $(man_MANS)
-	@$(NORMAL_INSTALL)
-	test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
-	@list=''; test -n "$(man1dir)" || exit 0; \
-	{ for i in $$list; do echo "$$i"; done; \
-	l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
-	  sed -n '/\.1[a-z]*$$/p'; \
-	} | while read p; do \
-	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; echo "$$p"; \
-	done | \
-	sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
-	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
-	sed 'N;N;s,\n, ,g' | { \
-	list=; while read file base inst; do \
-	  if test "$$base" = "$$inst"; then list="$$list $$file"; else \
-	    echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
-	    $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
-	  fi; \
-	done; \
-	for i in $$list; do echo "$$i"; done | $(am__base_list) | \
-	while read files; do \
-	  test -z "$$files" || { \
-	    echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
-	    $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
-	done; }
-
-uninstall-man1:
-	@$(NORMAL_UNINSTALL)
-	@list=''; test -n "$(man1dir)" || exit 0; \
-	files=`{ for i in $$list; do echo "$$i"; done; \
-	l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
-	  sed -n '/\.1[a-z]*$$/p'; \
-	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
-	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
-	test -z "$$files" || { \
-	  echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
-	  cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@list='$(MANS)'; if test -n "$$list"; then \
-	  list=`for p in $$list; do \
-	    if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
-	    if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
-	  if test -n "$$list" && \
-	    grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
-	    echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
-	    grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/         /' >&2; \
-	    echo "       to fix them, install help2man, remove and regenerate the man pages;" >&2; \
-	    echo "       typically \`make maintainer-clean' will remove them" >&2; \
-	    exit 1; \
-	  else :; fi; \
-	else :; fi
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	$(MAKE) $(AM_MAKEFLAGS) \
-	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
-	  dist-info
-check-am: all-am
-check: check-am
-all-am: Makefile $(INFO_DEPS) $(MANS)
-installdirs:
-	for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-aminfo clean-generic mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am: $(DVIS)
-
-html: html-am
-
-html-am: $(HTMLS)
-
-info: info-am
-
-info-am: $(INFO_DEPS)
-
-install-data-am: install-info-am install-man
-
-install-dvi: install-dvi-am
-
-install-dvi-am: $(DVIS)
-	@$(NORMAL_INSTALL)
-	test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)"
-	@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \
-	done
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am: $(HTMLS)
-	@$(NORMAL_INSTALL)
-	test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
-	@list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  $(am__strip_dir) \
-	  if test -d "$$d$$p"; then \
-	    echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
-	    $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
-	    echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
-	    $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
-	  else \
-	    list2="$$list2 $$d$$p"; \
-	  fi; \
-	done; \
-	test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
-	done; }
-install-info: install-info-am
-
-install-info-am: $(INFO_DEPS)
-	@$(NORMAL_INSTALL)
-	test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)"
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
-	for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	  esac; \
-	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
-	  file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
-	  for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
-	               $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
-	    if test -f $$ifile; then \
-	      echo "$$ifile"; \
-	    else : ; fi; \
-	  done; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done
-	@$(POST_INSTALL)
-	@if (install-info --version && \
-	     install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
-	  list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
-	  for file in $$list; do \
-	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
-	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
-	    install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
-	  done; \
-	else : ; fi
-install-man: install-man1
-
-install-pdf: install-pdf-am
-
-install-pdf-am: $(PDFS)
-	@$(NORMAL_INSTALL)
-	test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)"
-	@list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done
-install-ps: install-ps-am
-
-install-ps-am: $(PSS)
-	@$(NORMAL_INSTALL)
-	test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)"
-	@list='$(PSS)'; test -n "$(psdir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-aminfo \
-	maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-aminfo mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am: $(PDFS)
-
-ps: ps-am
-
-ps-am: $(PSS)
-
-uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
-	uninstall-man uninstall-pdf-am uninstall-ps-am
-
-uninstall-man: uninstall-man1
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-aminfo clean-generic \
-	dist-info distclean distclean-generic distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-man1 install-pdf \
-	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs maintainer-clean \
-	maintainer-clean-aminfo maintainer-clean-generic mostlyclean \
-	mostlyclean-aminfo mostlyclean-generic pdf pdf-am ps ps-am \
-	uninstall uninstall-am uninstall-dvi-am uninstall-html-am \
-	uninstall-info-am uninstall-man uninstall-man1 \
-	uninstall-pdf-am uninstall-ps-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:

+ 0 - 837
doc/avram.1

@@ -1,837 +0,0 @@
-.\"                              hey, Emacs:   -*- nroff -*-
-.\" avram 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 2 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; see the file COPYING.  If not, write to
-.\" the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-.\"
-.TH AVRAM 1 "January 31, 2007"
-.\" Please update the above date whenever this man page is modified.
-.\"
-.\" Some roff macros, for reference:
-.\" .nh        disable hyphenation
-.\" .hy        enable hyphenation
-.\" .ad l      left justify
-.\" .ad b      justify to both left and right margins (default)
-.\" .nf        disable filling
-.\" .fi        enable filling
-.\" .br        insert line break
-.\" .sp <n>    insert n+1 empty lines
-.\" for manpage-specific macros, see man(7)
-.SH NAME
-avram \- Applicative ViRtuAl Machine
-.SH SYNOPSIS
-.nf
-\fBavram\fP [general options]
-.br
-\fBavram\fP [filter mode options] codefile[.avm] < inputfile
-.br
-\fBavram\fP [parameter mode options] codefile[.avm] [parameters]
-.fi
-.SH DESCRIPTION
-\fBavram\fP is a virtual machine code interpreter. It reads an input
-file containing an application written in virtual machine code, and
-executes it on the host machine. The virtual machine code normally will
-have been translated from a high level language by a compiler, allowing
-\fBavram\fP to be independent of the source language.
-.PP
-In theory, virtual machine programs are more easily
-portable than those in native code because they run without
-modification on any platform to which the interpreter has been
-ported. Virtual machines may also simplify the job of a compiler
-writer by providing more direct support for high level language
-features than is possible or appropriate for real hardware.
-.PP
-The virtual code format used by \fBavram\fP is designed to
-support the features of functional or applicative programming
-languages. This manpage documents only the usage of \fBavram\fP
-and not the internals, but it will be helpful in what follows to keep
-in mind that the virtual machine code expresses a mathematical
-function rather than a program in the conventional sense. As such, it
-performs no action directly, but may be applied in a choice of ways by
-the user of \fBavram\fP according to the precise operation required.
-.SH GENERAL OPTIONS
-
-Regardless of whatever other command line parameters are given,
-\fBavram\fP accepts the following parameters:
-.TP
-.B -h, --help
-Show a summary of options and exit.
-.TP
-.B -V,-v, --version
-Show the version of program and a short copyleft message and exit.
-.TP
-.B --emulation=\fIversion\fP
-Be backward compatible with an older version of \fBavram\fP.  This
-option should include a valid version number, for example
-0.1.0, which is the version of \fBavram\fP to be
-emulated. It can make virtual code applications future proof, assuming
-that future versions of \fBavram\fP correctly support backward
-compatibility. It may be used in conjunction with any other option in
-any mode of operation.
-
-This copy of the manpage has not been updated since version 0.7.0 of
-\fBavram\fP, so it is unable to document incompatibilities with later
-versions. The latest version of the manual may be found at
-\fBhttp://www.basis.uklinux.net/avram\fP.
-.TP
-.B -e, --external-libraries
-Show a list of libraries with which \fBavram\fP has been linked and
-whose functions therefore could be called from virtual machine
-programs. This growing list currently includes selected functions from
-fftw, glpk, gsl, lapack, minpack, mpfr, pcx, rmath, umf, and
-kinsol which are documented further in the \fBavram\fP reference manual.
-.TP
-.B -j, --jail
-This option disables execution of shell commands by virtual code
-applications, which is normally possible by default even for nominally
-non-interactive applications (see below). A virtual code application
-attempting to spawn a shell (using the interact combinator) when this
-option is selected will encounter an exception rather than successful
-completion of the operation. This option is provided as a security
-feature for running untrusted code, and is incompatible with \fB-i\fP,
-\fB-t\fP, and \fB-s\fP.
-.TP
-.B -f, --force-text-input
-Normally \fBavram\fP will try to guess by looking at a file whether it
-is an ordinary text file or one that has been written in the virtual
-code file format, and choose a different internal representation
-accordingly. An application may require one representation or the
-other. This option tells \fBavram\fP to treat all input files other
-than the virtual code file as text files regardless of whether or not it
-would be possible to interpret them otherwise. This option may be used
-in combination with any other option.
-.SH MODES OF OPERATION
-Apart from to the capability to print brief help messages and exit,
-there are two main modes of operation, depending on which options
-are specified.
-.TP
-.B Filter mode
-In filter mode, the argument to the function given by the virtual code
-is taken from standard input, and the result is written to standard
-output, except for error messages resulting from a failure to evaluate
-the function, which are written to standard error. Filter mode is
-indicated whenever these three conditions are all met.
-.RS
-.TP
-*
-Either at least one of the filter mode options listed below appears
-on the command line preceding the first filename parameter, or there
-are no options at all.
-.TP
-*
-Exactly one filename parameter appears on the command line,
-which is the name of the virtual machine code file.
-.TP
-*
-Either the filename comes last on the command line, or the
-\fB--unparameterized\fP option precedes it, causing
-everything following it to be ignored.
-.RE
-.TP
-.B Parameter mode
-In parameter mode, the argument to the function given by the virtual
-code is a data structure containing environment variables and command
-line parameters including files, application specific options, and
-possibly standard input. The result obtained by evaluating the
-function is either a data structure representing a set of files to be
-written, which may include standard output, or a sequence of shell
-commands to be executed, or a combination of both. Parameter mode is
-indicated whenever either of these conditions is met.
-.RS
-.TP
-*
-Any of the parameter mode options listed below appears on the
-command line preceding the first filename parameter.
-.TP
-*
-At least one additional filename parameter or option follows the first one,
-and the \fB--unparameterized\fP option is not selected.
-.RE
-.P
-For the purpose of choosing the mode of operation, the virtual
-code filename is taken to be the first command line argument not
-beginning with a dash. Other conventions relevant to application
-specific parameters are detailed below.
-.SH FILTER MODE OPTIONS
-The options available in filter mode are listed below. Except as
-otherwise noted, all options are mutually exclusive. Ordinarily a
-given application will require certain fixed settings of these options
-and will not work properly if they are set inappropriately.
-.TP
-.B -r, --raw-output
-Normally the result obtained by evaluating the function in the virtual
-code file must be a list of character strings, which is written as
-such to standard output. However, if this option is selected, the form
-of the result is unconstrained, and it will be written in a data file
-format that is not human readable but can be used by other
-applications. This option is incompatible with any other options
-except \fB-u\fP.
-.TP
-.B -c, --choice-of-output
-When this option is used, the evaluation of the function given by the
-virtual machine code will be expected to yield a data structure from
-which \fBavram\fP will ascertain whether standard output should be
-written in text or raw data format.  This option should be used only
-if application is aware of it. It is incompatible with any other options
-except \fB-u\fP.
-.TP
-.B -l, --line-map
-Normally the entire contents of standard input up to EOF are loaded
-into memory and used as the argument to the function in the virtual
-code file. However, this option causes standard input to be read a
-line at a time, with the function applied individually to each line in
-sequence, and its result in each case written to standard output as
-soon as it is computed. A given application either requires this
-option or does not, and will not work properly in the
-alternative. This option implies \fB-f\fP and is incompatible with any
-other option except \fB-u\fP.
-.TP
-.B -b, --byte-transducer
-This option causes standard input to be read one character at a time,
-evaluating the function given by the virtual code file each time. The
-function is used as a state transition function that takes a state and
-input to a next state and output. The output is expected to be a
-character string and is written concurrently with the input
-operations. A given application will not work properly with an
-inappropriate setting of this option.  This option implies \fB-f\fP
-and is incompatible with any other option except \fB-u\fP.
-.TP
-.B -u, --unparameterized
-Normally \fBavram\fP guesses whether to use filter mode or parameter
-mode depending on whether there are any parameters. Selecting this
-option forces it to operate in filter mode regardless. Any parameters
-that may appear on the command line after the virtual code file name
-are ignored. This option may be used in conjunction with any other
-filter mode option.
-.SH PARAMETER MODE OPTIONS
-The parameter mode options are listed below. Except as otherwise
-noted, any combination of parameter mode options may be selected
-together, and except as noted, the settings of these options can be
-varied without breaking the application.
-.TP
-.B -q, --quiet
-\fBavram\fP normally informs the user when writing an output file with
-a short message to standard output. This option suppresses such
-messages. This option is compatible with any application and any other
-parameter mode option except \fB-a\fP.
-.TP
-.B -a, --ask-to-overwrite
-Selecting this option will cause \fBavram\fP to ask permission
-interactively before overwriting an existing file, and to refrain from
-overwriting it without permission, in which case the contents that
-were to be written will be lost. This option overrides \fB-q\fP and is
-compatible with any other parameter mode option or application.
-.TP
-.B -.EXT
-An option beginning with a dash followed by a period specifies a
-default extension for input file names. If \fBavram\fP doesn't find a
-file named on the command line, and the filename doesn't already
-contain a period, \fBavram\fP will try to find a file having a similar
-name but with the default extension appended. The default extension given
-by this option takes precedence over the hard coded default extensions
-of .fun and .avm. At most one default extension can be supplied. This
-option is compatible with any other parameter mode option and
-compatible with any application.
-.TP
-.B -d, --default-to-stdin
-If no filename parameter appears on the command line (other than the
-name of the virtual code file), this option directs \fBavram\fP to
-read the contents of standard input as if it were specified as a
-command line parameter. (Standard input can also be specified
-explicitly as a dash.) This option is compatible with any application
-and any other parameter mode option except \fB-m\fP.
-.TP
-.B -m, --map-to-each-file
-Normally \fBavram\fP loads the entire contents of all files named on
-the command line into memory so as to evaluate the virtual machine
-code application on all of them together. This option can be used to
-save memory in the case of applications that operate on multiple files
-independently. It causes \fBavram\fP to load only one file at a time
-and to perform the relevant evaluation and output before loading the
-next one. Application specific options and standard input (if
-specified) are read only once and reused. This option is incompatible
-with \fB-d\fP, and not necessarily compatible with all applications,
-although some may work both with and without it.
-.TP
-.B -i, --interactive
-This option is used in the case of applications that interact with
-other programs through shell commands. An application that is meant to
-be invoked in this way requires this option and will not work without
-it, nor will applications that are not of this type work with it. This
-option is implied by \fB-t\fP and \fB-s\fP, and is compatible with any
-other parameter mode option.
-
-.TP
-.B -s, --step
-This option is used in the case of applications that interact with
-other programs through shell commands, similarly to \fB-i\fP, and can
-substitute for it (see above). The option has the additional effect of
-causing shell commands issued by \fBavram\fP on behalf of the
-application to be written with their results to standard output, and
-to cause \fBavram\fP to pause after displaying each shell command
-until a key is pressed.  This capability may be useful for debugging
-or auditing purposes but does not otherwise alter the effects of the
-application.  This option is compatible with any other parameter mode
-option.
-.TP
-.B -t, --trace
-This option is used in the case of applications that interact with
-other programs through shell commands, but only by way of the
-\fBinteract\fP combinator, for which it provides developers a means
-of low level debugging, particularly deadlock detection. When this
-option is selected, a verbose trace of all characters exchanged
-between the functional transducer and the external application are
-written to standard output, along with some additional control flow
-diagnostics. This option is compatible with any other parameter mode
-option.
-.TP
-.B -p, --parameterized
-Normally \fBavram\fP tries to guess whether to operate in filter mode
-or parameter mode based on the options used and the parameters. If
-there are no parameters and no options, it will default to filter
-mode, and try to read standard input. However, if this option is
-selected, it will use parameter mode (and therefore not try to read
-standard input unless required).
-.SH COMMAND LINE SYNTAX
-The command line parameters that follow the virtual code file name
-when \fBavram\fP is used in parameter mode are dependent on the
-specific application. However, all supported applications are
-constrained for implementation reasons to observe certain uniform
-conventions regarding their command line parameters, which are
-documented here to avoid needless duplication.
-.P
-The shell divides the command line into "arguments" separated by white
-space.  Arguments containing white space or special characters used by
-the shell must be quoted or protected as usual. File names with wild
-cards in them are expanded by the shell before \fBavram\fP sees them.
-.P
-\fBavram\fP then extracts from the sequence of arguments a sequence of
-filenames and a sequence of options. Each option consists of a keyword and an
-optional parameter list. Filenames, keywords, and parameter lists are
-distinguished according to the following criteria.
-.TP
-1.
-An argument is treated as a keyword iff it meets these three
-conditions.
-.RS
-.TP
-(a)
-It starts with a dash.
-.TP
-(b)
-It doesn't contain an equals sign.
-.TP
-(c)
-It doesn't consist solely of a dash.
-.RE
-.TP
-2.
-An argument is treated as a parameter list iff it meets these four
-conditions.
-.RS
-.TP
-(a)
-It doesn't begin with a dash.
-.TP
-(b)
-It either begins with an equals sign or doesn't contain one.
-.TP
-(c)
-It immediately follows an argument beginning with a dash, not
-containing an equals sign, and not consisting solely of a dash.
-.TP
-(d)
-At least one of the following is true.
-.RS
-.TP
-1)
-It doesn't contain a period, tilde, or path separator.
-.TP
-2)
-It contains a comma.
-.TP
-3)
-It can be interpreted as a C formatted floating point number.
-.RE
-.RE
-.TP
-3.
-An argument is treated as an input file name iff it meets these four
-conditions.
-.RS
-.TP
-(a)
-It doesn't begin with a dash.
-.TP
-(b)
-It doesn't contain an equals sign.
-.TP
-(c)
-It doesn't contain a comma.
-.TP
-(d)
-At least one of the following is true.
-.RS
-.TP
-1)
-It contains a period, tilde, or path separator.
-.TP
-2)
-It doesn't immediately follow an argument beginning with a dash,
-not consisting solely of a dash, and not containing an equals sign.
-.RE
-.RE
-.TP
-4.
-If an argument contains an equals sign but doesn't begin with one, the
-part on the left of the first equals sign is treated as a keyword and
-the part on the right is treated as a parameter list.
-.TP
-5.
-An argument consisting solely of a dash is taken to represent the standard input file.
-.TP
-6.
-An argument not fitting any of the above classifications is an error.
-.P
-These conventions are needed for \fBavram\fP to detect input file
-names in a general, position independent way, so that it can preload
-the files on behalf of the application. Many standard Unix utilities
-follow these conventions to a large extent, the exceptions being
-those that employ non-filename arguments without distinguishing
-syntax, and use positional or other ad hoc methods of command line
-interpretation. A drop-in replacement for such an application could
-nevertheless be implemented using \fBavram\fP with an appropriate
-wrapper script, similar to the approach recommended below, but with
-suitable keywords inserted prior to the ambiguous arguments.
-.RE
-.SH DIAGNOSTICS
-The means exists for virtual code applications to have run time error
-messages written to standard error on their behalf by
-\fBavram\fP. Any error messages not documented here originate with an
-application and should be documented by it.
-
-Most error messages originating from \fBavram\fP are prefaced by the
-application name (i.e., the name of the file containing the virtual
-machine code), but will be prefaced by \fBavram\fP: if the error is
-caused by a problem loading this file itself. Error
-messages originating from virtual machine code applications are the
-responsibility of their respective authors and might not be prefaced
-by the application name.
-
-The run time errors not specifically raised by the application can be
-classified as internal errors, i/o errors, overflow errors, file
-format errors, application programming errors, and configuration related
-errors.
-
-Some error messages include a code number. The number identifies
-the specific point in the source code where the condition was
-detected, for the benefit of the person maintaining it.
-.TP
-.B internal errors
-Internal errors should never occur unless the
-\fBavram\fP source code has been carelessly modified. There are two kinds.
-.RS
-.TP
-.B \fIapplication-name\fP: virtual machine internal error (code \fInn\fP)
-Most internal errors would be reported by a message of this form
-if they were to occur. It indicates that some required invariant was
-not maintained. In such cases, the program terminates immediately, and
-any results already produced are suspect.
-.TP
-.B \fIapplication-name\fP: \fInn\fP unreclaimed \fIstruct-names\fP
-A message of this form could be printed at the end of an otherwise successful
-run. \fBavram\fP maintains a count of the number of units allocated
-for various data structures, and checks that they are all reclaimed
-eventually as a safeguard against memory leaks. This message indicates
-that some memory remains unaccounted for.
-.RE
-
-.RS
-If a repeatable internal error is discovered, please email a bug
-report and a small representative test case to the address below.
-.RE
-.TP
-.B i/o errors
-These error messages are prefaced with the name of the
-application. A further explanation as to the
-reason, obtained from the standard \fBstrerror()\fP utility, is
-appended to the messages below if possible.
-.RS
-.TP
-.B \fIapplication-name\fP: can't read \fIfilename\fP
-A file was not able to be opened for reading, typically because it was
-not found or because the user does not have permission. The file name is
-displayed with special characters expanded but without any default
-extensions or search paths that may have been tried. If you think a file
-exists and should have been found, there may be a problem with your
-\fBAVMINPUTS\fP environment variable.
-.TP
-.B \fIapplication-name\fP: can't write \fIfilename\fP
-A file was not able to be opened for writing.
-.TP
-.B \fIapplication-name\fP: can't write to \fIfilename\fP
-A file was successfully opened for writing but became impossible to
-write thereafter.
-.TP
-.B \fIapplication-name\fP: can't spawn \fIcommand\fP
-An attempt to execute a shell command on behalf of an interactive
-application failed during the \fBexp_popen()\fP library call.
-.TP
-.B \fIapplication-name\fP: can't close \fIfilename\fP
-A call to the standard C procedure \fBfclose()\fP failed due to
-unforeseen circmstances. The error is non-fatal but the file should
-be checked for missing data.
-.RE
-.TP
-.B overflow errors
-These errors are reported by the application name prefacing one of the
-following messages, except as noted below.
-.RS
-.TP
-.B \fIapplication-name\fP: counter overflow (code \fInn\fP)
-An overflow occurred in an unsigned long integer being used as a reference
-counter or something similar. This situation is very unlikely.
-.TP
-.B \fIapplication-name\fP: memory overflow (code \fInn\fP)
-There wasn't enough memory to build an internal data structure. The
-most likely cause is an attempt to operate on input
-files that are too large. Standard remedies apply.
-.RE
-
-.RS
-The memory overflow or counter overflow messages can also be reported
-without the application name preface or a code number. In these cases,
-they arise in the course of evaluating the function given by the
-application, rather than by loading the input files.
-
-A counter overflow in this case is possible if the application
-attempts to compute the size of a very large, shared structure using
-native integer arithmetic.
-
-Memory overflows are possible due to insufficient memory for a valid
-purpose, but may also occur due to a non-terminating recursion in the
-virtual machine code. To prevent thrashing or other bad effects from
-runaway code, \fBulimit\fP is your friend.
-.RE
-.TP
-.B file format errors
-Certain application crashes result from an application not adhering
-to the required conventions about data and file formats, or because the
-application was invoked with inappropriate options (see above). These
-are the following.
-.RS
-.TP
-.B \fIapplication-name\fP: invalid text format (code \fInn\fP)
-An application that was expected to return a string of characters to
-be written to a text file returned data that did not correspond to any
-valid character representation.
-.TP
-.B \fIapplication-name\fP: null character in prompt
-An interactive application (invoked rightly or wrongly with \fB-i\fP,
-\fB-t\fP, or \fB-s\fP) is required to exchange strings of non-null
-characters internally with \fBavram\fP, and used a null.
-.TP
-.B \fIapplication-name\fP: invalid file name (code \fInn\fP)
-The data structure representing a file obtained from an application
-has a name consisting of something other than character strings. This
-error could be the result of a filter mode application being invoked
-in parameter mode.
-.TP
-.B \fIapplication-name\fP: null character in file name
-Similar to the above errors.
-.TP
-.B \fIapplication-name\fP: bad character in file name
-Similar to the above errors.
-Slashes, backslashes, and unprintable characters other than spaces are
-also prohibited in file names.
-.TP
-.B \fIapplication-name\fP: invalid output preamble format
-According the format used by \fBavram\fP for data files, a data file
-may contain an optional text portion, known as the preamble. This
-error occurs when a data file obtained from an application can not be
-written because the preamble is something other than a list of
-character strings.
-.TP
-.B \fIapplication-name\fP: invalid file specification
-This error occurs in situations where the data structure for a file
-obtained by evaluating the application is too broken to permit any
-more specific diagnosis.
-.TP
-.B \fBavram\fP: invalid raw file format in \fIapplication-name\fP
-The file containing the virtual machine code was not able to be
-loaded, because the code was not in a recognizable format.
-.RE
-.TP
-.B application programming errors
-A further class of application crashes results from miscellaneous bugs
-in the application. These require the application to be debugged and
-have no user level explanation or workaround, but are listed here for
-reference. These messages are not normally prefaced by the application
-name when reported unless the application elects to do so, except for
-the \fBinvalid profile identifier\fP message.
-.RS
-.TP
-.B invalid recursion
-.TP
-.B invalid comparison
-.TP
-.B invalid deconstruction
-.TP
-.B invalid transpose
-.TP
-.B invalid membership
-.TP
-.B invalid distribution
-.TP
-.B invalid concatenation
-.TP
-.B invalid assignment
-.TP
-.B unrecognized combinator (code \fInn\fP)
-.TP
-.B \fIapplication-name\fP: invalid profile identifier
-.TP
-.B unsupported hook
-.RE
-.TP
-.B configuration related errors
-The source code distribution of \fBavram\fP incorporates a flexible
-configuration script allowing it to be installed on a variety of
-platforms. Not all platforms allow support for all features. It is also
-anticipated that new features may be added to \fBavram\fP from time to
-time. Some problems may therefore occur due to features not being
-supported at your site for either of these reasons. The following error
-messages are relevant to these situations.
-.RS
-.TP
-.B unsupported hook
-If it's not simply due to an application programming error, this
-message may be the result of trying to use an application that
-requires a newer version of \fBavram\fP than the one installed, even
-though applications should avoid this problem by checking the version
-number at run time. If this is the reason, the solution would be to
-install the latest version.
-.TP
-.B \fIapplication-name\fP: I need avram linked with \fIfoo\fP, \fIbar\fP and \fIbaz\fP.
-A message of the this form indicates that a new installation may be
-needed. At this writing (11/11/1), \fBavram\fP may report this message
-with respect to \fBlibexpect5.32\fP, \fBtcl8.3\fP, and \fBlibutil\fP
-if any of the \fB-i\fP, \fB-t\fP, or \fB-s\fP options is used on a
-system where not all of these libraries were detected when \fBavram\fP
-was installed from a source distribution.
-Because \fBavram\fP is useful even without interactive applications,
-these libraries are not considered absolute prerequisites by the
-configuration script.
-.TP
-.B avram: can't emulate version \fIversion\fP
-The \fB--emulation=\fP\fIversion\fP option obviously won't work if the
-requested version is newer than the installed version, or if it is not
-a valid version number. When that happens, this message is printed
-instead and \fBavram\fP terminates.
-.TP
-.B avram: multiple version specifications
-The \fB--emulation=\fP\fIversion\fP option can be used at most once
-on a command line. This message is printed if it is used more than
-once.
-.TP
-.B avram: unrecognized option: \fIoption-name\fP
-may mean that a command line option has been misspelled, or may be another
-sign of an obsolete version of \fBavram\fP
-.TP
-.B \fIapplication-name\fP: warning: search paths not supported
-If the \fBargz.h\fP header file was not detected during configuration,
-\fBavram\fP will not be able to support search paths in the
-\fBAVMINPUTS\fP environment variable. This message is a warning that
-the environment variable is being ignored. If the warning is followed
-by an I/O error, the latter may be due to a file being in a path that
-was not searched for this reason. A workaround is to specify the full
-path names of all input files outside the current working directory.
-If you don't need search paths, you can get rid of this message by
-undefining \fBAVMINPUTS\fP.
-
-.RE
-.TP
-.B Other Diagnostics and Warnings
-.RS
-.TP
-.B avram: multiple -.EXT options; all but last ignored
-This message is written when more than one default extension is given as
-a command line parameter.  At most one default extension is allowed. If
-more than one is given, only the last one is used. The error is
-non-fatal and \fBavram\fP will try to continue. If you need more
-than one default extension, consider using the hard coded default
-extensions of \fB.fun\fP and \fB.avm\fP, or hacking the shell script
-in which the \fBavram\fP command line appears.
-.TP
-.B  \fIapplication-name\fP: empty operator
-This message probably means that the virtual code file is corrupt or
-invalid.
-.TP
-.B usage summary
-For any errors in usage not covered by other diagnostics, such as
-incompatible combinations of options, \fBavram\fP prints a message to
-standard error giving a brief summary of options, similar to the output
-from \fBavram --help\fP.
-.RE
-.SH EXAMPLE
-It is recommended that the application developer (or the compiler)
-package virtual machine code applications as shell scripts with the
-\fBavram\fP command line embedded in them. This style relieves the user
-of the need to remember the appropriate virtual machine options for
-invoking the application, which are always the same for a given
-application, or even to be aware of the virtual machine
-at all.
-.P
-Here is a script that performs a similar operation to the standard
-Unix \fBcat\fP utility. (That is, it copies the contents of a file whose
-name is given on the command line to standard output, or copies
-standard input to standard output if no file name is given.) This
-script can be marked executable (with \fBchmod\fP) and run by any user
-with the \fBavram\fP executable in his or her path (even if
-\fBavram\fP had to be installed in a non-standard directory such as
-~/bin).
-
-.nf
-   #!/bin/sh
-   #\\
-   exec avram --default-to-stdin "$0" "$@"
-   sKYQNTP\\
-.fi
-
-The idea for this script is blatantly lifted from the \fBwish\fP
-manpage. The first line of the script invokes a shell to process
-what follows. The shell treats the second line as a comment and
-ignores it.  Based on the third line, the shell invokes \fBavram\fP
-with the indicated option, the script itself as the next argument, and
-whatever command line parameters were initially supplied by the user
-as the remaining arguments. The rest of the script after
-that line is never processed by the shell.
-.P
-When \fBavram\fP attempts to load the shell script as a virtual
-machine code file, which happens as a result of it being executed by
-the shell, it treats the first line as a comment and ignores it. It
-also treats the second line as a comment, but takes heed of the
-trailing backslash, which is interpreted as a comment continuation
-character. It therefore also treats the third line as a comment and
-ignores it. Starting with the fourth line, it reads the virtual code,
-which is in a binary data format encoded with printable characters,
-and evaluates it.
-.SH FILES
-.TP
-.B ./profile.txt
-This file is written automatically by \fBavram\fP on behalf of
-applications that include profile annotations. It lists the number of
-invocations for each annotated part of the application, the total
-amount of time spent on it (in relative units), the average amount of
-time for each invocation, and the percentage of time relative to the
-remainder of the application.
-.SH ENVIRONMENT
-An environment variable \fBAVMINPUTS\fP can be made to store a list of
-directories (using the \fBset\fP or \fBexport\fP commands) that
-\fBavram\fP will search for input files. The directories should be
-separated by colons, similarly to the \fBPATH\fP environment variable.
-
-The search paths in \fBAVMINPUTS\fP apply only to the names of input
-files given on the command line when
-\fBavram\fP is invoked in parameter mode.  They
-do not apply to the name of the virtual code file, which is always
-assumed to be either absolute or relative to the current working
-directory (this assumption being preferable in the case of a script like
-the example shown above).
-
-Starting in the first directory in the list of \fBAVMINPUTS\fP,
-\fBavram\fP searches for a file exactly as its name appears on the
-command line (subject to the expansion of special characters by the
-shell). If it is not found and the name does not contain a
-period, but a command line option of \fB-.EXT\fP has been used,
-\fBavram\fP will then search for a file with that name combined with
-the extension \fB.EXT\fP. If \fB-.EXT\fP has not been used or if no
-matching file is found with it, \fBavram\fP tries the extensions of \fB.avm\fP
-and \fB.fun\fP in that order, provided the given file name
-contained no periods. If no match is found for any of those cases,
-\fBavram\fP proceeds to search the next directory in the list obtained
-from \fBAVMINPUTS\fP, and so on. It stops searching when the first
-match is found. For subsequent input files, the search begins again at
-the first directory.
-
-If \fBAVMINPUTS\fP is not defined, input file names are assumed to be
-absolute or relative to the current working directory. If it is defined,
-the current working directory is not searched for input files unless it
-is listed.
-
-If \fBAVMINPUTS\fP is defined, the current working directory is not
-searched for input files unless it is listed. If it is empty or not
-defined, a default list of search paths is used, currently
-
-.nf
- .:/usr/local/lib/avm:/usr/lib/avm:/lib/avm:/opt/avm:/opt/lib/avm
-.fi
-
-These paths are defined in \fBavram.c\fP and can be changed
-by recompiling it.
-.SH BUGS
-
-There are no known bugs outstanding, except for any that may be
-inherent in the external library functions. However, \fBavram\fP has
-been used most extensively on GNU/Linux systems, and the prospect
-of portability issues with new or lesser used features on other
-systems can't be excluded.
-
-Though not observed in practice, it's theoretically possible to blow
-the stack by passing enough functions as arguments to library
-functions that pass more functions to library functions (e.g., by
-using nested calls to the gsl integration functions meant for a single
-variable to evaluate a very high dimensional multiple integral). In
-all other cases only dynamic heap storage or a constant amount of
-stack space is used.  In particular, this issue is *not* relevant to
-virtual code applications that don't use external libraries, or that
-don't pass functions to them as arguments.
-
-\fBavram\fP is designed to recover gracefully from memory overflows by
-always checking for \fBNULL\fP results from \fBmalloc()\fP or
-otherwise trapping functions that allocate memory. In the event of an
-overflow, it conveys an appropriate error message to the virtual code
-application to be handled by the usual exception handling mechanisms.
-However, there is currently no way for a virtual code application to
-detect in advance whether sufficient memory is available, nor for it
-to resume normal operation once an exception occurs. Furthermore, it
-has been observed on some systems including Irix and 2.4 series Linux
-kernels that the \fBavram\fP process is killed automatically for
-attempting to allocate too much memory rather than given the chance to
-recover.
-
-Please send bug reports to the address below.
-.SH SEE ALSO
-.BR cat (1),
-.BR libexpect (3), 
-.BR wish (1), 
-.BR bash_builtins (1), 
-.BR ulimit (1), 
-.BR strerror (3), 
-.BR stdin (3),
-.BR stdout (3), 
-.BR stderror (3), 
-.BR info (1),
-.BR pinfo (1), 
-.BR chmod (1), 
-.BR set (1), 
-.BR export (1), 
-.BR sh (3).
-
-The full documentation for \fBavram\fP is maintained as a Texinfo
-manual. If the \fBinfo\fP and \fBavram\fP programs are properly
-installed at your site, the command \fBinfo avram\fP or \fBpinfo
-avram\fP should give you access to the complete manual. Debian
-GNU/Linux users could have a look under \fB/usr/share/doc/*avram*\fP
-for possible html or postscript documentation and examples.
-.SH AUTHOR
-Dennis Furey <[email protected]>.

+ 0 - 253
doc/avram.info

@@ -1,253 +0,0 @@
-This is avram.info, produced by makeinfo version 4.13 from
-avram.texinfo.
-
-This file documents the `avram' command which is a virtual machine code
-interpreter
-
-   Copyright (C) 2000, 2003, 2006-2010 Dennis Furey 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 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 this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-
-Indirect:
-avram.info-1: 883
-avram.info-2: 292821
-
-Tag Table:
-(Indirect)
-Node: Top883
-Node: Preface1723
-Node: User Manual7742
-Node: General Options9950
-Node: Modes of Operation12724
-Node: Filter Mode13401
-Node: Parameter Mode15103
-Node: Filter Mode Options17381
-Node: Parameter Mode Options20284
-Node: Command Line Syntax25305
-Node: Diagnostics28805
-Node: Internal Errors30181
-Node: i/o Errors31456
-Node: Overflow Errors32933
-Node: File Format Errors34332
-Node: Application Programming Errors36733
-Node: Configuration Related Errors37697
-Node: Other Diagnostics and Warnings41104
-Node: Security42238
-Node: Example Script44776
-Node: Files46969
-Node: Environment47557
-Node: Bugs49650
-Node: Virtual Machine Specification51434
-Node: Raw Material52586
-Node: Concrete Syntax58053
-Node: Bit String Encoding59534
-Node: Blocking62124
-Node: File Format63166
-Node: Preamble Section64713
-Node: Data Section65267
-Node: Representation of Numeric and Textual Data65821
-Node: Filter Mode Interface68981
-Node: Loading All of Standard Input at Once69850
-Node: Standard Input Representation70735
-Node: Standard Output Representation74072
-Node: Line Maps76477
-Node: Byte Transducers77255
-Node: Parameter Mode Interface79513
-Node: Input Data Structure80229
-Node: Input for Mapped Applications84744
-Node: Output From Non-interactive Applications88695
-Node: Output From Interactive Applications90335
-Node: Line Oriented Interaction92218
-Node: Character Oriented Interaction98329
-Node: Mixed Modes of Interaction100358
-Node: Virtual Code Semantics102384
-Node: A New Operator103736
-Node: On Equality104692
-Node: A Minimal Set of Properties106878
-Node: A Simple Lisp Like Language109805
-Ref: A Simple Lisp Like Language-Footnote-1110678
-Node: Syntax110966
-Node: Semantics112016
-Node: Standard Library113356
-Node: How `avram' Thinks114809
-Node: Variable Freedom119296
-Node: Metrics and Maintenance122740
-Node: Version123223
-Node: Note124247
-Node: Profile125340
-Node: Weight126601
-Node: Deconstruction128150
-Node: Field128681
-Node: Fan130621
-Node: Recursion131289
-Node: Recur131842
-Node: Refer132794
-Node: Assignment134282
-Node: Predicates138756
-Node: Compare139377
-Node: Member140363
-Node: Iteration141404
-Node: List Combinators142970
-Node: Map143693
-Node: Filter144480
-Node: Reduce145438
-Node: Sort149524
-Node: Transfer151990
-Node: Mapcur156478
-Node: List Functions156949
-Node: Cat157490
-Node: Reverse158013
-Node: Distribute158563
-Node: Transpose159317
-Node: Exception Handling160256
-Node: A Hierarchy of Sets161363
-Node: Operator Generalization163404
-Node: Error Messages166701
-Node: Expedient Error Messages170230
-Node: Computable Error Messages172014
-Node: Exception Handler Usage175243
-Node: Interfaces to External Code179016
-Node: Library combinator180740
-Node: Have combinator182798
-Ref: Have combinator-Footnote-1185940
-Node: Interaction combinator186129
-Node: Vacant Address Space191464
-Node: Library Reference195383
-Node: Lists198628
-Node: Simple Operations199720
-Node: Recoverable Operations209889
-Node: List Transformations212763
-Node: Type Conversions217666
-Node: Primitive types219851
-Node: One dimensional arrays223396
-Node: Two dimensional arrays226747
-Node: Related utility functions238096
-Node: Comparison242842
-Node: Deconstruction Functions246313
-Node: Indirection248282
-Node: The Universal Function254928
-Node: Characters and Strings257207
-Node: File Manipulation266762
-Node: File Names267343
-Node: Raw Files272219
-Node: Formatted Input276058
-Node: Formatted Output282978
-Node: Invocation292369
-Node: Command Line Parsing292821
-Node: Execution Modes300985
-Node: Version Management305554
-Node: Error Reporting309671
-Node: Profiling313916
-Node: Emulation Primitives319226
-Node: Lists of Pairs of Ports320411
-Node: Ports and Packets322734
-Ref: Ports and Packets-Footnote-1329033
-Node: Instruction Stacks329225
-Node: External Library Maintenance336953
-Node: Calling existing library functions337801
-Node: Implementing new library functions341120
-Node: Working around library misfeatures348331
-Node: Inept excess verbiage349255
-Node: Memory leaks352322
-Node: Suicidal exception handling360710
-Node: Character Table367402
-Node: Reference Implementations382385
-Node: Pairwise383563
-Node: Insert384892
-Node: Replace386550
-Node: Transition388663
-Node: Changes390116
-Node: External Libraries390613
-Node: bes393722
-Node: Bessel function calling conventions394265
-Node: Bessel function errors396827
-Node: complex397273
-Node: fftw399314
-Node: glpk401328
-Node: glpk input parameters402267
-Node: glpk output404099
-Node: glpk errors404781
-Node: Additional glpk notes405393
-Node: gsldif405944
-Node: gsldif input parameters406463
-Node: gsldif output407289
-Node: gsldif exceptions407929
-Node: Additional gsldif notes408308
-Node: gslevu409049
-Node: gslevu calling conventions409818
-Node: gslevu exceptions410408
-Node: gslint410929
-Node: gslint input parameters411407
-Node: gslint output413314
-Node: gslint exceptions414270
-Node: Additional gslint notes415025
-Node: harminv416351
-Node: harminv input parameters416912
-Node: harminv output417975
-Node: harminv exceptions419181
-Node: Additional harminv notes420495
-Node: kinsol421404
-Node: kinsol input parameters422848
-Node: kinsol output425624
-Node: kinsol exceptions426566
-Node: Additional kinsol notes427451
-Node: lapack429636
-Node: lapack calling conventions430453
-Node: lapack exceptions436278
-Node: Additional lapack notes436983
-Node: math438733
-Node: math library operators439511
-Node: math library predicates440538
-Node: math library conversion functions441248
-Node: math library exceptions442204
-Node: Additional math library notes443290
-Node: mtwist444162
-Node: mtwist calling conventions445170
-Node: mtwist exceptions448323
-Node: Additional mtwist notes449240
-Node: minpack451178
-Node: minpack calling conventions451698
-Node: minpack exceptions452936
-Node: Additional minpack notes453614
-Node: mpfr455380
-Node: mpfr binary operators457087
-Node: mpfr unary operators458347
-Node: mpfr binary operators with a natural operand459435
-Node: mpfr binary predicates460887
-Node: mpfr unary predicates461760
-Node: mpfr constants462193
-Node: mpfr functions with miscellaneous calling conventions463090
-Ref: mpfr functions with miscellaneous calling conventions-Footnote-1464395
-Node: mpfr conversion functions464548
-Node: mpfr exceptions466562
-Node: Additional mpfr notes467267
-Node: lpsolve468121
-Node: lpsolve calling conventions468639
-Node: lpsolve return values470090
-Node: lpsolve errors470553
-Node: rmath470927
-Node: rmath statistical functions471700
-Node: rmath miscellaneous functions475372
-Node: rmath exceptions476205
-Node: umf476578
-Node: umf input parameters478320
-Node: umf output481112
-Node: umf exceptions481765
-Node: Additional umf notes482792
-Node: Copying483454
-Node: Function Index502593
-Node: Concept Index518168
-
-End Tag Table

+ 0 - 6618
doc/avram.info-1

@@ -1,6618 +0,0 @@
-This is avram.info, produced by makeinfo version 4.13 from
-avram.texinfo.
-
-This file documents the `avram' command which is a virtual machine code
-interpreter
-
-   Copyright (C) 2000, 2003, 2006-2010 Dennis Furey 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 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 this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-
-File: avram.info,  Node: Top,  Next: Preface,  Prev: (dir),  Up: (dir)
-
-   This file documents `avram' version 0.13.0, which is a virtual
-machine code interpreter.
-
-* Menu:
-
-* Preface::                        project aims and scope
-* User Manual::                    command line options and usage
-* Virtual Machine Specification::  a guide for compiler writers
-* Library Reference::              how to reuse or enhance `avram'
-* Character Table::                representations for ASCII characters
-* Reference Implementations::      constructive computability proofs
-* Changes::                        recent updates to the manual
-* External Libraries::             specifications and calling conventions
-* Copying::                        license terms
-* Function Index::                 for the shared library API
-* Concept Index::
-
-
-File: avram.info,  Node: Preface,  Next: User Manual,  Prev: Top,  Up: Top
-
-Preface
-*******
-
-`avram' is a virtual machine code interpreter.  It reads an input file
-containing a user-supplied application expressed in virtual machine
-code, and executes it on the host machine. The name is a quasi-acronym
-for "Applicative ViRtuAl Machine".  Notable features are
-
-   * strong support for functional programming operations (e.g., list
-     processing)
-
-   * interfaces to selected functions from mathematical libraries, such
-     as
-        * `gsl'      (numerical integration, differentiation, and
-          series acceleration)
-
-          `http://www.gnu.org/software/gsl/'
-
-        * `mpfr'     (arbitrary precision arithmetic)
-
-          `http://www.mpfr.org'
-
-        * `minpack'  (non-linear optimization)
-
-          `http://ftp.netlib.org/minpack'
-
-        * `lapack'   (linear algebra)
-
-          `http://ftp.netlib.org/lapack'
-
-        * `fftw'     (fast fourier transforms)
-
-          `http://www.fftw.org'
-
-        * `Rmath'    (statistical and transcendental functions)
-
-          `http://www.r-project.org'
-
-        * `ufsparse' (sparse matrices)
-
-          `http://www.cise.ufl.edu/research/sparse/SuiteSparse/current/SuiteSparse/'
-
-        * `glpk'     (linear programming by the simplex method)
-
-          `http://tech.groups.yahoo.com/group/lp_solve/'
-
-        * `lpsolve'      (mixed integer linear programming)
-
-          `http://www.llnl.gov/CASC/sundials/'
-
-        * `kinsol'   (constrained non-linear optimization)
-
-          `http://www.llnl.gov/CASC/sundials/'
-
-   * interoperability of virtual code applications with other console
-     applications or shells through the `expect' library
-
-   * a simple high-level interface to files, environment variables and
-     command line parameters
-
-   * support for various styles of stateless or persistent stream
-     processors (a.k.a. Unix filters)
-
-   The reason for writing `avram' was that I wanted to do some work
-using a functional programming language, didn't like any functional
-programming languages that already existed, and felt that it would be
-less trouble to write a virtual machine emulator than the back end of a
-compiler. As of version 0.1.0, the first public release of `avram' as
-such in 2000, most of the code base had been in heavy use by me for
-about four years, running very reliably. At this writing some six years
-later, it has seen even more use with rarely any reliability issues, in
-some cases attacking large combinatorial problems for weeks or months
-at a time. These problems have involved both long running continuous
-execution, and batches of thousands of shorter jobs.
-
-   Although the virtual machine is biased toward functional programming,
-it is officially language agnostic, so `avram' may be useful to anyone
-involved in the development of compilers for other programming,
-scripting, or special purpose languages. The crucial advantage of using
-it in your own project is that rather than troubling over address
-modes, register allocation, and other hassles inherent in generating
-native code, your compiler can just dump a fairly high level
-intermediate code representation of the source text to a file, and let
-the virtual machine emulator deal with the details. The tradeoff for
-using a presumably higher level interpreted language is that the
-performance is unlikely to be competitive with native code, but this
-issue is mitigated in the case of numerical applications whose heavy
-lifting is done by the external libraries mentioned above.
-
-   Portability is an added bonus. The virtual code is binary compatible
-across all platforms. Versions of `avram' as of 0.1.0 and later are
-packaged using GNU autotools and should be possible to build on any
-platform supporting them. In particular, the package is known to have
-built successfully on MacOS, FreeBSD, Solaris (thanks to the compile
-farm at Sourceforge.net) Digital Unix, and Debian GNU/Linux for i386 and
-Alpha platforms, although it has not been extensively tested on all of
-them. Earlier versions were compiled and run successfully on Irix and
-even Windows-NT (with `gcc').
-
-   This document is divided into three main parts, with possibly three
-different audiences, but they all depend on a basic familiarity with Unix
-or GNU/Linux systems.
-
-*note User Manual::
-     essentially reproduces the information found in the manpage that
-     is distributed with `avram' with a few extra examples and longer
-     explanations. Properly deployed, `avram' should be almost entirely
-     hidden from end users by wrapper scripts, so the "users" to whom
-     this part is relevant would be those involved in preparing these
-     scripts (a matter of choosing the right command line options).
-     Depending on the extent to which this task is automated by a
-     compiler, that may include the compiler writer or the developers
-     of applications.
-
-*note Virtual Machine Specification::
-     documents much of what one would need to know in order to write a
-     compiler that generates code executable by `avram'. That includes
-     the complete virtual machine code semantics and file formats. It
-     would also be possible to implement a compatible replacement for
-     `avram' from scratch based on the information in this chapter, in
-     case anyone has anything against C, my coding style, or the GPL.
-     (A few patches to make it `lint' cleanly or a new implementation
-     in good pedagogical Java without pointers would both be instructive
-     exercises. ;-)) 
-
-*note Library Reference::
-     includes documentation on the application program interface and
-     recommended entry points for the C library distributed with
-     `avram'. This information would be of use to those wishing to
-     develop applications incorporating similar features, or to reuse
-     the code for unrelated purposes. It might also be useful to anyone
-     wishing to develop C or C++ applications that read or write data
-     files in the format used by `avram'.
-
-
-File: avram.info,  Node: User Manual,  Next: Virtual Machine Specification,  Prev: Preface,  Up: Top
-
-1 User Manual
-*************
-
-This chapter provides the basic information on how to use `avram' to
-execute virtual machine code applications.
-
-   `avram' is invoked by typing a command at a shell prompt in one of
-these three forms.
-
-     `avram' [_general options_]
-     `avram' [_filter mode options_] CODEFILE[`.avm']
-     `avram' [_parameter mode options_] CODEFILE[`.avm'] [_parameters_]
-
-In the second case, `avram' reads from standard input, and may of
-course appear as part of commands such as 
-
-     `avram' [_filter mode options_] CODEFILE[`.avm'] < INPUTFILE
-     ANOTHERCOMMAND | `avram' [_filter mode options_] CODEFILE[`.avm']
-
-When `avram' is invoked with the name of an input file (with a default
-extension `.avm'), it reads virtual machine code from the file and
-executes it on the host machine.
-
-   The virtual code format used by `avram' is designed to support the
-features of functional or applicative programming languages. Although
-this chapter documents only the usage of `avram' and not the internals,
-it will be helpful to keep in mind that the virtual machine code
-expresses a mathematical function rather than a program in the
-conventional sense. As such, it performs no action directly, but may be
-applied in a choice of ways by the user of `avram' according to the
-precise operation required.
-
-   The following sections provide information in greater detail about
-usage and diagnostics.
-
-* Menu:
-
-* General Options::             getting help and version information
-* Modes of Operation::          stream processing or file oriented
-* Filter Mode Options::         how to run a stream processor
-* Parameter Mode Options::      how to have an application use files
-* Command Line Syntax::         application-independent conventions
-* Diagnostics::                 explanation of error messages
-* Security::                    running untrusted applications
-* Example Script::              how to unburden the end users
-* Files::                       miscellaneous files used
-* Environment::                 environment variables
-* Bugs::                        hall of shame
-
-
-File: avram.info,  Node: General Options,  Next: Modes of Operation,  Prev: User Manual,  Up: User Manual
-
-1.1 General Options
-===================
-
-Regardless of whatever other command line parameters are given, `avram'
-accepts the following parameters:
-
-`-h, --help'
-     Show a summary of options and exit.
-
-`-V,-v, --version'
-     Show the version of program and a short copyleft message and exit.
-
-`--emulation=VERSION'
-     Be backward compatible with an older version of `avram'.  This
-     option should include a valid version number, for example
-     `0.13.0', which is the version of `avram' to be emulated. It can
-     make virtual code applications future proof, assuming that future
-     versions of `avram' correctly support backward compatibility. It
-     may be used in conjunction with any other option in any mode of
-     operation.  This copy of the user manual has not been updated
-     since version 0.13.0 of `avram', so it is unable to document
-     incompatibilities with later versions. The latest version of the
-     manual may be found at `http://www.lsbu.ac.uk/~fureyd/avram'.
-
-`-e, --external-libraries'
-     Show a list of libraries with which `avram' has been linked and
-     whose functions therefore could be called from virtual machine
-     programs. This growing list currently includes selected functions
-     from `fftw', `glpk', `gsl', `kinsol', `lapack', `minpack', `mpfr',
-     `lpsolve', `Rmath' and `ufsparse' (see *note Preface::) which are
-     documented further in *note External Libraries::.
-
-`-j, --jail'
-     This option disables execution of shell commands by virtual code
-     applications, which is normally possible by default even for
-     nominally non-interactive applications (see *note Parameter Mode
-     Options::). A virtual code application attempting to spawn a shell
-     (using the `interact' combinator) when this option is selected will
-     encounter an exception rather than successful completion of the
-     operation. This option is provided as a security feature for
-     running untrusted code (see *note Security::), and is incompatible
-     with `-i', `-t', and `-s'.
-
-`-f, --force-text-input'
-     Normally `avram' will try to guess by looking at a file whether it
-     is an ordinary text file or one that has been written in the
-     virtual code file format, and choose a different internal
-     representation accordingly. An application may require one
-     representation or the other. This option tells `avram' to treat
-     all input files other than the virtual code file (named in the
-     first command line parameter) as text files regardless of whether
-     or not it would be possible to interpret them otherwise. This
-     option may be used in combination with any other option.
-
-
-File: avram.info,  Node: Modes of Operation,  Next: Filter Mode Options,  Prev: General Options,  Up: User Manual
-
-1.2 Modes of Operation
-======================
-
-Apart from to the capability to print brief help messages and exit,
-there are two main modes of operation, depending on which options are
-specified on the command line before the virtual code file name.  
-
-   For the purpose of choosing the mode of operation, the virtual code
-filename is taken to be the first command line argument not beginning
-with a dash. Other conventions relevant to application specific
-parameters are detailed in *note Command Line Syntax::.
-
-* Menu:
-
-* Filter Mode::
-* Parameter Mode::
-
-
-File: avram.info,  Node: Filter Mode,  Next: Parameter Mode,  Prev: Modes of Operation,  Up: Modes of Operation
-
-1.2.1 Filter Mode
------------------
-
-In filter mode, the argument to the function given by the virtual code
-is taken from standard input, and the result is written to standard
-output, except for error messages resulting from a failure to evaluate
-the function, which are written to standard error.  *Note
-Diagnostics::. Filter mode is indicated whenever these three conditions
-are all met.
-
-   * Either at least one of the filter mode options appears on the
-     command line preceding the first filename parameter, or there are
-     no options at all. *Note Filter Mode Options::.
-
-   * Exactly one filename parameter appears on the command line, which
-     is the name of the virtual machine code file.
-
-   * Either the filename comes last on the command line, or the
-     `--unparameterized' option precedes it, causing everything
-     following it to be ignored.
-
-Examples:
-
-`avram mynewapp < inputfilename'
-     In this example, filter mode is recognized by default because
-     there are no options or input files on the command line to indicate
-     otherwise. (The input file redirected into standard input is not
-     treated by the shell as a command line argument.)
-
-`cat somefile | avram -r coolprog > outputfile'
-     In this example, the `-r' option gives it away, being one of the
-     filter mode options, in addition to the fact that there are no
-     input file parameters or application-specific options.
-
-`avram -u devilmaycare.avm --bogusoption ignoredparameter'
-     In this case, filter mode is forced by the `-u' option despite
-     indications to the contrary.
-
-
-File: avram.info,  Node: Parameter Mode,  Prev: Filter Mode,  Up: Modes of Operation
-
-1.2.2 Parameter Mode
---------------------
-
-In parameter mode, the argument to the function given by the virtual
-code is a data structure containing environment variables and command
-line parameters including files, application specific options, and
-possibly standard input. The result obtained by evaluating the function
-is either a data structure representing a set of files to be written,
-which may include standard output, or a sequence of shell commands to
-be executed, or a combination of both. Parameter mode is indicated
-whenever either of these conditions is met.
-
-   * Any of the parameter mode options appears on the command line
-     preceding the first filename parameter.
-     *Note Parameter Mode Options::.
-
-   * At least one additional filename parameter or option follows the
-     first filename parameter, and the option `--unparameterized' does
-     not precede it.
-
-Examples:
-
-`avram --map-to-each-file prettyprinter.avm *.c *.h --extra-pretty'
-     In this example, parameter mode is indicated both by the parameter
-     mode option `--map-to-each-file' and by the presence of input file
-     names and the `--extra-pretty' option. The latter is specific to
-     the hypothetical `prettyprinter.avm' virtual code application, as
-     indicated by its position on the command line, and is therefore
-     passed to it by `avram'.
-
-`cat ~/specfile | avram reportgenerator -v - /var/log/syslog'
-     In this example, a hypothetical parameter mode application
-     `reportgenerator' is able to read `~/specfile' from standard input
-     because of the `-' used as a parameter.
-
-`avram --parameterized grepenv'
-     In this example, a hypothetical application that searches shell
-     variables is invoked in parameter mode even with no input files or
-     application specific options, because of the  `--parameterized'
-     option. Parameter mode invocation is required by the application
-     to give it access to the environment.
-
-`avram grepenv --search-targets=PATH,MANPATH'
-     This example shows an application specific option with both a
-     keyword and a parameter list. They suffice to indicate parameter
-     mode without an explicit `--parameterized' option.
-
-
-File: avram.info,  Node: Filter Mode Options,  Next: Parameter Mode Options,  Prev: Modes of Operation,  Up: User Manual
-
-1.3 Filter Mode Options
-=======================
-
-The options available in filter mode are listed below. Except as
-otherwise noted, all options are mutually exclusive. Ordinarily a given
-application will require certain fixed settings of these options and
-will not work properly if they are set inappropriately.
-
-`-r, `--raw-output''
-     Normally the result obtained by evaluating the function in the
-     virtual code file must be a list of character strings, which is
-     written as such to standard output. However, if this option is
-     selected, the form of the result is unconstrained, and it will be
-     written in a data file format that is not human readable but can
-     be used by other applications. This option is incompatible with
-     any other options except `-u'.
-
-`-c, --choice-of-output'
-     When this option is used, the evaluation of the function given by
-     the virtual machine code will be expected to yield a data
-     structure from which `avram' will ascertain whether standard
-     output should be written in text or raw data format.  This option
-     should be used only if application is aware of it. It is
-     incompatible with any other options except `-u'.
-
-`-l, --line-map'
-     Normally the entire contents of standard input up to `EOF' are
-     loaded into memory and used as the argument to the function in the
-     virtual code file. However, this option causes standard input to
-     be read a line at a time, with the function applied individually
-     to each line, and its result in each case written immediately to
-     standard output.  A given application either requires this option
-     or does not, and will not work properly in the alternative. This
-     option implies `--force-text-input' and is incompatible with any
-     other option except `-u'.
-
-`-b, --byte-transducer'
-     This option causes standard input to be read one character at a
-     time, evaluating the function given by the virtual code file each
-     time. The function is used as a state transition function that
-     takes a state and input to a next state and output. The output is
-     written concurrently with the input operations. A given
-     application will not work properly with an inappropriate setting
-     of this option.  This option implies `--force-text-input' and is
-     incompatible with any other option except `-u'.
-
-`-u, --unparameterized'
-     Normally `avram' guesses whether to use filter mode or parameter
-     mode depending on whether there are any parameters. Selecting this
-     option forces it to operate in filter mode regardless. Any
-     parameters that may appear on the command line after the virtual
-     code file name are ignored. This option may be used in conjunction
-     with any other filter mode option.
-
-
-File: avram.info,  Node: Parameter Mode Options,  Next: Command Line Syntax,  Prev: Filter Mode Options,  Up: User Manual
-
-1.4 Parameter Mode Options
-==========================
-
-The parameter mode options are listed below. Except as otherwise noted,
-any combination of parameter mode options may be selected together, and
-except as noted, the settings of these options can be varied without
-breaking the application.
-
-`-q, --quiet'
-     `avram' normally informs the user when writing an output file with
-     a short message to standard output. This option suppresses such
-     messages. This option is compatible with any application and any
-     other parameter mode option except `-a'.
-
-`-a, --ask-to-overwrite'
-     Selecting this option will cause `avram' to ask permission
-     interactively before overwriting an existing file, and to refrain
-     from overwriting it without permission, in which case the contents
-     that were to be written will be lost. This option overrides `-q'
-     and is compatible with any other parameter mode option or
-     application.
-
-`-.EXT'
-     An option beginning with a dash followed by a period specifies a
-     default extension for input file names. If `avram' doesn't find a
-     file named on the command line, and the filename doesn't already
-     contain a period, `avram' will try to find a file having a similar
-     name but with the default extension appended. The default
-     extension given by this option takes precedence over the hard
-     coded default extensions of `.fun' and `.avm'. At most one default
-     extension can be supplied. This option is compatible with any
-     other parameter mode option and compatible with any application.
-
-`-d, --default-to-stdin'
-     If no filename parameter appears on the command line (other than
-     the name of the virtual code file), this option directs `avram' to
-     read the contents of standard input as if it were specified as a
-     command line parameter. (Standard input can also be specified
-     explicitly as a dash. See *note Command Line Syntax::.) This
-     option is compatible with any application and any other parameter
-     mode option except `-m'.
-
-`-m, --map-to-each-file'
-     Normally `avram' loads the entire contents of all files named on
-     the command line into memory so as to evaluate the virtual machine
-     code application on all of them together. This option can be used
-     to save memory in the case of applications that operate on
-     multiple files independently. It causes `avram' to load only one
-     file at a time and to perform the relevant evaluation and output
-     before loading the next one. Application specific options and
-     standard input (if specified) are read only once and reused. This
-     option is incompatible with `-d', and not necessarily compatible
-     with all applications, although some may work both with and
-     without it.
-
-`-i, --interactive'
-     This option is used in the case of applications that interact with
-     other programs through shell commands. An application that is
-     meant to be invoked in this way requires this option and will not
-     work without it, nor will applications that are not of this type
-     work with it. This option is implied by `-t' and `-s', and is
-     compatible with any other parameter mode option.
-
-`-s, --step'
-     This option is used in the case of applications that interact with
-     other programs through shell commands, similarly to `-i', and can
-     substitute for it (see above). The option has the additional
-     effect of causing shell commands issued by `avram' on behalf of
-     the application to be written with their results to standard
-     output, and to cause `avram' to pause after displaying each shell
-     command until a key is pressed.  This capability may be useful for
-     debugging or auditing purposes but does not otherwise alter the
-     effects of the application.  This option is compatible with any
-     other parameter mode option.
-
-`-t, --trace'
-     This option is used in the case of applications that interact with
-     other programs through shell commands, but only by way of the
-     `interact' combinator, for which it provides developers a means of
-     low level debugging, particularly deadlock detection. When this
-     option is selected, a verbose trace of all characters exchanged
-     between the functional transducer and the external application are
-     written to standard output, along with some additional control flow
-     diagnostics. This option is compatible with any other parameter
-     mode option.
-
-`-p, --parameterized'
-     Normally `avram' tries to guess whether to operate in filter mode
-     or parameter mode based on the options used and the parameters. If
-     there are no parameters and no options, it will default to filter
-     mode, and try to read standard input. However, if this option is
-     selected, it will use parameter mode (and therefore not try to read
-     standard input unless required).
-
-
-File: avram.info,  Node: Command Line Syntax,  Next: Diagnostics,  Prev: Parameter Mode Options,  Up: User Manual
-
-1.5 Command Line Syntax
-=======================
-
-The command line parameters that follow the virtual code file name when
-`avram' is used in parameter mode (*note Parameter Mode::) are
-dependent on the specific application. However, all supported
-applications are constrained for implementation reasons to observe
-certain uniform conventions regarding their command line parameters,
-which are documented here to avoid needless duplication.
-
-   The shell divides the command line into "arguments" separated by
-white space.  Arguments containing white space or special characters
-used by the shell must be quoted or protected as usual. File names with
-wild cards in them are expanded by the shell before `avram' sees them.
-
-   `avram' then extracts from the sequence of arguments a sequence of
-filenames and a sequence of options. Each option consists of a keyword
-and an optional parameter list. Filenames, keywords, and parameter
-lists are distinguished according to the following criteria.
-
-  1. An argument is treated as a keyword iff it meets these three
-     conditions.
-
-       a. It starts with a dash.
-
-       b. It doesn't contain an equals sign.
-
-       c. It doesn't consist solely of a dash.
-
-  2. An argument is treated as a parameter list iff it meets these four
-     conditions.
-
-       a. It doesn't begin with a dash.
-
-       b. It either begins with an equals sign or doesn't contain one.
-
-       c. It immediately follows an argument beginning with a dash, not
-          containing an equals sign and not consisting solely of a dash.
-
-       d. At least one of the following is true.
-            1. It doesn't contain a period, tilde, or path separator.  
-
-            2. It contains a comma.
-
-            3. It can be interpreted as a C formatted floating point
-               number.
-
-  3. An argument is treated as an input file name iff it meets these
-     four conditions.
-
-       a. It doesn't begin with a dash.
-
-       b. It doesn't contain an equals sign.
-
-       c. It doesn't contain a comma.
-
-       d. At least one of the following is true.
-            1. It contains a period, tilde, or path separator.
-
-            2. It doesn't immediately follow an argument beginning with
-               a dash, not consisting solely of a dash, and not
-               containing an equals sign.
-
-  4. If an argument contains an equals sign but doesn't begin with one,
-     the part on the left of the first equals sign is treated as a
-     keyword and the part on the right is treated as a parameter list.
-
-  5. An argument consisting solely of a dash is taken to represent the
-     standard input file.
-
-  6. An argument not fitting any of the above classifications is an
-     error.
-
-   These conventions are needed for `avram' to detect input file names
-in a general, position independent way, so that it can preload the files
-on behalf of the application. Many standard Unix utilities follow these conventions
-to a large extent, the exceptions being those that employ non-filename
-arguments without distinguishing syntax, and use positional or other ad
-hoc methods of command line interpretation. A drop-in replacement for
-such an application could nevertheless be implemented using `avram'
-with an appropriate wrapper script, similar to the approach recommended
-in *note Example Script::, but with suitable keywords inserted prior to
-the ambiguous arguments.
-
-
-File: avram.info,  Node: Diagnostics,  Next: Security,  Prev: Command Line Syntax,  Up: User Manual
-
-1.6 Diagnostics
-===============
-
-The means exists for virtual code applications to have run time error
-messages written to standard error on their behalf by `avram'. Any
-error messages not documented here originate with an application and
-should be documented by it.
-
-   Most error messages originating from `avram' are prefaced by the
-application name (i.e., the name of the file containing the virtual
-machine code), but will be prefaced by `avram:' if the error is caused
-by a problem loading this file itself. Error messages originating from
-virtual code applications are the responsibility of their respective
-authors and might not be prefaced by the application name.
-
-   The run time errors not specifically raised by the application can be
-classified as internal errors, i/o errors, overflow errors, file format
-errors, application programming errors, and configuration related
-errors.
-
-   Some error messages include a code number. The number identifies the
-specific point in the source code where the condition was detected, for
-the benefit of the person maintaining it.
-
-* Menu:
-
-* Internal Errors::
-* i/o Errors::
-* Overflow Errors::
-* File Format Errors::
-* Application Programming Errors::
-* Configuration Related Errors::
-* Other Diagnostics and Warnings::
-
-
-File: avram.info,  Node: Internal Errors,  Next: i/o Errors,  Prev: Diagnostics,  Up: Diagnostics
-
-1.6.1 Internal Errors
----------------------
-
-Internal errors should never occur unless the `avram' source code has
-been carelessly modified, except as noted in *note Bugs::. There are
-two kinds.
-
-`APPLICATION-NAME: virtual machine internal error (code NN)'
-     Most internal errors would be reported by a message of this form
-     if they were to occur. It indicates that some required invariant
-     was not maintained. In such cases, the program terminates
-     immediately, and any results already produced are suspect.
-
-`APPLICATION-NAME: NN unreclaimed STRUCT-NAMES'
-     A message of this form could be printed at the end of an otherwise
-     successful run. `avram' maintains a count of the number of units
-     allocated for various data structures, and checks that they are
-     all reclaimed eventually as a safeguard against memory leaks. This
-     message indicates that some memory remains unaccounted for.
-
-   If a repeatable internal error is discovered, please email a bug
-report and a small representative test case to the author at
-<[email protected]>. Include the version number of
-`avram', which you can get by running `avram --version'.
-
-
-File: avram.info,  Node: i/o Errors,  Next: Overflow Errors,  Prev: Internal Errors,  Up: Diagnostics
-
-1.6.2 i/o Errors
-----------------
-
-These error messages are prefaced with the name of the application. A
-further explanation as to the reason, obtained from the standard
-`strerror()' utility, is appended to the messages below if possible.
-
-`APPLICATION-NAME: can't read FILENAME'
-     A file was not able to be opened for reading, typically because it
-     was not found or because the user does not have permission. The
-     file name is displayed with special characters expanded but
-     without any default extensions or search paths that may have been
-     tried. If you think a file exists and should have been found,
-     there may be a problem with your `AVMINPUTS' environment variable
-     (*note Environment::).
-
-`APPLICATION-NAME: can't write FILENAME'
-     A file was not able to be opened for writing.
-
-`APPLICATION-NAME: can't write to FILENAME'
-     A file was successfully opened for writing but became impossible to
-     write thereafter.
-
-`APPLICATION-NAME: can't spawn COMMAND'
-     An attempt to execute a shell command on behalf of an interactive
-     application failed during the `exp_popen()' call to the
-     `libexpect' library.
-
-`APPLICATION-NAME: can't close FILENAME'
-     A call to the standard C procedure `fclose()' failed due to
-     unforeseen circumstances. The error is non-fatal but the file
-     should be checked for missing data.
-
-
-File: avram.info,  Node: Overflow Errors,  Next: File Format Errors,  Prev: i/o Errors,  Up: Diagnostics
-
-1.6.3 Overflow Errors
----------------------
-
-These errors are reported by the application name prefacing one of the
-following messages, except as noted below.  
-
-`APPLICATION-NAME: counter overflow (code NN)'
-     An overflow occurred in an unsigned long integer being used as a
-     reference counter or something similar. This situation is very
-     unlikely.
-
-`APPLICATION-NAME: memory overflow (code NN)'
-     There wasn't enough memory to build an internal data structure. The
-     most likely cause is an attempt to operate on input files that are
-     too large. Standard remedies apply.
-
-   The memory overflow or counter overflow messages can also be reported
-without the application name preface or a code number. In these cases,
-they arise in the course of evaluating the function given by the
-application, rather than by loading the input files.
-
-   A counter overflow in this case is possible if the application
-attempts to compute the size of a very large, shared structure using
-native integer arithmetic.
-
-   Memory overflows are possible due to insufficient memory for a valid
-purpose, but may also occur due to a non-terminating recursion in the
-virtual machine code. To prevent thrashing or other bad effects from
-runaway code, the `ulimit' shell command is your friend.
-
-
-File: avram.info,  Node: File Format Errors,  Next: Application Programming Errors,  Prev: Overflow Errors,  Up: Diagnostics
-
-1.6.4 File Format Errors
-------------------------
-
-Certain application crashes result from an application not adhering to
-the required conventions about data and file formats, or because the
-application was invoked in the wrong mode (*note Modes of Operation::).
-These are the following.
-
-`APPLICATION-NAME: invalid text format (code NN)'
-     An application that was expected to return a string of characters
-     to be written to a text file returned data that did not correspond
-     to any valid character representation.
-
-`APPLICATION-NAME: null character in prompt'
-     An interactive application (invoked rightly or wrongly with `-i',
-     `-t', or `-s') is required to exchange strings of non-null
-     characters internally with `avram', and used a null.
-
-`APPLICATION-NAME: invalid file name (code NN)'
-     The data structure representing a file obtained from an application
-     has a name consisting of something other than character strings.
-     This error could be the result of a filter mode application (*note
-     Filter Mode::) being invoked in parameter mode.
-     (*note Parameter Mode::)
-
-`APPLICATION-NAME: null character in file name'
-     Similar to the above errors.
-
-`APPLICATION-NAME: bad character in file name'
-     Slashes, backslashes, and unprintable characters other than spaces
-     are also prohibited in file names.
-
-`APPLICATION-NAME: invalid output preamble format'
-     According the format used by `avram' for data files, a data file
-     may contain an optional text portion, known as the preamble. This
-     error occurs when a data file obtained from an application can not
-     be written because the preamble is something other than a list of
-     character strings.
-
-`APPLICATION-NAME: invalid file specification'
-     This error occurs in situations where the data structure for a file
-     obtained by evaluating the application is too broken to permit any
-     more specific diagnosis.
-
-`avram: invalid raw file format in APPLICATION-NAME'
-     The file containing the virtual machine code was not able to be
-     loaded, because the code was not in a recognizable format. Either
-     the file has become corrupted, the compiler that generated it has a
-     bug in it, or the wrong file was used as a virtual code file.
-
-
-File: avram.info,  Node: Application Programming Errors,  Next: Configuration Related Errors,  Prev: File Format Errors,  Up: Diagnostics
-
-1.6.5 Application Programming Errors
-------------------------------------
-
-A further class of application crashes results from miscellaneous bugs
-in the application. These require the application to be debugged and
-have no user level explanation or workaround, but are listed here for
-reference. These messages are not normally prefaced by the application
-name when reported unless the application elects to do so, except for
-the `invalid profile identifier' message.
-
-   * `invalid recursion' 
-
-   * `invalid comparison' 
-
-   * `invalid deconstruction' 
-
-   * `invalid transpose' 
-
-   * `invalid membership' 
-
-   * `invalid distribution' 
-
-   * `invalid concatenation' 
-
-   * `invalid assignment' 
-
-   * `unrecognized combinator (code NN)' 
-
-   * `APPLICATION-NAME: invalid profile identifier' 
-
-   * `unsupported hook' 
-
-
-File: avram.info,  Node: Configuration Related Errors,  Next: Other Diagnostics and Warnings,  Prev: Application Programming Errors,  Up: Diagnostics
-
-1.6.6 Configuration Related Errors
-----------------------------------
-
-The source code distribution of `avram' incorporates a flexible
-configuration script allowing it to be installed on a variety of
-platforms. Not all platforms allow support for all features. It is also
-anticipated that new features may be added to `avram' from time to
-time. Some problems may therefore occur due to features not being
-supported at your site for either of these reasons. The following error
-messages are relevant to these situations.
-
-`unsupported hook'
-     If it's not simply due to an application programming error (*note
-     Application Programming Errors::) this message may be the result of
-     trying to use an application that requires a newer version of
-     `avram' than the one installed, even though applications should
-     avoid this problem by checking the version number at run time. If
-     this is the reason, the solution would be to install the latest
-     version.
-
-`APPLICATION-NAME: I need avram linked with FOO, BAR and BAZ.'
-     A message of the this form indicates that a new installation may be
-     needed. At this writing (11/11/1), `avram' may report this message
-     with respect to `libexpect5.32', `tcl8.3', and `libutil' if any of
-     the `-i', `-t', or `-s' options is used on a system where not all
-     of these libraries were detected when `avram' was installed from a
-     source distribution. (See *note Parameter Mode Options::.)
-     Because `avram' is useful even without interactive applications,
-     these libraries are not considered absolute prerequisites by the
-     configuration script.
-
-`avram: can't emulate version VERSION'
-     The `--emulation=VERSION' option obviously won't work if the
-     requested version is newer than the installed version, or if it is
-     not a valid version number (*note General Options::). When that
-     happens, this message is printed instead and `avram' terminates.
-
-`avram: multiple version specifications'
-     The `--emulation=VERSION' option can be used at most once on a
-     command line. This message is printed if it is used more than
-     once. If you only typed it once and got this message, check your
-     aliases and wrapper scripts before reporting a bug.
-
-`avram: unrecognized option: OPTION-NAME'
-     may mean that a command line option has been misspelled, or may be
-     another sign of an obsolete version of `avram'. This message will
-     be followed by a usage summary similar to that of the `--help'
-     option.  (*note General Options::).
-
-`APPLICATION-NAME: warning: search paths not supported'
-     If the `argz.h' header file was not detected during configuration,
-     `avram' will not be able to support search paths in the
-     `AVMINPUTS' environment variable (*note Environment::). This
-     message is a warning that the environment variable is being
-     ignored. If the warning is followed by an i/o error
-     (*note i/o Errors::), the latter may be due to a file being in a
-     path that was not searched for this reason. A workaround is to
-     specify the full path names of all input files outside the current
-     working directory. If you don't need search paths, you can get rid
-     of this message by undefining `AVMINPUTS'.
-
-
-File: avram.info,  Node: Other Diagnostics and Warnings,  Prev: Configuration Related Errors,  Up: Diagnostics
-
-1.6.7 Other Diagnostics and Warnings
-------------------------------------
-
-`avram: multiple -.EXT options; all but last ignored'
-     This message is written when more than one default extension is
-     given as a command line parameter.  At most one default extension
-     is allowed. If more than one is given, only the last one is used.
-     The error is non-fatal and `avram' will try to continue. If you
-     need more than one default extension, consider using the hard
-     coded default extensions of `.fun' and `.avm', or hacking the
-     shell script in which the `avram' command line appears.
-
-`APPLICATION NAME: empty operator'
-     This message probably means that the virtual code file is corrupt
-     or invalid.
-
-usage summary
-     For any errors in usage not covered by other diagnostics, such as
-     incompatible combinations of options, `avram' prints a message to
-     standard error giving a brief summary of options, similar to the
-     output from `avram --help'. (See *note General Options::.)
-
-
-File: avram.info,  Node: Security,  Next: Example Script,  Prev: Diagnostics,  Up: User Manual
-
-1.7 Security
-============
-
-A few obvious security considerations are relevant to running untrusted
-virtual code applications. These points are only as reliable as the
-assumption that the `avram' executable has not been modified to the
-contrary.
-
-   * The applications with the best protection from malicious code are
-     those that run in filter mode, because they have no access to any
-     information not presented to them in standard input, nor the
-     ability to affect anything other than the contents of standard
-     output (provided that the `--jail' command line option is used).
-     The worst they can do is use up a lot of memory, which can be
-     prevented with the `ulimit' command. Unfortunately, not all
-     applications are usable in this mode.
-
-   * Parameter mode applications that do not involve the `-i', `-t' or
-     `-s' options are almost as safe (also assuming `--jail'). They
-     have (read-only) access to environment variables, and to the files
-     that are indicated explicitly on the command line. If standard
-     input is one of the files (as indicated by the use of `-' as a
-     parameter), the virtual code application may infer the current
-     date and time.  However, a parameter mode application may write
-     any file that the user has permission to write. The
-     `--ask-to-overwrite' option should be used for better security, or
-     at least the `--quiet' option should not be used.  The virtual
-     code can neither override nor detect the use of these options.
-
-   * Interactive parameter mode applications (those that use either the `-i',
-     `-t' or `-s' options) are the least secure because they can
-     execute arbitrary shell commands on behalf of the user. This
-     statement also applies to filter mode and parameter mode
-     applications where the `--jail' option is not used.  Use of
-     `--step' is preferable to `-i' for making an audit trail of all
-     commands executed, but the application could probably subvert it.
-     The `--step' option may be slightly better because it can allow
-     the user to inspect each command and interrupt it if appropriate.
-     However, in most cases a command will not be displayed until it is
-     already executed. Commands executed by non-interactive
-     applications normally will display no output to that effect. A
-     `chroot' environment may be the only secure way of running
-     untrusted interactive applications.
-
-
-File: avram.info,  Node: Example Script,  Next: Files,  Prev: Security,  Up: User Manual
-
-1.8 Example Script
-==================
-
-It is recommended that the application developer (or the compiler)
-package virtual machine code applications as shell scripts with the
-`avram' command line embedded in them. This style relieves the user of
-the need to remember the appropriate virtual machine options for
-invoking the application, which are always the same for a given
-application, or even to be aware of the virtual machine at all.
-
-   Here is a script that performs a similar operation to the standard Unix
-`cat' utility.
-
-     #!/bin/sh
-     #\
-     exec avram --force-text-input --default-to-stdin "$0" "$@"
-     sKYQNTP\
-
-That is, it copies the contents of a file whose name is given on the
-command line to standard output, or copies standard input to standard
-output if no file name is given. This script can be marked executable (with
-`chmod') and run by any user with the directory of the `avram'
-executable in his or her `PATH' environment variable, even if `avram'
-had to be installed in a non-standard directory such as `~/bin'.
-
-   The idea for this script is blatantly lifted from the `wish' manpage.
-The first line of the script invokes a shell to process what follows.
-The shell treats the second line as a comment and ignores it.  Based on
-the third line, the shell invokes `avram' with the indicated options,
-the script itself as the next argument, and whatever command line
-parameters were initially supplied by the user as the remaining
-arguments. The rest of the script after that line is never processed by
-the shell.
-
-   When `avram' attempts to load the shell script as a virtual machine
-code file, which happens as a result of it being executed by the shell,
-it treats the first line as a comment and ignores it. It also treats
-the second line as a comment, but takes heed of the trailing backslash,
-which is interpreted as a comment continuation character. It therefore
-also treats the third line as a comment and ignores it. Starting with
-the fourth line, it reads the virtual code, which is in a binary data
-format encoded with printable characters, and evaluates it.
-
-
-File: avram.info,  Node: Files,  Next: Environment,  Prev: Example Script,  Up: User Manual
-
-1.9 Files
-=========
-
-`./profile.txt'
-     This file is written automatically by `avram' on behalf of
-     applications that include profile annotations. It lists the number
-     of invocations for each annotated part of the application, the
-     total amount of time spent on it (in relative units), the average
-     amount of time for each invocation, and the percentage of time
-     relative to the remainder of the application. The exact format is
-     undocumented and subject to change.
-
-
-File: avram.info,  Node: Environment,  Next: Bugs,  Prev: Files,  Up: User Manual
-
-1.10 Environment
-================
-
-An environment variable `AVMINPUTS' can be made to store a list of
-directories (using the `set' or `export' commands) that `avram' will
-search for input files. The directories should be separated by colons,
-similarly to the `PATH' environment variable.
-
-   The search paths in `AVMINPUTS' apply only to the names of input
-files given on the command line (*note Command Line Syntax::) when
-`avram' is invoked in parameter mode (*note Parameter Mode::).  They do
-not apply to the name of the virtual code file, which is always assumed
-to be either absolute or relative to the current working directory
-(this assumption being preferable in the case of a script like that of
-*note Example Script::).  
-
-   Starting in the first directory in the list of `AVMINPUTS', `avram'
-searches for a file exactly as its name appears on the command line
-(subject to the expansion of special characters by the shell). If it is
-not found and the name does not contain a period, but a command line
-option of `-.EXT' has been used, `avram' will then search for a file
-with that name combined with the extension `.EXT'. If `-.EXT' has not
-been used or if no matching file is found with it, `avram' tries the
-extensions of `.avm' and `.fun' in that order, provided the given file
-name contained no periods. If no match is found for any of those cases,
-`avram' proceeds to search the next directory in the list obtained from
-`AVMINPUTS', and so on. It stops searching when the first match is
-found. For subsequent input files, the search begins again at the first
-directory.
-
-   If `AVMINPUTS' is defined, the current working directory is not
-searched for input files unless it is listed. If it is empty or not defined,
-a default list of search paths is used, currently
-
-     .:/usr/local/lib/avm:/usr/lib/avm:/lib/avm:/opt/avm:/opt/lib/avm\
-     :/usr/local/share/avm:/usr/share/avm:/share/avm:/opt/avm:/opt/share/avm
-
-These paths are defined in `avram.c' and can be changed by recompiling
-it.
-
-
-File: avram.info,  Node: Bugs,  Prev: Environment,  Up: User Manual
-
-1.11 Bugs
-=========
-
-There are no known bugs outstanding, except for any that may be
-inherent in the external library functions. However, `avram' has been
-used most extensively on GNU/Linux systems, and the prospect of
-portability issues with new or lesser used features on other systems
-can't be excluded.
-
-   Though not observed in practice, it's theoretically possible to blow
-the stack by passing enough functions as arguments to library functions
-that pass more functions to library functions (e.g., by using nested
-calls to the gsl integration functions meant for a single variable to
-evaluate a very high dimensional multiple integral). In all other cases
-only dynamic heap storage or a constant amount of stack space is used.
-In particular, this issue is _not_ relevant to virtual code
-applications that don't use external libraries, or that don't pass
-functions to them as arguments.
-
-   `avram' is designed to recover gracefully from memory overflows by
-always checking for `NULL' results from `malloc()' or otherwise
-trapping functions that allocate memory. In the event of an overflow,
-it conveys an appropriate error message to the virtual code application
-to be handled by the usual exception handling mechanisms. However,
-there is currently no way for a virtual code application to detect in
-advance whether sufficient memory is available, nor for it to resume
-normal operation once an exception occurs. Furthermore, it has been
-observed on some systems including Irix and 2.4 series Linux kernels
-that the `avram' process is killed automatically for attempting to
-allocate too much memory rather than given the chance to recover.
-
-   Please send bug reports to <[email protected]>.
-
-
-File: avram.info,  Node: Virtual Machine Specification,  Next: Library Reference,  Prev: User Manual,  Up: Top
-
-2 Virtual Machine Specification
-*******************************
-
-This chapter contains a description of the virtual machine implemented
-by `avram', from the point of view of a person wishing to write a
-compiler that generates code for it. Before reading this chapter,
-readers should at least skim *note User Manual:: in order to see the big
-picture. Topics covered in this chapter include data representations,
-virtual code semantics, and file formats. A toy programming language is
-introduced for illustrative purposes. The sections in this chapter might
-not make sense if read out of order the first time through.  The last
-section, *note Virtual Code Semantics::, contains many equations that
-may be difficult to read in the info or html renderings. The printed
-version is recommended for anyone who really wants to comprehend this
-material.
-
-* Menu:
-
-* Raw Material::
-* Concrete Syntax::
-* File Format::
-* Representation of Numeric and Textual Data::
-* Filter Mode Interface::
-* Parameter Mode Interface::
-* Virtual Code Semantics::
-
-
-File: avram.info,  Node: Raw Material,  Next: Concrete Syntax,  Prev: Virtual Machine Specification,  Up: Virtual Machine Specification
-
-2.1 Raw Material
-================
-
-The purpose of this section is to instill some basic concepts about the
-way information is stored or communicated by the virtual machine, which
-may be necessary for an understanding of subsequent sections.
-
-   The virtual machine represents both programs and data as members of a
-semantic domain that is straightforward to describe. Lisp users and
-functional programmers may recognize familiar concepts of atoms and lists
-in this description. However, these terms are avoided for the moment,
-in order to keep this presentation self contained and to prevent
-knowledgeable readers from inferring any unintended meanings.
-
-   As a rule, it is preferable to avoid overspecifying any theoretical
-artifact.  In this spirit, the set of entities with which the virtual
-machine is concerned can be defined purely in terms of the properties we
-need it to have.
-
-_A distinguished element_
-     A particular element of the set is designated, arbitrarily or
-     otherwise, as a distinguished element. Given any element of the
-     set, it is always possible to decide whether or not it is the
-     distinguished element. The set is non-empty and such an element
-     exists.
-
-_A binary operator_
-     A map from pairs of elements of the set to elements of the set
-     exists and meets these conditions.
-
-        * It associates a _unique_ element of the set with any given
-          ordered pair of elements from the set.
-
-        * It does not associate the distinguished element with any pair
-          of elements.
-
-   For the sake of concreteness, an additional constraint is needed:
-_the set has no proper subset satisfying the above conditions_. Any
-number of constructions remain within these criteria, but there is no
-need to restrict them further, because they are all equivalent for our
-purposes.
-
-   To see that these properties provide all the structure we need for
-general purpose computation, we may suppose some given set `S' and an
-operator `cons' having them are fixed, and infer the following points.
-
-   * `S' contains at least one element, the distinguished element. Call
-     it `nil'.  
-
-   * The pair `(nil,nil)' is a pair of elements of `S', so there must
-     be an element of `S' that `cons' associates with it. We can denote
-     this element `cons(nil,nil)'.  
-
-   * As no pair of elements is associated with the distinguished
-     element, `cons(nil,nil)' must differ from `nil', so `S' contains
-     at least two distinct elements.
-
-   * The pair `(nil,cons(nil,nil))' therefore differs from `(nil,nil)',
-     but because it is yet another pair of elements from `S', there
-     must be an element associated with it by the operator. We can
-     denote this element as `cons(nil,cons(nil,nil))'.
-
-   * Inasmuch as the operator associates every pair of elements with a
-     _unique_ element, `cons(nil,cons(nil,nil))' must differ from the
-     element associated with any other pair of elements, so it must
-     differ from `cons(nil,nil)', and we conclude that `nil',
-     `cons(nil,nil)' and `cons(nil,cons(nil,nil))' constitute three
-     distinct elements of the set `S'.
-
-   * By defining `cons(cons(nil,nil),nil)' and
-     `cons(cons(nil,nil),cons(nil,nil))' analogously and following a
-     similar line of reasoning, one may establish the existence of two
-     more distinct elements of `S'.
-
-   It is not difficult to see that an argument in more general terms
-could show that the inclusion of infinitely many elements in `S' is
-mandated by the properties of the `cons' operator. Furthermore, every
-element of `S' other than `nil' owes its inclusion to being associated
-with some other pair of elements by `cons', because if it were not, its
-exclusion would permit a proper subset of `S' to meet all of the above
-conditions. We can conclude that `S' contains exactly `nil' and the
-countable infinitude of elements of the form `cons(x,y)', where `x' and
-`y' are either `nil' or something of the form `cons(...)' themselves.
-
-   Some specific examples of sets and operators that have the required
-properties are as follows.
-
-   * the set of natural numbers, with `0' as the distinguished element,
-     and the `cons' operator defined by `cons(X,Y) = ((X+Y)(X+Y+1))/2 +
-     Y + 1'
-
-   * a set of balanced strings of parentheses, with `()' as the
-     distinguished element, and `cons' defined as string concatenation
-     followed by enclosure in parentheses
-
-   * a set of ordered binary trees, with the empty tree as the
-     distinguished element, and the `cons' operator as that which takes
-     an ordered pair of trees to the tree having them as its descendents
-
-   * a set containing only its own Cartesian product and an arbitrary
-     but fixed element `nil', with `cons' being the identity function
-
-   Each of these models may suggest a different implementation, some of
-which are more practical than others. The remainder of this document is
-phrased somewhat imprecisely in terms of a combination of the latter
-two. The nature of the set in question is not considered further, and
-elements of the set are described as "trees" or "lists". The distinguished
-element is denoted by `nil' and the operator by `cons'. Where no
-ambiguity results, `cons(x,y)' may be written simply as `(x,y)'.  These
-terms should not be seen as constraints on the implementation.
-
-
-File: avram.info,  Node: Concrete Syntax,  Next: File Format,  Prev: Raw Material,  Up: Virtual Machine Specification
-
-2.2 Concrete Syntax
-===================
-
-The previous section has developed a basic vocabulary for statements
-such as "the virtual machine code for the identity function is `(nil,(nil,nil))'",
-which are elaborated extensively in the subsequent sections on code and
-data formats. However, a description in this style would be inadequate
-without an explanation of how such an entity as `(nil,(nil,nil))' is
-communicated to `avram' in a virtual machine code file. The purpose of
-this section is to fill the gap by explaining exactly how any given
-tree would be transformed to its concrete representation.
-
-   The syntax is based on a conversion of the trees to bit strings, followed
-by grouping the bits into blocks of six, which are then encoded by
-printable characters. Although anyone is free to modify `avram', it is
-recommended that the concrete syntax described here be maintained for
-the sake of portability of virtual machine code applications.
-
-   Building a tree by reading the data from a file requires a more
-difficult algorithm than the one presented in this section, and is not
-considered because it's not strictly necessary for a compiler.
-Procedures for both reading and writing are available to C and C++
-users as part of the `avram' library, and are also easily invoked on
-the virtual code level.
-
-* Menu:
-
-* Bit String Encoding::
-* Blocking::
-
-
-File: avram.info,  Node: Bit String Encoding,  Next: Blocking,  Prev: Concrete Syntax,  Up: Concrete Syntax
-
-2.2.1 Bit String Encoding
--------------------------
-
-The conversion from trees to bit strings might have been done in several ways,
-perhaps the most obvious being based on a preorder traversal with each
-vertex printed as it is traversed.  By this method, the entire encoding
-of the left descendent would precede that of the right in the bit
-string. This alternative is therefore rejected because it imposes
-unnecessary serialization on communication.
-
-   It is preferable for the encodings of both descendents of a tree to
-be interleaved to allow concurrent transmission. Although there is
-presently no distributed implementation of the virtual machine and hence none
-that takes advantage of this possibility, it is better to plan ahead
-than to be faced with backward compatibility problems later.
-
-   The preferred algorithm for encoding a tree as a bit string employs a
-queue. The queue contains trees and allows them to be processed in a first-in
-first-out order. Intuitively, the algorithm works by traversing the
-tree in level order. To print a tree `T' as a string of `1's and `0's,
-it performs the following steps.
-
-     Initialize the queue to contain only `T'
-     while the queue is not empty do
-        if the front element of the queue is `nil' then
-           print `0'
-        else if the front element of the queue is of the form `cons(x,y)' then
-           print `1'
-           append `x' to the back of the queue
-           append `y' to the back of the queue
-        end if
-        remove the front element of the queue
-     end while
-
-   This algorithm presupposes that any given tree `cons(x,y)' can be
-"deconstructed" to obtain `x' and `y'. The computability of such an
-operation is assured in theory by the uniqueness property of the `cons'
-operator, regardless of the representation chosen. If the trees are
-implemented with pointers in the obvious way, their deconstruction is a
-trivial constant time operation.
-
-   As an example, running the following tree through the above algorithm
-results in the bit string
-`111111101011110010001001100010100010100100100'.
-
-
-     cons(
-        cons(
-           cons(nil,cons(nil,cons(nil,nil))),
-           cons(nil,cons(nil,nil))),
-        cons(
-           cons(
-              cons(nil,cons(nil,cons(nil,cons(nil,nil)))),
-              cons(nil,nil)),
-           cons(
-              cons(
-                 cons(nil,cons(nil,cons(cons(nil,cons(nil,nil)),nil))),
-                 cons(nil,nil)),
-              nil)))
-
-
-File: avram.info,  Node: Blocking,  Prev: Bit String Encoding,  Up: Concrete Syntax
-
-2.2.2 Blocking
---------------
-
-After the bit string is obtained as described above, it is grouped into
-blocks of six. Continuing with the example, the string
-
-     111111101011110010001001100010100010100100100
-
-would be grouped as
-
-     111111 101011 110010 001001 100010 100010 100100 100
-
-Because the number of bits isn't a multiple of six, the last group has
-to be padded with zeros, to give
-
-     111111 101011 110010 001001 100010 100010 100100 100000
-
-Each of these six bit substrings is then treated as a binary number,
-with the most significant bit on the left. The numbers expressed in
-decimal are
-
-     63 43 50 9 34 34 36 32
-
-The character codes for the characters to be written are obtained by
-adding sixty to each of these numbers, so as to ensure that they will be
-printable characters. The resulting character codes are
-
-     123 103 110 69 94 94 96 92
-
-which implies that the tree in the example could be written to a file as
-`{gnE^^`\'.
-
-
-File: avram.info,  Node: File Format,  Next: Representation of Numeric and Textual Data,  Prev: Concrete Syntax,  Up: Virtual Machine Specification
-
-2.3 File Format
-===============
-
-A virtual code file consists of an optional text preamble, followed by
-the concrete representation for a tree. The latter uses the syntax
-described in the previous section. The purpose of this section is to
-specify the remaining details of the file format.
-
-   The format for virtual code files may also be used for other purposes
-by virtual code applications, as it is automatically detected and parsed
-by `avram' when used in an input file, and can be automatically written
-to output files at the discretion of the application.
-
-   Other than virtual code files, input files not conforming to this
-format are not an error as far as `avram' is concerned, because they are assumed
-to be text files. Applications can detect in virtual code the
-assumption that is made and report an error if appropriate.
-
-   Although the data file format includes no checksums or other explicit methods
-of error detection, the concrete syntax itself provides a good measure
-of protection against undetected errors. The probability is vanishingly
-small that a random alteration to any valid encoding leaves it intact,
-because every bit in the sequence either mandates or prohibits the
-occurrence of two more bits somewhere after it. Errors in different
-parts of the file would have to be consistent with one another to go
-unnoticed.
-
-* Menu:
-
-* Preamble Section::
-* Data Section::
-
-
-File: avram.info,  Node: Preamble Section,  Next: Data Section,  Prev: File Format,  Up: File Format
-
-2.3.1 Preamble Section
-----------------------
-
-   * A file may contain at most one preamble.
-
-   * The preamble, if any, is a consecutive sequence of lines beginning
-     with the first line in the file.
-
-   * The first line of the preamble must begin with a hash (`#')
-     character.
-
-   * Subsequent lines of the preamble must either begin with a hash, or
-     immediately follow a line that ends with a backslash (`\')
-     character (or both).
-
-
-File: avram.info,  Node: Data Section,  Prev: Preamble Section,  Up: File Format
-
-2.3.2 Data Section
-------------------
-
-   * The data or virtual code section of the file begins on the first
-     line of the file that isn't part of the preamble.
-
-   * The data section may not contain any hashes, white space, or other
-     extraneous characters other than line breaks.
-
-   * If line breaks are ignored, the data section contains a sequence
-     of characters expressing a single tree in the concrete syntax
-     described in *note Concrete Syntax::.
-
-
-File: avram.info,  Node: Representation of Numeric and Textual Data,  Next: Filter Mode Interface,  Prev: File Format,  Up: Virtual Machine Specification
-
-2.4 Representation of Numeric and Textual Data
-==============================================
-
-As noted already, virtual code applications are specified by functions
-operating on elements of a set having the properties described in *note
-Raw Material::, which are convenient to envision as ordered binary
-trees or pairs of `nil'. However, virtual code applications normally
-deal with numeric or textual data, for example when they refer to the
-contents of a text file. It is therefore necessary for the application
-and the virtual machine emulator to agree on a way of describing textual
-or numeric data with these trees.
-
-   The purpose of this section is to explain the basic data structures
-used in the exchange of information between `avram' and a virtual code
-application.  For example, an explanation is needed for statements like
-"an application invoked with the `--baz' option is expected to return a
-pair `(FOO,BAR)', where `FOO' is a list of character strings ...", that
-are made subsequently in this document. Such statements should be
-understood as referring to the trees representing the pairs, lists,
-character strings, etc., according to the conventions explained below.
-
-_Characters_
-     An arbitrarily chosen set of 256 trees is used to represent the
-     character set. They are listed in *note Character Table::. For
-     example, the letter `A' is represented by
-     `(nil,(((nil,(nil,(nil,nil))),nil),(nil,nil)))'.  That means that
-     when an application wants the letter `A' written to a text file, it
-     returns something with this tree in it.
-
-_Booleans_
-     The value of `false' is represented by `nil', and the value of
-     `true' is represented by `(nil,nil)'.
-
-_Pairs_
-     Given any two items of data X1 and X2, having the respective
-     representations R1 and R2, the pair `(X1,X2)' has the
-     representation `cons(R1,R2)'.
-
-_Lists_
-     A list of the items X1, X2 ... XN with respective representations
-     R1 through RN is represented by the tree
-     `cons(R1,cons(R2...cons(RN,nil)...))'. In other words, lists are
-     represented as pairs whose left sides are the heads and whose
-     right sides are the tails. The empty list is identified with
-     `nil'. Lists of arbitrary finite length can be accommodated.
-
-_Naturals_
-     A number of the form `B0 + 2B1 + 4B2 + ... + 2^n BN', where each
-     `Bi' is `0' or `1', is represented by a tree of the form
-     `cons(T0,cons(T1...cons(TN,nil)...))' where each `Ti' is `nil' if
-     the corresponding `Bi' is `0', and `(nil,nil)' otherwise. Note that
-     the numbers `Bi' are exactly the bits written in the binary
-     expansion of the number, with `B0' being the least significant bit.
-
-_Strings_
-     are represented as lists of characters.
-
-   `avram' imposes no more of a "type discipline" than necessary to a
-workable interface between it and an application.  This selection of
-types and constructors should not be seen as constraining what a
-compiler writer may wish to have in a source language.
-
-
-File: avram.info,  Node: Filter Mode Interface,  Next: Parameter Mode Interface,  Prev: Representation of Numeric and Textual Data,  Up: Virtual Machine Specification
-
-2.5 Filter Mode Interface
-=========================
-
-From the point of view of the application developer or compiler writer,
-there are parameter mode applications, which are discussed in *note
-Parameter Mode Interface::, and filter mode applications, which are
-discussed in this section. Of the latter, there are mainly three kinds:
-those that read one character at a time, those that read a line at a
-time, and those that read the whole standard input file at once. Each
-of them is invoked with different options and expected to follow
-different calling conventions. This section summarizes these
-conventions.
-
-* Menu:
-
-* Loading All of Standard Input at Once::
-* Line Maps::
-* Byte Transducers::
-
-
-File: avram.info,  Node: Loading All of Standard Input at Once,  Next: Line Maps,  Prev: Filter Mode Interface,  Up: Filter Mode Interface
-
-2.5.1 Loading All of Standard Input at Once
--------------------------------------------
-
-Unless `--line-map' or `--byte-transducer' is used as a command line
-option when the application is invoked, the contents of standard input
-are loaded entirely into memory by `avram' before evaluation of the
-virtual code begins.  This interface is obviously not appropriate for
-infinite streams.
-
-   The virtual code application in this mode of operation is treated as
-a single function taking the entire contents of standard input as its
-argument, and returning the entire contents of standard output as its
-result.  Hence, this interface is one of the simplest available.
-
-* Menu:
-
-* Standard Input Representation::
-* Standard Output Representation::
-
-
-File: avram.info,  Node: Standard Input Representation,  Next: Standard Output Representation,  Prev: Loading All of Standard Input at Once,  Up: Loading All of Standard Input at Once
-
-2.5.1.1 Standard Input Representation
-.....................................
-
-The representation for the standard input file used as the argument to
-the function depends both on the file format and on the command line
-options specified when the application is invoked. The `--unparameterized'
-and `--raw-output' options make no difference to the input
-representation, and the `--line-map' and `--byte-transducer' options
-are not relevant to this mode of operation. That leaves four possible
-combined settings of the `--choice-of-output' and `--force-text-input'
-options.  If standard input conforms to the data file format
-specification *note File Format::, the following effects are possible.
-
-   * If neither `--choice-of-output' nor `--force-text-input' is used,
-     the argument to the function will be given directly by the tree
-     encoded in the data section of the file. The preamble of the file
-     will be ignored.
-
-   * If the `--choice-of-output' option is used and the
-     `--force-text-input' option is not used, the argument to the
-     function will be a pair `(PREAMBLE,CONTENTS)', where PREAMBLE is a
-     list of character strings taken from the preamble of the file
-     (with leading hashes stripped), and CONTENTS is the tree
-     represented in the data section of the file.
-
-   * If the `--choice-of-output' option is not used and the
-     `--force-text-input' option is used, the argument to the function
-     will be the whole file as a list of character strings.  I.e., both
-     the preamble and the data sections are included, hashes are not
-     stripped from the preamble, and the data section is not converted
-     to the tree it represents.
-
-   * If the `--choice-of-output' option is used and the
-     `--force-text-input' option is also used, the argument to the the
-     function will be a pair `(nil,CONTENTS)', where the contents are
-     the list of character strings as in the previous case.
-
-   If standard input does not conform to the data file format
-specification in *note File Format::, then it is assumed to be a text
-file. The `--force-text-input' option makes no difference, and there are
-only two possible effects, depending on whether `--choice-of-output' is
-used. They correspond to the latter two cases above, where
-`--force-text-input' is used.
-
-   The idea of the `--choice-of-output' option is that it is used only
-for applications that are smart enough to be aware of the
-`(PREAMBLE,CONTENTS)' convention. A non-empty preamble implies a data
-file whose contents could be any type, but an empty preamble implies a
-text file whose contents can only be a list of character strings. (In
-the case of a data file with no preamble, the list of the empty string
-is used for the preamble to distinguish it from a text file.)
-
-   Dumb applications that never want to deal with anything but text
-files should be invoked with `--force-text-input'. Otherwise, they have
-to be prepared for either text or data as arguments.
-
-   The use of both options at once is unproductive as far as the input
-format is concerned, but may be justified when the output is to be a
-data file and the input is text only.
-
-
-File: avram.info,  Node: Standard Output Representation,  Prev: Standard Input Representation,  Up: Loading All of Standard Input at Once
-
-2.5.1.2 Standard Output Representation
-......................................
-
-As in the case of standard input, the representation for standard output
-that the function is expected to return depends on the command line
-options with which the application is invoked. The only relevant options
-are `--raw-output' and `--choice-of-output', which are mutually
-exclusive.
-
-   * If neither option is selected, the result returned by the function
-     must be a list of character strings.
-
-   * If `--raw-output' is used, the result returned by the function is
-     unconstrained, and it will be written as a data file with no
-     preamble, following the format specified in *note File Format::.
-
-   * If `--choice-of-output' is used, the result returned by the
-     function must be a pair `(PREAMBLE,CONTENTS)'.
-
-   In the last case, the preamble determines how the file will be
-written.  If it is meant to be a text file, the preamble should be
-`nil', and the contents should be a list of character strings. If it is
-meant to be a data file, the preamble should be a non-empty list of
-character strings, and the format of the contents is unconstrained. To
-express a data file with no preamble, the preamble should be the list
-containing the empty string, rather than being empty.
-
-   In the result returned by the function, the preamble lines should not
-include leading hash characters, because they are automatically added to
-the output to enforce consistency with the data file format. However,
-they should include trailing backslashes as continuation characters
-where appropriate. The hashes that are automatically added will be
-automatically stripped by `avram' on behalf of whatever application
-uses the file.
-
-   Any file can be written as a list of character strings, even "text"
-files that are full of unprintable characters, and even "text" files
-that happen to conform to the format used for data files.  However, if
-the application intends to write a data file in the standard format used
-by other virtual code applications, it can do so more quickly and easily
-by having the virtual machine do the formatting automatically with the
-`--choice-of-output' option than by implementing the algorithm in *note
-Concrete Syntax::, from scratch in virtual code.
-
-
-File: avram.info,  Node: Line Maps,  Next: Byte Transducers,  Prev: Loading All of Standard Input at Once,  Up: Filter Mode Interface
-
-2.5.2 Line Maps
----------------
-
-Virtual code applications invoked with the `--line-map' option (with or
-without the `--unparameterized' option) adhere to a very simple
-interface.
-
-   * The argument to the function is a character string, and the result
-     must also be a character string.
-
-   * The function is applied to each line of the standard input file and
-     the result in each case is written to standard output followed by a line
-     break.
-
-   This kind of application may be used on finite or infinite streams,
-provided that the lengths of the lines are finite, but preserves no
-state information from one line to the next.
-
-
-File: avram.info,  Node: Byte Transducers,  Prev: Line Maps,  Up: Filter Mode Interface
-
-2.5.3 Byte Transducers
-----------------------
-
-The interface used when the `--byte-transducer' option is selected allows
-an application to serve as a persistent stream processor suitable for
-finite or infinite streams. The interface can be summarized by the
-following points.
-
-   * When it is first invoked, the function in the virtual code file is
-     applied to an argument of `nil', and is expected to return a pair
-     `(STATE,OUTPUT)'. The STATE format is unconstrained. The OUTPUT
-     must be a character string that will be written to standard
-     output, but it may be the empty string.
-
-   * For each byte read from standard input, `avram' applies the
-     function to the pair `(STATE,CHARACTER)', using the state obtained
-     from previous evaluation, and the character whose code is the
-     byte. The purpose of the STATE field is therefore to provide a way
-     for the application to remember something from one invocation to
-     the next.
-
-   * The function is usually expected to return a pair `(STATE,OUTPUT)'
-     for each input byte, so that the state can be used on the next
-     iteration, and the output can be written to standard output as a
-     character string.
-
-   * If the function ever returns a value of `nil', the computation
-     terminates.
-
-   * If standard input comes to an end before the computation
-     terminates, the function will be applied to a pair of the form
-     `(STATE,nil)' thereafter, but may continue to return
-     `(STATE,OUTPUT)' pairs for arbitrarily many more iterations.  The
-     `EOF' character is not explicitly passed to the function, but the
-     end is detectable insofar as `nil' is not a representation for any
-     character.
-
-   Unlike the situation with line maps, the output character strings do
-not have line breaks automatically appended, and the application must
-include them explicitly if required. The convention for line breaks is
-system dependent. On Unix and GNU/Linux systems, character code 10
-indicates a line break, but other systems may use character code 13
-followed by character code 10. See *note Character Table:: for the representations
-of characters having these codes.
-
-
-File: avram.info,  Node: Parameter Mode Interface,  Next: Virtual Code Semantics,  Prev: Filter Mode Interface,  Up: Virtual Machine Specification
-
-2.6 Parameter Mode Interface
-============================
-
-The virtual code file for a parameter mode application contains a tree
-representing a single function, which takes as its argument a data
-structure in the format described below. The format of the result
-returned by the function depends on the virtual machine options used on
-the command line, and the various alternatives are explained
-subsequently.
-
-* Menu:
-
-* Input Data Structure::
-* Input for Mapped Applications::
-* Output From Non-interactive Applications::
-* Output From Interactive Applications::
-
-
-File: avram.info,  Node: Input Data Structure,  Next: Input for Mapped Applications,  Prev: Parameter Mode Interface,  Up: Parameter Mode Interface
-
-2.6.1 Input Data Structure
---------------------------
-
-The data structure that is used as the argument to the parameter mode
-application incorporates all the information about the command line and the
-environment variables. It is in the form of a triple
-`((FILES,OPTIONS),ENVIRONS)'. The fields have these interpretations.
-
-FILES
-     is a list of quadruples `((DATE,PATH),(PREAMBLE,CONTENTS))', with
-     one quadruple for each input file named on the command line (but
-     not the virtual code file or the `avram' executable).  The list
-     will be in the same order as the filenames on the command line,
-     and is not affected by options interspersed with them. The fields
-     in each item have the following interpretations.
-
-    DATE
-          is the time stamp of the file in as a character string in the
-          usual Unix format, for example, `Fri Jan 19 14:34:44 GMT
-          2001'. If the file corresponds to standard input, the current
-          system time and date are used.
-
-    PATH
-          is the full path of the file, expressed as a list of strings.
-          If the file corresponds to standard input, the list is empty.
-          Otherwise, the first string in the list is the file name. The
-          next is the name of the file's parent directory, if any. The
-          next is the parent of the parent, and so on. The root
-          directory is indicated by the empty string, so that any path
-          ending with the empty string is an absolute path, while any
-          path ending with a non-empty string is relative to the
-          current working directory.  Path separators (i.e., slashes)
-          are omitted.
-
-    PREAMBLE
-          In the case of a text file, or any file not conforming to the
-          format in *note File Format::, this field is `nil'.
-          Otherwise, this field contains the preamble of the file
-          expressed as a list of strings, or contains just the empty
-          string if the file has no preamble. Any leading hashes in the
-          preamble of the file are stripped.
-
-    CONTENTS
-          In the case of a text file (as indicated by the PREAMBLE
-          field), this field will contain a list of character strings,
-          with each line of the file contained in a character string.
-          Otherwise, it can contain data in any format, which are
-          obtained by converting the data section of the file to a tree.
-
-OPTIONS
-     is a list of quadruples of the form
-     `((POSITION,LONGFORM),(KEYWORD,PARAMS))' with one quadruple for
-     each option appearing on the command line after the name of the
-     virtual code file.
-
-    POSITION
-          is a natural number indicating the position of the option on
-          the command line. The position numbers of all the options
-          will form an ascending sequence, but not necessarily
-          consecutive nor starting with zero.  The missing numbers in
-          the sequence will correspond to the positions of the file
-          names on the command line, allowing their positions to be
-          inferred by applications for which the position matters.
-
-    LONGFORM
-          is a boolean value which is true if the option starts with
-          two or more dashes but false otherwise.
-
-    KEYWORD
-          is the key word of the option expressed as a character
-          string. For example in the case of a command line option
-          `--foo=bar,baz', the keyword is `foo'. Leading dashes are
-          stripped.
-
-    PARAMS
-          is a list of character strings identifying the parameters for
-          the command line option in question. In the case of an option
-          of the form `--foo=bar,baz', the first character string in
-          the list will be `bar' and the next will be `baz'. The same
-          applies if the option is written `--foo bar,baz' or `--foo
-          =bar,baz'. If there are no parameters associated with the
-          option, the list is empty.
-
-ENVIRONS
-     is a list of pairs of character strings, with one pair in the list
-     for each environment variable. The identifier is the left string
-     in the pair, and the value is the right.  For example, if the
-     environment contains the definition `OSTYPE=linux-gnu', there will
-     be a pair in the list whose left side is the string `OSTYPE' and
-     whose right side is the string `linux-gnu'.
-
-
-File: avram.info,  Node: Input for Mapped Applications,  Next: Output From Non-interactive Applications,  Prev: Input Data Structure,  Up: Parameter Mode Interface
-
-2.6.2 Input for Mapped Applications
------------------------------------
-
-Applications invoked using the `--map-to-each-file' option benefit from
-a slightly different interface than the one described above. As the
-purpose of this option is to save memory by loading only one file at a
-time, the application does not have access to all input files named on
-the command line simultaneously within the same data structure.
-Although the data structure is of the type already described, the FILES
-field is not a list of arbitrary length. Instead, it is a list
-containing exactly one item for an input file. If `-' is used as a
-command line parameter, indicating standard input, then FILES will have
-another item pertaining to standard input. In no event will it have
-other than one or two items.
-
-   The mapped application is expected to work by being applied
-individually to each of any number of separately constructed data
-structures, doing the same in each case as it would if that case were
-the only one. To make that possible, copies of the environment
-variables, the contents of standard input, and the list of application
-specific options are contained in the data structure used for every
-invocation.
-
-   The position numbers in the options are adjusted for each invocation
-to reflect the position of the particular input file associated with it.
-For example, in the following command
-     `avram --map-to-each-file mapster.avm fa.txt --data fb.dat --code fc.o'
-   the function in the virtual code file `mapster.avm' would be applied
-to each of three data structures, corresponding to the commands
-
-     `avram mapster.avm fa.txt --data --code'
-     `avram mapster.avm --data fb.dat --code'
-     `avram mapster.avm --data --code fc.o'
-
-If the relative positions of the options and filenames were important to
-the application, they could be reliably inferred from the position
-numbers. In the first case, they would be 1 and 2, implying that the
-file is in position 0. In the second case they would be 0 and 2,
-implying that the file is in position 1, and in the third case they
-would be 0 and 1, implying that the file is in position 2. (Of course,
-nothing compels an application to concern itself with the positions of
-its parameters, and the alternative might be preferable.)
-
-   For the most part, any application that can operate on one file at a
-time without needing information from any others can be executed more
-economically with the `--map-to-each-file' option and few if any
-changes to the code. The effect will normally be analogous to the above
-example, subject to a few possible differences.
-
-   * If an application is supposed to do something by default when
-     there are no file parameters or only standard input, it won't work
-     as a mapped application, because if there are no file parameters
-     it won't be executed at all.
-
-   * If a mapped application causes any output files to be generated,
-     they may be written before other input files are read, possibly
-     causing the input files to be overwritten if they have the same
-     names, and causing subsequent invocations to use the overwritten
-     versions. This behavior differs from that of loading all input
-     files at the outset, which ensures the application seeing all of
-     the original versions. The latter may be more convenient for
-     maintaining a group of files in some sort of consistent state.
-
-   * If an application causes standard output to be written along with
-     output files, normally standard output is written last as a
-     security measure against malicious code altering the
-     `--ask-to-overwrite' prompts by subtly clobbering the console. In
-     a mapped application, standard output isn't always last because
-     there may be more invocations to come.
-
-
-File: avram.info,  Node: Output From Non-interactive Applications,  Next: Output From Interactive Applications,  Prev: Input for Mapped Applications,  Up: Parameter Mode Interface
-
-2.6.3 Output From Non-interactive Applications
-----------------------------------------------
-
-If a parameter mode application is not invoked with either of the
-`--interactive' or `--step' options, then it is deemed to be
-non-interactive, and therefore does not concern itself with executing
-shell commands. Instead, it simply specifies a list of output files to
-be created or updated on its behalf by `avram'.
-
-   The files are described by a list of quadruples
-`((OVERWRITE,PATH),(PREAMBLE,CONTENTS))', with one quadruple for each
-file.
-
-   In each quadruple, the PATH, PREAMBLE, and CONTENTS fields have the
-same interpretations as in the list of files in the input data
-structure described in *note Input Data Structure::, except that a
-`nil' path refers to standard output rather than to standard input.
-
-   The OVERWRITE field in each quadruple tells whether the file should
-be overwritten or appended. If the OVERWRITE field is `nil' (i.e., the
-representation for the Boolean value of `false') and a file already
-exists at the given path, the new contents will be appended to it.  If
-the OVERWRITE field is anything other than `nil' and/or no file exists
-with the given path, a new file is written or the extant one is
-overwritten. Note that the data file format specified in *note File
-Format:: precludes appending anything to it, but the format of existing
-output files is not checked and nothing prevents data or text from
-being appended to one.
-
-
-File: avram.info,  Node: Output From Interactive Applications,  Prev: Output From Non-interactive Applications,  Up: Parameter Mode Interface
-
-2.6.4 Output From Interactive Applications
-------------------------------------------
-
-Parameter mode applications invoked with either of the `--interactive'
-or `--step' options are required to take the data structure described
-in *note Input Data Structure:: as an argument but to return the
-virtual code for a function that will observe a certain protocol
-allowing shell commands to be executed on its behalf. The intent is
-that the virtual code file doesn't contain the real application _per
-se_, but only something that builds the real one on the fly using
-configuration information from the input files and command line options.
-
-   The format of the result returned by an interactive application,
-being a virtual code application itself, requires a full exposition of
-the virtual machine code semantics. This subject is deferred to *note
-Virtual Code Semantics::.  The remainder of this section describes the
-protocol followed by the function returned by the interactive
-application rather than the application itself.
-
-   Similarly to the case of a byte transducer described in *note Byte
-Transducers::, the basic pattern of interaction between `avram' and the
-function is a cycle of invocations. In general terms, the function is
-applied to a `nil' argument initially, and expected to return an
-initial state and initial output. Thereafter, the function is applied
-to a pair of the state returned on the previous iteration, and the next
-installment of input. The function returns further output and a new
-state, and the cycle continues until the function returns a value of
-`nil', at which time the computation terminates.
-
-* Menu:
-
-* Line Oriented Interaction::
-* Character Oriented Interaction::
-* Mixed Modes of Interaction::
-
-
-File: avram.info,  Node: Line Oriented Interaction,  Next: Character Oriented Interaction,  Prev: Output From Interactive Applications,  Up: Output From Interactive Applications
-
-2.6.4.1 Line Oriented Interaction
-.................................
-
-Within this general pattern, more specific styles of interaction are
-possible. In the simplest one to explain first, the result returned by
-the function is always a data structure of the form `(STATE,(COMMAND
-LINES,PROMPTS))', wherein the fields have these interpretations.
-
-STATE
-     is a tree incorporating any data in any format that the application
-     needs to remember from one invocation to the next.
-
-COMMAND LINES
-     is a list of character strings that are piped to the standard input
-     stream of a separately spawned process. The process may persist
-     from one invocation of the function to the next, or may be spawned
-     each time.
-
-PROMPTS
-     is a non-empty list of character strings containing a suffix of
-     the text expected from the standard output stream of the process
-     as a result of sending the command lines to it.
-
-   On each iteration, `avram' sends the command line character strings to
-a separately spawned process, with line breaks between them if there
-are more than one command. If a process remains from the previous
-iteration that has not terminated itself, the list of command lines is
-sent to the same process. If no such process already exists, the first
-string in the list of command lines is treated as a shell command and
-used to spawn the process (using the `exp_popen' library function), and
-the remaining strings are sent to the newly spawned process.
-
-   Normally processes spawned with commands that invoke interactive
-command line interpreters of their own, such as `bash', `ftp' or `bc',
-will persist indefinitely unless the command causing them to exit is
-issued or some other event kills them. Processes spawned with
-non-interactive commands, such as `ls' or `pwd', will terminate when
-the last of their initial output has been received.
-
-   In the case of processes that persist after being spawned, `avram'
-needs some way of knowing when to stop waiting for more output from them
-so that it doesn't get stuck waiting forever. This purpose is served by
-the PROMPTS field. This field could contain a single string holding the
-last thing the process will send before becoming quiescent, such as the
-strings `bash$ ' or `ftp> ' in the above examples. Alternatively, a
-sequence of more than one prompt string can be used to indicate that
-the corresponding sequence of lines must be detected. An empty string
-followed by `ftp> ' would indicate that the `ftp> ' prompt is expected
-to be immediately preceded by a line break. There is also the option of
-using prompt strings to indicate a pattern that does not necessarily
-imply quiescence, but is a more convenient point at which to stop
-reading the output from the process.
-
-   For processes spawned with commands that do not start their own
-interactive command line interpreters, such as `ls' or `pwd', it may be
-preferable to read all the output from them until they terminate. To
-achieve this effect, the list of prompt strings should contain only the
-single string containing only the single `EOF' character (usually code
-4) or any other character that is certain not to occur in the output of
-the process. This technique is based on the assumption that the process
-was spawned originally with the command in question, not that such a
-command is sent to an existing shell process.
-
-   In any case, when enough output has been received from the process,
-it is collected into a list of received strings including the prompt
-strings at the end (if they were received), and the function is applied
-to the pair `(STATE,RECEIVED STRINGS)'. If the cycle is to continue,
-the result returned by the function will include a new state, a new
-list of command lines, and a new list of prompt strings. A result of
-`nil' will cause the computation to terminate.
-
-   There are some unusual situations that could occur in the course of
-line oriented interaction, and are summarized as follows.
-
-   * If the process terminates before any pattern matching the prompt
-     strings is received from it, all of the output from the process up
-     to the point where it terminated is collected into the RECEIVED
-     STRINGS list and passed to the function. This situation includes
-     cases where the process terminates immediately upon being spawned,
-     but not abnormal completion of the `exp_popen' library function,
-     which is a fatal error. This feature of the interface is what
-     allows `EOF' to be used for collecting all the output at once from
-     a non-interactive command.
-
-   * If the list of COMMAND LINES is empty, and no process currently
-     exists due to a previous iteration, the effect is the same as if
-     the process terminates unexpectedly before outputting anything.
-     I.e., the function is applied to a pair containing an empty list
-     of received strings. There is no good reason for an application to
-     get into this situation.
-
-   * If the list of COMMAND LINES is empty but a process persists from
-     a previous iteration, no output is sent to it, but receiving from
-     it proceeds normally. This feature of the interface could be used
-     effectively by applications intended to process the received data
-     in parts, but will cause deadlock if the process is already
-     quiescent.
-
-   * All character strings have to consist of lists of valid
-     representations of non-null characters according to *note
-     Character Table::, or else there will be some fatal error messages.
-
-   * If the list of PROMPT STRINGS contains only the empty string,
-     `avram' will not wait to receive anything from the process, but
-     will proceed with the next iteration immediately. If this effect is
-     intended, care must be taken not to confuse the empty list of
-     PROMPT STRINGS with the list containing the empty string. The
-     former indicates character oriented interaction, which is
-     explained next.
-
-
-File: avram.info,  Node: Character Oriented Interaction,  Next: Mixed Modes of Interaction,  Prev: Line Oriented Interaction,  Up: Output From Interactive Applications
-
-2.6.4.2 Character Oriented Interaction
-......................................
-
-A character oriented style of interaction involves the function always
-returning a data structure of the form `(STATE,(COMMAND LINES,nil))'.
-The STATE and COMMAND LINES fields serve exactly the same purposes
-respectively as they do in the case of line oriented interaction. The
-field that would be occupied by the PROMPT STRINGS list in the case of
-line oriented interaction is identically `nil' in this style.
-
-   When this style is used, `avram' spawns a process and/or sends command
-lines to it as in the case of line oriented interaction, but attempts
-to read only a single character from it per iteration. When the
-character is received, `avram' applies the function to the pair
-`(STATE,CHARACTER)' in order to obtain the next state and the next list
-of command lines. If the process has terminated, a `nil' value is used
-in place of the character. If the process is quiescent, deadlock ensues.
-
-   The character oriented style is a lower level protocol that shifts
-more of the burden of analyzing the process's output to the virtual code
-application. It can do anything line oriented interaction can do except
-proceeding immediately without waiting to receive any output from the
-process. It may also allow more general criteria (in effect) than the
-matching of a fixed prompt string to delimit the received data, for
-those pathological processes that may require such things.
-
-   Applications using character oriented interaction need to deal with
-line breaks explicitly among the received characters, unlike the case
-with line oriented interaction, where the line breaks are implicit in
-the list of received strings. Contrary to the convention for Unix text
-files, line breaks in the output of a process are indicated by character
-code 13 followed by character code 10.
-
-
-File: avram.info,  Node: Mixed Modes of Interaction,  Prev: Character Oriented Interaction,  Up: Output From Interactive Applications
-
-2.6.4.3 Mixed Modes of Interaction
-..................................
-
-An application is not confined exclusively to line oriented or character
-oriented interaction, but may switch from one style to the other between
-iterations, and signal its choice simply by the format of the data
-structure it returns. If the PROMPT STRINGS field is non-empty, the
-interaction is line oriented, and if the field is empty, the
-interaction is character oriented. A function using both styles has to
-be prepared for whichever type of data it indicates, either a character
-or a list of character strings as the case may be.
-
-   Another alternative is possible if the function returns a data
-structure in the form `(FILES,nil)'. This structure includes neither a
-list of command lines nor a list of prompt strings, empty or otherwise,
-but does include a list of quadruples in the FILES field. The
-quadruples are of the form `((OVERWRITE,PATH),(PREAMBLE,CONTENTS))'.
-The fields have the same interpretations as in the output from a
-non-interactive parameter mode application, as described in *note
-Output From Non-interactive Applications::, and will cause a list of
-files to be written in the same way.
-
-   As an interactive application is able cause the execution of
-arbitrary shell commands, it doesn't need `avram' to write files for it
-the way a non-interactive application does, so this feature does not
-provide any additional capabilities. However, it may be helpful as a
-matter of convenience.
-
-   After the files are written, the function will be applied to the same
-result it returned, `(FILES,nil)'. There is no direct means of
-preserving unconstrained state information from previous iterations in
-this style of interaction. A likely scenario might therefore be that
-the function returns a file list after finishing its other business, and
-then returns `nil' on the next iteration to terminate.
-
-
-File: avram.info,  Node: Virtual Code Semantics,  Prev: Parameter Mode Interface,  Up: Virtual Machine Specification
-
-2.7 Virtual Code Semantics
-==========================
-
-As the previous sections explain, virtual code applications are defined
-in terms of mathematical functions. Up until this point, the discussion
-has focused on the interface between the function and the virtual
-machine interpreter, by detailing the arguments passed to the functions
-under various circumstances and the results they are expected to return
-in order to achieve various effects.
-
-   The purpose of this section is to complete the picture by explaining
-how a given computable function can be expressed in virtual code,
-considering only functions operating on the trees described in *note
-Raw Material::.  Functions manipulating trees of `nil' are undoubtedly
-a frivolous and abstract subject in themselves. One is obliged to refer
-back to the previous sections if in need of motivation.
-
-* Menu:
-
-* A New Operator::
-* On Equality::
-* A Minimal Set of Properties::
-* A Simple Lisp Like Language::
-* How `avram' Thinks::
-* Variable Freedom::
-* Metrics and Maintenance::
-* Deconstruction::
-* Recursion::
-* Assignment::
-* Predicates::
-* Iteration::
-* List Combinators::
-* List Functions::
-* Exception Handling::
-* Interfaces to External Code::
-* Vacant Address Space::
-
-
-File: avram.info,  Node: A New Operator,  Next: On Equality,  Prev: Virtual Code Semantics,  Up: Virtual Code Semantics
-
-2.7.1 A New Operator
---------------------
-
-With regard to a set of trees as described in *note Raw Material::, we
-can define a new binary operator. Unlike the `cons' operator, this one
-is not required to associate an element of the set with every possible
-pair of elements. For very many pairs of operands we will have nothing
-to say about its result. In fact, we require nothing of it beyond a few
-simple properties to be described presently.
-
-   Because this is the only other operator than `cons', there is no need
-to have a special notation for it, so it will be denoted by empty
-space. The tree associated by the operator with a pair of trees `X' and
-`Y', if any, will be expressed in the infix notation `X Y'. For
-convenience, the operator is regarded as being right associative, so
-that `A B C' can be written for `A (B C)'.
-
-
-File: avram.info,  Node: On Equality,  Next: A Minimal Set of Properties,  Prev: A New Operator,  Up: Virtual Code Semantics
-
-2.7.2 On Equality
------------------
-
-One example of a property this operator should have, for reasons that
-will not be immediately clear, is that for any trees `X' and `K', the
-equality `cons(cons(nil,`K),nil) X' = `K'' always holds.  Even though
-the present exposition opts for readability over formality, statements
-like these demand clarification of the notion of equality. Some of the
-more pedantic points in *note Raw Material:: may be needed for the
-following ideas to hold water.
-
-   * As originally stipulated, it is always possible to distinguish
-     `nil' from any member of the set. We can therefore decide on this
-     basis whether `A = B' whenever at least one of them is `nil'.
-
-   * Where neither `A' nor `B' is `nil' in an expression `A = B', but
-     rather something of the form `cons(X,Y)', the equality holds if
-     and only if both pairs of corresponding subexpressions are equal.
-     If at least one member of each pair of corresponding
-     subexpressions is `nil', the question is settled, but otherwise
-     there is recourse to their respective subexpressions, and so on.
-     This condition follows from the uniqueness property of the `cons'
-     operator.
-
-   * If one side of an equality is of the form `X Y', or is defined in
-     terms of such an expression, but `(X,Y)' is one of those pairs
-     with which the operator associates no result, then the equality
-     holds if and only if the other side is similarly ill defined.
-
-   * Statements involving universal quantification (i.e., beginning
-     with words similar to "for any tree `X' ...")  obviously do not
-     apply to instances of a variable (`X') outside the indicated set
-     (trees). Hence, they are not refuted by any consequence of
-     identifying a variable with an undefined expression.
-
-   Readers who are aware of such issues as pointer equality or
-intensional versus extensional equality of functions are urged to
-forget all about them in the context of this document, and abide only
-by what is stated. Other readers should ignore this paragraph.
-
-
-File: avram.info,  Node: A Minimal Set of Properties,  Next: A Simple Lisp Like Language,  Prev: On Equality,  Up: Virtual Code Semantics
-
-2.7.3 A Minimal Set of Properties
----------------------------------
-
-For any trees `X', `Y', and `K', and any non-`nil' trees `P', `F', and
-`G', the new invisible operator satisfies these conditions. In these
-expressions and hereafter, increasing abuse of notation is perpetrated
-by not writing the `cons' in expressions of the form `cons(X,Y)'.
-
-_P0_
-     `(nil,(nil,nil)) X' = `X'
-
-_P1_
-     `(nil,((nil,nil),nil)) (X,Y)' = `X'
-
-_P2_
-     `(nil,(nil,(nil,nil))) (X,Y)' = `Y'
-
-_P3_
-     `((nil,K),nil) X' = `K'
-
-_P4_
-     `(((nil,(nil,nil)),nil),nil) (F,X)' = `F (F,X)'
-
-_P5_
-     `((F,G),nil) X' = `F G X'
-
-_P6_
-     `((F,nil),G) X' = `(F X,G X)'
-
-_P7_
-     `((P,F),G) X' = `F X' if `P X'  is a non-`nil' tree, but `G X' if
-     `P X' = `nil'
-
-   Although other properties remain to be described, it is worth
-pausing at this point because there is ample food for thought in the
-ones already given. An obvious question would be that of their origin.
-The short answer is that they have been chosen arbitrarily to be true by
-definition of the operator. At best, the completion of the construction
-may lead to a more satisfactory answer based on aesthetic or engineering
-grounds.
-
-   A more important question would be that of the relevance of the
-mystery operator and its properties to the stated purpose of this
-section, which is to specify the virtual machine code semantics. The
-answer lies in that the operator induces a function for any given tree
-`T', such that the value returned by the function when given an argument
-X is `T X'. This function is the one that is implemented by the virtual
-code T, which is to say the way an application will behave if we put T
-in its virtual code file. An equivalent way of looking at the situation
-is that the virtual machine does nothing but compute the result of this
-operator, taking the tree in the virtual code file as its left operand
-and the input data as the right operand. By knowing what the operator
-will do with a given pair of operands, we know what to put into the
-virtual code file to get the function we want.
-
-   It is worthwhile to note that properties _P0_ to _P7_ are sufficient
-for universality in the sense of Turing equivalence. That means that
-any computable function could be implemented by the suitable choice of
-a tree T without recourse to any other properties of the operator. A
-compiler writer who finds this material boring could therefore stop
-reading at this point and carry out the task of targeting any general
-purpose programming language to the virtual machine based on the
-specifications already given. However, such an implementation would not
-take advantage of the features for list processing, exception handling,
-or profiling that are also built into the virtual machine and have yet
-to be described.
-
-
-File: avram.info,  Node: A Simple Lisp Like Language,  Next: How `avram' Thinks,  Prev: A Minimal Set of Properties,  Up: Virtual Code Semantics
-
-2.7.4 A Simple Lisp Like Language
----------------------------------
-
-With a universal computational model already at our disposal, it will be
-easier to use the virtual machine to specify itself than to define all
-of it from scratch. For this purpose, we use the `silly' programming
-language, whose name is an acronym for SImple Lisp-like Language (Yeah
-right). The language serves essentially as a thin layer of symbolic
-names on top of the virtual machine code. Due to its poor support for
-modularity and abstraction, `silly' is not recommended for serious
-application development, but at least it has a shallow learning
-curve.(1)
-
-* Menu:
-
-* Syntax::
-* Semantics::
-* Standard Library::
-
-   ---------- Footnotes ----------
-
-   (1) Previous releases of `avram' included a working `silly'
-compiler, but this has now been superseded by the Ursala programming
-language. Ursala includes `silly' as a subset for the most part, and
-the examples in this manual should compile and execute with very little
-modification.
-
-
-File: avram.info,  Node: Syntax,  Next: Semantics,  Prev: A Simple Lisp Like Language,  Up: A Simple Lisp Like Language
-
-2.7.4.1 Syntax
-..............
-
-`silly' has no reserved words, but it has equals signs, commas and
-parentheses built in. A concise but ambiguous grammar for it can be
-given as follows.  
-
-     PROGRAM ::= DECLARATION*
-
-     DECLARATION ::= IDENTIFIER `=' EXPRESSION
-
-     EXPRESSION ::= () | IDENTIFIER
-                         | (EXPRESSION)
-                         | (EXPRESSION,EXPRESSION)
-                         | EXPRESSION EXPRESSION
-                         | EXPRESSION(EXPRESSION)
-                         | EXPRESSION(EXPRESSION,EXPRESSION)
-   The real grammar is consistent with this one but enforces right
-associativity for binary operations and higher precedence for
-juxtaposition without intervening white space.
-
-   The declaration of any identifier must be unique and must precede its
-occurrence in any expression. Hence, cyclic dependences between
-declarations and "recursive" declarations are not allowed.
-
-
-File: avram.info,  Node: Semantics,  Next: Standard Library,  Prev: Syntax,  Up: A Simple Lisp Like Language
-
-2.7.4.2 Semantics
-.................
-
-Declarations in `silly' should be understood in the obvious way as
-preprocessor directives to perform parenthetic textual substitutions
-(similar to `#define id (exp)' in C). All identifiers in expressions
-are thereby eliminated during the preprocessing phase.
-
-   The overall meaning of the program is the meaning of the expression
-in the last declaration.  A denotational semantics for expressions is
-given by the following equations, where [[`X']] should be read as "the
-meaning of `X'", and `X', `Y' and `Z' are metavariables. (That is, they
-stand for any source code fragment that could fit there subject to the
-constraint, informally speaking, that it has to correspond to a
-connected subtree of the parse tree as enforced by the unambiguous
-grammar in the context of the rest of the program.)
-
-
-     [[`()']] = `nil'
-
-     [[`(X)']] = [[`X']]
-
-     [[`(X,Y)']] = `cons('[[`X']]`,'[[`Y']]`)'
-
-     [[`X Y']] = [[`X(Y)']] = [[`X']] [[`Y']]
-
-     [[`X (Y,Z)']] = [[`X(Y,Z)']] = [[`X']] [[`(Y,Z)']]
-
-Toy languages like this are among the few situations a denotational
-semantics stands a chance of clarifying more than it obfuscates, so the
-reader is invited to take a moment to savor it.
-
-
-File: avram.info,  Node: Standard Library,  Prev: Semantics,  Up: A Simple Lisp Like Language
-
-2.7.4.3 Standard Library
-........................
-
-`silly' programs may be linked with library modules, which consist of
-`silly' source text to be concatenated with the user program prior to
-the preprocessing phase. Most `silly' programs are linked with the
-standard `silly' prelude, which contains the following declarations
-among others.  
-
-
-     nil           = ()
-     identity      = (nil,(nil,nil))
-     left          = (nil,((nil,nil),nil))
-     right         = (nil,(nil,(nil,nil)))
-     meta          = (((nil,(nil,nil)),nil),nil)
-     constant_nil  = ((nil,nil),nil)
-     couple        = ((((left,nil),constant_nil),nil),right)
-     compose       = couple(identity,constant_nil)
-     constant      = couple(couple(constant_nil,identity),constant_nil)
-     conditional   =
-        couple(couple(left,compose(left,right)),compose(right,right))
-
-   There is a close correspondence between these declarations and the
-properties described in *note A Minimal Set of Properties::. A fitting
-analogy would be that the properties of the operator specify the
-virtual machine instruction set in a language independent way, and the
-`silly' library defines the instruction mnemonics for a virtual
-assembly language. The relationship of some mnemonics to their
-corresponding instructions may be less clear than that of others, so
-they are all discussed next.
-
-
-File: avram.info,  Node: How `avram' Thinks,  Next: Variable Freedom,  Prev: A Simple Lisp Like Language,  Up: Virtual Code Semantics
-
-2.7.5 How `avram' Thinks
-------------------------
-
-The definitions in the standard `silly' library pertaining to the basic
-properties of the operator can provide a good intuitive illustration of
-how computations are performed by `avram'.  This task is approached in
-the guise of a few trivial correctness proofs about them. Conveniently,
-as an infeasibly small language, `silly' is an ideal candidate for
-analysis by formal methods.
-
-   Technically the semantic function [[...]] has not been defined on
-identifiers, but we can easily extend it to them by stipulating that the
-meaning of an identifier `X' is the meaning of the program `MAIN = X'
-when linked with a library containing the declaration of `X', where
-`MAIN' is an identifier not appearing elsewhere in the library.
-
-   With this idea in mind, the following "theorems" can be stated, all
-of which have a similar proof. The variables X and Y stand for any
-tree, and the variable F stands for any tree other than `nil'.
-
-_T0_
-     [[`identity']] `X' = `X'
-
-_T1_
-     [[`left']] `(X,Y)' = `X'
-
-_T2_
-     [[`right']] `(X,Y)' = `Y'
-
-_T4_
-     [[`meta']] `(F,X)' = `F (F,X)'
-
-_T5_
-     [[`constant_nil']] `X' = `nil'
-
-Replacing each identifier with its defining expression directly
-demonstrates a logical equivalence between the relevant theorem and one
-of the basic operator properties postulated in *note A Minimal Set of
-Properties::.
-
-   For more of a challenge, it is possible to prove the next theorem.
-
-_T6_
-     For non-`nil' `F' and `G', ([[`couple']] `(F,G)') `X' = `(F X,G X)'
-
-The proof is a routine calculation. Beware of the distinction between
-the mathematical `nil' and the `silly' identifier `nil'.
-
-   ([[`couple']] `(F,G)') `X'
-      = ([[`((((left,nil),constant_nil),nil),right)']] `(F,G)') `X'
-
-by substitution of `couple' with its definition in the standard library
-
-   = (
-        `(
-           ((('[[`left']]`,'[[`nil']]`),'[[`constant_nil']]`),'[[`nil']])`,'
-           [[`right']]`)'
-        `(F,G)')
-     `X'
-
-by definition of the semantic function [[...]] regarding pairs
-
-   = (
-        `(
-           ((('[[`left']]`,'[[`()']]`),'[[`constant_nil']]`),'[[`()']])`,'
-           [[`right']]`)'
-        `(F,G)')
-     `X'
-
-by substitution of `nil' from its definition in the standard library
-
-   = (
-        `(
-           ((('[[`left']]`,'[[`nil']]`),'[[`constant_nil']]`),'[[`nil']])`,'
-           [[`right']]`)'
-        `(F,G)')
-     `X'
-
-by definition of the semantic function in the case of [[`()']]
-
-   = (
-        `('
-           [[`left']] `(F,G),'[[`constant_nil']] `(F,G)),'
-           [[`right']] `(F,G)')
-     `X'
-
-by property _P6_ (twice)
-
-   = `((F,nil),G) X'
-
-by theorems _T1_, _T2_, and _T5_
-
-   = `(F X,G X)'
-
-by property _P6_ again.
-
-   Something to observe about this proof is that it might just as well
-have been done automatically. Every step is either the substitution of
-an identifier or a pattern match against existing theorems and
-properties of the operator. Another thing to note is that the use of
-identifiers and previously established theorems helps to make the proof
-human readable, but is not a logical necessity. An equivalent proof
-could have been expressed entirely in terms of the properties of the
-operator. If one envisions a proof like this being performed blindly and
-mechanically, without the running commentary or other amenities, that
-would not be a bad way of thinking about what takes place when `avram'
-executes virtual code.
-
-   Three more theorems have similar proofs. For non-`nil' trees `P',
-`F' and `G', and any trees `X' and `K': 
-
-_T7_
-     ([[`compose']] `(F,G)') X = F G X
-
-_T8_
-     ([[`constant']] `K') X = K
-
-_T9_
-     ([[`conditional']] `(P,(F,G)') X = `F X' if `P X'  is non-`nil',
-     but `G X' if `P X' = `nil'
-
-The proofs of these theorems are routine calculations analogous to the
-proof of _T6_. Here is a proof of theorem _T7_ for good measure.
-
-   ([[`compose']] `(F,G)') `X'
-      = ([[`couple(identity,constant_nil)']] `(F,G)') `X'
-
-   by substitution of `compose' with its definition in the standard
-library
-
-   = (`('[[`couple']] `('[[`identity']]`,'[[`constant_nil']]`))(F,G)') `X'
-
-by definition of the semantic function
-
-   = `('[[`identity']] `(F,G),'[[`constant_nil']]` (F,G)) X'
-
-by theorem _T6_
-
-   = `((F,G),nil) X'
-
-by theorems _T0_ and _T5_
-
-   = `F G X'
-
-by property _P5_ of the operator.
-
-
-File: avram.info,  Node: Variable Freedom,  Next: Metrics and Maintenance,  Prev: How `avram' Thinks,  Up: Virtual Code Semantics
-
-2.7.6 Variable Freedom
-----------------------
-
-The virtual code semantics is easier to specify using the `silly'
-language than it would be without it, but still awkward in some cases.
-An example is the following declaration from the standard library, 
-
-     hired = compose(
-        compose,
-        couple(
-           constant compose,
-           compose(couple,couple(constant,constant couple))))
-
-which is constructed in such a way as to imply the following theorem,
-provable by routine computation.
-
-_T9_
-     `('[[`hired']] `H) (F,G)' = [[`compose']]`(H,'[[`couple']]`(F,G))'
-
-Intuitively, `hired' represents a function that takes a given function
-to a higher order function. For example, if `f' were a function that
-adds two real numbers, `hired f' would be a function that takes two
-real valued functions to their pointwise sum.
-
-   Apart from its cleverness, such an opaque way of defining a function
-has little to recommend it. The statement of the theorem about the
-function is more readable than the function definition itself, probably
-because the theorem liberally employs mathematical variables, whereas
-the `silly' language is variable free. On the other hand, it is not
-worthwhile to linger over further enhancements to the language, such as
-adding variables to it. The solution will be to indicate informally a
-general method of inferring a variable free function definition from an
-expression containing variables, and hereafter omit the more cumbersome
-definitions.
-
-   An algorithm called `isolate' does the job.  The input to `isolate'
-is a pair `(E,X)', where `E' is a syntactically correct `silly'
-expression in which the identifier `X' may occur, but no other
-identifiers dependent on `X' may occur (or else it's
-garbage-in/garbage-out).  Output is a syntactically correct `silly'
-expression `F' in which the identifier `X' does not occur, such that
-[[`E']] = [[`F X']].  The algorithm is as follows,
-
-
-     if `E' = `X' then
-        return `identity'
-     else if `E' is of the form `(U,V)'
-        return `couple(isolate(U,X),isolate(V,X))'
-     else if `E' is of the form `U V'
-        return `(hired apply)(isolate(U,X),isolate(V,X))'
-     else
-        return `constant E'
-
-where equality is by literal comparison of expressions, and the
-definition of `apply' is 
-
-     apply = (hired meta)((hired compose)(left,constant right),right)
-
-which represents a function that does the same thing as the invisible
-operator.
-
-_T10_
-     [[`apply']] `(F,X)' = `F X'
-
-   The `isolate' algorithm can be generalized to functions of
-arbitrarily many variables, but in this document we will need only a
-unary and a binary version. The latter takes an expression `E' and a
-pair of identifiers `(X,Y)' as input, and returns an expression `F'
-such that [[`E']] = [[`F (X,Y)']].
-
-
-     if `E' = `X' then
-        return `left'
-     else if `E' = `Y' then
-        return `right'
-     else if `E' is of the form `(U,V)'
-        return `couple(isolate(U,(X,Y)),isolate(V,(X,Y)))'
-     else if `E' is of the form `U V'
-        return `(hired apply)(isolate(U,(X,Y)),isolate(V,(X,Y)))'
-     else
-        return `constant E'
-
-   It might be noted in passing that something similar to these
-algorithms would be needed in a compiler targeted to `avram' if the
-source were a functional language with variables.
-
-
-File: avram.info,  Node: Metrics and Maintenance,  Next: Deconstruction,  Prev: Variable Freedom,  Up: Virtual Code Semantics
-
-2.7.7 Metrics and Maintenance
------------------------------
-
-Certain features of the virtual machine pertain to software development
-and maintenance more than to implementing any particular function. The
-operations with the mnemonics `version', `note', `profile', and
-`weight' are in this category.
-
-* Menu:
-
-* Version::
-* Note::
-* Profile::
-* Weight::
-
-
-File: avram.info,  Node: Version,  Next: Note,  Prev: Metrics and Maintenance,  Up: Metrics and Maintenance
-
-2.7.7.1 Version
-...............
-
-A virtual code application with exactly the following definition
-implements a function that returns a constant character string
-regardless of its argument.  
-
-     version = ((nil,nil),((nil,nil),(nil,((nil,nil),nil))))
-
-The character string encodes the version number of the installed
-`avram' executable, for example `0.13.0', using the standard
-representation for characters.
-
-   Although such an application is useless by itself, the intended use
-for this feature is to cope with the possibility that future versions of
-`avram' may include enhancements. Ideally, the maintainer of `avram'
-will update the version number when new enhancements are added.
-Applications can then detect whether they are available in the
-installed version by using this feature. If a needed enhancement is not
-available, the application can either make allowances or at least
-terminate gracefully.
-
-
-File: avram.info,  Node: Note,  Next: Profile,  Prev: Version,  Up: Metrics and Maintenance
-
-2.7.7.2 Note
-............
-
-This operation allows arbitrary information or comments to be embedded
-in a virtual code application in such a way that it will be ignored by
-`avram' when executing it. For the `silly' language, a `note' function
-is defined in the standard prelude so as to imply the following theorem.  
-
-_T11_
-     [[`note']] `(F,C)' = `((nil,nil),((nil,nil),(nil,(nil,(F,C)))))'
-
-Intuitively, the argument `F' represents a function, and the argument
-`c' represents the comment, annotation, or whatever, that will be
-embedded but ignored in the virtual code.
-
-   Semantically, a function with a note attached is the same as the
-function by itself, as the following property stipulates for any
-non-`nil' `F'.
-
-_P8_
-     ([[`note']] `(F,C)') `X' = `F X'
-
-   A possible reason for using this feature might be to support a
-language that performs run-time type checking by hanging type tags on everything.
-Another possible use would be to include symbolic information needed by
-a debugger.
-
-
-File: avram.info,  Node: Profile,  Next: Weight,  Prev: Note,  Up: Metrics and Maintenance
-
-2.7.7.3 Profile
-...............
-
-The virtual machine supports a profiling capability by way of this feature.
-Profiling an application causes run time statistics about it to be
-written to a file `./profile.txt'. Profiled applications are of the
-form indicated in the following theorem
-
-_T12_
-     [[`profile']] `(F,S)' = `((nil,nil),((nil,nil),(nil,((F,S),nil))))'
-
-where `F' stands for the virtual code of the application, and `S'
-stands for the name of it to be written to the file.  The semantics of
-a profiled function is identical to the unprofiled form for any
-non-`nil' `F'.
-
-_P9_
-     ([[`profile']] `(F,S)') `X' = `F X'
-
-   Unlike the situation with `note', the annotation `S' of used in
-profiled code is not in an unrestricted format but must be a character
-string in the standard representation (as in *note Representation of
-Numeric and Textual Data::), because this string needs to be written by
-`avram' to the file `./profile.txt'. Ordinarily this string will be the
-source code identifier of the function being profiled.
-
-   When profiles are used in many parts of an application, an
-informative table is generated showing the time spent in each part.
-
-
-File: avram.info,  Node: Weight,  Prev: Profile,  Up: Metrics and Maintenance
-
-2.7.7.4 Weight
-..............
-
-The following virtual code implements a function that returns the weight
-of its argument in the standard representation for natural numbers.  
-
-     weight = ((nil,nil),((nil,nil),(nil,(nil,nil))))
-
-The weight of a tree is zero if the tree is `nil', and otherwise the
-sum of the weights of the two subtrees plus one.
-
-   An algorithm to compute the weight of a tree would be trivial to
-implement without being built in to the virtual machine. The built in
-capability could also be used for purposes unrelated to code
-maintenance. Nevertheless, it is built in for the following reasons.
-
-   * Computing weights happened to be a bottleneck for a particular
-     aspect of code generation that was of interest to the author, namely
-     the compression of generated code.
-
-   * A built in implementation in C runs at least an order of magnitude
-     faster than the equivalent implementation in virtual code.
-
-   * It runs even faster when repeated on the same data, by retrieving
-     previously calculated weights rather than recalculating them.
-
-   The only disadvantage of using this feature instead of implementing a
-function in virtual code to compute weights is that it relies on native integer
-arithmetic and could overflow, causing a fatal error. It has never
-occurred in practice, but is possible due to sharing, whereby the
-nominal weight of a tree could be exponentially larger than the actual
-amount of memory occupied by it.
-
-
-File: avram.info,  Node: Deconstruction,  Next: Recursion,  Prev: Metrics and Maintenance,  Up: Virtual Code Semantics
-
-2.7.8 Deconstruction
---------------------
-
-Much of the time required for evaluating a function is devoted to performing
-deconstruction operations, e.g., taking the left side of a pair, the
-tail of a list, the right side of the head of the tail, etc..  Because
-these operations are so frequent, there are some features of the
-virtual machine to make them as efficient as possible.
-
-* Menu:
-
-* Field::
-* Fan::
-
-
-File: avram.info,  Node: Field,  Next: Fan,  Prev: Deconstruction,  Up: Deconstruction
-
-2.7.8.1 Field
-.............
-
-The virtual machine supports a generalization of the `left' and `right'
-deconstruction operations that is applicable to deeply nested
-structures. Use of this feature is conducive to code that is faster and
-more compact than is possible by relying on the primitive deconstructors
-alone. It may also be easier for a code optimizer to recognize and
-transform.
-
-   The general form of a virtual code application to perform
-deconstruction is that it is a pair with a `nil' left side, and a
-non-`nil' right side. The right side indicates the nature of the
-deconstruction to be performed when the function is evaluated on an
-argument.
-
-   To make the expression of deconstruction functions more readable in
-`silly', the standard library contains the declaration
-
-     field = couple(constant nil,identity)
-
-which implies the following theorem.
-
-_T13_
-     [[`field']] `W' = `(nil,W)'
-
-   The virtual machine recognizes an application in this form and
-evaluates it according to the following properties, where `U' and `V'
-are other than `nil', but `X', `Y', and `Z' are unrestricted.
-
-_P10_
-     ([[`field']] `(U,nil)') `(X,Y)' = ([[`field']] `U') `X'
-
-_P11_
-     ([[`field']] `(nil,V)') `(X,Y)' = ([[`field']] `V') `Y'
-
-_P12_
-     ([[`field']] `(U,`v')') `Z' = `(('[[`field']] `U) Z,('[[`field']]
-     `V) Z)'
-
-One might also add that ([[`field']] `(nil,nil)') `Z' = `Z', but this
-statement would be equivalent to _P0_.
-
-   A suitable choice of the `field' operand permits the implementation
-of any deconstruction function expressible in terms of `compose',
-`couple', `identity', `left' and `right'. For example, the application
-`couple(compose(right,right),left)' has an equivalent representation in
-`field((nil,(nil,(nil,nil))),((nil,nil),nil))'. The latter looks longer
-in `silly' but is smaller and faster in virtual code.
-
-
-File: avram.info,  Node: Fan,  Prev: Field,  Up: Deconstruction
-
-2.7.8.2 Fan
-...........
-
-In cases where a deconstructions would be needed to apply the same
-function to both sides of a pair, the overhead can be avoided by means
-of a property of the virtual machine intended for that purpose.
-
-   A `silly' definition of `fan' implying the following theorem is
-helpful in expressing such an application.
-
-_T14_
-     [[`fan']] `F' = `((nil,nil),((nil,F),(nil,nil)))'
-
-The virtual machine recognizes when an application has the form shown
-above, and uses `F' as a function to be applied to both sides of the
-argument.
-
-_P13_
-     ([[`fan']] `F') `(X,Y)' = `(F X,F Y)'
-
-
-File: avram.info,  Node: Recursion,  Next: Assignment,  Prev: Deconstruction,  Up: Virtual Code Semantics
-
-2.7.9 Recursion
----------------
-
-Defining functions or programs self referentially is sometimes
-informally known as recursion. In functional languages, the clever use of
-"combinators" is often preferred to this practice, and is in fact well
-supported by the virtual machine. However, some computations may be
-inexpressible without an explicitly "recursive" formulation, so there
-is some support for that as well.
-
-* Menu:
-
-* Recur::
-* Refer::
-
-
-File: avram.info,  Node: Recur,  Next: Refer,  Prev: Recursion,  Up: Recursion
-
-2.7.9.1 Recur
-.............
-
-A generalization of the form denoted by `meta' in `silly' is recognized
-by the virtual machine and allows a slightly more efficient encoding of
-recursive applications. An expression `recur P' has the representation
-indicated by this theorem,
-
-_T15_
-     [[`recur']] `P' = `(((nil,P),nil),nil)'
-
-which implies that [[`meta']] = [[`recur']] `(nil,nil)'.
-
-   If `P' is non-`nil', a tree of the form [[`recur']] `P' is
-interpreted as follows. Note that _P4_ is equivalent to the special
-case of this property for which `P' is `(nil,nil)'.
-
-_P14_
-     ([[`recur']] `P') `X' = [[`meta']] ([[`field']] `P') `X'
-
-   The rationale is that `meta' would very frequently be composed with
-a deconstruction `field P', so the virtual machine saves some time and
-space by allowing the two of them to be encoded in a smaller tree with
-the combined meaning.
-
-
-File: avram.info,  Node: Refer,  Prev: Recur,  Up: Recursion
-
-2.7.9.2 Refer
-.............
-
-In the style of recursive programming compelled by the available `meta'
-primitive, a function effectively requires a copy of its own machine
-code as its left argument. Bringing about that state of affairs is an
-interesting party trick.
-
-   If we had a definition of `bu' in the standard library implying
-
-_T16_
-     ([[`bu']] `(F,K)') `X' = `F(K,X)'
-
-which for the sake of concreteness can be done like this,
-
-     bu = (hired compose)(
-             left,
-             (hired couple)(compose(constant,right),constant identity))
-
-then a definition of `refer' as
-
-     refer = (hired bu)(identity,identity)
-
-would be consistent with the following property of the operator.
-
-_P15_
-     ([[`refer']] `F') `X' = `F (F,X)'
-
-The proof, as always, is a matter of routine calculation in the manner
-of the section on how `avram' thinks.
-
-   However, this pattern would occur so frequently in recursively
-defined functions as to be a significant waste of space and time.
-Therefore, rather than requiring it to be defined in terms of other
-operations, the virtual machine specification recognizes a pattern of
-the form below with respect to property _P15_,
-
-_T17_
-     [[`refer']] `F' = `(((F,nil),nil),nil)'
-
-and takes the property to be true by definition of the operator. A
-definition of `refer' consistent with _T17_ is therefore to be found in
-the standard library, not the definition proposed above.
-
-
-File: avram.info,  Node: Assignment,  Next: Predicates,  Prev: Recursion,  Up: Virtual Code Semantics
-
-2.7.10 Assignment
------------------
-
-In an imperative programming paradigm, a machine consists partly of an
-ensemble of addressable storage locations, whose contents are changed
-over time by assignment statements. An assignment statement includes
-some computable function of the global machine state, and the address of
-the location whose contents will be overwritten with the value computed
-from the function when it is evaluated.
-
-   Compiling a language containing assignment statements into virtual
-machine code suitable for `avram' might be facilitated by exploiting
-the following property.
-
-_P16_
-     ([[`assign']] `(P,F)') `X' = [[`replace']] `((P,F X),X)'
-
-The identifier `assign' is used in `silly' to express a virtual code
-fragment having the form shown below, and `replace' corresponds to a
-further operation to be explained presently.  
-
-_T18_
-     [[`assign']] `(P,F)' = `(((P,F),nil),nil)'
-
-   This feature simulates assignment statements in the following way.
-The variable `X' in _P16_ corresponds intuitively to the set of
-addressable locations in the machine. The variable `F' corresponds to
-the function whose value will be stored in the location addressed by
-`P'. The result of a function expressed using `assign' is a new store
-similar to the argument `X', but with the part of it in location `P'
-replaced by `F X'. A source text with a sequence of assignment
-statements could therefore be translated directly into a functional
-composition of trees in this form.
-
-   The way storage locations are modeled in virtual code using this
-feature would be as nested pairs, and the address `P' of a location is
-a tree interpreted similarly to the trees used as operands to the
-`field' operator described in *note Field::, to specify
-deconstructions. In fact, `replace' can be defined as a minimal
-solution to the following equation.  
-
-_E0_
-     ([[`field']] `P') [[`replace']] `((P,Y),X)' = `Y'
-
-   This equation regrettably does not lend itself to inferring the
-`silly' source for `replace' using the `isolate' algorithm in *note
-Variable Freedom::, so an explicit construction is given in *note
-Replace::. This construction need not concern a reader who considers
-the equation a sufficiently precise specification in itself.
-
-   In view of the way addresses for deconstruction are represented as
-trees, it would be entirely correct to infer from this equation that a
-tuple of values computed together can be assigned to a tuple of
-locations. The locations don't even have to be "contiguous", but could
-be anywhere in the tree representing the store, and the function is
-computed from the contents of all of them prior to the update. Hence,
-this simulation of assignment fails to capture the full inconvenience of
-imperative programming except in the special case of a single value
-assigned to a single location, but fortunately this case is the only one
-most languages allow.
-
-   There is another benefit to this feature besides running languages
-with assignment statements in them, which is the support of abstract or
-opaque data structures. A function that takes an abstract data structure
-as an argument and returns something of the same type can be coded in a
-way that is independent of the fields it doesn't use. For example, a
-data structure with three fields having the field identifiers `foo',
-`bar', and `baz' in some source language might be represented as a
-tuple `((FOO CONTENTS,BAR CONTENTS),BAZ CONTENTS)' on the virtual code
-level. Compile time constants like `bar = ((nil,(nil,nil)),nil)' could
-be defined in an effort to hide the details of the representation, so
-that the virtual code `field bar' is used instead of
-`compose(right,left)'.  Using field identifiers appropriately, a
-function that transforms such a structure by operating on the `bar'
-field could have the virtual code `couple(couple(field
-foo,compose(f,field bar)),field baz)'. However, this code does not
-avoid depending on the representation of the data structure, because it
-relies on the assumption of the `foo' field being on the left of the
-left, and the `baz' field being on the right. On the other hand, the
-code `assign(bar,compose(f,field bar))' does the same job without
-depending on anything but the position of the `bar' field. Furthermore,
-if this position were to change relative to the others, the code
-maintenance would be limited to a recompilation.
-
-
-File: avram.info,  Node: Predicates,  Next: Iteration,  Prev: Assignment,  Up: Virtual Code Semantics
-
-2.7.11 Predicates
------------------
-
-A couple of operations are built into the virtual machine for performing
-tests efficiently. These functions return either `nil' for false or
-`(nil,nil)' for true, and are useful for example as a predicate `P' in
-programs of the form `conditional(P,(F,G))' among other things. In this
-example, the predicate is applied to the argument, a result of
-`(nil,nil)' causes `F' to be applied to it, and a result of `nil'
-causes `G' to be applied to it.
-
-* Menu:
-
-* Compare::
-* Member::
-
-
-File: avram.info,  Node: Compare,  Next: Member,  Prev: Predicates,  Up: Predicates
-
-2.7.11.1 Compare
-................
-
-A function that performs comparison has a the following very simple
-virtual code representation.
-
-_T19_
-     [[`compare']] = `(nil,nil)'
-
-The proof of theorem _T19_ is that the standard `silly' prelude
-contains the declaration `compare = (nil,nil)'.  Code in this form has
-the following semantics.
-
-_P17_
-     For distinct trees `X' and `Y', [[`compare']] `(X,Y)' = `nil'
-
-_P18_
-     [[`compare']] `(X,X)' = `(nil,nil)'
-
-In other words, the virtual code `(nil,nil)' implements a function that
-takes a pair of trees and returns true if and only if they are equal.
-
-   It would be fairly simple to write an equivalent virtual code
-application that implements this function if it were not realizable in
-this form by definition of the operator. However, this method is
-preferable because it saves space in virtual code and has a highly
-optimized implementation in C.
-
-
-File: avram.info,  Node: Member,  Prev: Compare,  Up: Predicates
-
-2.7.11.2 Member
-...............
-
-Another built in predicate function has the virtual code shown below.  
-
-_T20_
-     [[`member']] = `((nil,nil),((nil,nil),nil))'
-
-As the mnemonic suggests, the function implemented by this code detects
-whether a given item is a member of a list. The left side of its
-argument is the item to be detected, and the right side is the list that
-may or may not contain it. Lists are represented as explained in *note
-Representation of Numeric and Textual Data::.
-
-   The virtual code semantics can be specified by these three
-properties of the operator.
-
-_P19_
-     [[`member']] `(X,nil)' = `nil'
-
-_P20_
-     [[`member']] `(X,(X,Y))' = `(nil,nil)'
-
-_P21_
-     For distinct trees `X' and `Y', [[`member']] `(X,(Y,Z))' =
-     [[`member']] `(X,`z')'
-
-   As in the case of `compare', the implementation of `member' is well
-optimized in C, so this form is to be preferred over an ad hoc
-construction of a membership testing function in virtual code.
-
-
-File: avram.info,  Node: Iteration,  Next: List Combinators,  Prev: Predicates,  Up: Virtual Code Semantics
-
-2.7.12 Iteration
-----------------
-
-One of many alternatives to recursion provided by the virtual machine is
-iteration, which allows an operation to be repeated until a condition is
-met. If the source language is imperative, this feature provides an easy
-means of translating loop statements to virtual code. In languages that
-allow functions to be treated as data, iteration can be regarded as a
-function that takes a predicate and a function as arguments, and
-returns a function that applies the given function repeatedly to its
-argument until the predicate is refuted.
-
-   Iterative applications are expressed in virtual code by the pattern
-shown below.
-
-_T21_
-     [[`iterate']] `(P,F)' = `((nil,nil),(nil,(P,F)))'
-
-In the `silly' language, the `iterate' mnemonic plays the role of the
-function that takes the virtual code for a predicate `P' and a function
-`F' as arguments, and returns the virtual code for an iterating
-function.
-
-   The code for an iterating function is recognized as such by the
-virtual machine emulator only if the subtrees `F' and `P' are other
-than `nil'. The resulting function tests the argument `X' with `P' and
-returns `X' if the predicate is false.
-
-_P22_
-     ([[`iterate']] `(P,F)') `X' = `X' if `P X' = `nil'
-
-If the predicate turns out to be true, `F' is applied to `X', and then
-another iteration is performed.
-
-_P23_
-     ([[`iterate']] `(P,F)') `X' = ([[`iterate']] `(P,F)') `F X' if `P
-     X' is a non-`nil' tree
-
-
-File: avram.info,  Node: List Combinators,  Next: List Functions,  Prev: Iteration,  Up: Virtual Code Semantics
-
-2.7.13 List Combinators
------------------------
-
-There is extensive support for operations on lists in the virtual code
-format. Use of these features is encouraged because they are conducive
-to tight code with explicit concurrency. Within an imperative
-programming paradigm, these features might perhaps have to be understood
-as design patterns or algorithmic skeletons. The present exposition
-takes a functional view, describing them in terms of operators that take
-functions as their arguments and return functions as their result.
-
-* Menu:
-
-* Map::
-* Filter::
-* Reduce::
-* Sort::
-* Transfer::
-* Mapcur::
-
-
-File: avram.info,  Node: Map,  Next: Filter,  Prev: List Combinators,  Up: List Combinators
-
-2.7.13.1 Map
-............
-
-A virtual code application in the following form causes a function with
-non-`nil' virtual code `F' to be applied to every item in a list.
-
-_T22_
-     [[`map']] `F' = `((nil,nil),((nil,F),nil))'
-
-The `map' mnemonic is used in `silly' to express applications in this
-form as `map F'.  This operation is also well known to lisp users and
-functional programmers.  The semantics is determined by these two
-operator properties (for non-`nil' `F').
-
-_P24_
-     ([[`map']] `F') `nil' = `nil'
-
-_P25_
-     ([[`map']] `F') `(X,Y)' = `(F X,('[[`map']] `F) Y)'
-
-Note that the representation of lists described in *note Representation
-of Numeric and Textual Data::, is assumed.
-
-
-File: avram.info,  Node: Filter,  Next: Reduce,  Prev: Map,  Up: List Combinators
-
-2.7.13.2 Filter
-...............
-
-Another well known list operation is that which applies a predicate to
-every item of a list, and deletes those for which the predicate is
-false. For a predicate with virtual code `P', such an application can
-be coded conveniently in this form,
-
-_T23_
-     [[`filter']] `P' = `((nil,nil),(nil,(P,nil)))'
-
-which is to say that writing `((nil,nil),(nil,(P,nil)))' in `silly' is
-the same as writing `filter P'.
-
-   The virtual machine detects code of this form provided that `P' is
-other than `nil', and evaluates it consistently with the following
-properties, causing it to have the meaning that it does.
-
-_P26_
-     ([[`filter']] `P') `nil' = `nil'
-
-_P27_
-     ([[`filter']] `P') `(X,Y)' = ([[`filter']] `P') `Y' if `P `X'' =
-     `nil'
-
-_P28_
-     ([[`filter']] `P') `(X,Y)' = `(X,'([[`filter']] `P') `Y)' if `P X'
-     is a non-`nil' tree
-
-
-File: avram.info,  Node: Reduce,  Next: Sort,  Prev: Filter,  Up: List Combinators
-
-2.7.13.3 Reduce
-...............
-
-In the virtual code fragment shown below, `F' should be regarded as the
-virtual code for a binary operator, and `K' is a constant.
-
-_T24_
-     [[`reduce']] `(F,K)' = `((nil,nil),((F,K),nil))'
-
-By constructing a tree in the form shown, the `silly' mnemonic `reduce'
-effectively constructs the code for a function operating on lists in a
-particular way.
-
-   The effect of evaluating an application in this form with an argument
-representing a list can be broken down into several cases.
-
-   * If the list is empty, then the value of `K' is the result.
-
-   * If the list has only one item, then that item is the result.
-
-   * if the list has exactly two items, the first being `X' and the
-     second being `Y', then  the result is  `F (X,Y)'.
-
-   * If the list has more than two items and an even number of them, the
-     result is that of evaluating the application with the list of
-     values obtained by partitioning the list into pairs of adjacent
-     items, and evaluating `F' with each pair.
-
-   * If the list has more than two items and an odd number of them, the
-     result is that of evaluating the application with the list of
-     values obtained by partitioning the list into pairs of adjacent
-     items excluding the last one, evaluating `F' with each pair, and
-     then appending the last item to the list of values.
-
-In the last two cases, evaluation of the application is not necessarily
-finished after just one traversal of the list, because it has to carry
-on until the list is reduced to a single item.
-
-   Some care has been taken to describe this operation in detail
-because it differs from comparable operations common to functional
-programming languages, variously known as fold or reduce. All of these
-operations could be used, for example, to compute the summation of a
-list of numbers. The crucial differences are as follows.
-
-   * Whereas a fold or a reduce is conventionally either of the left or
-     right variety, this `reduce' is neither.
-
-   * The vacuous case result `K' is never used at all unless the
-     argument is the empty list.
-
-   * This `reduce' is not very useful if the operator `F' is not
-     associative.
-
-   The reason for defining the semantics of `reduce' in this way
-instead of the normal way is that a distributed implementation of this one
-could work in logarithmic time, so it's worth making it easy for a
-language processor to detect the pattern in case the virtual code is
-ever going to be targeted to such an implementation. Of course, nothing
-prevents the conventional left or right reduction semantics from being
-translated to virtual code by explicit recursion.  
-
-   The precise semantics of this operation are as follows, where `F' is
-not `nil', `K' is unconstrained, and `pairwise' represents a function
-to be explained presently.  
-
-_P29_
-     ([[`reduce']] `(F,K)') `nil' = `K'
-
-_P30_
-     ([[`reduce']] `(F,K)') `(X,Y)' =
-         [[`left']] ([[`bu(iterate,right)']] [[`pairwise']] `F') `(X,Y)'
-
-The latter property leverages off some virtual machine features and
-`silly' code that has been defined already. The function implemented by
-[[`pairwise']] `F' is the one that partitions its argument into pairs
-and evaluates `F' with each pair as described above. The combination of
-that with `bu(iterate,right)' results in an application that repeatedly
-performs [[`pairwise']] `F' while the resulting list still has a tail
-(i.e., a `right' side), and stops when the list has only a single item
-(i.e., when `right' is false). The `left' operation then extracts the
-item.
-
-   For the sake of completeness, it is tedious but straightforward to
-give an exact definition for `pairwise'. The short version is that it
-can be anything that satisfies these three equations.
-
-_E1_
-     ([[`pairwise']] `F') `nil' = `nil'
-
-_E2_
-     ([[`pairwise']] `F') `(X,nil)' = `(X,nil)'
-
-_E3_
-     ([[`pairwise']] `F') `(X,(Y,Z))' = `(F (X,Y),'([[`pairwise']] `F')
-     `Z)'
-
-For the long version, see *note Pairwise::.
-
-
-File: avram.info,  Node: Sort,  Next: Transfer,  Prev: Reduce,  Up: List Combinators
-
-2.7.13.4 Sort
-.............
-
-Sorting is a frequently used operation that has the following standard
-representation in virtual code.
-
-_T25_
-     [[`sort']] `P' = `((nil,nil),((P,nil),(nil,nil)))'
-
-When an application in this form is evaluated with an operand
-representing a list, the result is a sorted version of the list.
-
-   The way a list is sorted depends on what order is of interest. For
-example, numbers could be sorted in ascending or descending order,
-character strings could be sorted lexically or by length, etc.. The
-value of `P' is therefore needed in sorting applications to specify the
-order. It contains the virtual code for a partial order relational
-operator. This operator can be evaluated with any pair of items
-selected from a list, and should have a value of true if the left one
-should precede the right under the ordering. For example, if numbers
-were to be sorted in ascending order, then `P' would compute the "less
-or equal" relation, returning true if its operand were a pair of
-numbers in which the left is less or equal to the right.
-
-   The virtual code semantics for sorting applications is given by these
-two properties, wherein `P' is a non-`nil' tree, and `insert' is a
-`silly' mnemonic to be defined next.  
-
-_P31_
-     ([[`sort']] `P') `nil' = `nil'
-
-_P32_
-     ([[`sort']] `P') `(X,Y)' = ([[`insert']] `P') `(X,'([[`sort']]
-     `P') `Y)'
-
-These properties say that the empty list is already sorted, and a
-non-empty list is sorted if its tail is sorted and the head is then
-inserted in the proper place. This specification of sorting has nothing
-to do with the sorting algorithm that `avram' really uses.
-
-   The meaning of insertion is convenient to specify in virtual code
-itself. It should satisfy these three equations.
-
-_E4_
-     ([[`insert']] `P') `(X,nil)' = `(X,nil)'
-
-_E5_
-     ([[`insert']] `P') `(X,(Y,Z))' = `(Y,'([[`insert']] `P') `(X,Z))'
-     if `P(X,Y)' = `nil'
-
-_E6_
-     ([[`insert']] `P') `(X,(Y,Z)') = `(X,(Y,Z))' if `P(X,Y)' is a
-     non-`nil' tree
-
-Intuitively, the right argument, whether `nil' or `(Y,Z)', represents a
-list that is already sorted. The left argument `X' therefore only needs
-to be compared to the head element, `Y' to ascertain whether or not it
-belongs at the beginning. If not, it should be inserted into the tail.
-
-   A possible implementation of `insert' in `silly' is given in *note
-Insert::.
-
-
-File: avram.info,  Node: Transfer,  Next: Mapcur,  Prev: Sort,  Up: List Combinators
-
-2.7.13.5 Transfer
-.................
-
-A particular interpretation is given to virtual code in the following
-form.
-
-_T26_
-     [[`transfer']] `F' = `((nil,nil),(nil,(nil,F)))'
-
-When code in this form is evaluated with an argument, the tree `F' is
-used as a state transition function, and the argument is used as a list
-to be traversed. The traversal begins with `F' being evaluated on `nil'
-to get the initial state and the initial output. Thereafter, each item
-of the list is paired with the current state to be evaluated with `F',
-resulting in a list of output and the next state. The output resulting
-from the entire application is the cumulative concatenation of all
-outputs obtained in the course of evaluating `F'. The computation
-terminates when `F' yields a `nil' result. If the list of inputs runs
-out before the computation terminates, `nil' values are used as inputs.
-
-   This behavior is specified more precisely in the following property
-of the operator, which applies in the case of non-`nil' `F'.  
-
-_P33_
-     ([[`transfer']] `F') `X' = ([[`transition']] `F') `(nil,(F nil,X))'
-
-   Much of the `transfer' semantics is implicit in the meaning of
-`transition'. For any given application `F', [[`transition']] `F' is
-the virtual code for a function that takes the list traversal from one
-configuration to the next.  A configuration is represented as a tuple,
-usually in the form `(PREVIOUS OUTPUTS,((STATE,OUTPUT),(NEXT
-INPUT,SUBSEQUENT INPUTS)))'. A terminal configuration has the form
-`(PREVIOUS OUTPUTS,(nil,(NEXT INPUT,SUBSEQUENT INPUTS)))'. A
-configuration may also have `nil' in place of the pair `(NEXT
-INPUT,SUBSEQUENT INPUTS)' if no more input remains.
-
-   In the non-degenerate case, the meaning of [[`transition']] `F' is
-consistent with the following equation.
-
-_E7_
-     ([[`transition']] `F') `(Y,((S,O),(I,X)))' =
-         ([[`transition']] `F') `((O,Y),(F (S,I),X))'
-
-That is, the current output `O' is stored with previous outputs `Y',
-the next input `I' is removed from the configuration, and the next
-state and output are obtained from the evaluation of `F' with the state
-`S' and the next input `I'.
-
-   In the case where no input remains, the transition function is
-consistent with the following equation.
-
-_E8_
-     ([[`transition']] `F') `(Y,((S,O),nil))' =
-         ([[`transition']] `F') `((O,Y),(F (S,nil),nil))'
-
-This case is similar to the previous one except that the `nil' value is
-used in place of the next input. Note that in either case, nothing
-about `F' depends on the particular way configurations are represented,
-except that it should have a state as its left argument and an input as
-its right argument.
-
-   Finally, in the case of a terminal configuration, the transition
-function returns the cumulative output.
-
-_E9_
-     ([[`transition']] `F') `(Y,(nil,X))' = [[`reduce(cat,nil)']]
-     [[`reverse']] `Y'
-
-The `silly' code `reduce(cat,nil)' has the effect of flattening a list
-of lists into one long list, which is necessary insofar as the
-transition function will have generated not necessarily a single output
-but a list of outputs on each iteration. The `cat' mnemonic stands for
-list concatenation and is explained in *note Cat::.  The reversal is
-necessary to cause the first generated output to be at the head of the
-list. List reversal is a built in operation of the virtual machine and
-is described in *note Reverse::.
-
-   If such a function as `transition' seems implausible, its
-implementation in `silly' can be found in *note Transition::.
-
-   It is usually more awkward to express a function in terms of a
-`transfer' than to code it directly using recursion or other list
-operations. However, this feature is provided by the virtual machine for
-several reasons.
-
-   * Functions in this form may be an easier translation target if the
-     source is an imperative language.
-
-   * Translating from virtual code to asynchronous circuits or process networks
-     has been a research interest of the author, and code in this form
-     lends itself to easy recognition and mapping onto discrete
-     components.
-
-   * The `--byte-transducer' and `--interactive' command line options
-     to `avram' cause an application to be invoked in a similar manner
-     to the transition function in a `transfer' function, so this
-     feature allows for easy simulation and troubleshooting of these
-     applications without actually deploying them.
-
-
-File: avram.info,  Node: Mapcur,  Prev: Transfer,  Up: List Combinators
-
-2.7.13.6 Mapcur
-...............
-
-An alternative form of recursive definition is the following.  
-
-_T27_
-     [[`mapcur']] `P' = `((nil,nil),((nil,nil),(P,nil)))'
-
-This form is convenient for applications that cause themselves to be applied
-recursively to a list of arguments. It has this semantics.
-
-_P34_
-     ([[`mapcur']] `P') `X' = [[`map meta']] [[`distribute']]
-     ([[`field']] `P') `X'
-
-
-File: avram.info,  Node: List Functions,  Next: Exception Handling,  Prev: List Combinators,  Up: Virtual Code Semantics
-
-2.7.14 List Functions
----------------------
-
-In addition to the foregoing list operations, the virtual machine provides
-a number of canned functions operating on lists, namely concatenation,
-reversal, distribution, and transposition. These functions could be
-coded by other means if they were not built in, but the built in
-versions are faster and smaller.
-
-* Menu:
-
-* Cat::
-* Reverse::
-* Distribute::
-* Transpose::
-
-
-File: avram.info,  Node: Cat,  Next: Reverse,  Prev: List Functions,  Up: List Functions
-
-2.7.14.1 Cat
-............
-
-The list concatenation operation has this representation in virtual
-code.  
-
-_T28_
-     [[`cat']] = `((nil,nil),(nil,nil))'
-
-This function takes a pair of lists as an argument, an returns the list
-obtained by appending the right one to the left. The semantics of
-concatenation is what one would expect.
-
-_P35_
-     [[`cat']] `(nil,Z)' = `Z'
-
-_P36_
-     [[`cat']] `((X,Y),Z)' = `(X,'[[`cat']] `(Y,`z'))'
-
-
-File: avram.info,  Node: Reverse,  Next: Distribute,  Prev: Cat,  Up: List Functions
-
-2.7.14.2 Reverse
-................
-
-The function that reverses a list has the following representation in
-virtual code.
-
-_T29_
-     [[`reverse']] = `((nil,nil),(nil,(nil,nil)))'
-
-This function takes a list as an argument, and returns a the list
-consisting of the same items in the reverse order. The semantics is
-given by the following properties.
-
-_P37_
-     [[`reverse']] `nil' = `nil'
-
-_P38_
-     [[`reverse']] `(X,Y)' = [[`cat']] ([[`reverse']] `Y,(X,nil)')
-
-
-File: avram.info,  Node: Distribute,  Next: Transpose,  Prev: Reverse,  Up: List Functions
-
-2.7.14.3 Distribute
-...................
-
-The function with the following virtual code representation is
-frequently useful for manipulating lists.  
-
-_T30_
-     `distribute' = `(((nil,nil),nil),nil)'
-
-This function takes a pair whose right side represents a list, and
-returns a list of pairs, with one pair for each item in the list. The
-left side of each pair is the left side of the original argument, and
-the right side is the corresponding item of the list. A semantics for
-this operation is specified by the following properties.
-
-_P39_
-     [[`distribute']] `(X,nil)' = `nil'
-
-_P40_
-     [[`distribute']] `(X,(Y,Z))' = `((X,Y),'[[`distribute']] `(X,Z))'
-
-
-File: avram.info,  Node: Transpose,  Prev: Distribute,  Up: List Functions
-
-2.7.14.4 Transpose
-..................
-
-The `transpose' operation has the following representation in virtual
-code.
-
-_T31_
-     [[`transpose']] = `((nil,nil),((nil,nil),(nil,nil)))'
-
-This function takes a list of equal length lists as an argument, and
-returns a list of lists as a result. In the resulting list, the first
-item is the list of all first items of lists in the argument. The next
-item is the list of all second items, and so on.
-
-   In the specification of the semantics, the `silly' mnemonic `flat'
-is defined by `flat = reduce(cat,nil)' in the standard `silly' prelude,
-which means that it flattens a list of lists into one long list.
-
-_P41_
-     [[`transpose']] `X' = `nil' if [[`flat']] `X' = `nil'
-
-_P42_
-     [[`transpose']] `X' = `('[[`map left']] `X,'[[`transpose']] [[`map
-     right']] `X)'
-         if [[`flat']] `X' is a non-`nil' tree
-
-
-File: avram.info,  Node: Exception Handling,  Next: Interfaces to External Code,  Prev: List Functions,  Up: Virtual Code Semantics
-
-2.7.15 Exception Handling
--------------------------
-
-In quite a few cases, the properties given for the operator up to this
-point do not imply any particular result. A good example would be an
-expression such as [[`left']] `nil', which appears to represent the
-left side of an empty pair. It can be argued that expressions like this
-have no sensible interpretation and should never be used, so it would
-be appropriate to leave them undefined.  On the other hand, attempts to
-evaluate such expressions occur frequently by mistake, and in any case,
-the virtual machine emulator should be designed to do something
-reasonable about them if only for the sake of reporting the error.  The
-chosen remedy for this situation addresses the need for error
-reporting, and also turns out to be useful in other ways.
-
-* Menu:
-
-* A Hierarchy of Sets::
-* Operator Generalization::
-* Error Messages::
-* Expedient Error Messages::
-* Computable Error Messages::
-* Exception Handler Usage::
-
-
-File: avram.info,  Node: A Hierarchy of Sets,  Next: Operator Generalization,  Prev: Exception Handling,  Up: Exception Handling
-
-2.7.15.1 A Hierarchy of Sets
-............................
-
-As indicated already, the virtual machine represents all functions and
-data as members of a set satisfying the properties in *note Raw
-Material::, namely a `nil' element and a `cons' operator for
-constructing trees or nested pairs of `nil'. However, it will be
-necessary to distinguish the results of computations that go wrong for
-exceptional reasons from normal results. Because any tree in the set
-could conceivably represent a normal result, we need to go outside the
-set to find an unambiguous representation of exceptional results.
-
-   Because there may be many possible exceptional conditions, it will
-be helpful to have a large set of possible ways to encode them, and in
-fact there is no need to refrain from choosing a countably infinite
-set. Furthermore, it will be useful to distinguish between different
-levels of severity among exceptional conditions, so for this purpose a
-countably infinite hierarchy of mutually disjoint sets is used.
-
-   In order to build on the theory already developed, the set that has
-been used up to this point will form the bottom level of the hierarchy,
-and its members will represent normal computational results. The
-members of sets on the higher levels in the hierarchy represent
-exceptional results. To avoid ambiguity, the term "trees" is reserved
-for members of the bottom set, as in "for any tree `X' ...".  Unless
-otherwise stated, variables like `X' and `Y' are universally quantified
-over the bottom set only.  
-
-   Because each set in the hierarchy is countably infinite, it is
-isomorphic to the bottom set. With respect to an arbitrary but fixed
-bijection between them, let `X_N' denote the image in the `N'th level
-set of a tree `X' in the bottom set. The level numbers in this notation
-start with zero, and we take `X_0' to be synonymous with `X'. For good
-measure, let `(X_N)_M' = `X_(N+M)'.
-
-
-File: avram.info,  Node: Operator Generalization,  Next: Error Messages,  Prev: A Hierarchy of Sets,  Up: Exception Handling
-
-2.7.15.2 Operator Generalization
-................................
-
-Each set in the hierarchy induces a structure preserving `cons' operator,
-denoted `cons_N' for the `N'th level set, and satisfying this equation.
-
-_E10_
-     `cons_N(X_N,Y_N)' = `(cons(X,Y))_N'
-
-It will be convenient to generalize all of these `cons' operators to be
-defined on members of other sets than their own.
-
-_E11_
-     For `M' greater than `N',       `cons_N(X_M,Y_P)' = `X_M'
-
-In this equation, `P' is unrestricted. The intuition is that if the
-left operand of a `cons' is the result of a computation that went wrong
-due to an exceptional condition (more exceptional than `N', the level
-already in effect), then the exceptional result becomes the whole
-result.
-
-   It is tempting to hazard a slightly stronger statement, which is that
-this equation holds even if `Y_P' is equal to some expression `F X'
-that is undefined according to the operator semantics. This stipulation
-would correspond to an implementation in which the right operand isn't
-evaluated after an error is detected in the left, but there are two
-problems with it.
-
-   * This semantics might unreasonably complicate a concurrent
-     implementation of the virtual machine. If evaluation leads to
-     non-termination in some cases where the result is undefined (as it
-     certainly would in any possible implementation consistent with
-     cases where it's defined), then the mechanism that evaluates the
-     right side of a pair must be interruptible in case an exception is
-     detected in the left.
-
-   * It is beyond the expressive power of the present mathematical
-     framework to make such a statement, because it entails universal
-     quantification over non-members of the constructed sets, which
-     includes almost everything.
-
-Nevertheless, the implementation in `avram' is sequential and does
-indeed behave as proposed, with no practical difficulty. As for any
-deficiency in the theory, it could be banished by recasting the
-semantics in terms of a calculus of expressions with formal rules of
-manipulation. An operand to the `cons' operator would be identified not
-with a member of a semantic domain, but with the expression used to
-write it down, and then even "undefinedness" could be defined. However,
-the present author's preference in computing as in life is to let some
-things remain a mystery rather than to abandon the quest for meaning
-entirely.
-
-   A comparable condition applies in cases where the right side of a
-pair represents an exceptional result.
-
-_E12_
-     For `M' greater than `N',     `cons_N(X_N,Y_M)' = `Y_M'
-
-   Whereas an infinitude of `cons' operators has been needed, it will be
-possible to get by with only one invisible operator, as before, by
-generalizing it in the following way to operands on any level of the
-hierarchy.
-
-_P43_
-     `F_N X_N' = `(F X)_N'
-
-_P44_
-     For distinct `N' and `M',  `F_N X_M' = `X_M'
-
-That is, the result of evaluating two operands on the same level is the
-image relative to that level of the result of their respective images on
-the bottom level, but the result of evaluating two operands on different
-levels is the same as the right operand.
-
-
-File: avram.info,  Node: Error Messages,  Next: Expedient Error Messages,  Prev: Operator Generalization,  Up: Exception Handling
-
-2.7.15.3 Error Messages
-.......................
-
-The basic strategy for representing the results of exceptional
-conditions arising from the evaluation of operands on a given level of
-the hierarchy will be to use an error message corresponding to the image
-of a list of character strings on the level above.
-
-   Unfortunately, the official `silly' standard does not define
-character constants, but they are available as a vendor specific
-extension in `silly-me' (millennium edition), where character strings may
-be enclosed in single quotes. The value of the semantic function
-[[...]] in the case of a character string is the list of
-representations of the characters, based on *note Character Table:: and
-*note Representation of Numeric and Textual Data::.
-
-   For the sake of consistency, each standard error message is a list of
-character strings, even though the list has only one string in it. If
-any exceptional condition is the result of a computation, it is written
-to standard error by `avram' as the list of character strings it
-represents.
-
-_P45_
-     ([[`compare']] `nil')`_N' = [[`('invalid
-     comparison',nil)']]`_(N+1)'
-
-_P46_
-     ([[`left']] `nil')`_N'  = [[`('invalid
-     deconstruction',nil)']]`_(N+1)'
-
-_P47_
-     ([[`right']] `nil')`_N' = [[`('invalid
-     deconstruction',nil)']]`_(N+1)'
-
-_P48_
-     (([[`fan']] `F') `nil')`_N' = [[`('invalid
-     deconstruction',nil)']]`_(N+1)'
-
-_P49_
-     ([[`member']] `nil')`_N'  = [[`('invalid
-     membership',nil)']]`_(N+1)'
-
-_P50_
-     ([[`distribute']] `nil')`_N' = [[`('invalid
-     distribution',nil)']]`_(N+1)'
-
-_P51_
-     ([[`cat']] `nil')`_N'  = [[`('invalid
-     concatenation',nil)']]`_(N+1)'
-
-_P52_
-     ([[`meta']] `nil')`_N' = [[`('invalid recursion',nil)']]`_(N+1)'
-
-   Note that by virtue of property _P44_, there is no need for an
-application to make explicit checks for exceptional results at any
-point, because the exceptional result propagates through to the output
-of any function composed with the one that incurred it. For example, an
-application of the form `h = compose(f,right)', which will cause an
-invalid deconstruction error if applied in filter mode to an empty file,
-imposes no requirement that `f' be written to accommodate that
-possibility (i.e., by checking for it) in order for the error to be
-reported properly. The following proof demonstrates that the meaning of
-`f' is irrelevant to the result.
-[[`compose(f,right)']]`_0' `nil_0'
-
-   = [[`f']]`_0' [[`right']]`_0' `nil'`_0'
-
-   = [[`f']]`_0' [[`('invalid deconstruction',nil)']]`_1'
-
-   = [[`('invalid deconstruction',nil)']]`_1'
-
-In an application `h = compose(f,g)', the input validation therefore
-may be confined to the "front end", `g'.
-
-   It will be recalled from the discussions of `recur' (*note Recur::) and
-`transpose' (*note Transpose::) that the semantics of virtual code
-involving these forms is defined in terms of the `field' format for
-deconstruction functions (*note Field::), which depends implicitly on
-the semantics of `left' and `right', being a generalization of them. An
-invalid deconstruction message could therefore result from applications
-incorporating any of the forms of `recur', `transpose', or `field'.
-Invalid deconstructions could also arise from the `replace' operation (*note
-Replace::), which is used for assignment (*note Assignment::), because
-`replace' is defined by virtual code, except as noted next.
-
-
-File: avram.info,  Node: Expedient Error Messages,  Next: Computable Error Messages,  Prev: Error Messages,  Up: Exception Handling
-
-2.7.15.4 Expedient Error Messages
-.................................
-
-Because there are so many ways to cause an invalid deconstruction, this
-message is the most common in practice and therefore the least
-informative. As a matter of convenience, `avram' takes the liberty of a
-slight departure from the virtual machine specification as written
-hitherto, and employs the following messages when invalid
-deconstructions occur respectively in the cases of recursion,
-transposition, and assignment.
-
-   * `invalid recursion'
-
-   * `invalid transpose'
-
-   * `invalid assignment'
-
-That is, this section contradicts and supersedes what is stated at the
-end of *note Error Messages:: and implied by the operator properties
-_P14_, _P16_, and _P42_. It is also possible that user applications may
-modify the error messages by methods described in *note Computable
-Error Messages::.
-
-   Whereas these three cases constitute an expedient variation on the
-semantics, there is another sense in which no possible implementation
-could conform faithfully to the specification. When an evaluation can
-not be carried out because of insufficient space on the host machine,
-one of the following error messages may be the result.
-
-   * `memory overflow'
-
-   * `counter overflow'
-
-These messages are treated in the same way as those that are caused by
-programming errors, and propagate to the final result written to
-standard error without any specific consideration by the application
-developer. The latter occurs only in connection with the built in weight
-function (*note Weight::). Other messages listed in *note Application
-Programming Errors:: are also of this ilk.
-
-
-File: avram.info,  Node: Computable Error Messages,  Next: Exception Handler Usage,  Prev: Expedient Error Messages,  Up: Exception Handling
-
-2.7.15.5 Computable Error Messages
-..................................
-
-The automatic generation and reporting of error messages provides a
-reasonable default behavior for applications that do not consider
-exceptional conditions. All applications and their input data are
-ordinarily members of the bottom level set in the hierarchy (*note A
-Hierarchy of Sets::).  The error messages caused by invalid operations
-on this level are on the first level above the bottom, which are
-recognized as such and written to standard error without intervention
-from the application. However, there are two drawbacks to this style of
-dealing with exceptions.  
-
-   * An application developer may wish to translate error messages into
-     terms that are meaningful to the user, not only by literally
-     translating them from English to the local vernacular, but perhaps
-     by relating the particular exceptional condition to application
-     specific causes. While it is convenient for the "back end" code
-     not to be required to intervene in the error reporting, it would
-     be most inconvenient for it not to be able to do so.
-
-   * Some application specific errors might not correspond directly to
-     any of the particular conditions detected automatically due to
-     invalid operations, for example a semantic error in a
-     syntactically correct input file. It might be convenient in such
-     cases for an application to be able to define its own error
-     messages but still have them reported automatically like the built
-     in messages.
-
-   These situations suggest a need for some ability on the part of an
-application to operate on error messages themselves. Based on the
-operator semantics given so far, such an application is inexpressible,
-because for any application `F_0' and error message `X_1', property
-_P44_ stipulates `F_0 X_1' = `X_1', meaning that the resulting error
-message is unchanged. Therefore, we need to define another basic
-property of the operator.
-
-   The following form of virtual code is used in applications that may
-need to operate on error messages.  
-
-_T32_
-     [[`guard']] `(F,G)' = `((nil,F),G)'
-
-Code in this form has the following semantics.
-
-_P53_
-     ([[`guard']] `(F,G)')`_N' `X_P' = `G_(N+1) F_N X_P'
-
-The intuitive explanation is that `F' is the main part of the
-application, and `G' is the part of the application that operates on
-the error message that comes from `F' if an exception occurs while it
-is being evaluated (i.e., the "exception handler"). Typically the
-exception handler code implements a function that takes an error
-message as an argument and returns an error message as a result.
-
-   Where there is no exception, the exception handler `G_(N+1)' is
-never used, because its argument will be on level `N', and therefore
-unaffected by an application on level `N+1'.
-
-   Exception handlers may have their own exception handlers, which will
-be invoked if the evaluation of the exception handler causes a further
-exception. Such an exception corresponds semantically to a value on the
-next level of the hierarchy of sets.
-
-
-File: avram.info,  Node: Exception Handler Usage,  Prev: Computable Error Messages,  Up: Exception Handling
-
-2.7.15.6 Exception Handler Usage
-................................
-
-One way for this feature of the virtual machine to be used is to
-intercept and translate error messages to a more meaningful form. An
-application guarded as shown below causes messages of invalid
-deconstruction to be changed to `'syntax error''.
-
-     `main = guard(
-        application,
-        conditional(
-           bu(compare,('invalid deconstruction',nil)),
-           (constant ('syntax error',nil),identity)))'
-
-The conditional compares its argument to the error message for an invalid
-deconstruction, and if it matches, the syntax error message is
-returned, but otherwise the original message is returned. Note that an
-error message must be in the form of a list of character strings, so
-that it can be printed.  Although the message of `'syntax error'' might
-not be very informative, at least it looks less like a crash.  A real
-application should of course strive to do better than that.
-
-   Exception handling features of the virtual machine can also be
-adapted by applications to raise their own exceptions with customized
-messages.
-
-     error_messenger =
-        guard(compose(compare,constant nil),constant ('syntax error',nil))
-
-This code fragment implements a function that causes a message of
-`'syntax error'' to be reported for any possible input.  This code
-works by first causing an invalid comparison and then substituting its
-own error message. A function that always causes an error is not useful
-in itself, but might be used as part of an application in the following
-form.
-
-     main = conditional(validation,(application,error_messenger))
-
-In this case, the application checks the validity of the input with a
-predicate, and invokes the error messenger if it is invalid.
-
-   Although the previous examples return a fixed error message for each
-possible kind of error, it is also possible to have error messages that
-depend on the input data, as the next example shows.  
-
-     main = (hired apply)(
-        compose(
-           bu(guard,some_application),
-           (hired constant)(constant 'invalid input was:',identity)),
-        identity)
-
-If the application causes an exception for any reason, the error message
-returned will include a complete listing of the input, prefaced by the
-words `'invalid input was:''. This particular example works only if the
-input is a list of character strings, but could be adapted for other
-types of data by substituting an appropriate formatting function for the
-first identity. The formatting function would take the relevant data
-type to a list of character strings. Another possible variation would
-be to concatenate the invalid input listing with the error message that
-was generated, rather than just replacing it.
-
-   As the last example may suggest, exception handlers turn out to be an essential
-debugging tool for functional programs, making them as easy to debug as
-imperative programs if not more so. This example forms the basis for a
-higher order function that wraps any given function with an exception
-handler that prints the argument causing it to crash. For arguments not
-causing a crash, the behavior is unchanged. Alternatively, code
-implementing a function that unconditionally reports its argument in an
-error message can be inserted at a strategic point in the application
-code similarly to a print statement. Finally, inspired use of exception
-handlers that concatenate their messages with previously generated
-messages can show something like a parameter stack dump when a
-recursively defined function crashes. These are all matters for a
-language designer and are not pursued further in this document.
-
-
-File: avram.info,  Node: Interfaces to External Code,  Next: Vacant Address Space,  Prev: Exception Handling,  Up: Virtual Code Semantics
-
-2.7.16 Interfaces to External Code
-----------------------------------
-
-A few other combinators have been incorporated into the virtual machine
-as alternatives to the style of interactive applications described in
-*note Output From Interactive Applications::. These make it possible to
-interface with external libraries and applications either by a simple
-function call, or by executing a run-time generated transducer as
-described previously. In either case, there is no need for any
-particular command line options to specify interactive invocation, nor
-for the application to be designed that way from the outset. Existing
-virtual code applications may therefore be enhanced to make use of
-these features without radical changes.
-
-   To account for these additional capabilities, it is not entirely
-adequate to continue defining the virtual machine semantics in terms of
-a mathematical function, but it is done nevertheless due to the lack of
-any appealing alternative. Although most library functions are in fact
-functions in the sense that their outputs are determined by their
-arguments, they defy a concise specification within the present
-mathematical framework, especially insofar as they may involve finite
-precision floating point numbers. More problematically, the effect of
-interaction with a shell is neither well defined nor deterministic.
-The descriptions that follow presuppose a computational procedure
-associated with the following definitions but leave its exact nature
-unspecified.
-
-* Menu:
-
-* Library combinator::
-* Have combinator::
-* Interaction combinator::
-
-
-File: avram.info,  Node: Library combinator,  Next: Have combinator,  Prev: Interfaces to External Code,  Up: Interfaces to External Code
-
-2.7.16.1 Library combinator
-...........................
-
-The simplest and fastest method of interfacing to an external library
-is by way of a virtual machine combinator called `library'. It takes
-two non-empty character strings as arguments to a virtual code program
-of the form implied by the following property.
-_T33_
-     [[`library']] (`X',`Y') = `((nil,nil),((X,Y),(nil,nil)))'
-
-Intuitively, X is the name of a library and Y is the name of a function
-within the library. For example, if X is `'math'' and Y is `'sqrt'',
-then `library'(X,Y) represents the function that computes the square
-root of a floating point number as defined by the host machine's native
-C implementation, normally in IEEE double precision format.  Different
-functions and libraries may involve other argument and result types,
-such as complex numbers, arrays, sparse matrices, or arbitrary
-precision numbers. A list of currently supported external library names
-with their functions and calling conventions is given in *note External
-Libraries::.
-
-   On the virtual code side, all function arguments and results
-regardless of their types are encoded as nested pairs of `nil', as
-always, and may be manipulated or stored as any other data, including
-storage and retrieval from files in `.avm' virtual code format (*note
-File Format::). However, on the C side, various memory management and
-caching techniques are employed to maintain this facade while allowing
-the libraries to operate on data in their native format. The details
-are given more fully in the API documentation, particularly in *note
-Type Conversions:: and *note External Library Maintenance::.
-
-   While this style is fast and convenient, it is limited either to
-libraries that have already been built into the virtual machine, or to
-those for which the user is prepared to implement a new interface
-module in C as described in *note Implementing new library functions::.
-
-
-File: avram.info,  Node: Have combinator,  Next: Interaction combinator,  Prev: Library combinator,  Up: Interfaces to External Code
-
-2.7.16.2 Have combinator
-........................
-
-As virtual machine interfaces to external libraries accumulate faster
-than they can be documented and may vary from one installation to
-another, it is helpful to have a way of interrogating the virtual
-machine for an up to date list of the installed libraries and
-functions. A combinator called `have' can be used to test for the
-availability of a library function. It takes the form
-
-_T34_
-     [[`have']] (`X',`Y') = `((nil,nil),((nil,X),(nil,Y)))'
-
-where X is the name of a library and Y is the name of a function within
-the library encoded as character strings. For example, if X is
-`'mtwist'' and Y is `'u_disc'' (for the natural random number generator
-function in the Mersenne twistor library) then `have(X,Y)' is a
-function that returns a non-empty value if an only if that library is
-installed and that function is available within it. The actual argument
-to the function is ignored as the result depends only on the installed
-virtual machine configuration. In this sense, it acts like a `constant'
-combinator.
-
-   One way for this combinator to be used is in code of the form
-
-        portable_rng =
-
-        conditional(
-           have('mtwist','u_disc'),
-           library('mtwist','u_disc'),
-           some_replacement_function)
-
-which will use the library function if available but otherwise use a
-replacement function. Code in this form makes the decision at run time,
-but it is also possible to express the function such that the check for
-library presence is made at compile time, as the following example
-shows, which will imply a slight improvement in performance.
-
-        non_portable_rng =
-
-        apply(
-           conditional(
-              have('mtwist','u_disc'),
-              constant library('mtwist','u_disc'),
-              constant some_replacement_function),
-           0)
-
-This program would be non-portable in the sense that it would need to
-be recompiled for each installation if there were a chance that some of
-them might have the `mtwist' library and some might not, whereas the
-previous example would be binary compatible across all of them. (1)
-
-   The actual value returned by a function `have(foo,bar)' is the list
-of pairs of strings `<(foo,bar)>' if the function is available, or the
-empty list otherwise. A non-empty list is represented as a pair
-`(head,tail)', and an empty list as `nil'. The angle bracket notation
-`<a,b,c...>' used here is an abbreviation for `(a,(b,(c...nil)))'.
-
-   Either or both arguments to the `have' combinator can be a wildcard,
-which is the string containing a single asterisk, `'*''. In that case,
-the list of all available matching library names and function names
-will be returned. This feature can be used to find out what library
-functions are available without already knowing their names.
-
-   If a library had a function named `'*'', which clashes with the wild
-card string, the interpretation as a wild card would take precedence.
-
-   ---------- Footnotes ----------
-
-   (1) In practice both examples are equally portable because the
-`mtwist' source is distributed with `avram' so all installations will
-have it. Most libraries are distributed separately.
-
-
-File: avram.info,  Node: Interaction combinator,  Prev: Have combinator,  Up: Interfaces to External Code
-
-2.7.16.3 Interaction combinator
-...............................
-
-A further combinator allows virtual code applications to interact
-directly with any interactive console application using the `expect'
-library.  The mechanism is similar to that of interactive applications
-documented in the *note Output From Interactive Applications::, but
-attempts to be more convenient.  Instead of being designed as an
-interactive application, any virtual code application may use this
-combinator to spawn a shell and interact with it in order to compute
-some desired result.
-
-   The advantage of this combinator over the `library' combinator is
-that it requires no modification of the virtual machine to support new
-applications. It can also interact with applications that may reside on
-remote servers, that are implemented languages other than C, or whose
-source code is unavailable. For example, the GNU R statistical package
-provides an interactive command to evaluate multivariate normal
-distribution functions with an arbitrary covariance matrix, but the
-corresponding function is not provided by the `Rmath' C library (or any
-other free library, to the author's knowledge) because it is
-implemented in interpreted code. This combinator makes it callable by
-an `avram' virtual code application nevertheless. The disadvantage
-compared to the `library' combinator is that there is more overhead in
-spawning a process than simply making a call to a built in function,
-and the programming interface is more complicated.
-
-   The combinator takes the form
-
-_T35_
-     [[`interact']] F = `((nil,nil),(((nil,nil),nil),((nil,F),nil)))'
-
-where F is the virtual code for a function that follows the same
-protocol described in *note Output From Interactive Applications::,
-except that it does not allow file output as described in *note Mixed
-Modes of Interaction::. The argument `x' is ignored when the expression
-`(interact f) x' is evaluated, similarly to the way the argument is
-ignored in an expression like `(constant k) x'. The result returned is
-a transcript of the dialogue that took place between `f' and the
-externally spawned shell, represented as a list of lists of strings for
-line oriented interaction, or a list of characters alternating with
-lists of strings in the case of character oriented interaction.
-
-   The following example demonstrates a trivial use of the `interact'
-combinator to spawn an `ftp' client, do an `ls' command, and then terminate
-the session.
-
-
-     eof = <(nil,(nil,(((nil,nil),nil),(nil,nil))))>
-
-     demo =
-
-     interact conditional(
-        conditional(identity,constant false,constant true),
-        constant(0,<'ftp'>,<'ftp> '>),
-        conditional(
-           conditional(left,constant false,constant true),
-           constant(1,<'ls',''>,<'','ftp> '>),
-           conditional(
-              compose(compare,couple(left,constant 1)),
-              constant(2,<'bye',''>,<eof>),
-              constant nil)))
-
-Some liberties are taken with `silly' syntax in this example, in the
-way of using angle brackets to denote lists, and numbers to represent
-states.
-
-   * The interacting transducer works by checking whether its argument
-     is empty (via the `identity' function used as a predicate in the
-     `conditional', which is then negated). In that case it returns the
-     triple containing the initial state of 0, the `ftp' shell command
-     to spawn the client, and the `'ftp> '' prompt expected when the
-     client has been spawned, both of the latter being lists of strings.
-
-   * If the argument is non-empty, then next it checks whether it is in
-     the initial state of 0, (via the `left' function used as a
-     predicate, referring to the state variable expected on the left of
-     any given `(state,input)' pair, also negated). If so, it returns
-     the triple containing the next state of 1, the `ls' command
-     followed by an empty string to indicate a line break, and the
-     expected prompt preceded by an empty string to match it only at
-     the beginning of a line.
-
-   * Finally, it checks for state 1, in which case it issues the `bye'
-     command to close the session, `eof' rather than a prompt to wait
-     for termination of the client, and a state of 2.
-
-   * In the remaining state of 2, which needn't be explicitly tested
-     because it is the only remaining possibility, the program returns a
-     `nil' value to indicate that the computation has terminated.
-
-   Deadlock would be possible at any point if either party did not
-follow this protocol, but for this example it is not an issue. If an
-expression of the form `demo x' were to be evaluated, then regardless
-of the value of `x', the value of the result would be as shown below.
-
-     <
-        <'ftp'>,
-        <'ftp> '>,
-        <'ls',''>,
-        <'ls','Not connected.','ftp> '>,
-        <'bye',''>,
-        <'bye',''>>
-
-That is, it would be a list of lists of strings, alternating between the
-output of the interactor and the output of the `ftp' client.  If the
-spawned application had been something non-trivial such as a computer
-algebra system or a command line web search utility, then it is easy to
-see how functions using this combinator can leverage off a wealth of
-available resources.
-
-
-File: avram.info,  Node: Vacant Address Space,  Prev: Interfaces to External Code,  Up: Virtual Code Semantics
-
-2.7.17 Vacant Address Space
----------------------------
-
-Not every possible pattern has been used by the virtual machine as a way
-of encoding a function. The following patterns, where `A', `B', and `C'
-are non-`nil' trees, do not represent anything useful.
-
-unary forms
-     `((nil,nil),((nil,nil),(nil,((nil,A),nil))))'
-     `((nil,nil),((nil,nil),(nil,(nil,(nil,A)))))'
-
-binary forms
-     `((nil,nil),((nil,nil),(A,B)))'
-     `((nil,nil),((A,nil),(B,nil)))'
-     `((nil,nil),((A,nil),(nil,B)))'
-
-ternary forms
-     `((nil,nil),((A,B),(C,nil)))'
-     `((nil,nil),((A,B),(nil,C)))'
-     `((nil,nil),((A,nil),(B,C)))'
-     `((nil,nil),((nil,A),(B,C)))'
-
-These patterns are detected by the virtual machine simply to avoid
-blowing it up, but they always cause an error message to be reported.  
-
-_P55_
-     For `F' matching any of the first three trees in the above list,
-        `F_N X_N' = [[`('unsupported hook',nil)']]`_(N+1)'
-
-_P56_
-     For the remaining trees `F' in the above list,
-        `F_N X_N' = [[`('unrecognized combinator (code
-     M)',nil)']]`_(N+1)'
-
-Here, `M' is a numeric constant dependent on which tree `F' was used.
-The unsupported hook message is meant to be more informative than the
-unrecognized combinator message, suggesting that a feature intended for
-future use is not yet available.
-
-   This list has been assembled for the benefit of readers considering
-the addition of backward compatible extensions to the virtual code
-semantics, who are undeterred by the facts that
-   * the computational model is already universal
-
-   * virtual code applications are already interoperable with all kinds
-     of high performance software having a text based or console
-     interface by way of the `interact' combinator
-
-   * an unlimited number of built in library functions can be added by
-     way of the `library' combinator as described in *note Implementing
-     new library functions::
-
-   * the C code in `avram' makes fairly intricate use of pointers with
-     a careful policy of reference counting and storage reclamation
-
-   * there is also a performance penalty incurred by further extensions
-     to the semantics, even for applications that don't use them,
-     because a pattern recognition algorithm in the interpreter has
-     more cases to consider.
-
-   Nevertheless, a new functional form combining a pair of functions to
-be interpreted in a new way by the virtual machine could be defined
-using any of the binary forms above, for example, with `A' as the
-virtual code for one of the functions and `B' as that of the other.
-Such a form would not conflict with any existing applications, provided
-that both `A' and `B' are not `nil', which is true of any valid
-representation for a function.
-
-   Virtual machine architects, take note. There are infinitely many
-trees fitting these patterns, but it would be possible to use them up by
-assigning them without adequate foresight. For example, if
-interpretations were assigned to the four ternary forms, the three
-binary forms, and one of the remaining unary forms, then the only
-unassigned pattern could be of the form
-
-     `((nil,nil),((nil,nil),(nil,(nil,(nil,A)))))'
-
-Assigning an interpretation to it would leave no further room for
-backward compatible expansion. On the other hand, any tree of the
-following form also fits the above pattern,
-
-     `((nil,nil),((nil,nil),(nil,(nil,(nil,(B,C))))))'
-
-with any values for `B' and `C'. Different meanings could be chosen for
-the case where both are `nil', both are non-`nil', or one is `nil' and
-the other non-`nil', allowing two unary forms, one binary, and one
-constant. If at least one of these patterns is reserved for future
-enhancements, then a potentially inexhaustible supply of address space
-remains and there will be no need for incompatible changes later.
-
-
-File: avram.info,  Node: Library Reference,  Next: Character Table,  Prev: Virtual Machine Specification,  Up: Top
-
-3 Library Reference
-*******************
-
-Much of the code developed for `avram' may be reusable in other
-projects, so it has been packaged into a library and documented in this
-chapter. For ease of reference, this chapter is organized with a
-separate section for each source file. For the most part, each source
-file encapsulates an abstract type and a number of related functions,
-except for a few cases where C makes such a design awkward. An attempt
-has been made to present the sections in a readable order as far as
-possible.
-
-   The documentation in this chapter is confined to the application
-program interface (API), and does not delve unnecessarily into any
-details of the implementation. A reader wishing to extend, modify, or
-troubleshoot the library itself can find additional information in the
-source code comments. These are more likely to be in sync with the code
-than this document may be, and are more readily accessible to someone
-working with the code.
-
-   Some general points pertaining to the library are the following.
-
-   * Unlike the previous chapter, this chapter uses the word "function"
-     in the C sense rather than the mathematical sense of the word.
-
-   * Internal errors are internal from the user's point of view, not
-     the developer's (*note Internal Errors::). Invoking these
-     functions in ways that are contrary to their specifications can
-     certainly cause internal errors (not to mention segfaults).
-
-   * The library is definitely not thread safe, and thread safety is not
-     a planned enhancement. The amount of locking required to make it
-     thread safe would probably incur an objectionable performance
-     penalty due to the complexity of the shared data structures
-     involved, in addition to being very difficult to get right. If you
-     need these facilities in a concurrent application, consider
-     spawning a process for each client of the library so as to keep
-     their address spaces separate.
-
-   * The library files are built from the standard source distribution
-     using GNU `libtool'. In the default directory hierarchy, they will
-     be found either in `/usr/lib/libavram.*' or in
-     `/usr/local/lib/libavram.*'.  These directories will differ in a
-     non-standard installation.
-
-   * The header files will probably be located in either
-     `/usr/include/avm/*.h' or `/usr/local/include/avm/*.h' for a
-     standard installation.
-
-   * All exported functions, macros and constants are preceded with
-     `avm_', so as to reduce the chance of name clashes with other
-     libraries. Not all type declarations or field identifiers follow
-     this convention, because that would be far too tedious.
-
-   * The library header files are designed to be compatible with C++ but
-     have been tested only with C. Please refer to platform specific
-     documentation for further information on how to link library
-     modules with your own code.
-
-* Menu:
-
-* Lists::
-* Characters and Strings::
-* File Manipulation::
-* Invocation::
-* Version Management::
-* Error Reporting::
-* Profiling::
-* Emulation Primitives::
-* External Library Maintenance::
-
-
-File: avram.info,  Node: Lists,  Next: Characters and Strings,  Prev: Library Reference,  Up: Library Reference
-
-3.1 Lists
-=========
-
-The basic data structure used for representing virtual code and data in
-the `avram' library is declared as a `list'.  The `list' type is a
-pointer to a structure having a `head' field and a `tail' field, which
-are also lists. The empty tree, `nil', is represented by the C constant
-`NULL'. A tree of the form `cons(A,B)' is represented in C as a list
-whose `head' is the representation of `A' and whose `tail' is the
-representation of `B'.
-
-   A number of other fields in the structure are maintained
-automatically and should not be touched. For that matter, even the
-`head' and `tail' fields should be considered read-only. Because of
-sharing, it is almost never valid to modify a list "in place", except
-for cases that are already covered by library functions.
-
-* Menu:
-
-* Simple Operations::
-* Recoverable Operations::
-* List Transformations::
-* Type Conversions::
-* Comparison::
-* Deconstruction Functions::
-* Indirection::
-* The Universal Function::
-
-
-File: avram.info,  Node: Simple Operations,  Next: Recoverable Operations,  Prev: Lists,  Up: Lists
-
-3.1.1 Simple Operations
------------------------
-
-These functions are declared in the header file `lists.h', which should
-be included in any C source file that uses them with a directive such
-as `#include <avm/lists.h>'. All of these functions except the first
-three have the potential cause a memory overflow. In that event, a
-brief message is written to standard error and the process is killed
-rather than returning to the caller. It is possible for client programs
-requiring more robust behavior to do their own error handling by using
-the alternative versions of these operations described in the next
-section.
-
- -- Function: void avm_initialize_lists ()
-     The function `avm_initialize_lists' should be called before any of
-     the other ones in this section is called, because it sets up some
-     internal data structures. Otherwise, the behavior of the other
-     functions is undefined.
-
- -- Function: void avm_dispose (list FRONT)
-     This function deallocates the memory associated with a given list,
-     either by consigning it to a cache maintained internally by the
-     library, or by the standard `free' function if the cache is full.
-     Shared lists are taken into account and handled properly according
-     to a reference counting scheme. Lists should be freed only by this
-     function, not by using `free' directly.
-
- -- Function: void avm_count_lists ()
-     If a client program aims to do its own storage reclamation, this
-     function can be called optionally at the end of a run when it is
-     believed that all lists have been freed. If any allocated lists
-     remain at large, a warning will be printed to standard error. This
-     function therefore provides a useful check for memory leaks.
-     Overhead is small enough that it is not infeasible to leave this
-     check in the production code.
-
- -- Function: list avm_copied (list OPERAND)
-     A copy of the argument list is returned by this function. The copy
-     remains intact after the original is reclaimed. A typical use
-     might be for retaining part of a list after the rest of it is no
-     longer needed. In this example, a list `x' is traversed by a
-     hypothetical `visit' function to each item, which is then
-     immediately reclaimed.
-
-          while(x){
-             visit(x->head);
-             old_x = x;
-             x = avm_copied(x->tail);       /* the right way */
-             avm_dispose(old_x);
-          }
-
-     This example allows each item in the list to be visited even as
-     previously visited items are reclaimed, because `x' is copied at
-     each iteration. This example contrasts with the next one, which
-     will probably cause a segmentation fault.  
-
-          while(x){
-             visit(x->head);
-             old_x = x;
-             x = x->tail;                   /* the wrong way */
-             avm_dispose(old_x);
-          }
-
-     In the second example, a reference is made to a part of a list
-     which no longer exists because it has been deallocated.
-
-     In fact, the `avm_copied' function does nothing but increment a
-     reference count, so it is a fast, constant time operation that
-     requires no additional memory allocation. Semantically this action
-     is equivalent to creating a fresh copy of the list, because all
-     list operations in the library deal with reference counts properly.
-
- -- Function: list avm_join (list LEFT, list RIGHT)
-     This function takes a pair of lists to a list in which the left is
-     the head and the right is the tail. It may need to use `malloc' to
-     allocate additional memory. If there is insufficient memory, an
-     error message is written to standard error and the program exits.
-     When the list returned by `avm_join' is eventually deallocated, the
-     lists from which it was built are taken with it and must not be
-     referenced again. For example, the following code is an error.
-
-          z = avm_join(x,y);
-          ...
-          avm_dispose(z);
-          avm_print_list(x);         /* error here */
-
-     To accomplish something similar to this without an error, a copy of
-     `x' should be made, as in the next example.
-
-          z = avm_join(avm_copied(x),y);
-          ...
-          avm_dispose(z);
-          avm_print_list(x);         /* original x still intact */
-
- -- Function: void avm_enqueue (list *FRONT, list *BACK, list OPERAND)
-     A fast simple way of building a list head first is provided by the
-     `enqueue' function. The `front' is a pointer to the beginning of
-     the list being built, and the `back' is a pointer to the last
-     item. The recommended way to use it would be something like this.
-
-          front = back = NULL;
-          avm_enqueue(&front,&back,item);
-          avm_enqueue(&front,&back,next_item);
-          avm_enqueue(&front,&back,another_item);
-          ...
-
-     It might be more typical for the calls to `avm_enqueue' to appear
-     within a loop. In any case, after the above code is executed, the
-     following postconditions will hold.
-
-          front->head == item
-          front->tail->head == next_item
-          front->tail->tail->head == another_item
-          back->head == another_item
-          back->tail == NULL
-
-     The `avm_enqueue' function must never be used on a shared list,
-     because it modifies its arguments in place. The only practical way
-     to guarantee that a list is not shared is to initialize the
-     `front' and `back' to `NULL' as shown before the first call to
-     `avm_enqueue', and to make no copies of `front' or `back' until
-     after the last call to `avm_enqueue'.
-
-     Because a list built with `avm_enqueue' is not shared, it is one
-     of the few instances of a list that can have something harmlessly
-     appended to it in place. For example, if the next line of code were
-
-          back->tail = rest_of_list;
-
-     that would be acceptable assuming `rest_of_list' is not shared and
-     does not conceal a dangling or cyclic reference, and if nothing
-     further were enqueued.
-
-     The items that are enqueued into a list are not copied and will be
-     deallocated when the list is deallocated, so they must not be
-     referenced thereafter. A non-obvious violation of this convention
-     is implicit in the following code.
-
-          ...
-          avm_enqueue(&front,&back,x->head);
-          ...
-          avm_dispose(front);
-          avm_print_list(x);      /* error here  */
-
-     This code might cause a segmentation fault because of the
-     reference to `x' after its head has been deallocated. The
-     following code is subject to the same problem,
-
-          ...
-          avm_enqueue(&front,&back,x->head);
-          ...
-          avm_dispose(x);
-          avm_print_list(front);       /* error here */
-
-     as is the following.
-
-          ...
-          avm_enqueue(&front,&back,x->head);
-          ...
-          avm_dispose(x);       /* front is now impossible to reclaim */
-          avm_dispose(front);
-
-     The problem with the last example is that it is not valid even to
-     dispose of the same list more than once, albeit indirectly.
-
-     If part of a list is intended to be enqueued temporarily or
-     independently of its parent, the list should be copied explicitly,
-     as the following code demonstrates.
-
-          ...
-          avm_enqueue(&front,&back,avm_copied(x->head));   /* correct */
-          ...
-          avm_dispose(front);
-          avm_print_list(x);
-
- -- Function: counter avm_length (list OPERAND)
-     A `counter' is meant to be the longest unsigned integer available on
-     the host machine, and is defined in `common.h', which is
-     automatically included whenever `lists.h' is included. The
-     `avm_length' function returns the number of items in a list. If a
-     list is `NULL', a value of zero is returned. There is a possibility
-     of a counter overflow error from this function (*note Overflow
-     Errors::), but only on a platform where the `counter' type is
-     shorter than the address length.
-
- -- Function: counter avm_area (list OPERAND)
-     This function is similar to `avm_length', but it treats its
-     argument as a list of lists and returns the summation of their
-     lengths.
-
- -- Function: list avm_natural (counter NUMBER)
-     This function takes a `counter' to its representation as a list, as
-     described in *note Representation of Numeric and Textual Data::.
-     That is, the number is represented as a list of bits, least
-     significant bit first, with each zero bit represented by `NULL'
-     and each one bit represented by a list whose `head' and `tail' are
-     `NULL'.
-
- -- Function: void avm_print_list (list OPERAND)
-     The `avm_print_list' function is not used in any production code
-     but retained in the library for debugging purposes. It prints a
-     list to standard output using an expression involving only commas
-     and parentheses, as per the `silly' syntax (*note A Simple Lisp
-     Like Language::). The results quickly become unintelligible for
-     lists of any significant size.  The function is recursively
-     defined and will crash in the event of a stack overflow, which
-     will occur in the case of very large or cyclic lists.
-
- -- Function: list avm_position (list KEY, list TABLE, int *FAULT)
-     This function searches for a KEY in a short TABLE where each item
-     is a possible key.
-
-     If it's not found, a `NULL' value is returned. If it's found, a
-     list representing a character encoding according to *note
-     Character Table:: is returned.
-
-     The ascii code of the character corresponding to the returned list
-     is the position of the KEY in the TABLE, assuming position numbers
-     start with 1.
-
-     The table should have a length of 255 or less. If it's longer and
-     the KEY is found beyond that range, the higher order bits of the
-     position number are ignored.
-
-     The integer referenced by FAULT is set to a non-zero value in the
-     event of a memory overflow, which could happen in the course of
-     the list comparisons necessary for the search.
-
-
-File: avram.info,  Node: Recoverable Operations,  Next: List Transformations,  Prev: Simple Operations,  Up: Lists
-
-3.1.2 Recoverable Operations
-----------------------------
-
-The functions in this section are similar to the ones in the previous
-section except with regard to error handling. Whereas the other ones
-cause an error message to be printed and the process to exit in the
-event of an overflow, these return to the caller, whose responsibility
-it is to take appropriate action. The functions in both sections are
-declared in `lists.h', and should be preceded by a call to
-`avm_initialize_lists'.
-
- -- Function: list avm_recoverable_join (list LEFT, list RIGHT)
-     This function is similar to `avm_join', but will return a `NULL'
-     pointer if memory that was needed can not be allocated. A `NULL'
-     pointer would never be the result of a join under normal
-     circumstances, so the overflow can be detected by the caller.
-     Regardless of whether overflow occurs, the arguments are
-     deallocated by this function and should not be referenced
-     thereafter.
-
- -- Function: void avm_recoverable_enqueue (list *FRONT, list *BACK,
-          list OPERAND, int *FAULT)
-     This version of the enqueue function will dispose of the `OPERAND'
-     if there isn't room to append another item and set `*FAULT' to a
-     non-zero value. Other than that, it does the same as `avm_enqueue'.
-
- -- Function: counter avm_recoverable_length (list OPERAND)
-     This function checks for arithmetic overflow when calculating the
-     length of a list, and returns a zero value if overflow occurs. The
-     caller can detect the error by noting that zero is not the length
-     of any list other than `NULL'. This kind of overflow is impossible
-     unless the host does not have long enough integers for its address
-     space.
-
- -- Function: counter avm_recoverable_area (list OPERAND, int *FAULT)
-     This function is similar to `avm_area', except that it reacts
-     differently to arithmetic overflow. The `fault' parameter should be
-     the address of an integer known to the caller, which will be set
-     to a non-zero value if overflow occurs. In that event, the value
-     of zero will also be returned for the area. Note that it is
-     possible for non-empty lists to have an area of zero, so this
-     condition alone is not indicative of an error.
-
- -- Function: list avm_recoverable_natural (counter NUMBER)
-     This function returns the `list' representation of a native
-     unsigned long integer, provided that there is enough memory,
-     similarly to the `avm_natural' function. Unlike that function,
-     this one will return a value of `NULL' rather than exiting the
-     program in the event of a memory overflow. The overflow can be
-     detected by the caller insofar as a `NULL' `list' does not
-     represent any number other than zero.
-
-
-File: avram.info,  Node: List Transformations,  Next: Type Conversions,  Prev: Recoverable Operations,  Up: Lists
-
-3.1.3 List Transformations
---------------------------
-
-Some functions declared in `listfuns.h' are used to implement the
-operations described in *note List Functions::. These functions are able
-to report error messages in the event of overflow or other exceptional conditions,
-as described in *note Error Messages::. The error messages are
-represented as lists and returned to the caller. The occurrence of an
-error can be detected by the `*FAULT' flag being set to a non-zero
-value. None of these functions ever causes a program exit except in the
-event of an internal error.
-
- -- Function: void avm_initialize_listfuns ()
-     This has to be called before any of the other functions in this
-     section is called. It initializes the error message lists, among
-     other things.
-
- -- Function: void avm_count_listfuns ()
-     At the end of a run, a call to this function can verify that no
-     unreclaimed storage attributable to these functions persists. If it
-     does, a warning is printed to standard error. If `avm_count_lists'
-     is also used, it must be called after this function.
-
- -- Function: list avm_reversal (list OPERAND, int *FAULT)
-     The reversal of the list is returned by this function if no
-     overflow occurs. A non-zero `*FAULT' and an error message are
-     returned otherwise. The original `OPERAND' still exists in its
-     original order after this function is called. The amount of
-     additional storage allocated is proportional only to the length of
-     the list, not the size of its contents.
-
- -- Function: list avm_distribution (list OPERAND, int *FAULT)
-     This function performs the operation described in *note
-     Distribute::. The invalid distribution message is returned in the
-     event of a `NULL' operand. Otherwise, the returned value is the
-     distributed list. In any event, the `OPERAND' is unaffected.
-
- -- Function: list avm_concatenation (list OPERAND, int *FAULT)
-     The `OPERAND' is treated as a pair of lists to be concatenated,
-     with the left one in the `head' field and the right one in the
-     `tail' field. The invalid concatenation message is returned in the
-     event of a `NULL' `OPERAND'. The result returned otherwise is the
-     concatenation of the lists, but the given `OPERAND' still exists
-     unchanged.
-
- -- Function: list avm_transposition (list OPERAND, int *FAULT)
-     The operation performed by this function corresponds to that of
-     *note Transpose::. Unlike other functions in this section, the
-     operand passed to this function is deallocated, and must not be
-     referenced thereafter. The transposed list is accessible as the
-     returned value of this function. If the original `OPERAND' is
-     still needed after a call to `avm_transposition', only a copy of
-     it should be passed to it, obtained from `avm_copied'. The invalid
-     transpose error message is the result if the operand does not
-     represent a list of equal length lists.
-
- -- Function: list avm_membership (list OPERAND, int *FAULT)
-     This function computes the membership predicate described in *note
-     Member::. The operand is a list in which the `tail' field is a
-     list that will be searched for the item in the `head'. If the item
-     is not found, a `NULL' list is returned, but otherwise a list with
-     `NULL' `head' and `tail' fields is returned. If the operand is
-     `NULL', an error message of invalid membership is returned and
-     `*FAULT' is set to a non-zero value.
-
-     The `avm_membership' function calls `avm_binary_comparison' in
-     order to compare lists, so the same efficiency and side-effect
-     considerations are relevant to both (*note Comparison::). It is not
-     necessary to `#include' the header file `compare.h' or to call
-     `avm_initialize_compare' in order to use `avm_membership', because
-     they will be done automatically.
-
- -- Function: list avm_binary_membership (list OPERAND, list MEMBERS,
-          int *FAULT);
-     This function is the same as `avm_membership' except that it
-     allows the element and the set of members to be passed as separate
-     lists instead of being the head and the tail of the same list.
-
- -- Function: list avm_measurement (list OPERAND, int *FAULT)
-     This function implements the operation described in *note
-     Weight::, which pertains to the weight of a tree. The returned
-     value of this function is a list encoding the weight as a binary
-     number, unless a counter overflow occurs, in which case it's an
-     error message. As noted previously, the weight of a tree can
-     easily be exponentially larger than the amount of memory it
-     occupies, but this function uses native integer arithmetic for
-     performance reasons. Hence, a counter overflow is a real
-     possibility.
-
-
-File: avram.info,  Node: Type Conversions,  Next: Comparison,  Prev: List Transformations,  Up: Lists
-
-3.1.4 Type Conversions
-----------------------
-
-External library functions accessed by the `library' combinator as
-explained in *note Library combinator:: may operate on data other than
-the `list' type usually used by `avram', such as floating point numbers
-and arrays, but a virtual code application must be able to represent
-the arguments and results of these functions in order to use them. As a
-matter of convention, a data structure occupying SIZE bytes of
-contiguous storage on the host machine appears as a list of length SIZE
-to a virtual code application, in which each item corresponds to a
-byte, and is represented according to *note Character Table::.
-
-   In principle, a virtual code application invoking a library function
-to operate on a contiguous block of data, such as an IEEE double
-precision number, for example, would construct a list of eight
-character representations (one for each byte in a double precision
-number), and pass this list as an argument to the library function. The
-virtual machine would transparently convert this representation to the
-native floating point format, evaluate the function, and convert the
-result back to a list.  In practice, high level language features
-beyond the scope of this document would insulate the programmer from
-some of the details on the application side as well.
-
-   To save the time of repeatedly converting between the list
-representation and the contiguous native binary representation, the
-structure referenced by a `list' pointer contains a `value' field which
-is a `void' pointer to a block of memory of unspecified type, and
-serves as a persistent cache of the value represented by the list. This
-field normally should be managed by the API rather than being accessed
-directly by client modules, but see the code in `mpfr.c' for an example
-of a situation in which it's appropriate to break this rule. (Generally
-these situations involve library functions operating on non-contiguous
-data.)
-
-* Menu:
-
-* Primitive types::
-* One dimensional arrays::
-* Two dimensional arrays::
-* Related utility functions::
-
-
-File: avram.info,  Node: Primitive types,  Next: One dimensional arrays,  Prev: Type Conversions,  Up: Type Conversions
-
-3.1.4.1 Primitive types
-.......................
-
-A pair of functions in support of this abstraction is prototyped in
-`listfuns.h'.  These functions will be of interest mainly to developers
-wishing to implement an interface to a new library module and make it
-accessible on the virtual side by way of the `library' combinator
-(*note Library combinator::).
-
- -- Function: void *avm_value_of_list (list OPERAND, list *MESSAGE, int
-          *FAULT)
-     This function takes an OPERAND representing a value used by a
-     library function in the format described above (*note Type
-     Conversions::) and returns a pointer to the value.
-
-     The `value' field in the OPERAND normally will point to the block
-     of memory holding the value, and the OPERAND itself will be a list
-     of character representations whose binary encodings spell out the
-     value as explained above.
-
-     The `value' field need not be initialized on entry but it will be
-     initialized as a side effect of being computed by this function.
-     If it has been initialized due to a previous call with the same
-     OPERAND, this function is a fast constant time operation.
-
-     The caller should not free the pointer returned by this function
-     because a reference to its value will remain in the OPERAND. When
-     the OPERAND itself is freed by `avm_dispose' (*note Simple
-     Operations::), the value will go with it.
-
-     If an error occurs during the evaluation of this function, the
-     integer referenced by FAULT will be set to a non-zero value, and
-     the list referenced by MESSAGE will be assigned a representation of
-     a list of strings describing the error. The MESSAGE is freshly
-     created and should be freed by the caller with `avm_dispose' when
-     no longer needed.
-
-     Possible error messages are `<'missing value'>', in the case of an
-     empty OPERAND, `<'invalid value'>' in the case of an OPERAND that
-     is not a list of character representations, and `<'memory
-     overflow'>' if there was insufficient space to allocate the result.
-
- -- Function: list avm_list_of_value (void *CONTENTS, size_t SIZE, int
-          *FAULT)
-     This function performs the inverse operation of
-     `avm_value_of_list', taking the address of an area of contiguously
-     stored data and its SIZE in bytes to a list representation. The
-     length of the list returned is equal to the number of bytes of
-     data, SIZE, and each item of the list is a character
-     representation for the corresponding byte as given by *note
-     Character Table::.
-
-     A copy of the memory area is made so that the original is no longer
-     needed and may be freed by the caller. A pointer to this copy is
-     returned by subsequent calls to `avm_value_of_list' when the
-     result returned by this function is used as the OPERAND parameter.
-
-     If there is insufficient memory to allocate the result, the integer
-     referenced by FAULT is set to a non-zero value, and a copy of the
-     message `<'memory overflow'>' represented as a list is returned.
-     This function could also cause a segmentation fault if it is passed
-     an invalid pointer or a SIZE that overruns the storage area.
-     However, it is acceptable to specify a SIZE that is less than the
-     actual size of the given memory area to construct a list
-     representing only the first part of it. The SIZE must always be
-     greater than zero.
-
-
-File: avram.info,  Node: One dimensional arrays,  Next: Two dimensional arrays,  Prev: Primitive types,  Up: Type Conversions
-
-3.1.4.2 One dimensional arrays
-..............................
-
-A couple of functions declared in `matcon.h' are concerned mainly with
-one dimensional arrays or vectors. They have been used for vectors of
-double precision and complex numbers, but are applicable to any base
-type that is contiguous and of a fixed size.
-
-   The motivation for these functions is to enable a developer to
-present an API to virtual code applications wherein external library
-functions operating natively on one dimensional arrays of numbers are
-seen from the virtual side to operate on lists of numbers. Lists are the
-preferred container for interoperability with virtual code applications.
-
- -- Function: void *avm_vector_of_list (list OPERAND, size_t ITEM_SIZE,
-          list *MESSAGE, int *FAULT)
-     This function calls `avm_value_of_list' (*note Primitive types::)
-     for each item of the OPERAND and puts all the values together into
-     one contiguous block, whose address is returned.
-
-     The given ITEM_SIZE is required to be the lengths of the items,
-     all necessarily equal, and is required only for validation. For
-     example, ITEM_SIZE is 8 for a list of double precision numbers,
-     because they occupy 8 bytes each and are represented as lists of
-     length 8.
-
-     The total number of bytes allocated is the product of ITEM_SIZE
-     and the length of the OPERAND. Unlike the case of
-     `avm_value_of_list' (*note Primitive types::), the result returned
-     by this function should be explicitly freed by the caller when no
-     longer needed.
-
-     Any errors such as insufficient memory cause the integer
-     referenced by FAULT to be assigned a non-zero value and the
-     MESSAGE to be assigned an error message represented as a list of
-     strings. An error message of `<'bad vector specification'>' is
-     possible in the case of an empty OPERAND or one whose item lengths
-     don't match the given ITEM_SIZE. Error messages caused by
-     `avm_value_of_list' can also be generated by this function. Any
-     non-empty error message should be reclaimed by the caller using
-     `avm_dispose' (*note Simple Operations::). If an error occurs, a
-     `NULL' pointer is returned.
-
- -- Function: list avm_list_of_vector (void *VECTOR, int NUM_ITEMS,
-          size_t ITEM_SIZE, int *FAULT)
-     This function takes it on faith that an array of dimension
-     NUM_ITEMS in which each item occupies ITEM_SIZE bytes begins at
-     the address given by VECTOR. A list representation of each item in
-     the array is constructed by the function `avm_list_of_value'
-     (*note Primitive types::), and a list of all of the lists thus
-     obtained in order of their position in the array is returned.
-
-     In the event of any errors caused by `avm_list_of_value' or errors
-     due to insufficient memory, the error message is returned as the
-     function result, and the integer referenced by FAULT is assigned a
-     non-zero value. The error message is in the form of a list of
-     character string representations. A segmentation fault is possible if
-     VECTOR is not a valid pointer or if the array size implied by
-     misspecified values of NUM_ITEMS and ITEM_SIZE exceeds its actual
-     size.
-
-
-File: avram.info,  Node: Two dimensional arrays,  Next: Related utility functions,  Prev: One dimensional arrays,  Up: Type Conversions
-
-3.1.4.3 Two dimensional arrays
-..............................
-
-Several other functions in `matcon.h' are meant to support conversions
-between matrices represented as lists of lists and arrays in a variety
-of representations. Dense matrices either square or rectangular are
-accommodated, and symmetric square matrices can be stored with
-redundant entries omitted in either upper trangular or lower triangular
-format.
-
-   Similarly to the vector operations (*note One dimensional arrays::)
-these functions are intended to allow a developer to present an
-interface to external libraries based on lists rather than arrays.
-
-   The preferred convention for virtual code applications is to
-represent a matrix as a list of lists of entities (typically numbers),
-with one list for each row of the matrix. For example, a 3 by 3 matrix
-containing a value of `aij' in the `i'-th row and the `j'-th column
-would be represented by this list of three lists.
-
-     <
-        <a11,a12,a13>,
-        <a21,a22,a23>,
-        <a31,a32,a33>>
-
-Such a representation is convenient for manipulation by virtual machine
-combinators, for example `transpose' (*note Transpose::), and is
-readily identified with the matrix it represents.
-
-   If a matrix is symmetric (that is, with `aij' equal to `aji' for all
-values of `i' and `j'), only the lower triangular portion needs to be
-stored because the other entries are redundant.  The list
-representatation would be something like this.
-
-     <
-        <a11>,
-        <a21,a22>,
-        <a31,a32,a33>>
-
-   Another alternative for representing a symmetric matrix is to store
-only the upper triangular portion. In this case, a list such as the
-following would be used.
-
-     <
-        <a11,a12,a13>,
-        <a22,a23>,
-        <a33>>
-
-The upper and lower triangular representations are distinguishable by
-whether or not the row lengths form an increasing sequence.
-
-   In addition to representing symmetric matrices, these upper and lower triangular
-forms are also appropriate for representing matrices whose remaining
-entries are zero, such as the factors in an LU decomposition.  
-
- -- Function: void *avm_matrix_of_list (int SQUARE, int
-          UPPER_TRIANGULAR, int LOWER_TRIANGULAR, int COLUMN_MAJOR,
-          list OPERAND, size_t ITEM_SIZE, list *MESSAGE, int *FAULT)
-     This function converts a matrix in one of the list representations
-     above to a contiguous array according to the given specifications.
-     The array can contain elements of any fixed sized type of size
-     ITEM_SIZE. The memory for it is allocated by this function and it
-     should be freed by the caller when no longer needed.
-
-     The input matrix is given by the list parameter, OPERAND, and its
-     format is described by the integer parameters SQUARE,
-     UPPER_TRIANGULAR, and LOWER_TRIANGULAR. The number of bytes
-     occupied by each entry is given by ITEM_SIZE.
-
-     To the extent these specifications are redundant, they are used for
-     validation. If any of the following conditions is not met, the
-     integer referenced by FAULT is assigned a non-zero value and a copy
-     of the message `<'bad matrix specification'>' represented as a
-     list is assigned to the list referenced by MESSAGE. Errors are
-     also possible due to insufficient memory.
-
-        * The OPERAND must be a list of lists of lists such that each
-          item of each item is has a length of ITEM_SIZE, and its items
-          consist of character representations as required by
-          `avm_value_of_list' (*note Primitive types::).
-
-        * If the lengths of the top level lists in the OPERAND form an
-          increasing sequence, the lower triangular representation is
-          assumed and the LOWER_TRIANGULAR parameter must have a
-          non-zero value.
-
-        * If the lengths of the top level lists in the OPERAND form a
-          decreasing sequence, the upper triangular representation is
-          assumed and the UPPER_TRIANGULAR parameter must have a
-          non-zero value.
-
-        * At least one of UPPER_TRIANGULAR or LOWER_TRIANGULAR must be
-          zero.
-
-        * If SQUARE has a non-zero value, then either all items of the
-          OPERAND must have the same length as the operand, or if it's
-          triangular, then the longest one must have the same length as
-          the operand.
-
-        * If the OPERAND is neither square nor a triangular form, all
-          items of it are required to have the same length.
-
-     The parameters UPPER_TRIANGULAR or LOWER_TRIANGULAR may be set to
-     non-zero values even if the OPERAND is not in one of the upper or
-     lower triangular forms discussed above. In this case, the OPERAND
-     must be square or rectangular (i.e., with all items the same
-     length), and the following interpretations apply.
-
-        * If UPPER_TRIANGULAR is non-zero, the diagonal elements and the
-          upper triangular portion of the input matrix are copied to
-          the output.  The lower triangle of the input is ignored and
-          the lower triangle of the output is left uninitialized.
-
-        * If LOWER_TRIANGULAR is non-zero, the diagonal elements and the
-          lower triangular portion of the input matrix are copied to
-          the output.  The upper triangle of the input is ignored and
-          the upper triangle of the output is left uninitialized.
-
-     The COLUMN_MAJOR parameter affects the form of the output array.
-     If it is zero, then each row of the input matrix is stored in a
-     contiguous block of memory in the output array, and if it is
-     non-zero, each column is stored contiguously.  The latter
-     representation is also known as Fortran order and may be required
-     by library functions written in Fortran.
-
-     In all cases when a triangular form is specified, part of the
-     output matrix is left uninitialized. The redundant entries may be
-     assigned if required by the `avm_reflect_matrix' function (*note
-     Related utility functions::).
-
- -- Function: list avm_list_of_matrix (void *MATRIX, int ROWS, int
-          COLS, size_t ITEM_SIZE, int *FAULT)
-     This function performs an inverse operation to
-     `avm_matrix_of_list' by taking the address of a matrix stored as a
-     contiguous array in the parameter MATRIX and constructing the list
-     representation as discussed above. Only square and rectangular
-     matrices in row major order are supported, but see
-     `avm_matrix_transposition' for a way to convert between row major and
-     column major order (*note Related utility functions::).
-
-     The parameters ROWS, COLS, and ITEM_SIZE describe the form of the
-     matrix. The list returned as a result will have a length of ROWS,
-     and each item will be a list of length COLS. Each item of the
-     result corresponds to a row of the matrix, and each item of the
-     items represents the an entry of the matrix as a list of length
-     ITEM_SIZE. These items could be passed to `avm_value_of_list', for
-     example, to obtain their values (*note Primitive types::).
-
-     Memory is allocated by this function to create the list, which can
-     be reclaimed by `avm_dispose' (*note Simple Operations::). If
-     there is insufficient memory, the integer referenced by FAULT is
-     assigned a non-zero value and the result returned is a list
-     representation of the message `<'memory overflow'>'. The error
-     message be reclaimed by the caller as well using `avm_dispose'.
-
-   A packed storage representation for symmetric square matrices and triangular
-matrices is of interest because it is used by some library functions,
-notably those in `LAPACK', to save memory and thereby accommodate
-larger problems. In this representation, column major order is assumed,
-and either the lower or the upper triangle of the matrix is not
-explicitly stored. For example, a lower triangular matrix whose list
-representation corresponds to
-
-     <
-        <a11>,
-        <a21,a22>,
-        <a31,a32,a33>,
-        <a41,a42,a43,a44>>
-
-would be stored according to the memory map 
-
-     [a11 a21 a31 a41 a22 a32 a42 a33 a43 a44]
-
-with `a11' at the beginning address. An upper triangular matrix
-
-     <
-        <a11,a12,a13,a14>,
-        <a22,a23,a24>,
-        <a33,a34>,
-        <a44>>
-
-would be stored according to the memory map
-
-     [a11 a12 a22 a13 a23 a33 a14 a24 a34 a44].
-
-   A couple of functions converting between list representations and
-packed array format are provided as described below.
-
- -- Function: void *avm_packed_matrix_of_list (int UPPER_TRIANGULAR,
-          list OPERAND, int N, size_t ITEM_SIZE, list *MESSAGE, int
-          *FAULT)
-     If the OPERAND is a list in one of the triangular forms explained
-     above, then the UPPER_TRIANGULAR parameter must be consisitent
-     with it, being non-zero if the OPERAND is upper triangular and
-     zero otherwise.
-
-     If the OPERAND is not in a triangular form, then each item of the
-     operand must be a list of length N. In this case, the
-     UPPER_TRIANGULAR parameter indicates which triangle of the operand
-     should be copied to the result, and the other triangle is ignored.
-
-     In either case, the operand must have a length of N, and the items
-     of its items must be lists of length ITEM_SIZE containing
-     character representations as required by `avm_value_of_list'
-     (*note Primitive types::).
-
-     If the input parameters are inconsistent or if there is
-     insufficient memory to allocate the result, the integer referenced
-     by FAULT is assigned a non-zero value, and the list referenced by
-     MESSAGE is assigned a copy of the list representation of `<'bad
-     matrix specification'>' or `<'memory overflow'>', respectively. A
-     non-empty message must be reclaimed by the caller using
-     `avm_dispose' (*note Simple Operations::).
-
-     If there are no errors, the result is a pointer to a packed array
-     representation of the OPERAND as explained above. The memory for
-     this result is allocated by this function and should be freed by
-     the caller when no longer required. The number of bytes allocated
-     will be ITEM_SIZE * (N * (N + 1))/2.
-
- -- Function: list avm_list_of_packed_matrix (int UPPER_TRIANGULER,void
-          *OPERAND, int N, size_t ITEM_SIZE, int *FAULT)
-     This function performs an inverse operation to that of
-     `avm_packed_matrix_of_list' given the address of a packed matrix
-     stored according to one of the memory maps discussed above. The
-     OPERAND parameter holds the address, the parameter N gives the
-     number of rows, and the UPPER_TRIANGULAR parameter specifies which
-     of the two possible memory maps to assume.
-
-     If there is sufficient memory, the result returned is a list in
-     one of the triangular forms described above, being upper
-     triangular if the UPPER_TRIANGULAR parameter is non-zero, with
-     values of length ITEM_SIZE taken from the array.
-
-     In the event of a memory overflow, the integer referenced by FAULT
-     is assigned a non-zero value and the result is a copy of the
-     message `<'memory overflow'>' represented as a list. A segmentation
-     fault is possible if this function is passed an invalid pointer or
-     dimension.
-
-
-File: avram.info,  Node: Related utility functions,  Prev: Two dimensional arrays,  Up: Type Conversions
-
-3.1.4.4 Related utility functions
-.................................
-
-A small selection of additional functions that are likely to be of use
-to developers concerned with matrix operations has been incorporated
-into the API to save the trouble of reinventing them, although doing so
-would be straightforward. They are described in this section without
-further motivation.
-
- -- Function: void *avm_matrix_transposition (void *MATRIX, int ROWS,
-          int COLS, size_t ITEM_SIZE)
-     This function takes the address of an arbitrary rectangular MATRIX
-     represented as a contiguous array (not a list) and transposes it
-     in place. That is, this function transforms an M by N matrix to an
-     N by M matrix by exchanging the I,Jth element with the J,Ith
-     element for all values of I and J.
-
-     The numbers of rows and columns in the MATRIX are given by the
-     parameters ROWS and COLS, respectively, and the size of the
-     entries in bytes is given by ITEM_SIZE.
-
-     The MATRIX is assumed to be in row major order, but this function
-     is applicable to matrices in column major order if the caller passes
-     the number of columns in ROWS and the number of rows in COLS.
-
-     Alternatively, this function can be seen as a conversion between
-     the row major and the column major representation of a matrix. An M
-     by N matrix in row major order will be transformed to the same M
-     by N matrix in column order, or from column order to row order.
-
-     A notable feature of this function is that it allocates no memory
-     so there is no possibility of a memory overflow even for very large
-     matrices, unlike a naive implementation which would involve making
-     a temporary copy of the matrix. There is a possibility of a
-     segmentation fault if invalid pointers or dimensions are given.
-
- -- Function: void *avm_matrix_reflection (int UPPER_TRIANGULAR, void
-          *MATRIX, int N, size_t ITEM_SIZE)
-     This function takes a symmetric square MATRIX of dimension N
-     containing entries of ITEM_SIZE bytes each and fills in the
-     redundant entries.
-
-     If UPPER_TRIANGULAR is non-zero, the upper triangle of the MATRIX
-     is copied to the lower triangle. If UPPER_TRIANGULAR is zero, the
-     lower triangular entries are copied to the upper triangle.
-
-     These conventions assume row major order. If the MATRIX is in column
-     major order, then the caller can either transpose it in place before
-     and after this function by `avm_matrix_transposition', or can
-     complement the value of UPPER_TRIANGULAR.
-
-     Note that this function may be unnecessary for `LAPACK' library
-     functions that ignore the redundant entries in a symmetric matrix,
-     because they can be left uninitialized, but it is included for the
-     sake of completeness.
-
- -- Function: list *avm_row_number_array (counter M, int *FAULT)
-     A fast, memory efficient finite map from natural numbers to their
-     list representations can be obtained by using this function as an
-     alternative to `avm_natural' or `avm_recoverable_natural' when
-     repeated evaluations of numbers within a known range are required
-     (*note Simple Operations:: and *note Recoverable Operations::).
-
-     Given a positive integer M, this function allocates and returns an
-     array of M lists whose Ith entry is the list representation of the
-     number I as explained in *note Representation of Numeric and
-     Textual Data::.
-
-     An amount of memory proportional to M is used for the array and
-     its contents. If there is insufficient memory, a `NULL' value is
-     returned and the integer referenced by FAULT is set to a non-zero
-     value.
-
- -- Function: void avm_dispose_rows (counter M, list *ROW_NUMBER)
-     This function reclaims an array ROW_NUMBER of size M returned by
-     `avm_row_number_array', and its contents if any. A `NULL' pointer
-     is allowed as the ROW_NUMBER parameter and will have no effect,
-     but an uninitialized pointer will cause a segmentation fault.
-
- -- Function: void avm_initialize_matcon ();
-     This function initializes some static variables used by the
-     functions declared in `matcon.h' and should be called before any
-     of them is called or they might not perform according to
-     specifications.
-
- -- Function: void avm_count_matcon ();
-     This function frees the static variables allocated by
-     `avm_initialize_matcon' and is used to verify the absence of
-     memory leaks. It should be called after the last call to any
-     functions in `matcon.h' but before `avm_count_lists' if the latter
-     is being used (*note Simple Operations::).
-
-
-File: avram.info,  Node: Comparison,  Next: Deconstruction Functions,  Prev: Type Conversions,  Up: Lists
-
-3.1.5 Comparison
-----------------
-
-The file `compare.h' contains a few function declarations pertaining to
-the computation of the comparison predicate described in *note
-Compare::. Some of the work is done by static functions in `compare.c'
-that are not recommended entry points to the library.
-
- -- Function: void avm_initialize_compare ()
-     This function should be called once before the first call to
-     `avm_comparison', as it initializes some necessary internal data
-     structures.
-
- -- Function: void avm_count_compare ()
-     This function can be used to check for memory leaks, by detecting
-     unreclaimed storage at the end of a run. The data structures
-     relevant to comparison that could be reported as unreclaimed are
-     known as "decision" nodes, but these should always be handled
-     properly by the library without intervention. If `avm_count_lists'
-     is also being used, the call to this function must precede it.
-
- -- Function: list avm_comparison (list OPERAND, int *FAULT)
-     This function takes a list operand representing a pair of trees and
-     returns a list representing the logical value of their equality.
-     If the operand is `NULL', a message of invalid comparison is
-     returned and the `*FAULT' is set to a non-zero value. If the
-     `head' of the operand is unequal to the `tail', a `NULL' value is
-     returned. If they are equal, a list is returned whose `head' and
-     `tail' are both `NULL'. The equality in question is structural rather
-     than pointer equality.
-
-     The list operand to this function may be modified by this
-     function, but not in a way that should make any difference to a
-     client program. If two lists are found to be equal, or if even two
-     sublists are found to be equal in the course of the comparison,
-     one of them is deallocated and made to point to the other. This
-     action saves memory and may make subsequent comparisons faster.
-     However, it could disrupt client programs that happen to be
-     holding stale list pointers.
-
-     As of `avram' version 0.6.0, a logical field called
-     `discontiguous' has been added to the `node' record type declared
-     in `lists.h', which is checked by the comparison function. If a
-     list node has its `discontiguous' field set to a non-zero value,
-     and if it also has a non-null `value' field, then it won't be
-     deallocated in the course of comparison even if it is found to be
-     equal to something else. This feature can be used by client
-     modules to create lists in which value fields refer to data
-     structures that are meant to exist independently of them. See
-     `mpfr.c' for an example.
-
-     This function is likely to have better performance and memory
-     usage than a naive implementation of comparison, for the above
-     reasons and also because of optimizations pertaining to comparison
-     of lists representing characters. Moreover, it is not subject to
-     stack overflow exceptions because it is not written in a recursive
-     style.
-
- -- Function: list avm_binary_comparison (list LEFT_OPERAND, list
-          RIGHT_OPERAND, int *FAULT);
-     This function is the same as `avm_comparison' except that it
-     allows the left and right operands to be passed as separate lists
-     rather than taking them from the `head' and the `tail' of a single
-     list.
-
-
-File: avram.info,  Node: Deconstruction Functions,  Next: Indirection,  Prev: Comparison,  Up: Lists
-
-3.1.6 Deconstruction Functions
-------------------------------
-
-A fast native implementation of the deconstruction operation is provided by
-the functions declared in `decons.h'.
-
- -- Function: void avm_initialize_decons ()
-     This should be called prior to the first call to
-     `avm_deconstruction', so as to initialize some necessary internal
-     data structures. Results will be undefined if it is not.
-
- -- Function: void avm_count_decons ()
-     For ecologically sound memory management, this function should be
-     called at the end of a run to verify that there have been no leaks
-     due to the deconstruction functions, which there won't be unless
-     the code in `decons.c' has been ineptly modified. An error message
-     to the effect of unreclaimed "points" could be the result
-     otherwise.
-
- -- Function: list avm_deconstruction (list POINTER, list OPERAND, int
-          *FAULT)
-     Deconstructions are performed by this function, as described in
-     *note Field::. In the `silly' program notation (*note A Simple
-     Lisp Like Language::), this function computes the value of
-     ([[`field']] `POINTER') `OPERAND'.
-
-     For example, using the fixed list `avm_join(NULL,NULL)' as the
-     `POINTER' parameter will cause a copy of the operand itself to be
-     returned as the result. A `POINTER' equal to
-     `avm_join(NULL,avm_join(NULL,NULL))' will cause a copy of
-     `operand->tail' to be returned, and so on. A `NULL' `POINTER'
-     causes an internal error.
-
-     If the deconstruction is invalid, as in the case of the tail of an
-     empty list, the invalid deconstruction error message is returned
-     as the result, and the `*FAULT' parameter is set to a non-zero
-     value.  The `*FAULT' parameter is also set to a non-zero value in
-     the event of a memory overflow, and the memory overflow message is
-     returned.
-
-
-File: avram.info,  Node: Indirection,  Next: The Universal Function,  Prev: Deconstruction Functions,  Up: Lists
-
-3.1.7 Indirection
------------------
-
-In some cases it is necessary to build a tree from the top down rather than
-from the bottom up, when it is not known in advance what's on the
-bottom. Although the `list' type is a pointer itself, these situations
-call for a type of pointers to lists, which are declared as the
-`branch' type in `branches.h'. For example, if `b' is declared as a
-`branch' and `l' is declared as a `list', it would be possible to write
-`b = &l'.
-
-   Facilities are also provided for maintaining queues of branches,
-which are declared as the `branch_queue' type. This type is a pointer to
-a structure with two fields, `above' and `following', where `above' is
-a `branch' and `following' is a `branch_queue'.
-
-   These functions are used internally elsewhere in the library and
-might not be necessary for most client programs to use directly.
-
- -- Function: void avm_initialize_branches ()
-     This must be done once before any of the other branch related
-     functions is used, and creates some internal data structures.
-     Results of the other functions are undefined if this one isn't
-     called first.
-
- -- Function: void avm_count_branches ()
-     This function can be used at the end of a run to detect unreclaimed
-     storage used for branches or branch queues. If any storage remains
-     unreclaimed, a message about unreclaimed branches is written to
-     standard error.
-
- -- Function: void avm_anticipate (branch_queue *FRONT, branch_queue
-          *BACK, branch OPERAND)
-     This function provides a simple queueing facility for branches.
-     Similarly to the case with `avm_enqueue', `front' and `back'
-     should be initialized to `NULL' before the first call. Each call
-     to this function will enqueue one item to the back, assuming
-     enough memory is available, as the following example shows.
-
-          front = NULL;
-          back = NULL;
-          l = avm_join(NULL,NULL);
-          anticipate(&front,&back,&(l->head));
-          anticipate(&front,&back,&(l->tail));
-
-     After the above code is executed, these postconditions will hold.
-
-          front->above == &(l->head)
-          front->following->above == &(l->tail)
-          front->following == back
-          back->following == NULL
-
-     The name "anticipate" is used because ordinarily the queue contains
-     positions in a tree to be filled in later. As usual, only unshared
-     trees should be modified in place.
-
- -- Function: void avm_recoverable_anticipate (branch_queue *FRONT,
-          branch_queue *BACK, branch OPERAND, int *FAULT)
-     This function is similar to `avm_anticipate', except that it will
-     not exit with an error message in the event of an overflow error,
-     but will simply set `*FAULT' to a non-zero value and return to the
-     caller. If an overflow occurs, nothing about the queue is changed.
-
- -- Function: void avm_enqueue_branch (branch_queue *FRONT,
-          branch_queue *BACK, int RECEIVED_BIT)
-     A slightly higher level interface to the `avm_anticipate' function
-     is provided by this function, which is useful for building a tree
-     from a string of input bits in a format similar to the one
-     described in *note Concrete Syntax::.
-
-     This function should be called the first time with `front' and
-     `back' having been initialized to represent a queue containing a single
-     branch pointing to a list known to the caller. The list itself
-     need not be allocated or initialized. An easy way of doing so
-     would be the following.
-
-          front = NULL;
-          back = NULL;
-          avm_anticipate(&front,&back,&my_list);
-
-     On each call to `avm_enqueue_branch', the `RECEIVED_BIT' parameter
-     is examined. If it is zero, nothing will be added to the queue,
-     the list referenced by the front branch will be assigned `NULL',
-     and the front branch will be removed from the queue. If
-     `RECEIVED_BIT' is a non-zero value, the list referenced by the
-     front branch will be assigned to point to a newly created unshared
-     list node, and two more branches will be appended to the queue. The
-     first branch to be appended will point to the head of the newly
-     created list node, and the second branch to be appended will point
-     to the tail.
-
-     If the sequence of bits conforms to the required concrete syntax,
-     this function can be called for each of them in turn, and at the
-     end of the sequence, the queue will be empty and the list
-     referenced by the initial branch (i.e., `my_list') will be the one
-     specified by the bit string. If the sequence of bits does not
-     conform to the required concrete syntax, the error can be detected
-     insofar as the emptying of the queue will not coincide exactly
-     with the last bit.
-
-     The caller should check for the queue becoming prematurely empty
-     due to syntax errors, because no message is reported by
-     `avm_enqueue_branch' in that event, and subsequent attempts to
-     enqueue anything are ignored. However, in the event of a memory
-     overflow, an error message is reported and the process is
-     terminated.
-
- -- Function: void avm_recoverable_enqueue_branch (branch_queue *FRONT,
-          branch_queue *BACK, int RECEIVED_BIT, int *FAULT)
-     This function is similar to `avm_enqueue_branch' but will leave
-     error handling to the caller in the event of insufficient memory to
-     enqueue another branch. Instead of printing an error message and
-     exiting, it will dispose of the queue, set the `FAULT' flag to a
-     non-zero value, and return. Although the queue will be reclaimed,
-     the lists referenced by the branches in it will persist. The list
-     nodes themselves can be reclaimed by disposing of the list whose
-     address was stored originally in the front branch.
-
- -- Function: void avm_dispose_branch_queue (branch_queue FRONT)
-     This function deallocates a branch queue by chasing the `following'
-     fields in each one. It does nothing to the lists referenced by the
-     branches in the queue.
-
-     Rather than using `free' directly, client programs should use this
-     function for deallocating branch queues, because it allows better
-     performance by interacting with a local internal cache of free
-     memory, and because it performs necessary bookkeeping for
-     `avm_count_branches'.
-
- -- Function: void avm_dispose_branch (branch_queue OLD)
-     This disposes of a single branch queue node rather than a whole
-     queue.  Otherwise, the same comments as those above apply.
-
-
-File: avram.info,  Node: The Universal Function,  Prev: Indirection,  Up: Lists
-
-3.1.8 The Universal Function
-----------------------------
-
-A function computing the result of the invisible operator used to
-specify the virtual code semantics in *note Virtual Code Semantics::, is
-easily available by way of a declaration in `apply.h'.
-
- -- Function: void avm_initialize_apply ()
-     This function should be called by the client program at least once
-     prior to the first call to `avm_apply' or `avm_recoverable_apply'.
-     It causes certain internal data structures and error message texts
-     to be initialized.
-
- -- Function: void avm_count_apply ()
-     This function should be used at the end of a run for the purpose of
-     detecting and reporting any unreclaimed storage associated with
-     functions in this section. If the function `avm_count_lists()' is
-     also being used, it should be called after this one.
-
- -- Function: list avm_apply (list OPERATOR, list OPERAND)
-     This is the function that evaluates the operator used to describe
-     the virtual code semantics. For example, the value of `F X' can be
-     obtained as the result returned by `avm_apply(F,X)'.
-
-     Both parameters to this function are deallocated unconditionally
-     and should not be referenced again by the caller. If the
-     parameters are needed subsequently, then only copies of them
-     should be passed to `avm_apply' using `avm_copied'.
-
-     This function is not guaranteed to terminate, and may cause a
-     memory overflow error. In the event of an exceptional condition,
-     the error message is written to standard error and the program is
-     halted. There is no externally visible distinction between
-     different levels of error conditions.
-
- -- Function: list avm_recoverable_apply (list OPERATOR, list OPERAND,
-          int *FAULT)
-     This function is similar to `avm_apply' but leaves the
-     responsibility of error handling with the caller. If any overflow
-     or exceptional condition occurs, the result returned is a list
-     representing the error message, and the `FAULT' flag is set to a
-     non-zero value. This behavior contrasts with that of `avm_apply',
-     which will display the message to standard error and kill the
-     process.
-
-
-File: avram.info,  Node: Characters and Strings,  Next: File Manipulation,  Prev: Lists,  Up: Library Reference
-
-3.2 Characters and Strings
-==========================
-
-If a C program is to interact with a virtual code application by
-exchanging text, it uses the representation for characters described in
-*note Character Table::.  This convention would be inconvenient without
-a suitable API, so the functions in this section address the need. These
-functions are declared in the header file `chrcodes.h'.
-
-   Some of these functions have two forms, with one of them having the
-word `standard' as part of its name. The reason is to cope with
-multiple character encodings. Versions of `avram' prior to 0.1.0 used a
-different character encoding than the one documented in *note Character
-Table::. The functions described in *note Version Management:: can be
-used to select backward compatible operation with the older character
-encoding. The normal forms of the functions in this section will use
-the older character set if a backward compatibility mode is indicated,
-whereas the standard forms will use the character encoding documented
-in *note Character Table:: regardless.
-
-   Standard encodings should always be assumed for library and function names
-associated with the `library' combinator (*note Calling existing
-library functions::), and for values of lists defined by
-`avm_list_of_value' (*note Primitive types::), but version dependent
-encodings should be used for all other purposes such as error messages.
-Alternatively, the normal version dependent forms of the functions
-below can be used safely in any case if backward compatibility is not
-an issue. This distinction is viewed as a transitional feature of the
-API that will be discontinued eventually when support for the old
-character set is withdrawn and the `standard' forms are be removed.
-
- -- Function: list avm_character_representation (int CHARACTER)
-
- -- Function: list avm_standard_character_representation (int CHARACTER)
-     This function takes an integer character code and returns a copy of
-     the list representing it, as per the table in *note Character
-     Table::. Because the copy is shared, no memory is allocated by this
-     function so there is no possibility of overflow. Nevertheless, it
-     is the responsibility of the caller dispose of the list when it is
-     no longer needed by `avm_dispose', just as if the copy were not
-     shared (*note Simple Operations::). For performance reasons, this
-     function is implemented as a macro. If the argument is outside the
-     range of zero to 255, it is masked into that range.
-
- -- Function: int avm_character_code (list OPERAND)
-
- -- Function: int avm_standard_character_code (list OPERAND)
-     This function takes a list as an argument and returns the
-     corresponding character code, as per *note Character Table::. If
-     the argument does not represent any character, a value of `-1' is
-     returned.
-
- -- Function: list avm_strung (char *STRING)
-
- -- Function: list avm_standard_strung (char *STRING)
-     This function takes a pointer to a null terminated character
-     string and returns the list obtained by translating each character
-     into its list representation and enqueuing them together. Memory
-     needs to be allocated for the result, and if there isn't enough
-     available, an error message is written to standard error and the
-     process is terminated. This function is useful to initialize lists
-     from hard coded strings at the beginning of a run, as in this
-     example.
-
-          hello_string = avm_strung("hello");
-
-     This form initializes a single string, but to initialize a one line
-     message suitable for writing to a file, it would have to be a list
-     of strings, as in this example.
-
-          hello_message = avm_join(avm_strung("hello"),NULL);
-
-     The latter form is used internally by the library for initializing
-     most of the various error messages that can be returned by other
-     functions.
-
- -- Function: list avm_recoverable_strung (char *STRING, int *FAULT);
-
- -- Function: list avm_recoverable_standard_strung (char *STRING, int
-          *FAULT);
-     This function is like `avm_strung' except that if it runs out of
-     memory it sets the integer referenced by FAULT to a non-zero value
-     and returns instead of terminating the process.
-
- -- Function: char *avm_unstrung (list STRING, list *MESSAGE, int
-          *FAULT)
-
- -- Function: char *avm_standard_unstrung (list STRING, list *MESSAGE,
-          int *FAULT)
-     This function performs an inverse operation to
-     `avm_recoverable_strung', taking a list representing a character
-     string to the character string in ASCII null terminated form as per
-     the standard C representation. Memory is allocated for the result
-     by this function which should be freed by the caller.
-
-     In the event of an exception, the integer referenced by `fault' is
-     assigned a non-zero value and an error message represented as a
-     list is assigned to the list referenced by `message'. The error
-     message should be reclaimed by the caller with `avm_dispose'
-     (*note Simple Operations:: if it is non-empty. Possible error
-     messages are `<'memory overflow'>', `<'counter overflow'>', and
-     `<'invalid text format'>'.
-
- -- Function: list avm_scanned_list (char *STRING)
-     An application that makes use of virtual code snippets or data
-     that are known at compile time can use this function to initialize
-     them. The argument is a string in the format described in *note
-     Concrete Syntax::, and the result is the list representing it. For
-     example, the program discussed in *note Example Script:: could be
-     hard coded into a C program by pasting the data from its virtual
-     code file into an expression of this form.
-
-          cat_program = avm_scanned_list("sKYQNTP\\");
-
-     Note that the backslash character in the original data has to be
-     preceded by an extra backslash in the C source, because backslashes
-     usually mean something in C character constants.
-
-     The `avm_scanned_list' function needs to allocate memory. If there
-     isn't enough memory available, it writes a message to standard
-     error and causes the process to exit.
-
- -- Function: list avm_multiscanned (char **STRINGS)
-     Sometimes it may be useful to initialize very large lists from
-     strings, but some C compilers impose limitations on the maximum
-     length of a string constant, and the ISO standard for C requires
-     only 512 bytes.  This function serves a similar purpose to
-     `avm_scanned_list', but allows the argument to be a pointer to a
-     null terminated array of strings instead of one long string,
-     thereby circumventing this limitation in the compiler.
-
-          char *code[] = {"sKYQ","NTP\\",NULL};
-          ...
-          cat_program = avm_multiscanned(code);
-
-     If there is insufficient memory to allocate the list this function
-     needs to create, it causes an error message to be written to
-     standard error, and then kills the process.
-
- -- Function: char* avm_prompt (list PROMPT_STRINGS)
-     This function takes a list representing a list of character
-     strings, and returns its translation to a character string with
-     the sequence 13 10 used as a separator. For example, given a tree
-     of this form
-
-          some_message = avm_join(
-             avm_strung("hay"),
-             avm_join(
-                avm_strung("you"),
-                NULL));
-
-     the result returned by `prompt_strings(some_message)' would be a
-     pointer to a null terminated character string equivalent to the C
-     constant `"hay\13\10you"'.
-
-     Error messages are printed and the process terminated in the event
-     of either a memory overflow or an invalid character representation.
-
-     This function is used by `avram' in the evaluation of interactive virtual
-     code applications, whose output has to be compared to the output
-     from a shell command in this format. The separator is chosen to be
-     compatible with the `expect' library.
-
- -- Function: char* avm_recoverable_prompt (list PROMPT_STRINGS, list
-          *MESSAGE, int *FAULT)
-     This function performs the same operation as `avm_prompt' but
-     allows the caller to handle exceptional conditions. If an exception
-     such as a memory overflow occurs, the integer referenced by
-     `fault' is assigned a non-zero value and a representation of the
-     error message as a list of strings is assigned to the list
-     referenced by `message'.
-
-     This function is used to by `avram' to evaluate the `interact'
-     combinator (*note Interaction combinator::), when terminating in
-     the event of an error would be inappropriate.
-
- -- Function: void avm_initialize_chrcodes ()
-     This function has to be called before any of the other character
-     conversion functions in this section, or else their results are
-     undefined. It performs the initialization of various internal data
-     structures.
-
- -- Function: void avm_count_chrcodes ()
-     This function can be called at the end of a run, after the last
-     call to any of the other functions in this section, but before
-     `avm_count_lists' if that function is also being used. The purpose
-     of this function is to detect and report memory leaks. If any
-     memory associated with any of these functions has not been
-     reclaimed by the client program, a message giving the number of
-     unreclaimed lists will be written to standard error.
-
-
-File: avram.info,  Node: File Manipulation,  Next: Invocation,  Prev: Characters and Strings,  Up: Library Reference
-
-3.3 File Manipulation
-=====================
-
-The functions described in this section provide an interface between
-virtual code applications and the host file system by converting
-between files or file names and their representations as lists. These
-conversions are necessary when passing a file to a virtual code
-application, or when writing a file received in the result of one.
-
-* Menu:
-
-* File Names::
-* Raw Files::
-* Formatted Input::
-* Formatted Output::
-
-
-File: avram.info,  Node: File Names,  Next: Raw Files,  Prev: File Manipulation,  Up: File Manipulation
-
-3.3.1 File Names
-----------------
-
-A standard representation is used by virtual code applications for the path
-names of files, following the description in *note Input Data
-Structure::. The functions and constants declared in `fnames.h' provide
-an API for operating on file names in this form.
-
- -- Function: list avm_path_representation (char *PATH)
-     If a C program is to invoke a virtual code application and pass a
-     path name to it as a parameter, this function can be used to
-     generate the appropriate representation from a given character
-     string.
-
-          conf_path = avm_path_representation("/etc/resolve.conf");
-
-     In this example, `conf_path' is a `list'.  For potentially better
-     portability, a C program can use the character constant
-     `avm_path_separator_character' in place of the slashes in hard
-     coded path names.
-
-     Other useful constants are `avm_current_directory_prefix' as a portable
-     replacement for `"./"', as well as `avm_parent_directory_prefix'
-     instead of `"../"'. There is also `avm_root_directory_prefix' for
-     `"/"'. These three constants are null terminated strings, unlike
-     `avm_path_separator_character', which is a character.
-
-     If a `NULL' pointer is passed as the `PATH', a `NULL' list is
-     returned, which is the path representation for standard input or
-     standard output. If the address of an empty string is passed to
-     this function as the `PATH', the list of the empty string will be
-     returned, which is the path representation for the root directory.
-     Trailing path separators are ignored, so `"/"' is the same as the
-     empty string.
-
-     Some memory needs to be allocated for the result of this function.
-     If the memory is not available, an error message is written to
-     standard error and the process is terminated.
-
- -- Function: list avm_date_representation (char *PATH)
-     This function is essentially a wrapper around the standard
-     `ctime_r' function that not only gets the time stamp for a file at
-     a given path, but transforms it to a list representation according
-     to *note Character Table::. It needs to allocate memory for the
-     result and will cause the program to exit with an error message if
-     there is not enough memory available.
-
-     The time stamp will usually be in a format like `Sun Mar 4 10:56:40
-     GMT 2001'. If for some reason the time stamp can not be obtained,
-     the result will be a representation of the string `unknown date'.
-
- -- Function: char* avm_path_name (list PATH)
-     This function is the inverse of `avm_path_representation', in that
-     it takes a list representing a path to the path name expressed as
-     a character string. This function can be used in C programs that
-     invoke virtual code applications returning paths as part of their
-     results, so that the C program can get the path into a character
-     string in order to open the file.
-
-     If the `PATH' parameter is `NULL', a `NULL' pointer is returned as
-     the result. The calling program should check for a `NULL' result
-     and interpret it as the path to standard input or standard output.
-
-     The memory needed for the character string whose address is
-     returned is allocated by this function if possible. The given
-     `PATH' is not required to be consistent with the host file system,
-     but it is required to consist of representations of non-null
-     printable characters or spaces as lists per *note Character
-     Table::.  In the event of any error or overflow, control does not
-     return to the caller, but an error message is printed and the
-     program is aborted. The possible error messages from this function
-     are the following.  
-
-        * `PROGRAM-NAME: counter overflow (code NN)'
-
-        * `PROGRAM-NAME: memory overflow (code NN)'
-
-        * `PROGRAM-NAME: null character in file name'
-
-        * `PROGRAM-NAME: bad character in file name'
-
-        * `PROGRAM-NAME: invalid file name (code NN)'
-
-
- -- Function: void avm_initialize_fnames ()
-     A few housekeeping operations relevant to internal data structures
-     are performed by this function, making it necessary to be called
-     by the client program prior to using any of the other ones.
-
- -- Function: void avm_count_fnames ()
-     This function can be used after the the last call to any of the
-     other functions in this section during a run, and it will detect
-     memory leaks that may be attributable to code in these functions
-     or misuse thereof. If any unreclaimed storage remains when this
-     function is called, a warning message will be written to standard
-     error. If the function `avm_count_lists' is also being used by the
-     client, it should be called after this one.
-
-
-File: avram.info,  Node: Raw Files,  Next: Formatted Input,  Prev: File Names,  Up: File Manipulation
-
-3.3.2 Raw Files
----------------
-
-Some low level operations involving lists and data files are provided by
-these functions, which are declared in the header file `rawio.h'.
-
- -- Function: list avm_received_list (FILE *OBJECT, char *FILENAME)
-     This function is a convenient way of transferring data directly
-     from a raw format file into a list in memory. It might typically
-     be used to load the virtual code for an application that has been
-     written to a file by a compiler.
-
-    `OBJECT'
-          is the address of a file which should already be open for
-          reading before this function is called, and will be read from
-          its current position.
-
-    `FILENAME'
-          should be set by the caller to the address of a null
-          terminated string containing the name of the file, but is not
-          used unless it needs to be printed as part of an error
-          message. If it is a null pointer, standard input is assumed.
-
-     The result returned is a list containing data read from the file.
-
-     The file format is described in *note File Format::. The preamble
-     section of the file, if any, is ignored. If the file ends
-     prematurely or otherwise conflicts with the format, the program is
-     aborted with a message of 
-
-          `PROGRAM-NAME: invalid raw file format in FILENAME'
-
-     written to standard error. The program will also be aborted by this
-     function in the event of a memory overflow.
-
-     The file is left open when this function returns, and could
-     therefore be used to store other data after the end of the list.
-     The end of a list is detected automatically by this function, and
-     it reads no further, leaving the file position on the next
-     character, if any.
-
- -- Function: void avm_send_list (FILE *REPOSITORY, list OPERAND, char
-          *FILENAME)
-     This function can be used to transfer data from a list in memory
-     to a file, essentially by implementing the printing algorithm
-     described in *note Bit String Encoding::.
-
-    `REPOSITORY'
-          is the address of a file already open for writing, to which
-          the data are written starting from the current position.
-
-    `OPERAND'
-          is the list containing the data to be written
-
-    `FILENAME'
-          is the address of a null terminated string containing the
-          name of the file that will be reported in an error message if
-          necessary.
-
-     No preamble section is written by this function, but one could be written
-     to the file by the caller prior to calling it.  Error messages are
-     possible either because of i/o errors or because of insufficient
-     memory. I/o errors are not fatal and will result only in a warning
-     message being printed to standard error, but a memory overflow will
-     cause the process to abort. An i/o error message reported by this
-     function would be of the form 
-
-          `PROGRAM-NAME: can't write to FILENAME'
-
-     followed by the diagnostic obtained from the standard `strerror' function
-     if it exists on the host platform. The file is left open when this
-     function returns.
-
- -- Function: void avm_initialize_rawio ()
-     This function initializes some necessary data structures for the
-     functions in this section, and should be called prior to them at
-     the beginning of a run.
-
- -- Function: void avm_count_rawio ()
-     This function does nothing in the present version of the library,
-     but should be called after the last call to all of the other
-     functions in this section in order to maintain compatibility with
-     future versions of the library. Future versions may decide to use
-     this function to do some cleaning up of local data structures.
-
-
-File: avram.info,  Node: Formatted Input,  Next: Formatted Output,  Prev: Raw Files,  Up: File Manipulation
-
-3.3.3 Formatted Input
----------------------
-
-Some functions relating to the input of text files or data files with
-preambles are declared in the header file `formin.h'. The usage of
-these functions is as follows.
-
- -- Function: list avm_preamble_and_contents (FILE *SOURCE, char
-          *FILENAME)
-     This function loads a file of either text or data format into
-     memory.
-
-    `SOURCE'
-          should be initialized by the caller as the address of a file
-          already open for reading that will be read from its current
-          position.
-
-    `FILENAME'
-          should be set by the caller to the address of a null
-          terminated character string giving the name of the file that
-          will be used if an i/o error message needs to be written
-          about it. If it is a `NULL' pointer, standard input is
-          assumed.
-
-     The result returned by the function will be a list whose `head' represents
-     the preamble of the file and whose `tail' represents the contents.
-     As a side effect, the input file will be closed, unless the
-     `FILENAME' parameter is `NULL'.
-
-     If the file conforms to the format described in *note File
-     Format::, the preamble is a list of character strings. In the
-     result returned by the function, the `head' field will be a list
-     with one item for each line in the file, and each item will be a
-     list of character representations as in *note Character Table::,
-     but with the leading hashes stripped. The `tail' will be the list
-     specified by remainder of the file according to *note Concrete
-     Syntax::.  If the file has an empty preamble but is nevertheless a
-     data file, the `head' will be a list whose `head' and `tail' are
-     both `NULL'.
-
-     If the file does not conform to the format in *note File Format::,
-     then the `head' of the result will be `NULL', and the `tail' will
-     be a list of lists of character representations, with one for each
-     line.
-
-     Whether or not the file conforms to the format is determined on
-     the fly, so this function is useful for situations in which the
-     format is not known in advance. The conventions regarding the
-     preamble and contents maintained by this function are the same as
-     those used by virtual code applications as described in *note
-     Standard Output Representation:: and *note Input Data Structure::.
-
-     The characters used for line breaks are not explicitly represented
-     in the result. Depending on the host system, line breaks in text
-     files may be represented either by the character code 10, or by
-     the sequence 13 10. However, in order for the library to deal with
-     binary files in a portable way, a line break always corresponds to
-     a 10 as far as this function is concerned regardless of the host,
-     and a 13 is treated like any other character. Hence, if this
-     function were used on binary files that happened to have some 10s
-     in them, the exact contents of a file could be reconstructed
-     easily by appending a 10 to all but the last line and flattening
-     the list.
-
-     A considerable amount of memory may need to be allocated by this
-     function in order to store the file as a list. If not enough
-     memory is available, the function prints an error message to
-     standard error and aborts rather than returning to the caller.
-     However, i/o errors are not fatal, and will cause the function to
-     print a warning but attempt to continue.
-
- -- Function: list avm_load (FILE *SOURCE, char *FILENAME, int RAW)
-     Similarly to `avm_preamble_and_contents', this function also loads
-     a file into memory, but the format is specified in advance.
-
-    `SOURCE'
-          should be set by the caller to the address of an already open
-          file for reading, which will be read from its current
-          position.
-
-    `FILENAME'
-          should be initialized by the caller as a pointer to a null
-          terminated string containing the name of the file that will
-          be reported to the user in the event of an error reading from
-          it. If it is a `NULL' pointer, standard input is assumed.
-
-    `RAW'
-          is set to a non-zero value by the caller to indicate that the
-          file is expected to conform to the format in *note File
-          Format::. If the file is an ordinary text file, then it
-          should be set to zero.
-
-     In the case of a data file, which is when `RAW' is non-zero, the
-     result returned by this function will be a list representing the
-     data section of the file and ignoring the preamble. In the case of
-     a text file, the result will be a list of lists of character
-     representations as per *note Character Table::, with one such list
-     for each line in the file. Similar comments about line breaks to
-     those mentioned under `avm_preamble_and_contents' are applicable.
-
-     As a side effect of this function, the `SOURCE' file will be
-     closed, unless the `FILENAME' is a `NULL' pointer.
-
-     This function is useful when the type of file is known in advance.
-     If a data file is indicated by the `RAW' parameter but the format
-     is incorrect, an error message is reported and the process
-     terminates. The error message will be of the form
-
-          `PROGRAM-NAME: invalid raw file format in FILENAME'
-
-     Alternatively, if a text file is indicated by the `RAW' parameter,
-     then no attempt is made to test whether it could be interpreted as
-     data, even if it could be. This behavior differs from that of
-     `avm_preamble_and_contents', where a bad data file format causes
-     the file to be treated as text, and a valid data file format, even
-     in a "text" file, causes it to be treated as data.
-
-     Memory requirements for this function are significant and will
-     cause the process to abort with an error message in the event of
-     insufficient free memory. Messages pertaining to i/o errors are
-     also possible and are not fatal.
-
- -- Function: void avm_initialize_formin ()
-     This function should be called before either of the other
-     functions in this section is called, as it initializes some
-     necessary static data structures. Results of the other functions
-     are undefined if this one is not called first.
-
- -- Function: void avm_count_formin ()
-     This function should be called after the last call to any of the
-     other functions in this section, as it is necessary for cleaning
-     up and reclaiming some internal data. If any storage remains
-     unreclaimed due to memory leaks in these functions or to misuse of
-     them, a warning message is written to standard error. If the
-     function `avm_count_lists' is also being used by the client
-     program, it should be called after this one.
-
-
-File: avram.info,  Node: Formatted Output,  Prev: Formatted Input,  Up: File Manipulation
-
-3.3.4 Formatted Output
-----------------------
-
-The following functions pertaining to the output of text files or data
-files with preambles are declared in the header file `formout.h'.
-
- -- Function: void avm_output (FILE *REPOSITORY, char *FILENAME, list
-          PREAMBLE, list CONTENTS, int TRACE_MODE)
-     This function writes a either a text file or a data file in the
-     format described in *note File Format::. The parameters have these
-     interpretations.
-
-    `REPOSITORY'
-          is the address of a file opened for writing by the caller,
-          that will be written from its current position.
-
-    `FILENAME'
-          is the address of a null terminated character string set by
-          the caller to be the name of the file that will be reported
-          to the user in the event of an i/o error.
-
-    `PREAMBLE'
-          is `NULL' in the case of a text file, but a list of character
-          string representations as per *note Character Table::, in the
-          case of a data file. If a data file has is to be written with
-          an empty preamble, then this list should have a `NULL' `head'
-          and a `NULL' `tail'.
-
-    `CONTENTS'
-          is either a list of character string representations in the
-          case of a text file, or is an unconstrained list in the case
-          of a data file.
-
-    `TRACE_MODE'
-          may be set to a non-zero value by the caller to request that
-          everything written to a text file should be echoed to
-          standard output. It is ignored in the case of a data file.
-
-     The effect of calling this function is to write the preamble and
-     contents to the file in the format indicated by the preamble. The
-     file is left open when this function returns.
-
-     Line breaks are always written as character code 10, not as 13 10, regardless
-     of the convention on the host system, so that files written by
-     this function can be reliably read by other functions in the
-     library.
-
-     Leading hashes are automatically added to the beginning of the
-     lines in the preamble, except where they are unnecessary due to a
-     continuation character on the previous line. This action enforces
-     consistency with the file format, ensuring that anything written
-     as a data file can be read back as one. The hashes are stripped
-     automatically when the file is read by `avm_preamble_and_contents'.
-
-     Another feature of this function is that it will mark any output
-     file as executable if it is a data format file with a prelude
-     whose first character in the first line is an exclamation point.
-     This feature makes it easier for a compiler implemented in virtual
-     code to generate executable shell scripts directly.
-
-     A fatal error is reported if any of the data required to be a
-     character representation is not listed in the *note Character
-     Table::. A fatal error can also be caused by a memory overflow.
-     Possible error messages are the following.  
-
-        * `PROGRAM-NAME: invalid output preamble format'
-
-        * `PROGRAM-NAME: invalid text format'
-
-        * `PROGRAM-NAME: can't write to FILENAME'
-
-     In the last case, the error message will be followed by an
-     explanation furnished by the standard `strerror' function if
-     available.
-
- -- Function: void avm_output_as_directed (list DATA, int
-          ASK_TO_OVERWRITE_MODE, int VERBOSE_MODE)
-     This function writes an ensemble of files at specified paths in
-     either text or data format, optionally interacting with the user
-     through standard input and output. The parameters have these
-     interpretations.
-
-    `DATA'
-          is a list in which each item specifies a file to be written.
-
-    `ASK_TO_OVERWRITE_MODE'
-          may be set to a non-zero value by the calling program in
-          order to have this function ask the user for permission to
-          overwrite existing files.
-
-    `VERBOSE_MODE'
-          may be set to a non-zero value by the calling program to have
-          this function print to standard output a list of the names of
-          the files it writes.
-
-     A high level interface between virtual code applications and the
-     file system is provided by this function. The `DATA' parameter
-     format is compatible with the the data structure returned by an
-     application complying with the conventions in *note Output From
-     Non-interactive Applications::.
-
-     Each item in the `DATA' list should be a non-empty list whose
-     `head' and `tail' are also non-empty. The fields in each item have
-     the following relevance to the file it specifies.
-
-        * The `head' of the `head' is `NULL' if the file is to be
-          opened for appending, and non-`NULL' if it is to be
-          overwritten.
-
-        * The `tail' of the `head' represents a path as a list of
-          character string representations, in a form suitable as an
-          argument to `avm_path_name'.
-
-        * The `head' of the `tail' represents the preamble of the file,
-          as either `NULL' for a text file or a non-empty list of
-          character string representations for a data file.
-
-        * The `tail' of the `tail' represents the contents of the file,
-          either as a list of character string representations for a
-          text file or as a list in an unconstrained format for a data
-          file.
-
-     For each item in the list, the function performs the following
-     steps.
-       1. It decides whether to open a file for overwriting or
-          appending based on the `head' of the `head'.
-
-       2. It uses the `tail' of the `head' to find out the file name
-          from `avm_path_name', in order to open it.
-
-       3. If the `ASK_TO_OVERWRITE_MODE' flag is set and the file is
-          found to exist already, the function will print one of the
-          following messages to standard output, depending on whether
-          the file is to be overwritten or appended.
-             * `PROGRAM-NAME: overwrite FILENAME? (y/n)'
-
-             * `PROGRAM-NAME: append to FILENAME? (y/n)'
-          It will then insist on either `y' or `n' as an answer before
-          continuing.
-
-       4. If the `ASK_TO_OVERWRITE' flag has not been set, or the file
-          did not previously exist, or the answer of `y' was given, the
-          preamble and contents of the file are then written with
-          `avm_output'.
-
-       5. If permission to write or append was denied, one of the
-          following messages is reported to standard output, and the
-          data that were to be written are lost.  
-
-             * `PROGRAM-NAME: not writing FILENAME'
-
-             * `PROGRAM-NAME: not appending FILENAME'
-
-       6. If permission was granted to write or append to the file or
-          the `VERBOSE_MODE' flag is set, one of the messages
-
-             * `PROGRAM-NAME: writing FILENAME'
-
-             * `PROGRAM-NAME: appending FILENAME'
-
-          is sent to standard output.
-
-     If any files are to be written to standard output, which would be
-     indicated by a `NULL' path, they are not written until all other
-     files in the list are written. This feature is in the interest of security,
-     as it makes it more difficult for malicious or inept virtual code
-     to alter the appearance of the console through standard output
-     until after the interactive dialogue has taken place. Permission
-     is not solicited for writing to standard output, and it will not
-     be closed.
-
-     Any of the fatal errors or i/o errors possible with `avm_output' or
-     `avm_path_name' are also possible with this function, as well as
-     the following additional ones.  
-
-        * `PROGRAM-NAME: invalid file specification'
-
-        * `PROGRAM-NAME: can't close FILENAME'
-
-        * `PROGRAM-NAME: can't write FILENAME'
-
-     The last two are non-fatal i/o errors that will be accompanied by
-     an explanation from the `strerror' function if the host supports
-     it. The other message is the result of a badly formatted `DATA'
-     parameter.
-
-
- -- Function: void avm_put_bytes (list BYTES)
-     This function takes a list of character representations, converts
-     them to characters, and sends them to standard output. There is no
-     chance of a memory overflow, but the following other errors are
-     possible.  
-
-        * `PROGRAM-NAME: invalid text format (code NN)'
-
-        * `PROGRAM-NAME: can't write to standard output'
-
-     The latter is non-fatal, but the former causes the program to
-     abort.  It is caused when any member of the list `BYTES' is not a
-     character representation appearing in *note Character Table::.
-
- -- Function: void avm_initialize_formout ()
-     This function initializes some data structures used locally by the
-     other functions in this section, and should be called at the
-     beginning of a run before any of them is called.
-
- -- Function: void avm_count_formout ()
-     This function doesn't do anything in the current version of the
-     library, but should be called after the last call to any of the
-     other functions in this section. Future versions of the library
-     might use this function for cleaning up some internal data
-     structures, and client programs that call it will maintain
-     compatibility with them.
-
-
-File: avram.info,  Node: Invocation,  Next: Version Management,  Prev: File Manipulation,  Up: Library Reference
-
-3.4 Invocation
-==============
-
-The functions documented in this section can be used to incorporate the
-capabilities of a virtual machine emulator into other C programs with a
-minimal concern for the details of the required data structures and
-virtual code invocation conventions.
-
-* Menu:
-
-* Command Line Parsing::
-* Execution Modes::
-

+ 0 - 6116
doc/avram.info-2

@@ -1,6116 +0,0 @@
-This is avram.info, produced by makeinfo version 4.13 from
-avram.texinfo.
-
-This file documents the `avram' command which is a virtual machine code
-interpreter
-
-   Copyright (C) 2000, 2003, 2006-2010 Dennis Furey 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 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 this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-
-File: avram.info,  Node: Command Line Parsing,  Next: Execution Modes,  Prev: Invocation,  Up: Invocation
-
-3.4.1 Command Line Parsing
---------------------------
-
-A couple of functions declared in `cmdline.h' can be used to do all the
-necessary parsing of command lines and environment variables needed by
-virtual code applications.
-
- -- Function: list avm_default_command_line (int ARGC, char *ARGV[],
-          int INDEX, char *EXTENSION, char *PATHS, int
-          DEFAULT_TO_STDIN_MODE, int FORCE_TEXT_INPUT_MODE, int
-          *FILE_ORDINAL)
-     The purpose of this function is to build most of the data
-     structure used by parameter mode applications, as described in
-     *note Input Data Structure::, by parsing the command line
-     according to *note Command Line Syntax::. The parameters have
-     these interpretations.
-
-    `ARGC'
-          is the number elements in the array referenced by `ARGV'
-
-    `ARGV'
-          is the address of an array of pointers to null terminated
-          character strings holding command line arguments
-
-    `INDEX'
-          is the position of the first element of `ARGV' to be
-          considered. Those preceding it are ignored.
-
-    `EXTENSION'
-          is the address of a string that will be appended to input
-          file names given in `ARGV' in an effort to find the
-          associated files
-
-    `PATHS'
-          is the address of a null terminated character string
-          containing a colon separated list of directory names that
-          will be searched for input files
-
-    `DEFAULT_TO_STDIN_MODE'
-          is set to a non-zero value by the caller if the contents of
-          standard input should be read in the absence of input files
-
-    `FORCE_TEXT_INPUT_MODE'
-          is set to a non-zero value by the caller to indicate that
-          input files should be read as text, using `avm_load' (rather
-          than `avm_preamble_and_contents', which would allow them to
-          be either text or data). The `PREAMBLE' field of the returned
-          file specifications will always be empty when this flag is
-          set.
-
-    `FILE_ORDINAL'
-          is set to a pointer to an integer by the caller if only one
-          file is to be loaded during each call. The value of the
-          integer indicates the which one it will be.
-
-     The result returned by this function is a list whose `head' is a
-     list of file specifications and whose `tail' is a list of command
-     line options intended for input to a virtual code application.
-
-     The list of file specifications returned in the `head' of the
-     result follows the same conventions as the `DATA' parameter to the
-     function `avm_output_as_directed', except that the `head' of the
-     `head' of each item is a list representing the time stamp of the
-     file as given by `avm_date_representation'. If the file is
-     standard input, then it holds the current system date and time.
-
-     If the `FILE_ORDINAL' parameter is `NULL', then all files on the
-     command line are loaded, but if it points to an integer N, then
-     only the Nth file is loaded, and N is incremented. If there is no
-     Nth file, a `NULL' value is returned as the entire result of the
-     function. For a series of calls, the integer should be initialized
-     to zero by the caller before the first call.
-
-     If standard input is indicated as one of the files on the command
-     line (by a dash), then it is also loaded regardless of the
-     `FILE_ORDINAL', but a cached copy of it is used on subsequent
-     calls after the first, so that the function does not actually
-     attempt to reread it. If standard input is to be loaded, it must
-     be finite for this function to work properly.
-
-     The search strategy for files is described in *note Environment::,
-     and makes use of the `EXTENSION' and `PATHS' parameters.
-
-     In the list of command line options returned in the `tail' of the
-     result, each item is a list with a non-empty `head' and `tail',
-     and is interpreted as follows.
-
-        * The `head' of the `head' is a list representing a natural
-          number, as given by `avm_natural', indicating the position of
-          the option on the command line relative to the initial value
-          of the `INDEX' parameter.
-
-        * The `tail' of the `head' is a list which is `NULL' in the
-          case of a "short form" option, written with a single dash on
-          the command line, but is a list whose `head' and `tail' are
-          `NULL' in the case of a "long form" option, written with two
-          dashes.
-
-        * The `head' of the `tail' is a list representing a character
-          string for the keyword of an option, for example `foo' in the
-          case of an option written `--foo=bar,baz'.
-
-        * The `tail' of the `tail' is a list of lists representing
-          character strings, with one item for each parameter
-          associated with the option, for example, `bar' and `baz'.
-
-     If multiple calls to the function are made with differing values of
-     `*FILE_ORDINAL' but other parameters unchanged, the same list of
-     options will be returned each time, except insofar as the position
-     numbers in the `head' of the `head' of each item are adjusted as
-     explained in *note Input for Mapped Applications::.
-
-     Any of the i/o errors or fatal errors associated with other file
-     input operations are possible with this function as well. This
-     non-fatal warning message is also possible.  
-
-          `PROGRAM-NAME: warning: search paths not supported'
-
-     This error occurs if the library has been built on a platform that doesn't
-     have the `argz.h' header file and the `PATHS' parameter is
-     non-`NULL'.
-
- -- Function: list avm_environment (char *ENV[])
-     This function takes the address of a null terminated array of
-     pointers to null terminated character strings of the form
-     `"variable=value"'. The result returned is a list of lists, with
-     one item for each element of the array. The `head' of each item is
-     a representation of the left side of the corresponding string, and
-     the `tail' is a representation of the right.
-
-     This function is therefore useful along with
-     `avm_default_command_line' for building the remainder of the data
-     structure described in *note Parameter Mode Interface::. For
-     example, a virtual machine emulator for non-interactive parameter
-     mode applications with no bells and whistles could have the
-     following form.
-
-          int
-          main(argc,argv,env)
-          ...
-          {
-            FILE *virtual_code_file;
-          ...
-            avm_initialize_lists();
-            avm_initialize_apply();
-            avm_initialize_rawio();
-            avm_initialize_formout();
-            avm_initialize_cmdline();
-            virtual_code_file = fopen(argv[1],"rb");
-            operator = avm_received_list(
-              virtual_code_file,argv[1]);
-            fclose(virtual_code_file);
-            command = avm_default_command_line(argc,
-              argv,2,NULL,NULL,0,0,NULL);
-            environs = avm_environment(env);
-            operand = avm_join(command,environs);
-            result = avm_apply(operator,operand);
-            avm_output_as_directed(result,0,0);
-            avm_dispose(result);
-          ...
-          }
-
-     The `avm_environment' function could cause the program to abort due
-     to a memory overflow.  For security reasons, it will also abort
-     with an error message if any non-printing characters are detected
-     in its argument. (See *note Other Diagnostics and Warnings::.)
-
- -- Function: void avm_initialize_cmdline ()
-     This function initializes some local variables and should be called
-     before any of the other functions in this section is called, or
-     else their results are unpredictable.
-
- -- Function: void avm_count_cmdline ()
-     This function should be called after the last call to any of the
-     other functions in this section, as it reclaims some locally
-     allocated storage. If the `avm_count_lists' function is used, it
-     should be called after this one.
-
-
-File: avram.info,  Node: Execution Modes,  Prev: Command Line Parsing,  Up: Invocation
-
-3.4.2 Execution Modes
----------------------
-
-Some functions declared in `exmodes.h' are useful for executing
-interactive applications or filter mode transducers in a manner
-consistent with the specifications described in the previous chapter.
-
- -- Function: void avm_interact (list AVM_INTERACTOR, int STEP_MODE,
-          int ASK_TO_OVERWRITE_MODE, int QUIET_MODE)
-     This function executes an interactive virtual code application. The
-     parameters have these interpretations.
-
-    `AVM_INTERACTOR'
-          is the virtual code for a function that performs as specified
-          in *note Output From Interactive Applications::.
-
-    `STEP_MODE'
-          will cause all shell commands to be echoed if set to a
-          non-zero value, and will cause the program to pause after
-          each shell command until a key is pressed.
-
-    `ASK_TO_OVERWRITE_MODE'
-          can be set to a non-zero value by the caller to cause the
-          program to ask permission of the user to overwrite any
-          existing files in cases where the virtual code returns a file
-          list as described in *note Mixed Modes of Interaction::.
-
-    `QUIET_MODE'
-          can be set to a non-zero value to suppress console messages
-          in the case of file output per *note Mixed Modes of
-          Interaction::.
-
-     The meaning of this function is accessible to any reader willing
-     to slog through *note Output From Interactive Applications::. The
-     only subtle point is that `AVM_INTERACTOR' parameter in this
-     function does not correspond to the virtual code application that
-     `avram' reads from a virtual code file, but to the result computed
-     when the application read from the file is applied to the data
-     structure representing the command line and environment.
-
-     Any of the memory overflows or i/o errors possible with other
-     functions in the library are possible from this one as well, and
-     will also cause it to print an error message and halt the program.
-     A badly designed virtual code application could cause a deadlock,
-     which will not be detected or reported
-
- -- Function: void avm_trace_interaction ()
-     This function enables diagnostic output for the
-     `avm_recoverable_interact' function.
-
- -- Function: void avm_disable_interaction ()
-     This function causes `avm_interact' and `avm_recoverable_interact'
-     to terminate with an error instead of executing, as required by the
-     `--jail' command line option.
-
- -- Function: list avm_recoverable_interact (list INTERACTOR, int
-          *FAULT)
-     This function is similar to `avm_interact' but always closes the
-     pipe and performs no file i/o, and will return an error message
-     rather than exiting. Otherwise it returns a transcript of the
-     intereaction as a list of lists of strings represented as lists of
-     character encodings.  It implements the INTERACT combinator with
-     the virtual code for the transducer function given as the
-     parameter.  A prior call to `avm_trace_interaction' will cause
-     diagnostic information to be written to standard output when this
-     function is executed.
-
- -- Function: void avm_byte_transduce (list OPERATOR)
-     This function executes a filter mode byte transducer application,
-     which behaves as described in *note Byte Transducers::. The
-     argument is the virtual code for the application, which would be
-     found in a virtual code file. There are limited opportunities for
-     i/o errors, as only standard input and standard output are
-     involved with this function, but fatal errors due to memory
-     overflow are possible.
-
- -- Function: void avm_line_map (list OPERATOR)
-     This function executes line mapped filter mode applications, which
-     are explained in *note Line Maps::. The argument is the virtual
-     code for the application. Similar comments to those above apply.
-
- -- Function: void avm_initialize_exmodes ()
-     This function should be called before any of the other functions
-     in this section in order to initialize some local variables.
-     Results are undefined if this function isn't called first.
-
- -- Function: void avm_count_exmodes ()
-     This function doesn't do anything in the present version of the
-     library, but should be called after the last call to any of the
-     other functions in this section in order to maintain compatibility
-     with future versions, which may use it for cleaning up local
-     variables.
-
-
-File: avram.info,  Node: Version Management,  Next: Error Reporting,  Prev: Invocation,  Up: Library Reference
-
-3.5 Version Management
-======================
-
-The `avram' library is designed to support any number of backward compatibility
-modes with itself, by way of some functions declared in `vman.h'. The
-assumption is that the library will go through a sequence of revisions
-during its life, each being identified by a unique number. In the event
-of a fork in the project, each branch will attempt to maintain
-compatibility at least with its own ancestors.
-
- -- Function: void avm_set_version (char *NUMBER)
-     This function can be used to delay the demise of a client program
-     that uses the library but is not updated very often. The argument
-     is a null terminated string representing a version number, such as
-     `"0.13.0"'.
-
-     A call to this function requests that all library functions revert
-     to their behavior as of that version in any cases where the current
-     behavior is incompatible with it. It will also cause virtual code
-     applications evaluated with `avm_apply' to detect a version number
-     equal to the given one rather than the current one. (See *note
-     Version::.)
-
-     The program will exit with an internal error message if any
-     function in the library has already interrogated the version
-     number before this function is called, or if it is passed a null
-     pointer. This problem can be avoided by calling it prior to any of
-     the `avm_initialize' functions with a valid address. The program
-     will exit with the message
-
-          `PROGRAM-NAME: multiple version specifications'
-
-     if this function is called more than once, even with the same
-     number.  If the number is not recognized as a present or past
-     version, or is so old that it is no longer supported, the program
-     will exit with this message.
-
-          `avram: can't emulate version NUMBER'
-
-     Client programs that are built to last should allow the version
-     number to be specified as an option by the user, and let virtual
-     code applications that they execute take care of their own backward
-     compatibility problems. This strategy will at least guard against
-     changes in the virtual machine specification and other changes
-     that do not affect the library API.
-
- -- Function: int avm_prior_to_version (char *NUMBER)
-     This function takes the address of a null terminated string
-     representing a version number as an argument, such as `"0.13.0"',
-     and returns a non-zero value if the version currently being
-     emulated predates it.
-
-     If no call has been made to `avm_set_version' prior to the call to
-     this function, the current version is assumed, and subsequent
-     calls to `avm_set_version' will cause an internal error.
-
-     The intended use for this function would be by a maintainer of the
-     library introducing an enhancement that will not be backward
-     compatible, who doesn't wish to break existing client programs and
-     virtual code applications. For example, if a version `1.0' is
-     developed at some time in the distant future, and it incorporates
-     a previously unexpected way of doing something, code similar to
-     the following could be used to maintain backward compatibility.
-
-          if (avm_prior_to_version("1.0"))
-            {
-              /* do it the 0.x way */
-            }
-          else
-            {
-              /* do it the 1.0-and-later way */
-            }
-
-     This function will cause an internal error if the parameter does
-     not match any known past or present version number, or if it is a
-     null pointer.
-
- -- Function: char* avm_version ()
-     This function returns the number of the version currently being
-     emulated as the address of a null terminated string. The string
-     whose address is returned should not be modified by the caller.
-
-     If no call has been made to `avm_set_version' prior to the call to
-     this function, the current version is assumed, and subsequent
-     calls to `avm_set_version' will cause an internal error.
-
-
-File: avram.info,  Node: Error Reporting,  Next: Profiling,  Prev: Version Management,  Up: Library Reference
-
-3.6 Error Reporting
-===================
-
-Most of the error reporting by other functions in the library is done by
-way of the functions declared in `error.h'.  These function communicate
-directly with the user through standard error.  Client programs should
-also use these functions where possible for the sake of a uniform
-interface.
-
- -- Function: void avm_set_program_name (char *ARGV0)
-     The argument to this function should be the address of a null
-     terminated string holding the name of the program to be reported
-     in error messages that begin with a program name. Typically this
-     string will be the name of the program as it was invoked on the
-     command line, possibly with path components stripped from it. An
-     alternative would be to set it to the name of a virtual code
-     application being evaluated. If this function is never called, the
-     name `"avram"' is used by default. Space for a copy of the program
-     name is allocated by this function, and a fatal memory overflow
-     error is possible if there is insufficient space available.
-
- -- Function: char* avm_program_name ()
-     This function returns a pointer to a null terminated character
-     string holding the program name presently in use. It will be
-     either the name most recently set by `avm_set_program_name', or
-     the default name `"avram"' if none has been set. The string whose
-     address is returned should not be modified by the caller.
-
- -- Function: void avm_warning (char *MESSAGE)
-     This function writes the null terminated string whose address is
-     given to standard error, prefaced by the program name and followed
-     by a line break.
-
- -- Function: void avm_error (char *MESSAGE)
-     This function writes the null terminated string whose address is
-     given to standard error, prefaced by the program name and followed
-     by a line break, as `avm_warning', but it then terminates the
-     process with an exit code of 1.
-
- -- Function: void avm_fatal_io_error (char *MESSAGE, char *FILENAME,
-          int REASON)
-     This function is useful for reporting errors caused in the course
-     of reading or writing files. The message is written to standard
-     error prefaced by the program name, and incorporating the name of
-     the relevant file. The `REASON' should be the error code obtained
-     from the standard `errno' variable, which will be translated to an informative
-     message if possible by the standard `strerror' function and
-     appended to the message. After the message is written, the process
-     will terminate with an exit code of 1.
-
- -- Function: void avm_non_fatal_io_error (char *MESSAGE, char
-          *FILENAME, int REASON)
-     This function does the same as `avm_fatal_io_error' except that it
-     doesn't exit the program, and allows control to return to the
-     caller, which should take appropriate action.
-
- -- Function: void avm_internal_error (int CODE)
-     This function is used to report internal errors and halt the
-     program. The error message is written to standard error prefaced
-     by the program name and followed by a line break. The code should
-     be a unique integer constant (i.e., not one that's used for any
-     other internal error), that will be printed as part of the error
-     message as an aid to the maintainer.
-
-     This function should be used by client programs only in the event
-     of conditions that constitute some violation of a required
-     invariant. It indicates to the user that something has gone wrong
-     with the program, for which a bug report would be appropriate.
-
- -- Function: void avm_reclamation_failure (char *ENTITY, counter COUNT)
-     This function is used only by the `avm_count' functions to report
-     unreclaimed storage. The `COUNT' is the number of units of storage
-     left unreclaimed, and the `ENTITY' is the address of a null
-     terminated string describing the type of unreclaimed entity, such
-     as `"lists"' or `"branches"'. The message is written to standard
-     error followed by a line break, but the program is not halted and
-     control returns to the caller.
-
-
-File: avram.info,  Node: Profiling,  Next: Emulation Primitives,  Prev: Error Reporting,  Up: Library Reference
-
-3.7 Profiling
-=============
-
-The functions declared in `profile.h' can be used for constructing and
-writing tables of run time statistics such as those mentioned in *note
-Files::, and *note Profile::. These functions maintain a database of
-structures, each recording the statistics for a particular virtual code
-fragment.
-
-   Each structure in the database is identified by a unique key, which
-must be a list representing a character string. A pointer to such a
-structure is declared to be of type `score'. For the most part, the data
-structure should be regarded as opaque by a client program, except for a
-field `reductions' of type `counter', which may be modified arbitrarily
-by the client.
-
-   The way these operations are used in the course of evaluating virtual
-code applications containing profile annotations is to add a structure
-to the database each time a new profiled code fragment is encountered,
-using the annotation as its key, and to increment the `reductions' of
-the structure each time any constituent of the code gets a quantum of
-work done on it. Other ways of using these operations are left to the
-developer's discretion.
-
- -- Function: score avm_entries (list TEAM, list *MESSAGE, int *FAULT)
-     This function retrieves or creates a data base entry given its
-     key. The parameters have these interpretations.
-
-    `TEAM'
-          is a list representing a character string that uniquely
-          identifies the database entry to be retrieved or created.
-
-    `MESSAGE'
-          is the address of a list known to the caller, which will be
-          assigned a list representing an error message if any error
-          occurs in the course of searching the database or creating a
-          new entry.
-
-    `FAULT'
-          is the address of an integer that will be set to a non-zero
-          value if any error is caused by this function.
-
-     The pointer returned by this function is the address of the record
-     whose key is given by the `TEAM' parameter. If such a record is
-     already in the database, its address is returned, but otherwise a
-     new one is created whose address is then returned. The `reductions'
-     field of a newly created entry will be zero.
-
-     In the course of searching the database, the `avm_compare'
-     function is used, so the associated lists may be modified as noted
-     in *note Comparison::.  It is not necessary for a client to
-     include the header file `compare.h' or to call
-     `avm_initialize_compare' in order to use the profile operations,
-     because they are done automatically.
-
-     If an error message is assigned to the list referenced by
-     `MESSAGE', the integer referenced by `FAULT' will be set to a
-     non-zero value. The form of the error message will be a list in
-     which each item is a list of character representations as per
-     *note Character Table::. It is the responsibility of the caller to
-     dispose of the error message. Currently the only possible error is
-     a memory overflow, which in this case is non-fatal.
-
- -- Function: void avm_tally (char *FILENAME)
-     This function makes a table of the results stored in the data base
-     built by the `avm_entries' function. The argument is the address
-     of a null terminated character string containing the name of the
-     file in which the results will be written. A file is opened and
-     the table is written in a self explanatory text format, with
-     columns labeled "reductions" and "invocations" among others. The
-     latter contains the number of times the associated key was
-     accessed through `avm_entries'.
-
-     The data written to the file should be taken with a grain of salt.
-     It is computed using native integer and floating point arithmetic,
-     with no checks made for overflow or roundoff error, and no
-     guarantee of cross platform portability. The number of
-     "reductions" means whatever the developer of the client program
-     wants it to mean.
-
-     The following error messages are possible with this function,
-     which will be written to standard error. None of them is fatal.  
-
-        * `PROGRAM-NAME: can't write FILENAME'
-
-        * `PROGRAM-NAME: can't write to FILENAME'
-
-        * `PROGRAM-NAME: can't close FILENAME'
-
-        * `PROGRAM-NAME: invalid profile identifier'
-
-     The last message is reported if any record in the database has a
-     key that is not a list of valid character representations. The
-     others are accompanied by an explanation from the standard
-     `strerror' function if possible.
-
- -- Function: void avm_initialize_profile ()
-     This function should be called before any of the other functions
-     in this section in order to initialize the data base. Results are
-     undefined if it is not called first.
-
- -- Function: void avm_count_profile ()
-     This function can be called after the other functions in this
-     section as a way of detecting memory leaks. If any storage remains
-     unreclaimed that was created by the functions in this section, a
-     warning message is written to standard error. If the
-     `avm_count_lists' function is being used by the client program, it
-     should be called after this one.
-
-
-File: avram.info,  Node: Emulation Primitives,  Next: External Library Maintenance,  Prev: Profiling,  Up: Library Reference
-
-3.8 Emulation Primitives
-========================
-
-The functions documented in this section can be used to take very
-specific control over the evaluation of virtual code applications. It is
-unlikely that a client program will have any need for them unless it
-aims to replace or extend the `avm_apply' function.
-
-   The virtual machine is somewhat removed from a conventional von
-Neumann model of computation, so emulating it in C or any other
-imperative language is less straightforward than one would prefer. An
-elaborate system of interdependent data structures is used to represent
-partially evaluated computations, which does not particularly lend
-itself to a convenient, modular API. The abstraction provided by the
-functions in this section is limited mainly to that of simple memory
-management and stack operations. Consequently, a developer wishing to
-build on them effectively would need to _grok_ the data structures
-involved, which are described in some detail.
-
-* Menu:
-
-* Lists of Pairs of Ports::
-* Ports and Packets::
-* Instruction Stacks::
-
-
-File: avram.info,  Node: Lists of Pairs of Ports,  Next: Ports and Packets,  Prev: Emulation Primitives,  Up: Emulation Primitives
-
-3.8.1 Lists of Pairs of Ports
------------------------------
-
-A `port' is the name given to a type of pointer used in the library as
-the address of a place where a computational result yet to be evaluated
-will be sent. Ports are discussed further in *note Ports and Packets::,
-but are mentioned here because it is sometimes necessary to employ a
-list of pairs of them. A pointer to such a list is declared as a
-`portal' type. It refers to a structure of the form 
-
-     struct port_pair
-     {
-       port left;
-       port right;
-       portal alters;
-     }
-
-   A small selection of functions for `portal' memory management is
-declared as follows in the header file `portals.h'. For reasons of
-C-ness, the type declarations themselves are forced to be in `lists.h'.
-
- -- Function: portal avm_new_portal (portal ALTERS)
-     This function is used to create storage for a new `port_pair'
-     structure, and returns a `portal' pointer to it if successful. If
-     the storage can't be allocated, a `NULL' pointer is returned.  The
-     `alters' field of the result is initialized as the given parameter
-     supplied by the caller. All other fields are filled with zeros.
-
- -- Function: void avm_seal (portal FATE)
-     This function performs the reclamation of storage associated with
-     `portal' pointers, either by freeing them or by consigning them
-     temporarily to a local cache for performance reasons. Client
-     programs should use only this function for disposing of `portal'
-     storage rather than using `free' directly, so as to allow accurate
-     record keeping.
-
- -- Function: void avm_initialize_portals ()
-     This function should be called by a client program prior to calling
-     either of the above memory management functions in order to
-     initialize some local variables. Anomalous results are possible
-     otherwise.
-
- -- Function: void avm_count_portals ()
-     This function should be called at the end of a run or after the
-     last call to any of the other functions in this section as a way
-     of detecting memory leaks associated with `portal' pointers. A
-     warning message will be written to standard error if any remains
-     unreclaimed.
-
-
-File: avram.info,  Node: Ports and Packets,  Next: Instruction Stacks,  Prev: Lists of Pairs of Ports,  Up: Emulation Primitives
-
-3.8.2 Ports and Packets
------------------------
-
-A pointer type declared as a `port' points to a structure in the
-following form, where a `flag' is an unsigned short integer type, and a
-`counter' is an unsigned long integer.  
-
-     struct avm_packet
-     {
-       port parent;
-       counter errors;
-       portal descendents;
-       list impetus, contents;
-       flag predicating;
-     };
-
-For reasons that make sense to C, the `avm_packet' and `port' types are
-declared in `lists.h', but a few memory management operations on them
-are available by way of functions declared in `ports.h'. The intended
-meaning of this structure is described presently, but first the memory
-management functions are as follows.
-
- -- Function: port avm_newport (counter ERRORS, port PARENT, int
-          PREDICATING)
-     This function attempts to allocate storage for a new packet
-     structure and returns its address if successful. If storage can
-     not be allocated, a `NULL' pointer is returned. The `errors',
-     `parent', and `predicating' fields are initialized with the
-     parameters supplied by the caller. The rest of the structure is
-     filled with zeros. A local memory cache is used for improved
-     performance.
-
- -- Function: void avm_sever (port APPENDAGE)
-     This function reclaims the storage associated with a `port', either
-     freeing it entirely or holding it in a local cache.  None of the
-     entities that may be referenced by pointers within the structure
-     are affected.  Only this function should be used by client
-     programs for disposing of ports, not the `free' function directly,
-     or some internal bookkeeping will be disrupted. An internal error
-     results if the argument is a `NULL' pointer.
-
- -- Function: void avm_initialize_ports ()
-     This function must be called prior to calling either of the two
-     above, in order to initialize some static variables.
-
- -- Function: void avm_count_ports ()
-     This function may be called after the last call to any of the other
-     functions in this section in order to detect and report unreclaimed
-     storage associated with ports. A non-fatal warning will be written
-     to standard error if any is detected, but otherwise there is no
-     effect.
-
-   The interesting aspect of this data structure is the role it plays in
-capturing the state of a computation. For this purpose, it corresponds
-to a single node in a partially computed result to be represented by a
-`list' when it's finished. The nodes should be envisioned as a
-doubly-linked binary tree, except that the pair of `descendents' for
-each node is not yet known with certainty, so a list of alternatives
-must be maintained.
-
-   Because the computation is not completed while this data structure
-exists, there are always some empty fields in it. For example, the
-`descendents' and the `contents' fields embody the same information,
-the latter doing so in a compact as opposed to a more expanded form.
-Hence, it would be redundant for both fields to be non-empty at the
-same time. The data structure is built initially with `descendents' and
-no `contents', only to be transformed into one with `contents' and no
-`descendents'.
-
-   The significance of each field in the structure can be summarized as
-follows.
-
-`contents'
-     If the computational result destined for the `port' pointing to
-     this packet is not complete, then this field is `NULL' and the
-     `descendents' are being computed. Otherwise, it contains the result
-     of the computation.
-
-`descendents'
-     This field points to a list of pairs of ports serving as the
-     destinations for an ensemble of concurrent computations.(1) The
-     `head' and `tail' of the `contents' are to be identified
-     respectively with the `contents' of the `left' and `right' `port'
-     in the first pair to finish being computed.
-
-`parent'
-     If this packet is addressed by the `left' or the `right' of `port'
-     in one of the `descendents' of some other packet, then this field
-     points to that packet.
-
-`errors'
-     A non-zero value in this field indicates that the result destined
-     for the `contents' of this packet is expected to be an error
-     message. If the exact level of error severity incurred in the
-     computation of the `contents' matches this number, then the
-     contents can be assigned the result, but otherwise the result
-     should propagate to the `contents' of the `parent'.
-
-`predicating'
-     A non-zero value in this field implies that the result destined
-     for the `contents' of this packet is being computed in order to
-     decide which arm of a conditional function should be chosen. I.e.,
-     a `NULL' result calls for the one that is invoked when the
-     predicate is false.
-
-`impetus'
-     If the result destined for the `contents' of this packet is being
-     computed in order to transform a virtual code fragment from its
-     original form to an equivalent representation capable of being
-     evaluated more directly, this field points to a `list' node at the
-     root of the virtual code in its original form.
-
-   One of the hitherto undocumented fields in a `list' node structure declared
-in `lists.h' is called the `interpretation', and is of type `list'. A
-client program delving into sufficient depth of detail to be concerned
-with ports and packets may reasonably assign the `interpretation' field
-of the `list' referenced by the `impetus' field in a packet to be a
-copy of the `contents' of the packet when they are eventually obtained.
-Doing so will save some time by eliminating the need for it to be
-recomputed if the same virtual code should be executed again.
-
-   If this course is taken, the `facilitator' field in a `list' node,
-also hitherto undocumented, should contain the address of the packet
-referring to the list node as its `impetus'. The reason for this
-additional link is so that it can be followed when the `impetus' of the
-packet is be cleared by `avm_dispose' in the event that the `list' node
-is freed before the computation completes. This action is performed in
-order to preclude a dangling pointer in the `impetus' field.
-
-   ---------- Footnotes ----------
-
-   (1) Earlier versions of `avram' included a bottom avoiding choice
-combinator that required this feature, but which has been withdrawn. A
-single pair of descendent ports would now suffice.
-
-
-File: avram.info,  Node: Instruction Stacks,  Prev: Ports and Packets,  Up: Emulation Primitives
-
-3.8.3 Instruction Stacks
-------------------------
-
-A header file named `instruct.h' declares a number of memory management
-and stack operations on a data structure of the following form.  
-
-     struct instruction_node
-     {
-       port client;
-       score sheet;
-       struct avm_packet actor;
-       struct avm_packet datum;
-       instruction dependents;
-     };
-
-   In this structure, an `instruction' is a pointer to an
-`instruction_node', a `score' is a pointer to a profile database entry
-as discussed in *note Profiling::, and the `port' and `avm_packet'
-types are as described in *note Ports and Packets::.
-
-   This data structure is appropriate for a simple virtual machine code evaluation
-strategy involving no concurrency. The strategy to evaluate an
-expression `F X' would be based on a stack of these nodes threaded
-through the `dependents' field, and would proceed something like this.
-
-  1. The stack is initialized to contain a single node having `F' in
-     its `actor.contents' field, and `X' in its `datum.contents' field.
-
-  2. The `client' in this node would refer to a static packet to whose
-     `contents' field the final result will be delivered.
-
-  3. The evaluator examines the `actor.contents' field on the top of the
-     stack, detects by its form the operation it represents, and decides
-     whether it corresponds to one that can be evaluated immediately by
-     way of a canned function available in the library. List reversal,
-     transposition, and comparison would be examples of such operations.
-
-  4. If the operation can be performed in this way, the result is
-     computed and assigned to the destination indicated by the `client'
-     field.
-
-  5. If the operation is not easy enough to perform immediately but is
-     of a form recognizable as a combination of simpler operations, it
-     is decomposed into the simpler operations, and each of them is
-     strategically positioned on the stack so as to effect the
-     evaluation of the combination. For example, if `F' were of the form
-     `compose(G,H)' (`silly' notation), the node with `F' and `X' would
-     be popped, but a node with `G' as its `actor.contents' would be
-     pushed, and then a node with `H' as its `actor.contents' and `X'
-     as its `datum.contents' would be pushed. Furthermore, the `client'
-     field of the latter node would point to the `datum.contents' of
-     the one with `G', and the `client' field of the one with `G' would
-     point wherever the `client' of the popped node used to point.
-
-  6. If the operation indicated by the top `actor.contents' is neither
-     implemented by a canned operation in the library nor easily
-     decomposable into some that are, the evaluator can either give up
-     or use virtual code to execute other virtual code. The latter
-     trick is accomplished by pushing a node with `F' as its
-     `datum.contents', and a copy of a hard coded virtual code
-     interpreter `V' as its `actor.contents'. The `client' of this node
-     will point to the `F' in the original node so as to overwrite it
-     when a simplified version is subsequently computed. The
-     implementation of `V' is a straightforward exercise in `silly'
-     programming.
-
-  7. In any case, the evaluator would continue working on the stack
-     until everything on it has been popped, at which time the result
-     of the entire computation will be found in the packet addressed by
-     the `client' in the original instruction node.
-
-   What makes this strategy feasible to implement is the assumption of a
-sequential language, wherein synchronization incurs no cost and is
-automatic. The availability of any operand is implied by its position at
-the top of the stack. If you are reading this section with a view to implementing
-a concurrent or multi-threaded evaluation strategy, it will be apparent
-that further provisions would need to be made, such as that of a
-`data_ready' flag added to the `avm_packet' structure.
-
-   The following functions support the use of stacks of instruction
-nodes that would be needed in an evaluation strategy such as the one
-above.
-
- -- Function: int avm_scheduled (list ACTOR_CONTENTS, counter
-          DATUM_ERRORS, list DATUM_CONTENTS, port CLIENT, instruction
-          *NEXT, score SHEET)
-     This function performs the memory allocation for instruction
-     nodes. It attempts to create one and to initialize the fields with
-     the given parameters, returning a pointer to it if successful. It
-     returns a `NULL' pointer if the storage could not be allocated.
-
-     Copies of the `list' parameters `actor_contents' and
-     `data_contents' are made by this function using `avm_copied', so
-     the originals still exist as far as the caller is concerned and
-     will have to be deallocated separately from this structure. The
-     copies are made only if the allocation succeeds.
-
-     Any fields other than those indicated by the parameters to this
-     function are filled with zeros in the result.
-
- -- Function: void avm_retire (instruction *DONE)
-     This function performs the storage reclamation of instructions,
-     taking as its argument the instruction to be reclaimed. The `list'
-     fields in the structure corresponding to the `list' parameters
-     used when it was created are specifically reclaimed as well, using
-     `avm_dispose'.
-
-     The argument to this function is the address of an `instruction'
-     rather than just an `instruction' so that the `instruction' whose
-     address is given may be reassigned as the `dependents' field of
-     the deallocated node. In this way, the instructions can form a
-     stack that is popped by this function.
-
-     This function cooperates with `avm_scheduled' in the use of a local
-     cache of instruction nodes in the interest of better performance.
-     Client modules should not attempt to allocate or reclaim
-     instructions directly with `malloc' or `free', but use only these
-     functions.
-
-     It causes a fatal internal error to pass a `NULL' pointer to this
-     function.
-
- -- Function: void avm_reschedule (instruction *NEXT)
-     Given the address of an instruction pointer that may be regarded
-     as the top of a stack of instructions threaded through the
-     `dependents' field, this function exchanges the positions of the
-     top instruction and the one below it. A fatal internal error is
-     caused if there are fewer than two instructions in the stack.
-
-     A use for this function arises in the course of evaluating virtual
-     code applications of the form `conditional(P,(F,G))' (in `silly'
-     notation). The evaluation strategy would require pushing nodes for
-     all three constituents, but with `P' pushed last (therefore
-     evaluated first). The result of the evaluation of `P' would
-     require either the top one or the one below it to be popped
-     without being evaluated, depending on whether the result is empty.
-
- -- Function: void avm_initialize_instruct ()
-     This function should be called before any of the instruction memory
-     management functions is called in order to initialize some local
-     data structures. Results are unpredictable without it.
-
- -- Function: void avm_count_instruct ()
-     This function should be called after the last call to any of the
-     other functions in this section in order to detect and report
-     unreclaimed storage associated with them. A warning message will be
-     written to standard error if any unreclaimed instructions remain.
-     This function relies on the assumption that the memory management
-     has been done only by way of the above functions.
-
-
-File: avram.info,  Node: External Library Maintenance,  Prev: Emulation Primitives,  Up: Library Reference
-
-3.9 External Library Maintenance
-================================
-
-External mathematical library functions such as those documented in
-*note External Libraries:: that are invoked from virtual code by the
-`library' combinator (*note Library combinator::) are also accessible
-from C by way of a uniform API implemented by the functions declared in
-`libfuns.h'. This interface applies even to libraries implemented in
-Fortran such as `minpack'. This section briefly documents the functions
-in `libfuns.h' and sets out some recommeded guidelines for developers
-wishing to add support for other external libraries.
-
-* Menu:
-
-* Calling existing library functions::
-* Implementing new library functions::
-* Working around library misfeatures::
-
-
-File: avram.info,  Node: Calling existing library functions,  Next: Implementing new library functions,  Prev: External Library Maintenance,  Up: External Library Maintenance
-
-3.9.1 Calling existing library functions
-----------------------------------------
-
-Whatever data types a library function manipulates, its argument and
-its result are each ultimately encoded each by a single list as
-explained in *note Type Conversions::. This representation allows all
-library functions to be invoked by a uniform calling convention as
-detailed below.
-
- -- Function: list avm_library_call (list LIBRARY_NAME, LIST
-          FUNCTION_NAME, list ARGUMENT, int *FAULT)
-     This function serves as an interpreter of external library
-     functions by taking a LIBRARY_NAME, a FUNCTION_NAME, and an
-     ARGUMENT to the result returned by the corresponding library
-     function for the given ARGUMENT.
-
-     The library and function names should be encoded as lists of
-     character representations, the same as the arguments that would be
-     used with the `library' combinator if it were being invoked by
-     virtual code (with attention to the backward compatibility issue
-     explained in *note Characters and Strings::).
-
-     If an error occurs in the course of evaluating a library function,
-     the integer referenced by FAULT will be assigned a non-zero value,
-     and the result will be a list of character string representations
-     explaining the error, such as `<'memory overflow'>', for example.
-     Otherwise, the list returned will encode the result of the library
-     function in a way that depends on the particular function being
-     evaluated.
-
- -- Function: list avm_have_library_call (list LIBRARY_NAME, list
-          FUNCTION_NAME, int *FAULT)
-     This function implements the `have' combinator described in *note
-     Have combinator::, which tests for the availability of a library
-     function. The LIBRARY_NAME and FUNCTION_NAME parameters are as
-     explained above for `avm_library_call', and `fault' could signal
-     an error similarly for this function as well.
-
-     The result returned will be an error message in the event of an
-     error, or a list of pairs of strings otherwise. The list will be
-     empty if the library function is not available. If the library
-     function is available, the list will contain a single pair, as in
-
-          <(library_name,function_name)>
-
-     In addition, the list representation of the character string `'*''
-     can be specified as either the library name or the function name
-     or both. This string is interpreted as a wild card and will cause
-     all matching pairs of library and function names to be returned in
-     the list.
-
- -- Function: void avm_initialize_libfuns ()
-     This function initializes some static data structures used by the
-     two functions above. It may be called optionally before the first
-     call to either of them, but will be called automatically if not.
-
- -- Function: void avm_count_libfuns ()
-     This function can be used as an aid to detecting memory leaks. It
-     reclaims any data structures allocated by `avm_initialize_libfuns'
-     and should be called towards the end of a run some time prior to
-     `avm_count_lists' *note Simple Operations::, if the latter is
-     being used.
-
-
-File: avram.info,  Node: Implementing new library functions,  Next: Working around library misfeatures,  Prev: Calling existing library functions,  Up: External Library Maintenance
-
-3.9.2 Implementing new library functions
-----------------------------------------
-
-Adding more external libraries to `avram' is currently a manual
-procedure requiring the attention of a developer conversant with C.  To
-support a new library called `foobar', these steps need to be followed
-at a minimum.
-
-   * Create a new file called `foobar.h' under the `avm/' directory in
-     the main source tree whose name doesn't clash with any existing
-     file names and preferably doesn't induce any proper prefixes among
-     them. This file should contain at least these function
-     declarations.
-
-          extern list avm_foobar_call (list function_name,list argument,
-                                       int *fault);
-
-          extern list avm_have_foobar_call (list function_name,int *fault);
-
-          extern void avm_initialize_foobar ();
-
-          extern void avm_count_foobar ();
-
-     There should also be the usual preprocessor directives for
-     `include' files. The naming convention shown should be followed in
-     anticipation of automated support for these operations in the
-     future.
-
-   * Add `foobar.h' to the list of other header files in
-     `avm/Makefile.am'.
-
-   * Create a new file called `foobar.c' under the `src/' directory
-     whose name doesn't clash with any existing file names to store
-     most of the library interface code. It can start out with stubs
-     for the functions declared in `foobar.h'.
-
-   * Add `foobar.c' to the list of other source files in
-     `src/Makefile.am'
-
-   * Execute the following command in the main `avram-x.x.x' source
-     directory where the file `configure.in' is found.
-
-          aclocal \
-          && automake --gnu --add-missing \
-          && autoconf
-
-     This command requires having `automake' and `autoconf' installed
-     on your system.
-
-   * Make the following changes to `libfuns.c'.
-
-        * Add the line `#include<avm/foobar.h>' after the other
-          `include' directives.
-
-        * Add the string `"foobar"' to the end of the array of
-          `libnames' in `avm_initialize_libfuns'.
-
-        * Add a call to `avm_initialize_foobar' to the body.
-
-        * Add a call to `avm_count_foobar' to the body of
-          `avm_count_libfuns'.
-
-        * Add a case of the form
-               case nn:
-                 return avm_foobar_call(function_name,argument,fault);
-
-          after the last case in `avm_library_call', being careful not
-          to change the order, and using the same name as above in the
-          file `foobar.h'.
-
-        * Add a case of the form
-               case nn:
-                 looked_up = avm_have_foobar_call(function_name,fault);
-                 break;
-
-          after the last case in `avm_have_library_call', being careful
-          not to change the order, and using the same name as above in
-          the file `foobar.h'.
-
-   * Edit `foobar.c' and `foobar.h' to suit, periodically compiling and
-     testing by executing `make'.
-
-   * Package and install at will.
-
-   The functions shown above have the obvious interpretations, namely
-that `avm_foobar_call' evaluates a library function from the `foobar'
-library, and `avm_have_foobar_call' tests for a function's
-availability. The latter should interpret wild cards as explained in
-*note Calling existing library functions::, but should return only a
-list of strings for the matching function names rather than a list of
-pairs of strings, as the library name is redundant.  The remaining
-functions are for static initialization and reclamation.
-
-   These functions should consist mainly of boilerplate code similar to
-the corresponding functions in any of the other library source files,
-which should be consulted as examples. The real work would be done by
-other functions called by them. These should be statically declared
-within the `.c' source file and normally not listed in the `.h' header
-file unless there is some reason to think they may be of more general
-use. Any externally visible functions should have names beginning with
-`avm_' to avoid name clashes.
-
-   Some helpful hints are reported below for what they may be worth.
-
-   * The reason for doing this is to leverage off other people's
-     intelligence, so generally `foobar.c' should contain only glue
-     code for library routines developed elsewhere with great skill
-     rather than reinventing them in some home grown way.
-
-   * The best numerical software is often written by Fortran programmers.
-     Linking to a Fortran library is no problem on GNU systems provided
-     that all variables are passed by reference and all arrays are
-     converted to column order (*note Type Conversions::).
-
-   * Most C++ programmers have yet to reach a comparable standard, but
-     C++ libraries can also be linked by running `nm' on the static library
-     file to find out the real names of the functions and `c++filt' to
-     find out which is which. However, there is no obvious workaround
-     for the use of so called derived classes by C++ programmers to
-     simulate passing functions as parameters.
-
-   * Anything worth using can probably be found in the Debian archive.
-
-   * Not all libraries are sensible candidates for interfaces to
-     `avram'. Typical design flaws are
-
-        * irrepressible debugging messages written to `stderr' or
-          `stdout' that are unfit for end user consumption
-
-        * deliberately crashing the application if `malloc' fails
-
-        * opaque data types with undocumented storage requirements
-
-        * opaque data types that would be useful to store persistently
-          but have platform specific binary representations
-
-        * heavily state dependent semantics
-
-        * identifiers with clashing names
-
-        * restrictive licenses
-
-     Some of these misfeatures have workarounds as explained next in
-     *note Working around library misfeatures::, at least if there's
-     nothing else wrong with the library.
-
-   Those who support `avram' are always prepared to assist in the
-dissemination of worthwhile contributed library modules under terms
-compatible with *note Copying::, and under separate copyrights if preferred.
-Contributed modules can be integrated into the official source tree
-provided that they meet the following additional guidelines to those
-above.
-
-   * source code documentation and indentation according to GNU coding
-     standards (`http://www.gnu.org/prep/standards')
-
-   * sufficient stability for a semi-annual release cycle
-
-   * no run-time or compile-time dependence on any non-free software,
-     although dynamic loading and client/server interaction are
-     acceptable
-
-   * portable or at least unbreakable configuration by appropriate use
-     of `autoconf' macros and conditional defines
-
-   * little or no state dependence at the level of the virtual code interface
-     (i.e., pure functions or something like them, except for random
-     number generators and related applications)
-
-   * adequate documentation for a section in *note External Libraries::
-
-
-File: avram.info,  Node: Working around library misfeatures,  Prev: Implementing new library functions,  Up: External Library Maintenance
-
-3.9.3 Working around library misfeatures
-----------------------------------------
-
-As mentioned already (*note Implementing new library functions::), some
-common problems with external libraries that are worthwhile in other
-respects are that they may generate unwelcome console output while
-running, they may follow ill defined memory management policies, and
-they may handle exceptions just by crashing themselves along with the
-client module.
-
-   An accumulation of techniques for coping with these issues (short of
-modifying the library source) has been collected into the API and made
-available by way of the header file `mwrap.h'. This section briefly
-documents how they might be put to use.
-
-* Menu:
-
-* Inept excess verbiage::
-* Memory leaks::
-* Suicidal exception handling::
-
-
-File: avram.info,  Node: Inept excess verbiage,  Next: Memory leaks,  Prev: Working around library misfeatures,  Up: Working around library misfeatures
-
-3.9.3.1 Inept excess verbiage
-.............................
-
-Although the author of a library function may take pride in putting its
-activities on display, it should be assumed that virtual code
-applications running on `avram' have other agendas for the console, so
-the library interface module should prevent direct output from the
-external library.
-
-   More thoughtful API's may have a verbosity setting, which should be used
-in preference to this workaround, but failing that, it is easy to
-dispense with console output generated by calls to external library
-functions by using some combination of the following functions.
-
- -- Function: void avm_turn_off_stdout ()
-     Calling this function will suppress all output to the standard
-     output stream until the next time `avm_turn_on_stdout' is called.
-     Additional calls to this function without intervening calls to
-     `avm_turn_on_stdout' may be made safely with no effect.  The
-     standard output stream is flushed as a side effect of calling this
-     function.
-
- -- Function: void avm_turn_on_stdout ()
-     Calling this function will allow output to the standard output
-     stream to resume if it has been suppressed previously by a call to
-     `avm_turn_off_stdout'. If `avm_turn_off_stdout' has not been
-     previously called, this function has no effect. Any output that
-     would have been sent to `stdout' during the time it was turned off
-     will be lost.
-
- -- Function: void avm_turn_off_stderr ()
-     This function performs a similar service to that of
-     `avm_turn_off_stdout' but pertains to the standard error stream.
-     The standard error and the standard output streams are controlled
-     independently even if both of them are piped to the same console.
-
- -- Function: void avm_turn_on_stderr ()
-     This function performs a similar service to that of
-     `avm_turn_on_stdout' but pertains to the standard error stream.
-
-   As an example, the following code fragment will prevent any output to
-standard output taking place as a side effect of `blather', but will
-allow error messages to standard error. Note that ouput should not be
-left permanently turned off.
-
-     ...
-     #include <avm/mwrap.h>
-     ...
-
-     x = y + z;
-     avm_turn_off_stdout ();
-     w = blather (foo, bar, baz);
-     avm_turn_on_stdout ();
-     return w;
-     ...
-
-   One possible issue with these functions is that they rely on a
-feature of the GNU C library that might not be portable to non-GNU systems
-and has not been widely tested on other platforms.
-
-   Another issue is that a library function could be both careless
-enough to clutter the console unconditionally and meticulous enough to
-check for I/O errors after each attempted write. Writing while the
-output stream is disabled will return an I/O error to the caller (i.e.,
-to the verbose library function) for appropriate action, which could
-include terminating the process.
-
-
-File: avram.info,  Node: Memory leaks,  Next: Suicidal exception handling,  Prev: Inept excess verbiage,  Up: Working around library misfeatures
-
-3.9.3.2 Memory leaks
-....................
-
-Incorrect memory management may undermine confidence in a library when
-one wonders what else it gets wrong, but if the worst it does is leave
-a few bytes unreclaimed, then help is at hand.
-
-   The first priority is to assess the seriousness of the situation.
-Similarly to the way library functions are bracketed with calls to
-those listed in *note Inept excess verbiage::, the following functions
-are meant to be placed before and after a call to a library function
-either for diagnostic purposes or production use.
-
- -- Function: void avm_manage_memory ()
-     After this function is called, all subsequent calls to the
-     standard C functions `malloc', `free', and `realloc' are
-     intercepted and logged until the next time
-     `avm_dont_manage_memory' is called. Furthermore, a complete record
-     is maintained of the addresses and sizes of all allocated areas of
-     memory during this time in a persistent data structure managed
-     internally.
-
- -- Function: void avm_dont_manage_memory ()
-     Calling this function suspends the storage monitoring activities
-     initiated by calling `avm_manage_memory', but the record of
-     allocated memory areas is not erased.
-
- -- Function: void avm_debug_memory ()
-     After this function is called and `avm_manage_memory' is also
-     called, the standard output stream will display a running account
-     of the sizes and addresses of all memory allocations or
-     deallocations as they occur until the next call to either
-     `avm_dont_debug_memory' or `avm_dont_manage_memory'.
-
- -- Function: void avm_dont_debug_memory ()
-     This function stops the output being sent to `stdout' caused by
-     `avm_debug_memory', if any, but has no effect on the logging of
-     memory management events preformed due to `avm_manage_memory'.
-
-   While the latter two are not useful in production code, they can help
-to clarify an inadequately documented API during development by
-experimentally identifying the functions that cause memory to be
-allocated. They can also provide the answer to questions like whether
-separate copies are made from arrays passed to functions (useful for
-knowing when it's appropriate to free them).
-
-   Although the console output reveals everything there is to know about
-memory management during the selected window, the question of
-unreclaimed storage is more directly settled by the following functions.
-
- -- Function: void avm_initialize_mwrap ()
-     This function has to be called before any other functions from
-     `mwrap.h' in order to clean the slate and prepare the static data
-     structures for use. This function might not have to be called
-     explicitly if the client module is part of `avram', whose main
-     program would have already called it. There is no harm in calling
-     it repeatedly.
-
- -- Function: void avm_count_mwrap ()
-     This function should be called after the last call to any other
-     functions in `mwrap.h', when it is expected that all storage that
-     was allocated while `avm_manage_memory' was in effect should have
-     been reclaimed.
-
-     If there is no unreclaimed storage allocated during an interval
-     when memory was being managed, this function returns uneventfully.
-     However, if any storage remains unreclaimed, a message stating the
-     number of bytes is written to `stderr'.
-
-     If `avm_debug_memory' is also in effect when this function detects
-     unreclaimed storage, an itemized list of the unreclaimed memory
-     addresses and their sizes is written to standard output.
-
-   Of course, in order for `avm_count_mwrap' to report meaningful
-results, any memory that is allocated during the interval between calls
-to `avm_manage_memory' and `avm_dont_manage_memory' must have been
-given an opportunity to be reclaimed also while this logging mechanism
-is in effect. However, there may be arbitrarily many intervening
-intervals during which it is suspended.
-
-   On the other hand, any storage that is allocated when memory is not
-being managed must not be freed at a time when it is (except for
-freeing a `NULL' pointer, which is tolerated but not encouraged). Doing
-so raises an internal error, causing termination with extreme
-prejudice. This behavior is a precaution against library functions
-freeing storage that they didn't allocate, which would mean no memory
-is safe and it's better for `avram' not to continue.
-
-   If these investigations uncover no evidence of a memory leak, then
-perhaps the relevant library functions are reliable enough to run
-without supervisory memory management. Alternatively, when memory leaks
-are indicated, the next function provides a simple remedy.
-
- -- Function: void avm_free_managed_memory ()
-     This function causes all storage to be reclaimed that was allocated
-     at any time while logging of memory allocation was in effect (i.e.,
-     whenever `avm_manage_memory' had been called more recently than
-     `avm_dont_manage_memory'). When the storage is freed, no further
-     record of it is maintained.
-
-     A side effect of this function is to call `avm_dont_manage_memory'
-     and therefore leave memory management turned off.
-
-   This last function when used in conjunction with the others is
-therefore the workaround for library functions that don't clean up
-after themselves. It may be important to do it for them if repeated
-calls to the library function are expected, which would otherwise cause
-unreclaimed storage to accumulate until it curtailed other operations.
-
-   One small issue with this function is the assumption that unreclaimed
-storage is really a leak and not internal library data that is designed
-to persist between calls. If this assumption is not valid, breakage
-will occur. However, libraries deliberately making use of persistent
-data are likely to have initialization and destructor functions as part
-of their API's, so this assumption is often justified if they don't.
-
-   An example of using these functions is given below.
-
-   In this example, `allocated_library_object' is a hypothetical
-function exported by an external library that causes storage to be
-allocated, and `library_reclamation_routine' is provided by the same
-library ostensibly to reclaim the storage thus allocated. However, the
-latter is suspected of memory leaks.
-
-   The variable `my_data' is declared and used by an `avram' developer
-who is presumably competent to reclaim it correctly, rather than it
-being part of an external library. Memory management is therefore
-enabled during the calls to the library routines but not at other times.
-
-   The call to `avm_count_mwrap' is redundant immediately after a call
-to `avm_free_managed_memory', because with all managed memory having
-been freed, no memory leak will ever be detected, but it is included
-for illustrative purposes.
-
-     #include <avm/mwrap.h>
-     ...
-
-     {
-       void *behemoth;
-       char *my_data;
-
-       avm_initialize_mwrap ();
-       avm_manage_memory ();
-       behemoth = allocated_library_object (foo, bar);
-       avm_dont_manage_memory ();
-       my_data = (char *) malloc (100);
-       ...
-       free (my_data);
-       avm_manage_memory ();
-       library_reclamation_routine (&behemoth);
-       avm_free_managed_memory ();
-       avm_count_mwrap ();
-       return;
-     }
-
-   It might be a cleaner solution in some sense to omit the call to
-`library_reclamation_routine' entirely, because the storage allocated
-during the call to `allocated_library_object' will be reclaimed
-perfectly well by `avm_free_managed_memory' without it. Doing so may
-also be the only option if the library reclamation routine is either
-extremely unreliable or non-existent. However, the style above is to be
-preferred for portability if possible. The memory management functions
-rely on the availability of the system header file `malloc.h', and GNU
-C library features whose portability is not assured.  If the required
-features are not detected on the host system at configuration time,
-conditional directives in the `avram' source will make the `avm_'*
-memory management functions perform no operations, and the
-responsibility for memory management will devolve to the possibly less
-robust external library implementation.
-
-
-File: avram.info,  Node: Suicidal exception handling,  Prev: Memory leaks,  Up: Working around library misfeatures
-
-3.9.3.3 Suicidal exception handling
-...................................
-
-An inconvenient characteristic of some external library functions is to
-terminate the program rather than returning an error status to the
-caller for routine events such as a failure of memory allocation.
-Although in many cases there is no simple workaround for this behavior,
-memory allocation failures at least can be detected and preventive
-action taken by using the functions described in this section.
-
-   The general approach is to use memory management functions from
-`mwrap.h' as described previously (*note Memory leaks::), while
-additionally registering a return destination for a non-local jump to be
-taken in the event of a memory overflow. The jump is taken when an
-external library function calls `malloc' or `realloc' unsuccessfully.
-The jump avoids passing control back to the library function, thereby
-denying it the opportunity to abort, but restores the context to that
-of the jump destination almost as if the library function and all of
-its intervening callers had returned normally.
-
-   The interface is similar to that of the standard `setjmp' function
-defined in the system header file `setjmp.h', and in fact is built on
-it, but differs in that the client module does not explicitly refer to
-jump buffers. Instead, the `mwrap' module internally maintains a stack
-of return destinations.
-
-   If a jump is taken, it always goes to the most recently registered
-destination. It may revert to the previously registered destination
-only when the current one is cleared. This organization provides the
-necessary flexibility for multiple clients and recursion, but it
-necessitates a protocol whereby each registration of a destination must
-be explicitly cleared exactly once.
-
-   The following functions implement these two features.
-
- -- Function: int avm_setjmp ()
-     This function specifies the point to which control will pass by a
-     non-local jump if there is insufficient memory to complete a
-     subsequent `malloc' or `realloc' operation. Only the operations
-     that take place while memory is being managed due to
-     `avm_manage_memory' are affected (*note Memory leaks::).
-
-     The function returns zero when it is called normally and
-     successfully registers the return point.
-
-     It returns a non-zero value when it has been entered by a non-local
-     jump (i.e., when `malloc' or `realloc' has reported insufficient
-     memory while memory management is active), or when the return
-     point could not be successfully registered due to insufficient
-     memory. The client need not distinguish between these two cases,
-     because both correspond to memory overflows and the destination
-     must be cleared by `avm_clearjmp' regardless.
-
-     When a non-zero value is returned due to this function being
-     reached by a non-local jump, it has the side effects of reclaiming
-     all managed memory by calling `avm_free_managed_memory' and
-     disabling memory management by calling `avm_dont_manage_memory'.
-
- -- Function: void avm_clearjmp ()
-     This function cancels the effect of `avm_setjmp ()' by preventing
-     further non-local jumps to its destination if the destination was
-     successfully registered, or by acknowledging unsuccessful
-     registration otherwise. It should be called before exiting any
-     function that calls `avm_setjmp ()' or anomalous results may ensue.
-
-   The memory management functions `avm_manage_memory' and
-`avm_dont_manage_memory' can be useful with or without `avm_setjmp',
-depending on how much of a workaround is needed for a given library. If
-a library does not abort on memory overflows, there is no need to use
-`avm_setjmp', while it may still be appropriate to use the other
-functions against memory leaks.
-
-   Calling `avm_clearjmp' is particularly important if a client module
-with memory management that doesn't use `avm_setjmp' is invoked
-subsequently to one that does, so that memory overflows in the latter
-won't cause an attempted jump to a stale destination.
-
-   A further complication that arises from careful consideration of
-these issues is the situation of a client module that does not intend
-to use `avm_setjmp' but is called (perhaps indirectly) by one that
-does. The latter will have registered a return destination that remains
-active and valid even if the former refrains from doing so, thereby
-allowing a branch to be taken that should have been prevented.
-Although it is an unusual situation, it can be accommodated by the
-following function.
-
- -- Function: void avm_setnonjump ()
-     This function temporarily inhibits non-local jumps to destinations
-     previously registered by `avm_setjmp' until the next time
-     `avm_clearjmp' is called. Thereafter, any previously registered
-     destinations are reinstated.
-
-   A sketch of how some of these functions might be used to cope with
-library functions that would otherwise terminate the program in the
-event of a memory overflow is shown below. The GNU `libc' reference
-manual contains a related discussion of non-local jumps.
-
-     #include <avm/mwrap.h>
-     ...
-
-     int
-     function foobar (foo, bar)
-     ...
-     {
-     char *my_data;
-
-       my_data = (char *) malloc (100);
-       if (avm_setjmp () != 0)
-         {
-           avm_clearjmp ();
-           avm_turn_on_stdout ();       /* reaching here */
-           free (my_data);              /* means malloc  */
-           return ABNORMAL_STATUS;      /* failed below  */
-         }
-       avm_turn_off_stdout ();
-       avm_manage_memory ();
-       ...
-       call_library_functions (foo, bar);    /* may jump */
-       ...                                   /* to above */
-       avm_free_managed_memory ();
-       avm_turn_on_stdout ();
-       avm_clearjmp ();
-       free (my_data);            /* reaching here means */
-       return OK_STATUS;          /* jumping wasn't done */
-     }
-
-   Portability issues with these functions are not well known at this writing.
-If the configuration script for `avram' fails to detect the required
-features in `setjmp.h' on the host system, conditional compilation
-directives will disable the functions `avm_setjmp', `avm_clearjmp', and
-`avm_setnonjmp'.  However, it may still be possible for the other
-`avm_'* memory management functions to be configured.
-
-   If `setjmp' is not configured, the `avm_setjmp' function is still
-callable but will always return a value of zero, and will provide no
-protection against external library functions aborting the program. The
-other two will perform no operation and return.
-
-
-File: avram.info,  Node: Character Table,  Next: Reference Implementations,  Prev: Library Reference,  Up: Top
-
-Appendix A Character Table
-**************************
-
-This table lists the representations used by `avram' for characters.
-The left column shows the character code in decimal. For printable
-characters, the middle column shows the character. The right column
-shows the representation used. For example, the letter `A' has
-character code 65, and the representation
-`(nil,(((nil,(nil,(nil,nil))),nil),(nil,nil)))'.
-
-   These representations were generated automatically to meet various
-helpful criteria, and are not expected to change in future releases. No
-character representation coincides with the representations used for
-boolean values, natural numbers, character strings, pairs of characters,
-or certain other data types beyond the scope of this document. An easy
-algorithm for lexical sorting is possible. Subject to these criteria,
-the smallest possible trees were chosen.
-
-
-       0   (nil,(nil,(nil,((nil,nil),(nil,nil)))))
-       1   (nil,(nil,((nil,nil),(nil,nil))))
-       2   (nil,(nil,((nil,nil),(nil,(nil,nil)))))
-       3   (nil,(nil,((nil,(nil,nil)),(nil,nil))))
-       4   (nil,(nil,(((nil,nil),nil),(nil,nil))))
-       5   (nil,(nil,(((nil,nil),(nil,nil)),nil)))
-       6   (nil,(nil,((((nil,nil),(nil,nil)),nil),nil)))
-       7   (nil,((nil,nil),(nil,nil)))
-       8   (nil,((nil,nil),(nil,(nil,nil))))
-       9   (nil,((nil,nil),(nil,(nil,(nil,nil)))))
-      10   (nil,((nil,nil),(nil,(nil,(nil,(nil,nil))))))
-      11   (nil,((nil,nil),(nil,((nil,nil),(nil,nil)))))
-      12   (nil,((nil,nil),(nil,((nil,(nil,nil)),nil))))
-      13   (nil,((nil,nil),(nil,(((nil,nil),nil),nil))))
-      14   (nil,((nil,nil),((nil,nil),(nil,nil))))
-      15   (nil,((nil,nil),((nil,nil),(nil,(nil,nil)))))
-      16   (nil,((nil,nil),((nil,(nil,nil)),nil)))
-      17   (nil,((nil,nil),((nil,(nil,nil)),(nil,nil))))
-      18   (nil,((nil,nil),((nil,(nil,(nil,nil))),nil)))
-      19   (nil,((nil,nil),(((nil,nil),nil),(nil,nil))))
-      20   (nil,((nil,nil),(((nil,nil),(nil,nil)),nil)))
-      21   (nil,((nil,(nil,nil)),(nil,nil)))
-      22   (nil,((nil,(nil,nil)),(nil,(nil,nil))))
-      23   (nil,((nil,(nil,nil)),(nil,(nil,(nil,nil)))))
-      24   (nil,((nil,(nil,nil)),(nil,((nil,nil),nil))))
-      25   (nil,((nil,(nil,nil)),((nil,nil),nil)))
-      26   (nil,((nil,(nil,nil)),((nil,nil),(nil,nil))))
-      27   (nil,((nil,(nil,nil)),((nil,(nil,nil)),nil)))
-      28   (nil,((nil,(nil,nil)),(((nil,nil),nil),nil)))
-      29   (nil,((nil,(nil,(nil,nil))),(nil,nil)))
-      30   (nil,((nil,(nil,(nil,nil))),(nil,(nil,nil))))
-      31   (nil,((nil,(nil,(nil,nil))),((nil,nil),nil)))
-      32   (nil,((nil,(nil,(nil,(nil,nil)))),(nil,nil)))
-      33 ! (nil,((nil,(nil,((nil,nil),nil))),(nil,nil)))
-      34 " (nil,((nil,(nil,((nil,nil),(nil,nil)))),nil))
-      35 # (nil,((nil,((nil,nil),nil)),(nil,nil)))
-      36 $ (nil,((nil,((nil,nil),nil)),(nil,(nil,nil))))
-      37 % (nil,((nil,((nil,nil),(nil,nil))),nil))
-      38 & (nil,((nil,((nil,nil),(nil,nil))),(nil,nil)))
-      39 ' (nil,((nil,((nil,nil),(nil,(nil,nil)))),nil))
-      40 ( (nil,((nil,((nil,(nil,nil)),nil)),(nil,nil)))
-      41 ) (nil,((nil,((nil,(nil,nil)),(nil,nil))),nil))
-      42 * (nil,((nil,(((nil,nil),nil),nil)),(nil,nil)))
-      43 + (nil,((nil,(((nil,nil),nil),(nil,nil))),nil))
-      44 , (nil,((nil,(((nil,nil),(nil,nil)),nil)),nil))
-      45 - (nil,(((nil,nil),nil),(nil,nil)))
-      46 . (nil,(((nil,nil),nil),(nil,(nil,nil))))
-      47 / (nil,(((nil,nil),nil),(nil,(nil,(nil,nil)))))
-      48 0 (nil,(((nil,nil),nil),((nil,nil),(nil,nil))))
-      49 1 (nil,(((nil,nil),nil),((nil,(nil,nil)),nil)))
-      50 2 (nil,(((nil,nil),(nil,nil)),nil))
-      51 3 (nil,(((nil,nil),(nil,nil)),(nil,nil)))
-      52 4 (nil,(((nil,nil),(nil,nil)),(nil,(nil,nil))))
-      53 5 (nil,(((nil,nil),(nil,nil)),((nil,nil),nil)))
-      54 6 (nil,(((nil,nil),(nil,(nil,nil))),nil))
-      55 7 (nil,(((nil,nil),(nil,(nil,nil))),(nil,nil)))
-      56 8 (nil,(((nil,nil),(nil,(nil,(nil,nil)))),nil))
-      57 9 (nil,(((nil,nil),((nil,nil),nil)),(nil,nil)))
-      58 : (nil,(((nil,nil),((nil,nil),(nil,nil))),nil))
-      59 ; (nil,(((nil,nil),((nil,(nil,nil)),nil)),nil))
-      60 < (nil,(((nil,(nil,nil)),nil),(nil,nil)))
-      61 = (nil,(((nil,(nil,nil)),nil),(nil,(nil,nil))))
-      62 > (nil,(((nil,(nil,nil)),(nil,nil)),nil))
-      63 ? (nil,(((nil,(nil,nil)),(nil,nil)),(nil,nil)))
-      64 @ (nil,(((nil,(nil,nil)),(nil,(nil,nil))),nil))
-      65 A (nil,(((nil,(nil,(nil,nil))),nil),(nil,nil)))
-      66 B (nil,(((nil,(nil,(nil,nil))),(nil,nil)),nil))
-      67 C (nil,(((nil,((nil,nil),nil)),nil),(nil,nil)))
-      68 D (nil,(((nil,((nil,nil),nil)),(nil,nil)),nil))
-      69 E (nil,((((nil,nil),nil),nil),(nil,nil)))
-      70 F (nil,((((nil,nil),nil),nil),(nil,(nil,nil))))
-      71 G (nil,((((nil,nil),nil),(nil,nil)),nil))
-      72 H (nil,((((nil,nil),nil),(nil,nil)),(nil,nil)))
-      73 I (nil,((((nil,nil),nil),(nil,(nil,nil))),nil))
-      74 J (nil,((((nil,nil),(nil,nil)),nil),(nil,nil)))
-      75 K (nil,((((nil,nil),(nil,nil)),(nil,nil)),nil))
-      76 L (nil,((((nil,(nil,nil)),nil),nil),(nil,nil)))
-      77 M (nil,((((nil,(nil,nil)),nil),(nil,nil)),nil))
-      78 N (nil,(((((nil,nil),nil),nil),nil),(nil,nil)))
-      79 O (nil,(((((nil,nil),nil),nil),(nil,nil)),nil))
-      80 P ((nil,nil),(nil,nil))
-      81 Q ((nil,nil),(nil,(nil,nil)))
-      82 R ((nil,nil),(nil,(nil,(nil,nil))))
-      83 S ((nil,nil),(nil,(nil,(nil,(nil,nil)))))
-      84 T ((nil,nil),(nil,(nil,(nil,(nil,(nil,nil))))))
-      85 U ((nil,nil),(nil,(nil,((nil,(nil,nil)),nil))))
-      86 V ((nil,nil),(nil,(nil,(((nil,nil),nil),nil))))
-      87 W ((nil,nil),(nil,((nil,nil),(nil,nil))))
-      88 X ((nil,nil),(nil,((nil,(nil,nil)),nil)))
-      89 Y ((nil,nil),(nil,((nil,(nil,nil)),(nil,nil))))
-      90 Z ((nil,nil),(nil,((nil,(nil,(nil,nil))),nil)))
-      91 [ ((nil,nil),(nil,((nil,((nil,nil),nil)),nil)))
-      92 \ ((nil,nil),(nil,(((nil,nil),nil),nil)))
-      93 ] ((nil,nil),(nil,(((nil,nil),nil),(nil,nil))))
-      94 ^ ((nil,nil),(nil,(((nil,nil),(nil,nil)),nil)))
-      95 _ ((nil,nil),(nil,(((nil,(nil,nil)),nil),nil)))
-      96 ` ((nil,nil),(nil,((((nil,nil),nil),nil),nil)))
-      97 a ((nil,nil),((nil,nil),(nil,nil)))
-      98 b ((nil,nil),((nil,nil),(nil,(nil,nil))))
-      99 c ((nil,nil),((nil,nil),(nil,(nil,(nil,nil)))))
-     100 d ((nil,nil),((nil,nil),((nil,nil),(nil,nil))))
-     101 e ((nil,nil),((nil,nil),((nil,(nil,nil)),nil)))
-     102 f ((nil,nil),((nil,(nil,nil)),nil))
-     103 g ((nil,nil),((nil,(nil,nil)),(nil,nil)))
-     104 h ((nil,nil),((nil,(nil,nil)),(nil,(nil,nil))))
-     105 i ((nil,nil),((nil,(nil,nil)),((nil,nil),nil)))
-     106 j ((nil,nil),((nil,(nil,(nil,nil))),nil))
-     107 k ((nil,nil),((nil,(nil,(nil,nil))),(nil,nil)))
-     108 l ((nil,nil),((nil,(nil,(nil,(nil,nil)))),nil))
-     109 m ((nil,nil),((nil,((nil,nil),nil)),(nil,nil)))
-     110 n ((nil,nil),((nil,((nil,nil),(nil,nil))),nil))
-     111 o ((nil,nil),((nil,((nil,(nil,nil)),nil)),nil))
-     112 p ((nil,nil),(((nil,nil),nil),(nil,nil)))
-     113 q ((nil,nil),(((nil,nil),nil),(nil,(nil,nil))))
-     114 r ((nil,nil),(((nil,nil),(nil,nil)),nil))
-     115 s ((nil,nil),(((nil,nil),(nil,nil)),(nil,nil)))
-     116 t ((nil,nil),(((nil,nil),(nil,(nil,nil))),nil))
-     117 u ((nil,nil),(((nil,(nil,nil)),nil),(nil,nil)))
-     118 v ((nil,nil),(((nil,(nil,nil)),(nil,nil)),nil))
-     119 w ((nil,nil),((((nil,nil),nil),nil),(nil,nil)))
-     120 x ((nil,nil),((((nil,nil),nil),(nil,nil)),nil))
-     121 y ((nil,nil),(((((nil,nil),nil),nil),nil),nil))
-     122 z ((nil,(nil,nil)),(nil,nil))
-     123 { ((nil,(nil,nil)),(nil,(nil,(nil,nil))))
-     124 | ((nil,(nil,nil)),(nil,(nil,(nil,(nil,nil)))))
-     125 } ((nil,(nil,nil)),(nil,((nil,nil),nil)))
-     126 ~ ((nil,(nil,nil)),(nil,((nil,nil),(nil,nil))))
-     127   ((nil,(nil,nil)),(nil,((nil,(nil,nil)),nil)))
-     128   ((nil,(nil,nil)),((nil,nil),(nil,nil)))
-     129   ((nil,(nil,nil)),((nil,nil),(nil,(nil,nil))))
-     130   ((nil,(nil,nil)),((nil,(nil,nil)),nil))
-     131   ((nil,(nil,nil)),((nil,(nil,nil)),(nil,nil)))
-     132   ((nil,(nil,nil)),((nil,(nil,(nil,nil))),nil))
-     133   ((nil,(nil,nil)),(((nil,nil),nil),(nil,nil)))
-     134   ((nil,(nil,nil)),(((nil,nil),(nil,nil)),nil))
-     135   ((nil,(nil,(nil,nil))),(nil,nil))
-     136   ((nil,(nil,(nil,nil))),(nil,(nil,nil)))
-     137   ((nil,(nil,(nil,nil))),(nil,(nil,(nil,nil))))
-     138   ((nil,(nil,(nil,nil))),(nil,((nil,nil),nil)))
-     139   ((nil,(nil,(nil,nil))),((nil,nil),(nil,nil)))
-     140   ((nil,(nil,(nil,nil))),((nil,(nil,nil)),nil))
-     141   ((nil,(nil,(nil,(nil,nil)))),(nil,nil))
-     142   ((nil,(nil,(nil,(nil,nil)))),(nil,(nil,nil)))
-     143   ((nil,(nil,(nil,(nil,nil)))),((nil,nil),nil))
-     144   ((nil,(nil,(nil,(nil,(nil,nil))))),(nil,nil))
-     145   ((nil,(nil,(nil,((nil,nil),nil)))),(nil,nil))
-     146   ((nil,(nil,((nil,nil),nil))),(nil,nil))
-     147   ((nil,(nil,((nil,nil),(nil,nil)))),(nil,nil))
-     148   ((nil,(nil,((nil,(nil,nil)),nil))),(nil,nil))
-     149   ((nil,(nil,(((nil,nil),nil),nil))),(nil,nil))
-     150   ((nil,((nil,nil),nil)),(nil,nil))
-     151   ((nil,((nil,nil),nil)),(nil,(nil,nil)))
-     152   ((nil,((nil,nil),nil)),(nil,(nil,(nil,nil))))
-     153   ((nil,((nil,nil),nil)),(nil,((nil,nil),nil)))
-     154   ((nil,((nil,nil),nil)),((nil,nil),(nil,nil)))
-     155   ((nil,((nil,nil),nil)),((nil,(nil,nil)),nil))
-     156   ((nil,((nil,nil),(nil,nil))),(nil,nil))
-     157   ((nil,((nil,nil),(nil,nil))),(nil,(nil,nil)))
-     158   ((nil,((nil,nil),(nil,(nil,nil)))),(nil,nil))
-     159   ((nil,((nil,nil),((nil,nil),nil))),(nil,nil))
-     160   ((nil,((nil,(nil,nil)),nil)),(nil,nil))
-     161   ((nil,((nil,(nil,nil)),nil)),(nil,(nil,nil)))
-     162   ((nil,((nil,(nil,nil)),nil)),((nil,nil),nil))
-     163   ((nil,((nil,(nil,nil)),(nil,nil))),(nil,nil))
-     164   ((nil,((nil,(nil,(nil,nil))),nil)),(nil,nil))
-     165   ((nil,((nil,((nil,nil),nil)),nil)),(nil,nil))
-     166   ((nil,(((nil,nil),nil),nil)),(nil,nil))
-     167   ((nil,(((nil,nil),nil),(nil,nil))),(nil,nil))
-     168   ((nil,(((nil,nil),(nil,nil)),nil)),(nil,nil))
-     169   ((nil,(((nil,(nil,nil)),nil),nil)),(nil,nil))
-     170   ((nil,((((nil,nil),nil),nil),nil)),(nil,nil))
-     171   (((nil,nil),nil),(nil,nil))
-     172   (((nil,nil),nil),(nil,(nil,nil)))
-     173   (((nil,nil),nil),(nil,(nil,(nil,nil))))
-     174   (((nil,nil),nil),(nil,(nil,(nil,(nil,nil)))))
-     175   (((nil,nil),nil),(nil,(nil,((nil,nil),nil))))
-     176   (((nil,nil),nil),(nil,((nil,nil),nil)))
-     177   (((nil,nil),nil),(nil,((nil,nil),(nil,nil))))
-     178   (((nil,nil),nil),(nil,((nil,(nil,nil)),nil)))
-     179   (((nil,nil),nil),(nil,(((nil,nil),nil),nil)))
-     180   (((nil,nil),nil),((nil,nil),(nil,nil)))
-     181   (((nil,nil),nil),((nil,nil),(nil,(nil,nil))))
-     182   (((nil,nil),nil),((nil,(nil,nil)),nil))
-     183   (((nil,nil),nil),((nil,(nil,nil)),(nil,nil)))
-     184   (((nil,nil),nil),((nil,(nil,(nil,nil))),nil))
-     185   (((nil,nil),nil),(((nil,nil),nil),(nil,nil)))
-     186   (((nil,nil),nil),(((nil,nil),(nil,nil)),nil))
-     187   (((nil,nil),(nil,nil)),(nil,nil))
-     188   (((nil,nil),(nil,nil)),(nil,(nil,nil)))
-     189   (((nil,nil),(nil,nil)),(nil,(nil,(nil,nil))))
-     190   (((nil,nil),(nil,nil)),(nil,((nil,nil),nil)))
-     191   (((nil,nil),(nil,nil)),((nil,(nil,nil)),nil))
-     192   (((nil,nil),(nil,(nil,nil))),(nil,nil))
-     193   (((nil,nil),(nil,(nil,nil))),(nil,(nil,nil)))
-     194   (((nil,nil),(nil,(nil,(nil,nil)))),(nil,nil))
-     195   (((nil,nil),(nil,((nil,nil),nil))),(nil,nil))
-     196   (((nil,nil),((nil,nil),nil)),(nil,nil))
-     197   (((nil,nil),((nil,nil),nil)),(nil,(nil,nil)))
-     198   (((nil,nil),((nil,nil),(nil,nil))),(nil,nil))
-     199   (((nil,nil),((nil,(nil,nil)),nil)),(nil,nil))
-     200   (((nil,nil),(((nil,nil),nil),nil)),(nil,nil))
-     201   (((nil,(nil,nil)),nil),(nil,nil))
-     202   (((nil,(nil,nil)),nil),(nil,(nil,nil)))
-     203   (((nil,(nil,nil)),nil),(nil,(nil,(nil,nil))))
-     204   (((nil,(nil,nil)),nil),(nil,((nil,nil),nil)))
-     205   (((nil,(nil,nil)),nil),((nil,nil),(nil,nil)))
-     206   (((nil,(nil,nil)),nil),((nil,(nil,nil)),nil))
-     207   (((nil,(nil,nil)),(nil,nil)),(nil,nil))
-     208   (((nil,(nil,nil)),(nil,nil)),(nil,(nil,nil)))
-     209   (((nil,(nil,nil)),(nil,(nil,nil))),(nil,nil))
-     210   (((nil,(nil,nil)),((nil,nil),nil)),(nil,nil))
-     211   (((nil,(nil,(nil,nil))),nil),(nil,nil))
-     212   (((nil,(nil,(nil,nil))),nil),(nil,(nil,nil)))
-     213   (((nil,(nil,(nil,nil))),nil),((nil,nil),nil))
-     214   (((nil,(nil,(nil,nil))),(nil,nil)),(nil,nil))
-     215   (((nil,(nil,(nil,(nil,nil)))),nil),(nil,nil))
-     216   (((nil,(nil,((nil,nil),nil))),nil),(nil,nil))
-     217   (((nil,((nil,nil),nil)),nil),(nil,nil))
-     218   (((nil,((nil,nil),nil)),nil),(nil,(nil,nil)))
-     219   (((nil,((nil,nil),nil)),nil),((nil,nil),nil))
-     220   (((nil,((nil,nil),nil)),(nil,nil)),(nil,nil))
-     221   (((nil,((nil,nil),(nil,nil))),nil),(nil,nil))
-     222   (((nil,((nil,(nil,nil)),nil)),nil),(nil,nil))
-     223   (((nil,(((nil,nil),nil),nil)),nil),(nil,nil))
-     224   ((((nil,nil),nil),nil),(nil,nil))
-     225   ((((nil,nil),nil),nil),(nil,(nil,nil)))
-     226   ((((nil,nil),nil),nil),(nil,(nil,(nil,nil))))
-     227   ((((nil,nil),nil),nil),(nil,((nil,nil),nil)))
-     228   ((((nil,nil),nil),nil),((nil,nil),nil))
-     229   ((((nil,nil),nil),nil),((nil,nil),(nil,nil)))
-     230   ((((nil,nil),nil),nil),((nil,(nil,nil)),nil))
-     231   ((((nil,nil),nil),nil),(((nil,nil),nil),nil))
-     232   ((((nil,nil),nil),(nil,nil)),(nil,nil))
-     233   ((((nil,nil),nil),(nil,nil)),(nil,(nil,nil)))
-     234   ((((nil,nil),nil),(nil,(nil,nil))),(nil,nil))
-     235   ((((nil,nil),nil),((nil,nil),nil)),(nil,nil))
-     236   ((((nil,nil),(nil,nil)),nil),(nil,nil))
-     237   ((((nil,nil),(nil,nil)),nil),(nil,(nil,nil)))
-     238   ((((nil,nil),(nil,nil)),(nil,nil)),(nil,nil))
-     239   ((((nil,nil),(nil,(nil,nil))),nil),(nil,nil))
-     240   ((((nil,nil),((nil,nil),nil)),nil),(nil,nil))
-     241   ((((nil,(nil,nil)),nil),nil),(nil,nil))
-     242   ((((nil,(nil,nil)),nil),nil),(nil,(nil,nil)))
-     243   ((((nil,(nil,nil)),nil),nil),((nil,nil),nil))
-     244   ((((nil,(nil,nil)),nil),(nil,nil)),(nil,nil))
-     245   ((((nil,(nil,nil)),(nil,nil)),nil),(nil,nil))
-     246   ((((nil,(nil,(nil,nil))),nil),nil),(nil,nil))
-     247   ((((nil,((nil,nil),nil)),nil),nil),(nil,nil))
-     248   (((((nil,nil),nil),nil),nil),(nil,nil))
-     249   (((((nil,nil),nil),nil),nil),(nil,(nil,nil)))
-     250   (((((nil,nil),nil),nil),nil),((nil,nil),nil))
-     251   (((((nil,nil),nil),nil),(nil,nil)),(nil,nil))
-     252   (((((nil,nil),nil),(nil,nil)),nil),(nil,nil))
-     253   (((((nil,nil),(nil,nil)),nil),nil),(nil,nil))
-     254   (((((nil,(nil,nil)),nil),nil),nil),(nil,nil))
-     255   ((((((nil,nil),nil),nil),nil),nil),(nil,nil))
-
-
-File: avram.info,  Node: Reference Implementations,  Next: Changes,  Prev: Character Table,  Up: Top
-
-Appendix B Reference Implementations
-************************************
-
-This appendix contains some `silly' source code for several functions
-that are mentioned in *note Virtual Code Semantics::, for specifying
-the virtual machine code semantics, namely `pairwise', `transition',
-`insert' and `replace'.
-
-   The intention is to specify the virtual machine mathematically with a
-minimum of hand waving, by using only simple equations and small
-fragments of `silly' code, which has a straightforward semantics.
-However, the `silly' code fragments are more significant in some cases
-than what could fit into a few lines or be mechanically derived from an
-equation.
-
-   The purpose of this appendix is therefore to avoid leaving any gaps
-in the construction by demonstrating that everything mentioned can be
-done. None of this code is needed for any practical purpose, because its
-functionality is inherent in the virtual machine, but it shows how
-certain operations would be specified if they were not built in.
-
-* Menu:
-
-* Pairwise::
-* Insert::
-* Replace::
-* Transition::
-
-
-File: avram.info,  Node: Pairwise,  Next: Insert,  Prev: Reference Implementations,  Up: Reference Implementations
-
-B.1 Pairwise
-============
-
-This `silly' code fragment is mentioned in *note Reduce::, in the
-discussion of `reduce', and is provided as an example of a solution to
-equations _E1_ to _E3_. It is written in the style of a higher order
-function, in that it takes a function `F' as an argument and returns
-another function, [[`pairwise']] `F' as a result.
-
-
-     self     = left
-     argument = right
-     head     = left
-     tail     = right
-
-     pairwise =
-
-     compose(
-        refer,
-        compose(
-           bu(
-              conditional,
-              conditional(argument,compose(tail,argument),constant nil)),
-           couple(
-              (hired couple)(
-                 (hired compose)(
-                    identity,
-                    constant (hired fan head)(
-                       argument,
-                       compose(tail,argument))),
-                 constant (hired meta)(
-                    self,
-                    compose(tail,compose(tail,argument)))),
-              constant argument)))
-
-To see how this works, one should evaluate it symbolically with an
-unknown `F', which will result in some `silly' pseudocode, and then
-evaluate that symbolically with some sample lists.
-
-
-File: avram.info,  Node: Insert,  Next: Replace,  Prev: Pairwise,  Up: Reference Implementations
-
-B.2 Insert
-==========
-
-This function is mentioned in *note Sort::, on sorting. It takes the
-virtual code for a partial order relational operator and returns the
-code for a function of two arguments. The left argument is a list item
-and the right argument is a list of items of the same type, which is
-already sorted with respect to the relational operator given as the
-argument to `insert'. The result of the function returned by `insert'
-is a list similar to its right argument but with the left argument
-inserted in the proper position to maintain the order.
-
-   This code makes use of the `self', `argument', `head' and `tail'
-declarations associated with `pairwise'.
-
-
-     insert =
-
-     bu(compose,refer) (hired conditional)(
-        constant compose(right,argument),
-        couple(
-           (hired conditional)(
-              (hired compose)(
-                 identity,
-                 constant compose(
-                    couple(left,compose(head,right)),
-                    argument)),
-              constant (
-                 argument,
-                 couple(
-                    compose(head,compose(right,argument)),
-                    (hired meta)(
-                       self,
-                       couple(
-                          compose(left,argument),
-                          compose(tail,compose(right,argument))))))),
-           constant argument))
-
-   As with the other higher order functions in this appendix, the only
-feasible ways to verify it would be either by formal proof or by some
-form of symbolic interpretation.
-
-
-File: avram.info,  Node: Replace,  Next: Transition,  Prev: Insert,  Up: Reference Implementations
-
-B.3 Replace
-===========
-
-This code is needed in the discussion of assignment in *note
-Assignment::.  where it serves as a solution to equation _E0_. The idea
-is that the function takes an argument of the form
-`((LOCATIONS,VALUES),STORE)' and returns the store with the values
-stored at the locations indicated.
-
-
-     locations = compose(left,compose(left,argument))
-     values    = compose(right,compose(left,argument))
-     store     = compose(right,argument)
-
-     replace =
-
-     refer conditional(
-        store,
-        (
-           conditional(
-              compose(left,locations),
-              (
-                 conditional(
-                    compose(right,locations),
-                    (
-                       (hired meta)(
-                          self,
-                          couple(
-                             (hired fan right)(locations,values),
-                             (hired meta)(
-                                self,
-                                couple(
-                                   (hired fan left)(locations,values),
-                                   store)))),
-                       couple(
-                          (hired meta)(
-                             self,
-                             couple(
-                                couple(compose(left,locations),values),
-                                compose(left,store))),
-                          compose(right,store)))),
-                 conditional(
-                    compose(right,locations),
-                    (
-                       couple(
-                          compose(left,store),
-                          (hired meta)(
-                             self,
-                             couple(
-                                couple(compose(right,locations),values),
-                                compose(right,store)))),
-                       values)))),
-              (hired meta)(
-                 self,
-                 couple(couple(locations,values),constant (nil,nil)))))
-
-
-File: avram.info,  Node: Transition,  Prev: Replace,  Up: Reference Implementations
-
-B.4 Transition
-==============
-
-This code is relevant to the discussion of `transfer' in *note
-Transfer::, where its specification is described in detail. When this
-code is evaluated on a virtual code application `F', the result is the
-code for a transition function that takes one configuration to the next
-in the course of evaluating a transfer function, as specified in
-equations _E7_ to _E9_.  
-
-
-     output_buffer = compose(left,argument)
-     input_buffer = compose(right,compose(right,argument))
-     active = compose(left,compose(right,argument))
-     state = compose(left,active)
-     output = compose(right,active)
-
-     transition =
-
-     bu(compose,refer) (hired bu(conditional,active))(
-        (hired conditional)(
-           constant input_buffer,
-           bu(compose,(fan bu(hired meta,self))) (hired apply)(
-              constant fan bu(couple,couple(output,output_buffer)),
-              couple (fan bu(compose,couple))(
-                 couple(
-                    (hired apply)(
-                       hired,
-                       constant (state,compose(head,input_buffer))),
-                    constant compose(tail,input_buffer)),
-                 couple(
-                    (hired apply)(hired,constant(state,constant nil)),
-                    constant constant nil)))),
-        constant compose(flat,compose(reverse,output_buffer)))
-
-
-File: avram.info,  Node: Changes,  Next: External Libraries,  Prev: Reference Implementations,  Up: Top
-
-Appendix C Changes
-******************
-
-This section is reserved for brief updates due to changes in the
-software that may be important enough to note temporarily until more
-thorough revisions to the document can be made.
-
-   The lack of content here indicates that the current version is either
-completely up to date or in such a sorry state of neglect that even
-this section is obsolete.
-
-
-File: avram.info,  Node: External Libraries,  Next: Copying,  Prev: Changes,  Up: Top
-
-Appendix D External Libraries
-*****************************
-
-Various functions are callable from virtual code applications by way of
-the `library' combinator as explained in *note Library combinator::. An
-expression (shown in `silly' syntax) of the form `library('foo','bar')
-x' applies a function named `'bar'' from a library named `'foo'' to an
-argument `x'.
-
-   A brief overview of the libraries and functions can always be had by
-executing
-
-     $ avram --external-libraries
-
-The listing displayed by this command may show some that are not
-included here if this version of the documentation is not current or
-your installation has been locally enhanced. It may also lack some that
-are documented here if your installation is not fully equipped.
-
-   Although the overview from the command line is adequate for a
-reminder, it is not informative enough to explain how each function
-should be used. The purpose of this section is to provide this
-information in greater detail.
-
-   Some general comments are applicable to all libraries.
-
-   Each library documented in this section can generate error messages
-in the event of exceptional conditions, that are documented
-individually.  In addition to those, it's also possible for any library
-function to return error messages of 
-
-     <'unrecognized library'>
-     <'unrecognized XXXX function name'>
-
-where XXXX is the name of a library.  These indicate either that the
-library name is invalid, or the library name is valid but the function
-name is invalid, or that they're both valid but the library wasn't
-detected on the host when `avram' was compiled. A virtual code
-application can always avoid these errors by testing for the
-availability of a function using the `have' combinator (*note Have
-combinator::).
-
-   In addition, any library function that operates on numerical values
-or lists thereof can return these messages in cases of invalid input.  
-
-     <'missing value'>
-     <'invalid value'>
-     <'bad vector specification'>
-     <'bad matrix specification'>
-
-These messages indicate that an input parameter that was required to be
-a valid representation of a floating point number, a vector, or a
-matrix was something other than that (*note Type Conversions::).  The
-last could also occur if a parameter that is required to be a square
-matrix has unequal numbers of rows and columns.
-
-* Menu:
-
-* bes::       Bessel functions
-* complex::   native complex arithmetic
-* fftw::      fast Fourier transforms
-* glpk::      simplex linear programming
-* gsldif::    numerical differentiation
-* gslevu::    series acceleration
-* gslint::    numerical integration
-* harminv::   harmonic inversion
-* kinsol::    constrained non-linear optimization
-* lapack::    linear algebra
-* math::      native floating point arithmetic
-* mtwist::    random number generation
-* minpack::   non-linear optimization
-* mpfr::      arbitrary precision arithmetic
-* lpsolve::   mixed integer programming
-* rmath::     statistical and special functions
-* umf::       sparse matrices
-
-
-File: avram.info,  Node: bes,  Next: complex,  Prev: External Libraries,  Up: External Libraries
-
-D.1 `bes'
-=========
-
-An interface to the Bessel functions as defined in the GNU Scientific
-Library (gsl) is available to virtual code applications by invoking a
-function of the form
-
-     library('bes',f)
-
-where f is a character string identifying the Bessel function family.
-All functions in this library return a floating point number encoded as
-in *note math::.
-
-* Menu:
-
-* Bessel function calling conventions::
-* Bessel function errors::
-
-
-File: avram.info,  Node: Bessel function calling conventions,  Next: Bessel function errors,  Prev: bes,  Up: bes
-
-D.1.1 Bessel function calling conventions
------------------------------------------
-
-The virtual code interface simplifies the gsl C language API by
-excluding the facilities for error estimates, omitting certain array
-valued functions, and subsuming sets of related functions within common
-ones where possible.
-
-   The functions with names in the following group take an argument of
-the form `(n,x)', where `n' identifies the member of the function
-family, and `x' is the argument to the function.
-
-   * `J' regular cylindrical Bessel functions
-
-   * `Y' irregular cylindrical Bessel functions
-
-   * `I' regular modified cylindrical Bessel functions
-
-   * `K' irregular modified cylindrical Bessel functions
-
-   For these functions, `n' can be either a natural number encoded as
-in *note Representation of Numeric and Textual Data::, or a floating
-point number encoded as in *note math::. The latter case specifies
-functions of a fractional order. The relevant gsl function is called
-based on the value and type of the parameter.
-
-   Two further related families of functions follow the same calling
-convention.
-
-   * `Isc' scaled regular modified cylindrical Bessel functions
-
-   * `Ksc' scaled irregular modified cylindrical Bessel functions
-
-The foregoing functions are related to those above by an exponential
-scale factor as documented in the gsl reference manual.
-
-   Functions with names in the following group also take an argument of
-the form `(n,x)', but are not defined for fractional orders and so
-require a natural number for `n'.
-
-   * `j' regular spherical Bessel functions
-
-   * `y' irregular spherical Bessel functions
-
-   * `isc' regular modified spherical Bessel functions
-
-   * `ksc' irregular modified spherical Bessel functions
-
-   The functions in the remaining group follow idiosyncratic calling
-conventions.
-
-   * `zJ0', `zJ1' These take a natural number `n' and return the `n'th
-     root of the regular cylindrical Bessel functions of order 0 or 1,
-     respectively.
-
-   * `zJnu' This takes a pair `(nu,n)' where `nu' is the (fractional)
-     order of a regular cylindrical Bessel function, `n' is a natural
-     number. It returns the `n'th zero of the function.
-
-   * `lnKnu' This takes a pair of floating point numbers `(nu,x)' where
-     `nu' is the (fractional) order of an irregular modified
-     cylindrical Bessel and `x' is the argument to the function, and it
-     returns the natural log of the function.
-
-
-File: avram.info,  Node: Bessel function errors,  Prev: Bessel function calling conventions,  Up: bes
-
-D.1.2 Bessel function errors
-----------------------------
-
-Memory overflows and unrecognized function names can happen as with
-other library interfaces. A message of 
-
-     <'bad bessel function call'>
-
-means that invalid input parameters were given, such as a fractional
-order to a function family that is defined only for natural orders.
-
-
-File: avram.info,  Node: complex,  Next: fftw,  Prev: bes,  Up: External Libraries
-
-D.2 `complex'
-=============
-
-Complex numbers are represented according to the ISO C standard as arrays
-of two IEEE double precision floating point numbers of 8 bytes each,
-with the number representing the real part first.
-
-   A small selection of operations on complex numbers is available by
-function calls of the form `library('complex',f)'. These functions are
-implemented by the host system's C library.
-
-   One example is `library('complex','create')' which takes a pair of
-floating point numbers `(X,Y)' to a complex number whose real part is X
-and whose imaginary part is Y.  See *note math:: for information about
-constructing floating point numbers.
-
-   Other than that, the `complex' library functions `f' fall into three
-main groups, which are the real valued unary operations, the complex
-valued unary operations, and the complex valued binary operations. All
-of these operations are designated by their standard C names as
-documented elsewhere, such as the GNU `libc' reference manual, except
-as noted.
-
-* real valued unary operations
-
-          creal  cimag  cabs  carg
-
-* complex valued unary operations
-
-          ccos   cexp    clog   conj   csin    csqrt
-          ctan   csinh   ccosh  ctanh  casinh  cacosh
-          catanh casin   cacos  catan
-
-* complex valued binary operations
-
-          cpow  vid  bus  mul  add  sub  div
-
-   The last four correspond to the C language operators `*', `+', `-',
-and `/' for complex numbers.  The functions named `vid' and `bus' are
-similar to `div' and `sub', respectively, but with the operands
-interchanged. That is,
-
-     library('complex','vid') (x,y)
-
-is equivalent to
-
-     library('complex','div') (y,x)
-
-   All functions in this library taking complex numbers as input may
-also operate on real numbers, and binary operators can have either or
-both operands real. For real operands, a value of zero is inferred as
-the imaginary part. The result type of the function is the same
-regardless.
-
-
-File: avram.info,  Node: fftw,  Next: glpk,  Prev: complex,  Up: External Libraries
-
-D.3 `fftw'
-==========
-
-Some functions in the `fftw' fast Fourier transform library are callable
-by virtual code programs of the form `library('fftw',f)', where `f' can
-be one of the following character strings.
-
-`u_fw_dft'
-     (uni-dimensional forward Discrete Fourier transform)
-
-`u_bw_dft'
-     (uni-dimensional backward Discrete Fourier transform)
-
-`b_fw_dft'
-     (bi-dimensional forward Discrete Fourier transform)
-
-`b_bw_dft'
-     (bi-dimensional backward Discrete Fourier transform)
-
-`u_dht'
-     (uni-dimensional Discrete Hartley transform)
-
-`b_dht'
-     (bi-dimensional Discrete Hartley transform)
-
-   These stand for the discrete Fourier transform, in one dimension and
-two dimensions, either backward or forward, and the discrete Hartley
-transform in one dimension and two dimensions. The `fftw' library
-documentation (`http://www.fftw.org') can give more information about
-the meaning of these transformations.
-
-   The interface is somewhat simplified compared to the API for the
-`fftw' C library because there are no considerations of memory
-management or planning, nor any provision for dimensions higher than
-two.
-
-   Furthermore, from the virtual side of the interface, these functions
-operate on lists rather than arrays. The one dimensional Fourier
-transforms take a list of complex numbers to a list of complex numbers
-(see *note complex::), and the one dimensional Hartley transforms take
-a list of reals to a list of reals (see *note math::). The two
-dimensional transforms are analogous but they take a matrix represented
-as a list of lists. Error messages pertaining to invalid input
-documented at the beginning of this section (*note External
-Libraries::) are relevant.
-
-   Finally, unlike the native API for `fftw', these transformations are
-scaled so that the backward transformation is the inverse of the
-forward, and the Hartley transformations are their own inverses
-(subject to roundoff error).
-
-
-File: avram.info,  Node: glpk,  Next: gsldif,  Prev: fftw,  Up: External Libraries
-
-D.4 `glpk'
-==========
-
-The `glpk' library (`ftp://ftp.gnu.org/pub/gnu/glpk/') solves linear
-programming problems by the either the simplex algorithm or an interior
-point method.
-
-   The API for C client programs involves a complicated protocol with
-many optional settings, which is simplified for the virtual machine
-interface. Specifically, the library gives a choice of only two
-functions, which can be expressed in the following forms.
-
-     library('glpk','simplex')
-
-     library('glpk','interior')
-
-These functions have the same calling convention and should return
-generally the same output for identical inputs, but differences in
-performance, precision, and maybe correctness can be expected.  The
-remainder of this section applies to both of them.
-
-* Menu:
-
-* glpk input parameters::
-* glpk output::
-* glpk errors::
-* Additional glpk notes::
-
-
-File: avram.info,  Node: glpk input parameters,  Next: glpk output,  Prev: glpk,  Up: glpk
-
-D.4.1 `glpk' input parameters
------------------------------
-
-The argument must be a triple of the form, `(C,(M,Y))', subject to the
-following specification.
-
-   * C is a list of cost function coefficients as floating point
-     numbers (see *note math::). There should be one item of C for each
-     variable in the linear programming problem (Note that there is no
-     additive constant, which would require one extra).
-
-     The interpretation of C is that an assignment of non-negative
-     values to the variables X is sought to make the vector inner
-     product C X as small as possible.
-
-   * M is a sparse matrix represented as a list of triples in the form 
-
-          <((I,J),A)...>
-
-     where I and J are row and column indices as natural numbers
-     starting from 0 and A is a non-zero floating point number. The
-     presence of a triple `((I,J),A)' in the list indicates that the
-     I,J-th entry in the matrix has a value of A.  Missing combinations
-     of I and J indicate that the corresponding entry is zero.
-
-     The interpretation of M is that together with Y it specifies a
-     system of equations the variables in the solution X must satisfy
-     simultaneously, as explained below.
-
-   * Y is a list of floating point numbers, with one number for each
-     distinct value of I in M, above, needed to complete the equations.
-
-     The interpretation of Y is that in matrix notation, the condition
-     M X = Y must be met by any acceptable solution X.
-
-     To put it another way, for each distinct value of I, the I-th item
-     of Y has to equal the sum over all J of XJ A, where A is the real
-     number appearing in the triple `((I,J),A)' in M, if any, and XJ is
-     the J-th variable of the solution.
-
-
-File: avram.info,  Node: glpk output,  Next: glpk errors,  Prev: glpk input parameters,  Up: glpk
-
-D.4.2 `glpk' output
--------------------
-
-If a solution meeting the constraints is found, it is returned as a
-list of pairs of the form `<(I,X)...>', where each I is a natural
-number and each X is a floating point number giving the value obtained
-for the I-th variable numbered from zero. Any values of I that are
-omitted from the list indicate that the corresponding variable has a
-value of zero.
-
-   If no solution is found due to infeasibility or because `glpk' just
-didn't find one, an empty list is returned. The lack of a solution is
-not treated as an exceptional condition.
-
-
-File: avram.info,  Node: glpk errors,  Next: Additional glpk notes,  Prev: glpk output,  Up: glpk
-
-D.4.3 `glpk' errors
--------------------
-
-Possible error messages are
-
-     <'bad glpk specification'>
-
-which means that the input did not conform to the description given
-above, and
-
-     <'memory overflow'>
-
-   It is not considered an exceptional condition for no feasible
-solution to exist, and in that case an empty list is returned.
-
-   The `glpk' documentation gives no assurance as to the correctness of
-reported solutions, so the user should also take the possibility of
-incorrect results into account.
-
-
-File: avram.info,  Node: Additional glpk notes,  Prev: glpk errors,  Up: glpk
-
-D.4.4 Additional `glpk' notes
------------------------------
-
-A sparse matrix representation of M is used because in practice most
-linear programming problems have very sparse systems of equations.
-
-   Only the constraint of non-negativity is admitted.  Other constraints
-such as upper bounds must be effected through a change of variables if
-required.
-
-   The `glpk' library has a small memory leak, which `avram' corrects
-by methods described in *note Memory leaks::.
-
-
-File: avram.info,  Node: gsldif,  Next: gslevu,  Prev: glpk,  Up: External Libraries
-
-D.5 `gsldif'
-============
-
-Numerical differentiation of a real valued function of a single real variable
-can be done by a library function of the form
-
-     library('gsldif',method)
-
-where `method' is one of
-
-   * `'backward''
-
-   * `'central''
-
-   * `'forward''
-
-   * `'t_backward''
-
-   * `'t_central''
-
-   * `'t_forward''
-
-* Menu:
-
-* gsldif input parameters::
-* gsldif output::
-* gsldif exceptions::
-* Additional gsldif notes::
-
-
-File: avram.info,  Node: gsldif input parameters,  Next: gsldif output,  Prev: gsldif,  Up: gsldif
-
-D.5.1 `gsldif' input parameters
--------------------------------
-
-The argument to the functions with mnemonics of `backward', `central'
-or `forward' is a pair `(F,X)', where F is the virtual machine code for
-a real valued function of a real variable, and X is the input to F
-where the derivative is sought. Real numbers are represented according
-to *note math::.
-
-   The argument to the functions with mnemonics of `t_backward',
-`t_central' or `t_forward' is a pair `((F,T),X)', where F and X are as
-above, and T is a tolerance represented as a floating point number. The
-tolerance is passed through to the GNU Scientific library (GSL)
-differentiation routines.
-
-   When no tolerance is specified, the default is  `1.0e-8'.
-
-
-File: avram.info,  Node: gsldif output,  Next: gsldif exceptions,  Prev: gsldif input parameters,  Up: gsldif
-
-D.5.2 `gsldif' output
----------------------
-
-The result returned by `library('gsldif',method) (f,x)' or
-`library('gsldif',method) ((f,t),x)' is an approximation of the first
-derivative of F evaluated at X.
-
-   The result is obtained by the one of the GNU Scientific Library (GSL) functions
-for numerical differentiation that matches the virtual code function
-name. These functions are documented in the GSL reference manual. The
-three methods should have approximately the same results but may differ
-in numerical properties.
-
-
-File: avram.info,  Node: gsldif exceptions,  Next: Additional gsldif notes,  Prev: gsldif output,  Up: gsldif
-
-D.5.3 `gsldif' exceptions
--------------------------
-
-An error message of 
-
-     <'bad derivative specification'>
-
-will be returned if the either the whole argument, F, or X is `nil'.
-
-   Any error message caused by the evaluation of F will propagate to
-the result.
-
-
-File: avram.info,  Node: Additional gsldif notes,  Prev: gsldif exceptions,  Up: gsldif
-
-D.5.4 Additional `gsldif' notes
--------------------------------
-
-The function F may be any expressible virtual machine code function
-that takes a real argument to a real result, including one that uses
-other library functions. However, if F passes functions to other
-library functions as arguments, there is a constant overhead in stack
-space for each level, and a remote possibility of a segmentation fault
-if they are very deeply nested.
-
-   Numerical instability is an issue for higher derivatives (i.e.,
-differentiating a function that is obtained by differentiating another
-function). Some experimentation with larger tolerances may be needed.
-
-
-File: avram.info,  Node: gslevu,  Next: gslint,  Prev: gsldif,  Up: External Libraries
-
-D.6 `gslevu'
-============
-
-This library exports a pair of functions of the form
-
-     library('gslevu','accel')
-
-     library('gslevu','utrunc')
-
-that take a list of real numbers X to a pair of real numbers `(S,E)'.
-
-   The idea is that X represents the first few terms of an infinite series
-whose sum converges, but only very slowly. The functions extrapolate an
-estimate of the infinite summation by the Levin u-transform as
-documented in the GNU Scientific Library reference manual.
-
-   For well behaved series, considerably fewer terms are needed for an
-accurate estimate than a direct summation would require.
-
-* Menu:
-
-* gslevu calling conventions::
-* gslevu exceptions::
-
-
-File: avram.info,  Node: gslevu calling conventions,  Next: gslevu exceptions,  Prev: gslevu,  Up: gslevu
-
-D.6.1 `gslevu' calling conventions
-----------------------------------
-
-The input to either of these functions is a list of real numbers
-represented as explained in *note math::.
-
-   The result is a pair `(S,E)' holding an estimate of the sum, S, and
-an estimate of the error in the sum, E, each being a real number.
-
-   Both functions compute the same sum, S, but the `utrunc' function is
-faster and more memory efficient, using a less trustworthy method of
-estimating the error.
-
-
-File: avram.info,  Node: gslevu exceptions,  Prev: gslevu calling conventions,  Up: gslevu
-
-D.6.2 `gslevu' exceptions
--------------------------
-
-If an empty list is passed as a parameter to a function in this library,
-an error message of `<'empty gslevu sequence'>' is returned.
-
-   If there is insufficient memory, an error message of `<'memory
-overflow'>' is returned.
-
-   Other than that, no exceptional conditions are relevant other than
-the general ones documented at the beginning of *note External
-Libraries::.
-
-
-File: avram.info,  Node: gslint,  Next: harminv,  Prev: gslevu,  Up: External Libraries
-
-D.7 `gslint'
-============
-
-An interface to a selection of numerical integration routines from the GNU
-Scientific Library is provided by functions of the form
-
-     library('gslint',q)
-
-where q can be one of `'qng'', `'qng_tol'', `'qagx'', `'qagx_tol'',
-`'qagp'', or `'qagp_tol''.
-
-* Menu:
-
-* gslint input parameters::
-* gslint output::
-* gslint exceptions::
-* Additional gslint notes::
-
-
-File: avram.info,  Node: gslint input parameters,  Next: gslint output,  Prev: gslint,  Up: gslint
-
-D.7.1 `gslint' input parameters
--------------------------------
-
-The library functions `qng' and `qagx' take an argument of the form
-`(F,(A,B))', where F is a function to be integrated, A is the lower
-limit, and B is the upper limit, both limits being floating point
-numbers as in *note math::.
-
-   The `qng_tol' and `qagx_tol' functions take an argument of the form
-`((F,T),(A,B))', where F, A, and B are as above, and T is a specified
-tolerance.
-
-   The `qagp' and `qagp_tol' functions take arguments of the form
-`(F,P)' and `((F,T),P)', respectively, where F and T are as above, and
-P is an ordered list of real numbers specifying the limits of
-integration along with arbitrarily many intervening breakpoints.
-
-   The integrand F is expressed in virtual machine code, and takes a
-single real argument to a real result. The argument and result of F are
-required to be floating point numbers as described in *note math::. Any
-expressible function of this type is acceptable, even one defined in
-terms of other integrals, so that a double or triple integral can be
-expressed easily, albeit a costly computation.  However, a constant
-overhead in stack space is required for each nested library function
-call, and there is currently no mechanism to prevent segmentation
-faults due to a stack overflow.
-
-   When no tolerance is specified, as with `qng', `qagx', and `qagp',
-the tightest attainable tolerance is chosen by default, currently
-`2e-14', in order find the most accurate result possible. A selection
-of progressively looser tolerances is tried automatically if the
-tightest one is not successful, stopping when either a solution is
-found or ten orders of magnitude are covered.
-
-   If a tolerance is explicitly specified, as with `qng_tol',
-`qagx_tol' or `qagp_tol', only that tolerance is tried.
-
-
-File: avram.info,  Node: gslint output,  Next: gslint exceptions,  Prev: gslint input parameters,  Up: gslint
-
-D.7.2 `gslint' output
----------------------
-
-In all cases, if no exception occurs, the result returned is an
-approximation of the integral of F over the interval from A to B or
-from the first item of P to the last.
-
-   Results may differ in numerical properties depending on the
-integration method and the tolerance used.
-
-   * The `qagp'* and `qagx'* functions use an adaptive algorithm, whereas
-     the `qng'* functions use a faster non-adaptive algorithm suitable
-     only for smooth integrands.
-
-   * Faster and maybe more accurate results are obtained for
-     discontinuous or non-differentiable integrands by the `qagp'*
-     integration methods if the interior points in P are chosen to
-     coincide with the discontinuities or corners.
-
-   * Larger tolerances are conducive to faster but less accurate
-     results in most cases.
-
-
-File: avram.info,  Node: gslint exceptions,  Next: Additional gslint notes,  Prev: gslint output,  Up: gslint
-
-D.7.3 `gslint' exceptions
--------------------------
-
-If an argument of an inappropriate form can be detected (such as an
-empty pair or one without floating point numbers), it causes an error
-message to be returned saying 
-
-     <'bad integral specification'>
-
-Error messages signalled by the integrand F may also be reported, as
-well as any message returned by `gsl_strerror'. A typical cause for a
-`gsl_strerror' message would be an explicitly specified tolerance that
-is too tight. An error message of 
-
-     <'slow convergence'>
-
-is returned in the event of excessively many function evaluations
-(currently 3600 at each tolerance level).
-
-
-File: avram.info,  Node: Additional gslint notes,  Prev: gslint exceptions,  Up: gslint
-
-D.7.4 Additional `gslint' notes
--------------------------------
-
-The `qagx'* functions subsume the GSL variants `qags', `qagiu',
-`qagil', and `qagi' for finite, semi-infinite, and infinite intervals,
-which are seleted as appropriate based on the limits of integration A
-and B.
-
-   The `qagp' function reverts to the `qagx' function if there are only
-two points given in P. Fewer than two will cause an error.
-
-   The library interface code relies on the standard `setjmp' utility
-found in the system header file `setjmp.h' to break out of integrals
-that don't converge after excessively many function evaluations.
-Non-termination has been an issue in the past with GSL integration
-routines for very badly behaved integrands, and the API provides no
-documented means for the user supplied integrand function to request a
-halt.
-
-   Although it is meant to be standard, a host without `setjmp' will
-cause `avram' to be configured to abort the application with an error
-message in the event of non-convergence. This behavior is considered
-preferable to the alternative of non-termination. Usually an effective
-workaround in such cases is to specify a sufficiently loose tolerance
-explicitly by using one of the *`_tol' library functions.
-
-
-File: avram.info,  Node: harminv,  Next: kinsol,  Prev: gslint,  Up: External Libraries
-
-D.8 `harminv'
-=============
-
-The `harminv' library decomposes a complex valued function of a discrete
-variable into a sum of decaying sinusoids given a finite sample. It
-uses a method with better accuracy and convergence than Fourier
-analysis or least squares curve fitting. More information is available
-at `http://ab-initio.mit.edu/wiki/index.php/Harminv'.
-
-* Menu:
-
-* harminv input parameters::
-* harminv output::
-* harminv exceptions::
-* Additional harminv notes::
-
-
-File: avram.info,  Node: harminv input parameters,  Next: harminv output,  Prev: harminv,  Up: harminv
-
-D.8.1 `harminv' input parameters
---------------------------------
-
-The virtual machine interface to the `harminv' library provides only a
-single function, callable as
-
-     library('harminv','hsolve')
-
-The input to this function is an operand of the form
-
-     (signal,(fmin,fmax),nf)
-
-where
-
-   * `signal' is a list of complex numbers containing samples of the
-     function to be decomposed at equal time steps (*note complex:: and
-     *note Representation of Numeric and Textual Data::).
-
-   * `fmin' and `fmax' are the band limits expressed in units of
-     inverse time steps as floating point numbers (*note math::).
-
-   * `nf' is the number of spectral basis functions expressed as a
-     natural (*note Representation of Numeric and Textual Data::).
-
-If a value of 0 is specified for `nf' a default value of
-
-     min(300, (fmax - fmin) * n * 1.1)
-
-is used, where `n' is the length of `signal'. The computation time
-increases cubically with `nf'.
-
-
-File: avram.info,  Node: harminv output,  Next: harminv exceptions,  Prev: harminv input parameters,  Up: harminv
-
-D.8.2 `harminv' output
-----------------------
-
-The result returned by a call to
-
-     library('harminv','hsolve')
-
-with valid input (*note harminv input parameters::) is a list of
-similar tuples of the form
-
-     <(amplitude,frequency,decay,quality,error)...>
-
-with all members being real valued except for the amplitudes, which are
-complex. Each tuple describes a function of the form
-
-     f(t) = A * sin (frequency * t + P) * exp (-decay * t)
-
-such that the summation of these functions approximates the original
-given signal (*note harminv input parameters::). The real amplitude `A'
-and phase `P' are given by the modulus and argument of the complex
-amplitude returned in the result,
-
-     A = library('complex','cabs') amplitude
-     P = library('complex','carg') amplitude
-
-in terms of the complex library functions (*note complex::).  The error
-values are measures of the goodness of fit, and the quality factors are
-defined as
-
-     quality = (pi * |frequency| / decay)
-
-It may be useful in some applications to ignore components with quality
-factors outside of a certain range.
-
-
-File: avram.info,  Node: harminv exceptions,  Next: Additional harminv notes,  Prev: harminv output,  Up: harminv
-
-D.8.3 `harminv' exceptions
---------------------------
-
-Various exceptional conditions are possible with the `harminv' library
-interface, and one of the following messages could be returned. Each of
-them has the form of a list containing a single character string.
-
-   * `unrecognized harminv function name' is reported in case of a
-     function call of the form `library('harminv',f)' where `f' is
-     anything other than the character string `'hsolve'', this being
-     the only function in the library.
-
-   * `bad harminv function call' is reported if the input parameters
-     don't meet the specifications described in *note harminv input
-     parameters::, or if `fmin' is greater than `fmax'.
-
-   * `bad vector specification' could be the result of a list of real
-     numbers rather than complex numbers being passed as a `signal'.
-     Real numbers can be converted to complex numbers using the
-     `create' function from the `complex' library (*note complex::).
-
-   * `memory overflow' can occur if `avram' is operating very close to
-     the limit of host memory, or perhaps if infeasibly large values
-     are passed as `nf'
-
-   * `counter overflow' is similar to a memory overflow
-
-
-File: avram.info,  Node: Additional harminv notes,  Prev: harminv exceptions,  Up: harminv
-
-D.8.4 Additional `harminv' notes
---------------------------------
-
-The `harminv' library interface requires the `harminv' and `lapack'
-libraries to be installed on the host system, and also requires
-standard complex number support from the system's C library.
-
-   The author's installation of `avram' has been compiled against the
-Debian `harminv' development library package, which at this writing is
-unmaintained and is missing the necessary header file `harminv-int.h',
-without which compilation of files including `harminv.h' fails. Some
-headers from `harminv.h' have been copied directly into
-`avram-x.x.x/src/harminv.c' under the `avram' source tree to avoid this
-dependence, so that `avram' will compile correctly on a Debian system.
-These may need to be updated if necessary to track the `harminv' source.
-
-
-File: avram.info,  Node: kinsol,  Next: lapack,  Prev: harminv,  Up: External Libraries
-
-D.9 `kinsol'
-============
-
-The `kinsol' library (`http://www.llnl.gov/CASC/sundials/') contains
-sophisticated routines for non-linear optimization and constrained
-non-linear optimization, some of which are available to virtual code
-applications by way of functions expressed as shown.
-
-     library('kinsol',k)
-
-The function name `k' is a string of the form `'XY_ZZZZZ''. The field
-ZZZZZ specifies the optimization algorithm, which can be one of `dense',
-`gmres', `bicgs', or `tfqmr', following the names used by the API for
-`kinsol' in C. The field Y determines the way gradients are obtained,
-which is either `j' for a user supplied Jacobian, or `d' for finite
-differences computed by `kinsol'. The remaining field X is either `c'
-for constrained optimization, or `u' for unconstrained. Hence, the
-whole function name can be one of sixteen possible alternatives.
-
-     cd_dense   cd_gmres   cd_bicgs   cd_tfqmr
-     ud_dense   ud_gmres   ud_bicgs   ud_tfqmr
-     cj_dense   cj_gmres   cj_bicgs   cj_tfqmr
-     uj_dense   uj_gmres   uj_bicgs   uj_tfqmr
-
-   More specific information about the optimization algorithms can be
-found in the `kinsol' documentation at the above address. Different
-algorithms may perform better on different problems.
-
-* Menu:
-
-* kinsol input parameters::
-* kinsol output::
-* kinsol exceptions::
-* Additional kinsol notes::
-
-
-File: avram.info,  Node: kinsol input parameters,  Next: kinsol output,  Prev: kinsol,  Up: kinsol
-
-D.9.1 `kinsol' input parameters
--------------------------------
-
-Functions whose names are of the form `Xd_ZZZZZ' take an argument of
-the form `(F,(I,O))', and functions whose names are of the form
-`Xj_ZZZZZ' take an argument of the form `((F,J),(I,O))'.  The
-parameters have these interpretations.
-
-   * F is a function to be optimized, expressed in virtual machine
-     code. It takes a list of real numbers as input and returns a list
-     of real numbers as output. The numbers must be in floating point
-     format as described in *note math::.
-
-   * J is a function in virtual machine code that computes the Jacobian
-     or partial derivatives of F for a given list of input numbers. The
-     exact calling convention for J depends on the optimization
-     algorithm selected, as explained below.
-
-   * I is a list of real numbers suitable as an input for F.  The exact
-     values of the numbers in I are not crucial but the length of I is
-     taken as an indication of the required length for any input list
-     to F. In the case of constrained optimization problems (i.e.,
-     functions with names beginning with `c'), I must consist entirely
-     of non-negative numbers.
-
-   * O is a list numbers indicating the "optimal" output from F in the
-     sense described below (*note kinsol output::). Its length is taken
-     to indicate the usual length of an output returned by F.
-
-   If the optimization problem is being solved by either the `cj_dense'
-or the `uj_dense' method, the Jacobian parameter J is expected to take
-a list V of real numbers the length of I as input and return a list of
-lists of reals as output. The numbers are represented as described in
-*note math::. The outer list in the output from J is required to be the
-length of O, while each inner list is required to be the length of I.
-
-   The output from J is interpreted as a matrix of the form described
-in *note Two dimensional arrays::. The entry in row M and column N is
-the partial derivative (evaluated at V) of the M-th component of the
-output of F with respect to the N-th item of the input list.
-
-   For optimization problems being solved by the methods of `Xj_gmres',
-`Xj_bicgs', or `Xj_tfqmr', (i.e., where X is either `c' or `u') the
-Jacobian function J follows a different convention that is meant to be
-more memory efficient. Given an argument of the form `(M,V)', it
-returns only the M-th row of the matrix described above instead of the
-whole thing. The parameter M is a natural number less than the length
-of O, and V is a list of real numbers the length of I the same as
-above. The number M is encoded as described in *note Representation of
-Numeric and Textual Data::.
-
-
-File: avram.info,  Node: kinsol output,  Next: kinsol exceptions,  Prev: kinsol input parameters,  Up: kinsol
-
-D.9.2 `kinsol' output
----------------------
-
-The `kinsol' functions attempt to search the domain of F for a vector V
-the length of I to satisfy `F(V) = O' as closely as possible. In the
-case of constrained optimization, (i.e., functions whose names begin
-with `c'), only non-negative numbers are acceptable in V. The search
-for V will start in the vicinity of I. The value of I will therefore
-determine a unique solution if multiple solutions exist, and will save
-time if it is near a solution.
-
-   In some cases when a solution can't be found due to non-convergence, an
-empty list is returned. Non-convergence is not considered an
-exceptional condition. In all other cases where no exception occurs,
-the output from a `kinsol' function will be the list V of real numbers
-satisfying `F(V) = O' to the best possible tolerance.  
-
-
-File: avram.info,  Node: kinsol exceptions,  Next: Additional kinsol notes,  Prev: kinsol output,  Up: kinsol
-
-D.9.3 `kinsol' exceptions
--------------------------
-
-   * Any error messages that may be generated in the course of
-     evaluating the functions F and J will propagate to the result
-     returned by the `kinsol' library functions.
-
-   * If there is insufficient memory to complete any operation, the
-     result is a message of
-
-          <'memory overflow'>
-
-   * If the argument to the library function (i.e., `(F,(I,O))' or
-     `((F,J),(I,O))') fails to meet the required specifications in a
-     detectable way, the result will be a message of 
-
-          <'bad kinsol specification'>
-
-   * Any status returned by any `kinsol' API functions other than
-     success or one of several types of non-convergence results in a
-     message of
-
-          <'kinsol error'>
-
-
-File: avram.info,  Node: Additional kinsol notes,  Prev: kinsol exceptions,  Up: kinsol
-
-D.9.4 Additional `kinsol' notes
--------------------------------
-
-When a user supplied Jacobian function J is specified, the solution is
-likely to be found faster and more accurately. The Jacobian should be
-given if an analytical form for F is known, from which the Jacobian can
-be obtained easily by partial differentiation. If the Jacobian is
-unavailable, a finite difference method implemented internally by
-`kinsol' is used as a substitute and will usually yield acceptable
-results.
-
-   Tolerances are not explicitly specified on the virtual side of the
-interface although the native `kinsol' API requires them. A range of
-tolerances over ten orders of magnitude is automatically tried before
-giving up.
-
-   Similarly to the `glpk' and `lpsolve' library interfaces (*note
-glpk:: and *note lpsolve::), the only expressible constraint through the
-virtual code interface is that all variables are non-negative.
-Arbitrary upper and lower bounds can be simulated by appropriate
-variable substitutions in the formulation of the problem.
-
-   The `kinsol' library natively requires a system function F with
-equally many inputs as outputs, and will search only for the input
-associated with an output vector of all zeros, but the virtual code
-interface relaxes these requirements by allowing a function that
-transforms between lists of unequal lengths, and will search for the
-input of F causing it to match any given "optimal" output O. These
-effects are achieved by padding the shorter of the two vectors
-transparently and subtracting the specified optimum from the result.
-
-   The `kinsol' library can be configured to use single precision,
-double precision, or extended precision arithmetic, but only a double
-precision configuration is compatible with `avram'. This condition is
-checked when `avram' is configured and it will not interface with
-alternative `kinsol' configurations.
-
-   The `kinsol' library has some more advanced features to which this
-interface doesn't do justice, such as preconditioning, scaling,
-solution of systems with band limited Jacobians, and concurrent
-computation.
-
-
-File: avram.info,  Node: lapack,  Next: math,  Prev: kinsol,  Up: External Libraries
-
-D.10 `lapack'
-=============
-
-An arsenal of weapons grade linear algebra functions from the `LAPACK'
-Fortran library is accessible to virtual code applications through
-library calls of the form
-
-     library('lapack',f)
-
-   Each library function `f' invokes a `LAPACK' function of the same
-name, but the calling conventions on the virtual side are an artifact
-of the interface requiring their own documentation.
-
-   Some functions that are part of `LAPACK' are not described here
-(mostly the so called computational and auxiliary routines, and anything
-in single precision), because they are not accessible by the virtual
-code interface.
-
-* Menu:
-
-* lapack calling conventions::
-* lapack exceptions::
-* Additional lapack notes::
-
-
-File: avram.info,  Node: lapack calling conventions,  Next: lapack exceptions,  Prev: lapack,  Up: lapack
-
-D.10.1 `lapack' calling conventions
------------------------------------
-
-A table describing the inputs and outputs to the `lapack' library
-functions listed by their function names is given in this section. Some
-general points related to most of the functions are mentioned first.
-
-   * References to vectors, matrices, and packed matrices should be
-     understood as their list representations explained in *note Type
-     Conversions::. Although `LAPACK' internally uses column order
-     arrays, the virtual code library interface exhibits a matrix as a
-     list of lists with one inner list for each row.
-
-   * Some functions require a symmetric matrix as an input parameter.
-     Any input parameter that is required to be a symmetric matrix may
-     be specified optionally either in square form or in triangular
-     form as described in *note Two dimensional arrays::. If a square
-     matrix form is used, symmetry is not checked and the lower
-     triangular portion is ignored.
-
-   * Some function names are listed in pairs differing only in the first
-     letter.  Function names beginning with `d' pertain to vectors or
-     matrices of real numbers (*note math::), and function names
-     beginning with `z' pertain to complex numbers (*note complex::).
-     The specifications of similarly named functions are otherwise
-     identical.
-
-`dgesvx'
-
-`zgesvx'
-     These library functions take a pair `(A,B)' where A is an N by N
-     matrix and B is a vector of length N. If A is non-singular, they
-     return a vector X such that `A X = B'.  Otherwise they return an
-     empty list.
-
-`dgelsd'
-
-`zgelsd'
-     These functions generalize those above by taking a pair `(A,B)'
-     where A is an M by N matrix and B is a vector of length M, with M
-     greater than N. They return a vector X of length N to minimize the
-     magnitude of `B - A X'.
-
-`dgesdd'
-
-`zgesdd'
-     These functions take a list of M time series (i.e., vectors) each
-     of length N and return a list of basis vectors each of length N.
-     The basis vectors span the set of time series in the given list
-     according to the singular value decomposition (i.e., with the
-     basis vectors forming a series in order of decreasing
-     significance). The number of basis vectors is at most `MIN(M,N)'
-     but could be less if the input time series aren't linearly
-     independent. An empty list could be returned due to lack of
-     convergence.
-
-`dgeevx'
-
-`zgeevx'
-     These functions take a non-symmetric square matrix and return a
-     pair `(E,V)' where E is a list of eigenvectors and V is a list of
-     eigenvalues, both of which will contain only complex numbers.
-     (N.B., both functions return complex results even though `dgeevx'
-     takes real input.) They could also return `nil' due to a lack of
-     convergence.
-
-`dpptrf'
-
-`zpptrf'
-     These functions take a symmetric square matrix and return one of
-     the Cholesky factors. The Cholesky factors are a pair of
-     triangular matrices, each equal to the transpose of the other,
-     whose product is the original matrix.
-
-        * If the input matrix is specified in lower triangular form,
-          the lower triangular Cholesky factor is returned.
-
-        * If the input matrix is specified in square or upper
-          triangular form, the upper triangular Cholesky factor is
-          returned.
-
-        * In either case, the result is returned in triangular form.
-
-`dggglm'
-
-`zggglm'
-     The input is a pair of matrices and a vector `((A,B),D)'. The
-     output is a pair of vectors `(X,Y)' satisfying `AX + BY = D' for
-     which the magnitude of Y is minimal. The dimensions all have to be
-     consistent, which means the number of rows in A and B is the
-     length of D, the number of columns in A is the length of X, and
-     the number of columns in B is the length of Y.
-
-`dgglse'
-
-`zgglse'
-     The input is of the form `((A,C),(B,D))' where A and B are
-     matrices and C and D are vectors. The output is a vector X to
-     minimize the magnitude of `AX - C' subject to the constraint that
-     `BX = D'. The dimensions have to be consistent, which means A has
-     M rows, C has length M, B has P rows, D has length P, both A and B
-     have N columns, and the output X has length N. It is also a
-     requirement that `P <= N <= M + P'.
-
-`dsyevr'
-     This function takes a symmetric real matrix and returns a pair
-     `(E,V)' where E is a list of eigenvectors and V is a list of
-     eigenvalues. Both contain only real numbers.  This function is
-     fast and accurate but not as storage efficient as possible. If
-     there is insufficient memory, it automatically invokes `dspev'.
-
-`dspev'
-     This function takes a symmetric real matrix and returns a pair
-     `(E,V)' where E is a list of eigenvectors and V is a list of
-     eigenvalues. Both contain only real numbers.  It uses roughly half
-     the memory of `dsyevr' but is not as fast or accurate.
-
-`zheevr'
-     This function takes a complex Hermitian matrix and returns a pair `(E,V)'
-     where E is a list of eigenvectors and V is a list of eigenvalues.
-     The eigenvectors are complex but the eigenvalues are real.
-
-        * A Hermitian matrix has AIJ equal to the complex conjugate of
-          AJI.
-
-        * Although not exactly symmetric, a Hermitian matrix may
-          nevertheless be given in either upper or lower triangular
-          form.
-
-        * This function is faster but less storage efficient than
-          `zhpev', and calls it automatically if it runs out of memory.
-
-`zhpev'
-     This function has the same inputs and approximate outputs as
-     `zheevr' but is slower and more memory efficient because it uses
-     only packed matrices.
-
-
-File: avram.info,  Node: lapack exceptions,  Next: Additional lapack notes,  Prev: lapack calling conventions,  Up: lapack
-
-D.10.2 `lapack' exceptions
---------------------------
-
-   * Any of these functions can return a message of
-
-          <'memory overflow'>
-
-     if it runs out of memory.
-
-   * If the input parameters don't meet the specification, they can
-     also return 
-
-          <'bad lapack specification'>
-
-   * Any unexpected behavior from the `LAPACK' Fortran functions or
-     irregular status returned by them is reported by the message 
-
-          <'lapack error'>
-
-     Getting to the bottom of it may require some debugging of the
-     `avram' source code in the file `lapack.c'.
-
-
-File: avram.info,  Node: Additional lapack notes,  Prev: lapack exceptions,  Up: lapack
-
-D.10.3 Additional `lapack' notes
---------------------------------
-
-The functions `dgesdd' and `zgesdd' are an effective dimensionality
-reduction technique for a large database of time series.  A set of
-basis vectors can be computed once for the database, and then any time
-series in the database can be expressed as a linear combination
-thereof. To the extent that the data embody any redundant information,
-an approximate reconstruction of an individual series from the database
-will require fewer coefficients (maybe far fewer) in terms of the basis
-than original length of the series.
-
-   The library functions `dgelsd' and `zgelsd' are good for finding
-least squares fits to empirical data. If the matrix parameter A is
-interpreted as a list of inputs and the vector parameter B as the list
-of corresponding output data from some unknown linear function of N
-variables F, then X is the list of coefficients whereby F achieves the
-optimum fit to the data in the least squares sense.
-
-   These functions solve a special case of the problem solved by `dggglm'
-and `zggglm' where the parameter B is the identity matrix. For the
-latter functions, the output vector Y can be interpreted as a measure
-of the error, and B can be chosen to express unequal costs for errors
-at different points in the fitted function.
-
-   Cholesky decompositions obtained by `dpptrf' and `zpptrf' are useful
-for generating correlated random numbers. A population of vectors of
-uncorrelated standard normally distributed random numbers can be made
-to exhibit any correlations to order by multiplying all of the vectors
-by the lower Cholesky factor of the desired covariance matrix.
-
-
-File: avram.info,  Node: math,  Next: mtwist,  Prev: lapack,  Up: External Libraries
-
-D.11 `math'
-===========
-
-The `math' library exports functions that operate on IEEE double
-precision floating point numbers using the host system's C library. The
-numbers are represented natively as contiguous blocks of 8 bytes each,
-and on the virtual side as lists of eight character representations.
-(More explanation is given in *note Type Conversions::.) These
-functions take the form
-
-     library('math',f)
-
-where `f' is a character string identifying the function in most cases
-by its standard name in the C library.
-
-* Menu:
-
-* math library operators::
-* math library predicates::
-* math library conversion functions::
-* math library exceptions::
-* Additional math library notes::
-
-
-File: avram.info,  Node: math library operators,  Next: math library predicates,  Prev: math,  Up: math
-
-D.11.1 `math' library operators
--------------------------------
-
-The unary operators take a single real number to a real result. They include
-
-     ceil  floor round trunc
-     sin   cos   tan   sinh   cosh   tanh
-     asin  acos  atan  asinh  acosh  atanh
-     exp   log   sqrt  cbrt   expm1  log1p  fabs
-
-   The binary operators take a pair of real numbers `(X,Y)' to a single
-real number output. They include
-
-     pow  hypot  atan2  remainder  bus  vid  add  sub  mul  div
-
-where the last four correspond to the C language operators `+', `-',
-`*', and `/'. The functions named `bus' and `vid' are like the `sub'
-and `div' functions, respectively, with the order of the operands
-reversed, as explained in *note complex::.
-
-   The meanings of these operators are documented in the GNU `libc'
-reference manual or other C language references. They follow IEEE
-standards including proper handling of `nan' and infinity.
-
-
-File: avram.info,  Node: math library predicates,  Next: math library conversion functions,  Prev: math library operators,  Up: math
-
-D.11.2 `math' library predicates
---------------------------------
-
-There is one binary predicate, `islessequal', and several unary predicates,
-`isinfinite', `isnan', `isnormal', `isubnormal' and `iszero'.
-
-   The predicate `islessequal' takes a pair of floating point numbers
-`(X,Y)' as an argument, and returns `nil' for a false result and
-`(nil,nil)' for a true result.
-
-   The unary predicates have the obvious interpretations as
-classification functions, and should probably be used in preference to
-comparison with constants in case the representations aren't unique.
-
-
-File: avram.info,  Node: math library conversion functions,  Next: math library exceptions,  Prev: math library predicates,  Up: math
-
-D.11.3 `math' library conversion functions
-------------------------------------------
-
-The conversion function `strtod' takes a string representing a floating
-point number in C format to its representation. This function is the
-primary means of creating or initializing floating point numbers in
-virtual code. A value of floating point 0.0 is returned if the string
-is not valid, but no exception is raised.
-
-   The conversion `asprintf' is similar to the one by that name in C,
-but requires a pair `(F,X)' as an argument.  The left side F is a
-character string containing a C style format conversion for exactly one
-double precision floating point number, such as `'%0.4e'', and the
-parameter X is a floating point number. The result returned will be a
-character string expressing the number in the specified format.
-
-
-File: avram.info,  Node: math library exceptions,  Next: Additional math library notes,  Prev: math library conversion functions,  Up: math
-
-D.11.4 `math' library exceptions
---------------------------------
-
-The most likely cause of an exception is an attempt to apply a `math'
-library function to `nil' or to an argument that doesn't represent a
-floating point number. In these cases, an error message of `<'missing
-value'>' or `<'invalid value'>' will be the result.
-
-   An error message of `<'invalid asprintf() specifier'>' is reported
-by the `asprintf' function if the format specifier pertains to a
-string, such as `'%s''. This error is specifically trapped because the
-alternative would be a segmentation fault. Otherwise, invalid format
-specifiers are not detected or reported.
-
-   Error messages of `<'invalid text format'>' can be generated by
-conversion functions if any parameters that are meant to be character
-string representations are something else.
-
-   There is always a chance of a `<'memory overflow'>' error if there
-is insufficient memory to allocate a result.
-
-
-File: avram.info,  Node: Additional math library notes,  Prev: math library exceptions,  Up: math
-
-D.11.5 Additional `math' library notes
---------------------------------------
-
-Floating point exceptions such as division by zero are not specifically
-reported as exceptions, but invalid computations can be detected by the
-propagation of `nan' into the result, following standard conventions.
-
-   The C function `feclearexcept (FE_ALL_EXCEPT)' is called before every
-floating point operation so that no lingering exception flags can
-affect it.
-
-   There is no library predicate for exact comparison of floating point
-numbers, but none is required because the virtual machine's `compare'
-combinator will work on their representations as it will on any other
-data. The usual caveats apply with regard to comparing floating point
-numbers in the presence of roundoff error.
-
-
-File: avram.info,  Node: mtwist,  Next: minpack,  Prev: math,  Up: External Libraries
-
-D.12 `mtwist'
-=============
-
-The `mtwist' library interfaces to a random number generator based on
-the Mersenne Twistor algorithm. The algorithm has good properties but
-is not meant to be cryptographically secure. The library functions are
-of the form
-
-     library('mtwist',f)
-
-where `f' is one of the followng character strings.
-
-     bern   u_cont   u_disc   u_path   u_enum   w_disc   w_enum
-
-   Formally they are not mathematical functions because their results
-depend on a pseudo-random number that is not uniquely determined by
-their arguments. The numbers are generated deterministically in a
-sequence starting from a seed derived from the system clock at the time
-`avram' is launched, and each call uses the next number in the
-sequence. In so doing, it simulates a random draw from a uniformly
-distributed population.
-
-* Menu:
-
-* mtwist calling conventions::
-* mtwist exceptions::
-* Additional mtwist notes::
-
-
-File: avram.info,  Node: mtwist calling conventions,  Next: mtwist exceptions,  Prev: mtwist,  Up: mtwist
-
-D.12.1 `mtwist' calling conventions
------------------------------------
-
-All of the functions in this library simulate a random draw from a
-distribution. There is a choice of distribution statistics depending on
-the function used.
-
-`bern'
-     takes a floating point number P between 0 and 1, encoded as in
-     *note math::, and returns a boolean value, either `(nil,nil)' for
-     true or `nil' for false. A true value is returned only if a random
-     draw from a uniform distribution ranging from 0 to 1 is less than
-     P.  This function therefore simulates a draw from a Bernoulli
-     distribution. A `nil' value of P is treated as 1/2.
-
-`u_cont'
-     takes a floating point number X as an argument, and returns a
-     random draw from a continuous uniform distribution ranging from 0
-     to X. A `nil' value of X is treated as unity.
-
-`u_disc'
-     simulates a draw from a uniform discrete distribution whose domain
-     is the set of natural numbers from 0 to N - 1. The number N is
-     given as a parameter to this function, and the retuned value is
-     the draw.
-
-        * The returned value will have at most 64 bits regardless of N.
-
-        * Natural numbers are encoded as described in *note
-          Representation of Numeric and Textual Data::.
-
-        * If a value of 0 is passed for N, the full 64 bit range is
-          used.
-
-`u_path'
-     takes a pair of natural numbers `(N,M)' and returns a randomly
-     chosen tree (*note Raw Material::) with 1 leaf and N non-leaves
-     each having either a left or a right descendent but not both. The
-     number M constrains the result to fall within the first M - 1
-     trees of this form enumerated by exhausting all possibilities at
-     lower levels before admitting a right descendent at a higher
-     level. Within these criteria, all possible results are equally
-     probable. Both numbers are masked to 64 bits, but if M is zero, it
-     is treated as 2^N.
-
-`u_enum'
-     simulates a random draw from a uniform discrete distribution whose
-     domain is enumerated. The argument to the function is a non-empty
-     list, and the result is an item selected from the list, with all
-     choices being equally probable.
-
-`w_disc'
-     simulates a random draw from a non-uniform, or "weighted" discrete
-     distribution whose domain is a set of consecutive natural numbers
-     starting from zero. The argument to the function is a list giving
-     the probability of each outcome starting from zero as a floating
-     point number. Probabilities must be non-negative but needn't be
-     normalized.
-
-`w_enum'
-     simulates a random draw from a non-uniform, or "weighted" discrete
-     distribution with an arbitrary domain enumerated in the argument.
-     The argument is a list of pairs `<(X,P)..>', where X is a possible
-     outcome and P is its probability. The result returned is one of
-     the values of X from the input list chosen at random according to
-     the associated probability. Probabilities must be non-negative but
-     needn't be normalized.
-
-
-File: avram.info,  Node: mtwist exceptions,  Next: Additional mtwist notes,  Prev: mtwist calling conventions,  Up: mtwist
-
-D.12.2 `mtwist' exceptions
---------------------------
-
-   * `<'memory overflow'>' can be returned if there is insufficient
-     memory to allocate a result.
-
-   * Messages of `<'missing value'>' and `<'invalid value'>' can be
-     returned if any floating point argument is `nil' or is not a valid
-     floating point number, unless there is a designated default
-     interpretation for `nil' as in `bern' and `u_cont'.
-
-   * A message of `<'bad mtwist specification'>' is returned if an
-     argument to the `bern' function is not in the range of 0 to 1, or
-     if any probability passed to the `w_'* functions is negative.
-
-   * A message of `<'draw from empty list'>' is returned if an argument
-     to the *`_enum' functions is `nil' or if an argument to `w_enum'
-     contains `nil'.
-
-
-File: avram.info,  Node: Additional mtwist notes,  Prev: mtwist exceptions,  Up: mtwist
-
-D.12.3 Additional `mtwist' notes
---------------------------------
-
-Although the `mtwist' library is "external", it requires no special
-configuration on the host because the uniform variate generator in the
-form developed by its original authors is short and elegant enough to
-be packaged easily within the `avram' distribution. All further
-embellishments are home grown despite the advice at the end of *note
-Implementing new library functions::.
-
-   The `u_path' function is intended to allow sampling from a large
-population in logarithmic time when it is stored in a balanced tree. A
-left-heavy tree should be constructed initially with the data items all
-at the same level. Thereafter, a result returned by `u_path' with the
-appropriate dimensions can be used as an index into the tree for fast
-retrieval by the virtual machine's `field' combinator (*note Field::).
-
-   The last three functions, `u_enum', `w_disc', and `w_enum' use an
-inversion method with a binary search.  The first draw from a given
-list will take a time asymptotically proportional to the length of the
-list, but subsequent draws from the same list are considerably faster
-due to a persistent cache maintained transparently by `avram'. For
-lists whose length is up to 2^16, the time required for a subsequent
-draw consists mainly of constant overhead with a small logarithmic
-component in the length of the list. For longer lists, the time ramps
-up linearly by a small factor.
-
-   Information allowing fast draws from up to sixteen lists can be
-cached simultaneously. If an application uses more than sixteen, the
-cached data are replaced in first-in first-out order. The size of the
-cache and the maximum list length for logarithmic time access can be
-adjusted easily by redefining constants in `mtwist.c' under the `avram'
-source tree, but will require recompilation.
-
-
-File: avram.info,  Node: minpack,  Next: mpfr,  Prev: mtwist,  Up: External Libraries
-
-D.13 `minpack'
-==============
-
-The `minpack' library contains functions to solve non-linear optimization
-and least squares problems. The functions can be expressed as
-
-     library('minpack',f)
-
-where `f' can be one of `'hybrd'', `'hybrj'', `'lmder'', `'lmdif'', or
-`'lmstr'', following the names of the underlying Fortran subroutines.
-
-* Menu:
-
-* minpack calling conventions::
-* minpack exceptions::
-* Additional minpack notes::
-
-
-File: avram.info,  Node: minpack calling conventions,  Next: minpack exceptions,  Prev: minpack,  Up: minpack
-
-D.13.1 `minpack' calling conventions
-------------------------------------
-
-The `minpack' library solves a similar problem to that of the `kinsol'
-library (*note kinsol::), and the two libraries have identical calling
-conventions at the level of the virtual code interface.
-
-   The `hybrd' and `lmdif' functions take input arguments of the form
-`(F,(I,O))', whereas `hybrj', `lmder', and `lmstr' take arguments of
-the form `((F,J),(I,O))'.  The interpretations of these parameters are
-explained in *note kinsol input parameters::.
-
-   For the `lmstr' function, the Jacobian function J takes an argument
-`(M,V)' and returns only the M-th row of the Jacobian matrix. For
-`lmder' and `hybrj', the Jacobian function takes only an input vector V
-and returns the whole matrix. These specifications are also explained
-further in relation to the `kinsol' library.
-
-   The output from any minpack function is a vector V satisfying `F(V)
-= O' to the best possible tolerance if a solution is found. A range of
-tolerances over ten orders of magnitude is sampled starting from
-`1e-15'. If no solution is found, an empty list is returned.
-
-
-File: avram.info,  Node: minpack exceptions,  Next: Additional minpack notes,  Prev: minpack calling conventions,  Up: minpack
-
-D.13.2 `minpack' exceptions
----------------------------
-
-   * A message of `<'memory overflow'>' is possible any time `minpack'
-     runs out of memory.
-
-   * A message of `<'bad minpack specification'>' will be returned if
-     an input argument recognizably violates the required specification.
-
-   * The `<'minpack error'>' message is returned in the event of any unexpected
-     behavior or irregular status from the API.
-
-   * Any error messages reported by the system function F or the
-     Jacobian function J are propagated to the result.
-
-
-File: avram.info,  Node: Additional minpack notes,  Prev: minpack exceptions,  Up: minpack
-
-D.13.3 Additional `minpack' notes
----------------------------------
-
-The `lm'* functions are better suited to problems in which the system
-function F has more outputs than inputs, and the `hybr'* functions are
-better suited to the alternative. If either is called when the other is
-more appropriate, the job is handed off to the other automatically.
-
-   The `lmstr' function is more memory efficient than the others
-because it doesn't compute the whole Jacobian matrix at once. Any of
-the `lm'* functions is more memory efficient than the `kinsol'
-equivalent when the output list is sufficiently longer than the input
-list.
-
-   Unlike `kinsol', there is no provision in `minpack' for constrained
-optimization.
-
-   The `minpack' documentation doesn't state whether it's re-entrant,
-but the odds are against it unless it uses no storage outside the user
-provided work areas. If it isn't re-entrant, anomalous effects could
-occur when a virtual code function being optimized calls another
-`minpack' function.  A workaround would be to use an equivalent
-`kinsol' function, which is re-entrant by design.
-
-   The `avram' configuration script searches for a C header file `minpack.h'
-on the host system in order to build an interface to this library. This
-file is specific to the Debian `minpack-dev' package and is not part of
-the upstream Fortran source. Configuring `avram' with an interface to
-the `minpack' library on a non-Debian system may require the
-administrator to retrieve the header file manually from the Debian
-archive and place it under `/usr/include' before running the
-configuration script (in addition to installing the `minpack' library
-itself, of course).
-
-
-File: avram.info,  Node: mpfr,  Next: lpsolve,  Prev: minpack,  Up: External Libraries
-
-D.14 `mpfr'
-===========
-
-The `mpfr' library provides a rich assortment of floating point
-operations on arbitrary precision numbers (`http://www.mpfr.org').
-These numbers are represented in a format that is not binary compatible
-with the standard IEEE floating point number format used by other
-libraries, but they offer superior numerical stability suitable for
-many ill conditioned problems.
-
-   The virtual code interface to the `mpfr' library follows the native
-API to the extent of using the same names for most operations, but
-excludes features pertaining to i/o, mutable storage, and memory
-management.
-
-   The `mpfr' library functions are invoked by an expression of the form
-
-     library('mpfr',f)
-
-Aside from a few exceptions as noted, `f' is a character string derived
-from the name of the related function from the `mpfr' C library as
-documented at the above address, but without the `mpfr_' prefix.
-
-   The full complement of available functions is documented in the
-remainder of this section.
-
-   * References to natural numbers pertain to the list representation
-     described in *note Representation of Numeric and Textual Data::.
-
-   * All functions that perform rounding use a mode of `GMP_RNDN' for rounding
-     to nearest, which is not explicitly specified on the virtual side.
-
-* Menu:
-
-* mpfr binary operators::
-* mpfr unary operators::
-* mpfr binary operators with a natural operand::
-* mpfr binary predicates::
-* mpfr unary predicates::
-* mpfr constants::
-* mpfr functions with miscellaneous calling conventions::
-* mpfr conversion functions::
-* mpfr exceptions::
-* Additional mpfr notes::
-
-
-File: avram.info,  Node: mpfr binary operators,  Next: mpfr unary operators,  Prev: mpfr,  Up: mpfr
-
-D.14.1 `mpfr' binary operators
-------------------------------
-
-Functions with these names take a pair of `mpfr' numbers `(X,Y)' and
-return an `mpfr' number as a result.
-
-   * `add'
-
-   * `sub'
-
-   * `mul'
-
-   * `div'
-
-   * `pow'
-
-   * `atan2'
-
-   * `hypot'
-
-   * `min'
-
-   * `max'
-
-   * `vid'
-
-   * `bus'
-
-   Their semantics are similar to those listed in the `mpfr'
-documentation, with some minor qualifications.
-
-   * Unlike the native API, there is no third argument to which the
-     result is assigned, because the result is the returned value.
-
-   * The precision of the result is the greater of the two precisions of
-     the input numbers X and Y.
-
-   * The `vid' and `bus' functions are added features of the virtual
-     code interface, corresponding to division and subtraction with the
-     order of the operands reversed, as explained in *note complex::.
-
-   Mathematically it might make more sense for the precision of the result
-to be the lesser of the two input precisions, but this way is more
-convenient for virtual code programs that perform binary operations on
-their input with hard coded constants, because it makes one size fit
-all.
-
-
-File: avram.info,  Node: mpfr unary operators,  Next: mpfr binary operators with a natural operand,  Prev: mpfr binary operators,  Up: mpfr
-
-D.14.2 `mpfr' unary operators
------------------------------
-
-Functions with these names take a single `mpfr' number as an argument
-and return a single `mpfr' number as a result.  
-
-     sqr      sqrt     cbrt     neg      abs      log
-     log2     log10    exp      exp2     exp10    cos
-     sin      tan      acos     asin     atan     cosh
-     sinh     tanh     acosh    asinh    atanh    lngamma
-     expm1    eint     gamma    erf      log1p    nextbelow
-     ceil     floor    round    trunc    frac     nextabove
-     erfc
-
-   The semantics of these functions are similar to those of their
-counterparts in the native API, with these provisions.
-
-   * The precision of the result is the precision of the argument.
-
-   * There is no second argument for assigning the result.
-
-   * The `nextabove' and `nextbelow' functions do not modify their
-     arguments in place, but return a freshly allocated result like all
-     other functions.
-
-
-File: avram.info,  Node: mpfr binary operators with a natural operand,  Next: mpfr binary predicates,  Prev: mpfr unary operators,  Up: mpfr
-
-D.14.3 `mpfr' binary operators with a natural operand
------------------------------------------------------
-
-Functions with these names take an argument of the form `(X,N)', where
-X is an `mpfr' number and N is a natural number.
-
-   * `root'
-
-   * `pow_ui'
-
-   * `mul_2ui'
-
-   * `div_2ui'
-
-   * `grow'
-
-   * `shrink'
-
-   The last two are specific to the virtual code interface, having no
-counterpart in the native API of the `mpfr' library.  The `grow'
-function returns a copy of X with its precision increased by N bits,
-and the `shrink' function returns a copy of X with its precision
-reduced by N bits.
-
-   * The precisions are silently capped at the maximum or floored at the minimum
-     allowable precisions if necessary.
-
-   * Increasing the precision by the `grow' function does not directly
-     cause a more accurate result to be computed, but only pads an
-     existing number with zeros.
-
-   * Decreasing the precision by the `shrink' function does not prevent
-     valid bits from being discarded.
-
-   The appropriate way to use `grow' is to grow the precision of an
-operand before applying an operator to it, which will cause the result
-to be computed to the full precision. This capability is suitable for
-algorithms that iterate over increasing precisions until a stopping
-criterion is met.
-
-
-File: avram.info,  Node: mpfr binary predicates,  Next: mpfr unary predicates,  Prev: mpfr binary operators with a natural operand,  Up: mpfr
-
-D.14.4 `mpfr' binary predicates
--------------------------------
-
-These predicates take a pair of `mpfr' numbers `(X,Y)' as arguments and
-perform a logical operation.  If the result is true, they return
-`(nil,nil)', and if it's false, they return `nil'.
-
-   * `equal_p'
-
-   * `unequal_abs'
-
-   * `greater_p'
-
-   * `greaterequal_p'
-
-   * `less_p'
-
-   * `lessequal_p'
-
-   * `lessgreater_p'
-
-   The name of the function `unequal_abs', for comparing absolute
-values, has been changed from `mpfr_cmpabs' to avoid confusion with the
-virtual machine's `compare' combinator. The `compare' combinator
-returns a `(nil,nil)' result (i.e., true) if the operands are equal and
-a `nil' result if they're unequal, opposite from `unequal_abs'.
-
-
-File: avram.info,  Node: mpfr unary predicates,  Next: mpfr constants,  Prev: mpfr binary predicates,  Up: mpfr
-
-D.14.5 `mpfr' unary predicates
-------------------------------
-
-Each of these predicates takes an `mpfr' number as an argument and
-performs a logical operation. If the result is true, it returns
-`(nil,nil)', and otherwise it returns `nil'.
-
-   * `nan_p'
-
-   * `inf_p'
-
-   * `number_p'
-
-   * `zero_p'
-
-   * `integer_p'
-
-
-File: avram.info,  Node: mpfr constants,  Next: mpfr functions with miscellaneous calling conventions,  Prev: mpfr unary predicates,  Up: mpfr
-
-D.14.6 `mpfr' constants
------------------------
-
-Each of these functions takes a natural number as an argument
-specifying a precision, and returns a mathematical constant evaluated
-to that precision.
-
-   * `const_log2'
-
-   * `pi'
-
-   * `const_catalan'
-
-   * `inf'
-
-   * `ninf'
-
-   * `nan'
-
-   The name of the constant `pi' has been shortened from
-`mpfr_const_pi'.  The functions `inf' and `ninf' return infinity and
-negative infinity, respectively.
-
-   The encoding of `nan', used to represent the results of undefined computations
-such as division by zero, is not unique even for a fixed precision.
-Applications should test for undefined results using `nan_p' rather
-than by comparing a result to a hard coded `nan' (*note mpfr unary
-predicates::).
-
-
-File: avram.info,  Node: mpfr functions with miscellaneous calling conventions,  Next: mpfr conversion functions,  Prev: mpfr constants,  Up: mpfr
-
-D.14.7 `mpfr' functions with miscellaneous calling conventions
---------------------------------------------------------------
-
-Some functions listed below don't conform to any of the previously
-mentioned calling conventions.
-
-`eq'
-     This is a ternary operator taking a triple `(PREC,(X,Y))', where
-     PREC is a natural number and X and Y are `mpfr' numbers. It
-     returns a result of `(nil,nil)' (i.e., true) if the numbers agree
-     up to the specified precision measured in bits, and returns `nil'
-     otherwise.(1)
-
-`urandomb'
-     This function takes a natural number specifying a precision and returns
-     a uniformly distributed pseudo-random number of that precision
-     between 0 and 1.
-
-`prec'
-     This function takes an `mpfr' number and returns a natural number
-     as a result, which is the precision of the argument in bits.
-
-`sin_cos'
-     This function takes an `mpfr' number Z as an argument and returns
-     a pair of `mpfr' numbers `(X,Y)' as a result, where X is the sine
-     of Z and Y is the cosine.  The precisions of the results are the
-     same as the precision of the argument.
-
-   ---------- Footnotes ----------
-
-   (1) a potentially useful tool for algorithms concerned with
-numerical approximations despite its inexplicable malignment in the
-`mpfr' documentation
-
-
-File: avram.info,  Node: mpfr conversion functions,  Next: mpfr exceptions,  Prev: mpfr functions with miscellaneous calling conventions,  Up: mpfr
-
-D.14.8 `mpfr' conversion functions
-----------------------------------
-
-The functions described in this section convert between `mpfr' numbers
-and character strings, naturals, or standard IEEE floating point format
-(in their list representations). Where these functions have similar or
-equivalent counterparts in the `mpfr' library's native API, the names
-have been changed for mnemonic reasons.
-
-`dbl2mp'
-     The input is a standard floating point number as in *note math::.
-     The result is an `mpfr' number equal to the input with a fixed
-     precision, currently set to 160 bits.
-
-`mp2dbl'
-     The input is an `mpfr' number, and the output is the best possible
-     approximation to it by a standard a double precision number.
-
-`str2mp'
-     The input is a pair `(PREC,S)', where PREC is a natural number
-     specifying the precision, and S is a string expressing a floating
-     point number in C format. The output is an `mpfr' number with the
-     specified precision.
-
-`mp2str'
-     The input is an `mpfr' number, and the output is a character
-     string expressing the number in exponential decimal notation.
-     Sufficiently many decimal digits are included in the string to
-     express the full precision.
-
-`nat2mp'
-     The input is a natural number represented as described in *note
-     Representation of Numeric and Textual Data::, and the output is an
-     `mpfr' number of sufficient precision to express the natural
-     number exactly.
-
-   The `mp2str' function enhances the native `mpfr_get_str' function by
-properly formatting the output string rather than only listing the
-digits of the mantissa.
-
-   The `nat2mp' function does not rely on the `mpfr' native integer
-conversion functions, so natural numbers with any number of bits up to
-`MP_PREC_MAX' can be used losslessly. There is currently no conversion
-in the other direction.
-
-
-File: avram.info,  Node: mpfr exceptions,  Next: Additional mpfr notes,  Prev: mpfr conversion functions,  Up: mpfr
-
-D.14.9 `mpfr' exceptions
-------------------------
-
-   * A message of `<'memory overflow'>' is possible any time `mpfr'
-     runs out of memory.
-
-   * A message of `<'bad mpfr specification'>' will be returned if an
-     input argument recognizably violates the required specification.
-
-   * The `<'mpfr error'>' message is returned in the event of any unexpected
-     behavior or irregular status from the API.
-
-   * The message of `<'mpfr overflow'>' can be cause by the `nat2mp'
-     function if a natural number has too many bits to be represented
-     exactly as an `mpfr' number.
-
-
-File: avram.info,  Node: Additional mpfr notes,  Prev: mpfr exceptions,  Up: mpfr
-
-D.14.10 Additional `mpfr' notes
--------------------------------
-
-The `eq' and `urandomb' functions depend not only on the `mpfr' library
-but on the `gmp' library (`http://ftp.gnu.org/gnu/gmp'). It's possible
-for them to be unavailable on a host without `gmp' even if the rest of
-the `mpfr' library is properly configured.
-
-   The file `mpfr.c' in the `avram' source tree exports a couple of
-functions that may be of use to C hackers interested in further
-development of `avram' with `mpfr'. The functions `avm_mpfr_of_list'
-and `avm_list_of_mpfr' convert between the native representation for
-`mpfr' numbers and the caching list representation used by `avram'
-(*note Type Conversions::). This conversion is non-trivial because the
-numbers are not stored contiguously.
-
-
-File: avram.info,  Node: lpsolve,  Next: rmath,  Prev: mpfr,  Up: External Libraries
-
-D.15 `lpsolve'
-==============
-
-This library interface exports functions to solve linear programming and
-mixed integer programming problems using the `lpsolve' package
-documented at
-
-   `http://lpsolve.sourceforge.net/5.5/'.
-
-Of the two linear programming solvers currently interfaced with
-`avram', this one is believed to be the more robust.
-
-* Menu:
-
-* lpsolve calling conventions::
-* lpsolve return values::
-* lpsolve errors::
-
-
-File: avram.info,  Node: lpsolve calling conventions,  Next: lpsolve return values,  Prev: lpsolve,  Up: lpsolve
-
-D.15.1 `lpsolve' calling conventions
-------------------------------------
-
-The library is able to solve linear and mixed integer programming
-problems, depending on which function is selected. The function to call
-the linear programming solver is of the form
-
-   * `library('lpsolve','stdform')'
-
-and the mixed integer programming functions are of the form
-
-   * `library('lpsolve','iform')'
-
-   * `library('lpsolve','bform')'
-
-   * `library('lpsolve','biform')'
-
-The argument to the `stdform' function represents a triple `(C,(M,Y))',
-which has the same interpretation described in *note glpk input
-parameters::. The arguments to the `iform', `bform', and `biform'
-functions are tuples `(I,(C,(M,Y)))' `(B,(C,(M,Y)))', and
-`((B,I),(C,(M,Y)))', respectively, where C, M, and Y are as above, and
-
-   * B is a list of binary variable column indices
-
-   * I is a list of integer variable column indices
-
-where column indices pertain to the constraint matrix, and are numbered
-from zero.  Specifying some or all variables as integers directs the
-solver to seek only solutions in which those variables have integer
-values, and specifying any as binary directs the solver to seek only
-solutions in which those variables have values of zero or one.  The
-IEEE floating point representation is used for all variables regardless
-(*note math::).
-
-
-File: avram.info,  Node: lpsolve return values,  Next: lpsolve errors,  Prev: lpsolve calling conventions,  Up: lpsolve
-
-D.15.2 `lpsolve' return values
-------------------------------
-
-If a feasible and optimal solution is found, a list of values for the
-variables is returned in the form `<(I,X)...>', where I is a natural
-number and X is a floating point number giving the value of the I-th
-variable numbered from zero. Values of X equal to zero are omitted.
-
-
-File: avram.info,  Node: lpsolve errors,  Prev: lpsolve return values,  Up: lpsolve
-
-D.15.3 `lpsolve' errors
------------------------
-
-If any calling conventions are not followed, an exception is raised and
-a diagnostic message of `bad lpsolve problem specification' is
-reported. If no feasible solution can be found, no exception is raised
-but an empty list is returned.
-
-
-File: avram.info,  Node: rmath,  Next: umf,  Prev: lpsolve,  Up: External Libraries
-
-D.16 `rmath'
-============
-
-A selection of mathematical and statistical functions from the GNU R
-math library has a virtual code interface of the form
-
-     library('rmath',f)
-
-where `f' is a character string derived from the name of a function in
-the C language API described in the manual `R-exts.pdf', available at
-`http://www.r-project.org'.
-
-   Every function in the library returns a real result in the form of
-*note math::, but functions differ in the argument types. The arguments
-are tuples of real numbers and booleans that also closely follow the
-native API as explained below.
-
-* Menu:
-
-* rmath statistical functions::
-* rmath miscellaneous functions::
-* rmath exceptions::
-
-
-File: avram.info,  Node: rmath statistical functions,  Next: rmath miscellaneous functions,  Prev: rmath,  Up: rmath
-
-D.16.1 `rmath' statistical functions
-------------------------------------
-
-Functions for evaluating random draws, density, cumulative probability
-and inverse cumulative probability are provided for some of the more
-frequently used probability distributions, which are chi-squared,
-non-central chi-squared, exponential, lognormal, normal, poisson,
-Student's t, and uniform.
-
-   Each distribution is known by an abbreviated name and specified by
-one or two real parameters as listed below. Names of distributions in
-this table form the stem of a library function name.  The names of the
-parameters such as MU and SIGMA are not explicitly mentioned when
-invoking the functions, but are listed here for reference.  The precise
-definitions of the distribution functions and interpretations of these
-parameters can be found in standard texts on probability and statistics.
-
-     chisq         DF
-     nchisq        DF, LAMBDA
-     exp           SCALE
-     lnorm         LOGMEAN, LOGSD
-     norm          MU, SIGMA
-     pois          LAMBDA
-     t             N
-     unif          A, B
-
-   The virtual code interface follows a naming convention similar to the
-native API, in that function names beginning with `r' represent random
-draws from a distribution, with the argument to the function being the
-parameters specifying the distribution. Functions in this first group
-return a random draw from a distribution described by a single real
-parameter.
-
-   * `rchisq'
-
-   * `rexp'
-
-   * `rpois'
-
-   * `rt'
-
-These next functions return random draws from distributions specified
-by a pair of parameters, `(X,Y)'.
-
-   * `rnchisq'
-
-   * `rlnorm'
-
-   * `rnorm'
-
-   * `runif'
-
-   Functions whose names begin with `d' evaluate the probability
-density of a distribution at a given point. They require at least two
-real arguments, the first being the point whose probability density is
-sought, and the remaining ones being the parameters that specify the
-distribution. A boolean operand, which is `nil' for false and
-`(nil,nil)' for true, requests the logarithm of the density when true.
-
-   Functions with names in the following group take a triple with two
-real operands and a boolean, `(X,(Y,A))', and return a probabiity
-density.
-
-   * `dchisq'
-
-   * `dexp'
-
-   * `dpois'
-
-   * `dt'
-
-The next functions pertain to distributions requiring two paramters to
-specify them, so they take a quadruple with three real operands and a
-boolean, `(X,(Y,(Z,A)))'.
-
-   * `dnchisq'
-
-   * `dlnorm'
-
-   * `dnorm'
-
-   * `dunif'
-
-   Functions whose names begin with `p' or `q' obtain cumulative
-probabilities or inverse cumulative probabilities respectively for a
-specified distribution. They require one real operand to identify the
-point whose probability or inverse probability is sought, and other
-real operands to parameterize the distribution, as above. There are
-also two boolean operands. The first is true in order to request a
-probability or inverse probability with respect to the lower tail as
-opposed to the upper, and the other is true to indicate that
-probabilities are to be expressed logarithmically.
-
-   The argument to these functions is a quadruple with two real operands
-and two booleans, `(X,(Y,(A,B)))'.
-
-   * `pchisq', `qchisq'
-
-   * `pexp', `qexp'
-
-   * `ppois', `qpois'
-
-   * `pt', `qt'
-
-The remaining functions pertain to distributions parameterized by two
-real operands. These take a quintuple with three real operands and two
-booleans, `(X,(Y,(Z,(A,B))))'.
-
-   * `pnchisq', `qnchisq'
-
-   * `plnorm', `qlnorm'
-
-   * `pnorm', `qnorm'
-
-   * `punif', `qunif'
-
-
-File: avram.info,  Node: rmath miscellaneous functions,  Next: rmath exceptions,  Prev: rmath statistical functions,  Up: rmath
-
-D.16.2 `rmath' miscellaneous functions
---------------------------------------
-
-Some less frequently used real valued mathematical functions are also
-accessible by the `rmath' library interface.  The functions with names
-in this group take a single real operand.
-
-     gammafn         lgammafn        digamma
-     trigamma        tetragamma      pentagamma
-
-The ones in this group take a pair of real operands `(X,Y)'.
-
-     beta            lbeta           bessel_j       bessel_y
-
-Those remaining take a triple of real operands `(X,(Y,Z))'.
-
-     bessel_i        bessel_k
-
-   An alternative and better documented selection of Bessel functions is
-provided by the `bes' library interface (*note bes::).
-
-
-File: avram.info,  Node: rmath exceptions,  Prev: rmath miscellaneous functions,  Up: rmath
-
-D.16.3 `rmath' exceptions
--------------------------
-
-The only exceptional condition specific to the `rmath' library
-interface is associated with the message `<'bad rmath specification'>',
-which means that a tuple given as an argument has the wrong number or
-types of operands.
-
-
-File: avram.info,  Node: umf,  Prev: rmath,  Up: External Libraries
-
-D.17 `umf'
-==========
-
-Systems of equations described by sparse matrices (i.e., matrices containing
-mostly zeros) arise in certain practical problems. The usual array
-representation in which zeros are explicitly stored would be
-prohibitive for large matrices occurring in many problems of interest.
-A more sophisticated approach is used by the `umf' library to manage
-memory efficiently, which is documented at
-`http://www.cise.ufl.edu/research/sparse/SuiteSparse/current/SuiteSparse/UMFPACK/Doc/'.
-
-   A virtual code interface to functions for solving sparse systems of
-equations by these methods is afforded by library functions of the form
-
-     library('umf',f)
-
-where the library function name, `f' is a character string of the form
-`TT_M_RRR'.
-
-   * TT can be either `di' for real matrices, or `zi' for complex.
-
-   * M can be one of `a', `t', or `c' for solving a system given either
-     by a matrix, its transpose, or its conjugate transpose,
-     respectively, corresponding to mnemonics `A', `Aat' and `At' used
-     in the C language API.
-
-   * RRR is either `trp' or `col', to indicate a sparse matrix expressed
-     either as a list of triples, or in packed column form, as
-     documented below.
-
-   The complete set of function names for this library interface is as
-follows.
-
-     di_a_trp      di_a_col       zi_a_trp       zi_a_col
-     di_t_trp      di_t_col       zi_t_trp       zi_t_col
-                                  zi_c_trp       zi_c_col
-
-Not all combinations are represented, because the conjugate transpose
-is relevant only to complex matrices.
-
-* Menu:
-
-* umf input parameters::
-* umf output::
-* umf exceptions::
-* Additional umf notes::
-
-
-File: avram.info,  Node: umf input parameters,  Next: umf output,  Prev: umf,  Up: umf
-
-D.17.1 `umf' input parameters
------------------------------
-
-For a square matrix A and a column vector B, the `umf' functions find
-the solution X to the matrix equation M X = B, where M is either A, the
-transpose of A, or its conjugate transpose. As noted above, the choice
-is determined by whether the the function name is of the form *`_a_'*,
-*`_t_'*, or *`_c_'* respectively.
-
-   The argument to any of these functions is a pair `(A,B)', where A
-represents the matrix mentioned above and B represents the column
-vector.
-
-   The parameter B is required to be a list of numbers whose length
-matches the number of rows in the matrix. The numbers are either real
-numbers for the `di_'* functions (*note math::), or complex for the
-`zi_'* functions (*note complex::).
-
-   There is a choice of representations for the parameter A, depending
-on whether the function being called is one of the *`_trp' functions or
-one of the *`_col' functions.
-
-   For the *`_trp' functions, A is represented as a non-empty list of
-triples `<((I,J),V)...>', where each item of the list corresponds to a
-non-zero entry in the matrix.
-
-   * The parameters I and J are natural numbers as in *note
-     Representation of Numeric and Textual Data::.
-
-   * The value V is a real number for the `di_'*`_trp' functions or a
-     complex number for the `zi_'*`_trp' functions.
-
-   * The presence of a triple ((I,J),V) in the list signifies that the
-     I,J-th entry in the matrix A (numbered from zero) has a value of V.
-
-   For the *`_col' functions, the representation of A is more
-complicated but has a slight advantage in memory usage. It may also
-have an advantage in speed unless more time is wasted on the virtual
-side transforming a matrix to this representation than it saves.
-
-   In this case, A is represented by a triple of the form `((P,I),V)'.
-The parameters P and I are lists of natural numbers. The parameter V is
-a list of real numbers for the `di_'*`_col' functions and complex
-numbers for the `zi_'*`_col' functions. They have the following
-interpretations.
-
-   * V is the list of non-zero entries in the matrix in column major
-     order.
-
-   * I has the same length as V, and each item of I is the row index of
-     the corresponding item in V, numbered from zero.
-
-   * P has the length of the number of columns in the matrix, and each
-     item identifies the starting position of a column in V and I,
-     numbered from zero.
-
-The first item of P is always zero. Further explanation of this format
-in terms of an array representation can be found in the file
-`UMFPACK_UserGuide.pdf', available from the `umf' library home page at
-`http://www.cise.ufl.edu/research/sparse/SuiteSparse/current/SuiteSparse/'.
-
-
-File: avram.info,  Node: umf output,  Next: umf exceptions,  Prev: umf input parameters,  Up: umf
-
-D.17.2 `umf' output
--------------------
-
-If no exception occurs, the solution X to the matrix equation M X = B
-noted previously will be returned if one exists.
-
-   The solution is represented as either a list of real numbers as in
-*note math::, or a list of complex numbers as in *note complex::. Real
-numbers are returned by the `di_'* functions, and complex numbers are
-returned by the `zi_'* functions.
-
-   If no solution exists due to a singular matrix, an empty list is
-returned. The lack of a solution isn't treated as an exceptional
-condition.
-
-
-File: avram.info,  Node: umf exceptions,  Next: Additional umf notes,  Prev: umf output,  Up: umf
-
-D.17.3 `umf' exceptions
------------------------
-
-If an exceptional condition arises from the use of this library, one of
-the following lists of character strings may be returned as the
-function result.
-
-   * `<'memory overflow'>' means the library function ran out of
-     memory, most likely due to a matrix being too large.
-
-   * `<'bad umf specification'>' means an input parameter didn't conform
-     to the appropriate format described above (*note umf input
-     parameters::)
-
-   * `<'umf error'>' covers any unexpected behavior or abnormal status
-     returned by any function from the C language API.
-
-   For the *`_trp' functions. A non-square matrix will cause the second
-exception above. For the *`_col' functions, a non-square matrix will
-cause the third exception or cause an empty result to be returned.
-
-   The exceptions noted at the beginning of this section (*note
-External Libraries::) are also possible.
-
-
-File: avram.info,  Node: Additional umf notes,  Prev: umf exceptions,  Up: umf
-
-D.17.4 Additional `umf' notes
------------------------------
-
-The C language API to `umf' provides very many less frequently used
-features that are not part of the virtual code interface, some of which
-could be added by minor modifications to the file `umf.c' in the
-`avram' source tree.
-
-   A set of `dl_'* and `zl_'* functions orthogonal to those presently
-accessible would enable matrices having billions of rows or columns by
-using long integers, but memory requirements on the virtual code side
-for problems of that scale are probably prohibitive for the foreseeable
-future.
-
-
-File: avram.info,  Node: Copying,  Next: Function Index,  Prev: External Libraries,  Up: Top
-
-GNU GENERAL PUBLIC LICENSE
-**************************
-
-                         Version 2, June 1991
-
-     Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-     675 Mass Ave, Cambridge, MA 02139, USA
-
-     Everyone is permitted to copy and distribute verbatim copies
-     of this license document, but changing it is not allowed.
-
-Preamble
-========
-
-The licenses for most software are designed to take away your freedom
-to share and change it.  By contrast, the GNU General Public License is
-intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  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
-this service 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 make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-   For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  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.
-
-   We protect your rights with two steps: (1) copyright the software,
-and (2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-   Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-   Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-   The precise terms and conditions for copying, distribution and
-modification follow.
-
-    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-  1. This License applies to any program or other work which contains a
-     notice placed by the copyright holder saying it may be distributed
-     under the terms of this General Public License.  The "Program",
-     below, refers to any such program or work, and a "work based on
-     the Program" means either the Program or any derivative work under
-     copyright law: that is to say, a work containing the Program or a
-     portion of it, either verbatim or with modifications and/or
-     translated into another language.  (Hereinafter, translation is
-     included without limitation in the term "modification".)  Each
-     licensee is addressed as "you".
-
-     Activities other than copying, distribution and modification are
-     not covered by this License; they are outside its scope.  The act
-     of running the Program is not restricted, and the output from the
-     Program is covered only if its contents constitute a work based on
-     the Program (independent of having been made by running the
-     Program).  Whether that is true depends on what the Program does.
-
-  2. You may copy and distribute 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 and disclaimer of warranty; keep intact all the
-     notices that refer to this License and to the absence of any
-     warranty; and give any other recipients of the Program a copy of
-     this License along with the Program.
-
-     You may charge a fee for the physical act of transferring a copy,
-     and you may at your option offer warranty protection in exchange
-     for a fee.
-
-  3. You may modify your copy or copies of the Program or any portion
-     of it, thus forming a work based on the Program, and copy and
-     distribute such modifications or work under the terms of Section 1
-     above, provided that you also meet all of these conditions:
-
-       a. You must cause the modified files to carry prominent notices
-          stating that you changed the files and the date of any change.
-
-       b. You must cause any work that you distribute or publish, that
-          in whole or in part contains or is derived from the Program
-          or any part thereof, to be licensed as a whole at no charge
-          to all third parties under the terms of this License.
-
-       c. If the modified program normally reads commands interactively
-          when run, you must cause it, when started running for such
-          interactive use in the most ordinary way, to print or display
-          an announcement including an appropriate copyright notice and
-          a notice that there is no warranty (or else, saying that you
-          provide a warranty) and that users may redistribute the
-          program under these conditions, and telling the user how to
-          view a copy of this License.  (Exception: if the Program
-          itself is interactive but does not normally print such an
-          announcement, your work based on the Program is not required
-          to print an announcement.)
-
-     These requirements apply to the modified work as a whole.  If
-     identifiable sections of that work are not derived from the
-     Program, and can be reasonably considered independent and separate
-     works in themselves, then this License, and its terms, do not
-     apply to those sections when you distribute them as separate
-     works.  But when you distribute the same sections as part of a
-     whole which is a work based on the Program, the distribution of
-     the whole must be on the terms of this License, whose permissions
-     for other licensees extend to the entire whole, and thus to each
-     and every part regardless of who wrote it.
-
-     Thus, it is not the intent of this section to claim rights or
-     contest your rights to work written entirely by you; rather, the
-     intent is to exercise the right to control the distribution of
-     derivative or collective works based on the Program.
-
-     In addition, mere aggregation of another work not based on the
-     Program with the Program (or with a work based on the Program) on
-     a volume of a storage or distribution medium does not bring the
-     other work under the scope of this License.
-
-  4. You may copy and distribute the Program (or a work based on it,
-     under Section 2) in object code or executable form under the terms
-     of Sections 1 and 2 above provided that you also do one of the
-     following:
-
-       a. Accompany it with the complete corresponding machine-readable
-          source code, which must be distributed under the terms of
-          Sections 1 and 2 above on a medium customarily used for
-          software interchange; or,
-
-       b. Accompany it with a written offer, valid for at least three
-          years, to give any third party, for a charge no more than your
-          cost of physically performing source distribution, a complete
-          machine-readable copy of the corresponding source code, to be
-          distributed under the terms of Sections 1 and 2 above on a
-          medium customarily used for software interchange; or,
-
-       c. Accompany it with the information you received as to the offer
-          to distribute corresponding source code.  (This alternative is
-          allowed only for noncommercial distribution and only if you
-          received the program in object code or executable form with
-          such an offer, in accord with Subsection b above.)
-
-     The source code for a work means the preferred form of the work for
-     making modifications to it.  For an executable work, complete
-     source code means all the source code for all modules it contains,
-     plus any associated interface definition files, plus the scripts
-     used to control compilation and installation of the executable.
-     However, as a special exception, the source code distributed need
-     not include anything that is normally distributed (in either
-     source or binary form) with the major components (compiler,
-     kernel, and so on) of the operating system on which the executable
-     runs, unless that component itself accompanies the executable.
-
-     If distribution of executable or object code is made by offering
-     access to copy from a designated place, then offering equivalent
-     access to copy the source code from the same place counts as
-     distribution of the source code, even though third parties are not
-     compelled to copy the source along with the object code.
-
-  5. You may not copy, modify, sublicense, or distribute the Program
-     except as expressly provided under this License.  Any attempt
-     otherwise to copy, modify, sublicense or distribute the Program is
-     void, and will automatically terminate your rights under this
-     License.  However, parties who have received copies, or rights,
-     from you under this License will not have their licenses
-     terminated so long as such parties remain in full compliance.
-
-  6. You are not required to accept this License, since you have not
-     signed it.  However, nothing else grants you permission to modify
-     or distribute the Program or its derivative works.  These actions
-     are prohibited by law if you do not accept this License.
-     Therefore, by modifying or distributing the Program (or any work
-     based on the Program), you indicate your acceptance of this
-     License to do so, and all its terms and conditions for copying,
-     distributing or modifying the Program or works based on it.
-
-  7. Each time you redistribute the Program (or any work based on the
-     Program), the recipient automatically receives a license from the
-     original licensor to copy, distribute or modify the Program
-     subject to these terms and conditions.  You may not impose any
-     further restrictions on the recipients' exercise of the rights
-     granted herein.  You are not responsible for enforcing compliance
-     by third parties to this License.
-
-  8. If, as a consequence of a court judgment or allegation of patent
-     infringement or for any other reason (not limited to patent
-     issues), 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 distribute so as to satisfy simultaneously
-     your obligations under this License and any other pertinent
-     obligations, then as a consequence you may not distribute the
-     Program at all.  For example, if a patent license would not permit
-     royalty-free redistribution of the Program by all those who
-     receive copies directly or indirectly through you, then the only
-     way you could satisfy both it and this License would be to refrain
-     entirely from distribution of the Program.
-
-     If any portion of this section is held invalid or unenforceable
-     under any particular circumstance, the balance of the section is
-     intended to apply and the section as a whole is intended to apply
-     in other circumstances.
-
-     It is not the purpose of this section to induce you to infringe any
-     patents or other property right claims or to contest validity of
-     any such claims; this section has the sole purpose of protecting
-     the integrity of the free software distribution system, which is
-     implemented by public license practices.  Many people have made
-     generous contributions to the wide range of software distributed
-     through that system in reliance on consistent application of that
-     system; it is up to the author/donor to decide if he or she is
-     willing to distribute software through any other system and a
-     licensee cannot impose that choice.
-
-     This section is intended to make thoroughly clear what is believed
-     to be a consequence of the rest of this License.
-
-  9. If the distribution and/or use of the Program is restricted in
-     certain countries either by patents or by copyrighted interfaces,
-     the original copyright holder who places the Program under this
-     License may add an explicit geographical distribution limitation
-     excluding those countries, so that distribution is permitted only
-     in or among countries not thus excluded.  In such case, this
-     License incorporates the limitation as if written in the body of
-     this License.
-
- 10. The Free Software Foundation may publish revised and/or new
-     versions of the 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 a version number of this License which applies
-     to it and "any later version", you have the option of following
-     the terms and conditions either of that version or of any later
-     version published by the Free Software Foundation.  If the Program
-     does not specify a version number of this License, you may choose
-     any version ever published by the Free Software Foundation.
-
- 11. If you wish to incorporate parts of the Program into other free
-     programs whose distribution conditions are different, write to the
-     author to ask for permission.  For software which is copyrighted
-     by the Free Software Foundation, write to the Free Software
-     Foundation; we sometimes make exceptions for this.  Our decision
-     will be guided by the two goals of preserving the free status of
-     all derivatives of our free software and of promoting the sharing
-     and reuse of software generally.
-
-                                NO WARRANTY
- 12. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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.
-
- 13. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
-     MODIFY AND/OR REDISTRIBUTE 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.
-
-                      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
-convey 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 AN IDEA OF WHAT IT DOES.
-     Copyright (C) 19YY  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 2
-     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, write to the Free Software
-     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-   Also add information on how to contact you by electronic and paper
-mail.
-
-   If the program is interactive, make it output a short notice like
-this when it starts in an interactive mode:
-
-     Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
-     Gnomovision 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, the
-commands you use may be called something other than `show w' and `show
-c'; they could even be mouse-clicks or menu items--whatever suits your
-program.
-
-   You should also get your employer (if you work as a programmer) or
-your school, if any, to sign a "copyright disclaimer" for the program,
-if necessary.  Here is a sample; alter the names:
-
-     Yoyodyne, Inc., hereby disclaims all copyright
-     interest in the program `Gnomovision'
-     (which makes passes at compilers) written
-     by James Hacker.
-
-     SIGNATURE OF TY COON, 1 April 1989
-     Ty Coon, President of Vice
-
-   This 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 Library General Public License instead of this License.
-
-
-File: avram.info,  Node: Function Index,  Next: Concept Index,  Prev: Copying,  Up: Top
-
-Function Index
-**************
-
-[index]
-* Menu:
-
-* *avm_matrix_of_list:                   Two dimensional arrays.
-                                                              (line  61)
-* *avm_matrix_reflection:                Related utility functions.
-                                                              (line  41)
-* *avm_matrix_transposition:             Related utility functions.
-                                                              (line  14)
-* *avm_packed_matrix_of_list:            Two dimensional arrays.
-                                                              (line 194)
-* *avm_row_number_array:                 Related utility functions.
-                                                              (line  60)
-* *avm_standard_unstrung:                Characters and Strings.
-                                                              (line  92)
-* *avm_unstrung:                         Characters and Strings.
-                                                              (line  89)
-* *avm_value_of_list:                    Primitive types.     (line  14)
-* *avm_vector_of_list:                   One dimensional arrays.
-                                                              (line  19)
-* avm_anticipate:                        Indirection.         (line  36)
-* avm_apply:                             The Universal Function.
-                                                              (line  23)
-* avm_area:                              Simple Operations.   (line 189)
-* avm_binary_comparison:                 Comparison.          (line  63)
-* avm_binary_membership:                 List Transformations.
-                                                              (line  77)
-* avm_byte_transduce:                    Execution Modes.     (line  71)
-* avm_character_code:                    Characters and Strings.
-                                                              (line  48)
-* avm_character_representation:          Characters and Strings.
-                                                              (line  35)
-* avm_clearjmp:                          Suicidal exception handling.
-                                                              (line  62)
-* avm_comparison:                        Comparison.          (line  25)
-* avm_concatenation:                     List Transformations.
-                                                              (line  41)
-* avm_copied:                            Simple Operations.   (line  40)
-* avm_count_apply:                       The Universal Function.
-                                                              (line  17)
-* avm_count_branches:                    Indirection.         (line  29)
-* avm_count_chrcodes:                    Characters and Strings.
-                                                              (line 186)
-* avm_count_cmdline:                     Command Line Parsing.
-                                                              (line 176)
-* avm_count_compare:                     Comparison.          (line  17)
-* avm_count_decons:                      Deconstruction Functions.
-                                                              (line  15)
-* avm_count_exmodes:                     Execution Modes.     (line  90)
-* avm_count_fnames:                      File Names.          (line  93)
-* avm_count_formin:                      Formatted Input.     (line 132)
-* avm_count_formout:                     Formatted Output.    (line 210)
-* avm_count_instruct:                    Instruction Stacks.  (line 146)
-* avm_count_libfuns:                     Calling existing library functions.
-                                                              (line  60)
-* avm_count_listfuns:                    List Transformations.
-                                                              (line  21)
-* avm_count_lists:                       Simple Operations.   (line  31)
-* avm_count_matcon:                      Related utility functions.
-                                                              (line  89)
-* avm_count_mwrap:                       Memory leaks.        (line  62)
-* avm_count_portals:                     Lists of Pairs of Ports.
-                                                              (line  46)
-* avm_count_ports:                       Ports and Packets.   (line  49)
-* avm_count_profile:                     Profiling.           (line 105)
-* avm_count_rawio:                       Raw Files.           (line  82)
-* avm_date_representation:               File Names.          (line  43)
-* avm_debug_memory:                      Memory leaks.        (line  31)
-* avm_deconstruction:                    Deconstruction Functions.
-                                                              (line  24)
-* avm_default_command_line:              Command Line Parsing.
-                                                              (line  14)
-* avm_disable_interaction:               Execution Modes.     (line  54)
-* avm_dispose:                           Simple Operations.   (line  23)
-* avm_dispose_branch:                    Indirection.         (line 133)
-* avm_dispose_branch_queue:              Indirection.         (line 122)
-* avm_dispose_rows:                      Related utility functions.
-                                                              (line  77)
-* avm_distribution:                      List Transformations.
-                                                              (line  35)
-* avm_dont_debug_memory:                 Memory leaks.        (line  38)
-* avm_dont_manage_memory:                Memory leaks.        (line  26)
-* avm_enqueue:                           Simple Operations.   (line  98)
-* avm_enqueue_branch:                    Indirection.         (line  68)
-* avm_entries:                           Profiling.           (line  28)
-* avm_environment:                       Command Line Parsing.
-                                                              (line 126)
-* avm_error:                             Error Reporting.     (line  37)
-* avm_fatal_io_error:                    Error Reporting.     (line  44)
-* avm_free_managed_memory:               Memory leaks.        (line  97)
-* avm_have_library_call:                 Calling existing library functions.
-                                                              (line  35)
-* avm_initialize_apply:                  The Universal Function.
-                                                              (line  11)
-* avm_initialize_branches:               Indirection.         (line  23)
-* avm_initialize_chrcodes:               Characters and Strings.
-                                                              (line 180)
-* avm_initialize_cmdline:                Command Line Parsing.
-                                                              (line 171)
-* avm_initialize_compare:                Comparison.          (line  12)
-* avm_initialize_decons:                 Deconstruction Functions.
-                                                              (line  10)
-* avm_initialize_exmodes:                Execution Modes.     (line  85)
-* avm_initialize_fnames:                 File Names.          (line  88)
-* avm_initialize_formin:                 Formatted Input.     (line 126)
-* avm_initialize_formout:                Formatted Output.    (line 205)
-* avm_initialize_instruct:               Instruction Stacks.  (line 141)
-* avm_initialize_libfuns:                Calling existing library functions.
-                                                              (line  55)
-* avm_initialize_listfuns:               List Transformations.
-                                                              (line  16)
-* avm_initialize_lists:                  Simple Operations.   (line  17)
-* avm_initialize_matcon:                 Related utility functions.
-                                                              (line  83)
-* avm_initialize_mwrap:                  Memory leaks.        (line  54)
-* avm_initialize_portals:                Lists of Pairs of Ports.
-                                                              (line  40)
-* avm_initialize_ports:                  Ports and Packets.   (line  45)
-* avm_initialize_profile:                Profiling.           (line 100)
-* avm_initialize_rawio:                  Raw Files.           (line  77)
-* avm_interact:                          Execution Modes.     (line  12)
-* avm_internal_error:                    Error Reporting.     (line  60)
-* avm_join:                              Simple Operations.   (line  76)
-* avm_length:                            Simple Operations.   (line 179)
-* avm_library_call:                      Calling existing library functions.
-                                                              (line  14)
-* avm_line_map:                          Execution Modes.     (line  80)
-* avm_list_of_matrix:                    Two dimensional arrays.
-                                                              (line 135)
-* avm_list_of_packed_matrix:             Two dimensional arrays.
-                                                              (line 225)
-* avm_list_of_value:                     Primitive types.     (line  47)
-* avm_list_of_vector:                    One dimensional arrays.
-                                                              (line  48)
-* avm_load:                              Formatted Input.     (line  75)
-* avm_manage_memory:                     Memory leaks.        (line  17)
-* avm_measurement:                       List Transformations.
-                                                              (line  82)
-* avm_membership:                        List Transformations.
-                                                              (line  60)
-* avm_multiscanned:                      Characters and Strings.
-                                                              (line 126)
-* avm_natural:                           Simple Operations.   (line 194)
-* avm_new_portal:                        Lists of Pairs of Ports.
-                                                              (line  25)
-* avm_newport:                           Ports and Packets.   (line  27)
-* avm_non_fatal_io_error:                Error Reporting.     (line  55)
-* avm_output:                            Formatted Output.    (line  11)
-* avm_output_as_directed:                Formatted Output.    (line  80)
-* avm_path_name:                         File Names.          (line  55)
-* avm_path_representation:               File Names.          (line  12)
-* avm_position:                          Simple Operations.   (line 212)
-* avm_preamble_and_contents:             Formatted Input.     (line  12)
-* avm_print_list:                        Simple Operations.   (line 202)
-* avm_prior_to_version:                  Version Management.  (line  50)
-* avm_program_name:                      Error Reporting.     (line  25)
-* avm_prompt:                            Characters and Strings.
-                                                              (line 143)
-* avm_put_bytes:                         Formatted Output.    (line 191)
-* avm_received_list:                     Raw Files.           (line  10)
-* avm_reclamation_failure:               Error Reporting.     (line  73)
-* avm_recoverable_anticipate:            Indirection.         (line  61)
-* avm_recoverable_apply:                 The Universal Function.
-                                                              (line  40)
-* avm_recoverable_area:                  Recoverable Operations.
-                                                              (line  38)
-* avm_recoverable_enqueue:               Recoverable Operations.
-                                                              (line  25)
-* avm_recoverable_enqueue_branch:        Indirection.         (line 112)
-* avm_recoverable_interact:              Execution Modes.     (line  60)
-* avm_recoverable_join:                  Recoverable Operations.
-                                                              (line  15)
-* avm_recoverable_length:                Recoverable Operations.
-                                                              (line  30)
-* avm_recoverable_natural:               Recoverable Operations.
-                                                              (line  47)
-* avm_recoverable_prompt:                Characters and Strings.
-                                                              (line 168)
-* avm_recoverable_standard_strung:       Characters and Strings.
-                                                              (line  83)
-* avm_recoverable_strung:                Characters and Strings.
-                                                              (line  80)
-* avm_reschedule:                        Instruction Stacks.  (line 126)
-* avm_retire:                            Instruction Stacks.  (line 104)
-* avm_reversal:                          List Transformations.
-                                                              (line  27)
-* avm_scanned_list:                      Characters and Strings.
-                                                              (line 107)
-* avm_scheduled:                         Instruction Stacks.  (line  89)
-* avm_seal:                              Lists of Pairs of Ports.
-                                                              (line  32)
-* avm_send_list:                         Raw Files.           (line  46)
-* avm_set_program_name:                  Error Reporting.     (line  13)
-* avm_set_version:                       Version Management.  (line  14)
-* avm_setjmp:                            Suicidal exception handling.
-                                                              (line  39)
-* avm_setnonjump:                        Suicidal exception handling.
-                                                              (line  90)
-* avm_sever:                             Ports and Packets.   (line  36)
-* avm_standard_character_code:           Characters and Strings.
-                                                              (line  50)
-* avm_standard_character_representation: Characters and Strings.
-                                                              (line  37)
-* avm_standard_strung:                   Characters and Strings.
-                                                              (line  58)
-* avm_strung:                            Characters and Strings.
-                                                              (line  56)
-* avm_tally:                             Profiling.           (line  67)
-* avm_trace_interaction:                 Execution Modes.     (line  50)
-* avm_transposition:                     List Transformations.
-                                                              (line  49)
-* avm_turn_off_stderr:                   Inept excess verbiage.
-                                                              (line  34)
-* avm_turn_off_stdout:                   Inept excess verbiage.
-                                                              (line  18)
-* avm_turn_on_stderr:                    Inept excess verbiage.
-                                                              (line  40)
-* avm_turn_on_stdout:                    Inept excess verbiage.
-                                                              (line  26)
-* avm_version:                           Version Management.  (line  81)
-* avm_warning:                           Error Reporting.     (line  32)
-
-
-File: avram.info,  Node: Concept Index,  Prev: Function Index,  Up: Top
-
-Concept Index
-*************
-
-[index]
-* Menu:
-
-* absolute path:                         Input Data Structure.
-                                                              (line  27)
-* adaptive integration:                  gslint output.       (line  13)
-* annotations <1>:                       Profiling.           (line  22)
-* annotations:                           Note.                (line   9)
-* API:                                   Library Reference.   (line  17)
-* appending to files:                    Output From Non-interactive Applications.
-                                                              (line  21)
-* apply <1>:                             Exception Handler Usage.
-                                                              (line  46)
-* apply:                                 Variable Freedom.    (line  57)
-* argz.h <1>:                            Command Line Parsing.
-                                                              (line 121)
-* argz.h:                                Configuration Related Errors.
-                                                              (line  53)
-* arrays:                                One dimensional arrays.
-                                                              (line   7)
-* ask-to-overwrite command line option:  Parameter Mode Options.
-                                                              (line  18)
-* asprintf <1>:                          math library exceptions.
-                                                              (line  12)
-* asprintf:                              math library conversion functions.
-                                                              (line  12)
-* assign:                                Assignment.          (line  22)
-* assignment <1>:                        Error Messages.      (line  84)
-* assignment:                            Assignment.          (line   6)
-* asynchronous circuits:                 Transfer.            (line  91)
-* author <1>:                            Operator Generalization.
-                                                              (line  51)
-* author <2>:                            Transfer.            (line  92)
-* author:                                Internal Errors.     (line  23)
-* autoconf:                              Implementing new library functions.
-                                                              (line  49)
-* automake:                              Implementing new library functions.
-                                                              (line  49)
-* avm_current_directory_prefix:          File Names.          (line  24)
-* avm_packet:                            Ports and Packets.   (line   8)
-* avm_parent_directory_prefix:           File Names.          (line  24)
-* avm_path_separator:                    File Names.          (line  24)
-* avm_path_separator_character:          File Names.          (line  24)
-* avm_root_directory_prefix:             File Names.          (line  24)
-* AVMINPUTS <1>:                         Environment.         (line   6)
-* AVMINPUTS <2>:                         Configuration Related Errors.
-                                                              (line  53)
-* AVMINPUTS:                             i/o Errors.          (line  11)
-* backward compatability <1>:            Calling existing library functions.
-                                                              (line  22)
-* backward compatability:                Characters and Strings.
-                                                              (line  29)
-* backward compatibility:                Configuration Related Errors.
-                                                              (line  35)
-* bad bessel function call:              Bessel function errors.
-                                                              (line   7)
-* bad character in file name <1>:        File Names.          (line  74)
-* bad character in file name:            File Format Errors.  (line  32)
-* bad derivative specification:          gsldif exceptions.   (line   6)
-* bad integral specification:            gslint exceptions.   (line   8)
-* bad kinsol specification:              kinsol exceptions.   (line  17)
-* bad lapack specification:              lapack exceptions.   (line  13)
-* bad matrix specification:              External Libraries.  (line  46)
-* bad minpack specification:             minpack exceptions.  (line   9)
-* bad mpfr specification:                mpfr exceptions.     (line   9)
-* bad rmath specification:               rmath exceptions.    (line   8)
-* bad umf specification:                 umf exceptions.      (line  13)
-* bad vector specification:              External Libraries.  (line  46)
-* bessel functions <1>:                  rmath miscellaneous functions.
-                                                              (line  13)
-* bessel functions:                      Bessel function calling conventions.
-                                                              (line   6)
-* bit strings:                           Concrete Syntax.     (line  15)
-* booleans <1>:                          Input Data Structure.
-                                                              (line  69)
-* booleans:                              Representation of Numeric and Textual Data.
-                                                              (line  33)
-* bu <1>:                                Exception Handler Usage.
-                                                              (line  46)
-* bu <2>:                                Reduce.              (line  66)
-* bu:                                    Refer.               (line  11)
-* bug reports:                           Internal Errors.     (line  23)
-* bugs:                                  Bugs.                (line   6)
-* byte-transducer command line option <1>: Byte Transducers.  (line   6)
-* byte-transducer command line option <2>: Loading All of Standard Input at Once.
-                                                              (line   6)
-* byte-transducer command line option:   Filter Mode Options. (line  40)
-* C++ <1>:                               Implementing new library functions.
-                                                              (line 118)
-* C++:                                   Library Reference.   (line  57)
-* c++filt utility:                       Implementing new library functions.
-                                                              (line 119)
-* can't close <1>:                       Profiling.           (line  84)
-* can't close <2>:                       Formatted Output.    (line 176)
-* can't close:                           i/o Errors.          (line  32)
-* can't emulate version:                 Configuration Related Errors.
-                                                              (line  35)
-* can't read:                            i/o Errors.          (line  11)
-* can't spawn:                           i/o Errors.          (line  27)
-* can't write <1>:                       Profiling.           (line  84)
-* can't write <2>:                       Formatted Output.    (line  66)
-* can't write <3>:                       Raw Files.           (line  68)
-* can't write:                           i/o Errors.          (line  20)
-* cat <1>:                               Cat.                 (line   7)
-* cat <2>:                               Transfer.            (line  71)
-* cat:                                   Example Script.      (line  13)
-* character codes <1>:                   Byte Transducers.    (line  45)
-* character codes <2>:                   Representation of Numeric and Textual Data.
-                                                              (line  25)
-* character codes:                       Blocking.            (line  26)
-* character encodings:                   Characters and Strings.
-                                                              (line  14)
-* character representations:             Character Table.     (line   6)
-* character strings <1>:                 Characters and Strings.
-                                                              (line   6)
-* character strings <2>:                 Error Messages.      (line  13)
-* character strings <3>:                 Standard Output Representation.
-                                                              (line  38)
-* character strings:                     Representation of Numeric and Textual Data.
-                                                              (line  19)
-* checksums:                             File Format.         (line  21)
-* chmod:                                 Example Script.      (line  24)
-* choice-of-output command line option <1>: Standard Output Representation.
-                                                              (line   6)
-* choice-of-output command line option <2>: Standard Input Representation.
-                                                              (line  12)
-* choice-of-output command line option:  Filter Mode Options. (line  21)
-* Cholesky decomposition <1>:            Additional lapack notes.
-                                                              (line  28)
-* Cholesky decomposition:                lapack calling conventions.
-                                                              (line  73)
-* coding standards:                      Implementing new library functions.
-                                                              (line 153)
-* column major order <1>:                umf input parameters.
-                                                              (line  49)
-* column major order <2>:                Related utility functions.
-                                                              (line  25)
-* column major order:                    Two dimensional arrays.
-                                                              (line 140)
-* combinators:                           Recursion.           (line   7)
-* command line <1>:                      Command Line Parsing.
-                                                              (line   6)
-* command line <2>:                      Character Oriented Interaction.
-                                                              (line   8)
-* command line <3>:                      Line Oriented Interaction.
-                                                              (line   8)
-* command line <4>:                      Input for Mapped Applications.
-                                                              (line  26)
-* command line <5>:                      Input Data Structure.
-                                                              (line   7)
-* command line:                          Command Line Syntax. (line   6)
-* compare <1>:                           Comparison.          (line  12)
-* compare:                               Compare.             (line   6)
-* compare combinator <1>:                mpfr binary predicates.
-                                                              (line  27)
-* compare combinator:                    Additional math library notes.
-                                                              (line  16)
-* complex numbers:                       complex.             (line   6)
-* compose <1>:                           How avram Thinks.    (line 112)
-* compose:                               Standard Library.    (line  10)
-* compression:                           Weight.              (line  20)
-* concatenation <1>:                     List Transformations.
-                                                              (line  41)
-* concatenation <2>:                     Cat.                 (line   7)
-* concatenation:                         Transfer.            (line  71)
-* concurrency:                           Instruction Stacks.  (line  23)
-* conditional <1>:                       How avram Thinks.    (line 112)
-* conditional:                           Standard Library.    (line  10)
-* conjugate transpose:                   umf.                 (line  26)
-* cons <1>:                              Operator Generalization.
-                                                              (line   6)
-* cons <2>:                              A New Operator.      (line  13)
-* cons:                                  Raw Material.        (line  54)
-* constant <1>:                          How avram Thinks.    (line 112)
-* constant:                              Standard Library.    (line  10)
-* constrained non-linear optimization:   kinsol.              (line   8)
-* constrained optimization:              Additional minpack notes.
-                                                              (line  17)
-* constraints <1>:                       Additional kinsol notes.
-                                                              (line  20)
-* constraints:                           Additional glpk notes.
-                                                              (line   9)
-* convergence:                           gslevu.              (line  15)
-* copyright:                             Implementing new library functions.
-                                                              (line 151)
-* correlation:                           Additional lapack notes.
-                                                              (line  31)
-* counter <1>:                           Ports and Packets.   (line   8)
-* counter:                               Simple Operations.   (line 179)
-* counter overflow <1>:                  File Names.          (line  74)
-* counter overflow:                      Overflow Errors.     (line   7)
-* couple:                                Standard Library.    (line  10)
-* covariance matrix <1>:                 Additional lapack notes.
-                                                              (line  32)
-* covariance matrix:                     Interaction combinator.
-                                                              (line  21)
-* cumulative probability:                rmath statistical functions.
-                                                              (line  86)
-* current time:                          Input Data Structure.
-                                                              (line  21)
-* date:                                  Input Data Structure.
-                                                              (line  21)
-* deadlock <1>:                          Execution Modes.     (line  46)
-* deadlock <2>:                          Interaction combinator.
-                                                              (line  95)
-* deadlock:                              Line Oriented Interaction.
-                                                              (line  98)
-* Debian <1>:                            Additional minpack notes.
-                                                              (line  31)
-* Debian:                                Implementing new library functions.
-                                                              (line 124)
-* debugging:                             Exception Handler Usage.
-                                                              (line  64)
-* deconstruction <1>:                    Deconstruction Functions.
-                                                              (line   6)
-* deconstruction <2>:                    Exception Handler Usage.
-                                                              (line  17)
-* deconstruction <3>:                    Deconstruction.      (line   6)
-* deconstruction:                        Bit String Encoding. (line  37)
-* default file extensions:               Parameter Mode Options.
-                                                              (line  26)
-* default-to-stdin command line option <1>: Example Script.   (line  13)
-* default-to-stdin command line option:  Parameter Mode Options.
-                                                              (line  37)
-* denotational semantics:                Semantics.           (line  31)
-* diagnostics:                           Diagnostics.         (line   6)
-* dimensionality reduction:              Additional lapack notes.
-                                                              (line   7)
-* discontiguous field:                   Comparison.          (line  43)
-* distribute:                            Distribute.          (line   7)
-* distributed implementation <1>:        Reduce.              (line  57)
-* distributed implementation:            Bit String Encoding. (line  15)
-* distributions:                         rmath statistical functions.
-                                                              (line  13)
-* eigenvectors:                          lapack calling conventions.
-                                                              (line  64)
-* email:                                 Internal Errors.     (line  23)
-* emulation:                             General Options.     (line   9)
-* emulation command line option <1>:     Configuration Related Errors.
-                                                              (line  35)
-* emulation command line option:         General Options.     (line   9)
-* environment <1>:                       Command Line Parsing.
-                                                              (line 126)
-* environment <2>:                       Input Data Structure.
-                                                              (line   7)
-* environment <3>:                       Environment.         (line   6)
-* environment <4>:                       Configuration Related Errors.
-                                                              (line  53)
-* environment <5>:                       i/o Errors.          (line  11)
-* environment:                           Preface.             (line  11)
-* eof:                                   Interaction combinator.
-                                                              (line  87)
-* equality <1>:                          Compare.             (line  22)
-* equality <2>:                          Variable Freedom.    (line  56)
-* equality:                              On Equality.         (line   6)
-* error messages <1>:                    Error Reporting.     (line   6)
-* error messages <2>:                    List Transformations.
-                                                              (line   8)
-* error messages <3>:                    Expedient Error Messages.
-                                                              (line   6)
-* error messages:                        Diagnostics.         (line   6)
-* exceptions <1>:                        List Transformations.
-                                                              (line   8)
-* exceptions <2>:                        Computable Error Messages.
-                                                              (line  14)
-* exceptions <3>:                        Exception Handling.  (line   6)
-* exceptions <4>:                        A Minimal Set of Properties.
-                                                              (line  58)
-* exceptions:                            Bugs.                (line   6)
-* executable files <1>:                  Formatted Output.    (line  59)
-* executable files:                      Example Script.      (line  23)
-* exp_popen <1>:                         Line Oriented Interaction.
-                                                              (line  32)
-* exp_popen:                             i/o Errors.          (line  27)
-* expect:                                i/o Errors.          (line  27)
-* EXT command line option <1>:           Environment.         (line  25)
-* EXT command line option:               Parameter Mode Options.
-                                                              (line  26)
-* extensions <1>:                        Other Diagnostics and Warnings.
-                                                              (line   7)
-* extensions:                            Parameter Mode Options.
-                                                              (line  26)
-* external-libraries:                    General Options.     (line  28)
-* facilitator:                           Ports and Packets.   (line 124)
-* fan:                                   Fan.                 (line   6)
-* feclearexcept:                         Additional math library notes.
-                                                              (line  10)
-* field <1>:                             Error Messages.      (line  80)
-* field <2>:                             Assignment.          (line  77)
-* field:                                 Field.               (line  29)
-* file extensions:                       Other Diagnostics and Warnings.
-                                                              (line   7)
-* file format <1>:                       Standard Input Representation.
-                                                              (line  40)
-* file format:                           File Format.         (line   6)
-* file name extensions <1>:              Other Diagnostics and Warnings.
-                                                              (line   7)
-* file name extensions:                  Parameter Mode Options.
-                                                              (line  26)
-* file name suffixes <1>:                Other Diagnostics and Warnings.
-                                                              (line   7)
-* file name suffixes:                    Parameter Mode Options.
-                                                              (line  26)
-* file names <1>:                        File Names.          (line   6)
-* file names <2>:                        Input Data Structure.
-                                                              (line  27)
-* file names:                            i/o Errors.          (line  11)
-* file parameters:                       Command Line Syntax. (line  13)
-* filter:                                Filter.              (line   6)
-* filter mode <1>:                       Filter Mode Interface.
-                                                              (line   6)
-* filter mode <2>:                       Security.            (line  11)
-* filter mode:                           Filter Mode.         (line   6)
-* flag:                                  Ports and Packets.   (line   8)
-* flat:                                  Transpose.           (line  17)
-* fold:                                  Reduce.              (line  43)
-* force-text-input command line option <1>: Standard Input Representation.
-                                                              (line  12)
-* force-text-input command line option:  General Options.     (line  47)
-* Fortran <1>:                           lapack.              (line   6)
-* Fortran <2>:                           Implementing new library functions.
-                                                              (line 112)
-* Fortran <3>:                           External Library Maintenance.
-                                                              (line  10)
-* Fortran:                               Two dimensional arrays.
-                                                              (line 124)
-* Fourier transforms <1>:                harminv.             (line   9)
-* Fourier transforms:                    fftw.                (line   6)
-* ftp:                                   Interaction combinator.
-                                                              (line  47)
-* functional programming <1>:            Exception Handler Usage.
-                                                              (line  64)
-* functional programming <2>:            List Combinators.    (line   6)
-* functional programming <3>:            Recursion.           (line   7)
-* functional programming <4>:            User Manual.         (line  26)
-* functional programming:                Preface.             (line  11)
-* gamma functions <1>:                   rmath miscellaneous functions.
-                                                              (line   7)
-* gamma functions:                       mpfr unary operators.
-                                                              (line   7)
-* generalized least squares <1>:         Additional lapack notes.
-                                                              (line  22)
-* generalized least squares:             lapack calling conventions.
-                                                              (line  89)
-* gmp library:                           Additional mpfr notes.
-                                                              (line   7)
-* GNU R:                                 Interaction combinator.
-                                                              (line  18)
-* GNU Scientific Library:                gsldif output.       (line  10)
-* grammar:                               Syntax.              (line   8)
-* guard <1>:                             Exception Handler Usage.
-                                                              (line  46)
-* guard:                                 Computable Error Messages.
-                                                              (line  41)
-* harminv:                               harminv.             (line   6)
-* Hartley transforms:                    fftw.                (line   6)
-* head field:                            Lists.               (line   7)
-* header file <1>:                       Additional minpack notes.
-                                                              (line  27)
-* header file:                           Implementing new library functions.
-                                                              (line  12)
-* help:                                  General Options.     (line   9)
-* help command line option <1>:          Other Diagnostics and Warnings.
-                                                              (line  20)
-* help command line option:              General Options.     (line   9)
-* Hermitian matrix:                      lapack calling conventions.
-                                                              (line 121)
-* hired <1>:                             Exception Handler Usage.
-                                                              (line  46)
-* hired:                                 Variable Freedom.    (line   8)
-* home page:                             General Options.     (line  22)
-* I need avram linked with:              Configuration Related Errors.
-                                                              (line  24)
-* i/o errors:                            i/o Errors.          (line   6)
-* identifiers:                           How avram Thinks.    (line  15)
-* identity <1>:                          Exception Handler Usage.
-                                                              (line  46)
-* identity:                              Standard Library.    (line  10)
-* identity function:                     Concrete Syntax.     (line   7)
-* imperative programming <1>:            Exception Handler Usage.
-                                                              (line  64)
-* imperative programming <2>:            List Combinators.    (line   6)
-* imperative programming:                Assignment.          (line   6)
-* impetus:                               Ports and Packets.   (line 115)
-* improper integrals:                    Additional gslint notes.
-                                                              (line   8)
-* include directives:                    Implementing new library functions.
-                                                              (line  54)
-* infinite series:                       gslevu.              (line  14)
-* infinite streams <1>:                  Byte Transducers.    (line   7)
-* infinite streams <2>:                  Line Maps.           (line  17)
-* infinite streams:                      Loading All of Standard Input at Once.
-                                                              (line   9)
-* infinite sum:                          gslevu calling conventions.
-                                                              (line  13)
-* input files:                           Command Line Syntax. (line  13)
-* insert <1>:                            Insert.              (line   6)
-* insert:                                Sort.                (line  29)
-* instruction_node:                      Instruction Stacks.  (line   7)
-* interactive applications <1>:          Characters and Strings.
-                                                              (line 161)
-* interactive applications <2>:          Security.            (line  32)
-* interactive applications:              Parameter Mode Options.
-                                                              (line  59)
-* interactive command line option <1>:   Output From Interactive Applications.
-                                                              (line   6)
-* interactive command line option <2>:   Output From Non-interactive Applications.
-                                                              (line   6)
-* interactive command line option:       Parameter Mode Options.
-                                                              (line  59)
-* internal error:                        Memory leaks.        (line  86)
-* internal errors <1>:                   Bugs.                (line   6)
-* internal errors:                       Internal Errors.     (line   6)
-* interpretation:                        Ports and Packets.   (line 115)
-* invalid asprintf specifier:            math library exceptions.
-                                                              (line  11)
-* invalid assignment:                    Application Programming Errors.
-                                                              (line  27)
-* invalid comparison:                    Application Programming Errors.
-                                                              (line  15)
-* invalid concatenation:                 Application Programming Errors.
-                                                              (line  25)
-* invalid deconstruction:                Application Programming Errors.
-                                                              (line  17)
-* invalid distribution:                  Application Programming Errors.
-                                                              (line  23)
-* invalid file name:                     File Names.          (line  74)
-* invalid file specification <1>:        Formatted Output.    (line 176)
-* invalid file specification:            File Format Errors.  (line  43)
-* invalid membership:                    Application Programming Errors.
-                                                              (line  21)
-* invalid output preamble format <1>:    Formatted Output.    (line  66)
-* invalid output preamble format:        File Format Errors.  (line  36)
-* invalid profile identifier <1>:        Profiling.           (line  84)
-* invalid profile identifier:            Application Programming Errors.
-                                                              (line  31)
-* invalid raw file format <1>:           Formatted Input.     (line 113)
-* invalid raw file format <2>:           Raw Files.           (line  31)
-* invalid raw file format:               File Format Errors.  (line  48)
-* invalid recursion:                     Application Programming Errors.
-                                                              (line  13)
-* invalid text format <1>:               math library exceptions.
-                                                              (line  17)
-* invalid text format <2>:               Formatted Output.    (line  66)
-* invalid text format:                   File Format Errors.  (line  12)
-* invalid transpose:                     Application Programming Errors.
-                                                              (line  19)
-* invalid value <1>:                     math library exceptions.
-                                                              (line   8)
-* invalid value <2>:                     External Libraries.  (line  46)
-* invalid value:                         Primitive types.     (line  41)
-* isolate <1>:                           Assignment.          (line  48)
-* isolate:                               Variable Freedom.    (line  38)
-* iterate <1>:                           Reduce.              (line  66)
-* iterate:                               Iteration.           (line   6)
-* Jacobian <1>:                          Additional minpack notes.
-                                                              (line  12)
-* Jacobian <2>:                          minpack calling conventions.
-                                                              (line  15)
-* Jacobian <3>:                          Additional kinsol notes.
-                                                              (line   6)
-* Jacobian:                              kinsol input parameters.
-                                                              (line  17)
-* jail:                                  General Options.     (line  36)
-* Java:                                  Preface.             (line 126)
-* lapack error:                          lapack exceptions.   (line  18)
-* least squares <1>:                     minpack.             (line   7)
-* least squares <2>:                     Additional lapack notes.
-                                                              (line  15)
-* least squares <3>:                     lapack calling conventions.
-                                                              (line  89)
-* least squares:                         harminv.             (line   9)
-* left <1>:                              Error Messages.      (line  82)
-* left <2>:                              Field.               (line   6)
-* left:                                  Standard Library.    (line  10)
-* Levin u-transform:                     gslevu.              (line  16)
-* libexpect:                             i/o Errors.          (line  27)
-* library interfac source file:          Implementing new library functions.
-                                                              (line  35)
-* library interface header file:         Implementing new library functions.
-                                                              (line  12)
-* library modules:                       Standard Library.    (line   7)
-* licensing restrictions:                Implementing new library functions.
-                                                              (line 143)
-* line breaks <1>:                       Formatted Output.    (line  45)
-* line breaks <2>:                       Formatted Input.     (line  56)
-* line breaks:                           Character Oriented Interaction.
-                                                              (line  30)
-* line-map command line option <1>:      Line Maps.           (line   6)
-* line-map command line option <2>:      Loading All of Standard Input at Once.
-                                                              (line   6)
-* line-map command line option:          Filter Mode Options. (line  29)
-* linear algebra:                        lapack.              (line   7)
-* linear programming <1>:                lpsolve calling conventions.
-                                                              (line   7)
-* linear programming <2>:                lpsolve.             (line   6)
-* linear programming:                    glpk.                (line   7)
-* lists <1>:                             Lists.               (line   7)
-* lists <2>:                             List Functions.      (line   6)
-* lists <3>:                             List Combinators.    (line   6)
-* lists <4>:                             A Minimal Set of Properties.
-                                                              (line  58)
-* lists <5>:                             Representation of Numeric and Textual Data.
-                                                              (line  19)
-* lists:                                 Raw Material.        (line  12)
-* LU decomposition:                      Two dimensional arrays.
-                                                              (line  56)
-* map:                                   Map.                 (line  12)
-* map-to-each-file command line option <1>: Input for Mapped Applications.
-                                                              (line   6)
-* map-to-each-file command line option:  Parameter Mode Options.
-                                                              (line  46)
-* mapcur:                                Mapcur.              (line   6)
-* matrices:                              Two dimensional arrays.
-                                                              (line   8)
-* matrix memory map:                     Two dimensional arrays.
-                                                              (line 172)
-* member <1>:                            List Transformations.
-                                                              (line  60)
-* member:                                Member.              (line   6)
-* memory overflow <1>:                   File Names.          (line  74)
-* memory overflow:                       Overflow Errors.     (line   7)
-* meta <1>:                              Recur.               (line   6)
-* meta:                                  Standard Library.    (line  10)
-* minpack error:                         minpack exceptions.  (line  12)
-* missing value <1>:                     math library exceptions.
-                                                              (line   8)
-* missing value <2>:                     External Libraries.  (line  46)
-* missing value:                         Primitive types.     (line  40)
-* mixed integer programming <1>:         lpsolve calling conventions.
-                                                              (line  12)
-* mixed integer programming:             lpsolve.             (line   6)
-* mnemonics:                             Standard Library.    (line  30)
-* modes <1>:                             Filter Mode Interface.
-                                                              (line   6)
-* modes <2>:                             Filter Mode.         (line   6)
-* modes:                                 Modes of Operation.  (line   8)
-* mpfr error:                            mpfr exceptions.     (line  12)
-* multiple -.EXT options:                Other Diagnostics and Warnings.
-                                                              (line   7)
-* multiple character encodings:          Characters and Strings.
-                                                              (line  14)
-* multiple version specifications:       Configuration Related Errors.
-                                                              (line  41)
-* multivariate normal distrubution:      Interaction combinator.
-                                                              (line  20)
-* nan <1>:                               mpfr constants.      (line  26)
-* nan:                                   Additional math library notes.
-                                                              (line   7)
-* native integer arithmetic <1>:         List Transformations.
-                                                              (line  87)
-* native integer arithmetic:             Weight.              (line  30)
-* naturals <1>:                          Simple Operations.   (line 194)
-* naturals <2>:                          Input Data Structure.
-                                                              (line  60)
-* naturals:                              Representation of Numeric and Textual Data.
-                                                              (line  50)
-* nil <1>:                               Standard Library.    (line  10)
-* nil <2>:                               Representation of Numeric and Textual Data.
-                                                              (line   9)
-* nil:                                   Raw Material.        (line  50)
-* nm utility:                            Implementing new library functions.
-                                                              (line 118)
-* non-adaptive integration:              gslint output.       (line  13)
-* non-convergence:                       kinsol output.       (line  14)
-* non-linear optimization <1>:           minpack.             (line   6)
-* non-linear optimization:               kinsol.              (line   7)
-* non-local jumps:                       Suicidal exception handling.
-                                                              (line  15)
-* non-standard installation:             Example Script.      (line  26)
-* not writing file name:                 Formatted Output.    (line 150)
-* note <1>:                              Profile.             (line  22)
-* note:                                  Note.                (line   9)
-* null character in file name <1>:       File Names.          (line  74)
-* null character in file name:           File Format Errors.  (line  29)
-* numerical differentiation:             gsldif.              (line   6)
-* numerical integration:                 gslint.              (line   6)
-* operator precedence:                   Syntax.              (line  20)
-* operator properties:                   A Minimal Set of Properties.
-                                                              (line  36)
-* optimization:                          kinsol.              (line   7)
-* overflow <1>:                          List Transformations.
-                                                              (line   8)
-* overflow <2>:                          Simple Operations.   (line   9)
-* overflow <3>:                          Weight.              (line  30)
-* overflow:                              Overflow Errors.     (line   7)
-* packed arrays:                         Two dimensional arrays.
-                                                              (line 158)
-* pairs:                                 Representation of Numeric and Textual Data.
-                                                              (line  37)
-* pairwise <1>:                          Pairwise.            (line   6)
-* pairwise:                              Reduce.              (line  66)
-* parameter mode <1>:                    Parameter Mode Interface.
-                                                              (line   6)
-* parameter mode <2>:                    Filter Mode Interface.
-                                                              (line   6)
-* parameter mode <3>:                    Security.            (line  20)
-* parameter mode <4>:                    Parameter Mode Options.
-                                                              (line   6)
-* parameter mode:                        Parameter Mode.      (line   6)
-* parameterized command line option:     Parameter Mode Options.
-                                                              (line  90)
-* path separators:                       Command Line Syntax. (line  43)
-* paths <1>:                             Output From Non-interactive Applications.
-                                                              (line  16)
-* paths <2>:                             Input Data Structure.
-                                                              (line  27)
-* paths <3>:                             Environment.         (line   6)
-* paths <4>:                             Example Script.      (line  24)
-* paths:                                 Configuration Related Errors.
-                                                              (line  53)
-* pointer equality <1>:                  Comparison.          (line  31)
-* pointer equality:                      On Equality.         (line  39)
-* pointers <1>:                          Indirection.         (line   6)
-* pointers <2>:                          Comparison.          (line  40)
-* pointers <3>:                          Vacant Address Space.
-                                                              (line  55)
-* pointers <4>:                          On Equality.         (line  39)
-* pointers:                              Preface.             (line 126)
-* port:                                  Lists of Pairs of Ports.
-                                                              (line   6)
-* port_pair:                             Lists of Pairs of Ports.
-                                                              (line  11)
-* portability <1>:                       Suicidal exception handling.
-                                                              (line 129)
-* portability:                           Inept excess verbiage.
-                                                              (line  60)
-* portal:                                Lists of Pairs of Ports.
-                                                              (line  11)
-* preamble <1>:                          Formatted Output.    (line   7)
-* preamble <2>:                          Formatted Input.     (line  27)
-* preamble <3>:                          Raw Files.           (line  62)
-* preamble <4>:                          Output From Non-interactive Applications.
-                                                              (line  16)
-* preamble <5>:                          Input Data Structure.
-                                                              (line  39)
-* preamble <6>:                          Standard Output Representation.
-                                                              (line  22)
-* preamble <7>:                          Standard Input Representation.
-                                                              (line  47)
-* preamble:                              Preamble Section.    (line   6)
-* precedence:                            Syntax.              (line  20)
-* precision <1>:                         mpfr binary operators with a natural operand.
-                                                              (line  27)
-* precision:                             mpfr binary operators.
-                                                              (line  44)
-* predicates <1>:                        math library predicates.
-                                                              (line   6)
-* predicates:                            Predicates.          (line   6)
-* printing algorithm <1>:                Standard Output Representation.
-                                                              (line  38)
-* printing algorithm:                    Bit String Encoding. (line  21)
-* probability distributions:             rmath statistical functions.
-                                                              (line  13)
-* profile.h:                             Profiling.           (line   6)
-* profile.txt <1>:                       Profile.             (line   6)
-* profile.txt:                           Files.               (line   7)
-* prompts:                               Line Oriented Interaction.
-                                                              (line  51)
-* properties:                            A Minimal Set of Properties.
-                                                              (line  36)
-* queues <1>:                            Indirection.         (line  15)
-* queues <2>:                            Simple Operations.   (line  98)
-* queues:                                Bit String Encoding. (line  20)
-* quiet command line option:             Parameter Mode Options.
-                                                              (line  12)
-* random number generators:              Implementing new library functions.
-                                                              (line 169)
-* random numbers <1>:                    mpfr functions with miscellaneous calling conventions.
-                                                              (line  17)
-* random numbers:                        mtwist.              (line   6)
-* raw-mode command line option:          Standard Input Representation.
-                                                              (line   8)
-* raw-output command line option <1>:    Standard Output Representation.
-                                                              (line   6)
-* raw-output command line option:        Filter Mode Options. (line  12)
-* re-entrancy:                           Additional minpack notes.
-                                                              (line  20)
-* recur <1>:                             Error Messages.      (line  77)
-* recur:                                 Recur.               (line   6)
-* recursion <1>:                         Comparison.          (line  58)
-* recursion <2>:                         Mapcur.              (line  11)
-* recursion <3>:                         Reduce.              (line  62)
-* recursion <4>:                         Iteration.           (line   6)
-* recursion:                             Recursion.           (line   6)
-* reduce:                                Reduce.              (line   6)
-* reductions:                            Profiling.           (line  79)
-* refer:                                 Refer.               (line   6)
-* reference count <1>:                   Simple Operations.   (line  71)
-* reference count:                       Vacant Address Space.
-                                                              (line  58)
-* relative path:                         Input Data Structure.
-                                                              (line  27)
-* replace <1>:                           Replace.             (line   6)
-* replace <2>:                           Error Messages.      (line  84)
-* replace:                               Assignment.          (line  42)
-* reverse:                               Reverse.             (line   6)
-* right <1>:                             Error Messages.      (line  82)
-* right <2>:                             Reduce.              (line  66)
-* right <3>:                             Field.               (line   6)
-* right:                                 Standard Library.    (line  10)
-* rounding:                              mpfr.                (line  32)
-* row major order:                       Related utility functions.
-                                                              (line  49)
-* run time errors:                       Diagnostics.         (line   6)
-* score:                                 Profiling.           (line  14)
-* script:                                Example Script.      (line   6)
-* search paths <1>:                      Environment.         (line  11)
-* search paths:                          Configuration Related Errors.
-                                                              (line  53)
-* search paths not supported <1>:        Command Line Parsing.
-                                                              (line 117)
-* search paths not supported:            Configuration Related Errors.
-                                                              (line  53)
-* security <1>:                          Command Line Parsing.
-                                                              (line 167)
-* security <2>:                          Formatted Output.    (line 167)
-* security:                              Security.            (line   6)
-* segmentation fault <1>:                math library exceptions.
-                                                              (line  14)
-* segmentation fault <2>:                gslint input parameters.
-                                                              (line  27)
-* segmentation fault <3>:                Additional gsldif notes.
-                                                              (line  10)
-* segmentation fault <4>:                Related utility functions.
-                                                              (line  37)
-* segmentation fault <5>:                Two dimensional arrays.
-                                                              (line 239)
-* segmentation fault <6>:                One dimensional arrays.
-                                                              (line  59)
-* segmentation fault <7>:                Primitive types.     (line  63)
-* segmentation fault:                    Simple Operations.   (line  57)
-* semantic function <1>:                 Error Messages.      (line  14)
-* semantic function:                     Semantics.           (line  11)
-* setjmp <1>:                            Additional gslint notes.
-                                                              (line  14)
-* setjmp:                                Suicidal exception handling.
-                                                              (line  23)
-* shell <1>:                             Output From Interactive Applications.
-                                                              (line   9)
-* shell <2>:                             i/o Errors.          (line  27)
-* shell:                                 Command Line Syntax. (line  13)
-* shell script <1>:                      Environment.         (line  17)
-* shell script:                          Example Script.      (line   6)
-* silly:                                 A Simple Lisp Like Language.
-                                                              (line   6)
-* silly-me:                              Error Messages.      (line  13)
-* single precision:                      lapack.              (line  17)
-* singular value decomposition:          lapack calling conventions.
-                                                              (line  51)
-* slow convergence:                      gslint exceptions.   (line  15)
-* sort:                                  Sort.                (line   6)
-* sparse matrices:                       umf.                 (line   6)
-* sparse matrix <1>:                     Additional glpk notes.
-                                                              (line   6)
-* sparse matrix:                         glpk input parameters.
-                                                              (line  18)
-* spawning processes <1>:                Library Reference.   (line  39)
-* spawning processes <2>:                Character Oriented Interaction.
-                                                              (line  13)
-* spawning processes <3>:                Line Oriented Interaction.
-                                                              (line  26)
-* spawning processes:                    i/o Errors.          (line  27)
-* standard character encoding:           Characters and Strings.
-                                                              (line  23)
-* standard input <1>:                    File Names.          (line  63)
-* standard input <2>:                    Output From Non-interactive Applications.
-                                                              (line  16)
-* standard input <3>:                    Line Maps.           (line  13)
-* standard input <4>:                    Standard Input Representation.
-                                                              (line   6)
-* standard input <5>:                    Loading All of Standard Input at Once.
-                                                              (line   6)
-* standard input <6>:                    Filter Mode Interface.
-                                                              (line  11)
-* standard input <7>:                    Security.            (line  20)
-* standard input <8>:                    Parameter Mode Options.
-                                                              (line  37)
-* standard input <9>:                    Filter Mode.         (line  27)
-* standard input:                        User Manual.         (line  17)
-* standard library:                      Refer.               (line  44)
-* standard output <1>:                   Formatted Output.    (line 165)
-* standard output <2>:                   File Names.          (line  63)
-* standard output <3>:                   Simple Operations.   (line 204)
-* standard output <4>:                   Output From Non-interactive Applications.
-                                                              (line  16)
-* standard output <5>:                   Line Maps.           (line  14)
-* standard output:                       Standard Output Representation.
-                                                              (line   6)
-* standard prelude:                      Standard Library.    (line   7)
-* state dependence:                      Implementing new library functions.
-                                                              (line 139)
-* state transition function:             Transfer.            (line  12)
-* statistical distributions:             rmath statistical functions.
-                                                              (line  13)
-* step command line option <1>:          Output From Interactive Applications.
-                                                              (line   6)
-* step command line option <2>:          Output From Non-interactive Applications.
-                                                              (line   6)
-* step command line option:              Parameter Mode Options.
-                                                              (line  67)
-* storage locations:                     Assignment.          (line  37)
-* strerror <1>:                          Profiling.           (line  96)
-* strerror <2>:                          Error Reporting.     (line  48)
-* strerror <3>:                          Formatted Output.    (line  74)
-* strerror <4>:                          Raw Files.           (line  72)
-* strerror:                              i/o Errors.          (line   7)
-* strings <1>:                           Error Messages.      (line  13)
-* strings:                               Representation of Numeric and Textual Data.
-                                                              (line  19)
-* strtod:                                math library conversion functions.
-                                                              (line   6)
-* symmetric matrices:                    lapack calling conventions.
-                                                              (line  17)
-* symmetric matrix:                      Two dimensional arrays.
-                                                              (line  54)
-* syntax:                                Syntax.              (line   8)
-* system time:                           Input Data Structure.
-                                                              (line  21)
-* tail field:                            Lists.               (line   7)
-* text files <1>:                        Input Data Structure.
-                                                              (line  47)
-* text files <2>:                        Standard Input Representation.
-                                                              (line  47)
-* text files:                            File Format.         (line  17)
-* threads <1>:                           Instruction Stacks.  (line  77)
-* threads:                               Library Reference.   (line  33)
-* time stamp:                            Input Data Structure.
-                                                              (line  21)
-* tolerance <1>:                         minpack calling conventions.
-                                                              (line  22)
-* tolerance <2>:                         kinsol output.       (line  18)
-* tolerance:                             gslint input parameters.
-                                                              (line  11)
-* trace command line option:             Parameter Mode Options.
-                                                              (line  79)
-* transfer:                              Transfer.            (line   6)
-* transition <1>:                        Transition.          (line  11)
-* transition:                            Transfer.            (line  24)
-* transpose <1>:                         List Transformations.
-                                                              (line  52)
-* transpose <2>:                         Error Messages.      (line  77)
-* transpose:                             Transpose.           (line  12)
-* trees <1>:                             Indirection.         (line  70)
-* trees <2>:                             Vacant Address Space.
-                                                              (line  72)
-* trees <3>:                             A Hierarchy of Sets. (line  27)
-* trees <4>:                             Representation of Numeric and Textual Data.
-                                                              (line   9)
-* trees <5>:                             Bit String Encoding. (line   6)
-* trees:                                 Raw Material.        (line 109)
-* triangular matrices:                   lapack calling conventions.
-                                                              (line  19)
-* triangular matrix:                     Two dimensional arrays.
-                                                              (line  34)
-* trigonometric functions:               math library operators.
-                                                              (line   6)
-* Turing equivalence:                    A Minimal Set of Properties.
-                                                              (line  58)
-* type tags:                             Note.                (line  26)
-* types:                                 Representation of Numeric and Textual Data.
-                                                              (line  60)
-* ulimit:                                Overflow Errors.     (line  28)
-* umf error:                             umf exceptions.      (line  17)
-* undefined expressions <1>:             Operator Generalization.
-                                                              (line  50)
-* undefined expressions:                 On Equality.         (line  32)
-* universal function:                    The Universal Function.
-                                                              (line   6)
-* universal quantification <1>:          Operator Generalization.
-                                                              (line  42)
-* universal quantification <2>:          A Hierarchy of Sets. (line  29)
-* universal quantification:              On Equality.         (line  32)
-* universality <1>:                      Vacant Address Space.
-                                                              (line  45)
-* universality:                          A Minimal Set of Properties.
-                                                              (line  58)
-* Unix <1>:                              Character Oriented Interaction.
-                                                              (line  32)
-* Unix <2>:                              Input Data Structure.
-                                                              (line  21)
-* Unix <3>:                              Byte Transducers.    (line  42)
-* Unix <4>:                              Example Script.      (line  13)
-* Unix <5>:                              Command Line Syntax. (line  78)
-* Unix:                                  Preface.             (line  11)
-* unknown date:                          File Names.          (line  52)
-* unparameterized command line option <1>: Standard Input Representation.
-                                                              (line   8)
-* unparameterized command line option:   Filter Mode Options. (line  50)
-* unrecognized combinator <1>:           Vacant Address Space.
-                                                              (line  26)
-* unrecognized combinator:               Application Programming Errors.
-                                                              (line  29)
-* unrecognized function name:            External Libraries.  (line  32)
-* unrecognized library:                  External Libraries.  (line  32)
-* unrecognized option:                   Configuration Related Errors.
-                                                              (line  47)
-* unsupported hook <1>:                  Vacant Address Space.
-                                                              (line  26)
-* unsupported hook <2>:                  Configuration Related Errors.
-                                                              (line  15)
-* unsupported hook:                      Application Programming Errors.
-                                                              (line  33)
-* url:                                   General Options.     (line  22)
-* value field:                           Type Conversions.    (line  29)
-* variables:                             Variable Freedom.    (line  38)
-* vectors:                               One dimensional arrays.
-                                                              (line   8)
-* verbosity setting:                     Inept excess verbiage.
-                                                              (line  12)
-* version:                               Version.             (line   8)
-* versions <1>:                          Version Management.  (line   6)
-* versions:                              Configuration Related Errors.
-                                                              (line  35)
-* web page:                              General Options.     (line  22)
-* weight:                                Weight.              (line   7)
-* wild cards:                            Have combinator.     (line  62)
-* wish:                                  Example Script.      (line  28)
-* writing file name:                     Formatted Output.    (line 150)
-
-

BIN
doc/avram.pdf


+ 0 - 12110
doc/avram.texinfo

@@ -1,12110 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@c %**start of header
-@setfilename avram.info
-@settitle avram - a virtual machine code interpreter
-@finalout
-@setchapternewpage odd
-@c %**end of header
-
-@set VERSION 0.13.0
-
-@ifinfo
-This file documents the @code{avram} command which is a virtual machine code interpreter
-
-Copyright (C) 2000, 2003, 2006-2010 Dennis Furey
-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.
-
-@ignore
-Permission is granted to process this file through TeX and print the
-results, provided the printed document carries copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-
-@end ignore
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, 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 this permission notice may be stated in a translation approved
-by the Free Software Foundation.
-@end ifinfo
-
-@titlepage
-@title Avram
-@subtitle a virtual machine code interpreter
-@subtitle for avram Version @value{VERSION}
-@author by Dennis Furey
-
-@page
-@vskip 0pt plus 1filll
-Copyright @copyright{} 2006, 2007 Dennis Furey
-
-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 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 this permission notice may be stated in a translation approved
-by the Free Software Foundation.
-@end titlepage
-
-@shortcontents
-@contents
-
-@c All the nodes can be updated using the EMACS command
-@c texinfo-every-node-update, which is normally bound to C-c C-u C-e.
-@node Top, Preface, (dir), (dir)
-
-@ifinfo
-This file documents @code{avram} version @value{VERSION}, which is a virtual
-machine code interpreter.
-@end ifinfo
-
-@c All the menus can be updated with the EMACS command
-@c texinfo-all-menus-update, which is normally bound to C-c C-u C-a.
-@menu
-* Preface::                        project aims and scope
-* User Manual::                    command line options and usage
-* Virtual Machine Specification::  a guide for compiler writers
-* Library Reference::              how to reuse or enhance @code{avram}
-* Character Table::                representations for ASCII characters
-* Reference Implementations::      constructive computability proofs
-* Changes::                        recent updates to the manual
-* External Libraries::             specifications and calling conventions
-* Copying::                        license terms
-* Function Index::                 for the shared library API
-* Concept Index::
-@end menu
-
-@node Preface, User Manual, Top, Top
-@unnumbered Preface
-
-@code{avram} is a virtual machine code interpreter.  It reads an input
-file containing a user-supplied application expressed in virtual machine
-code, and executes it on the host machine. The name is a quasi-acronym
-for ``Applicative ViRtuAl Machine''.  Notable features are
-
-@cindex functional programming
-@cindex environment
-@cindex Unix
-@itemize @bullet
-@item strong
-support for functional programming operations (e.g., list processing)
-@item
-interfaces to selected functions from mathematical libraries, such as
-@itemize @bullet
-@item
-@code{gsl}      (numerical integration, differentiation, and series acceleration) 
-
-@url{http://www.gnu.org/software/gsl/}
-@item
-@code{mpfr}     (arbitrary precision arithmetic)
-
-
-@url{http://www.mpfr.org}
-@item
-@code{minpack}  (non-linear optimization)
-
-
-@url{http://ftp.netlib.org/minpack}
-@item
-@code{lapack}   (linear algebra)
-
-
-@url{http://ftp.netlib.org/lapack}
-@item
-@code{fftw}     (fast fourier transforms)
-
-
-@url{http://www.fftw.org}
-@item
-@code{Rmath}    (statistical and transcendental functions)
-
-
-@url{http://www.r-project.org}
-@item
-@code{ufsparse} (sparse matrices)
-
-@url{http://www.cise.ufl.edu/research/sparse/SuiteSparse/current/SuiteSparse/}
-@item
-@code{glpk}     (linear programming by the simplex method)
-
-
-@url{http://tech.groups.yahoo.com/group/lp_solve/}
-@item
-@code{lpsolve}      (mixed integer linear programming)
-
-
-@url{http://www.llnl.gov/CASC/sundials/}
-@item
-@code{kinsol}   (constrained non-linear optimization)
-
-
-@url{http://www.llnl.gov/CASC/sundials/}
-@end itemize
-@item interoperability of virtual code applications with other console
-applications or shells through the @code{expect} library
-@item a simple high-level
-interface to files, environment variables and command line parameters
-@item support for various styles of stateless or persistent stream
-processors (a.k.a. Unix filters)
-@end itemize
-
-The reason for writing @code{avram} was that I wanted to do some work
-using a functional programming language, didn't like any functional
-programming languages that already existed, and felt that it would be
-less trouble to write a virtual machine emulator than the back end of
-a compiler. As of version 0.1.0, the first public release of
-@code{avram} as such in 2000, most of the code base had been in heavy
-use by me for about four years, running very reliably. At this writing
-some six years later, it has seen even more use with rarely any
-reliability issues, in some cases attacking large combinatorial
-problems for weeks or months at a time. These problems have involved
-both long running continuous execution, and batches of thousands of
-shorter jobs.
-
-Although the virtual machine is biased toward functional programming,
-it is officially language agnostic, so @code{avram} may be useful to
-anyone involved in the development of compilers for other programming,
-scripting, or special purpose languages. The crucial advantage of
-using it in your own project is that rather than troubling over
-address modes, register allocation, and other hassles inherent in
-generating native code, your compiler can just dump a fairly high
-level intermediate code representation of the source text to a file,
-and let the virtual machine emulator deal with the details. The
-tradeoff for using a presumably higher level interpreted language is that the
-performance is unlikely to be competitive with native code, but this
-issue is mitigated in the case of numerical applications whose heavy
-lifting is done by the external libraries mentioned above.
-
-Portability is an added bonus. The virtual code is binary compatible
-across all platforms. Versions of @code{avram} as of 0.1.0 and later are
-packaged using GNU autotools and should be possible to build on any
-platform supporting them. In particular, the package is known to have
-built successfully on MacOS, FreeBSD, Solaris (thanks to the compile
-farm at Sourceforge.net) Digital Unix, and Debian GNU/Linux for i386 and
-Alpha platforms, although it has not been extensively tested on all of
-them. Earlier versions were compiled and run successfully on Irix and
-even Windows-NT (with @command{gcc}).
-
-This document is divided into three main parts, with possibly three
-different audiences, but they all depend on a basic familiarity with
-@cindex Unix
-Unix or GNU/Linux systems.
-
-@table @asis
-@item @ref{User Manual}
-essentially reproduces the information found in
-the manpage that is distributed with @code{avram} with a few extra
-examples and longer explanations. Properly deployed,
-@code{avram} should be almost entirely hidden from end users by wrapper
-scripts, so the ``users'' to whom this part is relevant would be
-those involved in preparing these scripts (a matter of choosing the right
-command line options). Depending on the extent to which this task is
-automated by a compiler, that may include the compiler writer or the
-developers of applications.
-@item @ref{Virtual Machine Specification}
-documents much of what one would need to know in order to write a
-compiler that generates code executable by @code{avram}. That includes
-the complete virtual machine code semantics and file formats. It would
-also be possible to implement a compatible replacement for @code{avram}
-from scratch based on the information in this chapter, in case anyone
-has anything against C, my coding style, or the GPL.  (A few patches to
-make it @command{lint} cleanly or a new implementation in good
-pedagogical Java without pointers would both be instructive
-exercises. ;-))
-@cindex pointers
-@cindex Java
-@item @ref{Library Reference}
-includes documentation on the application program interface and
-recommended entry points for the C library distributed with
-@code{avram}. This information would be of use to those wishing to
-develop applications incorporating similar features, or to reuse the
-code for unrelated purposes. It might also be useful to anyone wishing
-to develop C or C++ applications that read or write data files in the
-format used by @code{avram}.
-@end table
-
-@node User Manual, Virtual Machine Specification, Preface, Top
-@chapter User Manual
-
-This chapter provides the basic information on how to use @code{avram}
-to execute virtual machine code applications.
-
-@code{avram} is invoked
-by typing a command at a shell prompt in one of these three forms.
-
-@display
-@kbd{avram} [@emph{general options}]
-@kbd{avram} [@emph{filter mode options}] @var{codefile}[@kbd{.avm}]
-@kbd{avram} [@emph{parameter mode options}] @var{codefile}[@kbd{.avm}] [@emph{parameters}]
-@end display
-
-@noindent
-In the second case, @code{avram} reads from standard input, and may
-of course appear as part of commands such as
-@cindex standard input
-
-@display
-@kbd{avram} [@emph{filter mode options}] @var{codefile}[@kbd{.avm}] < @var{inputfile}
-@var{anothercommand} | @kbd{avram} [@emph{filter mode options}] @var{codefile}[@kbd{.avm}]
-@end display
-
-@noindent
-When @code{avram} is invoked with the name of an input file (with a
-default extension @kbd{.avm}), it reads virtual machine code from the
-file and executes it on the host machine.
-
-@cindex functional programming
-The virtual code format used by @code{avram} is designed
-to support the features of functional or applicative programming
-languages. Although this chapter documents only the usage of
-@code{avram} and not the internals, it will be helpful to keep in mind
-that the virtual machine code expresses a mathematical function rather
-than a program in the conventional sense. As such, it performs no action
-directly, but may be applied in a choice of ways by the user of
-@code{avram} according to the precise operation required.
-
-The following sections provide information in greater detail about
-usage and diagnostics.
-
-@menu
-* General Options::             getting help and version information
-* Modes of Operation::          stream processing or file oriented
-* Filter Mode Options::         how to run a stream processor
-* Parameter Mode Options::      how to have an application use files
-* Command Line Syntax::         application-independent conventions
-* Diagnostics::                 explanation of error messages
-* Security::                    running untrusted applications
-* Example Script::              how to unburden the end users
-* Files::                       miscellaneous files used
-* Environment::                 environment variables
-* Bugs::                        hall of shame
-@end menu
-
-
-
-@node General Options, Modes of Operation, User Manual, User Manual
-@section General Options
-Regardless of whatever other command line parameters are given,
-@code{avram} accepts the following parameters:
-
-@cindex help
-@cindex emulation
-@cindex @code{help} command line option
-@cindex @code{emulation} command line option
-@table @code
-@item -h, --help
-Show a summary of options and exit.
-@item -V,-v, --version
-Show the version of program and a short copyleft message and exit.
-@item --emulation=@var{version}
-Be backward compatible with an older version of @code{avram}.  This
-option should include a valid version number, for example
-@kbd{@value{VERSION}}, which is the version of @code{avram} to be
-emulated. It can make virtual code applications future proof, assuming
-that future versions of @code{avram} correctly support backward
-compatibility. It may be used in conjunction with any other option in
-any mode of operation.
-@cindex web page
-@cindex home page
-@cindex url
-This copy of the user manual has not been updated since version @value{VERSION} of
-@code{avram}, so it is unable to document incompatibilities with later
-versions. The latest version of the manual may be found at
-@url{http://www.lsbu.ac.uk/~fureyd/avram}.
-@item -e, --external-libraries
-@cindex @code{external-libraries}
-Show a list of libraries with which @code{avram} has been linked and
-whose functions therefore could be called from virtual machine
-programs. This growing list currently includes selected functions from
-@code{fftw}, @code{glpk}, @code{gsl}, @code{kinsol}, @code{lapack},
-@code{minpack}, @code{mpfr}, @code{lpsolve}, @code{Rmath} and @code{ufsparse}
-(see @ref{Preface}) which are documented further in @ref{External Libraries}.
-@item -j, --jail
-@cindex @code{jail}
-This option disables execution of shell commands by virtual code
-applications, which is normally possible by default even for nominally
-non-interactive applications (see @ref{Parameter Mode Options}). A
-virtual code application attempting to spawn a shell (using the
-@code{interact} combinator) when this option is selected will
-encounter an exception rather than successful completion of the
-operation. This option is provided as a security feature for running
-untrusted code (see @ref{Security}), and is incompatible with
-@option{-i}, @option{-t}, and @option{-s}.
-@item -f, --force-text-input
-@cindex @code{force-text-input} command line option
-Normally @code{avram} will try to guess by looking at a file whether it
-is an ordinary text file or one that has been written in the virtual
-code file format, and choose a different internal representation
-accordingly. An application may require one representation or the
-other. This option tells @code{avram} to treat all input files other
-than the virtual code file (named in the first command line parameter)
-as text files regardless of whether or not it would be possible to
-interpret them otherwise. This option may be used in combination with
-any other option.
-@end table
-
-@node Modes of Operation, Filter Mode Options, General Options, User Manual
-@section Modes of Operation
-Apart from to the capability to print brief help messages and exit,
-there are two main modes of operation, depending on which options
-are specified on the command line before the virtual code file name.
-@cindex modes
-
-@cindex modes
-For the purpose of choosing the mode of operation, the virtual
-code filename is taken to be the first command line argument not
-beginning with a dash. Other conventions relevant to application
-specific parameters are detailed in @ref{Command Line Syntax}.
-
-@menu
-* Filter Mode::                 
-* Parameter Mode::              
-@end menu
-
-@node Filter Mode, Parameter Mode, Modes of Operation, Modes of Operation
-@subsection Filter Mode
-
-@cindex filter mode
-@cindex modes
-In filter mode, the argument to the function given by the virtual code
-is taken from standard input, and the result is written to standard
-output, except for error messages resulting from a failure to evaluate
-the function, which are written to standard error.
-@xref{Diagnostics}. Filter mode is indicated whenever these three
-conditions are all met.
-
-@itemize @bullet
-@item
-Either at least one of the filter mode options appears on the command
-line preceding the first filename parameter, or there are no options at
-all. @xref{Filter Mode Options}.
-@item
-Exactly one filename parameter appears on the command line,
-which is the name of the virtual machine code file.
-@item
-Either the filename comes last on the command line, or the
-@option{--unparameterized} option precedes it, causing
-everything following it to be ignored.
-@end itemize
- 
-@noindent
-Examples:
-
-@table @kbd
-@item avram mynewapp < inputfilename
-@cindex standard input
-In this example, filter mode is recognized by default because there are
-no options or input files on the command line to indicate
-otherwise. (The input file redirected into standard input is not treated
-by the shell as a command line argument.)
-@item cat somefile | avram -r coolprog > outputfile
-In this example, the @option{-r} option gives it away, being one of the
-filter mode options, in addition to the fact that there are no input
-file parameters or application-specific options.
-@item avram -u devilmaycare.avm --bogusoption ignoredparameter
-In this case, filter mode is forced by the @option{-u}
-option despite indications to the contrary.
-@end table
-
-@node Parameter Mode,  , Filter Mode, Modes of Operation
-@subsection Parameter Mode
-@cindex parameter mode
-In parameter mode, the argument to the function given by the virtual
-code is a data structure containing environment variables and command
-line parameters including files, application specific options, and
-possibly standard input. The result obtained by evaluating the
-function is either a data structure representing a set of files to be
-written, which may include standard output, or a sequence of shell
-commands to be executed, or a combination of both. Parameter mode is
-indicated whenever either of these conditions is met.
-
-@itemize @bullet
-@item
-Any of the parameter mode options appears on the
-command line preceding the first filename parameter.
-@ifinfo
-@*
-@end ifinfo
-@xref{Parameter Mode Options}.
-@item
-At least one additional filename parameter or option follows the first
-filename parameter, and the option @option{--unparameterized} does not
-precede it.
-@end itemize
- 
-@noindent
-Examples:
-
-@table @kbd
-@item avram --map-to-each-file prettyprinter.avm *.c *.h --extra-pretty
-In this example, parameter mode is indicated both by the parameter
-mode option @option{--map-to-each-file} and by the presence of input
-file names and the @option{--extra-pretty} option. The latter is
-specific to the hypothetical @code{prettyprinter.avm} virtual code
-application, as indicated by its position on the command line, and is
-therefore passed to it by @code{avram}.
-@item cat ~/specfile | avram reportgenerator -v - /var/log/syslog
-In this example, a hypothetical parameter mode application
-@code{reportgenerator} is able to read @file{~/specfile} from standard
-input because of the @code{-} used as a parameter.
-@item avram --parameterized grepenv
-In this example, a hypothetical application that searches shell
-variables is invoked in parameter mode even with no input files or
-application specific options, because of the  @option{--parameterized}
-option. Parameter mode invocation is required by the application to give
-it access to the environment.
-@item avram grepenv --search-targets=PATH,MANPATH
-This example shows an application specific option with both a keyword
-and a parameter list. They suffice to indicate parameter mode without
-an explicit @option{--parameterized} option.
-@end table
-
-@node Filter Mode Options, Parameter Mode Options, Modes of Operation, User Manual
-@section Filter Mode Options
-The options available in filter mode are listed below. Except as
-otherwise noted, all options are mutually exclusive. Ordinarily a
-given application will require certain fixed settings of these options
-and will not work properly if they are set inappropriately.
-
-@table @code
-@item -r, @code{--raw-output}
-@cindex raw-output command line option
-Normally the result obtained by evaluating the function in the virtual
-code file must be a list of character strings, which is written as
-such to standard output. However, if this option is selected, the form
-of the result is unconstrained, and it will be written in a data file
-format that is not human readable but can be used by other
-applications. This option is incompatible with any other options
-except @option{-u}.
-@item -c, --choice-of-output
-@cindex @code{choice-of-output} command line option
-When this option is used, the evaluation of the function given by the
-virtual machine code will be expected to yield a data structure from
-which @code{avram} will ascertain whether standard output should be
-written in text or raw data format.  This option should be used only
-if application is aware of it. It is incompatible with any other options
-except @option{-u}.
-@item -l, --line-map
-@cindex @code{line-map} command line option
-Normally the entire contents of standard input up to @code{EOF} are
-loaded into memory and used as the argument to the function in the
-virtual code file. However, this option causes standard input to be read
-a line at a time, with the function applied individually to each line,
-and its result in each case written immediately to standard output.  A
-given application either requires this option or does not, and will not
-work properly in the alternative. This option implies
-@option{--force-text-input} and is incompatible with any other option except
-@option{-u}.
-@item -b, --byte-transducer
-@cindex @code{byte-transducer} command line option
-This option causes standard input to be read one character at a time,
-evaluating the function given by the virtual code file each time. The
-function is used as a state transition function that takes a state and
-input to a next state and output. The output is written concurrently
-with the input operations. A given application will not work properly
-with an inappropriate setting of this option.  This option implies
-@option{--force-text-input} and is incompatible with any other option
-except @option{-u}.
-@item -u, --unparameterized
-@cindex @code{unparameterized} command line option
-Normally @code{avram} guesses whether to use filter mode or parameter
-mode depending on whether there are any parameters. Selecting this
-option forces it to operate in filter mode regardless. Any parameters
-that may appear on the command line after the virtual code file name
-are ignored. This option may be used in conjunction with any other
-filter mode option.
-@end table
-
-@node Parameter Mode Options, Command Line Syntax, Filter Mode Options, User Manual
-@section Parameter Mode Options
-@cindex parameter mode
-The parameter mode options are listed below. Except as otherwise
-noted, any combination of parameter mode options may be selected
-together, and except as noted, the settings of these options can be
-varied without breaking the application.
-
-@table @code
-@item -q, --quiet
-@cindex @code{quiet} command line option
-@code{avram} normally informs the user when writing an output file with
-a short message to standard output. This option suppresses such
-messages. This option is compatible with any application and any other
-parameter mode option except @option{-a}.
-@item -a, --ask-to-overwrite
-@cindex @code{ask-to-overwrite} command line option
-Selecting this option will cause @code{avram} to ask permission
-interactively before overwriting an existing file, and to refrain from
-overwriting it without permission, in which case the contents that
-were to be written will be lost. This option overrides @option{-q} and is
-compatible with any other parameter mode option or application.
-@item -.EXT
-@cindex @code{EXT} command line option
-@cindex default file extensions
-@cindex extensions
-@cindex file name extensions
-@cindex file name suffixes
-An option beginning with a dash followed by a period specifies a
-default extension for input file names. If @code{avram} doesn't find a
-file named on the command line, and the filename doesn't already
-contain a period, @code{avram} will try to find a file having a similar
-name but with the default extension appended. The default extension given
-by this option takes precedence over the hard coded default extensions
-of @kbd{.fun} and @kbd{.avm}. At most one default extension can be supplied. This
-option is compatible with any other parameter mode option and
-compatible with any application.
-@item -d, --default-to-stdin
-@cindex @code{default-to-stdin} command line option
-@cindex standard input
-If no filename parameter appears on the command line (other than the
-name of the virtual code file), this option directs @code{avram} to read
-the contents of standard input as if it were specified as a command line
-parameter. (Standard input can also be specified explicitly as a
-dash. See @ref{Command Line Syntax}.) This option is compatible with any
-application and any other parameter mode option except @option{-m}.
-@item -m, --map-to-each-file
-@cindex @code{map-to-each-file} command line option
-Normally @code{avram} loads the entire contents of all files named on
-the command line into memory so as to evaluate the virtual machine
-code application on all of them together. This option can be used to
-save memory in the case of applications that operate on multiple files
-independently. It causes @code{avram} to load only one file at a time
-and to perform the relevant evaluation and output before loading the
-next one. Application specific options and standard input (if
-specified) are read only once and reused. This option is incompatible
-with @option{-d}, and not necessarily compatible with all applications,
-although some may work both with and without it.
-@item -i, --interactive
-@cindex @code{interactive} command line option
-@cindex interactive applications
-This option is used in the case of applications that interact with
-other programs through shell commands. An application that is meant to
-be invoked in this way requires this option and will not work without
-it, nor will applications that are not of this type work with it. This
-option is implied by @option{-t} and @option{-s}, and is compatible with any
-other parameter mode option.
-@item -s, --step
-@cindex @code{step} command line option
-This option is used in the case of applications that interact with
-other programs through shell commands, similarly to @option{-i}, and
-can substitute for it (see above). The option has the additional
-effect of causing shell commands issued by @code{avram} on behalf of
-the application to be written with their results to standard output,
-and to cause @code{avram} to pause after displaying each shell command
-until a key is pressed.  This capability may be useful for debugging
-or auditing purposes but does not otherwise alter the effects of the
-application.  This option is compatible with any other parameter mode
-option.
-@item -t, --trace
-@cindex @code{trace} command line option
-This option is used in the case of applications that interact with
-other programs through shell commands, but only by way of the
-@code{interact} combinator, for which it provides developers a means
-of low level debugging, particularly deadlock detection. When this
-option is selected, a verbose trace of all characters exchanged
-between the functional transducer and the external application are
-written to standard output, along with some additional control flow
-diagnostics. This option is compatible with any other parameter mode
-option.
-@item -p, --parameterized
-@cindex @code{parameterized} command line option
-Normally @code{avram} tries to guess whether to operate in filter mode
-or parameter mode based on the options used and the parameters. If
-there are no parameters and no options, it will default to filter
-mode, and try to read standard input. However, if this option is
-selected, it will use parameter mode (and therefore not try to read
-standard input unless required).
-@end table
-
-@node Command Line Syntax, Diagnostics, Parameter Mode Options, User Manual
-@section Command Line Syntax
-@cindex command line
-The command line parameters that follow the virtual code file name
-when @code{avram} is used in parameter mode (@ref{Parameter Mode}) are dependent on the
-specific application. However, all supported applications are
-constrained for implementation reasons to observe certain uniform
-conventions regarding their command line parameters, which are
-documented here to avoid needless duplication.
-
-@cindex shell
-@cindex file parameters
-@cindex input files
-The shell divides the command line into "arguments" separated by white
-space.  Arguments containing white space or special characters used by
-the shell must be quoted or protected as usual. File names with wild
-cards in them are expanded by the shell before @code{avram} sees them.
-
-@code{avram} then extracts from the sequence of arguments a sequence of
-filenames and a sequence of options. Each option consists of a keyword and an
-optional parameter list. Filenames, keywords, and parameter lists are
-distinguished according to the following criteria.
-
-@enumerate
-@item
-An argument is treated as a keyword iff it meets these three
-conditions.
-
-@enumerate a
-@item
-It starts with a dash.
-@item
-It doesn't contain an equals sign.
-@item
-It doesn't consist solely of a dash.
-@end enumerate
-
-@item
-An argument is treated as a parameter list iff it meets these four
-conditions.
-
-@enumerate a
-@item
-It doesn't begin with a dash.
-@item
-It either begins with an equals sign or doesn't contain one.
-@item
-It immediately follows an argument beginning with a dash, not
-containing an equals sign and not consisting solely of a dash.
-@item
-At least one of the following is true.
-@enumerate
-@item
-It doesn't contain a period, tilde, or path separator.
-@cindex path separators
-@item
-It contains a comma.
-@item
-It can be interpreted as a C formatted floating point number.
-@end enumerate
-@end enumerate
-
-@item
-An argument is treated as an input file name iff it meets these four
-conditions.
-
-@enumerate a
-@item
-It doesn't begin with a dash.
-@item
-It doesn't contain an equals sign.
-@item
-It doesn't contain a comma.
-@item
-At least one of the following is true.
-@enumerate
-@item
-It contains a period, tilde, or path separator.
-@item
-It doesn't immediately follow an argument beginning with a dash, not
-consisting solely of a dash, and not containing an equals sign.
-@end enumerate
-@end enumerate
-
-@item
-If an argument contains an equals sign but doesn't begin with one,
-the part on the left of the first equals sign is treated as a
-keyword and the part on the right is treated as a parameter list.
-@item
-An argument consisting solely of a dash is taken to represent the
-standard input file.
-@item
-An argument not fitting any of the above classifications is an error.
-@end enumerate
-
-These conventions are needed for @code{avram} to detect input file names
-in a general, position independent way, so that it can preload the files
-on behalf of the application. Many standard Unix utilities follow these
-@cindex Unix
-conventions to a large extent, the exceptions being those that employ
-non-filename arguments without distinguishing syntax, and use positional
-or other ad hoc methods of command line interpretation. A drop-in
-replacement for such an application could nevertheless be implemented
-using @code{avram} with an appropriate wrapper script, similar to the
-approach recommended in @ref{Example Script}, but with suitable keywords
-inserted prior to the ambiguous arguments.
-
-@node Diagnostics, Security, Command Line Syntax, User Manual
-@section Diagnostics
-@cindex diagnostics
-@cindex error messages
-@cindex run time errors
-The means exists for virtual code applications to have run time error
-messages written to standard error on their behalf by
-@code{avram}. Any error messages not documented here originate with an
-application and should be documented by it.
-
-Most error messages originating from @code{avram} are prefaced by the
-application name (i.e., the name of the file containing the virtual
-machine code), but will be prefaced by @code{avram:} if the error is
-caused by a problem loading this file itself. Error messages originating
-from virtual code applications are the responsibility of their
-respective authors and might not be prefaced by the application name.
-
-The run time errors not specifically raised by the application can be
-classified as internal errors, i/o errors, overflow errors, file
-format errors, application programming errors, and configuration related
-errors.
-
-Some error messages include a code number. The number identifies
-the specific point in the source code where the condition was
-detected, for the benefit of the person maintaining it.
-
-@menu
-* Internal Errors::             
-* i/o Errors::                  
-* Overflow Errors::             
-* File Format Errors::          
-* Application Programming Errors::  
-* Configuration Related Errors::  
-* Other Diagnostics and Warnings::  
-@end menu
-
-@node Internal Errors, i/o Errors, Diagnostics, Diagnostics
-@subsection Internal Errors
-@cindex internal errors
-Internal errors should never occur unless the
-@code{avram} source code has been carelessly modified, except as noted
-in @ref{Bugs}. There are two kinds.
-
-@table @code
-@item @var{application-name}: virtual machine internal error (code @var{nn})
-Most internal errors would be reported by a message of this form
-if they were to occur. It indicates that some required invariant was
-not maintained. In such cases, the program terminates immediately, and
-any results already produced are suspect.
-@item @var{application-name}: @var{nn} unreclaimed @var{struct-names}
-A message of this form could be printed at the end of an otherwise successful
-run. @code{avram} maintains a count of the number of units allocated
-for various data structures, and checks that they are all reclaimed
-eventually as a safeguard against memory leaks. This message indicates
-that some memory remains unaccounted for.
-@end table
-
-@cindex bug reports
-@cindex email
-@cindex author
-If a repeatable internal error is discovered, please email a bug
-report and a small representative test case to the author at
-@email{avram-support@@basis.uklinux.net}. Include the version number of @code{avram},
-which you can get by running @kbd{avram --version}.
-
-@node i/o Errors, Overflow Errors, Internal Errors, Diagnostics
-@subsection i/o Errors
-@cindex i/o errors
-These error messages are prefaced with the name of the
-application. A further explanation as to the
-@cindex @code{strerror}
-reason, obtained from the standard @code{strerror()} utility, is
-appended to the messages below if possible.
-
-@table @code
-@item @var{application-name}: can't read @var{filename}
-@cindex file names
-@cindex @code{can't read}
-@cindex environment
-@cindex @code{AVMINPUTS}
-A file was not able to be opened for reading, typically because it was
-not found or because the user does not have permission. The file name is
-displayed with special characters expanded but without any default
-extensions or search paths that may have been tried. If you think a file
-exists and should have been found, there may be a problem with your
-@env{AVMINPUTS} environment variable (@ref{Environment}).
-@item @var{application-name}: can't write @var{filename}
-@cindex @code{can't write}
-A file was not able to be opened for writing.
-@item @var{application-name}: can't write to @var{filename}
-A file was successfully opened for writing but became impossible to
-write thereafter.
-@item @var{application-name}: can't spawn @var{command}
-@cindex shell
-@cindex expect
-@cindex libexpect
-@cindex @code{can't spawn}
-@cindex @code{exp_popen}
-@cindex spawning processes
-An attempt to execute a shell command on behalf of an interactive
-application failed during the @code{exp_popen()} call to the
-@code{libexpect} library.
-@item @var{application-name}: can't close @var{filename}
-@cindex @code{can't close}
-A call to the standard C procedure @code{fclose()} failed due to
-unforeseen circumstances. The error is non-fatal but the file should be
-checked for missing data.
-@end table
-
-@node Overflow Errors, File Format Errors, i/o Errors, Diagnostics
-@subsection Overflow Errors
-These errors are reported by the application name prefacing one of the
-following messages, except as noted below.
-@cindex overflow
-@cindex counter overflow
-@cindex memory overflow
-
-@table @code
-@item @var{application-name}: counter overflow (code @var{nn})
-An overflow occurred in an unsigned long integer being used as a reference
-counter or something similar. This situation is very unlikely.
-@item @var{application-name}: memory overflow (code @var{nn})
-There wasn't enough memory to build an internal data structure. The
-most likely cause is an attempt to operate on input
-files that are too large. Standard remedies apply.
-@end table
-
-The memory overflow or counter overflow messages can also be reported
-without the application name preface or a code number. In these cases,
-they arise in the course of evaluating the function given by the
-application, rather than by loading the input files.
-
-A counter overflow in this case is possible if the application
-attempts to compute the size of a very large, shared structure using
-native integer arithmetic.
-
-@cindex @command{ulimit}
-Memory overflows are possible due to insufficient memory for a valid
-purpose, but may also occur due to a non-terminating recursion in the
-virtual machine code. To prevent thrashing or other bad effects from
-runaway code, the @command{ulimit} shell command is your friend.
-
-@node File Format Errors, Application Programming Errors, Overflow Errors, Diagnostics
-@subsection File Format Errors
-Certain application crashes result from an application not adhering
-to the required conventions about data and file formats, or because the
-application was invoked in the wrong mode (@ref{Modes of Operation}). These
-are the following.
-
-@table @code
-@item @var{application-name}: invalid text format (code @var{nn})
-@cindex @code{invalid text format}
-An application that was expected to return a string of characters to
-be written to a text file returned data that did not correspond to any
-valid character representation.
-@item @var{application-name}: null character in prompt
-An interactive application (invoked rightly or wrongly with @option{-i},
-@option{-t}, or @option{-s}) is required to exchange strings of non-null
-characters internally with @code{avram}, and used a null.
-@item @var{application-name}: invalid file name (code @var{nn})
-The data structure representing a file obtained from an application
-has a name consisting of something other than character strings. This
-error could be the result of a filter mode application (@ref{Filter
-Mode}) being invoked in parameter mode.
-@ifinfo
-@*
-@end ifinfo
-(@ref{Parameter Mode})
-@item @var{application-name}: null character in file name
-@cindex @code{null character in file name}
-Similar to the above errors.
-@item @var{application-name}: bad character in file name
-@cindex @code{bad character in file name}
-Slashes, backslashes, and unprintable characters other than spaces are
-also prohibited in file names.
-@item @var{application-name}: invalid output preamble format
-@cindex @code{invalid output preamble format}
-According the format used by @code{avram} for data files, a data file
-may contain an optional text portion, known as the preamble. This
-error occurs when a data file obtained from an application can not be
-written because the preamble is something other than a list of
-character strings.
-@item @var{application-name}: invalid file specification
-@cindex @code{invalid file specification}
-This error occurs in situations where the data structure for a file
-obtained by evaluating the application is too broken to permit any
-more specific diagnosis.
-@item avram: invalid raw file format in @var{application-name}
-@cindex @code{invalid raw file format}
-The file containing the virtual machine code was not able to be
-loaded, because the code was not in a recognizable format. Either the
-file has become corrupted, the compiler that generated it has a
-bug in it, or the wrong file was used as a virtual code file.
-@end table
-
-@node Application Programming Errors, Configuration Related Errors, File Format Errors, Diagnostics
-@subsection Application Programming Errors
-A further class of application crashes results from miscellaneous bugs
-in the application. These require the application to be debugged and
-have no user level explanation or workaround, but are listed here for
-reference. These messages are not normally prefaced by the application
-name when reported unless the application elects to do so, except for
-the @code{invalid profile identifier} message.
-
-@itemize @bullet
-@item @code{invalid recursion}
-@cindex @code{invalid recursion}
-@item @code{invalid comparison}
-@cindex @code{invalid comparison}
-@item @code{invalid deconstruction}
-@cindex @code{invalid deconstruction}
-@item @code{invalid transpose}
-@cindex @code{invalid transpose}
-@item @code{invalid membership}
-@cindex @code{invalid membership}
-@item @code{invalid distribution}
-@cindex @code{invalid distribution}
-@item @code{invalid concatenation}
-@cindex @code{invalid concatenation}
-@item @code{invalid assignment}
-@cindex @code{invalid assignment}
-@item @code{unrecognized combinator (code @var{nn})}
-@cindex @code{unrecognized combinator}
-@item @code{@var{application-name}: invalid profile identifier}
-@cindex @code{invalid profile identifier}
-@item @code{unsupported hook}
-@cindex @code{unsupported hook}
-@end itemize
-
-@node Configuration Related Errors, Other Diagnostics and Warnings, Application Programming Errors, Diagnostics
-@subsection Configuration Related Errors
-
-The source code distribution of @code{avram} incorporates a flexible
-configuration script allowing it to be installed on a variety of
-platforms. Not all platforms allow support for all features. It is also
-anticipated that new features may be added to @code{avram} from time to
-time. Some problems may therefore occur due to features not being
-supported at your site for either of these reasons. The following error
-messages are relevant to these situations.
-
-@table @code
-@item unsupported hook
-@cindex @code{unsupported hook}
-If it's not simply due to an application programming error
-(@ref{Application Programming Errors}) this message may be the result of
-trying to use an application that requires a newer version of
-@code{avram} than the one installed, even though applications should
-avoid this problem by checking the version number at run time. If this
-is the reason, the solution would be to install the latest version.
-@item @var{application-name}: I need avram linked with @var{foo}, @var{bar} and @var{baz}.
-@cindex @code{I need avram linked with}
-A message of the this form indicates that a new installation may be
-needed. At this writing (11/11/1), @code{avram} may report this message
-with respect to @code{libexpect5.32}, @code{tcl8.3}, and @code{libutil}
-if any of the @option{-i}, @option{-t}, or @option{-s} options is used on a
-system where not all of these libraries were detected when @code{avram}
-was installed from a source distribution. (See @ref{Parameter Mode Options}.)
-Because @code{avram} is useful even without interactive applications,
-these libraries are not considered absolute prerequisites by the
-configuration script.
-@item avram: can't emulate version @var{version}
-@cindex @code{can't emulate version}
-@cindex @code{emulation} command line option
-@cindex versions
-@cindex backward compatibility
-The @option{--emulation=@var{version}} option obviously won't work if
-the requested version is newer than the installed version, or if it is
-not a valid version number (@ref{General Options}). When that happens,
-this message is printed instead and @code{avram} terminates.
-@item avram: multiple version specifications
-@cindex @code{multiple version specifications}
-The @option{--emulation=@var{version}} option can be used at most once
-on a command line. This message is printed if it is used more than
-once. If you only typed it once and got this message, check your aliases
-and wrapper scripts before reporting a bug.
-@item avram: unrecognized option: @var{option-name}
-@cindex @code{unrecognized option}
-may mean that a command line option has been misspelled, or may be another
-sign of an obsolete version of @code{avram}. This message will be followed
-by a usage summary similar to that of the @option{--help} option.
-(@ref{General Options}).
-@item @var{application-name}: warning: search paths not supported
-@cindex search paths
-@cindex paths
-@cindex environment
-@cindex @code{AVMINPUTS}
-@cindex @code{search paths not supported}
-@cindex @file{argz.h}
-If the @file{argz.h} header file was not detected during configuration,
-@code{avram} will not be able to support search paths in the
-@env{AVMINPUTS} environment variable (@ref{Environment}). This message
-is a warning that the environment variable is being ignored. If the
-warning is followed by an i/o error
-@ifinfo
-@*
-@end ifinfo
-(@ref{i/o Errors}), the latter may be due to a file being in a path that
-was not searched for this reason. A workaround is to specify the full
-path names of all input files outside the current working directory. If
-you don't need search paths, you can get rid of this message by
-undefining @env{AVMINPUTS}.
-@end table
-
-@node Other Diagnostics and Warnings,  , Configuration Related Errors, Diagnostics
-@subsection Other Diagnostics and Warnings
-
-@table @asis
-@item @code{avram: multiple -.EXT options; all but last ignored}
-@cindex @code{multiple -.EXT options}
-@cindex extensions
-@cindex file extensions
-@cindex extensions
-@cindex file name extensions
-@cindex file name suffixes
-This message is written when more than one default extension is given as
-a command line parameter.  At most one default extension is allowed. If
-more than one is given, only the last one is used. The error is
-non-fatal and @code{avram} will try to continue. If you need more
-than one default extension, consider using the hard coded default
-extensions of @file{.fun} and @file{.avm}, or hacking the shell script
-in which the @code{avram} command line appears.
-@item @code{@var{application name}: empty operator}
-This message probably means that the virtual code file is corrupt or
-invalid.
-@item usage summary
-@cindex @code{help} command line option
-For any errors in usage not covered by other diagnostics, such as
-incompatible combinations of options, @code{avram} prints a message to
-standard error giving a brief summary of options, similar to the output
-from @kbd{avram --help}. (See @ref{General Options}.)
-@end table
-
-@node Security, Example Script, Diagnostics, User Manual
-@section Security
-
-@cindex security
-A few obvious security considerations are relevant to running untrusted
-virtual code applications. These points are only as reliable as the
-assumption that the @code{avram} executable has not been modified to the
-contrary.
-
-@itemize @bullet
-@cindex filter mode
-@item The applications with the best protection from malicious code are
-those that run in filter mode, because they have no access to any
-information not presented to them in standard input, nor the ability to
-affect anything other than the contents of standard output (provided that
-the @code{--jail} command line option is used). The worst
-they can do is use up a lot of memory, which can be prevented with the
-@command{ulimit} command. Unfortunately, not all applications are usable
-in this mode.
-@item Parameter mode applications that do not involve the @option{-i},
-@cindex parameter mode
-@cindex standard input
-@option{-t} or @option{-s} options are almost as safe (also assuming
-@code{--jail}). They have (read-only) access to environment variables, and to the files that are
-indicated explicitly on the command line. If standard input is one of
-the files (as indicated by the use of @code{-} as a parameter), the
-virtual code application may infer the current date and time.  However,
-a parameter mode application may write any file that the user has
-permission to write. The @option{--ask-to-overwrite} option should be
-used for better security, or at least the @option{--quiet} option should
-not be used.  The virtual code can neither override nor detect the use
-of these options.
-@item Interactive parameter mode applications (those that use either the
-@cindex interactive applications
-@option{-i}, @option{-t} or @option{-s} options) are the least secure
-because they can execute arbitrary shell commands on behalf of the
-user. This statement also applies to filter mode and parameter mode
-applications where the @option{--jail} option is not used.  Use of
-@option{--step} is preferable to @option{-i} for making an audit
-trail of all commands executed, but the application could probably
-subvert it. The @option{--step} option may be slightly better because
-it can allow the user to inspect each command and interrupt it if
-appropriate. However, in most cases a command will not be displayed
-until it is already executed. Commands executed by non-interactive
-applications normally will display no output to that effect. A
-@command{chroot} environment may be the only secure way of running
-untrusted interactive applications.
-@end itemize
-
-
-@node Example Script, Files, Security, User Manual
-@section Example Script
-@cindex script
-@cindex shell script
-It is recommended that the application developer (or the compiler)
-package virtual machine code applications as shell scripts with the
-@code{avram} command line embedded in them. This style relieves the user
-of the need to remember the appropriate virtual machine options for
-invoking the application, which are always the same for a given
-application, or even to be aware of the virtual machine at all.
-
-@cindex @code{cat}
-@cindex @code{default-to-stdin} command line option
-Here is a script that performs a similar operation to the standard
-@cindex Unix
-Unix @command{cat} utility.
-
-@example
-#!/bin/sh
-#\
-exec avram --force-text-input --default-to-stdin "$0" "$@@"
-sKYQNTP\
-@end example
-
-@noindent
-That is, it copies the contents of a file whose
-name is given on the command line to standard output, or copies
-standard input to standard output if no file name is given. This
-script can be marked executable
-@cindex executable files
-(with @command{chmod}) and run by any user
-@cindex @code{chmod}
-@cindex paths
-with the directory of the @code{avram} executable in his or her
-@code{PATH} environment variable, even if @code{avram} had to be
-installed in a non-standard directory such as
-@cindex non-standard installation
-@file{~/bin}.
-
-The idea for this script is blatantly lifted from the @command{wish}
-@cindex @code{wish}
-manpage. The first line of the script invokes a shell to process
-what follows. The shell treats the second line as a comment and
-ignores it.  Based on the third line, the shell invokes @code{avram}
-with the indicated options, the script itself as the next argument, and
-whatever command line parameters were initially supplied by the user
-as the remaining arguments. The rest of the script after
-that line is never processed by the shell.
-
-When @code{avram} attempts to load the shell script as a virtual
-machine code file, which happens as a result of it being executed by
-the shell, it treats the first line as a comment and ignores it. It
-also treats the second line as a comment, but takes heed of the
-trailing backslash, which is interpreted as a comment continuation
-character. It therefore also treats the third line as a comment and
-ignores it. Starting with the fourth line, it reads the virtual code,
-which is in a binary data format encoded with printable characters,
-and evaluates it.
-
-@node Files, Environment, Example Script, User Manual
-@section Files
-
-@table @code
-@item ./profile.txt
-@cindex @file{profile.txt}
-This file is written automatically by @code{avram} on behalf of
-applications that include profile annotations. It lists the number of
-invocations for each annotated part of the application, the total
-amount of time spent on it (in relative units), the average amount of
-time for each invocation, and the percentage of time relative to the
-remainder of the application. The exact format is undocumented and
-subject to change.
-@end table
-
-@node Environment, Bugs, Files, User Manual
-@section Environment
-
-@cindex environment
-@cindex @code{AVMINPUTS}
-@cindex paths
-An environment variable @env{AVMINPUTS} can be made to store a list of
-directories (using the @command{set} or @command{export} commands) that
-@code{avram} will search for input files. The directories should be
-separated by colons, similarly to the @env{PATH} environment variable.
-
-@cindex search paths
-The search paths in @env{AVMINPUTS} apply only to the names of input
-files given on the command line (@ref{Command Line Syntax}) when
-@code{avram} is invoked in parameter mode (@ref{Parameter Mode}).  They
-do not apply to the name of the virtual code file, which is always
-assumed to be either absolute or relative to the current working
-directory (this assumption being preferable in the case of a script like
-that of @ref{Example Script}).
-@cindex shell script
-
-Starting in the first directory in the list of @env{AVMINPUTS},
-@code{avram} searches for a file exactly as its name appears on
-the command line (subject to the expansion of special characters
-by the shell). If it is not found and the name does not contain a
-period, but a command line option of @option{-.EXT} has been used,
-@code{avram} will then search for a file with that name combined with
-the extension @code{.EXT}. If @option{-.EXT} has not been used or if no
-@cindex @code{EXT} command line option
-matching file is found with it, @code{avram} tries the extensions of
-@kbd{.avm} and @kbd{.fun} in that order, provided the given file name
-contained no periods. If no match is found for any of those cases,
-@code{avram} proceeds to search the next directory in the list obtained
-from @env{AVMINPUTS}, and so on. It stops searching when the first
-match is found. For subsequent input files, the search begins again at
-the first directory.
-
-If @env{AVMINPUTS} is defined, the current working directory is not
-searched for input files unless it is listed. If it is empty or not
-@cindex search paths
-defined, a default list of search paths is used, currently
-
-@example
-.:/usr/local/lib/avm:/usr/lib/avm:/lib/avm:/opt/avm:/opt/lib/avm\
-:/usr/local/share/avm:/usr/share/avm:/share/avm:/opt/avm:/opt/share/avm
-@end example
-
-@noindent
-These paths are defined in @code{avram.c} and can be changed
-by recompiling it.
-
-@node Bugs,  , Environment, User Manual
-@section Bugs
-@cindex internal errors
-@cindex bugs
-@cindex exceptions
-
-There are no known bugs outstanding, except for any that may be
-inherent in the external library functions. However, @code{avram} has
-been used most extensively on GNU/Linux systems, and the prospect
-of portability issues with new or lesser used features on other
-systems can't be excluded.
-
-Though not observed in practice, it's theoretically possible to blow
-the stack by passing enough functions as arguments to library
-functions that pass more functions to library functions (e.g., by
-using nested calls to the gsl integration functions meant for a single
-variable to evaluate a very high dimensional multiple integral). In
-all other cases only dynamic heap storage or a constant amount of
-stack space is used.  In particular, this issue is @emph{not} relevant
-to virtual code applications that don't use external libraries, or
-that don't pass functions to them as arguments.
-
-@code{avram} is designed to recover gracefully from memory overflows
-by always checking for @code{NULL} results from @code{malloc()} or
-otherwise trapping functions that allocate memory. In the event of an
-overflow, it conveys an appropriate error message to the virtual code
-application to be handled by the usual exception handling
-mechanisms. However, there is currently no way for a virtual code
-application to detect in advance whether sufficient memory is
-available, nor for it to resume normal operation once an exception
-occurs. Furthermore, it has been observed on some systems including
-Irix and 2.4 series Linux kernels that the @code{avram} process is
-killed automatically for attempting to allocate too much memory rather
-than given the chance to recover.
-
-Please send bug reports to @email{avram-support@@basis.uklinux.net}.
-
-@node Virtual Machine Specification, Library Reference, User Manual, Top
-@chapter Virtual Machine Specification
-
-This chapter contains a description of the virtual machine implemented
-by @code{avram}, from the point of view of a person wishing to write a
-compiler that generates code for it. Before reading this chapter,
-readers should at least skim @ref{User Manual} in order to see the big
-picture. Topics covered in this chapter include data representations,
-virtual code semantics, and file formats. A toy programming language is
-introduced for illustrative purposes. The sections in this chapter might
-not make sense if read out of order the first time through.
-@ifinfo
-The last section, @ref{Virtual Code Semantics}, contains many equations
-that may be difficult to read in the info or html renderings. The
-printed version is recommended for anyone who really wants to comprehend
-this material.
-@end ifinfo
-
-@menu
-* Raw Material::                
-* Concrete Syntax::             
-* File Format::                 
-* Representation of Numeric and Textual Data::  
-* Filter Mode Interface::       
-* Parameter Mode Interface::    
-* Virtual Code Semantics::      
-@end menu
-
-@node Raw Material, Concrete Syntax, Virtual Machine Specification, Virtual Machine Specification
-@section Raw Material
-
-The purpose of this section is to instill some basic concepts about the
-way information is stored or communicated by the virtual machine, which
-may be necessary for an understanding of subsequent sections.
-
-The virtual machine represents both programs and data as members of a
-semantic domain that is straightforward to describe. Lisp users and
-functional programmers may recognize familiar concepts of atoms and
-@cindex lists
-lists in this description. However, these terms are avoided for the
-moment, in order to keep this presentation self contained and to prevent
-knowledgeable readers from inferring any unintended meanings.
-
-As a rule, it is preferable to avoid overspecifying any theoretical
-artifact.  In this spirit, the set of entities with which the virtual
-machine is concerned can be defined purely in terms of the properties we
-need it to have.
-
-@table @emph
-@item A distinguished element
-A particular element of the set is designated, arbitrarily or otherwise,
-as a distinguished element. Given any element of the set, it is
-always possible to decide whether or not it is the distinguished
-element. The set is non-empty and such an element exists.
-@item A binary operator
-A map from pairs of elements of the set to elements of the set exists
-and meets these conditions.
-
-@itemize @bullet
-@item It associates a @emph{unique} element of the set with any given
-ordered pair of elements from the set.
-@item It does not associate the distinguished element with any pair of elements.
-@end itemize
-@end table
-
-For the sake of concreteness, an additional constraint is needed:
-@emph{the set has no proper subset satisfying the above conditions}. Any
-number of constructions remain within these criteria, but there is no
-need to restrict them further, because they are all equivalent for our
-purposes.
-
-To see that these properties provide all the structure we need for
-general purpose computation, we may suppose some given set @code{S} and
-an operator @code{cons} having them are fixed, and infer the following
-points.
-
-@itemize @bullet
-@item @code{S} contains at least one element, the distinguished
-element. Call it @code{nil}.
-@cindex @code{nil}
-@item The pair @code{(nil,nil)} is a pair of
-elements of @code{S}, so there must be an element of @code{S} that
-@code{cons} associates with it. We can denote this element
-@code{cons(nil,nil)}.
-@cindex @code{cons}
-@item As no pair of elements is associated with the
-distinguished element, @code{cons(nil,nil)} must differ from @code{nil}, so
-@code{S} contains at least two distinct elements.
-@item The pair @code{(nil,cons(nil,nil))} therefore differs from @code{(nil,nil)},
-but because it is yet another pair of elements from @code{S}, there
-must be an element associated with it by the operator. We can denote
-this element as @code{cons(nil,cons(nil,nil))}.
-@item Inasmuch as the operator
-associates every pair of elements with a @emph{unique} element,
-@code{cons(nil,cons(nil,nil))} must differ from the element associated
-with any other pair of elements, so it must differ from
-@code{cons(nil,nil)}, and we conclude that @code{nil},
-@code{cons(nil,nil)} and @code{cons(nil,cons(nil,nil))} constitute three
-distinct elements of the set @code{S}.
-@item By defining @code{cons(cons(nil,nil),nil)}
-and @code{cons(cons(nil,nil),cons(nil,nil))} analogously and following a
-similar line of reasoning, one may establish the existence of two more
-distinct elements of @code{S}.
-@end itemize
-
-It is not difficult to see that an argument in more general terms could
-show that the inclusion of infinitely many elements in @code{S} is
-mandated by the properties of the @code{cons} operator. Furthermore,
-every element of @code{S} other than @code{nil} owes its inclusion to
-being associated with some other pair of elements by @code{cons},
-because if it were not, its exclusion would permit a proper subset of
-@code{S} to meet all of the above conditions. We can conclude that
-@code{S} contains exactly @code{nil} and the countable infinitude of
-elements of the form @code{cons(x,y)}, where @code{x} and @code{y} are
-either @code{nil} or something of the form @code{cons(@dots{})} themselves.
-
-Some specific examples of sets and operators that have the required
-properties are as follows.
-
-@itemize @bullet
-@item the set of natural numbers, with @code{0} as the distinguished element,
-and the @code{cons} operator defined by @code{cons(@var{x},@var{y}) =
-((@var{x}+@var{y})(@var{x}+@var{y}+1))/2 + @var{y} + 1}
-@item a set of balanced strings of parentheses, with @code{()} as the
-distinguished element, and @code{cons} defined as string concatenation
-followed by enclosure in parentheses
-@item a set of ordered binary trees, with the empty tree as the distinguished
-element, and the @code{cons} operator as that which takes an ordered
-pair of trees to the tree having them as its descendents
-@item a set containing only its own Cartesian product and an arbitrary
-but fixed element @code{nil}, with @code{cons} being the identity
-function
-@end itemize
-
-Each of these models may suggest a different implementation, some of which
-are more practical than others. The remainder of this document is
-phrased somewhat imprecisely in terms of a combination of the latter
-two. The nature of the set in question is not considered further, and
-elements of the set are described as ``trees'' or ``lists''. The
-@cindex trees
-@cindex lists
-distinguished element is denoted by @code{nil} and the operator by
-@code{cons}. Where no ambiguity results, @code{cons(x,y)} may be written
-simply as @code{(x,y)}.  These terms should not be seen as constraints
-on the implementation.
-
-@node Concrete Syntax, File Format, Raw Material, Virtual Machine Specification
-@section Concrete Syntax
-
-The previous section has developed a basic vocabulary for statements
-such as ``the virtual machine code for the identity function is
-@cindex identity function
-@code{(nil,(nil,nil))}'', which are elaborated extensively in the
-subsequent sections on code and data formats. However, a description in
-this style would be inadequate without an explanation of how such an
-entity as @code{(nil,(nil,nil))} is communicated to @code{avram} in a
-virtual machine code file. The purpose of this section is to fill the
-gap by explaining exactly how any given tree would be transformed to its
-concrete representation.
-
-The syntax is based on a conversion of the trees to bit strings,
-@cindex bit strings
-followed by grouping the bits into blocks of six, which are then encoded
-by printable characters. Although anyone is free to modify @code{avram},
-it is recommended that the concrete syntax described here be maintained
-for the sake of portability of virtual machine code applications.
-
-Building a tree by reading the data from a file requires a more
-difficult algorithm than the one presented in this section, and is not
-considered because it's not strictly necessary for a
-compiler. Procedures for both reading and writing are available to C and
-C++ users as part of the @code{avram} library, and are also easily
-invoked on the virtual code level.
-
-@menu
-* Bit String Encoding::         
-* Blocking::                    
-@end menu
-
-@node Bit String Encoding, Blocking, Concrete Syntax, Concrete Syntax
-@subsection Bit String Encoding
-
-The conversion from trees to bit strings might have been done in several
-@cindex trees
-ways, perhaps the most obvious being based on a preorder traversal with
-each vertex printed as it is traversed.  By this method, the entire
-encoding of the left descendent would precede that of the right in the
-bit string. This alternative is therefore rejected because it imposes
-unnecessary serialization on communication.
-
-It is preferable for the encodings of both descendents of a tree to be
-interleaved to allow concurrent transmission. Although there is
-presently no distributed implementation of the virtual machine and hence
-@cindex distributed implementation
-none that takes advantage of this possibility, it is better to plan
-ahead than to be faced with backward compatibility problems later.
-
-The preferred algorithm for encoding a tree as a bit string employs a
-queue. The queue contains trees and allows them to be processed in a
-@cindex queues
-first-in first-out order. Intuitively, the algorithm works by traversing
-@cindex printing algorithm
-the tree in level order. To print a tree @code{T} as a string of
-@code{1}s and @code{0}s, it performs the following steps.
-@display
-
-Initialize the queue to contain only @code{T}
-while the queue is not empty do
-   if the front element of the queue is @code{nil} then
-      print @code{0}
-   else if the front element of the queue is of the form @code{cons(x,y)} then
-      print @code{1}
-      append @code{x} to the back of the queue
-      append @code{y} to the back of the queue
-   end if
-   remove the front element of the queue
-end while
-
-@end display
-
-This algorithm presupposes that any given tree
-@cindex deconstruction
-@code{cons(x,y)} can be ``deconstructed'' to obtain @code{x} and
-@code{y}. The computability of such an operation is assured in theory by
-the uniqueness property of the @code{cons} operator, regardless of the
-representation chosen. If the trees are implemented with pointers in the
-obvious way, their deconstruction is a trivial constant time operation.
-
-As an example, running the following tree through the above algorithm
-results in the bit string @code{111111101011110010001001100010100010100100100}.
-
-@example
-
-cons(
-   cons(
-      cons(nil,cons(nil,cons(nil,nil))),
-      cons(nil,cons(nil,nil))),
-   cons(
-      cons(
-         cons(nil,cons(nil,cons(nil,cons(nil,nil)))),
-         cons(nil,nil)),
-      cons(
-         cons(
-            cons(nil,cons(nil,cons(cons(nil,cons(nil,nil)),nil))),
-            cons(nil,nil)),
-         nil)))
-@end example
-
-@node Blocking,  , Bit String Encoding, Concrete Syntax
-@subsection Blocking
-
-After the bit string is obtained as described above, it is grouped into
-blocks of six. Continuing with the example, the string
-
-@example
-111111101011110010001001100010100010100100100
-@end example
-
-@noindent
-would be grouped as
-
-@example
-111111 101011 110010 001001 100010 100010 100100 100
-@end example
-
-@noindent
-Because the number of bits isn't a multiple of six, the last group has to
-be padded with zeros, to give
-
-@example
-111111 101011 110010 001001 100010 100010 100100 100000
-@end example
-
-@noindent
-Each of these six bit substrings is then treated as a binary number,
-with the most significant bit on the left. The numbers expressed in
-decimal are
-
-@example
-63 43 50 9 34 34 36 32
-@end example
-
-@noindent
-@cindex character codes
-The character codes for the characters to be written are obtained by
-adding sixty to each of these numbers, so as to ensure that they will be
-printable characters. The resulting character codes are
-
-@example
-123 103 110 69 94 94 96 92
-@end example
-
-@noindent
-which implies that the tree in the example could be written to a file as
-@code{@{gnE^^`\}.
-
-@node File Format, Representation of Numeric and Textual Data, Concrete Syntax, Virtual Machine Specification
-@section File Format
-
-@cindex file format
-A virtual code file consists of an optional text preamble, followed by
-the concrete representation for a tree. The latter uses the
-syntax described in the previous section. The purpose of this section is
-to specify the remaining details of the file format.
-
-The format for virtual code files may also be used for other purposes
-by virtual code applications, as it is automatically detected and parsed
-by @code{avram} when used in an input file, and can be automatically
-written to output files at the discretion of the application.
-
-Other than virtual code files, input files not conforming to this format
-are not an error as far as @code{avram} is concerned, because they are
-@cindex text files
-assumed to be text files. Applications can detect in virtual code
-the assumption that is made and report an error if appropriate.
-
-Although the data file format includes no checksums or other explicit
-@cindex checksums
-methods of error detection, the concrete syntax itself provides a
-good measure of protection against undetected errors. The probability is
-vanishingly small that a random alteration to any valid encoding leaves
-it intact, because every bit in the sequence either mandates or
-prohibits the occurrence of two more bits somewhere after it. Errors in
-different parts of the file would have to be consistent with one another
-to go unnoticed.
-
-@menu
-* Preamble Section::            
-* Data Section::                
-@end menu
-
-@node Preamble Section, Data Section, File Format, File Format
-@subsection Preamble Section
-
-@cindex preamble
-@itemize @bullet
-@item A file may contain at most one preamble.
-@item The preamble, if any, is a consecutive sequence of lines beginning
-with the first line in the file.
-@item The first line of the preamble must begin with a hash (@code{#})
-character.
-@item Subsequent lines of the preamble must either begin with a hash, or
-immediately follow a line that ends with a backslash (@code{\})
-character (or both).
-@end itemize
-
-@node Data Section,  , Preamble Section, File Format
-@subsection Data Section
-
-@itemize @bullet
-@item The data or virtual code section of the file begins on the first
-line of the file that isn't part of the preamble.
-@item The data section may not contain any hashes, white space, or other
-extraneous characters other than line breaks.
-@item If line breaks are ignored, the data section contains a sequence
-of characters expressing a single tree in the concrete syntax described
-in @ref{Concrete Syntax}.
-@end itemize
-
-@node Representation of Numeric and Textual Data, Filter Mode Interface, File Format, Virtual Machine Specification
-@section Representation of Numeric and Textual Data
-
-As noted already, virtual code applications are specified by functions
-operating on elements of a set having the properties described in
-@ref{Raw Material}, which are convenient to envision as ordered binary trees or
-@cindex trees
-@cindex @code{nil}
-pairs of @code{nil}. However, virtual code applications normally deal
-with numeric or textual data, for example when they refer to the
-contents of a text file. It is therefore necessary for the application
-and the virtual machine emulator to agree on a way of describing textual
-or numeric data with these trees.
-
-The purpose of this section is to explain the basic data structures used
-in the exchange of information between @code{avram} and a virtual code
-application.  For example, an explanation is needed for statements like
-``an application invoked with the @option{--baz} option is expected to
-return a pair @code{(@var{foo},@var{bar})}, where @code{@var{foo}} is a
-@cindex strings
-@cindex character strings
-@cindex lists
-list of character strings @dots{}'', that are made subsequently in this
-document. Such statements should be understood as referring to the trees
-representing the pairs, lists, character strings, etc., according to the
-conventions explained below.
-
-@table @emph
-@item Characters
-@cindex character codes
-An arbitrarily chosen set of 256 trees is used to represent the
-character set. They are listed in @ref{Character Table}. For example,
-the letter @code{A} is represented by
-@code{(nil,(((nil,(nil,(nil,nil))),nil),(nil,nil)))}.  That means that
-when an application wants the letter @code{A} written to a text file, it
-returns something with this tree in it.
-@item Booleans
-@cindex booleans
-The value of @code{false} is represented by @code{nil}, and the value of
-@code{true} is represented by @code{(nil,nil)}.
-@item Pairs
-@cindex pairs
-Given any two items of data @var{x1} and @var{x2}, having the respective
-representations @var{r1} and @var{r2}, the pair @code{(@var{x1},@var{x2})} has the
-representation @code{cons(@var{r1},@var{r2})}.
-@item Lists
-@cindex lists
-A list of the items @var{x1}, @var{x2} @dots{} @var{xn} with respective
-representations @var{r1} through @var{rn} is represented by the tree
-@code{cons(@var{r1},cons(@var{r2}@dots{}cons(@var{rn},nil)@dots{}))}. In other words,
-lists are represented as pairs whose left sides are the heads and whose
-right sides are the tails. The empty list is identified with
-@code{nil}. Lists of arbitrary finite length can be accommodated.
-@item Naturals
-@cindex naturals
-A number of the form @code{@var{b0} + 2@var{b1} + 4@var{b2} + @dots{} +
-2^n @var{bn}}, where each @code{@var{b}i} is @code{0} or @code{1}, is
-represented by a tree of the form
-@code{cons(@var{t0},cons(@var{t1}@dots{}cons(@var{tn},nil)@dots{}))}
-where each @code{@var{t}i} is @code{nil} if the corresponding
-@code{@var{b}i} is @code{0}, and @code{(nil,nil)} otherwise. Note that
-the numbers @code{@var{b}i} are exactly the bits written in the binary
-expansion of the number, with @code{@var{b0}} being the least significant
-bit.
-@item Strings
-@cindex strings
-@cindex character strings
-are represented as lists of characters.
-@end table
-
-@cindex types
-@code{avram} imposes no more of a ``type discipline'' than necessary to
-a workable interface between it and an application.  This selection of
-types and constructors should not be seen as constraining what a
-compiler writer may wish to have in a source language.
-
-
-@node Filter Mode Interface, Parameter Mode Interface, Representation of Numeric and Textual Data, Virtual Machine Specification
-@section Filter Mode Interface
-
-@cindex filter mode
-@cindex parameter mode
-@cindex modes
-From the point of view of the application developer or compiler writer,
-there are parameter mode applications, which are discussed in
-@ref{Parameter Mode Interface}, and filter mode applications,
-which are discussed in this section. Of the latter, there are mainly
-three kinds: those that read one character at a time, those that read a
-line at a time, and those that read the whole standard input file at
-@cindex standard input
-once. Each of them is invoked with different options and expected to
-follow different calling conventions. This section summarizes these
-conventions.
-
-@menu
-* Loading All of Standard Input at Once::  
-* Line Maps::                   
-* Byte Transducers::            
-@end menu
-
-@node Loading All of Standard Input at Once, Line Maps, Filter Mode Interface, Filter Mode Interface
-@subsection Loading All of Standard Input at Once
-
-Unless @option{--line-map} or @option{--byte-transducer} is used as a
-@cindex @code{line-map} command line option
-@cindex @code{byte-transducer} command line option
-@cindex standard input
-command line option when the application is invoked, the contents of
-standard input are loaded entirely into memory by @code{avram} before
-evaluation of the virtual code begins.  This interface is obviously not
-@cindex infinite streams
-appropriate for infinite streams.
-
-The virtual code application in this mode of operation is treated as a
-single function taking the entire contents of standard input as its argument,
-and returning the entire contents of standard output as its result.
-Hence, this interface is one of the simplest available.
-
-@menu
-* Standard Input Representation::  
-* Standard Output Representation::  
-@end menu
-
-@node Standard Input Representation, Standard Output Representation, Loading All of Standard Input at Once, Loading All of Standard Input at Once
-@subsubsection Standard Input Representation
-
-@cindex standard input
-The representation for the standard input file used as the argument to
-the function depends both on the file format and on the command line
-options specified when the application is invoked. The
-@cindex @code{unparameterized} command line option
-@cindex @code{raw-mode} command line option
-@option{--unparameterized} and @option{--raw-output} options make no
-difference to the input representation, and the @option{--line-map}
-and @option{--byte-transducer} options are not relevant to this mode of
-operation. That leaves four possible combined settings of the
-@cindex @code{choice-of-output} command line option
-@cindex @code{force-text-input} command line option
-@option{--choice-of-output} and @option{--force-text-input} options.  If
-standard input conforms to the data file format specification @ref{File Format},
-the following effects are possible.
-
-@itemize @bullet
-@item If neither @option{--choice-of-output} nor
-@option{--force-text-input} is used, the argument to the function will
-be given directly by the tree encoded in the data section of the
-file. The preamble of the file will be ignored.
-@item If the @option{--choice-of-output} option is used
-and the @option{--force-text-input} option is not used, the argument to
-the function will be a pair @code{(@var{preamble},@var{contents})},
-where @var{preamble} is a list of character strings taken from the
-preamble of the file (with leading hashes stripped), and @var{contents}
-is the tree represented in the data section of the file.
-@item If the @option{--choice-of-output} option is not used
-and the @option{--force-text-input} option is used, the argument to the
-function will be the whole file as a list of character strings.  I.e.,
-both the preamble and the data sections are included, hashes are not
-stripped from the preamble, and the data section is not converted to the
-tree it represents.
-@item If the @option{--choice-of-output} option is used
-and the @option{--force-text-input} option is also used, the argument to the
-the function will be a pair @code{(nil,@var{contents})}, where the
-contents are the list of character strings as in the previous case.
-@end itemize
-
-@cindex file format
-If standard input does not conform to the data file format specification
-in @ref{File Format}, then it is assumed to be a text file. The
-@option{--force-text-input} option makes no difference, and there are
-only two possible effects, depending on whether
-@option{--choice-of-output} is used. They correspond to the latter two
-cases above, where @option{--force-text-input} is used.
-
-@cindex preamble
-@cindex text files
-The idea of the @option{--choice-of-output} option is that it is used
-only for applications that are smart enough to be aware of the
-@code{(@var{preamble},@var{contents})} convention. A non-empty preamble
-implies a data file whose contents could be any type, but an empty
-preamble implies a text file whose contents can only be a list of
-character strings. (In the case of a data file with no preamble, the
-list of the empty string is used for the preamble to distinguish it from
-a text file.)
-
-Dumb applications that never want to deal with anything but text files
-should be invoked with @option{--force-text-input}. Otherwise, they have
-to be prepared for either text or data as arguments.
-
-The use of both options at once is unproductive as far as the input
-format is concerned, but may be justified when the output is to be a
-data file and the input is text only.
-
-@node Standard Output Representation,  , Standard Input Representation, Loading All of Standard Input at Once
-@subsubsection Standard Output Representation
-
-@cindex standard output
-@cindex @code{raw-output} command line option
-@cindex @code{choice-of-output} command line option
-As in the case of standard input, the representation for standard output
-that the function is expected to return depends on the command line
-options with which the application is invoked. The only relevant options
-are @option{--raw-output} and @option{--choice-of-output}, which are
-mutually exclusive.
-
-@itemize @bullet
-@item If neither option is selected, the result returned by the function must
-be a list of character strings. 
-@item If @option{--raw-output} is used, the result returned by the
-function is unconstrained, and it will be written as a data file with no
-preamble, following the format specified in @ref{File Format}.
-@item If @option{--choice-of-output} is used, the result returned by the
-function must be a pair @code{(@var{preamble},@var{contents})}.
-@end itemize
-
-@cindex preamble
-In the last case, the preamble determines how the file will be written.
-If it is meant to be a text file, the preamble should be @code{nil}, and
-the contents should be a list of character strings. If it is meant to be
-a data file, the preamble should be a non-empty list of character
-strings, and the format of the contents is unconstrained. To express a
-data file with no preamble, the preamble should be the list containing
-the empty string, rather than being empty.
-
-In the result returned by the function, the preamble lines should not
-include leading hash characters, because they are automatically added to
-the output to enforce consistency with the data file format. However,
-they should include trailing backslashes as continuation characters
-where appropriate. The hashes that are automatically added will be
-automatically stripped by @code{avram} on behalf of whatever application
-uses the file.
-
-@cindex character strings
-@cindex printing algorithm
-Any file can be written as a list of character strings, even ``text''
-files that are full of unprintable characters, and even ``text'' files
-that happen to conform to the format used for data files.  However, if
-the application intends to write a data file in the standard format used
-by other virtual code applications, it can do so more quickly and easily
-by having the virtual machine do the formatting automatically with the
-@option{--choice-of-output} option than by implementing the algorithm in
-@ref{Concrete Syntax}, from scratch in virtual code.
-
-@node Line Maps, Byte Transducers, Loading All of Standard Input at Once, Filter Mode Interface
-@subsection Line Maps
-
-@cindex @code{line-map} command line option
-Virtual code applications invoked with the @option{--line-map} option
-(with or without the @option{--unparameterized} option) adhere to a very
-simple interface. 
-
-@itemize @bullet
-@item The argument to the function is a character string, and the result
-must also be a character string.
-@item The function is applied to each line of the standard input file
-@cindex standard input
-and the result in each case is written to standard output followed by a
-@cindex standard output
-line break.
-@end itemize
-
-@cindex infinite streams
-This kind of application may be used on finite or infinite streams,
-provided that the lengths of the lines are finite, but preserves no state
-information from one line to the next.
-
-@node Byte Transducers,  , Line Maps, Filter Mode Interface
-@subsection Byte Transducers
-
-The interface used when the @code{--byte-transducer} option is selected
-@cindex @code{byte-transducer} command line option
-allows an application to serve as a persistent stream processor suitable
-@cindex infinite streams
-for finite or infinite streams. The interface can be summarized by the
-following points.
-
-@itemize @bullet
-@item When it is first invoked, the function in the virtual code file is
-applied to an argument of @code{nil}, and is expected to return a pair
-@code{(@var{state},@var{output})}. The @var{state} format is
-unconstrained. The @var{output} must be a character string that will
-be written to standard output, but it may be the empty string.
-@item For each byte read from standard input, @code{avram} applies the function
-to the pair @code{(@var{state},@var{character})}, using the state
-obtained from previous evaluation, and the character whose code is the
-byte. The purpose of the @var{state} field is therefore to provide a
-way for the application to remember something from one invocation to
-the next.
-@item The function is usually expected to return a pair
-@code{(@var{state},@var{output})} for each input byte, so that the state
-can be used on the next iteration, and the output can be written to standard
-output as a character string.
-@item If the function ever returns a value of @code{nil}, the computation
-terminates.
-@item If standard input comes to an end before the computation terminates,
-the function will be applied to a pair of the form
-@code{(@var{state},nil)} thereafter, but may continue to return
-@code{(@var{state},@var{output})} pairs for arbitrarily many more iterations.
-The @code{EOF} character is not explicitly passed to the function, but
-the end is detectable insofar as @code{nil} is not a representation for
-any character.
-@end itemize
-
-Unlike the situation with line maps, the output character strings
-do not have line breaks automatically appended, and the application must
-include them explicitly if required. The convention for
-@cindex Unix
-line breaks is system dependent. On Unix and GNU/Linux systems, character
-code 10 indicates a line break, but other systems may use character code
-13 followed by character code 10. See @ref{Character Table} for the
-@cindex character codes
-representations of characters having these codes.
-
-@node Parameter Mode Interface, Virtual Code Semantics, Filter Mode Interface, Virtual Machine Specification
-@section Parameter Mode Interface
-
-@cindex parameter mode
-The virtual code file for a parameter mode application contains a tree
-representing a single function, which takes as its argument a data
-structure in the format described below. The format of the result
-returned by the function depends on the virtual machine options used on
-the command line, and the various alternatives are explained
-subsequently.
-
-@menu
-* Input Data Structure::        
-* Input for Mapped Applications::  
-* Output From Non-interactive Applications::  
-* Output From Interactive Applications::  
-@end menu
-
-@node Input Data Structure, Input for Mapped Applications, Parameter Mode Interface, Parameter Mode Interface
-@subsection Input Data Structure
-
-The data structure that is used as the argument to the parameter mode
-application incorporates all the information about the command line and
-@cindex environment
-@cindex command line
-the environment variables. It is in the form of a triple
-@code{((@var{files},@var{options}),@var{environs})}. The fields have
-these interpretations.
-
-@table @var
-@item files
-is a list of quadruples
-@code{((@var{date},@var{path}),(@var{preamble},@var{contents}))}, with
-one quadruple for each input file named on the command line (but not the
-virtual code file or the @code{avram} executable).  The list will be in
-the same order as the filenames on the command line, and is not affected
-by options interspersed with them. The fields in each item have the
-following interpretations.
-
-@table @var
-@item date
-is the time stamp of the file in as a character string in the usual
-@cindex time stamp
-@cindex date
-@cindex system time
-@cindex current time
-@cindex Unix
-Unix format, for example, @code{Fri Jan 19 14:34:44 GMT 2001}. If the
-file corresponds to standard input, the current system time and date are
-used.
-@item path
-is the full path of the file, expressed as a list of strings. If the
-@cindex file names
-@cindex paths
-@cindex absolute path
-@cindex relative path
-file corresponds to standard input, the list is empty. Otherwise, the
-first string in the list is the file name. The next is the name of the
-file's parent directory, if any. The next is the parent of the parent,
-and so on. The root directory is indicated by the empty string, so that
-any path ending with the empty string is an absolute path, while any path
-ending with a non-empty string is relative to the current working
-directory.  Path separators (i.e., slashes) are omitted.
-@item preamble
-In the case of a text file, or any file not conforming to the format in
-@cindex preamble
-@ref{File Format}, this field is @code{nil}. Otherwise, this field contains
-the preamble of the file expressed as a list of strings, or contains
-just the empty string if the file has no preamble. Any leading hashes in
-the preamble of the file are stripped.
-@item contents
-In the case of a text file (as indicated by the @var{preamble} field), this
-@cindex text files
-field will contain a list of character strings, with each line of the file
-contained in a character string. Otherwise, it can contain data in any
-format, which are obtained by converting the data section of the file
-to a tree.
-@end table
-@item options
-is a list of quadruples of the form
-@code{((@var{position},@var{longform}),(@var{keyword},@var{params}))}
-with one quadruple for each option appearing on the command line after
-the name of the virtual code file.
-
-@table @var
-@item position
-is a natural number indicating the position of the option on the command
-@cindex naturals
-@cindex command line
-line. The position numbers of all the options will form an ascending
-sequence, but not necessarily consecutive nor starting with zero.  The
-missing numbers in the sequence will correspond to the positions of the
-file names on the command line, allowing their positions to be inferred by
-applications for which the position matters.
-@item longform
-is a boolean value which is true if the option starts with two or more
-@cindex booleans
-dashes but false otherwise.
-@item keyword
-is the key word of the option expressed as a character string. For example
-in the case of a command line option @kbd{--foo=bar,baz}, the keyword is
-@code{foo}. Leading dashes are stripped.
-@item params
-is a list of character strings identifying the parameters for the
-command line option in question. In the case of an option of the form
-@kbd{--foo=bar,baz}, the first character string in the list will be
-@code{bar} and the next will be @code{baz}. The same applies if the
-option is written @kbd{--foo bar,baz} or @kbd{--foo =bar,baz}. If there
-are no parameters associated with the option, the list is empty.
-@end table
-@item environs
-is a list of pairs of character strings, with one pair in the list for
-@cindex environment
-each environment variable. The identifier is the left string in the
-pair, and the value is the right.  For example, if the environment
-contains the definition @code{OSTYPE=linux-gnu}, there will be a pair in
-the list whose left side is the string @code{OSTYPE} and whose
-right side is the string @code{linux-gnu}.
-@end table
-
-@node Input for Mapped Applications, Output From Non-interactive Applications, Input Data Structure, Parameter Mode Interface
-@subsection Input for Mapped Applications
-
-Applications invoked using the @option{--map-to-each-file} option
-@cindex @code{map-to-each-file} command line option
-benefit from a slightly different interface than the one described
-above. As the purpose of this option is to save memory by loading only
-one file at a time, the application does not have access to all input
-files named on the command line simultaneously within the same data
-structure. Although the data structure is of the type already described,
-the @var{files} field is not a list of arbitrary length. Instead, it is
-a list containing exactly one item for an input file. If @kbd{-}
-is used as a command line parameter, indicating standard input, then
-@var{files} will have another item pertaining to standard
-input. In no event will it have other than one or two items.
-
-The mapped application is expected to work by being applied individually
-to each of any number of separately constructed data structures, doing
-the same in each case as it would if that case were the only one. To make
-that possible, copies of the environment variables, the contents of standard
-input, and the list of application specific options are contained in the
-data structure used for every invocation. 
-
-@cindex command line
-The position numbers in the options are adjusted for each invocation to
-reflect the position of the particular input file associated with it.
-For example, in the following command
-@display
-@kbd{avram --map-to-each-file mapster.avm fa.txt --data fb.dat --code fc.o}
-@end display
-@noindent
-the function in the virtual code file @file{mapster.avm} would be
-applied to each of three data structures, corresponding to the commands
-
-@display
-@kbd{avram mapster.avm fa.txt --data --code}
-@kbd{avram mapster.avm --data fb.dat --code}
-@kbd{avram mapster.avm --data --code fc.o}
-@end display
-
-@noindent
-If the relative positions of the options and filenames were important to
-the application, they could be reliably inferred from the position
-numbers. In the first case, they would be 1 and 2, implying that the
-file is in position 0. In the second case they would be 0 and 2,
-implying that the file is in position 1, and in the third case they
-would be 0 and 1, implying that the file is in position 2. (Of course,
-nothing compels an application to concern itself with the positions of
-its parameters, and the alternative might be preferable.)
-
-For the most part, any application that can operate on one file at a
-time without needing information from any others can be executed more
-economically with the @option{--map-to-each-file} option and few if any
-changes to the code. The effect will normally be analogous to the above
-example, subject to a few possible differences.
-
-@itemize @bullet
-@item If an application is supposed to do something by default when
-there are no file parameters or only standard input, it won't work as a
-mapped application, because if there are no file parameters it won't be
-executed at all.
-@item If a mapped application causes any output files to be generated, they
-may be written before other input files are read, possibly causing the
-input files to be overwritten if they have the same names, and causing
-subsequent invocations to use the overwritten versions. This behavior
-differs from that of loading all input files at the outset, which
-ensures the application seeing all of the original versions. The latter may be
-more convenient for maintaining a group of files in some sort of
-consistent state.
-@item If an application causes standard output to be written along with
-output files, normally standard output is written last as a security
-measure against malicious code altering the @option{--ask-to-overwrite}
-prompts by subtly clobbering the console. In a mapped application,
-standard output isn't always last because there may be more invocations
-to come.
-@end itemize
-
-@node Output From Non-interactive Applications, Output From Interactive Applications, Input for Mapped Applications, Parameter Mode Interface
-@subsection Output From Non-interactive Applications
-
-@cindex @code{interactive} command line option
-@cindex @code{step} command line option
-If a parameter mode application is not invoked with either of the
-@option{--interactive} or @option{--step} options,
-then it is deemed to be non-interactive, and therefore does not concern
-itself with executing shell commands. Instead, it simply specifies a
-list of output files to be created or updated on its behalf by @code{avram}.
-
-The files are described by a list of quadruples
-@code{((@var{overwrite},@var{path}),(@var{preamble},@var{contents}))},
-with one quadruple for each file.
-
-@cindex preamble
-@cindex paths
-@cindex standard input
-@cindex standard output
-In each quadruple, the @var{path}, @var{preamble}, and @var{contents}
-fields have the same interpretations as in the list of files in the
-input data structure described in @ref{Input Data Structure}, except that a
-@code{nil} path refers to standard output rather than to standard input.
-
-The @var{overwrite} field in each quadruple tells whether the file
-@cindex appending to files
-should be overwritten or appended. If the @var{overwrite} field is
-@code{nil} (i.e., the representation for the Boolean value of
-@code{false}) and a file already exists at the given path, the new
-contents will be appended to it.  If the @var{overwrite} field is
-anything other than @code{nil} and/or no file exists with the given
-path, a new file is written or the extant one is overwritten. Note that
-the data file format specified in @ref{File Format} precludes appending
-anything to it, but the format of existing output files is not checked
-and nothing prevents data or text from being appended to one.
-
-@node Output From Interactive Applications,  , Output From Non-interactive Applications, Parameter Mode Interface
-@subsection Output From Interactive Applications
-
-@cindex @code{interactive} command line option
-@cindex @code{step} command line option
-Parameter mode applications invoked with either of the
-@option{--interactive} or @option{--step} options are
-required to take the data structure described in @ref{Input Data Structure} as an
-argument but to return the virtual code for a function that will observe
-@cindex shell
-a certain protocol allowing shell commands to be executed on its
-behalf. The intent is that the virtual code file doesn't contain the
-real application @emph{per se}, but only something that builds the real
-one on the fly using configuration information from the input files and
-command line options.
-
-The format of the result returned by an interactive application, being a
-virtual code application itself, requires a full exposition of the
-virtual machine code semantics. This subject is deferred to @ref{Virtual Code Semantics}.
-The remainder of this section describes the protocol followed by the
-function returned by the interactive application rather than the
-application itself.
-
-Similarly to the case of a byte transducer described in @ref{Byte Transducers},
-the basic pattern of interaction between @code{avram} and the function
-is a cycle of invocations. In general terms, the function is applied to
-a @code{nil} argument initially, and expected to return an initial state
-and initial output. Thereafter, the function is applied to a pair of the
-state returned on the previous iteration, and the next installment of
-input. The function returns further output and a new state, and the
-cycle continues until the function returns a value of @code{nil}, at
-which time the computation terminates.
-
-@menu
-* Line Oriented Interaction::   
-* Character Oriented Interaction::  
-* Mixed Modes of Interaction::  
-@end menu
-
-@node Line Oriented Interaction, Character Oriented Interaction, Output From Interactive Applications, Output From Interactive Applications
-@subsubsection Line Oriented Interaction
-
-Within this general pattern, more specific styles of interaction are
-possible. In the simplest one to explain first, the result returned by
-the function is always a data structure of the form
-@cindex command line
-@code{(@var{state},(@var{command lines},@var{prompts}))}, wherein the
-fields have these interpretations.
-
-@table @var
-@item state
-is a tree incorporating any data in any format that the application
-needs to remember from one invocation to the next.
-@item command lines
-is a list of character strings that are piped to the standard input
-stream of a separately spawned process. The process may persist from one
-invocation of the function to the next, or may be spawned each time.
-@item prompts
-is a non-empty list of character strings containing a suffix of the text
-expected from the standard output stream of the process as a result of
-sending the command lines to it.
-@end table
-
-On each iteration, @code{avram} sends the command line character strings
-@cindex spawning processes
-to a separately spawned process, with line breaks between them if there
-are more than one command. If a process remains from the previous iteration that
-has not terminated itself, the list of command lines is sent to the same
-process. If no such process already exists, the first string in the list
-of command lines is treated as a shell command and used to spawn the
-@cindex @code{exp_popen}
-process (using the @code{exp_popen} library function), and the remaining
-strings are sent to the newly spawned process.
-
-Normally processes spawned with commands that invoke interactive command
-line interpreters of their own, such as @command{bash}, @command{ftp} or
-@command{bc}, will persist indefinitely unless the command causing them
-to exit is issued or some other event kills them. Processes spawned with
-non-interactive commands, such as @command{ls} or @command{pwd}, will
-terminate when the last of their initial output has been received.
-
-In the case of processes that persist after being spawned, @code{avram}
-needs some way of knowing when to stop waiting for more output from them
-so that it doesn't get stuck waiting forever. This purpose is served by
-the @var{prompts} field. This field could contain a single string
-holding the last thing the process will send before becoming quiescent,
-such as the strings @code{bash$ } or @code{ftp> } in the above
-examples. Alternatively, a sequence of more than one prompt string can
-be used to indicate that the corresponding sequence of lines must be
-detected. An empty string followed by @code{ftp> } would indicate that
-the @code{ftp> } prompt is expected to be immediately preceded by a line
-@cindex prompts
-break. There is also the option of using prompt strings to indicate a
-pattern that does not necessarily imply quiescence, but is a more
-convenient point at which to stop reading the output from the process.
-
-For processes spawned with commands that do not start their own
-interactive command line interpreters, such as @command{ls} or
-@command{pwd}, it may be preferable to read all the output from them
-until they terminate. To achieve this effect, the list of prompt strings
-should contain only the single string containing only the single
-@code{EOF} character (usually code 4) or any other character that is
-certain not to occur in the output of the process. This technique is
-based on the assumption that the process was spawned originally with the
-command in question, not that such a command is sent to an existing
-shell process.
-
-In any case, when enough output has been received from the process, it
-is collected into a list of received strings including the prompt
-strings at the end (if they were received), and the function is applied
-to the pair @code{(@var{state},@var{received strings})}. If the cycle is
-to continue, the result returned by the function will include a new
-state, a new list of command lines, and a new list of prompt strings. A
-result of @code{nil} will cause the computation to terminate.
-
-There are some unusual situations that could occur in the course of line
-oriented interaction, and are summarized as follows.
-
-@itemize @bullet
-@item If the process terminates before any pattern matching the prompt
-strings is received from it, all of the output from the process up to
-the point where it terminated is collected into the @var{received
-strings} list and passed to the function. This situation includes cases
-where the process terminates immediately upon being spawned, but not
-abnormal completion of the @code{exp_popen} library function, which is
-a fatal error. This feature of the interface is what allows @code{EOF}
-to be used for collecting all the output at once from a non-interactive
-command.
-@item If the list of @var{command lines} is empty, and no process
-currently exists due to a previous iteration, the effect is the same as
-if the process terminates unexpectedly before outputting anything. I.e.,
-the function is applied to a pair containing an empty list of received
-strings. There is no good reason for an application to get into this
-situation.
-@item If the list of @var{command lines} is empty but a process persists
-from a previous iteration, no output is sent to it, but receiving from
-it proceeds normally. This feature of the interface could be used
-effectively by applications intended to process the received data in
-@cindex deadlock
-parts, but will cause deadlock if the process is already quiescent.
-@item All character strings have to consist of lists of valid
-representations of non-null characters according to @ref{Character
-Table}, or else there will be some fatal error messages.
-@item If the list of @var{prompt strings} contains only the empty
-string, @code{avram} will not wait to receive anything from the process,
-but will proceed with the next iteration immediately. If this effect is
-intended, care must be taken not to confuse the empty list
-of @var{prompt strings} with the list containing the empty string. The former
-indicates character oriented interaction, which is explained next.
-@end itemize
-
-@node Character Oriented Interaction, Mixed Modes of Interaction, Line Oriented Interaction, Output From Interactive Applications
-@subsubsection Character Oriented Interaction
-
-A character oriented style of interaction involves the function always
-returning a data structure of the form @code{(@var{state},(@var{command
-lines},nil))}. The @var{state} and @var{command lines} fields serve
-@cindex command line
-exactly the same purposes respectively as they do in the case of line
-oriented interaction. The field that would be occupied by the
-@var{prompt strings} list in the case of line oriented interaction is
-identically @code{nil} in this style.
-
-When this style is used, @code{avram} spawns a process and/or sends
-@cindex spawning processes
-command lines to it as in the case of line oriented interaction, but
-attempts to read only a single character from it per iteration. When the
-character is received, @code{avram} applies the function to the pair
-@code{(@var{state},@var{character})} in order to obtain the next state
-and the next list of command lines. If the process has terminated, a
-@code{nil} value is used in place of the character. If the process is
-quiescent, deadlock ensues.
-
-The character oriented style is a lower level protocol that shifts more
-of the burden of analyzing the process's output to the virtual code
-application. It can do anything line oriented interaction can do except
-proceeding immediately without waiting to receive any output from the
-process. It may also allow more general criteria (in effect) than the
-matching of a fixed prompt string to delimit the received data, for
-those pathological processes that may require such things.
-
-Applications using character oriented interaction need to deal with line
-@cindex line breaks
-breaks explicitly among the received characters, unlike the case with
-line oriented interaction, where the line breaks are implicit in the
-@cindex Unix
-list of received strings. Contrary to the convention for Unix text
-files, line breaks in the output of a process are indicated by character
-code 13 followed by character code 10.
-
-@node Mixed Modes of Interaction,  , Character Oriented Interaction, Output From Interactive Applications
-@subsubsection Mixed Modes of Interaction
-
-An application is not confined exclusively to line oriented or character
-oriented interaction, but may switch from one style to the other between
-iterations, and signal its choice simply by the format of the data
-structure it returns. If the @var{prompt strings} field is non-empty,
-the interaction is line oriented, and if the field is empty, the
-interaction is character oriented. A function using both styles has to
-be prepared for whichever type of data it indicates, either a character or
-a list of character strings as the case may be.
-
-Another alternative is possible if the function returns a data structure
-in the form @code{(@var{files},nil)}. This structure includes neither a
-list of command lines nor a list of prompt strings, empty or otherwise,
-but does include a list of quadruples in the @var{files} field. The
-quadruples are of the form
-@code{((@var{overwrite},@var{path}),(@var{preamble},@var{contents}))}.
-The fields have the same interpretations as in the output from a
-non-interactive parameter mode application, as described in
-@ref{Output From Non-interactive Applications}, and will cause a list of files to be written in the same way.
-
-As an interactive application is able cause the execution of arbitrary
-shell commands, it doesn't need @code{avram} to write files for it the
-way a non-interactive application does, so this feature does not provide
-any additional capabilities. However, it may be helpful as a matter of
-convenience.
-
-After the files are written, the function will be applied to the same
-result it returned, @code{(@var{files},nil)}. There is no direct means
-of preserving unconstrained state information from previous iterations
-in this style of interaction. A likely scenario might therefore be that
-the function returns a file list after finishing its other business, and
-then returns @code{nil} on the next iteration to terminate.
-
-@node Virtual Code Semantics,  , Parameter Mode Interface, Virtual Machine Specification
-@section Virtual Code Semantics
-
-As the previous sections explain, virtual code applications are defined
-in terms of mathematical functions. Up until this point, the discussion
-has focused on the interface between the function and the virtual
-machine interpreter, by detailing the arguments passed to the functions under
-various circumstances and the results they are expected to return in
-order to achieve various effects.
-
-The purpose of this section is to complete the picture by explaining how
-a given computable function can be expressed in virtual code,
-considering only functions operating on the trees described in @ref{Raw Material}.
-Functions manipulating trees of @code{nil} are undoubtedly a frivolous
-and abstract subject in themselves. One is obliged to refer back to the
-previous sections if in need of motivation.
-
-@menu
-* A New Operator::              
-* On Equality::                 
-* A Minimal Set of Properties::  
-* A Simple Lisp Like Language::  
-* How @code{avram} Thinks::     
-* Variable Freedom::            
-* Metrics and Maintenance::     
-* Deconstruction::              
-* Recursion::                   
-* Assignment::                  
-* Predicates::                  
-* Iteration::                   
-* List Combinators::            
-* List Functions::              
-* Exception Handling::          
-* Interfaces to External Code:: 
-* Vacant Address Space::        
-@end menu
-
-@node A New Operator, On Equality, Virtual Code Semantics, Virtual Code Semantics
-@subsection A New Operator
-
-With regard to a set of trees as described in @ref{Raw Material}, we can define
-a new binary operator. Unlike the @code{cons} operator, this one is not
-required to associate an element of the set with every possible pair
-of elements. For very many pairs of operands we will have nothing to
-say about its result. In fact, we require nothing of it beyond
-a few simple properties to be described presently.
-
-Because this is the only other operator than @code{cons}, there is no
-@cindex @code{cons}
-need to have a special notation for it, so it will be denoted by empty
-space. The tree associated by the operator with a pair of trees @code{@var{x}}
-and @code{@var{y}}, if any, will be expressed in the infix notation
-@code{@var{x} @var{y}}. For convenience, the operator is regarded as
-being right associative, so that @code{@var{a} @var{b} @var{c}} can be
-written for @code{@var{a} (@var{b} @var{c})}.
-
-@node On Equality, A Minimal Set of Properties, A New Operator, Virtual Code Semantics
-@subsection On Equality
-
-@cindex equality
-One example of a property this operator should have, for reasons that
-will not be immediately clear, is that for any trees @code{@var{x}} and
-@code{@var{k}}, the equality @code{cons(cons(nil,@code{@var{k}),nil) @var{x}} =
-@code{@var{k}}} always holds.
-Even though the present exposition opts for readability over formality,
-statements like these demand clarification of the notion of
-equality. Some of the more pedantic points in @ref{Raw Material} may be needed
-for the following ideas to hold water.
-
-@itemize @bullet
-@item As originally stipulated, it is always possible to distinguish
-@code{nil} from any member of the set. We can therefore decide on this
-basis whether @code{@var{a} = @var{b}} whenever at least one of them is @code{nil}.
-@item Where neither @code{@var{a}} nor @code{@var{b}} is @code{nil} in an expression
-@code{@var{a} = @var{b}}, but rather something of the form
-@code{cons(@var{x},@var{y})}, the equality holds if and only
-if both pairs of corresponding subexpressions are equal. If at least one
-member of each pair of corresponding subexpressions is @code{nil}, the
-question is settled, but otherwise there is recourse to their respective
-subexpressions, and so on. This condition follows from the uniqueness property
-of the @code{cons} operator.
-@item If one side of an equality is of the form
-@code{@var{x} @var{y}}, or is defined in terms of such an expression,
-but @code{(@var{x},@var{y})} is one of those pairs with which the operator
-associates no result, then the equality holds if and only if the other
-side is similarly ill defined.
-@item Statements involving universal quantification (i.e.,
-@cindex universal quantification
-@cindex undefined expressions
-beginning with words similar to ``for any tree @code{@var{x}} @dots{}'')
-obviously do not apply to instances of a variable (@code{@var{x}}) outside
-the indicated set (trees). Hence, they are not refuted by any
-consequence of identifying a variable with an undefined expression.
-@end itemize
-
-Readers who are aware of such issues as pointer equality or intensional
-@cindex pointer equality
-@cindex pointers
-versus extensional equality of functions are urged to forget all about
-them in the context of this document, and abide only by what is
-stated. Other readers should ignore this paragraph.
-
-@node A Minimal Set of Properties, A Simple Lisp Like Language, On Equality, Virtual Code Semantics
-@subsection A Minimal Set of Properties
-
-For any trees @code{@var{x}}, @code{@var{y}}, and @code{@var{k}}, and any non-@code{nil}
-trees @code{@var{p}}, @code{@var{f}}, and @code{@var{g}}, the new invisible operator satisfies these
-conditions. In these expressions and hereafter, increasing abuse of
-notation is perpetrated by not writing the @code{cons} in expressions of the form
-@code{cons(@var{x},@var{y})}.
-
-@table @emph
-@item P0
-@code{(nil,(nil,nil)) @var{x}} = @code{@var{x}}
-@item P1
-@code{(nil,((nil,nil),nil)) (@var{x},@var{y})} = @code{@var{x}}
-@item P2
-@code{(nil,(nil,(nil,nil))) (@var{x},@var{y})} = @code{@var{y}}
-@item P3
-@code{((nil,@var{k}),nil) @var{x}} = @code{@var{k}}
-@item P4
-@code{(((nil,(nil,nil)),nil),nil) (@var{f},@var{x})} = @code{@var{f} (@var{f},@var{x})}
-@item P5
-@code{((@var{f},@var{g}),nil) @var{x}} = @code{@var{f} @var{g} @var{x}}
-@item P6
-@code{((@var{f},nil),@var{g}) @var{x}} = @code{(@var{f} @var{x},@var{g} @var{x})}
-@item P7
-@code{((@var{p},@var{f}),@var{g}) @var{x}} = @code{@var{f} @var{x}} if
-@code{@var{p} @var{x}}  is a non-@code{nil} tree,
-but @code{@var{g} @var{x}} if @code{@var{p} @var{x}} = @code{nil}
-@end table
-
-@cindex properties
-@cindex operator properties
-Although other properties remain to be described, it is worth pausing at
-this point because there is ample food for thought in the ones already
-given. An obvious question would be that of their origin. The short
-answer is that they have been chosen arbitrarily to be true by
-definition of the operator. At best, the completion of the construction
-may lead to a more satisfactory answer based on aesthetic or engineering
-grounds.
-
-A more important question would be that of the relevance of the mystery
-operator and its properties to the stated purpose of this section, which
-is to specify the virtual machine code semantics. The answer lies in
-that the operator induces a function for any given tree @code{@var{t}},
-such that the value returned by the function when given an argument
-@var{x} is @code{@var{t} @var{x}}. This function is the one that is
-implemented by the virtual code @var{t}, which is to say the way an
-application will behave if we put @var{t} in its virtual code file. An
-equivalent way of looking at the situation is that the virtual machine
-does nothing but compute the result of this operator, taking the tree in
-the virtual code file as its left operand and the input data as the
-right operand. By knowing what the operator will do with a given pair of
-operands, we know what to put into the virtual code file to get the
-function we want.
-
-@cindex universality
-@cindex Turing equivalence
-@cindex exceptions
-@cindex lists
-It is worthwhile to note that properties @emph{P0} to @emph{P7} are
-sufficient for universality in the sense of Turing equivalence. That
-means that any computable function could be implemented by the suitable
-choice of a tree @var{t} without recourse to any other properties of the
-operator. A compiler writer who finds this material boring could
-therefore stop reading at this point and carry out the task of targeting
-any general purpose programming language to the virtual machine based on
-the specifications already given. However, such an implementation would
-not take advantage of the features for list processing, exception
-handling, or profiling that are also built into the virtual
-machine and have yet to be described.
-
-@node A Simple Lisp Like Language, How @code{avram} Thinks, A Minimal Set of Properties, Virtual Code Semantics
-@subsection A Simple Lisp Like Language
-
-@cindex @code{silly}
-With a universal computational model already at our disposal, it will be
-easier to use the virtual machine to specify itself than to define all
-of it from scratch. For this purpose, we use the @code{silly}
-programming language, whose name is an acronym for SImple Lisp-like
-Language (Yeah right). The language serves essentially as a thin layer
-of symbolic names on top of the virtual machine code. Due to its poor
-support for modularity and abstraction, @code{silly} is not recommended
-for serious application development, but at least it has a shallow
-learning curve.@footnote{Previous releases of @code{avram} included a
-working @code{silly} compiler, but this has now been superseded
-by the Ursala programming language. Ursala includes @code{silly} as a subset
-for the most part, and the examples in this manual should compile and
-execute with very little modification.}
-
-@menu
-* Syntax::                      
-* Semantics::                   
-* Standard Library::            
-@end menu
-
-@node Syntax, Semantics, A Simple Lisp Like Language, A Simple Lisp Like Language
-@subsubsection Syntax
-
-@code{silly} has no reserved words, but it has equals signs, commas and
-parentheses built in. A concise but ambiguous grammar for it can be given
-as follows.
-@cindex syntax
-@cindex grammar
-@display
-
-@var{program} ::= @var{declaration}*
-
-@var{declaration} ::= @var{identifier} @code{=} @var{expression}
-@iftex
-@var{expression} ::= @code{()} | @var{identifier} | @code{(@var{expression})} | @code{(@var{expression},@var{expression})}
-                    | @var{expression} @var{expression} | @var{expression}@code{(}@var{expression}@code{)}
-                    | @var{expression}@code{(}@var{expression}@code{,}@var{expression}@code{)}
-@end iftex
-@ifinfo
-
-@var{expression} ::= () | @var{identifier}
-                    | (@var{expression})
-                    | (@var{expression},@var{expression})
-                    | @var{expression} @var{expression}
-                    | @var{expression}(@var{expression})
-                    | @var{expression}(@var{expression},@var{expression})
-@end ifinfo
-
-@end display
-@noindent
-@cindex precedence
-@cindex operator precedence
-The real grammar is consistent with this one but enforces right
-associativity for binary operations and higher precedence for juxtaposition
-without intervening white space.
-
-The declaration of any identifier must be unique and must precede its
-occurrence in any expression. Hence, cyclic dependences between
-declarations and ``recursive'' declarations are not allowed.
-
-@node Semantics, Standard Library, Syntax, A Simple Lisp Like Language
-@subsubsection Semantics
-
-Declarations in @code{silly} should be understood in the obvious way as
-preprocessor directives to perform parenthetic textual substitutions (similar to
-@code{#define id (exp)} in C). All identifiers in expressions are thereby
-eliminated during the preprocessing phase.
-
-@cindex semantic function
-The overall meaning of the program is the meaning of the expression in
-the last declaration.  A denotational semantics for expressions is given
-by the following equations, where [[@code{@var{x}}]] should be read as
-``the meaning of @code{@var{x}}'', and @code{@var{x}}, @code{@var{y}} and @code{@var{z}}
-are metavariables. (That is, they stand for any source code fragment
-that could fit there subject to the constraint, informally speaking,
-that it has to correspond to a connected subtree of the parse tree as enforced
-by the unambiguous grammar in the context of the rest of the program.)
-
-@display
-
-[[@code{()}]] = @code{nil}
-
-[[@code{(@var{x})}]] = [[@code{@var{x}}]]
-
-[[@code{(@var{x},@var{y})}]] = @code{cons(}[[@code{@var{x}}]]@code{,}[[@code{@var{y}}]]@code{)}
-
-[[@code{@var{x} @var{y}}]] = [[@code{@var{x}(@var{y})}]] = [[@code{@var{x}}]] [[@code{@var{y}}]]
-
-[[@code{@var{x} (@var{y},@var{z})}]] = [[@code{@var{x}(@var{y},@var{z})}]] = [[@code{@var{x}}]] [[@code{(@var{y},@var{z})}]]
-
-@end display
-
-@noindent
-Toy languages like this are among the few situations a
-@cindex denotational semantics
-denotational semantics stands a chance of clarifying more than it
-obfuscates, so the reader is invited to take a moment to savor it.
-
-@node Standard Library,  , Semantics, A Simple Lisp Like Language
-@subsubsection Standard Library
-
-@code{silly} programs may be linked with library modules, which consist
-of @code{silly} source text to be concatenated with the user
-@cindex library modules
-@cindex standard prelude
-program prior to the preprocessing phase. Most @code{silly} programs are
-linked with the standard @code{silly} prelude, which contains the
-following declarations among others.
-@cindex @code{nil}
-@cindex @code{identity}
-@cindex @code{left}
-@cindex @code{right}
-@cindex @code{meta}
-@cindex @code{constant}
-@cindex @code{couple}
-@cindex @code{compose}
-@cindex @code{conditional}
-
-@example
-
-nil           = ()
-identity      = (nil,(nil,nil))
-left          = (nil,((nil,nil),nil))
-right         = (nil,(nil,(nil,nil)))
-meta          = (((nil,(nil,nil)),nil),nil)
-constant_nil  = ((nil,nil),nil)
-couple        = ((((left,nil),constant_nil),nil),right)
-compose       = couple(identity,constant_nil)
-constant      = couple(couple(constant_nil,identity),constant_nil)
-conditional   =
-   couple(couple(left,compose(left,right)),compose(right,right))
-
-@end example
-
-There is a close correspondence between these declarations and the
-properties described in @ref{A Minimal Set of Properties}. A fitting analogy would be that
-the properties of the operator specify the virtual machine instruction
-set in a language independent way, and the @code{silly} library defines
-the instruction mnemonics for a virtual assembly language. The
-@cindex mnemonics
-relationship of some mnemonics to their corresponding instructions may
-be less clear than that of others, so they are all discussed next.
-
-@node How @code{avram} Thinks, Variable Freedom, A Simple Lisp Like Language, Virtual Code Semantics
-@subsection How @code{avram} Thinks
-
-The definitions in the standard @code{silly} library pertaining to the
-basic properties of the operator can provide a good intuitive
-illustration of how computations are performed by @code{avram}.  This
-task is approached in the guise of a few trivial correctness proofs
-about them. Conveniently, as an infeasibly small language, @code{silly}
-is an ideal candidate for analysis by formal methods.
-
-Technically the semantic function [[@dots{}]] has not been defined on
-identifiers, but we can easily extend it to them by stipulating that the
-meaning of an identifier @code{@var{x}} is the meaning of the program
-@cindex identifiers
-@code{@var{main} = @var{x}} when linked with a library containing the
-declaration of @code{@var{x}}, where @code{@var{main}} is an identifier
-not appearing elsewhere in the library.
-
-With this idea in mind, the following ``theorems'' can be stated,
-all of which have a similar proof. The variables @var{x} and @var{y}
-stand for any tree, and the variable @var{f} stands for any tree other
-than @code{nil}.
-
-@table @emph
-@item T0
-[[@code{identity}]] @code{@var{x}} = @code{@var{x}}
-@item T1
-[[@code{left}]] @code{(@var{x},@var{y})} = @code{@var{x}}
-@item T2
-[[@code{right}]] @code{(@var{x},@var{y})} = @code{@var{y}}
-@item T4
-[[@code{meta}]] @code{(@var{f},@var{x})} = @code{@var{f} (@var{f},@var{x})}
-@item T5
-[[@code{constant_nil}]] @code{@var{x}} = @code{nil}
-@end table
-
-@noindent
-Replacing each identifier with its defining expression directly
-demonstrates a logical equivalence between the relevant theorem and one
-of the basic operator properties postulated in @ref{A Minimal Set of Properties}.
-
-For more of a challenge, it is possible to prove the next theorem.
-
-@table @emph
-@item T6
-For non-@code{nil} @code{@var{f}} and @code{@var{g}},
-([[@code{couple}]] @code{(@var{f},@var{g})}) @code{@var{x}} =
-@code{(@var{f} @var{x},@var{g} @var{x})}
-@end table
-
-@noindent
-The proof is a routine calculation. Beware of the distinction between
-the mathematical @code{nil} and the @code{silly} identifier @code{nil}.
-
-@ifnotinfo
-@format
-
-   ([[@code{couple}]] @code{(@var{f},@var{g})}) @code{@var{x}} =  ([[@code{((((left,nil),constant_nil),nil),right)}]] @code{(@var{f},@var{g})}) @code{@var{x}}
-
-by substitution of @code{couple} with its definition in the standard library
-
-   = (@code{((((}[[@code{left}]]@code{,}[[@code{nil}]]@code{),}[[@code{constant_nil}]]@code{),}[[@code{nil}]])@code{,}[[@code{right}]]@code{)} @code{(@var{f},@var{g})}) @code{@var{x}}
-
-by definition of the semantic function [[@dots{}]] regarding pairs
-
-   = (@code{((((}[[@code{left}]]@code{,}[[@code{()}]]@code{),}[[@code{constant_nil}]]@code{),}[[@code{()}]])@code{,}[[@code{right}]]@code{)} @code{(@var{f},@var{g})}) @code{@var{x}}
-
-by substitution of @code{nil} from its definition in the standard library
-
-   = (@code{((((}[[@code{left}]]@code{,}@code{nil}@code{),}[[@code{constant_nil}]]@code{),}@code{nil})@code{,}[[@code{right}]]@code{)} @code{(@var{f},@var{g})}) @code{@var{x}}
-
-by definition of the semantic function in the case of [[@code{()}]]
-
-   = (@code{(}[[@code{left}]] @code{(@var{f},@var{g}),}[[@code{constant_nil}]] @code{(@var{f},@var{g})),}[[@code{right}]] @code{(@var{f},@var{g})}) @code{@var{x}}
-
-by property @emph{P6} (twice)
-
-   = @code{((@var{f},nil),@var{g}) @var{x}}
-
-by theorems @emph{T1}, @emph{T2}, and @emph{T5}
-
-   = @code{(@var{f} @var{x},@var{g} @var{x})}
-
-by property @emph{P6} again.
-@end format
-@end ifnotinfo
-
-@ifinfo
-@ifnothtml
-@format
-   ([[@code{couple}]] @code{(@var{f},@var{g})}) @code{@var{x}}
-      = ([[@code{((((left,nil),constant_nil),nil),right)}]] @code{(@var{f},@var{g})}) @code{@var{x}}
-
-by substitution of @code{couple} with its definition in the standard library
-
-   = (
-        @code{(
-           (((}[[@code{left}]]@code{,}[[@code{nil}]]@code{),}[[@code{constant_nil}]]@code{),}[[@code{nil}]])@code{,}
-           [[@code{right}]]@code{)}
-        @code{(@var{f},@var{g})})
-     @code{@var{x}}
-
-by definition of the semantic function [[@dots{}]] regarding pairs
-
-   = (
-        @code{(
-           (((}[[@code{left}]]@code{,}[[@code{()}]]@code{),}[[@code{constant_nil}]]@code{),}[[@code{()}]])@code{,}
-           [[@code{right}]]@code{)}
-        @code{(@var{f},@var{g})})
-     @code{@var{x}}
-
-by substitution of @code{nil} from its definition in the standard library
-
-   = (
-        @code{(
-           (((}[[@code{left}]]@code{,}[[@code{nil}]]@code{),}[[@code{constant_nil}]]@code{),}[[@code{nil}]])@code{,}
-           [[@code{right}]]@code{)}
-        @code{(@var{f},@var{g})})
-     @code{@var{x}}
-
-by definition of the semantic function in the case of [[@code{()}]]
-
-   = (
-        @code{(}
-           [[@code{left}]] @code{(@var{f},@var{g}),}[[@code{constant_nil}]] @code{(@var{f},@var{g})),}
-           [[@code{right}]] @code{(@var{f},@var{g})})
-     @code{@var{x}}
-
-by property @emph{P6} (twice)
-
-   = @code{((@var{f},nil),@var{g}) @var{x}}
-
-by theorems @emph{T1}, @emph{T2}, and @emph{T5}
-
-   = @code{(@var{f} @var{x},@var{g} @var{x})}
-
-by property @emph{P6} again.
-@end format
-@end ifnothtml
-@end ifinfo
-
-Something to observe about this proof is that it might just as well have
-been done automatically. Every step is either the substitution of an
-identifier or a pattern match against existing theorems and properties
-of the operator. Another thing to note is that the use of identifiers
-and previously established theorems helps to make the proof human
-readable, but is not a logical necessity. An equivalent proof could have
-been expressed entirely in terms of the properties of the operator. If
-one envisions a proof like this being performed blindly and
-mechanically, without the running commentary or other amenities, that
-would not be a bad way of thinking about what takes place when
-@code{avram} executes virtual code.
-
-Three more theorems have similar proofs. For non-@code{nil}
-trees @code{@var{p}}, @code{@var{f}} and @code{@var{g}}, and any trees
-@code{@var{x}} and @code{@var{k}}:
-@cindex @code{compose}
-@cindex @code{constant}
-@cindex @code{conditional}
-
-@table @emph
-@item T7
-([[@code{compose}]] @code{(@var{f},@var{g})}) @var{x} = @var{f} @var{g} @var{x}
-@item T8
-([[@code{constant}]] @code{@var{k}}) @var{x} = @var{k}
-@item T9
-([[@code{conditional}]] @code{(@var{p},(@var{f},@var{g})}) @var{x} =
-@code{@var{f} @var{x}} if
-@code{@var{p} @var{x}}  is non-@code{nil},
-but @code{@var{g} @var{x}} if @code{@var{p} @var{x}} = @code{nil}
-@end table
-
-@noindent
-The proofs of these theorems are routine calculations analogous to the
-proof of @emph{T6}. Here is a proof of theorem @emph{T7} for good
-measure.
-@ifnotinfo
-@format
-
-   ([[@code{compose}]] @code{(@var{f},@var{g})}) @code{@var{x}} = ([[@code{couple(identity,constant_nil)}]] @code{(@var{f},@var{g})}) @code{@var{x}}
-@end format
-@end ifnotinfo
-@ifinfo
-@ifnothtml
-@format
-
-   ([[@code{compose}]] @code{(@var{f},@var{g})}) @code{@var{x}}
-      = ([[@code{couple(identity,constant_nil)}]] @code{(@var{f},@var{g})}) @code{@var{x}}
-
-@end format
-@end ifnothtml
-
-@end ifinfo
-@iftex
-@display
-@end display
-@noindent
-@end iftex
-by substitution of @code{compose} with its definition in the standard library
-@format
-
-   = (@code{(}[[@code{couple}]] @code{(}[[@code{identity}]]@code{,}[[@code{constant_nil}]]@code{))(@var{f},@var{g})}) @code{@var{x}}
-
-by definition of the semantic function
-
-   = @code{(}[[@code{identity}]] @code{(@var{f},@var{g}),}[[@code{constant_nil}]]@code{ (@var{f},@var{g})) @var{x}}
-
-by theorem @emph{T6}
-
-   = @code{((@var{f},@var{g}),nil) @var{x}}
-
-by theorems @emph{T0} and @emph{T5}
-
-   = @code{@var{f} @var{g} @var{x}}
-
-by property @emph{P5} of the operator.
-@end format
-
-@node Variable Freedom, Metrics and Maintenance, How @code{avram} Thinks, Virtual Code Semantics
-@subsection Variable Freedom
-
-The virtual code semantics is easier to specify using the
-@code{silly} language than it would be without it, but still awkward in
-some cases. An example is the following declaration from the standard
-library,
-@cindex @code{hired}
-
-@example
-hired = compose(
-   compose,
-   couple(
-      constant compose,
-      compose(couple,couple(constant,constant couple))))
-@end example
-
-@noindent
-which is constructed in such a way as to imply the following theorem,
-provable by routine computation.
-
-@table @emph
-@item T9
-@code{(}[[@code{hired}]] @code{@var{h}) (@var{f},@var{g})} = [[@code{compose}]]@code{(@var{h},}[[@code{couple}]]@code{(@var{f},@var{g}))}
-@end table
-
-@noindent
-Intuitively, @code{hired} represents a function that takes a given
-function to a higher order function. For example, if @code{f} were a
-function that adds two real numbers, @code{hired f} would be a function that
-takes two real valued functions to their pointwise sum.
-
-Apart from its cleverness, such an opaque way of defining a function has
-little to recommend it. The statement of the theorem about the function
-is more readable than the function definition itself, probably because
-the theorem liberally employs mathematical variables, whereas the
-@code{silly} language is variable free. On the other hand, it is not
-worthwhile to linger over further enhancements to the language, such as
-adding variables to it. The solution will be to indicate informally a
-general method of inferring a variable free function definition from an
-expression containing variables, and hereafter omit the more
-cumbersome definitions.
-
-@cindex @code{isolate}
-@cindex variables
-An algorithm called @code{isolate} does the job.
-The input to @code{isolate} is a pair @code{(@var{e},@var{x})}, where
-@code{@var{e}} is a syntactically correct @code{silly} expression in
-which the identifier @code{@var{x}} may occur, but no other identifiers
-dependent on @code{@var{x}} may occur (or else it's
-garbage-in/garbage-out).  Output is a syntactically correct @code{silly}
-expression @code{@var{f}} in which the identifier @code{@var{x}} does
-not occur, such that [[@code{@var{e}}]] = [[@code{@var{f} @var{x}}]].
-The algorithm is as follows,
-
-@display
-
-if @code{@var{e}} = @code{@var{x}} then
-   return @code{identity}
-else if @code{@var{e}} is of the form @code{(@var{u},@var{v})}
-   return @code{couple(isolate(@var{u},@var{x}),isolate(@var{v},@var{x}))}
-else if @code{@var{e}} is of the form @code{@var{u} @var{v}}
-   return @code{(hired apply)(isolate(@var{u},@var{x}),isolate(@var{v},@var{x}))}
-else
-   return @code{constant @var{e}}
-
-@end display
-
-@noindent
-@cindex equality
-where equality is by literal comparison of expressions, and the
-definition of @code{apply} is
-@cindex @code{apply}
-
-@example
-apply = (hired meta)((hired compose)(left,constant right),right)
-@end example
-
-@noindent
-which represents a function that does the same thing as the invisible
-operator.
-
-@table @emph
-@item T10
-[[@code{apply}]] @code{(@var{f},@var{x})} = @code{@var{f} @var{x}}
-@end table
-
-The @code{isolate} algorithm can be generalized to functions of
-arbitrarily many variables, but in this document we will need
-only a unary and a binary version. The latter takes an expression
-@code{@var{e}} and a pair of identifiers @code{(@var{x},@var{y})} as
-input, and returns an expression @code{@var{f}} such that
-[[@code{@var{e}}]] = [[@code{@var{f} (@var{x},@var{y})}]].
-
-@display
-
-if @code{@var{e}} = @code{@var{x}} then
-   return @code{left}
-else if @code{@var{e}} = @code{@var{y}} then
-   return @code{right}
-else if @code{@var{e}} is of the form @code{(@var{u},@var{v})}
-   return @code{couple(isolate(@var{u},(@var{x},@var{y})),isolate(@var{v},(@var{x},@var{y})))}
-else if @code{@var{e}} is of the form @code{@var{u} @var{v}}
-   return @code{(hired apply)(isolate(@var{u},(@var{x},@var{y})),isolate(@var{v},(@var{x},@var{y})))}
-else
-   return @code{constant @var{e}}
-
-@end display
-
-It might be noted in passing that something similar to these algorithms
-would be needed in a compiler targeted to @code{avram} if the source
-were a functional language with variables.
-
-@node Metrics and Maintenance, Deconstruction, Variable Freedom, Virtual Code Semantics
-@subsection Metrics and Maintenance
-
-Certain features of the virtual machine pertain to software development
-and maintenance more than to implementing any particular function. The
-operations with the mnemonics @code{version}, @code{note},
-@code{profile}, and @code{weight} are in this category.
-
-@menu
-* Version::                     
-* Note::                        
-* Profile::                     
-* Weight::                      
-@end menu
-
-@node Version, Note, Metrics and Maintenance, Metrics and Maintenance
-@subsubsection Version
-
-A virtual code application with exactly the following definition
-implements a function that returns a constant character string
-regardless of its argument.
-@cindex @code{version}
-
-@example
-version = ((nil,nil),((nil,nil),(nil,((nil,nil),nil))))
-@end example
-
-@noindent
-The character string encodes the version number of the installed
-@code{avram} executable, for example @code{@value{VERSION}}, using the standard
-representation for characters.
-
-Although such an application is useless by itself, the intended use for
-this feature is to cope with the possibility that future versions of
-@code{avram} may include enhancements. Ideally, the maintainer of
-@code{avram} will update the version number when new enhancements are
-added. Applications can then detect whether they are available in the
-installed version by using this feature. If a needed enhancement is not
-available, the application can either make allowances or at least
-terminate gracefully.
-
-@node Note, Profile, Version, Metrics and Maintenance
-@subsubsection Note
-
-This operation allows arbitrary information or comments to be embedded
-in a virtual code application in such a way that it will be ignored by
-@code{avram} when executing it. For the @code{silly} language, a
-@code{note} function is defined in the standard prelude so as to imply
-the following theorem.
-@cindex @code{note}
-@cindex annotations
-
-@table @emph
-@item T11
-[[@code{note}]] @code{(@var{f},@var{c})} = @code{((nil,nil),((nil,nil),(nil,(nil,(@var{f},@var{c})))))}
-@end table
-
-@noindent
-Intuitively, the argument @code{@var{f}} represents a function, and the
-argument @code{c} represents the comment, annotation, or whatever, that
-will be embedded but ignored in the virtual code.
-
-Semantically, a function with a note attached is the same as the
-function by itself, as the following property stipulates for
-any non-@code{nil} @code{@var{f}}.
-
-@table @emph
-@item P8
-([[@code{note}]] @code{(@var{f},@var{c})}) @code{@var{x}} = @code{@var{f} @var{x}}
-@end table
-
-A possible reason for using this feature might be to support a language
-that performs run-time type checking by hanging type tags on
-@cindex type tags
-everything. Another possible use would be to include symbolic
-information needed by a debugger.
-
-@node Profile, Weight, Note, Metrics and Maintenance
-@subsubsection Profile
-
-The virtual machine supports a profiling capability by way of this
-@cindex @file{profile.txt}
-feature. Profiling an application causes run time statistics about it to
-be written to a file @file{./profile.txt}. Profiled applications are of
-the form indicated in the following theorem
-
-@table @emph
-@item T12
-[[@code{profile}]] @code{(@var{f},@var{s})} = @code{((nil,nil),((nil,nil),(nil,((@var{f},@var{s}),nil))))}
-@end table
-
-@noindent
-where @code{@var{f}} stands for the virtual code of the application, and
-@code{@var{s}} stands for the name of it to be written to the file.
-The semantics of a profiled function is identical to the unprofiled
-form for any non-@code{nil} @code{@var{f}}.
-
-@table @emph
-@item P9
-([[@code{profile}]] @code{(@var{f},@var{s})}) @code{@var{x}} = @code{@var{f} @var{x}}
-@end table
-
-Unlike the situation with @code{note}, the annotation @code{@var{s}} of
-@cindex @code{note}
-used in profiled code is not in an unrestricted format but must be a
-character string in the standard representation (as in
-@ref{Representation of Numeric and Textual Data}),
-because this string needs to be written by @code{avram} to the file
-@file{./profile.txt}. Ordinarily this string will be the source code
-identifier of the function being profiled.
-
-When profiles are used in many parts of an application, an informative
-table is generated showing the time spent in each part.
-
-@node Weight,  , Profile, Metrics and Maintenance
-@subsubsection Weight
-
-The following virtual code implements a function that returns the weight
-of its argument in the standard representation for natural numbers.
-@cindex @code{weight}
-
-@example
-weight = ((nil,nil),((nil,nil),(nil,(nil,nil))))
-@end example
-
-@noindent
-The weight of a tree is zero if the tree is @code{nil}, and otherwise
-the sum of the weights of the two subtrees plus one.
-
-An algorithm to compute the weight of a tree would be trivial to
-implement without being built in to the virtual machine. The built in
-capability could also be used for purposes unrelated to code
-maintenance. Nevertheless, it is built in for the following reasons.
-
-@itemize @bullet
-@item Computing weights happened to be a bottleneck for a particular
-aspect of code generation that was of interest to the author,
-@cindex compression
-namely the compression of generated code.
-@item A built in implementation in C runs at least an order of magnitude
-faster than the equivalent implementation in virtual code.
-@item It runs even faster when repeated on the same data, by retrieving
-previously calculated weights rather than recalculating them.
-@end itemize
-
-The only disadvantage of using this feature instead of implementing a
-function in virtual code to compute weights is that it relies on native
-@cindex native integer arithmetic
-@cindex overflow
-integer arithmetic and could overflow, causing a fatal error. It has
-never occurred in practice, but is possible due to sharing, whereby the
-nominal weight of a tree could be exponentially larger than the actual
-amount of memory occupied by it.
-
-@node Deconstruction, Recursion, Metrics and Maintenance, Virtual Code Semantics
-@subsection Deconstruction
-
-Much of the time required for evaluating a function is devoted to
-@cindex deconstruction
-performing deconstruction operations, e.g., taking the left side of a
-pair, the tail of a list, the right side of the head of the tail, etc..
-Because these operations are so frequent, there are some features of the
-virtual machine to make them as efficient as possible.
-
-@menu
-* Field::                       
-* Fan::                         
-@end menu
-
-@node Field, Fan, Deconstruction, Deconstruction
-@subsubsection Field
-
-The virtual machine supports a generalization of the @code{left} and
-@cindex @code{left}
-@cindex @code{right}
-@code{right} deconstruction operations that is applicable to deeply nested
-structures. Use of this feature is conducive to code that is faster and
-more compact than is possible by relying on the primitive deconstructors
-alone. It may also be easier for a code optimizer to recognize and
-transform.
-
-The general form of a virtual code application to perform deconstruction
-is that it is a pair with a @code{nil} left side, and a non-@code{nil}
-right side. The right side indicates the nature of the deconstruction to
-be performed when the function is evaluated on an argument.
-
-To make the expression of deconstruction functions more readable in
-@code{silly}, the standard library contains the declaration
-
-@example
-field = couple(constant nil,identity)
-@end example
-
-@noindent
-which implies the following theorem.
-
-@table @emph
-@item T13
-[[@code{field}]] @code{@var{w}} = @code{(nil,@var{w})}
-@end table
-
-@cindex @code{field}
-The virtual machine recognizes an application in this form and evaluates
-it according to the following properties, where @code{@var{u}} and
-@code{@var{v}} are other than @code{nil}, but @code{@var{x}},
-@code{@var{y}}, and @code{@var{z}} are unrestricted.
-
-@table @emph
-@item P10
-([[@code{field}]] @code{(@var{u},nil)}) @code{(@var{x},@var{y})} = ([[@code{field}]] @code{@var{u}}) @code{@var{x}}
-@item P11
-([[@code{field}]] @code{(nil,@var{v})}) @code{(@var{x},@var{y})} = ([[@code{field}]] @code{@var{v}}) @code{@var{y}}
-@item P12
-([[@code{field}]] @code{(@var{u},@code{v})}) @code{@var{z}} = @code{((}[[@code{field}]] @code{@var{u}) @var{z},(}[[@code{field}]] @code{@var{v}) @var{z})}
-@end table
-
-@noindent
-One might also add that ([[@code{field}]] @code{(nil,nil)})
-@code{@var{z}} = @code{@var{z}}, but this statement would be equivalent to
-@emph{P0}.
-
-A suitable choice of the @code{field} operand permits the implementation
-of any deconstruction function expressible in terms of @code{compose},
-@code{couple}, @code{identity}, @code{left} and @code{right}. For
-example, the application @code{couple(compose(right,right),left)} has an
-equivalent representation in
-@code{field((nil,(nil,(nil,nil))),((nil,nil),nil))}. The latter looks
-longer in @code{silly} but is smaller and faster in virtual code.
-
-@node Fan,  , Field, Deconstruction
-@subsubsection Fan
-
-@cindex @code{fan}
-In cases where a deconstructions would be needed to apply the same
-function to both sides of a pair, the overhead can be avoided by means
-of a property of the virtual machine intended for that purpose.
-
-A @code{silly} definition of @code{fan} implying the following theorem is
-helpful in expressing such an application.
-
-@table @emph
-@item T14
-[[@code{fan}]] @code{@var{f}} = @code{((nil,nil),((nil,@var{f}),(nil,nil)))}
-@end table
-
-@noindent
-The virtual machine recognizes when an application has the form shown
-above, and uses @code{@var{f}} as a function to be applied to both sides
-of the argument.
-
-@table @emph
-@item P13
-([[@code{fan}]] @code{@var{f}}) @code{(@var{x},@var{y})} = @code{(@var{f} @var{x},@var{f} @var{y})}
-@end table
-
-@node Recursion, Assignment, Deconstruction, Virtual Code Semantics
-@subsection Recursion
-
-@cindex recursion
-Defining functions or programs self referentially is sometimes
-informally known as recursion. In functional languages, the clever use
-@cindex combinators
-@cindex functional programming
-of ``combinators'' is often preferred to this practice, and is in fact well
-supported by the virtual machine. However, some computations may be
-inexpressible without an explicitly ``recursive'' formulation, so there
-is some support for that as well.
-
-@menu
-* Recur::                       
-* Refer::                       
-@end menu
-
-@node Recur, Refer, Recursion, Recursion
-@subsubsection Recur
-
-@cindex @code{meta}
-@cindex @code{recur}
-A generalization of the form denoted by @code{meta} in @code{silly} is
-recognized by the virtual machine and allows a slightly more efficient
-encoding of recursive applications. An expression @code{recur @var{p}}
-has the representation indicated by this theorem,
-
-@table @emph
-@item T15
-[[@code{recur}]] @code{@var{p}} = @code{(((nil,@var{p}),nil),nil)}
-@end table
-
-@noindent
-which implies that [[@code{meta}]] = [[@code{recur}]] @code{(nil,nil)}.
-
-If @code{@var{p}} is non-@code{nil}, a tree of the form [[@code{recur}]]
-@code{@var{p}} is interpreted as follows. Note that @emph{P4} is
-equivalent to the special case of this property for which @code{@var{p}}
-is @code{(nil,nil)}.
-
-@table @emph
-@item P14
-([[@code{recur}]] @code{@var{p}}) @code{@var{x}} = [[@code{meta}]] ([[@code{field}]] @code{@var{p}}) @code{@var{x}}
-@end table
-
-The rationale is that @code{meta} would very frequently be composed with
-a deconstruction @code{field @var{p}}, so the virtual machine saves some
-time and space by allowing the two of them to be encoded in a smaller
-tree with the combined meaning.
-
-@node Refer,  , Recur, Recursion
-@subsubsection Refer
-
-@cindex @code{refer}
-In the style of recursive programming compelled by the available
-@code{meta} primitive, a function effectively requires a copy of its own
-machine code as its left argument. Bringing about that state of
-affairs is an interesting party trick.
-
-@cindex @code{bu}
-If we had a definition of @code{bu} in the standard library implying
-
-@table @emph
-@item T16
-([[@code{bu}]] @code{(@var{f},@var{k})}) @code{@var{x}} = @code{@var{f}(@var{k},@var{x})}
-@end table
-
-@noindent
-which for the sake of concreteness can be done like this,
-
-@example
-bu = (hired compose)(
-        left,
-        (hired couple)(compose(constant,right),constant identity))
-@end example
-
-@noindent
-then a definition of @code{refer} as
-
-@example
-refer = (hired bu)(identity,identity)
-@end example
-
-@noindent
-would be consistent with the following property of the operator.
-
-@table @emph
-@item P15
-([[@code{refer}]] @code{@var{f}}) @code{@var{x}} = @code{@var{f} (@var{f},@var{x})}
-@end table
-
-@noindent
-The proof, as always, is a matter of routine calculation in the manner
-of the section on how @code{avram} thinks.
-
-However, this pattern would occur so frequently in recursively defined
-functions as to be a significant waste of space and time. Therefore,
-rather than requiring it to be defined in terms of other operations, the
-virtual machine specification recognizes a pattern of the form below with
-respect to property @emph{P15},
-
-@table @emph
-@item T17
-[[@code{refer}]] @code{@var{f}} = @code{(((@var{f},nil),nil),nil)}
-@end table
-
-@noindent
-and takes the property to be true by definition of the operator. A
-definition of @code{refer} consistent with @emph{T17} is therefore to
-@cindex standard library
-be found in the standard library, not the definition proposed above.
-
-
-@node Assignment, Predicates, Recursion, Virtual Code Semantics
-@subsection Assignment
-
-@cindex assignment
-@cindex imperative programming
-In an imperative programming paradigm, a machine consists partly of an
-ensemble of addressable storage locations, whose contents are changed
-over time by assignment statements. An assignment statement includes
-some computable function of the global machine state, and the address of
-the location whose contents will be overwritten with the value computed
-from the function when it is evaluated.
-
-Compiling a language containing assignment statements into virtual
-machine code suitable for @code{avram} might be facilitated by
-exploiting the following property.
-
-@table @emph
-@item P16
-([[@code{assign}]] @code{(@var{p},@var{f})}) @code{@var{x}} = [[@code{replace}]] @code{((@var{p},@var{f} @var{x}),@var{x})}
-@end table
-
-@noindent
-The identifier @code{assign} is used in @code{silly} to express a
-virtual code fragment having the form shown below, and @code{replace}
-corresponds to a further operation to be explained presently.
-@cindex @code{assign}
-
-@table @emph
-@item T18
-[[@code{assign}]] @code{(@var{p},@var{f})} = @code{(((@var{p},@var{f}),nil),nil)}
-@end table
-
-This feature simulates assignment statements in the following way.  The
-variable @code{@var{x}} in @emph{P16} corresponds intuitively to the set
-of addressable locations in the machine. The variable @code{@var{f}}
-corresponds to the function whose value will be stored in the location
-addressed by @code{@var{p}}. The result of a function expressed using
-@code{assign} is a new store similar to the argument @code{@var{x}}, but
-with the part of it in location @code{@var{p}} replaced by @code{@var{f}
-@var{x}}. A source text with a sequence of assignment statements could
-therefore be translated directly into a functional composition of trees
-in this form.
-
-@cindex storage locations
-The way storage locations are modeled in virtual code using this feature
-would be as nested pairs, and the address @code{@var{p}} of a location
-is a tree interpreted similarly to the trees used as operands to the
-@code{field} operator described in @ref{Field}, to specify
-deconstructions. In fact, @code{replace} can be defined as a minimal
-solution to the following equation.
-@cindex @code{replace}
-
-@table @emph
-@item E0
-([[@code{field}]] @code{@var{p}}) [[@code{replace}]] @code{((@var{p},@var{y}),@var{x})} = @code{@var{y}}
-@end table
-
-This equation regrettably does
-not lend itself to inferring the @code{silly} source for @code{replace}
-@cindex @code{isolate}
-using the @code{isolate} algorithm in @ref{Variable Freedom}, so an explicit
-construction is given in @ref{Replace}. This construction need not concern a
-reader who considers the equation a sufficiently precise specification
-in itself.
-
-In view of the way addresses for deconstruction are represented as
-trees, it would be entirely correct to infer from this equation that a
-tuple of values computed together can be assigned to a tuple of
-locations. The locations don't even have to be ``contiguous'', but could
-be anywhere in the tree representing the store, and the function is
-computed from the contents of all of them prior to the update. Hence,
-this simulation of assignment fails to capture the full inconvenience of
-imperative programming except in the special case of a single value
-assigned to a single location, but fortunately this case is the only one
-most languages allow.
-
-There is another benefit to this feature besides running languages with
-assignment statements in them, which is the support of abstract or
-opaque data structures. A function that takes an abstract data structure
-as an argument and returns something of the same type can be coded in a
-way that is independent of the fields it doesn't use. For example, a
-data structure with three fields having the field identifiers
-@code{foo}, @code{bar}, and @code{baz} in some source language might be
-represented as a tuple @code{((@var{foo contents},@var{bar
-contents}),@var{baz contents})} on the virtual code level. Compile time
-constants like @code{bar = ((nil,(nil,nil)),nil)} could be defined in an
-effort to hide the details of the representation, so that the virtual
-code @code{field bar} is used instead of @code{compose(right,left)}.
-Using field identifiers appropriately, a function that transforms such a
-structure by operating on the @code{bar} field could have the virtual
-@cindex @code{field}
-code @code{couple(couple(field foo,compose(f,field bar)),field
-baz)}. However, this code does not avoid depending on the representation
-of the data structure, because it relies on the assumption of the @code{foo}
-field being on the left of the left, and the @code{baz} field being on
-the right. On the other hand, the code @code{assign(bar,compose(f,field
-bar))} does the same job without depending on anything but the position
-of the @code{bar} field. Furthermore, if this position were to change
-relative to the others, the code maintenance would be limited to a
-recompilation.
-
-@node Predicates, Iteration, Assignment, Virtual Code Semantics
-@subsection Predicates
-
-@cindex predicates
-A couple of operations are built into the virtual machine for performing
-tests efficiently. These functions return either @code{nil} for false or
-@code{(nil,nil)} for true, and are useful for example as a predicate
-@code{@var{p}} in programs of the form
-@code{conditional(@var{p},(@var{f},@var{g}))} among other things. In
-this example, the predicate is applied to the argument, a result of
-@code{(nil,nil)} causes @code{@var{f}} to be applied to it, and a result
-of @code{nil} causes @code{@var{g}} to be applied to it.
-
-@menu
-* Compare::                     
-* Member::                      
-@end menu
-
-@node Compare, Member, Predicates, Predicates
-@subsubsection Compare
-
-@cindex @code{compare}
-A function that performs comparison has a the following very simple
-virtual code representation.
-
-@table @emph
-@item T19
-[[@code{compare}]] = @code{(nil,nil)}
-@end table
-
-@noindent
-The proof of theorem @emph{T19} is that the standard @code{silly} prelude
-contains the declaration @code{compare = (nil,nil)}.  Code in this form
-has the following semantics.
-
-@table @emph
-@item P17
-For distinct trees @code{@var{x}} and @code{@var{y}}, [[@code{compare}]] @code{(@var{x},@var{y})} = @code{nil}
-@item P18
-[[@code{compare}]] @code{(@var{x},@var{x})} = @code{(nil,nil)}
-@end table
-
-@noindent
-@cindex equality
-In other words, the virtual code @code{(nil,nil)} implements a function
-that takes a pair of trees and returns true if and only if they are
-equal.
-
-It would be fairly simple to write an equivalent virtual code
-application that implements this function if it were not realizable in
-this form by definition of the operator. However, this method is
-preferable because it saves space in virtual code and has a highly
-optimized implementation in C.
-
-@node Member,  , Compare, Predicates
-@subsubsection Member
-
-Another built in predicate function has the virtual code shown below.
-@cindex @code{member}
-
-@table @emph
-@item T20
-[[@code{member}]] = @code{((nil,nil),((nil,nil),nil))}
-@end table
-
-@noindent
-As the mnemonic suggests, the function implemented by this code detects
-whether a given item is a member of a list. The left side of its
-argument is the item to be detected, and the right side is the list that
-may or may not contain it. Lists are represented as explained in
-@ref{Representation of Numeric and Textual Data}.
-
-The virtual code semantics can be specified by these three properties of
-the operator.
-
-@table @emph
-@item P19
-[[@code{member}]] @code{(@var{x},nil)} = @code{nil}
-@item P20
-[[@code{member}]] @code{(@var{x},(@var{x},@var{y}))} = @code{(nil,nil)}
-@item P21
-For distinct trees @code{@var{x}} and @code{@var{y}}, [[@code{member}]] @code{(@var{x},(@var{y},@var{z}))} =
-[[@code{member}]] @code{(@var{x},@code{z})}
-@end table
-
-As in the case of @code{compare}, the implementation of @code{member} is
-well optimized in C, so this form is to be preferred over an ad hoc
-construction of a membership testing function in virtual code.
-
-@node Iteration, List Combinators, Predicates, Virtual Code Semantics
-@subsection Iteration
-
-@cindex recursion
-@cindex @code{iterate}
-One of many alternatives to recursion provided by the virtual machine is
-iteration, which allows an operation to be repeated until a condition is
-met. If the source language is imperative, this feature provides an easy
-means of translating loop statements to virtual code. In languages that allow
-functions to be treated as data, iteration can be regarded as a function
-that takes a predicate and a function as arguments, and returns a
-function that applies the given function repeatedly to its argument
-until the predicate is refuted.
-
-Iterative applications are expressed in virtual code by the pattern shown below.
-
-@table @emph
-@item T21
-[[@code{iterate}]] @code{(@var{p},@var{f})} = @code{((nil,nil),(nil,(@var{p},@var{f})))}
-@end table
-
-@noindent
-In the @code{silly} language, the @code{iterate} mnemonic plays the role
-of the function that takes the virtual code for a predicate
-@code{@var{p}} and a function @code{@var{f}} as arguments, and returns
-the virtual code for an iterating function.
-
-The code for an iterating function is recognized as such by the virtual
-machine emulator only if the subtrees @code{@var{f}} and @code{@var{p}} are other
-than @code{nil}. The resulting function tests the argument
-@code{@var{x}} with @code{@var{p}} and returns @code{@var{x}} if the
-predicate is false.
-
-@table @emph
-@item P22
-([[@code{iterate}]] @code{(@var{p},@var{f})}) @code{@var{x}} = @code{@var{x}} if @code{@var{p} @var{x}} = @code{nil}
-@end table
-
-@noindent
-If the predicate turns out to be true, @code{@var{f}} is applied to
-@code{@var{x}}, and then another iteration is performed.
-
-@table @emph
-@item P23
-([[@code{iterate}]] @code{(@var{p},@var{f})}) @code{@var{x}} =
-([[@code{iterate}]] @code{(@var{p},@var{f})}) @code{@var{f} @var{x}} if @code{@var{p} @var{x}} is a non-@code{nil} tree
-@end table
-
-@node List Combinators, List Functions, Iteration, Virtual Code Semantics
-@subsection List Combinators
-
-@cindex lists
-@cindex imperative programming
-@cindex functional programming
-There is extensive support for operations on lists in the virtual code
-format. Use of these features is encouraged because they are conducive
-to tight code with explicit concurrency. Within an imperative
-programming paradigm, these features might perhaps have to be understood
-as design patterns or algorithmic skeletons. The present exposition
-takes a functional view, describing them in terms of operators that take
-functions as their arguments and return functions as their result.
-
-@menu
-* Map::                         
-* Filter::                      
-* Reduce::                      
-* Sort::                        
-* Transfer::                    
-* Mapcur::                      
-@end menu
-
-@node Map, Filter, List Combinators, List Combinators
-@subsubsection Map
-
-A virtual code application in the following form causes a function with
-non-@code{nil} virtual code @code{@var{f}} to be applied to every item
-in a list.
-
-@table @emph
-@item T22
-[[@code{map}]] @code{@var{f}} = @code{((nil,nil),((nil,@var{f}),nil))}
-@end table
-
-@noindent
-@cindex @code{map}
-The @code{map} mnemonic is used in @code{silly} to express applications
-in this form as @code{map @var{f}}.  This operation is also well known to
-lisp users and functional programmers.  The semantics is determined by
-these two operator properties (for non-@code{nil} @code{@var{f}}).
-
-@table @emph
-@item P24
-([[@code{map}]] @code{@var{f}}) @code{nil} = @code{nil}
-@item P25
-([[@code{map}]] @code{@var{f}}) @code{(@var{x},@var{y})} = @code{(@var{f} @var{x},(}[[@code{map}]] @code{@var{f}) @var{y})}
-@end table
-
-@noindent
-Note that the representation of lists described in 
-@ref{Representation of Numeric and Textual Data}, is assumed.
-
-@node Filter, Reduce, Map, List Combinators
-@subsubsection Filter
-
-@cindex @code{filter}
-Another well known list operation is that which applies a predicate to
-every item of a list, and deletes those for which the predicate is
-false. For a predicate with virtual code @code{@var{p}}, such an
-application can be coded conveniently in this form,
-
-@table @emph
-@item T23
-[[@code{filter}]] @code{@var{p}} = @code{((nil,nil),(nil,(@var{p},nil)))}
-@end table
-
-@noindent
-which is to say that writing @code{((nil,nil),(nil,(@var{p},nil)))} in
-@code{silly} is the same as writing @code{filter @var{p}}.
-
-The virtual machine detects code of this form provided that
-@code{@var{p}} is other than @code{nil}, and evaluates it consistently
-with the following properties, causing it to have the meaning that it
-does.
-
-@table @emph
-@item P26
-([[@code{filter}]] @code{@var{p}}) @code{nil} = @code{nil}
-@item P27
-([[@code{filter}]] @code{@var{p}}) @code{(@var{x},@var{y})} =
-([[@code{filter}]] @code{@var{p}}) @code{@var{y}} if @code{@var{p} @code{@var{x}}} = @code{nil}
-@item P28
-([[@code{filter}]] @code{@var{p}}) @code{(@var{x},@var{y})} =
-@code{(@var{x},}([[@code{filter}]] @code{@var{p}}) @code{@var{y})} if @code{@var{p} @var{x}} is a non-@code{nil} tree
-@end table
-
-@node Reduce, Sort, Filter, List Combinators
-@subsubsection Reduce
-
-@cindex @code{reduce}
-In the virtual code fragment shown below, @code{@var{f}} should be
-regarded as the virtual code for a binary operator, and @code{@var{k}}
-is a constant.
-
-@table @emph
-@item T24
-[[@code{reduce}]] @code{(@var{f},@var{k})} = @code{((nil,nil),((@var{f},@var{k}),nil))}
-@end table
-
-@noindent
-By constructing a tree in the form shown, the @code{silly}
-mnemonic @code{reduce} effectively constructs the code for a function
-operating on lists in a particular way.
-
-The effect of evaluating an application in this form with an argument
-representing a list can be broken down into several cases.
-
-@itemize @bullet
-@item If the list is empty, then the value of @code{@var{k}} is the
-result.
-@item If the list has only one item, then that item is the result.
-@item if the list has exactly two items, the first being @code{@var{x}} and the
-second being @code{@var{y}}, then  the result is  @code{@var{f}
-(@var{x},@var{y})}.
-@item If the list has more than two items and an even number of them, the
-result is that of evaluating the application with the list of values
-obtained by partitioning the list into pairs of adjacent items, and
-evaluating @code{@var{f}} with each pair.
-@item If the list has more than two items and an odd number of them, the
-result is that of evaluating the application with the list of values
-obtained by partitioning the list into pairs of adjacent items excluding
-the last one, evaluating @code{@var{f}} with each pair, and then
-appending the last item to the list of values.
-@end itemize
-
-@noindent
-In the last two cases, evaluation of the application is not necessarily
-finished after just one traversal of the list, because it has to carry
-on until the list is reduced to a single item.
-
-Some care has been taken to describe this operation in detail because it
-differs from comparable operations common to functional programming
-@cindex fold
-languages, variously known as fold or reduce. All of these operations
-could be used, for example, to compute the summation of a list of
-numbers. The crucial differences are as follows.
-
-@itemize @bullet
-@item Whereas a fold or a reduce is conventionally either of the left or
-right variety, this @code{reduce} is neither.
-@item The vacuous case result @code{@var{k}} is never used at all unless
-the argument is the empty list.
-@item This @code{reduce} is not very useful if the operator
-@code{@var{f}} is not associative.
-@end itemize
-
-The reason for defining the semantics of @code{reduce} in this way
-instead of the normal way is that a distributed implementation of this
-@cindex distributed implementation
-one could work in logarithmic time, so it's worth making it easy for a
-language processor to detect the pattern in case the virtual code is
-ever going to be targeted to such an implementation. Of course, nothing
-prevents the conventional left or right reduction semantics from being
-translated to virtual code by explicit recursion.
-@cindex recursion
-
-The precise semantics of this operation are as follows, where
-@code{@var{f}} is not @code{nil}, @code{@var{k}} is unconstrained, and
-@code{pairwise} represents a function to be explained presently.
-@cindex @code{iterate}
-@cindex @code{pairwise}
-@cindex @code{bu}
-@cindex @code{right}
-
-@table @emph
-@item P29
-([[@code{reduce}]] @code{(@var{f},@var{k})}) @code{nil} = @code{@var{k}}
-@item P30
-([[@code{reduce}]] @code{(@var{f},@var{k})}) @code{(@var{x},@var{y})} = @*
-@w{ }@w{ }@w{ }
-[[@code{left}]] ([[@code{bu(iterate,right)}]] [[@code{pairwise}]] @code{@var{f}}) @code{(@var{x},@var{y})} 
-@end table
-
-@noindent
-The latter property leverages off some virtual machine features and
-@code{silly} code that has been defined already. The function
-implemented by [[@code{pairwise}]] @code{@var{f}} is the one that
-partitions its argument into pairs and evaluates @code{@var{f}} with
-each pair as described above. The combination of that with
-@code{bu(iterate,right)} results in an application that repeatedly
-performs [[@code{pairwise}]] @code{@var{f}} while the resulting list
-still has a tail (i.e., a @code{right} side), and stops when the list
-has only a single item (i.e., when @code{right} is false). The
-@code{left} operation then extracts the item.
-
-For the sake of completeness, it is tedious but straightforward to
-give an exact definition for @code{pairwise}. The short version is that
-it can be anything that satisfies these three equations.
-
-@table @emph
-@item E1
-([[@code{pairwise}]] @code{@var{f}}) @code{nil} = @code{nil}
-@item E2
-([[@code{pairwise}]] @code{@var{f}}) @code{(@var{x},nil)} = @code{(@var{x},nil)}
-@item E3
-([[@code{pairwise}]] @code{@var{f}}) @code{(@var{x},(@var{y},@var{z}))} =
-@code{(@var{f} (@var{x},@var{y}),}([[@code{pairwise}]] @code{@var{f}}) @code{@var{z})}
-@end table
-
-@noindent
-For the long version, see @ref{Pairwise}.
-
-@node Sort, Transfer, Reduce, List Combinators
-@subsubsection Sort
-
-@cindex @code{sort}
-Sorting is a frequently used operation that has the following standard
-representation in virtual code.
-
-@table @emph
-@item T25
-[[@code{sort}]] @code{@var{p}} = @code{((nil,nil),((@var{p},nil),(nil,nil)))}
-@end table
-
-@noindent
-When an application in this form is evaluated with an operand
-representing a list, the result is a sorted version of the list.
-
-The way a list is sorted depends on what order is of interest. For
-example, numbers could be sorted in ascending or descending order,
-character strings could be sorted lexically or by length, etc.. The
-value of @code{@var{p}} is therefore needed in sorting applications to
-specify the order. It contains the virtual code for a partial order
-relational operator. This operator can be evaluated with any pair of
-items selected from a list, and should have a value of true if the left
-one should precede the right under the ordering. For example, if numbers
-were to be sorted in ascending order, then @code{@var{p}} would compute
-the ``less or equal'' relation, returning true if its operand were a
-pair of numbers in which the left is less or equal to the right.
-
-The virtual code semantics for sorting applications is given by these
-two properties, wherein @code{@var{p}} is a non-@code{nil} tree, and
-@code{insert} is a @code{silly} mnemonic to be defined next.
-@cindex @code{insert}
-
-@table @emph
-@item P31
-([[@code{sort}]] @code{@var{p}}) @code{nil} = @code{nil}
-@item P32
-([[@code{sort}]] @code{@var{p}}) @code{(@var{x},@var{y})} = ([[@code{insert}]] @code{@var{p}})
-@code{(@var{x},}([[@code{sort}]] @code{@var{p}}) @code{@var{y})}
-@end table
-
-@noindent
-These properties say that the empty list is already sorted, and
-a non-empty list is sorted if its tail is sorted and the head is then
-inserted in the proper place. This specification of sorting has nothing
-to do with the sorting algorithm that @code{avram} really uses.
-
-The meaning of insertion is convenient to specify in virtual code
-itself. It should satisfy these three equations.
-
-@table @emph
-@item E4
-([[@code{insert}]] @code{@var{p}}) @code{(@var{x},nil)} = @code{(@var{x},nil)}
-@item E5
-([[@code{insert}]] @code{@var{p}}) @code{(@var{x},(@var{y},@var{z}))} =
-@code{(@var{y},}([[@code{insert}]] @code{@var{p}}) @code{(@var{x},@var{z}))}
-if @code{@var{p}(@var{x},@var{y})} = @code{nil}
-@item E6
-([[@code{insert}]] @code{@var{p}}) @code{(@var{x},(@var{y},@var{z})}) =
-@code{(@var{x},(@var{y},@var{z}))} if @code{@var{p}(@var{x},@var{y})} is a non-@code{nil} tree
-@end table
-
-@noindent
-Intuitively, the right argument, whether @code{nil} or
-@code{(@var{y},@var{z})}, represents a list that is already sorted. The
-left argument @code{@var{x}} therefore only needs to be compared to the
-head element, @code{@var{y}} to ascertain whether or not it belongs at
-the beginning. If not, it should be inserted into the tail.
-
-A possible implementation of @code{insert} in @code{silly} is given in
-@ref{Insert}.
-
-@node Transfer, Mapcur, Sort, List Combinators
-@subsubsection Transfer
-
-@cindex @code{transfer}
-A particular interpretation is given to virtual code in the following form.
-
-@table @emph
-@item T26
-[[@code{transfer}]] @code{@var{f}} = @code{((nil,nil),(nil,(nil,@var{f})))}
-@end table
-
-@noindent
-When code in this form is evaluated with an argument, the tree
-@cindex state transition function
-@code{@var{f}} is used as a state transition function, and the argument
-is used as a list to be traversed. The traversal begins with
-@code{@var{f}} being evaluated on @code{nil} to get the initial state
-and the initial output. Thereafter, each item of the list is paired with
-the current state to be evaluated with @code{@var{f}}, resulting in a
-list of output and the next state. The output resulting from the entire
-application is the cumulative concatenation of all outputs obtained in
-the course of evaluating @code{@var{f}}. The computation
-terminates when @code{@var{f}} yields a @code{nil} result. If the list
-of inputs runs out before the computation terminates, @code{nil} values
-are used as inputs.
-
-This behavior is specified more precisely in the following property
-of the operator, which applies in the case of non-@code{nil} @code{@var{f}}.
-@cindex @code{transition}
-
-@table @emph
-@item P33
-([[@code{transfer}]] @code{@var{f}}) @code{@var{x}} =
-([[@code{transition}]] @code{@var{f}}) @code{(nil,(@var{f} nil,@var{x}))}
-@end table
-
-Much of the @code{transfer} semantics is implicit in the meaning of
-@code{transition}. For any given application @code{@var{f}},
-[[@code{transition}]] @code{@var{f}} is the virtual code for a function
-that takes the list traversal from one configuration to the next.
-A configuration is represented as a tuple, usually in the form
-@code{(@var{previous outputs},((@var{state},@var{output}),(@var{next input},@var{subsequent
-inputs})))}. A terminal configuration has the form
-@code{(@var{previous outputs},(nil,(@var{next input},@var{subsequent
-inputs})))}. A configuration may also have @code{nil} in place of the
-pair @code{(@var{next input},@var{subsequent inputs})} if no more input
-remains.
-
-In the non-degenerate case, the meaning of [[@code{transition}]]
-@code{@var{f}} is consistent with the following equation.
-
-@table @emph
-@item E7
-([[@code{transition}]] @code{@var{f}}) @code{(@var{y},((@var{s},@var{o}),(@var{i},@var{x})))} =@*
-@w{ }@w{ }@w{ }@w{ }([[@code{transition}]] @code{@var{f}}) @code{((@var{o},@var{y}),(@var{f} (@var{s},@var{i}),@var{x}))}
-@end table
-
-@noindent
-That is, the current output @code{@var{o}} is stored with previous outputs @code{@var{y}}, the next
-input @code{@var{i}} is removed from the configuration, and the next state and output
-are obtained from the evaluation of @code{@var{f}} with the state @code{@var{s}} and
-the next input @code{@var{i}}.
-
-In the case where no input remains, the transition function is
-consistent with the following equation.
-
-@table @emph
-@item E8
-([[@code{transition}]] @code{@var{f}}) @code{(@var{y},((@var{s},@var{o}),nil))} = @*
-@w{ }@w{ }@w{ }@w{ }([[@code{transition}]] @code{@var{f}}) @code{((@var{o},@var{y}),(@var{f} (@var{s},nil),nil))}
-@end table
-
-@noindent
-This case is similar to the previous one except that the @code{nil}
-value is used in place of the next input. Note that in either case,
-nothing about @code{@var{f}} depends on the particular way
-configurations are represented, except that it should have a state as
-its left argument and an input as its right argument.
-
-Finally, in the case of a terminal configuration, the transition
-function returns the cumulative output.
-
-@table @emph
-@item E9
-([[@code{transition}]] @code{@var{f}}) @code{(@var{y},(nil,@var{x}))} =
-[[@code{reduce(cat,nil)}]] [[@code{reverse}]] @code{@var{y}}
-@end table
-
-@noindent
-The @code{silly} code @code{reduce(cat,nil)} has the effect of
-@cindex @code{cat}
-@cindex concatenation
-flattening a list of lists into one long list, which is necessary
-insofar as the transition function will have generated not necessarily a
-single output but a list of outputs on each iteration. The @code{cat}
-mnemonic stands for list concatenation and is explained in @ref{Cat}.
-The reversal is necessary to cause the first generated output to be at
-the head of the list. List reversal is a built in operation of the
-virtual machine and is described in @ref{Reverse}.
-
-If such a function as @code{transition} seems implausible, its
-implementation in @code{silly} can be found in @ref{Transition}.
-
-It is usually more awkward to express a function in terms of
-a @code{transfer} than to code it directly using recursion or other list
-operations. However, this feature is provided by the virtual machine for
-several reasons.
-
-@itemize @bullet
-@item Functions in this form may be an easier translation target if the
-source is an imperative language.
-@item Translating from virtual code to asynchronous circuits or process
-@cindex asynchronous circuits
-networks has been a research interest of the author, and code in this
-@cindex author
-form lends itself to easy recognition and mapping onto discrete components.
-@item The @option{--byte-transducer} and @option{--interactive} command
-line options to @code{avram} cause an application to be invoked in a
-@cindex state transition function
-similar manner to the transition function in a @code{transfer}
-function, so this feature allows for easy simulation and troubleshooting
-of these applications without actually deploying them.
-@end itemize
-
-
-@node Mapcur,  , Transfer, List Combinators
-@subsubsection Mapcur
-
-An alternative form of recursive definition is the following.
-@cindex @code{mapcur}
-
-@table @emph
-@item T27
-[[@code{mapcur}]] @code{@var{p}} = @code{((nil,nil),((nil,nil),(@var{p},nil)))}
-@end table
-
-@noindent
-This form is convenient for applications that cause themselves to be
-@cindex recursion
-applied recursively to a list of arguments. It has this semantics.
-
-@table @emph
-@item P34
-([[@code{mapcur}]] @code{@var{p}}) @code{@var{x}} =
-[[@code{map meta}]] [[@code{distribute}]] ([[@code{field}]] @code{@var{p}}) @code{@var{x}}
-@end table
-
-@node List Functions, Exception Handling, List Combinators, Virtual Code Semantics
-@subsection List Functions
-
-In addition to the foregoing list operations, the virtual machine
-@cindex lists
-provides a number of canned functions operating on lists, namely
-concatenation, reversal, distribution, and transposition. These
-functions could be coded by other means if they were not built in, but
-the built in versions are faster and smaller.
-
-@menu
-* Cat::                         
-* Reverse::                     
-* Distribute::                  
-* Transpose::                   
-@end menu
-
-@node Cat, Reverse, List Functions, List Functions
-@subsubsection Cat
-
-The list concatenation operation has this representation in virtual code.
-@cindex @code{cat}
-@cindex concatenation
-
-@table @emph
-@item T28
-[[@code{cat}]] = @code{((nil,nil),(nil,nil))}
-@end table
-
-@noindent
-This function takes a pair of lists as an argument, an returns the list
-obtained by appending the right one to the left. The semantics of
-concatenation is what one would expect.
-
-@table @emph
-@item P35
-[[@code{cat}]] @code{(nil,@var{z})} = @code{@var{z}}
-@item P36
-[[@code{cat}]] @code{((@var{x},@var{y}),@var{z})} = @code{(@var{x},}[[@code{cat}]] @code{(@var{y},@code{z}))}
-@end table
-
-@node Reverse, Distribute, Cat, List Functions
-@subsubsection Reverse
-
-@cindex @code{reverse}
-The function that reverses a list has the following representation in
-virtual code.
-
-@table @emph
-@item T29
-[[@code{reverse}]] = @code{((nil,nil),(nil,(nil,nil)))}
-@end table
-
-@noindent
-This function takes a list as an argument, and returns a the list
-consisting of the same items in the reverse order. The semantics is
-given by the following properties.
-
-@table @emph
-@item P37
-[[@code{reverse}]] @code{nil} = @code{nil}
-@item P38
-[[@code{reverse}]] @code{(@var{x},@var{y})} = [[@code{cat}]] ([[@code{reverse}]] @code{@var{y},(@var{x},nil)})
-@end table
-
-@node Distribute, Transpose, Reverse, List Functions
-@subsubsection Distribute
-
-The function with the following virtual code representation is
-frequently useful for manipulating lists.
-@cindex @code{distribute}
-
-@table @emph
-@item T30
-@code{distribute} = @code{(((nil,nil),nil),nil)}
-@end table
-
-@noindent
-This function takes a pair whose right side represents a list, and
-returns a list of pairs, with one pair for each item in the list. The
-left side of each pair is the left side of the original argument, and
-the right side is the corresponding item of the list. A semantics for
-this operation is specified by the following properties.
-
-@table @emph
-@item P39
-[[@code{distribute}]] @code{(@var{x},nil)} = @code{nil}
-@item P40
-[[@code{distribute}]] @code{(@var{x},(@var{y},@var{z}))} =
-@code{((@var{x},@var{y}),}[[@code{distribute}]] @code{(@var{x},@var{z}))}
-@end table
-
-@node Transpose,  , Distribute, List Functions
-@subsubsection Transpose
-
-The @code{transpose} operation has the following representation in
-virtual code.
-
-@table @emph
-@item T31
-[[@code{transpose}]] = @code{((nil,nil),((nil,nil),(nil,nil)))}
-@end table
-
-@noindent
-@cindex @code{transpose}
-This function takes a list of equal length lists as an argument, and
-returns a list of lists as a result. In the resulting list, the first
-item is the list of all first items of lists in the argument. The next
-item is the list of all second items, and so on.
-
-In the specification of the semantics, the @code{silly} mnemonic
-@cindex @code{flat}
-@code{flat} is defined by @code{flat = reduce(cat,nil)} in the standard
-@code{silly} prelude, which means that it flattens a list of lists into
-one long list.
-
-@table @emph
-@item P41
-[[@code{transpose}]] @code{@var{x}} = @code{nil} if [[@code{flat}]] @code{@var{x}} = @code{nil}
-@item P42
-[[@code{transpose}]] @code{@var{x}} =
-@code{(}[[@code{map left}]] @code{@var{x},}[[@code{transpose}]] [[@code{map right}]] @code{@var{x})}@*
-@w{ }@w{ }@w{ } if [[@code{flat}]] @code{@var{x}} is a non-@code{nil} tree
-@end table
-
-@node Exception Handling, Interfaces to External Code, List Functions, Virtual Code Semantics
-@subsection Exception Handling
-
-@cindex exceptions
-In quite a few cases, the properties given for the operator up to this
-point do not imply any particular result. A good example would be an
-expression such as [[@code{left}]] @code{nil}, which appears to
-represent the left side of an empty pair. It can be argued that
-expressions like this have no sensible interpretation and should never
-be used, so it would be appropriate to leave them undefined.  On the
-other hand, attempts to evaluate such expressions occur frequently by
-mistake, and in any case, the virtual machine emulator should be
-designed to do something reasonable about them if only for the sake of
-reporting the error.  The chosen remedy for this situation addresses the
-need for error reporting, and also turns out to be useful in other ways.
-
-@menu
-* A Hierarchy of Sets::         
-* Operator Generalization::     
-* Error Messages::              
-* Expedient Error Messages::    
-* Computable Error Messages::   
-* Exception Handler Usage::     
-@end menu
-
-@node A Hierarchy of Sets, Operator Generalization, Exception Handling, Exception Handling
-@subsubsection A Hierarchy of Sets
-
-As indicated already, the virtual machine represents all functions and
-data as members of a set satisfying the properties in @ref{Raw Material},
-namely a @code{nil} element and a @code{cons} operator for constructing
-trees or nested pairs of @code{nil}. However, it will be necessary to
-distinguish the results of computations that go wrong for exceptional
-reasons from normal results. Because any tree in the set could conceivably
-represent a normal result, we need to go outside the set to find an
-unambiguous representation of exceptional results.
-
-Because there may be many possible exceptional conditions, it will be helpful
-to have a large set of possible ways to encode them, and in fact there
-is no need to refrain from choosing a countably infinite
-set. Furthermore, it will be useful to distinguish between different
-levels of severity among exceptional conditions, so for this purpose a
-countably infinite hierarchy of mutually disjoint sets is used.
-
-In order to build on the theory already developed, the set that has been
-used up to this point will form the bottom level of the hierarchy, and
-its members will represent normal computational results. The members of
-sets on the higher levels in the hierarchy represent exceptional
-results. To avoid ambiguity, the term ``trees'' is reserved for members
-@cindex trees
-of the bottom set, as in ``for any tree @code{@var{x}} @dots{}''.
-Unless otherwise stated, variables like @code{@var{x}} and
-@code{@var{y}} are universally quantified over the bottom set only.
-@cindex universal quantification
-
-Because each set in the hierarchy is countably infinite, it is
-isomorphic to the bottom set. With respect to an arbitrary but fixed
-bijection between them, let @code{@var{x}_@var{n}} denote the image in
-the @code{@var{n}}th level set of a tree @code{@var{x}} in the bottom
-set. The level numbers in this notation start with zero, and we take
-@code{@var{x}_0} to be synonymous with @code{@var{x}}. For good measure,
-let @code{(@var{x}_@var{n})_@var{m}} = @code{@var{x}_(@var{n}+@var{m})}.
-
-@node Operator Generalization, Error Messages, A Hierarchy of Sets, Exception Handling
-@subsubsection Operator Generalization
-
-Each set in the hierarchy induces a structure preserving @code{cons}
-@cindex @code{cons}
-operator, denoted @code{cons_@var{n}} for the @code{@var{n}}th level
-set, and satisfying this equation.
-
-@table @emph
-@item E10
-@code{cons_@var{n}(@var{x}_@var{n},@var{y}_@var{n})} =
-@code{(cons(@var{x},@var{y}))_@var{n}}
-@end table
-
-@noindent
-It will be convenient to generalize all of these @code{cons} operators to be
-defined on members of other sets than their own.
-
-@table @emph
-@item E11
-For @code{@var{m}} greater than @code{@var{n}},
-@w{ } @w{ } @w{ } @code{cons_@var{n}(@var{x}_@var{m},@var{y}_@var{p})} =
-@code{@var{x}_@var{m}}
-@end table
-
-@noindent
-In this equation, @code{@var{p}} is unrestricted. The intuition is that
-if the left operand of a @code{cons} is the result of a computation that
-went wrong due to an exceptional condition (more exceptional than
-@code{@var{n}}, the level already in effect), then the exceptional
-result becomes the whole result.
-
-It is tempting to hazard a slightly stronger statement, which is that
-this equation holds even if @code{@var{y}_@var{p}} is equal to some
-expression @code{@var{f} @var{x}} that is undefined according to the
-operator semantics. This stipulation would correspond to an
-implementation in which the right operand isn't evaluated after an error
-is detected in the left, but there are two problems with it.
-
-@itemize @bullet
-@item This semantics might unreasonably complicate a concurrent
-implementation of the virtual machine. If evaluation leads to
-non-termination in some cases where the result is undefined (as it certainly
-would in any possible implementation consistent with cases where it's
-defined), then the mechanism that evaluates the right side of a pair
-must be interruptible in case an exception is detected in the left.
-@item It is beyond the expressive power of the present mathematical
-framework to make such a statement, because it entails universal
-quantification over non-members of the constructed sets, which includes
-@cindex universal quantification
-almost everything.
-@end itemize
-
-@noindent
-Nevertheless, the implementation in @code{avram} is sequential and does
-indeed behave as proposed, with no practical difficulty. As for any
-deficiency in the theory, it could be banished by recasting the
-semantics in terms of a calculus of expressions with formal rules of
-manipulation. An operand to the @code{cons} operator would be identified
-not with a member of a semantic domain, but with the expression used to
-write it down, and then even ``undefinedness'' could be
-@cindex undefined expressions
-defined. However, the present author's preference in computing as in
-@cindex author
-life is to let some things remain a mystery rather than to abandon the
-quest for meaning entirely.
-
-A comparable condition applies in cases where the right side of a pair
-represents an exceptional result.
-
-@table @emph
-@item E12
-For @code{@var{m}} greater than @code{@var{n}},
-@w{ } @w{ } @code{cons_@var{n}(@var{x}_@var{n},@var{y}_@var{m})} =
-@code{@var{y}_@var{m}}
-@end table
-
-Whereas an infinitude of @code{cons} operators has been needed, it will
-@cindex @code{cons}
-be possible to get by with only one invisible operator, as before, by
-generalizing it in the following way to operands on any level of the
-hierarchy.
-
-@table @emph
-@item P43
-@code{@var{f}_@var{n} @var{x}_@var{n}} = @code{(@var{f} @var{x})_@var{n}}
-@item P44
-For distinct @code{@var{n}} and @code{@var{m}}, @w{ }@code{@var{f}_@var{n} @var{x}_@var{m}} = @code{@var{x}_@var{m}}
-@end table
-
-@noindent
-That is, the result of evaluating two operands on the same level is the
-image relative to that level of the result of their respective images on
-the bottom level, but the result of evaluating two operands on different
-levels is the same as the right operand.
-
-@node Error Messages, Expedient Error Messages, Operator Generalization, Exception Handling
-@subsubsection Error Messages
-
-The basic strategy for representing the results of exceptional
-conditions arising from the evaluation of operands on a given level of
-the hierarchy will be to use an error message corresponding to the image
-of a list of character strings on the level above.
-
-Unfortunately, the official @code{silly} standard does not
-define character constants, but they are available as a vendor specific
-extension in @code{silly-me} (millennium edition), where character strings
-@cindex @code{silly-me}
-@cindex strings
-@cindex character strings
-may be enclosed in single quotes. The value of the semantic
-@cindex semantic function
-function [[@dots{}]] in the case of a character string is the list
-of representations of the characters, based on @ref{Character Table}
-and @ref{Representation of Numeric and Textual Data}.
-
-For the sake of consistency, each standard error message is a list of
-character strings, even though the list has only one string in it. If
-any exceptional condition is the result of a computation, it is written
-to standard error by @code{avram} as the list of character strings it
-represents.
-
-@table @emph
-@item P45
-([[@code{compare}]] @code{nil})@code{_@var{n}} = [[@code{('invalid comparison',nil)}]]@code{_(@var{n}+1)}
-@item P46
-([[@code{left}]] @code{nil})@code{_@var{n}}  = [[@code{('invalid deconstruction',nil)}]]@code{_(@var{n}+1)}
-@item P47
-([[@code{right}]] @code{nil})@code{_@var{n}} = [[@code{('invalid deconstruction',nil)}]]@code{_(@var{n}+1)}
-@item P48
-(([[@code{fan}]] @code{@var{f}})
-@code{nil})@code{_@var{n}} = [[@code{('invalid deconstruction',nil)}]]@code{_(@var{n}+1)}
-@item P49
-([[@code{member}]] @code{nil})@code{_@var{n}}  = [[@code{('invalid membership',nil)}]]@code{_(@var{n}+1)}
-@item P50
-([[@code{distribute}]] @code{nil})@code{_@var{n}} = [[@code{('invalid distribution',nil)}]]@code{_(@var{n}+1)}
-@item P51
-([[@code{cat}]] @code{nil})@code{_@var{n}}  = [[@code{('invalid concatenation',nil)}]]@code{_(@var{n}+1)}
-@item P52
-([[@code{meta}]] @code{nil})@code{_@var{n}} = [[@code{('invalid recursion',nil)}]]@code{_(@var{n}+1)}
-@end table
-
-Note that by virtue of property @emph{P44}, there is no need for an
-application to make explicit checks for exceptional results at any
-point, because the exceptional result propagates through to the output
-of any function composed with the one that incurred it. For example, an
-application of the form @code{h = compose(f,right)}, which will cause an
-invalid deconstruction error if applied in filter mode to an empty file,
-imposes no requirement that @code{f} be written to accommodate that
-possibility (i.e., by checking for it) in order for the error to be
-reported properly. The following proof demonstrates that the meaning of @code{f}
-is irrelevant to the result.
-@format
-[[@code{compose(f,right)}]]@code{_0} @code{nil_0}
-
-   = [[@code{f}]]@code{_0} [[@code{right}]]@code{_0} @code{nil}@code{_0}
-
-   = [[@code{f}]]@code{_0} [[@code{('invalid deconstruction',nil)}]]@code{_1}
-
-   = [[@code{('invalid deconstruction',nil)}]]@code{_1}
-@end format
-
-@noindent
-In an application @code{h = compose(f,g)}, the input
-validation therefore may be confined to the ``front @w{end'', @code{g}.}
-
-It will be recalled from the discussions of @code{recur} (@ref{Recur})
-@cindex @code{recur}
-@cindex @code{transpose}
-and @code{transpose} (@ref{Transpose}) that the semantics of
-virtual code involving these forms is defined in terms of the
-@code{field} format for deconstruction functions (@ref{Field}),
-@cindex @code{field}
-which depends implicitly on the semantics of @code{left} and
-@code{right}, being a generalization of them. An invalid deconstruction
-@cindex @code{left}
-@cindex @code{right}
-message could therefore result from applications incorporating any of
-the forms of @code{recur}, @code{transpose}, or @code{field}. Invalid
-deconstructions could also arise from the @code{replace} operation
-@cindex @code{replace}
-@cindex assignment
-(@ref{Replace}), which is used for assignment (@ref{Assignment}), because
-@code{replace} is defined by virtual code, except as noted next.
-
-@node Expedient Error Messages, Computable Error Messages, Error Messages, Exception Handling
-@subsubsection Expedient Error Messages
-
-@cindex error messages
-Because there are so many ways to cause an invalid deconstruction, this
-message is the most common in practice and therefore the least
-informative. As a matter of convenience, @code{avram} takes the liberty
-of a slight departure from the virtual machine specification as written
-hitherto, and employs the following messages when invalid
-deconstructions occur respectively in the cases of recursion,
-transposition, and assignment.
-
-@itemize @bullet
-@item @code{invalid recursion}
-@item @code{invalid transpose}
-@item @code{invalid assignment}
-@end itemize
-
-@noindent
-That is, this section contradicts and supersedes what is stated at the
-end of @ref{Error Messages} and implied by the operator properties
-@emph{P14}, @emph{P16}, and @emph{P42}. It is also possible that user
-applications may modify the error messages by methods described in
-@ref{Computable Error Messages}.
-
-Whereas these three cases constitute an expedient variation on the
-semantics, there is another sense in which no possible implementation
-could conform faithfully to the specification. When an evaluation can
-not be carried out because of insufficient space on the host machine,
-one of the following error messages may be the result.
-
-@itemize @bullet
-@item @code{memory overflow}
-@item @code{counter overflow}
-@end itemize
-
-@noindent
-These messages are treated in the same way as those that are caused by
-programming errors, and propagate to the final result written to
-standard error without any specific consideration by the application
-developer. The latter occurs only in connection with the built in weight
-function (@ref{Weight}). Other messages listed in
-@ref{Application Programming Errors} are also of this ilk.
-
-@node Computable Error Messages, Exception Handler Usage, Expedient Error Messages, Exception Handling
-@subsubsection Computable Error Messages
-
-The automatic generation and reporting of error messages provides a
-reasonable default behavior for applications that do not consider
-exceptional conditions. All applications and their input data are
-ordinarily members of the bottom level set in the hierarchy 
-(@ref{A Hierarchy of Sets}).  The error messages caused by invalid
-operations on this level are on the first level above the bottom, which
-are recognized as such and written to standard error without
-intervention from the application. However, there are two drawbacks to
-this style of dealing with exceptions.
-@cindex exceptions
-
-@itemize @bullet
-@item 
-An application developer may wish to translate error messages
-into terms that are meaningful to the user, not only by literally
-translating them from English to the local vernacular, but perhaps by
-relating the particular exceptional condition to application specific
-causes. While it is convenient for the ``back end'' code not to be
-required to intervene in the error reporting, it would be most
-inconvenient for it not to be able to do so.
-@item 
-Some application specific errors might not correspond directly to any of
-the particular conditions detected automatically due to invalid
-operations, for example a semantic error in a syntactically correct
-input file. It might be convenient in such cases for an application to
-be able to define its own error messages but still have them reported
-automatically like the built in messages.
-@end itemize
-
-These situations suggest a need for some ability on the part of an
-application to operate on error messages themselves. Based on the
-operator semantics given so far, such an application is inexpressible,
-because for any application @code{@var{f}_0} and error message
-@w{@code{@var{x}_1}}, property @emph{P44} stipulates @code{@var{f}_0 @var{x}_1} =
-@code{@var{x}_1}, meaning that the resulting error message is
-unchanged. Therefore, we need to define another basic property of the
-operator.
-
-The following form of virtual code is used in applications that may need
-to operate on error messages.
-@cindex @code{guard}
-
-@table @emph
-@item T32
-[[@code{guard}]] @code{(@var{f},@var{g})} = @code{((nil,@var{f}),@var{g})}
-@end table
-
-@noindent
-Code in this form has the following semantics.
-
-@table @emph
-@item P53
-([[@code{guard}]] @code{(@var{f},@var{g})})@code{_@var{n}}
-@code{@var{x}_@var{p}} =
-@code{@var{g}_(@var{n}+1) @var{f}_@var{n} @var{x}_@var{p}}
-@end table
-
-@noindent
-The intuitive explanation is that @code{@var{f}} is the main part of the
-application, and @code{@var{g}} is the part of the application that
-operates on the error message that comes from @code{@var{f}} if an
-exception occurs while it is being evaluated (i.e., the ``exception
-handler''). Typically the exception handler code implements a function
-that takes an error message as an argument and returns an error message
-as a result.
-
-Where there is no exception, the exception handler
-@code{@var{g}_(@var{n}+1)} is never used, because its argument will be
-on level @code{@var{n}}, and therefore unaffected by an application on
-level @code{@var{n}+1}.
-
-Exception handlers may have their own exception handlers, which will be
-invoked if the evaluation of the exception handler causes a further
-exception. Such an exception corresponds semantically to a value on the
-next level of the hierarchy of sets.
-
-@node Exception Handler Usage,  , Computable Error Messages, Exception Handling
-@subsubsection Exception Handler Usage
-
-One way for this feature of the virtual machine to be used is to
-intercept and translate error messages to a more meaningful form. An
-application guarded as shown below causes messages of invalid deconstruction
-to be changed to @code{'syntax error'}.
-
-@display
-@code{main = guard(
-   application,
-   conditional(
-      bu(compare,('invalid deconstruction',nil)),
-      (constant ('syntax error',nil),identity)))}
-@end display
-
-@noindent
-The conditional compares its argument to the error message for an
-@cindex deconstruction
-invalid deconstruction, and if it matches, the syntax error message is
-returned, but otherwise the original message is returned. Note that an
-error message must be in the form of a list of character strings, so
-that it can be printed.  Although the message of @code{'syntax error'}
-might not be very informative, at least it looks less like a crash.
-A real application should of course strive to do better than that.
-
-Exception handling features of the virtual machine can also be adapted
-by applications to raise their own exceptions with customized messages.
-
-@example
-error_messenger =
-   guard(compose(compare,constant nil),constant ('syntax error',nil))
-@end example
-
-@noindent
-This code fragment implements a function that causes a message of
-@code{'syntax error'} to be reported for any possible input.  This code
-works by first causing an invalid comparison and then substituting its
-own error message. A function that always causes an error is not useful
-in itself, but might be used as part of an application in the following
-form.
-
-@example
-main = conditional(validation,(application,error_messenger))
-@end example
-
-@noindent
-In this case, the application checks the validity of the input with a
-predicate, and invokes the error messenger if it is invalid.
-
-Although the previous examples return a fixed error message for each
-possible kind of error, it is also possible to have error messages
-that depend on the input data, as the next example shows.
-@cindex @code{bu}
-@cindex @code{guard}
-@cindex @code{identity}
-@cindex @code{apply}
-@cindex @code{hired}
-
-@example
-main = (hired apply)(
-   compose(
-      bu(guard,some_application),
-      (hired constant)(constant 'invalid input was:',identity)),
-   identity)
-@end example   
-
-@noindent
-If the application causes an exception for any reason, the error message
-returned will include a complete listing of the input, prefaced by the
-words @code{'invalid input was:'}. This particular example works only if
-the input is a list of character strings, but could be adapted for other
-types of data by substituting an appropriate formatting function for the
-first identity. The formatting function would take the relevant data
-type to a list of character strings. Another possible variation would be to
-concatenate the invalid input listing with the error message that was
-generated, rather than just replacing it.
-
-As the last example may suggest, exception handlers turn out to be an
-@cindex debugging
-@cindex functional programming
-@cindex imperative programming
-essential debugging tool for functional programs, making them as easy to
-debug as imperative programs if not more so. This example forms the
-basis for a higher order function that wraps any given function with an
-exception handler that prints the argument causing it to crash. For
-arguments not causing a crash, the behavior is unchanged. Alternatively,
-code implementing a function that unconditionally reports its argument
-in an error message can be inserted at a strategic point in the
-application code similarly to a print statement. Finally, inspired use
-of exception handlers that concatenate their messages with previously
-generated messages can show something like a parameter stack dump when a
-recursively defined function crashes. These are all matters for a language
-designer and are not pursued further in this document.
-
-@node Interfaces to External Code, Vacant Address Space, Exception Handling, Virtual Code Semantics
-@subsection Interfaces to External Code
-
-A few other combinators have been incorporated into the virtual
-machine as alternatives to the style of interactive applications
-described in @ref{Output From Interactive Applications}. These make it
-possible to interface with external libraries and applications either
-by a simple function call, or by executing a run-time generated
-transducer as described previously. In either case, there is no need
-for any particular command line options to specify interactive
-invocation, nor for the application to be designed that way from the
-outset. Existing virtual code applications may therefore be enhanced
-to make use of these features without radical changes.
-
-To account for these additional capabilities, it is not entirely
-adequate to continue defining the virtual machine semantics in terms
-of a mathematical function, but it is done nevertheless due to the
-lack of any appealing alternative. Although most library functions are
-in fact functions in the sense that their outputs are determined by
-their arguments, they defy a concise specification within the present
-mathematical framework, especially insofar as they may involve finite
-precision floating point numbers. More problematically, the effect of
-interaction with a shell is neither well defined nor deterministic.
-The descriptions that follow presuppose a computational procedure
-associated with the following definitions but leave its exact nature
-unspecified.
-
-@menu
-* Library combinator::                    
-* Have combinator::                      
-* Interaction combinator::                      
-@end menu
-
-@node Library combinator, Have combinator, Interfaces to External Code, Interfaces to External Code
-@subsubsection Library combinator
-
-The simplest and fastest method of interfacing to an external library
-is by way of a virtual machine combinator called @code{library}. It
-takes two non-empty character strings as arguments to a virtual code
-program of the form implied by the following property.
-@table @emph
-@item T33
-[[@code{library}]] (@code{@var{x}},@code{@var{y}}) = @code{((nil,nil),((@var{x},@var{y}),(nil,nil)))}
-@end table
-
-@noindent
-Intuitively, @var{x} is the name of a library and @var{y} is the name
-of a function within the library. For example, if @var{x} is
-@code{'math'} and @var{y} is @code{'sqrt'}, then
-@code{library}(@var{x},@var{y}) represents the function that computes
-the square root of a floating point number as defined by the host
-machine's native C implementation, normally in IEEE double precision
-format.  Different functions and libraries may involve other argument
-and result types, such as complex numbers, arrays, sparse matrices, or
-arbitrary precision numbers. A list of currently supported external
-library names with their functions and calling conventions is given in
-@ref{External Libraries}.
-
-On the virtual code side, all function arguments and results
-regardless of their types are encoded as nested pairs of @code{nil},
-as always, and may be manipulated or stored as any other data,
-including storage and retrieval from files in @file{.avm} virtual
-code format (@ref{File Format}). However, on the C side,
-various memory management and caching techniques are employed to
-maintain this facade while allowing the libraries to operate on data
-in their native format. The details are given more fully in the API
-documentation, particularly in @ref{Type Conversions} and
-@ref{External Library Maintenance}.
-
-While this style is fast and convenient, it is limited either to
-libraries that have already been built into the virtual machine, or to
-those for which the user is prepared to implement a new interface
-module in C as described in @ref{Implementing new library
-functions}.
-
-@node Have combinator, Interaction combinator, Library combinator, Interfaces to External Code
-@subsubsection Have combinator
-
-As virtual machine interfaces to external libraries accumulate faster
-than they can be documented and may vary from one installation to
-another, it is helpful to have a way of interrogating the virtual
-machine for an up to date list of the installed libraries and
-functions. A combinator called @code{have} can be used to test for the
-availability of a library function. It takes the form
-
-@table @emph
-@item T34
-[[@code{have}]] (@code{@var{x}},@code{@var{y}}) = @code{((nil,nil),((nil,@var{x}),(nil,@var{y})))}
-@end table
-
-@noindent
-where @var{x} is the name of a library and @var{y} is the name of a
-function within the library encoded as character strings. For example,
-if @var{x} is @code{'mtwist'} and @var{y} is @code{'u_disc'} (for the
-natural random number generator function in the Mersenne twistor
-library) then @code{have(@var{x},@var{y})} is a function that returns
-a non-empty value if an only if that library is installed and that
-function is available within it. The actual argument to the function
-is ignored as the result depends only on the installed virtual machine
-configuration. In this sense, it acts like a @code{constant} combinator.
-
-One way for this combinator to be used is in code of the form
-
-@example
-   portable_rng =
-
-   conditional(
-      have('mtwist','u_disc'),
-      library('mtwist','u_disc'),
-      some_replacement_function)
-@end example
-
-@noindent
-which will use the library function if available but otherwise use a
-replacement function. Code in this form makes the decision at run
-time, but it is also possible to express the function such that the
-check for library presence is made at compile time, as the following
-example shows, which will imply a slight improvement in performance.
-
-@example
-   non_portable_rng =
-
-   apply(
-      conditional(
-         have('mtwist','u_disc'),
-         constant library('mtwist','u_disc'),
-         constant some_replacement_function),
-      0)
-@end example
-
-@noindent
-This program would be non-portable in the sense that it would need to
-be recompiled for each installation if there were a chance that some
-of them might have the @code{mtwist} library and some might not,
-whereas the previous example would be binary compatible across all of
-them. @footnote{In practice both examples are equally portable because
-the @code{mtwist} source is distributed with @code{avram} so all
-installations will have it. Most libraries are distributed
-separately.}
-
-The actual value returned by a function @code{have(foo,bar)} is the
-list of pairs of strings @code{<(foo,bar)>} if the function is
-available, or the empty list otherwise. A non-empty list is
-represented as a pair @code{(head,tail)}, and an empty list as
-@code{nil}. The angle bracket notation @code{<a,b,c...>} used here is
-an abbreviation for @code{(a,(b,(c...nil)))}.
-
-Either or both arguments to the @code{have} combinator can be a
-wildcard, which is the string containing a single asterisk,
-@cindex wild cards
-@code{'*'}. In that case, the list of all available matching library
-names and function names will be returned. This feature can be used to
-find out what library functions are available without already knowing
-their names.
-
-If a library had a function named @code{'*'}, which clashes with
-the wild card string, the interpretation as a wild card would take
-precedence.
-
-@node Interaction combinator,  , Have combinator, Interfaces to External Code
-@subsubsection Interaction combinator
-
-A further combinator allows virtual code applications to interact
-directly with any interactive console application using the
-@code{expect} library.  The mechanism is similar to that of
-interactive applications documented in the @ref{Output From
-Interactive Applications}, but attempts to be more convenient.
-Instead of being designed as an interactive application, any virtual
-code application may use this combinator to spawn a shell and interact
-with it in order to compute some desired result.
-
-The advantage of this combinator over the @code{library} combinator is
-that it requires no modification of the virtual machine to support new
-applications. It can also interact with applications that may reside
-on remote servers, that are implemented languages other than C, or
-@cindex GNU R
-whose source code is unavailable. For example, the GNU R statistical
-package provides an interactive command to evaluate multivariate
-@cindex multivariate normal distrubution
-normal distribution functions with an arbitrary covariance matrix, but
-@cindex covariance matrix
-the corresponding function is not provided by the @code{Rmath} C
-library (or any other free library, to the author's knowledge) because
-it is implemented in interpreted code. This combinator makes it
-callable by an @code{avram} virtual code application nevertheless. The
-disadvantage compared to the @code{library} combinator is that there
-is more overhead in spawning a process than simply making a call to a
-built in function, and the programming interface is more complicated.
-
-The combinator takes the form
-
-@table @emph
-@item T35
-[[@code{interact}]] @var{f} = @code{((nil,nil),(((nil,nil),nil),((nil,@var{f}),nil)))}
-@end table
-
-@noindent
-where @var{f} is the virtual code for a function that
-follows the same protocol described in @ref{Output From Interactive Applications},
-except that it does not allow file output as described in
-@ref{Mixed Modes of Interaction}. The argument @code{x} is ignored when the
-expression @code{(interact f) x} is evaluated, similarly to the way the argument
-is ignored in an expression like @code{(constant k) x}. The result returned
-is a transcript of the dialogue that took place between @code{f} and the
-externally spawned shell, represented as a list of lists of strings for
-line oriented interaction, or a list of characters alternating with lists of
-strings in the case of character oriented interaction.
-
-The following example demonstrates a trivial use of the @code{interact}
-combinator to spawn an @code{ftp} client, do an @code{ls} command, and then
-@cindex ftp
-terminate the session.
-
-@example
-
-eof = <(nil,(nil,(((nil,nil),nil),(nil,nil))))>
-
-demo =
-
-interact conditional(
-   conditional(identity,constant false,constant true),
-   constant(0,<'ftp'>,<'ftp> '>),
-   conditional(
-      conditional(left,constant false,constant true),
-      constant(1,<'ls',''>,<'','ftp> '>),
-      conditional(
-         compose(compare,couple(left,constant 1)),
-         constant(2,<'bye',''>,<eof>),
-         constant nil)))
-@end example
-
-@noindent
-Some liberties are taken with @code{silly} syntax in this example, in
-the way of using angle brackets to denote lists, and numbers to
-represent states.
-
-@itemize @bullet
-@item
-The interacting transducer works by checking whether its argument is
-empty (via the @code{identity} function used as a predicate in the
-@code{conditional}, which is then negated). In that case it returns
-the triple containing the initial state of 0, the @code{ftp} shell
-command to spawn the client, and the @code{'ftp> '} prompt expected
-when the client has been spawned, both of the latter being lists of
-strings.
-@item
-If the argument is non-empty, then next it checks whether it is in the
-initial state of 0, (via the @code{left} function used as a predicate,
-referring to the state variable expected on the left of any given
-@code{(state,input)} pair, also negated). If so, it returns the triple
-containing the next state of 1, the @code{ls} command followed by an
-empty string to indicate a line break, and the expected prompt
-preceded by an empty string to match it only at the beginning of a
-line.
-@item
-Finally, it checks for state 1, in which case it issues the
-@code{bye} command to close the session, @code{eof} rather than a
-@cindex eof
-prompt to wait for termination of the client, and a state of 2.
-@item
-In the remaining state of 2, which needn't be explicitly tested
-because it is the only remaining possibility, the program returns a
-@code{nil} value to indicate that the computation has
-terminated.
-@end itemize
-
-Deadlock would be possible at any point if either party did not follow
-@cindex deadlock
-this protocol, but for this example it is not an issue. If an
-expression of the form @code{demo x} were to be evaluated, then
-regardless of the value of @code{x}, the value of the result would be
-as shown below.
-
-@example
-<
-   <'ftp'>,
-   <'ftp> '>,
-   <'ls',''>,
-   <'ls','Not connected.','ftp> '>,
-   <'bye',''>,
-   <'bye',''>>
-@end example
-
-@noindent
-That is, it would be a list of lists of strings, alternating between the
-output of the interactor and the output of the @code{ftp} client.  If
-the spawned application had been something non-trivial such as a
-computer algebra system or a command line web search utility,
-then it is easy to see how functions using this combinator can leverage
-off a wealth of available resources.
-
-@node Vacant Address Space,  , Interfaces to External Code, Virtual Code Semantics
-@subsection Vacant Address Space
-
-Not every possible pattern has been used by the virtual machine as a way
-of encoding a function. The following patterns, where @code{@var{a}},
-@code{@var{b}}, and @code{@var{c}} are non-@code{nil} trees, do not
-represent anything useful.
-
-@table @asis
-@item unary forms
-@code{((nil,nil),((nil,nil),(nil,((nil,@var{a}),nil))))}@*
-@code{((nil,nil),((nil,nil),(nil,(nil,(nil,@var{a})))))}
-@item binary forms
-@code{((nil,nil),((nil,nil),(@var{a},@var{b})))}@*
-@code{((nil,nil),((@var{a},nil),(@var{b},nil)))}@*
-@code{((nil,nil),((@var{a},nil),(nil,@var{b})))}
-@item ternary forms
-@code{((nil,nil),((@var{a},@var{b}),(@var{c},nil)))}@*
-@code{((nil,nil),((@var{a},@var{b}),(nil,@var{c})))}@*
-@code{((nil,nil),((@var{a},nil),(@var{b},@var{c})))}@*
-@code{((nil,nil),((nil,@var{a}),(@var{b},@var{c})))}
-@end table
-
-@noindent
-These patterns are detected by the virtual machine simply to avoid blowing
-it up, but they always cause an error message to be reported.
-@cindex @code{unsupported hook}
-@cindex @code{unrecognized combinator}
-
-@table @emph
-@item P55
-For @code{@var{f}} matching any of the first three trees in the above list,@*
-@w{ }@w{ }@w{ }@code{@var{f}_@var{n} @var{x}_@var{n}} =
-[[@code{('unsupported hook',nil)}]]@code{_(@var{n}+1)}
-@item P56
-For the remaining trees @code{@var{f}} in the above list,@*
-@w{ }@w{ }@w{ }@code{@var{f}_@var{n} @var{x}_@var{n}} =
-[[@code{('unrecognized combinator (code @var{m})',nil)}]]@code{_(@var{n}+1)}
-@end table
-
-@noindent
-Here, @code{@var{m}} is a numeric constant dependent on which tree
-@code{@var{f}} was used. The unsupported hook message is meant to be
-more informative than the unrecognized combinator message, suggesting
-that a feature intended for future use is not yet available.
-
-This list has been assembled for the benefit of readers considering the
-addition of backward compatible extensions to the virtual code
-semantics, who are undeterred by the facts that 
-@itemize @bullet
-@item 
-the computational model
-@cindex universality
-is already universal
-@item
-virtual code applications are already
-interoperable with all kinds of high performance software having a text
-based or console interface by way of the @code{interact} combinator
-@item
-an unlimited number of built in library functions can be added
-by way of the @code{library} combinator as described in
-@ref{Implementing new library functions}
-@item
-the C code in @code{avram} makes fairly
-@cindex pointers
-intricate use of pointers with a careful policy of reference counting
-and storage reclamation
-@item
-there is also a performance penalty incurred by
-@cindex reference count
-further extensions to the semantics, even for applications that don't
-use them, because a pattern recognition algorithm in the interpreter has
-more cases to consider.
-@end itemize
-
-Nevertheless, a new functional form combining a pair of functions to be
-interpreted in a new way by the virtual machine could be defined using
-any of the binary forms above, for example, with @code{@var{a}} as the
-virtual code for one of the functions and @code{@var{b}} as that of the
-other. Such a form would not conflict with any existing applications,
-provided that both @code{@var{a}} and @code{@var{b}} are not @code{nil},
-which is true of any valid representation for a function.
-
-Virtual machine architects, take note. There are infinitely many trees
-@cindex trees
-fitting these patterns, but it would be possible to use them up by
-assigning them without adequate foresight. For example, if
-interpretations were assigned to the four ternary forms, the three binary
-forms, and one of the remaining unary forms, then the only
-unassigned pattern could be of the form
-
-@display
-@code{((nil,nil),((nil,nil),(nil,(nil,(nil,@var{a})))))}
-@end display
-
-@noindent
-Assigning an interpretation to it would leave no further room for
-backward compatible expansion. On the other hand, any tree of the
-following form also fits the above pattern,
-
-@display
-@code{((nil,nil),((nil,nil),(nil,(nil,(nil,(@var{b},@var{c}))))))}
-@end display
-
-@noindent
-with any values for @code{@var{b}} and @code{@var{c}}. Different
-meanings could be chosen for the case where both are @code{nil}, both
-are non-@code{nil}, or one is @code{nil} and the other non-@code{nil},
-allowing two unary forms, one binary, and one constant. If at least one
-of these patterns is reserved for future enhancements, then a
-potentially inexhaustible supply of address space remains and there will
-be no need for incompatible changes later.
-
-@node Library Reference, Character Table, Virtual Machine Specification, Top
-@chapter Library Reference
-
-Much of the code developed for @code{avram} may be reusable in other
-projects, so it has been packaged into a library and documented in this
-chapter. For ease of reference, this chapter is organized with a
-separate section for each source file. For the most part, each source
-file encapsulates an abstract type and a number of related functions,
-except for a few cases where C makes such a design awkward. An attempt
-has been made to present the sections in a readable order as far as
-possible.
-
-The documentation in this chapter is confined to the application program
-interface (API), and does not delve unnecessarily into any details of the
-@cindex API
-implementation. A reader wishing to extend, modify, or troubleshoot the
-library itself can find additional information in the source code
-comments. These are more likely to be in sync with the code than this
-document may be, and are more readily accessible to someone working with
-the code.
-
-Some general points pertaining to the library are the following.
-
-@itemize @bullet
-@item Unlike the previous chapter, this chapter uses the word
-``function'' in the C sense rather than the mathematical sense of the word.
-@item Internal errors are internal from the user's point of view, not
-the developer's (@ref{Internal Errors}). Invoking these functions in
-ways that are contrary to their specifications can certainly cause
-internal errors (not to mention segfaults).
-@item The library is definitely not thread safe, and thread safety is
-@cindex threads
-not a planned enhancement. The amount of locking required to make it
-thread safe would probably incur an objectionable performance penalty
-due to the complexity of the shared data structures involved, in
-addition to being very difficult to get right. If you need these
-facilities in a concurrent application, consider spawning a process for
-@cindex spawning processes
-each client of the library so as to keep their address spaces separate.
-@item The library files are built from the standard source
-distribution using GNU @command{libtool}. In the default directory
-hierarchy, they will be found
-either in @file{/usr/lib/libavram.*} or in @file{/usr/local/lib/libavram.*}.
-These directories will differ in a non-standard installation.
-@item The header files will probably be
-located in either @file{/usr/include/avm/*.h} or
-@file{/usr/local/include/avm/*.h} for a standard installation.
-@item All exported functions, macros and constants are
-preceded with @code{avm_}, so as to reduce the chance of name clashes
-with other libraries. Not all type declarations or field identifiers
-follow this convention, because that would be far too tedious.
-@item The library header files are designed to be compatible with C++
-@cindex C++
-but have been tested only with C. Please refer to platform specific
-documentation for further information on how to link library modules
-with your own code.
-@end itemize
-
-@menu
-* Lists::                       
-* Characters and Strings::      
-* File Manipulation::           
-* Invocation::                  
-* Version Management::          
-* Error Reporting::             
-* Profiling::                   
-* Emulation Primitives::        
-* External Library Maintenance::        
-@end menu
-
-@node Lists, Characters and Strings, Library Reference, Library Reference
-@section Lists
-
-The basic data structure used for representing virtual code and data in
-the @code{avram} library is declared as a @code{list}.
-@cindex lists
-@cindex @code{head} field
-@cindex @code{tail} field
-The @code{list} type is a pointer to a structure having a @code{head}
-field and a @code{tail} field, which are also lists. The empty tree,
-@code{nil}, is represented by the C constant @code{NULL}. A tree of the
-form @code{cons(@var{a},@var{b})} is represented in C as a list whose
-@code{head} is the representation of @code{@var{a}} and whose
-@code{tail} is the representation of @code{@var{b}}.
-
-A number of other fields in the structure are maintained automatically
-and should not be touched. For that matter, even the @code{head} and
-@code{tail} fields should be considered read-only. Because of sharing,
-it is almost never valid to modify a list ``in place'', except for cases
-that are already covered by library functions.
-
-@menu
-* Simple Operations::           
-* Recoverable Operations::      
-* List Transformations::        
-* Type Conversions::            
-* Comparison::      
-* Deconstruction Functions::    
-* Indirection::                 
-* The Universal Function::      
-@end menu
-
-@node Simple Operations, Recoverable Operations, Lists, Lists
-@subsection Simple Operations
-
-These functions are declared in the header file @code{lists.h}, which
-should be included in any C source file that uses them with a directive
-such as @code{@w{#include <avm/lists.h>}}. All of these functions except
-the first three have the potential cause a memory overflow. In that
-@cindex overflow
-event, a brief message is written to standard error and the process is
-killed rather than returning to the caller. It is possible for client
-programs requiring more robust behavior to do their own error handling
-by using the alternative versions of these operations described in the
-next section.
-
-@deftypefun void avm_initialize_lists ()
-The function @code{avm_initialize_lists} should be called before any of
-the other ones in this section is called, because it sets up some
-internal data structures. Otherwise, the behavior of the other functions
-is undefined.
-@end deftypefun
-@deftypefun void avm_dispose (list @var{front})
-This function deallocates the memory associated with a given list,
-either by consigning it to a cache maintained internally by the library,
-or by the standard @code{free} function if the cache is full. Shared
-lists are taken into account and handled properly according to a
-reference counting scheme. Lists should be freed only by this function,
-not by using @code{free} directly.
-@end deftypefun
-@deftypefun void avm_count_lists ()
-If a client program aims to do its own storage reclamation, this
-function can be called optionally at the end of a run when it is
-believed that all lists have been freed. If any allocated lists remain
-at large, a warning will be printed to standard error. This function
-therefore provides a useful check for memory leaks. Overhead is small
-enough that it is not infeasible to leave this check in the production
-code.
-@end deftypefun
-@deftypefun list avm_copied (list @var{operand})
-A copy of the argument list is returned by this function. The copy
-remains intact after the original is reclaimed. A typical use might be
-for retaining part of a list after the rest of it is no longer
-needed. In this example, a list @code{x} is traversed by a hypothetical
-@code{visit} function to each item, which is then immediately reclaimed.
-
-@example
-while(x)@{
-   visit(x->head);
-   old_x = x;
-   x = avm_copied(x->tail);       /* the right way */
-   avm_dispose(old_x);
-@}
-@end example
-
-This example allows each item in the list to be visited even as
-previously visited items are reclaimed, because @code{x} is copied at
-each iteration. This example contrasts with the next one, which will
-probably cause a segmentation fault.
-@cindex segmentation fault
-
-@example
-while(x)@{
-   visit(x->head);
-   old_x = x;
-   x = x->tail;                   /* the wrong way */
-   avm_dispose(old_x);
-@}
-@end example
-
-In the second example, a reference is made to a part of a list which no
-longer exists because it has been deallocated.
-
-In fact, the @code{avm_copied} function does nothing but increment a
-reference count, so it is a fast, constant time operation that requires
-@cindex reference count
-no additional memory allocation. Semantically this action is equivalent
-to creating a fresh copy of the list, because all list operations in the
-library deal with reference counts properly.
-@end deftypefun
-@deftypefun list avm_join (list @var{left}, list @var{right})
-This function takes a pair of lists to a list in which the left is the
-head and the right is the tail. It may need to use @code{malloc} to
-allocate additional memory. If there is insufficient memory, an error
-message is written to standard error and the program exits.
-When the list returned by @code{avm_join} is eventually deallocated, the
-lists from which it was built are taken with it and must not be
-referenced again. For example, the following code is an error.
-
-@example
-z = avm_join(x,y);
-@dots{}
-avm_dispose(z);
-avm_print_list(x);         /* error here */
-@end example
-
-To accomplish something similar to this without an error, a copy of
-@code{x} should be made, as in the next example.
-
-@example
-z = avm_join(avm_copied(x),y);
-@dots{}
-avm_dispose(z);
-avm_print_list(x);         /* original x still intact */
-@end example
-@end deftypefun
-@deftypefun void avm_enqueue (list *@var{front}, list *@var{back}, list @var{operand})
-@cindex queues
-A fast simple way of building a list head first is provided by the
-@code{enqueue} function. The @code{front} is a pointer to the beginning
-of the list being built, and the @code{back} is a pointer to the last
-item. The recommended way to use it would be something like this.
-
-@example
-front = back = NULL;
-avm_enqueue(&front,&back,item);
-avm_enqueue(&front,&back,next_item);
-avm_enqueue(&front,&back,another_item);
-@dots{}
-@end example
-
-It might be more typical for the calls to @code{avm_enqueue} to appear
-within a loop. In any case, after the above code is executed, the
-following postconditions will hold.
-
-@example
-front->head == item
-front->tail->head == next_item
-front->tail->tail->head == another_item
-back->head == another_item
-back->tail == NULL
-@end example
-
-The @code{avm_enqueue} function must never be used on a shared list, because
-it modifies its arguments in place. The only practical way to guarantee
-that a list is not shared is to initialize the @code{front} and @code{back} to
-@code{NULL} as shown before the first call to @code{avm_enqueue}, and to
-make no copies of @code{front} or @code{back} until after the last call
-to @code{avm_enqueue}.
-
-Because a list built with @code{avm_enqueue} is not shared, it is one of the
-few instances of a list that can have something harmlessly appended to
-it in place. For example, if the next line of code were
-
-@example
-back->tail = rest_of_list;
-@end example
-
-that would be acceptable assuming @code{rest_of_list} is not shared and
-does not conceal a dangling or cyclic reference, and if nothing further
-were enqueued.
-
-The items that are enqueued into a list are not copied and will be
-deallocated when the list is deallocated, so they must not be referenced
-thereafter. A non-obvious violation of this convention is implicit in
-the following code.
-
-@example
-@dots{}
-avm_enqueue(&front,&back,x->head);
-@dots{}
-avm_dispose(front);
-avm_print_list(x);      /* error here  */
-@end example
-
-This code might cause a segmentation fault because of the reference to
-@cindex segmentation fault
-@code{x} after its head has been deallocated. The following code is
-subject to the same problem,
-
-@example
-@dots{}
-avm_enqueue(&front,&back,x->head);
-@dots{}
-avm_dispose(x);
-avm_print_list(front);       /* error here */
-@end example
-
-as is the following.
-
-@example
-@dots{}
-avm_enqueue(&front,&back,x->head);
-@dots{}
-avm_dispose(x);       /* front is now impossible to reclaim */
-avm_dispose(front);
-@end example
-
-The problem with the last example is that it is not valid even to
-dispose of the same list more than once, albeit indirectly.
-
-If part of a list is intended to be enqueued temporarily or
-independently of its parent, the list should be copied explicitly, as
-the following code demonstrates.
-
-@example
-@dots{}
-avm_enqueue(&front,&back,avm_copied(x->head));   /* correct */
-@dots{}
-avm_dispose(front);
-avm_print_list(x);
-@end example
-@end deftypefun
-@deftypefun counter avm_length (list @var{operand})
-A @code{counter} is meant to be the longest unsigned integer available
-@cindex @code{counter}
-on the host machine, and is defined in @code{common.h}, which is
-automatically included whenever @code{lists.h} is included. The
-@code{avm_length} function returns the number of items in a list. If a
-list is @code{NULL}, a value of zero is returned. There is a possibility
-of a counter overflow error from this function (@ref{Overflow Errors}),
-but only on a platform where the @code{counter} type is shorter than the
-address length.
-@end deftypefun
-@deftypefun counter avm_area (list @var{operand})
-This function is similar to @code{avm_length}, but it treats its
-argument as a list of lists and returns the summation of their lengths.
-@end deftypefun
-@deftypefun list avm_natural (counter @var{number})
-@cindex naturals
-This function takes a @code{counter} to its representation as a list, as
-described in @ref{Representation of Numeric and Textual Data}. That is,
-the number is represented as a list of bits, least significant bit
-first, with each zero bit represented by @code{NULL} and each one bit
-represented by a list whose @code{head} and @code{tail} are @code{NULL}.
-@end deftypefun
-@deftypefun void avm_print_list (list @var{operand})
-The @code{avm_print_list} function is not used in any production code
-but retained in the library for debugging purposes. It prints a list to
-@cindex standard output
-standard output using an expression involving only commas and parentheses,
-as per the @code{silly} syntax (@ref{A Simple Lisp Like Language}). The
-results quickly become unintelligible for lists of any significant size.
-The function is recursively defined and will crash in the event of a
-stack overflow, which will occur in the case of very large or cyclic
-lists.
-@end deftypefun
-@deftypefun list avm_position (list @var{key}, list @var{table}, int *@var{fault})
-This function searches for a @var{key} in a short @var{table} where
-each item is a possible key.
-
-If it's not found, a @code{NULL} value is returned. If it's
-found, a list representing a character encoding according to
-@ref{Character Table} is returned. 
-
-The ascii code of the character corresponding to the returned list is
-the position of the @var{key} in the @var{table}, assuming position
-numbers start with 1. 
-
-The table should have a length of 255 or less. If it's longer and the
-@var{key} is found beyond that range, the higher order bits of the
-position number are ignored.
-
-The integer referenced by @var{fault} is set to a non-zero value in
-the event of a memory overflow, which could happen in the course of
-the list comparisons necessary for the search.
-@end deftypefun
-
-
-@node Recoverable Operations, List Transformations, Simple Operations, Lists
-@subsection Recoverable Operations
-
-The functions in this section are similar to the ones in the previous
-section except with regard to error handling. Whereas the other ones
-cause an error message to be printed and the process to exit in the
-event of an overflow, these return to the caller, whose responsibility
-it is to take appropriate action. The functions in both sections are
-declared in @file{lists.h}, and should be preceded by a call to
-@code{avm_initialize_lists}.
-
-@deftypefun list avm_recoverable_join (list @var{left}, list @var{right})
-This function is similar to @code{avm_join}, but will return a
-@code{NULL} pointer if memory that was needed can not be allocated. A
-@code{NULL} pointer would never be the result of a join under normal
-circumstances, so the overflow can be detected by the caller. Regardless
-of whether overflow occurs, the arguments are deallocated by this function
-and should not be referenced thereafter.
-@end deftypefun
-@deftypefun void avm_recoverable_enqueue (list *@var{front}, list *@var{back}, list @var{operand}, int *@var{fault})
-This version of the enqueue function will dispose of the @code{@var{operand}} if there
-isn't room to append another item and set @code{*@var{fault}} to a non-zero
-value. Other than that, it does the same as @code{avm_enqueue}.
-@end deftypefun
-@deftypefun counter avm_recoverable_length (list @var{operand})
-This function checks for arithmetic overflow when calculating the length
-of a list, and returns a zero value if overflow occurs. The caller can
-detect the error by noting that zero is not the length of any list other
-than @code{NULL}. This kind of overflow is impossible unless the host
-does not have long enough integers for its address space.
-@end deftypefun
-@deftypefun counter avm_recoverable_area (list @var{operand}, int *@var{fault})
-This function is similar to @code{avm_area}, except that it reacts
-differently to arithmetic overflow. The @code{fault} parameter should be
-the address of an integer known to the caller, which will be set to a
-non-zero value if overflow occurs. In that event, the value of zero will
-also be returned for the area. Note that it is possible for non-empty
-lists to have an area of zero, so this condition alone is not indicative
-of an error.
-@end deftypefun
-@deftypefun list avm_recoverable_natural (counter @var{number})
-This function returns the @code{list} representation of a native
-unsigned long integer, provided that there is enough memory, similarly to the
-@code{avm_natural} function. Unlike that function, this one will return
-a value of @code{NULL} rather than exiting the program in the event of a
-memory overflow. The overflow can be detected by the caller insofar as a
-@code{NULL} @code{list} does not represent any number other than zero.
-@end deftypefun
-
-@node List Transformations, Type Conversions, Recoverable Operations, Lists
-@subsection List Transformations
-
-Some functions declared in @file{listfuns.h} are used to implement the
-operations described in @ref{List Functions}. These functions are able
-to report error messages in the event of overflow or other exceptional
-@cindex overflow
-@cindex exceptions
-@cindex error messages
-conditions, as described in @ref{Error Messages}. The error messages are
-represented as lists and returned to the caller. The occurrence of an
-error can be detected by the @code{*@var{fault}} flag being set to a
-non-zero value. None of these functions ever causes a program exit except
-in the event of an internal error.
-
-@deftypefun void avm_initialize_listfuns ()
-This has to be called before any of the other functions in this section
-is called. It initializes the error message lists, among other things.
-@end deftypefun
-@deftypefun void avm_count_listfuns ()
-At the end of a run, a call to this function can verify that no
-unreclaimed storage attributable to these functions persists. If it
-does, a warning is printed to standard error. If @code{avm_count_lists}
-is also used, it must be called after this function.
-@end deftypefun
-@deftypefun list avm_reversal (list @var{operand}, int *@var{fault})
-The reversal of the list is returned by this function if no overflow
-occurs. A non-zero @code{*@var{fault}} and an error message are returned
-otherwise. The original @code{@var{operand}} still exists in its original
-order after this function is called. The amount of additional storage
-allocated is proportional only to the length of the list, not the size
-of its contents.
-@end deftypefun
-@deftypefun list avm_distribution (list @var{operand}, int *@var{fault})
-This function performs the operation described in @ref{Distribute}. The
-invalid distribution message is returned in the event of a @code{NULL}
-operand. Otherwise, the returned value is the distributed list. In any event,
-the @code{@var{operand}} is unaffected.
-@end deftypefun
-@deftypefun list avm_concatenation (list @var{operand}, int *@var{fault})
-@cindex concatenation
-The @code{@var{operand}} is treated as a pair of lists to be concatenated, with the
-left one in the @code{head} field and the right one in the @code{tail}
-field. The invalid concatenation message is returned in the event of a
-@code{NULL} @code{@var{operand}}. The result returned otherwise is the concatenation
-of the lists, but the given @code{@var{operand}} still exists unchanged.
-@end deftypefun
-@deftypefun list avm_transposition (list @var{operand}, int *@var{fault})
-The operation performed by this function corresponds to that of
-@ref{Transpose}. Unlike other functions in this section, the operand
-passed to this function is deallocated, and must not be referenced
-@cindex @code{transpose}
-thereafter. The transposed list is accessible as the returned value of
-this function. If the original @code{@var{operand}} is still needed
-after a call to @code{avm_transposition}, only a copy of it should be
-passed to it, obtained from @code{avm_copied}. The invalid transpose
-error message is the result if the operand does not represent a list of equal
-length lists.
-@end deftypefun
-@deftypefun list avm_membership (list @var{operand}, int *@var{fault})
-This function computes the membership predicate described in
-@cindex @code{member}
-@ref{Member}. The operand is a list in which the @code{tail} field is
-a list that will be searched for the item in the @code{head}. If the
-item is not found, a @code{NULL} list is returned, but otherwise a list
-with @code{NULL} @code{head} and @code{tail} fields is returned. If the
-operand is @code{NULL}, an error message of invalid membership is
-returned and @code{*@var{fault}} is set to a non-zero value.
-
-The @code{avm_membership} function calls @code{avm_binary_comparison}
-in order to compare lists, so the same efficiency and side-effect
-considerations are relevant to both (@ref{Comparison}). It is not
-necessary to @code{#include} the header file @code{compare.h} or to
-call @code{avm_initialize_compare} in order to use
-@code{avm_membership}, because they will be done automatically.
-@end deftypefun
-@deftypefun list avm_binary_membership (list @var{operand}, list @var{members}, int *@var{fault});
-This function is the same as @code{avm_membership} except that it
-allows the element and the set of members to be passed as separate
-lists instead of being the head and the tail of the same list.
-@end deftypefun
-@deftypefun list avm_measurement (list @var{operand}, int *@var{fault})
-This function implements the operation described in @ref{Weight}, which
-pertains to the weight of a tree. The returned value of this function is
-a list encoding the weight as a binary number, unless a counter overflow
-occurs, in which case it's an error message. As noted previously, the
-weight of a tree can easily be exponentially larger than the amount of
-@cindex native integer arithmetic
-memory it occupies, but this function uses native integer arithmetic for
-performance reasons. Hence, a counter overflow is a real
-possibility.
-@end deftypefun
-
-@node Type Conversions, Comparison, List Transformations, Lists
-@subsection Type Conversions
-
-External library functions accessed by the @code{library} combinator
-as explained in @ref{Library combinator} may operate on data other
-than the @code{list} type usually used by @code{avram}, such as
-floating point numbers and arrays, but a virtual code application must
-be able to represent the arguments and results of these functions in
-order to use them. As a matter of convention, a data structure
-occupying @var{size} bytes of contiguous storage on the host machine
-appears as a list of length @var{size} to a virtual code application,
-in which each item corresponds to a byte, and is represented according
-to @ref{Character Table}.
-
-In principle, a virtual code application invoking a library function
-to operate on a contiguous block of data, such as an IEEE double
-precision number, for example, would construct a list of eight
-character representations (one for each byte in a double precision
-number), and pass this list as an argument to the library
-function. The virtual machine would transparently convert this
-representation to the native floating point format, evaluate the
-function, and convert the result back to a list.  In practice, high
-level language features beyond the scope of this document would
-insulate the programmer from some of the details on the application
-side as well.
-
-To save the time of repeatedly converting between the list
-representation and the contiguous native binary representation, the
-structure referenced by a @code{list} pointer contains a @code{value}
-@cindex value field
-field which is a @code{void} pointer to a block of memory of
-unspecified type, and serves as a persistent cache of the value
-represented by the list. This field normally should be managed by the
-API rather than being accessed directly by client modules, but see the
-code in @file{mpfr.c} for an example of a situation in which it's
-appropriate to break this rule. (Generally these situations involve
-library functions operating on non-contiguous data.)
-
-@menu
-* Primitive types::
-* One dimensional arrays::
-* Two dimensional arrays::
-* Related utility functions::
-@end menu
-
-@node Primitive types, One dimensional arrays, Type Conversions, Type Conversions
-@subsubsection Primitive types
-
-A pair of functions in support of this abstraction is prototyped in
-@file{listfuns.h}.  These functions will be of interest mainly to
-developers wishing to implement an interface to a new library module
-and make it accessible on the virtual side by way of the
-@code{library} combinator (@ref{Library combinator}).
-
-@deftypefun void *avm_value_of_list (list @var{operand}, list *@var{message}, int *@var{fault})
-This function takes an @var{operand} representing a value used by a
-library function in the format described above (@ref{Type
-Conversions}) and returns a pointer to the value.
-
-The @code{value} field in the @var{operand} normally will point to the
-block of memory holding the value, and the @var{operand} itself will
-be a list of character representations whose binary encodings spell
-out the value as explained above.
-
-The @code{value} field need not be initialized on entry but it will be
-initialized as a side effect of being computed by this function. If it
-has been initialized due to a previous call with the same
-@var{operand}, this function is a fast constant time operation.
-
-The caller should not free the pointer returned by this function
-because a reference to its value will remain in the
-@var{operand}. When the @var{operand} itself is freed by
-@code{avm_dispose} (@ref{Simple Operations}), the value will go with it.
-
-If an error occurs during the evaluation of this function, the integer
-referenced by @var{fault} will be set to a non-zero value, and the
-list referenced by @var{message} will be assigned a representation of
-a list of strings describing the error. The @var{message} is freshly
-created and should be freed by the caller with @code{avm_dispose}
-when no longer needed.
-
-Possible error messages are @code{<'missing value'>}, in the case of
-@cindex missing value
-an empty @var{operand}, @code{<'invalid value'>} in the case of an
-@cindex invalid value
-@var{operand} that is not a list of character representations, and
-@code{<'memory overflow'>} if there was insufficient space to allocate
-the result.
-@end deftypefun 
-
-@deftypefun list avm_list_of_value (void *@var{contents}, size_t @var{size}, int *@var{fault})
-This function performs the inverse operation of
-@code{avm_value_of_list}, taking the address of an area of
-contiguously stored data and its @var{size} in bytes to a list
-representation. The length of the list returned is equal to the number
-of bytes of data, @var{size}, and each item of the list is a character
-representation for the corresponding byte as given by @ref{Character
-Table}.
-
-A copy of the memory area is made so that the original is no longer
-needed and may be freed by the caller. A pointer to this copy is
-returned by subsequent calls to @code{avm_value_of_list} when the
-result returned by this function is used as the @var{operand}
-parameter.
-
-If there is insufficient memory to allocate the result, the integer
-referenced by @var{fault} is set to a non-zero value, and a copy of
-the message @code{<'memory overflow'>} represented as a list is
-returned. This function could also cause a segmentation fault if it is
-@cindex segmentation fault
-passed an invalid pointer or a @var{size} that overruns the storage
-area.  However, it is acceptable to specify a @var{size} that is less
-than the actual size of the given memory area to construct a list
-representing only the first part of it. The @var{size} must always be
-greater than zero.
-@end deftypefun 
-
-@node One dimensional arrays, Two dimensional arrays, Primitive types, Type Conversions
-@subsubsection One dimensional arrays
-
-A couple of functions declared in @file{matcon.h} are concerned mainly
-with one dimensional arrays or vectors. They have been used for
-@cindex arrays
-vectors of double precision and complex numbers, but are applicable to
-@cindex vectors
-any base type that is contiguous and of a fixed size.
-
-The motivation for these functions is to enable a developer to present
-an API to virtual code applications wherein external library functions
-operating natively on one dimensional arrays of numbers are seen from
-the virtual side to operate on lists of numbers. Lists are the
-preferred container for interoperability with virtual code
-applications.
-
-@deftypefun void *avm_vector_of_list (list @var{operand}, size_t @var{item_size}, list *@var{message}, int *@var{fault})
-This function calls @code{avm_value_of_list} (@ref{Primitive types})
-for each item of the @var{operand} and puts all the values together
-into one contiguous block, whose address is returned.
-
-The given @var{item_size} is required to be the lengths of the items,
-all necessarily equal, and is required only for validation. For
-example, @var{item_size} is 8 for a list of double precision numbers,
-because they occupy 8 bytes each and are represented as lists of length 8.
-
-The total number of bytes allocated is the product of @var{item_size}
-and the length of the @var{operand}. Unlike the case of
-@code{avm_value_of_list} (@ref{Primitive types}), the result returned
-by this function should be explicitly freed by the caller when no
-longer needed.
-
-Any errors such as insufficient memory cause the integer referenced by
-@var{fault} to be assigned a non-zero value and the @var{message} to
-be assigned an error message represented as a list of strings. An
-error message of @code{<'bad vector specification'>} is possible in
-the case of an empty @var{operand} or one whose item lengths don't
-match the given @var{item_size}. Error messages caused by
-@code{avm_value_of_list} can also be generated by this function. Any
-non-empty error message should be reclaimed by the caller using
-@code{avm_dispose} (@ref{Simple Operations}). If an error occurs, a
-@code{NULL} pointer is returned.
-@end deftypefun 
-
-@deftypefun list avm_list_of_vector (void *@var{vector}, int @var{num_items}, size_t @var{item_size}, int *@var{fault})
-This function takes it on faith that an array of dimension
-@var{num_items} in which each item occupies @var{item_size} bytes
-begins at the address given by @var{vector}. A list representation of
-each item in the array is constructed by the function
-@code{avm_list_of_value} (@ref{Primitive types}), and a list of all of
-the lists thus obtained in order of their position in the array is
-returned.
-
-In the event of any errors caused by @code{avm_list_of_value} or
-errors due to insufficient memory, the error message is returned as
-the function result, and the integer referenced by @var{fault} is
-assigned a non-zero value. The error message is in the form of a list
-of character string representations. A segmentation fault is possible
-@cindex segmentation fault
-if @var{vector} is not a valid pointer or if the array size implied by
-misspecified values of @var{num_items} and @var{item_size}
-exceeds its actual size.
-@end deftypefun
-
-@node Two dimensional arrays, Related utility functions, One dimensional arrays, Type Conversions
-@subsubsection Two dimensional arrays
-
-Several other functions in @file{matcon.h} are meant to support
-conversions between matrices represented as lists of lists and arrays
-in a variety of representations. Dense matrices either square or
-@cindex matrices
-rectangular are accommodated, and symmetric square matrices can be
-stored with redundant entries omitted in either upper trangular or
-lower triangular format.
-
-Similarly to the vector operations (@ref{One dimensional arrays})
-these functions are intended to allow a developer to present an
-interface to external libraries based on lists rather than arrays.
-
-The preferred convention for virtual code applications is to represent
-a matrix as a list of lists of entities (typically numbers), with
-one list for each row of the matrix. For example, a 3 by 3 matrix
-containing a value of @code{aij} in the @code{i}-th row and the
-@code{j}-th column would be represented by this list of three lists.
-
-@example
-<
-   <a11,a12,a13>,
-   <a21,a22,a23>,
-   <a31,a32,a33>>
-@end example
-
-@noindent
-Such a representation is convenient for manipulation by
-virtual machine combinators, for example @code{transpose}
-(@ref{Transpose}), and is readily identified with the matrix
-it represents.
-
-If a matrix is symmetric (that is, with @code{aij} equal to
-@code{aji} for all values of @code{i} and @code{j}), only the lower
-triangular portion needs to be stored because the other entries are
-@cindex triangular matrix
-redundant.  The list representatation would be something like this.
-
-@example
-<
-   <a11>,
-   <a21,a22>,
-   <a31,a32,a33>>
-@end example
-
-Another alternative for representing a symmetric matrix is to store only the
-upper triangular portion. In this case, a list such as the following would be used.
-
-@example
-<
-   <a11,a12,a13>,
-   <a22,a23>,
-   <a33>>
-@end example
-
-@noindent
-The upper and lower triangular representations are distinguishable by
-whether or not the row lengths form an increasing sequence.
-
-In addition to representing symmetric matrices, these upper and lower
-@cindex symmetric matrix
-triangular forms are also appropriate for representing matrices whose
-remaining entries are zero, such as the factors in an LU
-decomposition.
-@cindex LU decomposition
-
-@deftypefun void *avm_matrix_of_list (int @var{square}, int @var{upper_triangular}, int @var{lower_triangular}, int @var{column_major}, list @var{operand}, size_t @var{item_size}, list *@var{message}, int *@var{fault})
-
-This function converts a matrix in one of the list representations
-above to a contiguous array according to the given specifications.
-The array can contain elements of any fixed sized type of size
-@var{item_size}. The memory for it is allocated by this function and
-it should be freed by the caller when no longer needed.
-
-The input matrix is given by the list parameter, @var{operand}, and
-its format is described by the integer parameters @var{square},
-@var{upper_triangular}, and @var{lower_triangular}. The number of
-bytes occupied by each entry is given by @var{item_size}. 
-
-To the extent these specifications are redundant, they are used for
-validation. If any of the following conditions is not met, the integer
-referenced by @var{fault} is assigned a non-zero value and a copy
-of the message @code{<'bad matrix specification'>} represented as
-a list is assigned to the list referenced by @var{message}. Errors
-are also possible due to insufficient memory.
-
-@itemize @bullet
-@item
-The @var{operand} must be a list of lists of lists such that 
-each item of each item is has a length of @var{item_size},
-and its items consist of character representations as
-required by @code{avm_value_of_list} (@ref{Primitive types}).
-@item
-If the lengths of the top level lists in the @var{operand} form an
-increasing sequence, the lower triangular representation is assumed
-and the @var{lower_triangular} parameter must have a non-zero value.
-@item 
-If the lengths of the top level lists in the @var{operand} form a
-decreasing sequence, the upper triangular representation is assumed
-and the @var{upper_triangular} parameter must have a non-zero value.
-@item
-At least one of @var{upper_triangular} or @var{lower_triangular} must
-be zero.
-@item
-If @var{square} has a non-zero value, then either all items of the
-@var{operand} must have the same length as the operand, or if it's
-triangular, then the longest one must have the same length as the
-operand.
-@item
-If the @var{operand} is neither square nor a triangular form, all
-items of it are required to have the same length.
-@end itemize
-
-The parameters @var{upper_triangular} or @var{lower_triangular} may be
-set to non-zero values even if the @var{operand} is not in one of the
-upper or lower triangular forms discussed above. In this case, the
-@var{operand} must be square or rectangular (i.e., with all items the
-same length), and the following interpretations apply.
-
-@itemize @bullet
-@item
-If @var{upper_triangular} is non-zero, the diagonal elements and the
-upper triangular portion of the input matrix are copied to the output.
-The lower triangle of the input is ignored and the lower triangle of
-the output is left uninitialized.
-@item
-If @var{lower_triangular} is non-zero, the diagonal elements and the
-lower triangular portion of the input matrix are copied to the output.
-The upper triangle of the input is ignored and the upper triangle of
-the output is left uninitialized.
-@end itemize
-
-The @var{column_major} parameter affects the form of the output array.
-If it is zero, then each row of the input matrix is stored in a
-contiguous block of memory in the output array, and if it is non-zero,
-each column is stored contiguously. 
-@cindex Fortran
-The latter representation is also
-known as Fortran order and may be required by library functions
-written in Fortran.
-
-In all cases when a triangular form is specified, part of the output
-matrix is left uninitialized. The redundant entries may be assigned if
-required by the @code{avm_reflect_matrix} function (@ref{Related
-utility functions}).
-@end deftypefun
-
-@deftypefun list avm_list_of_matrix (void *@var{matrix}, int @var{rows}, int @var{cols}, size_t @var{item_size}, int *@var{fault})
-This function performs an inverse operation to
-@code{avm_matrix_of_list} by taking the address of a matrix stored as
-a contiguous array in the parameter @var{matrix} and constructing the
-list representation as discussed above. Only square and rectangular
-matrices in row major order are supported, but see
-@code{avm_matrix_transposition} for a way to convert between row major
-@cindex column major order
-and column major order (@ref{Related utility functions}).
-
-The parameters @var{rows}, @var{cols}, and @var{item_size} describe
-the form of the matrix. The list returned as a result will have a
-length of @var{rows}, and each item will be a list of length
-@var{cols}. Each item of the result corresponds to a row of the
-matrix, and each item of the items represents the an entry of the
-matrix as a list of length @var{item_size}. These items could be
-passed to @code{avm_value_of_list}, for example, to obtain their
-values (@ref{Primitive types}).
-
-Memory is allocated by this function to create the list, which can be
-reclaimed by @code{avm_dispose} (@ref{Simple Operations}). If there is
-insufficient memory, the integer referenced by @var{fault} is assigned
-a non-zero value and the result returned is a list representation of
-the message @code{<'memory overflow'>}. The error message be reclaimed
-by the caller as well using @code{avm_dispose}.
-@end deftypefun 
-
-A packed storage representation for symmetric square matrices and
-@cindex packed arrays
-triangular matrices is of interest because it is used by some library
-functions, notably those in @code{LAPACK}, to save memory and thereby
-accommodate larger problems. In this representation, column major
-@cindex column major order
-order is assumed, and either the lower or the upper triangle of the
-matrix is not explicitly stored. For example, a lower triangular
-@cindex triangular matrix
-matrix whose list representation corresponds to
-
-@example
-<
-   <a11>,
-   <a21,a22>,
-   <a31,a32,a33>,
-   <a41,a42,a43,a44>>
-@end example
-
-@noindent
-would be stored according to the memory map
-@cindex matrix memory map
-
-@example
-[a11 a21 a31 a41 a22 a32 a42 a33 a43 a44]
-@end example
-
-@noindent
-with @code{a11} at the beginning address. An upper triangular matrix
-
-@example
-<
-   <a11,a12,a13,a14>,
-   <a22,a23,a24>,
-   <a33,a34>,
-   <a44>>
-@end example
-
-@noindent
-would be stored according to the memory map
-
-@example
-[a11 a12 a22 a13 a23 a33 a14 a24 a34 a44].
-@end example
-
-A couple of functions converting between list representations and
-packed array format are provided as described below.
-
-@deftypefun void *avm_packed_matrix_of_list (int @var{upper_triangular}, list @var{operand}, int @var{n}, size_t @var{item_size}, list *@var{message}, int *@var{fault})
-
-If the @var{operand} is a list in one of the triangular forms
-explained above, then the @var{upper_triangular} parameter must be
-consisitent with it, being non-zero if the @var{operand} is upper
-triangular and zero otherwise.
-
-If the @var{operand} is not in a triangular form, then each item of
-the operand must be a list of length @var{n}. In this case, the
-@var{upper_triangular} parameter indicates which triangle of the
-operand should be copied to the result, and the other triangle is
-ignored.
-
-In either case, the operand must have a length of @var{n}, and the
-items of its items must be lists of length @var{item_size} containing
-character representations as required by @code{avm_value_of_list}
-(@ref{Primitive types}).
-
-If the input parameters are inconsistent or if there is insufficient
-memory to allocate the result, the integer referenced by @var{fault}
-is assigned a non-zero value, and the list referenced by @var{message}
-is assigned a copy of the list representation of @code{<'bad matrix
-specification'>} or @code{<'memory overflow'>}, respectively. A
-non-empty message must be reclaimed by the caller using
-@code{avm_dispose} (@ref{Simple Operations}).
-
-If there are no errors, the result is a pointer to a packed array
-representation of the @var{operand} as explained above. The memory for
-this result is allocated by this function and should be freed by the
-caller when no longer required. The number of bytes allocated will be
-@var{item_size} * (@var{n} * (@var{n} + 1))/2.
-@end deftypefun
-
-@deftypefun list avm_list_of_packed_matrix (int @var{upper_trianguler},void *@var{operand}, int @var{n}, size_t @var{item_size}, int *@var{fault})
-
-This function performs an inverse operation to that of
-@code{avm_packed_matrix_of_list} given the address of a packed matrix
-stored according to one of the memory maps discussed above. The
-@var{operand} parameter holds the address, the parameter @var{n} gives
-the number of rows, and the @var{upper_triangular} parameter specifies
-which of the two possible memory maps to assume.
-
-If there is sufficient memory, the result returned is a list in one of
-the triangular forms described above, being upper triangular if the
-@var{upper_triangular} parameter is non-zero, with values of length
-@var{item_size} taken from the array.
-
-In the event of a memory overflow, the integer referenced by
-@var{fault} is assigned a non-zero value and the result is a copy of
-the message @code{<'memory overflow'>} represented as a list. A
-@cindex segmentation fault
-segmentation fault is possible if this function is passed an invalid
-pointer or dimension.
-@end deftypefun 
-
-@node Related utility functions, , Two dimensional arrays, Type Conversions
-@subsubsection Related utility functions
-
-A small selection of additional functions that are likely to be of use
-to developers concerned with matrix operations has been incorporated
-into the API to save the trouble of reinventing them, although doing
-so would be straightforward. They are described in this section
-without further motivation.
-
-@deftypefun void *avm_matrix_transposition  (void *@var{matrix}, int @var{rows}, int @var{cols}, size_t @var{item_size})
-This function takes the address of an arbitrary rectangular
-@var{matrix} represented as a contiguous array (not a list) and
-transposes it in place. That is, this function transforms
-an @var{m} by @var{n} matrix to an @var{n} by @var{m} matrix
-by exchanging the @var{i},@var{j}th element with the
-@var{j},@var{i}th element for all values of @var{i} and @var{j}.
-
-The numbers of rows and columns in the @var{matrix} are given by the
-parameters @var{rows} and @var{cols}, respectively, and the size of
-the entries in bytes is given by @var{item_size}.
-
-The @var{matrix} is assumed to be in row major order, but this
-function is applicable to matrices in column major order if the caller
-@cindex column major order
-passes the number of columns in @var{rows} and the number of rows in
-@var{cols}.
-
-Alternatively, this function can be seen as a conversion between the
-row major and the column major representation of a matrix. An @var{m}
-by @var{n} matrix in row major order will be transformed to the same
-@var{m} by @var{n} matrix in column order, or from column order to row
-order.
-
-A notable feature of this function is that it allocates no memory so
-there is no possibility of a memory overflow even for very large
-matrices, unlike a naive implementation which would involve making a
-temporary copy of the matrix. There is a possibility of a segmentation
-@cindex segmentation fault
-fault if invalid pointers or dimensions are given.
-@end deftypefun 
-
-@deftypefun void *avm_matrix_reflection (int @var{upper_triangular}, void *@var{matrix}, int @var{n}, size_t @var{item_size})
-This function takes a symmetric square @var{matrix} of dimension
-@var{n} containing entries of @var{item_size} bytes each and fills in
-the redundant entries.
-
-If @var{upper_triangular} is non-zero, the
-upper triangle of the @var{matrix} is copied to the lower triangle. If
-@var{upper_triangular} is zero, the lower triangular entries are
-copied to the upper triangle.
-
-These conventions assume row major order. If the @var{matrix} is in
-@cindex row major order
-column major order, then the caller can either transpose it in place
-@cindex column major order
-before and after this function by @code{avm_matrix_transposition}, or
-can complement the value of @var{upper_triangular}.
-
-Note that this function may be unnecessary for @code{LAPACK} library
-functions that ignore the redundant entries in a symmetric matrix,
-because they can be left uninitialized, but it is included for the
-sake of completeness.
-@end deftypefun 
-
-@deftypefun list *avm_row_number_array (counter @var{m}, int *@var{fault})
-A fast, memory efficient finite map from natural numbers to their list
-representations can be obtained by using this function as an
-alternative to @code{avm_natural} or @code{avm_recoverable_natural}
-when repeated evaluations of numbers within a known range are
-required (@ref{Simple Operations} and @ref{Recoverable Operations}).
-
-Given a positive integer @var{m}, this function allocates and returns
-an array of @var{m} lists whose @var{i}th entry is the list
-representation of the number @var{i} as explained in
-@ref{Representation of Numeric and Textual Data}.
-
-An amount of memory proportional to @var{m} is used for the array and
-its contents. If there is insufficient memory, a @code{NULL} value is
-returned and the integer referenced by @var{fault} is set to a
-non-zero value.
-@end deftypefun 
-
-@deftypefun void avm_dispose_rows (counter @var{m}, list *@var{row_number})
-This function reclaims an array @var{row_number} of size @var{m}
-returned by @code{avm_row_number_array}, and its contents if any. A
-@code{NULL} pointer is allowed as the @var{row_number} parameter and
-will have no effect, but an uninitialized pointer will cause a
-@cindex segmentation fault
-segmentation fault.
-@end deftypefun 
-
-@deftypefun void avm_initialize_matcon ();
-This function initializes some static variables used by the functions
-declared in @file{matcon.h} and should be called before any of them is
-called or they might not perform according to specifications.
-@end deftypefun 
-
-@deftypefun void avm_count_matcon ();
-This function frees the static variables allocated by
-@code{avm_initialize_matcon} and is used to verify the absence of
-memory leaks. It should be called after the last call to any functions
-in @file{matcon.h} but before @code{avm_count_lists} if the latter
-is being used (@ref{Simple Operations}).
-@end deftypefun 
-
-
-@node Comparison, Deconstruction Functions, Type Conversions, Lists
-@subsection Comparison
-
-The file @file{compare.h} contains a few function declarations
-pertaining to the computation of the comparison predicate described in
-@ref{Compare}. Some of the work is done by static functions in
-@file{compare.c} that are not recommended entry points to the library.
-
-@deftypefun void avm_initialize_compare ()
-@cindex @code{compare}
-This function should be called once before the first call to
-@code{avm_comparison}, as it initializes some necessary internal data
-structures.
-@end deftypefun
-@deftypefun void avm_count_compare ()
-This function can be used to check for memory leaks, by detecting
-unreclaimed storage at the end of a run. The data structures relevant to
-comparison that could be reported as unreclaimed are known as ``decision''
-nodes, but these should always be handled properly by the library
-without intervention. If @code{avm_count_lists} is also being used, the
-call to this function must precede it.
-@end deftypefun
-@deftypefun list avm_comparison (list @var{operand}, int *@var{fault})
-This function takes a list operand representing a pair of trees and
-returns a list representing the logical value of their equality. If the
-operand is @code{NULL}, a message of invalid comparison is returned and
-the @code{*@var{fault}} is set to a non-zero value. If the @code{head} of the
-operand is unequal to the @code{tail}, a @code{NULL} value is
-returned. If they are equal, a list is returned whose @code{head} and
-@code{tail} are both @code{NULL}. The equality in question is structural
-@cindex pointer equality
-rather than pointer equality.
-
-The list operand to this function may be modified by this function, but
-not in a way that should make any difference to a client program. If two
-lists are found to be equal, or if even two sublists are found to be
-equal in the course of the comparison, one of them is deallocated and
-made to point to the other. This action saves memory and may make
-subsequent comparisons faster. However, it could disrupt client programs
-@cindex pointers
-that happen to be holding stale list pointers.
-
-@cindex discontiguous field
-As of @code{avram} version 0.6.0, a logical field called
-@code{discontiguous} has been added to the @code{node} record type
-declared in @code{lists.h}, which is checked by the comparison
-function. If a list node has its @code{discontiguous} field set to a
-non-zero value, and if it also has a non-null @code{value} field, then
-it won't be deallocated in the course of comparison even if it is
-found to be equal to something else. This feature can be used by
-client modules to create lists in which value fields refer to data
-structures that are meant to exist independently of them. See
-@file{mpfr.c} for an example.
-
-This function is likely to have better performance and memory usage than
-a naive implementation of comparison, for the above reasons and also
-because of optimizations pertaining to comparison of lists representing
-characters. Moreover, it is not subject to stack overflow exceptions
-@cindex recursion
-because it is not written in a recursive style.
-@end deftypefun
-
-@deftypefun list avm_binary_comparison (list @var{left_operand}, list @var{right_operand}, int *@var{fault});
-This function is the same as @code{avm_comparison} except that it
-allows the left and right operands to be passed as separate lists
-rather than taking them from the @code{head} and the @code{tail} of a
-single list.
-@end deftypefun
-
-@node Deconstruction Functions, Indirection, Comparison, Lists
-@subsection Deconstruction Functions
-
-A fast native implementation of the deconstruction operation is provided
-@cindex deconstruction
-by the functions declared in @file{decons.h}.
-
-@deftypefun void avm_initialize_decons ()
-This should be called prior to the first call to
-@code{avm_deconstruction}, so as to initialize some necessary internal
-data structures. Results will be undefined if it is not.
-@end deftypefun
-@deftypefun void avm_count_decons ()
-For ecologically sound memory management, this function should be called
-at the end of a run to verify that there have been no leaks due to the
-deconstruction functions, which there won't be unless the code in
-@file{decons.c} has been ineptly modified. An error message to the
-effect of unreclaimed ``points'' could be the result otherwise.
-@end deftypefun
-@deftypefun list avm_deconstruction (list @var{pointer}, list @var{operand}, int *@var{fault})
-Deconstructions are performed by this function, as described in
-@ref{Field}. In the @code{silly} program notation (@ref{A Simple Lisp
-Like Language}), this function computes the value
-of ([[@code{field}]] @code{@var{pointer}}) @code{@var{operand}}.
-
-For example, using the fixed list @code{avm_join(NULL,NULL)} as the
-@code{@var{pointer}} parameter will cause a copy of the operand itself
-to be returned as the result. A @code{@var{pointer}} equal to
-@code{avm_join(NULL,avm_join(NULL,NULL))} will cause a copy of
-@code{operand->tail} to be returned, and so on. A @code{NULL}
-@code{@var{pointer}} causes an internal error.
-
-If the deconstruction is invalid, as in the case of the tail of an empty
-list, the invalid deconstruction error message is returned as the
-result, and the @code{*@var{fault}} parameter is set to a non-zero value.
-The @code{*@var{fault}} parameter is also set to a non-zero value in the event
-of a memory overflow, and the memory overflow message is returned.
-@end deftypefun
-
-@node Indirection, The Universal Function, Deconstruction Functions, Lists
-@subsection Indirection
-
-In some cases it is necessary to build a tree from the top down rather
-@cindex pointers
-than from the bottom up, when it is not known in advance what's on the
-bottom. Although the @code{list} type is a pointer itself, these
-situations call for a type of pointers to lists, which are declared as
-the @code{branch} type in @file{branches.h}. For example, if @code{b} is
-declared as a @code{branch} and @code{l} is declared as a @code{list},
-it would be possible to write @code{b = &l}.
-
-Facilities are also provided for maintaining queues of branches, which
-@cindex queues
-are declared as the @code{branch_queue} type. This type is a pointer to
-a structure with two fields, @code{above} and @code{following}, where
-@code{above} is a @code{branch} and @code{following} is a
-@code{branch_queue}.
-
-These functions are used internally elsewhere in the library and might
-not be necessary for most client programs to use directly.
-
-@deftypefun void avm_initialize_branches ()
-This must be done once before any of the other branch related functions is
-used, and creates some internal data structures. Results of the other
-functions are undefined if this one isn't called first.
-@end deftypefun
-@deftypefun void avm_count_branches ()
-This function can be used at the end of a run to detect unreclaimed
-storage used for branches or branch queues. If any storage remains
-unreclaimed, a message about unreclaimed branches is written to standard
-error.
-@end deftypefun
-@deftypefun void avm_anticipate (branch_queue *@var{front}, branch_queue *@var{back}, branch @var{operand})
-This function provides a simple queueing facility for
-branches. Similarly to the case with @code{avm_enqueue}, @code{front}
-and @code{back} should be initialized to @code{NULL} before the first
-call. Each call to this function will enqueue one item to the back,
-assuming enough memory is available, as the following example shows.
-
-@example
-front = NULL;
-back = NULL;
-l = avm_join(NULL,NULL);
-anticipate(&front,&back,&(l->head));
-anticipate(&front,&back,&(l->tail));
-@end example
-
-After the above code is executed, these postconditions will hold.
-
-@example
-front->above == &(l->head)
-front->following->above == &(l->tail)
-front->following == back
-back->following == NULL
-@end example
-
-The name ``anticipate'' is used because ordinarily the queue contains
-positions in a tree to be filled in later. As usual, only unshared trees should be
-modified in place.
-@end deftypefun
-@deftypefun void avm_recoverable_anticipate (branch_queue *@var{front}, branch_queue *@var{back}, branch @var{operand}, int *@var{fault})
-This function is similar to @code{avm_anticipate}, except that it will
-not exit with an error message in the event of an overflow error, but
-will simply set @code{*@var{fault}} to a non-zero value and return to the
-caller. If an overflow occurs, nothing about the queue is changed.
-@end deftypefun
-
-@deftypefun void avm_enqueue_branch (branch_queue *@var{front}, branch_queue *@var{back}, int @var{received_bit})
-A slightly higher level interface to the @code{avm_anticipate} function
-is provided by this function, which is useful for building a tree from
-@cindex trees
-a string of input bits in a format similar to the one described in
-@ref{Concrete Syntax}.
-
-This function should be called the first time with @code{front} and
-@code{back} having been initialized to represent a queue containing a
-@cindex queues
-single branch pointing to a list known to the caller. The list itself
-need not be allocated or initialized. An easy way of doing so would be
-the following.
-
-@example
-front = NULL;
-back = NULL;
-avm_anticipate(&front,&back,&my_list);
-@end example
-
-On each call to @code{avm_enqueue_branch}, the @code{@var{received_bit}}
-parameter is examined. If it is zero, nothing will be added to the
-queue, the list referenced by the front branch will be assigned
-@code{NULL}, and the front branch will be removed from the queue. If
-@code{@var{received_bit}} is a non-zero value, the list referenced by
-the front branch will be assigned to point to a newly created unshared
-list node, and two more branches will be appended to the queue. The
-first branch to be appended will point to the head of the newly created
-list node, and the second branch to be appended will point to the tail.
-
-If the sequence of bits conforms to the required concrete syntax, this
-function can be called for each of them in turn, and at the end of the
-sequence, the queue will be empty and the list referenced by the initial
-branch (i.e., @code{my_list}) will be the one specified by the bit
-string. If the sequence of bits does not conform to the required
-concrete syntax, the error can be detected insofar as the emptying of
-the queue will not coincide exactly with the last bit.
-
-The caller should check for the queue becoming prematurely empty due to
-syntax errors, because no message is reported by
-@code{avm_enqueue_branch} in that event, and subsequent attempts to
-enqueue anything are ignored. However, in the event of a memory overflow, 
-an error message is reported and the process is terminated.
-@end deftypefun
-@deftypefun void avm_recoverable_enqueue_branch (branch_queue *@var{front}, branch_queue *@var{back}, int @var{received_bit}, int *@var{fault})
-This function is similar to @code{avm_enqueue_branch} but will leave
-error handling to the caller in the event of insufficient memory to
-enqueue another branch. Instead of printing an error message and
-exiting, it will dispose of the queue, set the @code{@var{fault}} flag
-to a non-zero value, and return. Although the queue will be reclaimed,
-the lists referenced by the branches in it will persist. The list nodes
-themselves can be reclaimed by disposing of the list whose address was
-stored originally in the front branch.
-@end deftypefun
-@deftypefun void avm_dispose_branch_queue (branch_queue @var{front})
-This function deallocates a branch queue by chasing the @code{following}
-fields in each one. It does nothing to the lists referenced by the
-branches in the queue.
-
-Rather than using @code{free} directly, client programs should use this
-function for deallocating branch queues, because it allows better
-performance by interacting with a local internal cache of free memory,
-and because it performs necessary bookkeeping for
-@code{avm_count_branches}.
-@end deftypefun
-@deftypefun void avm_dispose_branch (branch_queue @var{old})
-This disposes of a single branch queue node rather than a whole queue.
-Otherwise, the same comments as those above apply.
-@end deftypefun
-
-@node The Universal Function, , Indirection, Lists
-@subsection The Universal Function
-
-@cindex universal function
-A function computing the result of the invisible operator used to
-specify the virtual code semantics in @ref{Virtual Code Semantics}, is
-easily available by way of a declaration in @file{apply.h}.
-
-@deftypefun void avm_initialize_apply ()
-This function should be called by the client program at least once prior
-to the first call to @code{avm_apply} or
-@code{avm_recoverable_apply}. It causes certain internal data structures
-and error message texts to be initialized.
-@end deftypefun
-@deftypefun void avm_count_apply ()
-This function should be used at the end of a run for the purpose of
-detecting and reporting any unreclaimed storage associated with
-functions in this section. If the function @code{avm_count_lists()} is
-also being used, it should be called after this one.
-@end deftypefun
-@deftypefun list avm_apply (list @var{operator}, list @var{operand})
-This is the function that evaluates the operator used to describe the
-virtual code semantics. For example, the value of @code{@var{f} @var{x}}
-can be obtained as the result returned by
-@code{avm_apply(@var{f},@var{x})}. 
-
-Both parameters to this function are deallocated unconditionally and
-should not be referenced again by the caller. If the parameters are
-needed subsequently, then only copies of them should be passed to
-@code{avm_apply} using @code{avm_copied}.
-
-This function is not guaranteed to terminate, and may cause a memory
-overflow error. In the event of an exceptional condition, the error
-message is written to standard error and the program is halted. There is
-no externally visible distinction between different levels of error
-conditions.
-@end deftypefun
-@deftypefun list avm_recoverable_apply (list @var{operator}, list @var{operand}, int *@var{fault})
-This function is similar to @code{avm_apply} but leaves the
-responsibility of error handling with the caller. If any
-overflow or exceptional condition occurs, the result returned is a list
-representing the error message, and the @code{@var{fault}} flag is set to
-a non-zero value. This behavior contrasts with that of @code{avm_apply},
-which will display the message to standard error and kill the process.
-@end deftypefun
-
-@node Characters and Strings, File Manipulation, Lists, Library Reference
-@section Characters and Strings
-
-@cindex character strings
-If a C program is to interact with a virtual code application by
-exchanging text, it uses the representation for characters described in
-@ref{Character Table}.  This convention would be inconvenient without a
-suitable API, so the functions in this section address the need. These
-functions are declared in the header file @file{chrcodes.h}.
-
-Some of these functions have two forms, with one of them having the
-word @code{standard} as part of its name. The reason is to cope with
-multiple character encodings. Versions of @code{avram} prior to 0.1.0
-@cindex character encodings
-@cindex multiple character encodings
-used a different character encoding than the one documented in
-@ref{Character Table}. The functions described in @ref{Version
-Management} can be used to select backward compatible operation with
-the older character encoding. The normal forms of the functions in
-this section will use the older character set if a backward
-compatibility mode is indicated, whereas the standard forms will use
-the character encoding documented in @ref{Character Table} regardless.
-
-Standard encodings should always be assumed for library and function
-@cindex standard character encoding
-names associated with the @code{library} combinator (@ref{Calling
-existing library functions}), and for values of lists defined by
-@code{avm_list_of_value} (@ref{Primitive types}), but version
-dependent encodings should be used for all other purposes such as
-error messages. Alternatively, the normal version dependent forms of
-the functions below can be used safely in any case if backward
-@cindex backward compatability
-compatibility is not an issue. This distinction is viewed as a
-transitional feature of the API that will be discontinued eventually
-when support for the old character set is withdrawn and the
-@code{standard} forms are be removed.
-
-@deftypefun list avm_character_representation (int @var{character})
-@end deftypefun
-@deftypefun list avm_standard_character_representation (int @var{character})
-This function takes an integer character code and returns a copy of
-the list representing it, as per the table in @ref{Character
-Table}. Because the copy is shared, no memory is allocated by this
-function so there is no possibility of overflow. Nevertheless, it is
-the responsibility of the caller dispose of the list when it is no
-longer needed by @code{avm_dispose}, just as if the copy were not
-shared (@ref{Simple Operations}). For performance reasons, this
-function is implemented as a macro. If the argument is outside the
-range of zero to 255, it is masked into that range.
-@end deftypefun
-@deftypefun int avm_character_code (list @var{operand})
-@end deftypefun
-@deftypefun int avm_standard_character_code (list @var{operand})
-This function takes a list as an argument and returns the corresponding
-character code, as per @ref{Character Table}. If the argument does not
-represent any character, a value of @code{-1} is returned.
-@end deftypefun
-@deftypefun list avm_strung (char *@var{string})
-@end deftypefun
-@deftypefun list avm_standard_strung (char *@var{string})
-This function takes a pointer to a null terminated character string and
-returns the list obtained by translating each character into its list
-representation and enqueuing them together. Memory needs to be allocated
-for the result, and if there isn't enough available, an error message is
-written to standard error and the process is terminated. This function
-is useful to initialize lists from hard coded strings at the beginning
-of a run, as in this example.
-
-@example
-hello_string = avm_strung("hello");
-@end example
-
-This form initializes a single string, but to initialize a one line
-message suitable for writing to a file, it would have to be a list of
-strings, as in this example.
-
-@example
-hello_message = avm_join(avm_strung("hello"),NULL);
-@end example
-
-The latter form is used internally by the library for initializing
-most of the various error messages that can be returned by other functions.
-@end deftypefun
-
-@deftypefun list avm_recoverable_strung (char *@var{string}, int *@var{fault});
-@end deftypefun
-@deftypefun list avm_recoverable_standard_strung (char *@var{string}, int *@var{fault});
-This function is like @code{avm_strung} except that if it runs out of memory
-it sets the integer referenced by @var{fault} to a non-zero value and returns
-instead of terminating the process.
-@end deftypefun
-
-@deftypefun char *avm_unstrung (list @var{string}, list *@var{message}, int *@var{fault})
-@end deftypefun
-@deftypefun char *avm_standard_unstrung (list @var{string}, list *@var{message}, int *@var{fault})
-This function performs an inverse operation to
-@code{avm_recoverable_strung}, taking a list representing a character
-string to the character string in ASCII null terminated form as per
-the standard C representation. Memory is allocated for the result by
-this function which should be freed by the caller.
-
-In the event of an exception, the integer referenced by @code{fault}
-is assigned a non-zero value and an error message represented as a
-list is assigned to the list referenced by @code{message}. The error
-message should be reclaimed by the caller with @code{avm_dispose}
-(@ref{Simple Operations} if it is non-empty. Possible error messages
-are @code{<'memory overflow'>}, @code{<'counter overflow'>}, and
-@code{<'invalid text format'>}.
-@end deftypefun
-
-@deftypefun list avm_scanned_list (char *@var{string})
-An application that makes use of virtual code snippets or data that are
-known at compile time can use this function to initialize them. The
-argument is a string in the format described in @ref{Concrete Syntax},
-and the result is the list representing it. For example, the program
-discussed in @ref{Example Script} could be hard coded into a C program
-by pasting the data from its virtual code file into an expression of
-this form.
-
-@example
-cat_program = avm_scanned_list("sKYQNTP\\");
-@end example
-
-Note that the backslash character in the original data has to be
-preceded by an extra backslash in the C source, because backslashes
-usually mean something in C character constants.
-
-The @code{avm_scanned_list} function needs to allocate memory. If there
-isn't enough memory available, it writes a message to standard error and
-causes the process to exit.
-@end deftypefun
-@deftypefun list avm_multiscanned (char **@var{strings})
-Sometimes it may be useful to initialize very large lists from
-strings, but some C compilers impose limitations on the maximum length
-of a string constant, and the ISO standard for C requires only 512
-bytes.  This function serves a similar purpose to
-@code{avm_scanned_list}, but allows the argument to be a pointer to a
-null terminated array of strings instead of one long string, thereby
-circumventing this limitation in the compiler.
-
-@example
-char *code[] = @{"sKYQ","NTP\\",NULL@};
-...
-cat_program = avm_multiscanned(code);
-@end example
-
-If there is insufficient memory to allocate the list this function needs
-to create, it causes an error message to be written to standard error,
-and then kills the process.
-@end deftypefun
-@deftypefun char* avm_prompt (list @var{prompt_strings})
-This function takes a list representing a list of character strings, and
-returns its translation to a character string with the sequence 13 10
-used as a separator. For example, given a tree of this form
-
-@example
-some_message = avm_join(
-   avm_strung("hay"),
-   avm_join(
-      avm_strung("you"),
-      NULL));
-@end example
-
-the result returned by @code{prompt_strings(some_message)} would be a
-pointer to a null terminated character string equivalent to the C constant
-@code{"hay\13\10you"}.
-
-Error messages are printed and the process terminated in the event of
-either a memory overflow or an invalid character representation.
-
-This function is used by @code{avram} in the evaluation of interactive
-@cindex interactive applications
-virtual code applications, whose output has to be compared to the output
-from a shell command in this format. The separator is chosen to be
-compatible with the @code{expect} library.
-@end deftypefun
-
-@deftypefun char* avm_recoverable_prompt (list @var{prompt_strings}, list *@var{message}, int *@var{fault})
-This function performs the same operation as @code{avm_prompt} but
-allows the caller to handle exceptional conditions. If an exception
-such as a memory overflow occurs, the integer referenced by
-@code{fault} is assigned a non-zero value and a representation of the
-error message as a list of strings is assigned to the list referenced
-by @code{message}.
-
-This function is used to by @code{avram} to evaluate the
-@code{interact} combinator (@ref{Interaction combinator}), when
-terminating in the event of an error would be inappropriate.
-@end deftypefun
-
-@deftypefun void avm_initialize_chrcodes ()
-This function has to be called before any of the other character
-conversion functions in this section, or else their results are
-undefined. It performs the initialization of various internal data
-structures.
-@end deftypefun
-@deftypefun void avm_count_chrcodes ()
-This function can be called at the end of a run, after the last call to
-any of the other functions in this section, but before
-@code{avm_count_lists} if that function is also being used. The purpose
-of this function is to detect and report memory leaks. If any memory
-associated with any of these functions has not been reclaimed by the
-client program, a message giving the number of unreclaimed lists will be
-written to standard error.
-@end deftypefun
-
-@node File Manipulation, Invocation, Characters and Strings, Library Reference
-@section File Manipulation
-
-The functions described in this section provide an interface between
-virtual code applications and the host file system by converting
-between files or file names and their representations as lists. These
-conversions are necessary when passing a file to a virtual code
-application, or when writing a file received in the result of one.
-
-@menu
-* File Names::                  
-* Raw Files::                   
-* Formatted Input::             
-* Formatted Output::            
-@end menu
-
-@node File Names, Raw Files, File Manipulation, File Manipulation
-@subsection File Names
-
-A standard representation is used by virtual code applications for the
-@cindex file names
-path names of files, following the description in @ref{Input Data
-Structure}. The functions and constants declared in @code{fnames.h}
-provide an API for operating on file names in this form.
-
-@deftypefun list avm_path_representation (char *@var{path})
-If a C program is to invoke a virtual code application and pass a path
-name to it as a parameter, this function can be used to generate the
-appropriate representation from a given character string.
-
-@example
-conf_path = avm_path_representation("/etc/resolve.conf");
-@end example
-
-In this example, @code{conf_path} is a @code{list}.  For potentially
-better portability, a C program can use the character constant
-@code{avm_path_separator_character} in place of the slashes in hard
-coded path names.
-
-Other useful constants are @code{avm_current_directory_prefix} as a
-@cindex @code{avm_path_separator_character}
-@cindex @code{avm_path_separator}
-@cindex @code{avm_current_directory_prefix}
-@cindex @code{avm_parent_directory_prefix}
-@cindex @code{avm_root_directory_prefix}
-portable replacement for @code{"./"}, as well as
-@code{avm_parent_directory_prefix} instead of @code{"../"}. There is
-also @code{avm_root_directory_prefix} for @code{"/"}. These three
-constants are null terminated strings, unlike
-@code{avm_path_separator_character}, which is a character.
-
-If a @code{NULL} pointer is passed as the @code{@var{path}}, a
-@code{NULL} list is returned, which is the path representation for
-standard input or standard output. If the address of an empty string is
-passed to this function as the @code{@var{path}}, the list of the empty
-string will be returned, which is the path representation for the root
-directory. Trailing path separators are ignored, so @code{"/"} is the
-same as the empty string.
-
-Some memory needs to be allocated for the result of this function. If
-the memory is not available, an error message is written to standard
-error and the process is terminated.
-@end deftypefun
-@deftypefun list avm_date_representation (char *@var{path})
-This function is essentially a wrapper around the standard
-@code{ctime_r} function that not only gets the time stamp for a file at
-a given path, but transforms it to a list representation according to
-@ref{Character Table}. It needs to allocate memory for the result and
-will cause the program to exit with an error message if there is not
-enough memory available.
-
-The time stamp will usually be in a format like @code{Sun Mar 4 10:56:40
-GMT 2001}. If for some reason the time stamp can not be obtained, the
-@cindex @code{unknown date}
-result will be a representation of the string @code{unknown date}.
-@end deftypefun
-@deftypefun char* avm_path_name (list @var{path})
-This function is the inverse of @code{avm_path_representation}, in that
-it takes a list representing a path to the path name expressed as a character
-string. This function can be used in C programs that invoke virtual code
-applications returning paths as part of their results, so that the C
-program can get the path into a character string in order to open the file.
-
-If the @code{@var{path}} parameter is @code{NULL}, a @code{NULL} pointer
-is returned as the result. The calling program should check for a
-@cindex standard input
-@cindex standard output
-@code{NULL} result and interpret it as the path to standard input or
-standard output.
-
-The memory needed for the character string whose address is returned is
-allocated by this function if possible. The given @code{@var{path}} is
-not required to be consistent with the host file system, but it is
-required to consist of representations of non-null printable characters
-or spaces as lists per @ref{Character Table}.  In the event of any error
-or overflow, control does not return to the caller, but an error message
-is printed and the program is aborted. The possible error messages from
-this function are the following.
-@cindex @code{counter overflow}
-@cindex @code{memory overflow}
-@cindex @code{null character in file name}
-@cindex @code{bad character in file name}
-@cindex @code{invalid file name}
-
-@itemize @bullet
-@item @code{@var{program-name}: counter overflow (code @var{nn})}
-@item @code{@var{program-name}: memory overflow (code @var{nn})}
-@item @code{@var{program-name}: null character in file name}
-@item @code{@var{program-name}: bad character in file name}
-@item @code{@var{program-name}: invalid file name (code @var{nn})}
-@end itemize
-
-@end deftypefun
-@deftypefun void avm_initialize_fnames ()
-A few housekeeping operations relevant to internal data structures are
-performed by this function, making it necessary to be called by the
-client program prior to using any of the other ones.
-@end deftypefun
-@deftypefun void avm_count_fnames ()
-This function can be used after the the last call to any of the other
-functions in this section during a run, and it will detect memory leaks
-that may be attributable to code in these functions or misuse
-thereof. If any unreclaimed storage remains when this function is
-called, a warning message will be written to standard error. If the
-function @code{avm_count_lists} is also being used by the client, it
-should be called after this one.
-@end deftypefun
-
-@node Raw Files, Formatted Input, File Names, File Manipulation
-@subsection Raw Files
-Some low level operations involving lists and data files are provided by
-these functions, which are declared in the header file @file{rawio.h}.
-
-@deftypefun list avm_received_list (FILE *@var{object}, char *@var{filename})
-This function is a convenient way of transferring data directly from a
-raw format file into a list in memory. It might typically be used to
-load the virtual code for an application that has been written to a file
-by a compiler.  
-
-@table @code
-@item @var{object}
-is the address of a file which should
-already be open for reading before this function is called, and will be
-read from its current position.
-@item @var{filename}
-should be set by the caller to the address of a null terminated string
-containing the name of the file, but is not used unless it needs to be
-printed as part of an error message. If it is a null pointer, standard
-input is assumed.
-@end table
-
-The result returned is a list containing data read from the file.
-
-The file format is described in @ref{File Format}. The preamble section
-of the file, if any, is ignored. If the file ends prematurely or
-otherwise conflicts with the format, the program is aborted with a
-message of 
-@cindex @code{invalid raw file format}
-
-@display
-@code{@var{program-name}: invalid raw file format in @var{filename}}
-@end display
-
-written to standard error. The program will also be aborted by this
-function in the event of a memory overflow.
-
-The file is left open when this function returns, and could therefore be
-used to store other data after the end of the list. The end of a list is
-detected automatically by this function, and it reads no further,
-leaving the file position on the next character, if any.
-@end deftypefun
-@deftypefun void avm_send_list (FILE *@var{repository}, list @var{operand}, char *@var{filename})
-This function can be used to transfer data from a list in memory to a
-file, essentially by implementing the printing algorithm described in
-@ref{Bit String Encoding}. 
-
-@table @code
-@item @var{repository}
-is the address of a file already open for writing, to which the data are
-written starting from the current position.
-@item @var{operand}
-is the list containing the data to be written
-@item @var{filename} 
-is the address of a null terminated string containing the name of the
-file that will be reported in an error message if necessary.
-@end table
-
-No preamble section is written by this function, but one could be
-@cindex preamble
-written to the file by the caller prior to calling it.  Error messages
-are possible either because of i/o errors or because of insufficient
-memory. I/o errors are not fatal and will result only in a warning
-message being printed to standard error, but a memory overflow will
-cause the process to abort. An i/o error message reported by this
-function would be of the form
-@cindex @code{can't write}
-
-@display
-@code{@var{program-name}: can't write to @var{filename}}
-@end display
-
-followed by the diagnostic obtained from the standard @code{strerror}
-@cindex @code{strerror}
-function if it exists on the host platform. The file is left open when
-this function returns.
-@end deftypefun
-@deftypefun void avm_initialize_rawio ()
-This function initializes some necessary data structures for the
-functions in this section, and should be called prior to them at the
-beginning of a run.
-@end deftypefun
-@deftypefun void avm_count_rawio ()
-This function does nothing in the present version of the library, but
-should be called after the last call to all of the other functions in
-this section in order to maintain compatibility with future versions of
-the library. Future versions may decide to use this function to do some
-cleaning up of local data structures.
-@end deftypefun
-
-@node Formatted Input, Formatted Output, Raw Files, File Manipulation
-@subsection Formatted Input
-
-Some functions relating to the input of text files or data files with
-preambles are declared in the header file @file{formin.h}. The usage of
-these functions is as follows.
-
-@deftypefun list avm_preamble_and_contents (FILE *@var{source}, char *@var{filename})
-This function loads a file of either text or data format into memory.
-
-@table @code
-@item @var{source}
-should be initialized by the caller as the address of a file
-already open for reading that will be read from its current position.
-@item @var{filename}
-should be set by the caller to the address of a null terminated
-character string giving the name of the file that will be used if an i/o
-error message needs to be written about it. If it is a @code{NULL}
-pointer, standard input is assumed.
-@end table
-
-The result returned by the function will be a list whose @code{head}
-@cindex preamble
-represents the preamble of the file and whose @code{tail} represents the
-contents. As a side effect, the input file will be closed, unless the
-@code{@var{filename}} parameter is @code{NULL}.
-
-If the file conforms to the format described in @ref{File Format}, the
-preamble is a list of character strings. In the result returned by the
-function, the @code{head} field will be a list with one item for each
-line in the file, and each item will be a list of character
-representations as in @ref{Character Table}, but with the leading hashes
-stripped. The @code{tail} will be the list specified by remainder of the
-file according to @ref{Concrete Syntax}.  If the file has an empty
-preamble but is nevertheless a data file, the @code{head} will be a list
-whose @code{head} and @code{tail} are both @code{NULL}.
-
-If the file does not conform to the format in @ref{File Format}, then
-the @code{head} of the result will be @code{NULL}, and the @code{tail}
-will be a list of lists of character representations, with one for each
-line. 
-
-Whether or not the file conforms to the format is determined on the fly,
-so this function is useful for situations in which the format is not
-known in advance. The conventions regarding the preamble and contents
-maintained by this function are the same as those used by virtual code
-applications as described in @ref{Standard Output Representation} and
-@ref{Input Data Structure}.
-
-The characters used for line breaks are not explicitly represented in
-@cindex line breaks
-the result. Depending on the host system, line breaks in text files may
-be represented either by the character code 10, or by the sequence 13
-10. However, in order for the library to deal with binary files in a
-portable way, a line break always corresponds to a 10 as far as this
-function is concerned regardless of the host, and a 13 is treated like
-any other character. Hence, if this function were used on binary files
-that happened to have some 10s in them, the exact contents of a
-file could be reconstructed easily by appending a 10 to all but the last
-line and flattening the list.
-
-A considerable amount of memory may need to be allocated by this
-function in order to store the file as a list. If not enough memory is
-available, the function prints an error message to standard error and
-aborts rather than returning to the caller. However, i/o errors are not
-fatal, and will cause the function to print a warning but attempt to
-continue.
-@end deftypefun
-@deftypefun list avm_load (FILE *@var{source}, char *@var{filename}, int @var{raw})
-Similarly to @code{avm_preamble_and_contents}, this function also loads
-a file into memory, but the format is specified in advance.
-
-@table @code
-@item @var{source}
-should be set by the caller to the address of an already open file for
-reading, which will be read from its current position.
-@item @var{filename}
-should be initialized by the caller as a pointer to a null terminated
-string containing the name of the file that will be reported to the user
-in the event of an error reading from it. If it is a @code{NULL}
-pointer, standard input is assumed.
-@item @var{raw}
-is set to a non-zero value by the caller to indicate that the file is
-expected to conform to the format in @ref{File Format}. If the file is
-an ordinary text file, then it should be set to zero.
-@end table
-
-In the case of a data file, which is when @code{@var{raw}} is non-zero,
-the result returned by this function will be a list representing the
-data section of the file and ignoring the preamble. In the case of a
-text file, the result will be a list of lists of character
-representations as per @ref{Character Table}, with one such list for
-each line in the file. Similar comments about line breaks to those
-mentioned under @code{avm_preamble_and_contents} are applicable.
-
-As a side effect of this function, the @code{@var{source}} file will be
-closed, unless the @code{@var{filename}} is a @code{NULL} pointer.
-
-This function is useful when the type of file is known in advance. If a
-data file is indicated by the @code{@var{raw}} parameter but the format
-is incorrect, an error message is reported and the process
-terminates. The error message will be of the form
-
-@display
-@code{@var{program-name}: invalid raw file format in @var{filename}}
-@end display
-
-Alternatively, if a text file is indicated by the
-@cindex @code{invalid raw file format}
-@code{@var{raw}} parameter, then no attempt is made to test whether it
-could be interpreted as data, even if it could be. This behavior differs
-from that of @code{avm_preamble_and_contents}, where a bad data
-file format causes the file to be treated as text, and a valid data file
-format, even in a ``text'' file, causes it to be treated as data.
-
-Memory requirements for this function are significant and will cause the
-process to abort with an error message in the event of insufficient free
-memory. Messages pertaining to i/o errors are also possible and are not
-fatal.
-@end deftypefun
-@deftypefun void avm_initialize_formin ()
-This function should be called before either of the other functions in
-this section is called, as it initializes some necessary static data
-structures. Results of the other functions are undefined if this one is
-not called first.
-@end deftypefun
-@deftypefun void avm_count_formin ()
-This function should be called after the last call to any of the other
-functions in this section, as it is necessary for cleaning up and
-reclaiming some internal data. If any storage remains unreclaimed due to
-memory leaks in these functions or to misuse of them, a warning message
-is written to standard error. If the function @code{avm_count_lists} is
-also being used by the client program, it should be called after this
-one.
-@end deftypefun
-
-@node Formatted Output,  , Formatted Input, File Manipulation
-@subsection Formatted Output
-
-The following functions pertaining to the output of text files or data files with
-@cindex preamble
-preambles are declared in the header file @file{formout.h}.
-@deftypefun void avm_output (FILE *@var{repository}, char *@var{filename}, list @var{preamble}, list @var{contents}, int @var{trace_mode})
-
-This function writes a either a text file or a data file in the format
-described in @ref{File Format}. The parameters have these
-interpretations.
-
-@table @code
-@item @var{repository}
-is the address of a file opened for writing by the caller, that will be
-written from its current position.
-@item @var{filename}
-is the address of a null terminated character string set
-by the caller to be the name of the file that will
-be reported to the user in the event of an i/o error. 
-@item @var{preamble}
-is @code{NULL} in the case of a text file, but a list of character string
-representations as per @ref{Character Table}, in the case of a data
-file. If a data file has is to be written with an empty preamble, then
-this list should have a @code{NULL} @code{head} and a @code{NULL}
-@code{tail}.
-@item @var{contents}
-is either a list of character string representations in the case of a
-text file, or is an unconstrained list in the case of a data file.
-@item @var{trace_mode}
-may be set to a non-zero value by the caller to request that everything
-written to a text file should be echoed to standard output. It is
-ignored in the case of a data file.
-@end table
-
-The effect of calling this function is to write the preamble and
-contents to the file in the format indicated by the preamble. The file
-is left open when this function returns.
-
-Line breaks are always written as character code 10, not as 13 10,
-@cindex line breaks
-regardless of the convention on the host system, so that files written
-by this function can be reliably read by other functions in the library.
-
-Leading hashes are automatically added to the beginning of the lines in
-the preamble, except where they are unnecessary due to a continuation
-character on the previous line. This action enforces consistency with the
-file format, ensuring that anything written as a data file can be read
-back as one. The hashes are stripped automatically when the file is
-read by @code{avm_preamble_and_contents}.
-
-Another feature of this function is that it will mark any output file as
-executable if it is a data format file with a prelude whose first
-@cindex executable files
-character in the first line is an exclamation point. This feature makes
-it easier for a compiler implemented in virtual code to generate
-executable shell scripts directly.
-
-A fatal error is reported if any of the data required
-to be a character representation is not listed in the @ref{Character
-Table}. A fatal error can also be caused by a memory overflow. Possible
-error messages are the following.
-@cindex @code{invalid output preamble format}
-@cindex @code{invalid text format}
-@cindex @code{can't write}
-
-@itemize @bullet
-@item @code{@var{program-name}: invalid output preamble format}
-@item @code{@var{program-name}: invalid text format}
-@item @code{@var{program-name}: can't write to @var{filename}}
-@end itemize
-
-@cindex @code{strerror}
-In the last case, the error message will be followed by an explanation
-furnished by the standard @code{strerror} function if available.
-@end deftypefun
-@deftypefun void avm_output_as_directed (list @var{data}, int @var{ask_to_overwrite_mode}, int @var{verbose_mode})
-This function writes an ensemble of files at specified paths in either
-text or data format, optionally interacting with the user through
-standard input and output. The parameters
-have these interpretations.
-
-@table @code
-@item @var{data}
-is a list in which each item specifies a file to be
-written.
-@item @var{ask_to_overwrite_mode}
-may be set to a non-zero value by the calling program in order to
-have this function ask the user for permission to overwrite existing files.
-@item @var{verbose_mode}
-may be set to a non-zero value by the calling program to have this
-function print to standard output a list of the names of the files it
-writes.
-@end table
-
-A high level interface between virtual code applications and the file
-system is provided by this function. The @code{@var{data}} parameter
-format is compatible with the the data structure returned by an
-application complying with the conventions in @ref{Output From
-Non-interactive Applications}.
-
-Each item in the @code{@var{data}} list should be a non-empty list whose
-@code{head} and @code{tail} are also non-empty. The fields in each item have
-the following relevance to the file it specifies.
-
-@itemize @bullet
-@item The @code{head} of the @code{head} is @code{NULL} if the file is
-to be opened for appending, and non-@code{NULL} if it is to be
-overwritten.
-@item The @code{tail} of the @code{head} represents a path as a list of
-character string representations, in a form suitable as an argument to
-@code{avm_path_name}.
-@item The @code{head} of the @code{tail} represents the preamble of the
-file, as either @code{NULL} for a text file or a non-empty list of
-character string representations for a data file.
-@item The @code{tail} of the @code{tail} represents the contents of the
-file, either as a list of character string representations for a text
-file or as a list in an unconstrained format for a data file.
-@end itemize
-
-For each item in the list, the function performs the following steps.
-@enumerate
-@item It decides whether to open a file
-for overwriting or appending based on the @code{head} of the
-@code{head}.
-@item It uses the @code{tail} of the @code{head} to find out the
-file name from @code{avm_path_name}, in order to open it. 
-@item If the
-@code{@var{ask_to_overwrite_mode}} flag is set and the file is found to
-exist already, the function will print one of the following messages to
-standard output, depending on whether the file is to be overwritten or
-appended.
-@itemize @bullet
-@item @code{@var{program-name}: overwrite @var{filename}? (y/n)}
-@item @code{@var{program-name}: append to @var{filename}? (y/n)}
-@end itemize
-It will then insist on either @kbd{y} or @kbd{n} as an answer before continuing.
-@item If the @code{@var{ask_to_overwrite}} flag has not been set, or the file did
-not previously exist, or the answer of @kbd{y} was given, the preamble
-and contents of the file are then written with @code{avm_output}.
-@item If permission to write or append was denied, one of the following
-messages is reported to standard output, and the data that were to be
-written are lost.
-@cindex @code{not writing} file name
-@cindex @code{writing} file name
-
-@itemize @bullet
-@item @code{@var{program-name}: not writing @var{filename}}
-@item @code{@var{program-name}: not appending @var{filename}}
-@end itemize
-
-@item If permission was granted to write or append to the file or the @code{@var{verbose_mode}} flag is
-set, one of the messages
-
-@itemize @bullet
-@item @code{@var{program-name}: writing @var{filename}}
-@item @code{@var{program-name}: appending @var{filename}}
-@end itemize
-
-is sent to standard output.
-@end enumerate
-
-@cindex standard output
-If any files are to be written to standard output, which would be
-indicated by a @code{NULL} path, they are not written until all other
-files in the list are written. This feature is in the interest of
-@cindex security
-security, as it makes it more difficult for malicious or inept virtual
-code to alter the appearance of the console through standard output until after
-the interactive dialogue has taken place. Permission is not solicited
-for writing to standard output, and it will not be closed.
-
-Any of the fatal errors or i/o errors possible with @code{avm_output} or
-@code{avm_path_name} are also possible with this function, as well as
-the following additional ones.
-@cindex @code{invalid file specification}
-@cindex @code{can't close}
-@cindex @code{can't write}
-
-@itemize @bullet
-@item @code{@var{program-name}: invalid file specification}
-@item @code{@var{program-name}: can't close @var{filename}}
-@item @code{@var{program-name}: can't write @var{filename}}
-@end itemize
-
-The last two are non-fatal i/o errors that will be accompanied by an
-@cindex @code{strerror}
-explanation from the @code{strerror} function if the host supports
-it. The other message is the result of a badly formatted
-@code{@var{data}} parameter.
-
-@end deftypefun
-@deftypefun void avm_put_bytes (list @var{bytes})
-
-This function takes a list of character representations, converts them
-to characters, and sends them to standard output. There is no chance of
-a memory overflow, but the following other errors are possible.
-@cindex @code{invalid text format}
-@cindex @code{can't write}
-
-@itemize @bullet
-@item @code{@var{program-name}: invalid text format (code @var{nn})}
-@item @code{@var{program-name}: can't write to standard output}
-@end itemize
-
-The latter is non-fatal, but the former causes the program to abort.
-It is caused when any member of the list @code{@var{bytes}} is not a
-character representation appearing in @ref{Character Table}.
-@end deftypefun
-@deftypefun void avm_initialize_formout ()
-This function initializes some data structures used locally by the other
-functions in this section, and should be called at the beginning of a
-run before any of them is called.
-@end deftypefun
-@deftypefun void avm_count_formout ()
-This function doesn't do anything in the current version of the library,
-but should be called after the last call to any of the other functions
-in this section. Future versions of the library might use this function
-for cleaning up some internal data structures, and client programs that
-call it will maintain compatibility with them.
-@end deftypefun
-
-@node Invocation, Version Management, File Manipulation, Library Reference
-@section Invocation
-
-The functions documented in this section can be used to incorporate the
-capabilities of a virtual machine emulator into other C programs with
-a minimal concern for the details of the required data structures
-and virtual code invocation conventions.
-
-@menu
-* Command Line Parsing::        
-* Execution Modes::             
-@end menu
-
-@node Command Line Parsing, Execution Modes, Invocation, Invocation
-@subsection Command Line Parsing
-@cindex command line
-A couple of functions declared in @file{cmdline.h} can be used to do all
-the necessary parsing of command lines and environment variables needed
-by virtual code applications.
-
-@deftypefun list avm_default_command_line (int @var{argc}, char *@var{argv}[], int @var{index}, char *@var{extension}, char *@var{paths}, int @var{default_to_stdin_mode}, int @var{force_text_input_mode}, int *@var{file_ordinal})
-
-The purpose of this function is to build most of the data structure used
-by parameter mode applications, as described in @ref{Input Data
-Structure}, by parsing the command line according to @ref{Command Line
-Syntax}. The parameters have these interpretations.
-
-@table @code
-@item @var{argc}
-is the number elements in the array referenced by @code{@var{argv}}
-@item @var{argv}
-is the address of an array of pointers to null terminated character strings
-holding command line arguments
-@item @var{index}
-is the position of the first element of @code{@var{argv}} to be
-considered. Those preceding it are ignored.
-@item @var{extension}
-is the address of a string that will be appended to input file names
-given in @code{@var{argv}} in an effort to find the associated files
-@item @var{paths}
-is the address of a null terminated character string containing a colon
-separated list of directory names that will be searched for input files
-@item @var{default_to_stdin_mode}
-is set to a non-zero value by the caller if the contents of standard
-input should be read in the absence of input files
-@item @var{force_text_input_mode}
-is set to a non-zero value by the caller to indicate that input files
-should be read as text, using @code{avm_load} (rather than
-@code{avm_preamble_and_contents}, which would allow them to be either
-text or data). The @code{@var{preamble}} field of the returned file
-specifications will always be empty when this flag is set.
-@item @var{file_ordinal}
-is set to a pointer to an integer by the caller if only one file is to
-be loaded during each call. The value of the integer indicates the which
-one it will be.
-@end table
-
-The result returned by this function is a list whose @code{head} is a list
-of file specifications and whose @code{tail} is a list of command line options
-intended for input to a virtual code application.
-
-The list of file specifications returned in the @code{head} of the
-result follows the same conventions as the @code{@var{data}} parameter
-to the function @code{avm_output_as_directed}, except that the
-@code{head} of the @code{head} of each item is a list representing the
-time stamp of the file as given by @code{avm_date_representation}. If
-the file is standard input, then it holds the current system date and
-time.
-
-If the @code{@var{file_ordinal}} parameter is @code{NULL}, then all
-files on the command line are loaded, but if it points to an integer
-@var{n}, then only the @var{n}th file is loaded, and @var{n} is
-incremented. If there is no @var{n}th file, a @code{NULL} value is
-returned as the entire result of the function. For a series of calls,
-the integer should be initialized to zero by the caller before the first
-call.
-
-If standard input is indicated as one of the files on the command line
-(by a dash), then it is also loaded regardless of the
-@code{@var{file_ordinal}}, but a cached copy of it is used on subsequent
-calls after the first, so that the function does not actually attempt to
-reread it. If standard input is to be loaded, it must be finite for this
-function to work properly.
-
-The search strategy for files is described in @ref{Environment}, and
-makes use of the @code{@var{extension}} and @code{@var{paths}} parameters.
-
-In the list of command line options returned in the @code{tail} of the
-result, each item is a list with a non-empty @code{head} and
-@code{tail}, and is interpreted as follows.
-
-@itemize @bullet
-@item The @code{head} of the @code{head} is a list representing a
-natural number, as given by @code{avm_natural}, indicating the position
-of the option on the command line relative to the initial value of the
-@code{@var{index}} parameter.
-@item The @code{tail} of the @code{head} is a list which is @code{NULL}
-in the case of a ``short form'' option, written with a single
-dash on the command line, but is a list whose @code{head} and
-@code{tail} are @code{NULL} in the case of a ``long form'' option,
-written with two dashes.
-@item The @code{head} of the @code{tail} is a list representing a
-character string for the keyword of an option, for example @kbd{foo} in
-the case of an option written @kbd{--foo=bar,baz}.
-@item The @code{tail} of the @code{tail} is a list of lists representing
-character strings, with one item for each parameter associated with the
-option, for example, @kbd{bar} and @kbd{baz}.
-@end itemize
-
-If multiple calls to the function are made with differing values of
-@code{*@var{file_ordinal}} but other parameters unchanged, the same list of
-options will be returned each time, except insofar as the position
-numbers in the @code{head} of the @code{head} of each item are adjusted
-as explained in @ref{Input for Mapped Applications}.
-
-Any of the i/o errors or fatal errors associated with other file
-input operations are possible with this function as well. This non-fatal
-warning message is also possible.
-@cindex @code{search paths not supported}
-
-@display
-@code{@var{program-name}: warning: search paths not supported}
-@end display
-
-This error occurs if the library has been built on a platform that
-@cindex @file{argz.h}
-doesn't have the @file{argz.h} header file and the @code{@var{paths}}
-parameter is non-@code{NULL}.
-@end deftypefun
-@deftypefun list avm_environment (char *@var{env}[])
-@cindex environment
-This function takes the address of a null terminated array of pointers
-to null terminated character strings of the form
-@code{"variable=value"}. The result returned is a list of lists, with
-one item for each element of the array. The @code{head} of each item is
-a representation of the left side of the corresponding string, and the
-@code{tail} is a representation of the right.
-
-This function is therefore useful along with
-@code{avm_default_command_line} for building the remainder of the data
-structure described in @ref{Parameter Mode Interface}. For example, a
-virtual machine emulator for non-interactive parameter mode applications
-with no bells and whistles could have the following form.
-
-@example
-int
-main(argc,argv,env)
-@dots{}
-@{
-  FILE *virtual_code_file;
-@dots{}
-  avm_initialize_lists();
-  avm_initialize_apply();
-  avm_initialize_rawio();
-  avm_initialize_formout();
-  avm_initialize_cmdline();
-  virtual_code_file = fopen(argv[1],"rb");
-  operator = avm_received_list(
-    virtual_code_file,argv[1]);
-  fclose(virtual_code_file);
-  command = avm_default_command_line(argc,
-    argv,2,NULL,NULL,0,0,NULL);
-  environs = avm_environment(env);
-  operand = avm_join(command,environs);
-  result = avm_apply(operator,operand);
-  avm_output_as_directed(result,0,0);
-  avm_dispose(result);
-@dots{}
-@}
-@end example
-
-The @code{avm_environment} function could cause the program to abort due
-to a memory overflow.  For security reasons, it will also abort with an
-@cindex security
-error message if any non-printing characters are detected in its
-argument. (See @ref{Other Diagnostics and Warnings}.)
-@end deftypefun
-@deftypefun void avm_initialize_cmdline ()
-This function initializes some local variables and should be called
-before any of the other functions in this section is called, or else
-their results are unpredictable.
-@end deftypefun
-@deftypefun void avm_count_cmdline ()
-This function should be called after the last call to any of the other
-functions in this section, as it reclaims some locally allocated
-storage. If the @code{avm_count_lists} function is used, it should be
-called after this one.
-@end deftypefun
-
-@node Execution Modes,  , Command Line Parsing, Invocation
-@subsection Execution Modes
-Some functions declared in @file{exmodes.h} are useful for executing
-interactive applications or filter mode transducers in a manner
-consistent with the specifications described in the previous chapter.
-
-@deftypefun void avm_interact (list @var{avm_interactor}, int @var{step_mode}, int @var{ask_to_overwrite_mode}, int @var{quiet_mode})
-
-This function executes an interactive virtual code application. The
-parameters have these interpretations.
-
-@table @code
-@item @var{avm_interactor}
-is the virtual code for a function that performs as specified in
-@ref{Output From Interactive Applications}.
-@item @var{step_mode}
-will cause all shell commands to be echoed if set to a non-zero
-value, and will cause the program to pause after each shell command
-until a key is pressed.
-@item @var{ask_to_overwrite_mode}
-can be set to a non-zero value by the caller to cause the program to ask
-permission of the user to overwrite any existing files in cases where
-the virtual code returns a file list as described in @ref{Mixed Modes of
-Interaction}.
-@item @var{quiet_mode}
-can be set to a non-zero value to suppress console messages in the case
-of file output per @ref{Mixed Modes of Interaction}.
-@end table
-
-The meaning of this function is accessible to any reader willing to slog
-through @ref{Output From Interactive Applications}. The only subtle
-point is that @code{@var{avm_interactor}} parameter in this function
-does not correspond to the virtual code application that @code{avram}
-reads from a virtual code file, but to the result computed when the
-application read from the file is applied to the data structure
-representing the command line and environment.
-
-Any of the memory overflows or i/o errors possible with other functions
-in the library are possible from this one as well, and will also cause
-it to print an error message and halt the program. A badly designed
-@cindex deadlock
-virtual code application could cause a deadlock, which will not be
-detected or reported
-@end deftypefun
-
-@deftypefun void avm_trace_interaction ()
-
-This function enables diagnostic output for the @code{avm_recoverable_interact}
-function.
-@end deftypefun
-
-@deftypefun void avm_disable_interaction ()
-
-This function causes @code{avm_interact} and @code{avm_recoverable_interact}
-to terminate with an error instead of executing, as required by the
-@code{--jail} command line option.
-@end deftypefun
-
-@deftypefun list avm_recoverable_interact (list @var{interactor}, int @var{*fault})
-
-This function is similar to @code{avm_interact} but always closes the
-pipe and performs no file i/o, and will return an error message rather
-than exiting. Otherwise it returns a transcript of the intereaction as
-a list of lists of strings represented as lists of character
-encodings.  It implements the @var{interact} combinator with the
-virtual code for the transducer function given as the parameter.  A
-prior call to @code{avm_trace_interaction} will cause diagnostic
-information to be written to standard output when this function is
-executed.
-@end deftypefun
-@deftypefun void avm_byte_transduce (list @var{operator})
-
-This function executes a filter mode byte transducer application, which
-behaves as described in @ref{Byte Transducers}. The argument is the
-virtual code for the application, which would be found in a virtual code
-file. There are limited opportunities for i/o errors, as only standard
-input and standard output are involved with this function, but fatal
-errors due to memory overflow are possible.
-@end deftypefun
-@deftypefun void avm_line_map (list @var{operator})
-
-This function executes line mapped filter mode applications, which are
-explained in @ref{Line Maps}. The argument is the virtual code for the
-application. Similar comments to those above apply.
-@end deftypefun
-@deftypefun void avm_initialize_exmodes ()
-
-This function should be called before any of the other functions in this
-section in order to initialize some local variables. Results are
-undefined if this function isn't called first.
-@end deftypefun
-@deftypefun void avm_count_exmodes ()
-
-This function doesn't do anything in the present version of the library,
-but should be called after the last call to any of the other functions
-in this section in order to maintain compatibility with future versions,
-which may use it for cleaning up local variables.
-@end deftypefun
-
-@node Version Management, Error Reporting, Invocation, Library Reference
-@section Version Management
-
-The @code{avram} library is designed to support any number of backward
-@cindex versions
-compatibility modes with itself, by way of some functions declared in
-@file{vman.h}. The assumption is that the library will go through a
-sequence of revisions during its life, each being identified by a unique
-number. In the event of a fork in the project, each branch will
-attempt to maintain compatibility at least with its own ancestors.
-
-@deftypefun void avm_set_version (char *@var{number})
-This function can be used to delay the demise of a client program that
-uses the library but is not updated very often. The argument is a null
-terminated string representing a version number, such as @code{"@value{VERSION}"}.
-
-A call to this function requests that all library functions revert to
-their behavior as of that version in any cases where the current
-behavior is incompatible with it. It will also cause virtual code
-applications evaluated with @code{avm_apply} to detect a version number
-equal to the given one rather than the current one. (See @ref{Version}.)
-
-The program will exit with an internal error message if any function in
-the library has already interrogated the version number before this
-function is called, or if it is passed a null pointer. This problem can
-be avoided by calling it prior to any of the @code{avm_initialize}
-functions with a valid address. The program will exit with the message
-
-@display
-@code{@var{program-name}: multiple version specifications}
-@end display
-
-if this function is called more than once, even with the same number.
-If the number is not recognized as a present or past version, or is so
-old that it is no longer supported, the program will exit with this
-message.
-
-@display
-@code{avram: can't emulate version @var{number}}
-@end display
-
-Client programs that are built to last should allow the version number
-to be specified as an option by the user, and let virtual code
-applications that they execute take care of their own backward
-compatibility problems. This strategy will at least guard against
-changes in the virtual machine specification and other changes that do
-not affect the library API.
-@end deftypefun
-@deftypefun int avm_prior_to_version (char *@var{number})
-This function takes the address of a null terminated string representing
-a version number as an argument, such as @code{"@value{VERSION}"}, and returns a
-non-zero value if the version currently being emulated predates it.
-
-If no call has been made to @code{avm_set_version} prior to the call to
-this function, the current version is assumed, and subsequent calls to
-@code{avm_set_version} will cause an internal error.
-
-The intended use for this function would be by a maintainer of the
-library introducing an enhancement that will not be backward compatible,
-who doesn't wish to break existing client programs and virtual code
-applications. For example, if a version @code{1.0} is developed at some
-time in the distant future, and it incorporates a previously unexpected
-way of doing something, code similar to the following could be used to
-maintain backward compatibility.
-
-@example
-if (avm_prior_to_version("1.0"))
-  @{
-    /* do it the 0.x way */
-  @}
-else
-  @{
-    /* do it the 1.0-and-later way */
-  @}
-@end example
-
-@noindent
-This function will cause an internal error if the parameter does not
-match any known past or present version number, or if it is a null pointer.
-@end deftypefun
-@deftypefun char* avm_version ()
-This function returns the number of the version currently being emulated
-as the address of a null terminated string. The string whose address is
-returned should not be modified by the caller.
-
-If no call has been made to @code{avm_set_version} prior to the call to
-this function, the current version is assumed, and subsequent calls to
-@code{avm_set_version} will cause an internal error.
-@end deftypefun
-
-@node Error Reporting, Profiling, Version Management, Library Reference
-@section Error Reporting
-
-@cindex error messages
-Most of the error reporting by other functions in the library is done by
-way of the functions declared in @file{error.h}.  These function
-communicate directly with the user through standard error.  Client
-programs should also use these functions where possible for the sake of
-a uniform interface.
-
-@deftypefun void avm_set_program_name (char *@var{argv0})
-The argument to this function should be the address of a null terminated
-string holding the name of the program to be reported in error messages
-that begin with a program name. Typically this string will be the name
-of the program as it was invoked on the command line, possibly with path
-components stripped from it. An alternative would be to set it to the
-name of a virtual code application being evaluated. If this function is
-never called, the name @code{"avram"} is used by default. Space for a
-copy of the program name is allocated by this function, and a fatal
-memory overflow error is possible if there is insufficient space available.
-@end deftypefun
-@deftypefun char* avm_program_name ()
-This function returns a pointer to a null terminated character string
-holding the program name presently in use. It will be either the name
-most recently set by @code{avm_set_program_name}, or the default name
-@code{"avram"} if none has been set. The string whose address is
-returned should not be modified by the caller.
-@end deftypefun
-@deftypefun void avm_warning (char *@var{message})
-This function writes the null terminated string whose address is given
-to standard error, prefaced by the program name and followed by a line
-break.
-@end deftypefun
-@deftypefun void avm_error (char *@var{message})
-This function writes the null terminated string whose address is given
-to standard error, prefaced by the program name and followed by a line
-break, as @code{avm_warning}, but it then terminates the process with an
-exit code of 1.
-@end deftypefun
-@deftypefun void avm_fatal_io_error (char *@var{message}, char *@var{filename}, int @var{reason})
-This function is useful for reporting errors caused in the course of
-reading or writing files. The message is written to standard error
-prefaced by the program name, and incorporating the name of the relevant
-file. The @code{@var{reason}} should be the error code obtained from the
-standard @code{errno} variable, which will be translated to an
-@cindex @code{strerror}
-informative message if possible by the standard @code{strerror} function
-and appended to the message. After the message is written, the process
-will terminate with an exit code of 1.
-@end deftypefun
-@deftypefun void avm_non_fatal_io_error (char *@var{message}, char *@var{filename}, int @var{reason})
-This function does the same as @code{avm_fatal_io_error} except that it
-doesn't exit the program, and allows control to return to the caller,
-which should take appropriate action.
-@end deftypefun
-@deftypefun void avm_internal_error (int @var{code})
-This function is used to report internal errors and halt the
-program. The error message is written to standard error prefaced by the
-program name and followed by a line break. The code should be a unique
-integer constant (i.e., not one that's used for any other internal
-error), that will be printed as part of the error message as an aid to
-the maintainer.
-
-This function should be used by client programs only in the event of
-conditions that constitute some violation of a required invariant. It
-indicates to the user that something has gone wrong with the program,
-for which a bug report would be appropriate.
-@end deftypefun
-@deftypefun void avm_reclamation_failure (char *@var{entity}, counter @var{count})
-This function is used only by the @code{avm_count} functions to report
-unreclaimed storage. The @code{@var{count}} is the number of units of
-storage left unreclaimed, and the @code{@var{entity}} is the address of
-a null terminated string describing the type of unreclaimed entity, such
-as @code{"lists"} or @code{"branches"}. The message is written to
-standard error followed by a line break, but the program is not halted
-and control returns to the caller.
-@end deftypefun
-
-@node Profiling, Emulation Primitives, Error Reporting, Library Reference
-@section Profiling
-
-@cindex @file{profile.h}
-The functions declared in @file{profile.h} can be used for constructing
-and writing tables of run time statistics such as those mentioned in
-@ref{Files}, and @ref{Profile}. These functions maintain a database of
-structures, each recording the statistics for a particular virtual code
-fragment.
-
-Each structure in the database is identified by a unique key, which must
-be a list representing a character string. A pointer to such a structure
-@cindex @code{score}
-is declared to be of type @code{score}. For the most part, the data
-structure should be regarded as opaque by a client program, except for a
-field @code{reductions} of type @code{counter}, which may be modified
-arbitrarily by the client. 
-
-The way these operations are used in the course of evaluating virtual
-code applications containing profile annotations is to add a structure
-to the database each time a new profiled code fragment is encountered,
-using the annotation as its key, and to increment the @code{reductions}
-@cindex annotations
-of the structure each time any constituent of the code gets a quantum of
-work done on it. Other ways of using these operations are left to the
-developer's discretion.
-
-@deftypefun score avm_entries (list @var{team}, list *@var{message}, int *@var{fault})
-This function retrieves or creates a data base entry given its key. The
-parameters have these interpretations.
-
-@table @code
-@item @var{team}
-is a list representing a character string that uniquely identifies the
-database entry to be retrieved or created.
-@item @var{message}
-is the address of a list known to the caller, which will be assigned a
-list representing an error message if any error occurs in the course of
-searching the database or creating a new entry.
-@item @var{fault}
-is the address of an integer that will be set to a non-zero value if any
-error is caused by this function.
-@end table
-
-The pointer returned by this function is the address of the record whose
-key is given by the @code{@var{team}} parameter. If such a record is
-already in the database, its address is returned, but otherwise a new
-one is created whose address is then returned. The @code{reductions}
-field of a newly created entry will be zero.
-
-In the course of searching the database, the @code{avm_compare}
-function is used, so the associated lists may be modified as noted in
-@ref{Comparison}.  It is not necessary for a client to include the header
-file @file{compare.h} or to call @code{avm_initialize_compare} in order
-to use the profile operations, because they are done automatically.
-
-If an error message is assigned to the list referenced by
-@code{@var{message}}, the integer referenced by @code{@var{fault}} will
-be set to a non-zero value. The form of the error message will be a list
-in which each item is a list of character representations as per
-@ref{Character Table}. It is the responsibility of the caller to dispose
-of the error message. Currently the only possible error is a memory
-overflow, which in this case is non-fatal.
-@end deftypefun
-@deftypefun void avm_tally (char *@var{filename})
-This function makes a table of the results stored in the data base built
-by the @code{avm_entries} function. The argument is the address of a
-null terminated character string containing the name of the file in
-which the results will be written. A file is opened and the table is
-written in a self explanatory text format, with columns labeled
-``reductions'' and ``invocations'' among others. The latter contains the
-number of times the associated key was accessed through
-@code{avm_entries}.
-
-The data written to the file should be taken with a grain of salt.  It
-is computed using native integer and floating point arithmetic, with no
-checks made for overflow or roundoff error, and no guarantee of cross
-@cindex reductions
-platform portability. The number of ``reductions'' means whatever the
-developer of the client program wants it to mean.
-
-The following error messages are possible with this function, which will
-be written to standard error. None of them is fatal.
-@cindex @code{can't write}
-@cindex @code{can't close}
-@cindex @code{invalid profile identifier}
-
-@itemize @bullet
-@item @code{@var{program-name}: can't write @var{filename}}
-@item @code{@var{program-name}: can't write to @var{filename}}
-@item @code{@var{program-name}: can't close @var{filename}}
-@item @code{@var{program-name}: invalid profile identifier}
-@end itemize
-
-The last message is reported if any record in the database has a key
-that is not a list of valid character representations. The others are
-@cindex @code{strerror}
-accompanied by an explanation from the standard @code{strerror} function
-if possible.
-@end deftypefun
-@deftypefun void avm_initialize_profile ()
-This function should be called before any of the other functions in this
-section in order to initialize the data base. Results are undefined if
-it is not called first.
-@end deftypefun
-@deftypefun void avm_count_profile ()
-This function can be called after the other functions in this section as
-a way of detecting memory leaks. If any storage remains unreclaimed that
-was created by the functions in this section, a warning message is
-written to standard error. If the @code{avm_count_lists} function is
-being used by the client program, it should be called after this one.
-@end deftypefun
-
-@node Emulation Primitives, External Library Maintenance, Profiling, Library Reference
-@section Emulation Primitives
-
-The functions documented in this section can be used to take very
-specific control over the evaluation of virtual code applications. It is
-unlikely that a client program will have any need for them unless it
-aims to replace or extend the @code{avm_apply} function.
-
-The virtual machine is somewhat removed from a conventional von Neumann
-model of computation, so emulating it in C or any other imperative
-language is less straightforward than one would prefer. An elaborate
-system of interdependent data structures is used to represent partially
-evaluated computations, which does not particularly lend itself to a
-convenient, modular API. The abstraction provided by the functions in
-this section is limited mainly to that of simple memory management and
-stack operations. Consequently, a developer wishing to build on them
-effectively would need to @emph{grok} the data structures involved,
-which are described in some detail.
-
-@menu
-* Lists of Pairs of Ports::     
-* Ports and Packets::           
-* Instruction Stacks::          
-@end menu
-
-@node Lists of Pairs of Ports, Ports and Packets, Emulation Primitives, Emulation Primitives
-@subsection Lists of Pairs of Ports
-
-@cindex @code{port}
-A @code{port} is the name given to a type of pointer used in the library
-as the address of a place where a computational result yet to be
-evaluated will be sent. Ports are discussed further in @ref{Ports and Packets},
-but are mentioned here because it is sometimes necessary to employ a
-list of pairs of them. A pointer to such a list is declared as a
-@code{portal} type. It refers to a structure of the form
-@cindex @code{portal}
-@cindex @code{port_pair}
-
-@example
-struct port_pair
-@{
-  port left;
-  port right;
-  portal alters;
-@}
-@end example
-
-A small selection of functions for @code{portal} memory management is
-declared as follows in the header file @file{portals.h}. For reasons of
-C-ness, the type declarations themselves are forced to be in
-@file{lists.h}.
-
-@deftypefun portal avm_new_portal (portal @var{alters})
-This function is used to create storage for a new @code{port_pair}
-structure, and returns a @code{portal} pointer to it if successful. If
-the storage can't be allocated, a @code{NULL} pointer is returned.
-The @code{alters} field of the result is initialized as the given
-parameter supplied by the caller. All other fields are filled with zeros.
-@end deftypefun
-@deftypefun void avm_seal (portal @var{fate})
-This function performs the reclamation of storage associated with
-@code{portal} pointers, either by freeing them or by consigning them
-temporarily to a local cache for performance reasons. Client programs
-should use only this function for disposing of @code{portal} storage
-rather than using @code{free} directly, so as to allow accurate record
-keeping.
-@end deftypefun
-@deftypefun void avm_initialize_portals ()
-This function should be called by a client program prior to calling
-either of the above memory management functions in order to initialize
-some local variables. Anomalous results are possible otherwise.
-@end deftypefun
-@deftypefun void avm_count_portals ()
-This function should be called at the end of a run or after the last
-call to any of the other functions in this section as a way of detecting
-memory leaks associated with @code{portal} pointers. A warning message
-will be written to standard error if any remains unreclaimed.
-@end deftypefun
-
-@node Ports and Packets, Instruction Stacks, Lists of Pairs of Ports, Emulation Primitives
-@subsection Ports and Packets
-
-A pointer type declared as a @code{port} points to a structure in the
-following form, where a @code{flag} is an unsigned short integer type,
-and a @code{counter} is an unsigned long integer.
-@cindex @code{counter}
-@cindex @code{flag}
-@cindex @code{avm_packet}
-
-@example
-struct avm_packet
-@{
-  port parent;
-  counter errors;
-  portal descendents;
-  list impetus, contents;
-  flag predicating;
-@};
-@end example
-
-@noindent
-For reasons that make sense to C, the @code{avm_packet} and @code{port}
-types are declared in @code{lists.h}, but a few memory management
-operations on them are available by way of functions declared in
-@file{ports.h}. The intended meaning of this structure is described
-presently, but first the memory management functions are as follows.
-
-@deftypefun port avm_newport (counter @var{errors}, port @var{parent}, int @var{predicating})
-This function attempts to allocate storage for a new packet structure
-and returns its address if successful. If storage can not be allocated,
-a @code{NULL} pointer is returned. The @code{errors}, @code{parent}, and
-@code{predicating} fields are initialized with the parameters supplied
-by the caller. The rest of the structure is filled with zeros. A local
-memory cache is used for improved performance.
-@end deftypefun
-@deftypefun void avm_sever (port @var{appendage})
-This function reclaims the storage associated with a @code{port}, either
-freeing it entirely or holding it in a local cache.  None of the
-entities that may be referenced by pointers within the structure are
-affected.  Only this function should be used by client programs for
-disposing of ports, not the @code{free} function directly, or some
-internal bookkeeping will be disrupted. An internal error results if the
-argument is a @code{NULL} pointer.
-@end deftypefun
-@deftypefun void avm_initialize_ports ()
-This function must be called prior to calling either of the two above,
-in order to initialize some static variables.
-@end deftypefun
-@deftypefun void avm_count_ports ()
-This function may be called after the last call to any of the other
-functions in this section in order to detect and report unreclaimed
-storage associated with ports. A non-fatal warning will be written to
-standard error if any is detected, but otherwise there is no effect.
-@end deftypefun
-
-The interesting aspect of this data structure is the role it plays in
-capturing the state of a computation. For this purpose, it corresponds
-to a single node in a partially computed result to be represented by a
-@code{list} when it's finished. The nodes should be envisioned as a
-doubly-linked binary tree, except that the pair of @code{descendents}
-for each node is not yet known with certainty, so a list of alternatives
-must be maintained.
-
-Because the computation is not completed while this data structure
-exists, there are always some empty fields in it. For example, the
-@code{descendents} and the @code{contents} fields embody the same
-information, the latter doing so in a compact as opposed to a more
-expanded form. Hence, it would be redundant for both fields to be
-non-empty at the same time. The data structure is built initially with
-@code{descendents} and no @code{contents}, only to be transformed into
-one with @code{contents} and no @code{descendents}.
-
-The significance of each field in the structure can be summarized as
-follows.
-
-@table @code
-@item contents
-If the computational result destined for the @code{port} pointing to this packet
-is not complete, then this field is @code{NULL} and the
-@code{descendents} are being computed. Otherwise, it contains the result
-of the computation.
-@item descendents
-This field points to a list of pairs of ports serving as the
-destinations for an ensemble of concurrent computations.@footnote{Earlier
-versions of @code{avram} included a bottom avoiding choice combinator
-that required this feature, but which has been withdrawn. A single pair
-of descendent ports would now suffice.} The @code{head}
-and @code{tail} of the @code{contents} are to be identified respectively
-with the @code{contents} of the @code{left} and @code{right} @code{port}
-in the first pair to finish being computed.
-@item parent
-If this packet is addressed by the @code{left} or the @code{right} of
-@code{port} in one of the @code{descendents} of some other packet, then
-this field points to that packet.
-@item errors
-A non-zero value in this field indicates that the result destined for
-the @code{contents} of this packet is expected to be an error
-message. If the exact level of error severity incurred in the
-computation of the @code{contents} matches this number, then the
-contents can be assigned the result, but otherwise the result should
-propagate to the @code{contents} of the @code{parent}.
-@item predicating
-A non-zero value in this field implies that the result destined for the
-@code{contents} of this packet is being computed in order to decide
-which arm of a conditional function should be chosen. I.e., a
-@code{NULL} result calls for the one that is invoked when the predicate
-is false.
-@item impetus
-If the result destined for the @code{contents} of this packet is being
-computed in order to transform a virtual code fragment from its original
-form to an equivalent representation capable of being evaluated more
-directly, this field points to a @code{list} node at the root of the
-virtual code in its original form.
-@end table
-
-One of the hitherto undocumented fields in a @code{list} node structure
-@cindex @code{interpretation}
-@cindex @code{impetus}
-declared in @file{lists.h} is called the @code{interpretation}, and is
-of type @code{list}. A client program delving into sufficient depth of
-detail to be concerned with ports and packets may reasonably assign the
-@code{interpretation} field of the @code{list} referenced by the
-@code{impetus} field in a packet to be a copy of the @code{contents} of
-the packet when they are eventually obtained. Doing so will save some
-time by eliminating the need for it to be recomputed if the same virtual
-code should be executed again.
-
-If this course is taken, the @code{facilitator} field in a @code{list}
-@cindex @code{facilitator}
-node, also hitherto undocumented, should contain the address of the
-packet referring to the list node as its @code{impetus}. The reason for
-this additional link is so that it can be followed when the
-@code{impetus} of the packet is be cleared by @code{avm_dispose} in the
-event that the @code{list} node is freed before the computation
-completes. This action is performed in order to preclude a dangling
-pointer in the @code{impetus} field.
-
-@node Instruction Stacks, , Ports and Packets, Emulation Primitives
-@subsection Instruction Stacks
-
-A header file named @file{instruct.h} declares a number of memory
-management and stack operations on a data structure of the following
-form.
-@cindex @code{instruction_node}
-
-@example
-struct instruction_node
-@{
-  port client;
-  score sheet;
-  struct avm_packet actor;
-  struct avm_packet datum;
-  instruction dependents;
-@};
-@end example
-
-In this structure, an @code{instruction} is a pointer to an
-@code{instruction_node}, a @code{score} is a pointer to a profile
-database entry as discussed in @ref{Profiling}, and the @code{port} and
-@code{avm_packet} types are as described in @ref{Ports and Packets}.
-
-This data structure is appropriate for a simple virtual machine code
-@cindex concurrency
-evaluation strategy involving no concurrency. The strategy to evaluate an
-expression @code{@var{f} @var{x}} would be based on a stack of these
-nodes threaded through the @code{dependents} field, and would proceed
-something like this.
-
-@enumerate
-@item
-The stack is initialized to contain a single node having
-@code{@var{f}} in its @code{actor.contents} field, and @code{@var{x}} in
-its @code{datum.contents} field.
-@item
-The @code{client} in this node would refer to a static packet to whose
-@code{contents} field the final result will be delivered.
-@item
-The evaluator examines the @code{actor.contents} field on the top of the
-stack, detects by its form the operation it represents, and decides
-whether it corresponds to one that can be evaluated immediately by way
-of a canned function available in the library. List reversal,
-transposition, and comparison would be examples of such operations.
-@item
-If the operation can be performed in this way, the result is computed
-and assigned to the destination indicated by the @code{client} field.
-@item
-If the operation is not easy enough to perform immediately but is of a
-form recognizable as a combination of simpler operations, it is
-decomposed into the simpler operations, and each of them is
-strategically positioned on the stack so as to effect the evaluation of
-the combination. For example, if @code{@var{f}} were of the form
-@code{compose(@var{g},@var{h})} (@code{silly} notation), the node with
-@code{@var{f}} and @code{@var{x}} would be popped, but a node with
-@code{@var{g}} as its @code{actor.contents} would be pushed, and then a
-node with @code{@var{h}} as its @code{actor.contents} and @code{@var{x}}
-as its @code{datum.contents} would be pushed. Furthermore, the
-@code{client} field of the latter node would point to the
-@code{datum.contents} of the one with @code{@var{g}}, and the
-@code{client} field of the one with @code{@var{g}} would point
-wherever the @code{client} of the popped node used to point.
-@item
-If the operation indicated by the top @code{actor.contents} is neither
-implemented by a canned operation in the library nor easily decomposable
-into some that are, the evaluator can either give up or use virtual code
-to execute other virtual code. The latter trick is accomplished by
-pushing a node with @code{@var{f}} as its @code{datum.contents}, and a
-copy of a hard coded virtual code interpreter @code{@var{V}} as its
-@code{actor.contents}. The @code{client} of this node will point to the
-@code{@var{f}} in the original node so as to overwrite it when a
-simplified version is subsequently computed. The implementation of
-@code{@var{V}} is a straightforward exercise in @code{silly}
-programming.
-@item
-In any case, the evaluator would continue working on the stack until
-everything on it has been popped, at which time the result of the entire
-computation will be found in the packet addressed by the @code{client}
-in the original instruction node.
-@end enumerate
-
-What makes this strategy feasible to implement is the assumption of a
-sequential language, wherein synchronization incurs no cost and is
-automatic. The availability of any operand is implied by its position at
-the top of the stack. If you are reading this section with a view to
-@cindex threads
-implementing a concurrent or multi-threaded evaluation strategy, it will
-be apparent that further provisions would need to be made, such as that
-of a @code{data_ready} flag added to the @code{avm_packet} structure.
-
-The following functions support the use of stacks of instruction nodes
-that would be needed in an evaluation strategy such as the one above.
-
-@deftypefun int avm_scheduled (list @var{actor_contents}, counter @var{datum_errors}, list @var{datum_contents}, port @var{client}, instruction *@var{next}, score @var{sheet})
-
-This function performs the memory allocation for instruction nodes. It
-attempts to create one and to initialize the fields with the given
-parameters, returning a pointer to it if successful. It returns a
-@code{NULL} pointer if the storage could not be allocated.
-
-Copies of the @code{list} parameters @code{actor_contents} and
-@code{data_contents} are made by this function using @code{avm_copied},
-so the originals still exist as far as the caller is concerned and will
-have to be deallocated separately from this structure. The copies are
-made only if the allocation succeeds.
-
-Any fields other than those indicated by the parameters to this function
-are filled with zeros in the result.
-@end deftypefun
-@deftypefun void avm_retire (instruction *@var{done})
-This function performs the storage reclamation of instructions, taking
-as its argument the instruction to be reclaimed. The @code{list} fields
-in the structure corresponding to the @code{list} parameters used when
-it was created are specifically reclaimed as well, using
-@code{avm_dispose}.
-
-The argument to this function is the address of an @code{instruction}
-rather than just an @code{instruction} so that the @code{instruction}
-whose address is given may be reassigned as the @code{dependents} field
-of the deallocated node. In this way, the instructions can form a stack
-that is popped by this function.
-
-This function cooperates with @code{avm_scheduled} in the use of a local
-cache of instruction nodes in the interest of better performance. Client
-modules should not attempt to allocate or reclaim instructions directly
-with @code{malloc} or @code{free}, but use only these functions.
-
-It causes a fatal internal error to pass a @code{NULL} pointer to this
-function.
-@end deftypefun
-@deftypefun void avm_reschedule (instruction *@var{next})
-Given the address of an instruction pointer that may be regarded as the
-top of a stack of instructions threaded through the @code{dependents}
-field, this function exchanges the positions of the top instruction and
-the one below it. A fatal internal error is caused if there are fewer
-than two instructions in the stack.
-
-A use for this function arises in the course of evaluating virtual code
-applications of the form @code{conditional(@var{p},(@var{f},@var{g}))}
-(in @code{silly} notation). The evaluation strategy would require
-pushing nodes for all three constituents, but with @code{@var{p}} pushed
-last (therefore evaluated first). The result of the evaluation of
-@code{@var{p}} would require either the top one or the one below it to
-be popped without being evaluated, depending on whether the result is
-empty.
-@end deftypefun
-@deftypefun void avm_initialize_instruct ()
-This function should be called before any of the instruction memory
-management functions is called in order to initialize some local data
-structures. Results are unpredictable without it.
-@end deftypefun
-@deftypefun void avm_count_instruct ()
-This function should be called after the last call to any of the
-other functions in this section in order to detect and report
-unreclaimed storage associated with them. A warning message will be
-written to standard error if any unreclaimed instructions remain. This
-function relies on the assumption that the memory management has been
-done only by way of the above functions.
-@end deftypefun
-
-@node External Library Maintenance, , Emulation Primitives, Library Reference
-@section External Library Maintenance
-
-External mathematical library functions such as those documented in
-@ref{External Libraries} that are invoked from virtual code by the
-@code{library} combinator (@ref{Library combinator}) are also
-accessible from C by way of a uniform API implemented by the functions
-declared in @code{libfuns.h}. This interface applies even to libraries
-@cindex Fortran
-implemented in Fortran such as @code{minpack}. This section briefly
-documents the functions in @code{libfuns.h} and sets out some
-recommeded guidelines for developers wishing to add support for other
-external libraries.
-
-@menu
-* Calling existing library functions::
-* Implementing new library functions::
-* Working around library misfeatures::
-@end menu
-
-@node Calling existing library functions, Implementing new library functions, External Library Maintenance, External Library Maintenance
-@subsection Calling existing library functions
-
-Whatever data types a library function manipulates, its argument and
-its result are each ultimately encoded each by a single list as
-explained in @ref{Type Conversions}. This representation allows all
-library functions to be invoked by a uniform calling convention as
-detailed below.
-
-@deftypefun list avm_library_call (list @var{library_name}, @var{list function_name}, list @var{argument}, int *@var{fault})
-This function serves as an interpreter of external library functions
-by taking a @var{library_name}, a @var{function_name}, and an
-@var{argument} to the result returned by the corresponding library
-function for the given @var{argument}.
-
-The library and function names should be encoded as lists of character
-representations, the same as the arguments that would be used with the
-@code{library} combinator if it were being invoked by virtual code
-@cindex backward compatability
-(with attention to the backward compatibility issue explained in
-@ref{Characters and Strings}).
-
-If an error occurs in the course of evaluating a library function, the
-integer referenced by @var{fault} will be assigned a non-zero value,
-and the result will be a list of character string representations
-explaining the error, such as @code{<'memory overflow'>}, for example.
-Otherwise, the list returned will encode the result of the library
-function in a way that depends on the particular function being evaluated.
-@end deftypefun
-
-@deftypefun list avm_have_library_call (list @var{library_name}, list @var{function_name}, int *@var{fault})
-This function implements the @code{have} combinator described in
-@ref{Have combinator}, which tests for the availability of a library
-function. The @var{library_name} and @var{function_name} parameters
-are as explained above for @code{avm_library_call}, and @code{fault}
-could signal an error similarly for this function as well.
-
-The result returned will be an error message in the event of an error,
-or a list of pairs of strings otherwise. The list will be empty if the
-library function is not available. If the library function is
-available, the list will contain a single pair, as in
-
-@example
-<(library_name,function_name)>
-@end example
-
-In addition, the list representation of the character string
-@code{'*'} can be specified as either the library name or the function
-name or both. This string is interpreted as a wild card and will cause
-all matching pairs of library and function names to be returned in the
-list.
-@end deftypefun
-
-@deftypefun void avm_initialize_libfuns ()
-This function initializes some static data structures used by the two
-functions above. It may be called optionally before the first call to
-either of them, but will be called automatically if not.
-@end deftypefun
-
-@deftypefun void avm_count_libfuns ()
-This function can be used as an aid to detecting memory leaks. It
-reclaims any data structures allocated by
-@code{avm_initialize_libfuns} and should be called towards the end of
-a run some time prior to @code{avm_count_lists} @ref{Simple
-Operations}, if the latter is being used.
-@end deftypefun
-
-@node Implementing new library functions, Working around library misfeatures, Calling existing library functions, External Library Maintenance
-@subsection Implementing new library functions
-
-Adding more external libraries to @code{avram} is currently a manual
-procedure requiring the attention of a developer conversant with C.
-To support a new library called @code{foobar},
-these steps need to be followed at a minimum.
-
-@itemize @bullet
-@item
-Create a new file called @file{foobar.h} under the @file{avm/}
-directory in the main source tree whose name doesn't clash with any
-@cindex header file
-@cindex library interface header file
-existing file names and preferably doesn't induce any proper prefixes
-among them. This file should contain at least these function
-declarations.
-@example
-
-extern list avm_foobar_call (list function_name,list argument,
-                             int *fault);
-
-extern list avm_have_foobar_call (list function_name,int *fault);
-
-extern void avm_initialize_foobar ();
-
-extern void avm_count_foobar ();
-@end example
-
-There should also be the usual preprocessor directives for
-@file{include} files. The naming convention shown should be followed in
-anticipation of automated support for these operations in the future.
-@item
-Add @file{foobar.h} to the list of other header files in
-@file{avm/Makefile.am}.
-@item
-Create a new file called @file{foobar.c} under the @file{src/}
-directory whose name doesn't clash with any existing file names to
-@cindex library interfac source file
-store most of the library interface code. It can start out with
-stubs for the functions declared in @file{foobar.h}.
-@item
-Add @file{foobar.c} to the list of other source files in
-@file{src/Makefile.am}
-@item
-Execute the following command in the main @file{avram-x.x.x}
-source directory where the file @file{configure.in} is found.
-@example
-
-aclocal \
-&& automake --gnu --add-missing \
-&& autoconf
-@end example
-
-This command requires having @code{automake} and
-@cindex automake
-@cindex autoconf
-@code{autoconf} installed on your system.
-@item
-Make the following changes to @file{libfuns.c}.
-
-@itemize @bullet
-@item
-Add the line @code{#include<avm/foobar.h>} after the
-@cindex include directives
-other @code{include} directives.
-@item
-Add the string @code{"foobar"} to the end of the array of
-@code{libnames} in @code{avm_initialize_libfuns}.
-@item 
-Add a call to @code{avm_initialize_foobar} to the body.
-@item
-Add a call to @code{avm_count_foobar} to the body of
-@code{avm_count_libfuns}.
-@item
-Add a case of the form
-@example
-case nn:
-  return avm_foobar_call(function_name,argument,fault);
-@end example
-
-after the last case in @code{avm_library_call}, being
-careful not to change the order, and using the same
-name as above in the file @file{foobar.h}.
-@item
-Add a case of the form
-@example
-case nn:
-  looked_up = avm_have_foobar_call(function_name,fault);
-  break;
-@end example
-
-after the last case in @code{avm_have_library_call}, being
-careful not to change the order, and using the same name
-as above in the file @file{foobar.h}.
-@end itemize
-@item
-Edit @file{foobar.c} and @file{foobar.h} to suit,
-periodically compiling and testing by executing @code{make}.
-@item
-Package and install at will.
-@end itemize
-
-The functions shown above have the obvious interpretations, namely
-that @code{avm_foobar_call} evaluates a library function from the
-@code{foobar} library, and @code{avm_have_foobar_call} tests for a
-function's availability. The latter should interpret wild cards as
-explained in @ref{Calling existing library functions}, but should
-return only a list of strings for the matching function names rather
-than a list of pairs of strings, as the library name is redundant.
-The remaining functions are for static initialization and reclamation.
-
-These functions should consist mainly of boilerplate code similar to
-the corresponding functions in any of the other library source files,
-which should be consulted as examples. The real work would be done by
-other functions called by them. These should be statically declared
-within the @file{.c} source file and normally not listed in the
-@file{.h} header file unless there is some reason to think they may be
-of more general use. Any externally visible functions should have
-names beginning with @code{avm_} to avoid name clashes.
-
-Some helpful hints are reported below for what they may be worth.
-
-@itemize @bullet
-@item
-The reason for doing this is to leverage off other people's
-intelligence, so generally @code{foobar.c} should contain only glue
-code for library routines developed elsewhere with great skill rather
-than reinventing them in some home grown way.
-@item
-The best numerical software is often written by Fortran
-@cindex Fortran
-programmers. Linking to a Fortran library is no problem on GNU systems
-provided that all variables are passed by reference and all arrays are
-converted to column order (@ref{Type Conversions}).
-@item
-Most C++ programmers have yet to reach a comparable standard, but C++
-@cindex C++
-libraries can also be linked by running @code{nm} on the static
-@cindex nm utility
-library file to find out the real names of the functions and
-@cindex c++filt utility
-@code{c++filt} to find out which is which. However, there
-is no obvious workaround for the use of so called derived classes
-by C++ programmers to simulate passing functions as parameters.
-@item
-Anything worth using can probably be found in the Debian
-@cindex Debian
-archive.
-@item
-Not all libraries are sensible candidates for interfaces to
-@code{avram}. Typical design flaws are
-
-@itemize @bullet
-@item
-irrepressible debugging messages written to @code{stderr} or
-@code{stdout} that are unfit for end user consumption
-@item
-deliberately crashing the application if @code{malloc} fails
-@item
-opaque data types with undocumented storage requirements
-@item
-opaque data types that would be useful to store persistently
-but have platform specific binary representations
-@item
-heavily state dependent
-@cindex state dependence
-semantics
-@item
-identifiers with clashing names
-@item
-restrictive
-@cindex licensing restrictions
-licenses
-@end itemize
-
-Some of these misfeatures have workarounds as explained next in
-@ref{Working around library misfeatures}, at least if there's
-nothing else wrong with the library.
-@end itemize
-
-Those who support @code{avram} are always prepared to assist in the
-dissemination of worthwhile contributed library modules under terms
-compatible with @ref{Copying}, and under separate copyrights if
-@cindex copyright
-preferred.  Contributed modules can be integrated into the official
-source tree provided that they meet the following additional
-@cindex coding standards
-guidelines to those above.
-
-@itemize @bullet
-@item
-source code documentation and indentation according to GNU coding
-standards (@url{http://www.gnu.org/prep/standards})
-@item
-sufficient stability for a semi-annual release cycle
-@item
-no run-time or compile-time dependence on any non-free software,
-although dynamic loading and client/server interaction are acceptable
-@item
-portable or at least unbreakable configuration by appropriate use of
-@cindex autoconf
-@code{autoconf} macros and conditional defines
-@item
-little or no state dependence at the level of the virtual code
-@cindex state dependence
-interface (i.e., pure functions or something like them, except for
-@cindex random number generators
-random number generators and related applications)
-@item
-adequate documentation for a section in @ref{External Libraries}
-@end itemize
-
-@node Working around library misfeatures, , Implementing new library functions, External Library Maintenance
-@subsection Working around library misfeatures
-
-As mentioned already (@ref{Implementing new library functions}), some
-common problems with external libraries that are worthwhile in other
-respects are that they may generate unwelcome console output while
-running, they may follow ill defined memory management policies, and
-they may handle exceptions just by crashing themselves along with the
-client module.
-
-An accumulation of techniques for coping with these issues (short of
-modifying the library source) has been collected into the API and made
-available by way of the header file @file{mwrap.h}. This section
-briefly documents how they might be put to use.
-
-@menu
-* Inept excess verbiage::
-* Memory leaks::
-* Suicidal exception handling::
-@end menu
-
-@node Inept excess verbiage, Memory leaks, Working around library misfeatures, Working around library misfeatures
-@subsubsection Inept excess verbiage
-
-Although the author of a library function may take pride in putting
-its activities on display, it should be assumed that virtual code
-applications running on @code{avram} have other agendas for the
-console, so the library interface module should prevent direct output
-from the external library.
-
-More thoughtful API's may have a verbosity setting, which should be
-@cindex verbosity setting
-used in preference to this workaround, but failing that, it is easy to
-dispense with console output generated by calls to external library
-functions by using some combination of the following functions.
-
-@deftypefun void avm_turn_off_stdout ()
-Calling this function will suppress all output to the standard output
-stream until the next time @code{avm_turn_on_stdout} is called.
-Additional calls to this function without intervening calls to
-@code{avm_turn_on_stdout} may be made safely with no effect.  The
-standard output stream is flushed as a side effect of calling this
-function.
-@end deftypefun
-
-@deftypefun void avm_turn_on_stdout ()
-Calling this function will allow output to the standard output
-stream to resume if it has been suppressed previously by a call to
-@code{avm_turn_off_stdout}. If @code{avm_turn_off_stdout} has not been
-previously called, this function has no effect. Any output that would
-have been sent to @code{stdout} during the time it was turned off will
-be lost.
-@end deftypefun
-
-@deftypefun void avm_turn_off_stderr ()
-This function performs a similar service to that of
-@code{avm_turn_off_stdout} but pertains to the standard error stream.
-The standard error and the standard output streams are controlled
-independently even if both of them are piped to the same console.
-@end deftypefun
-
-@deftypefun void avm_turn_on_stderr ()
-This function performs a similar service to that of
-@code{avm_turn_on_stdout} but pertains to the standard error stream.
-@end deftypefun
-
-As an example, the following code fragment will prevent any output to
-standard output taking place as a side effect of @code{blather}, but
-will allow error messages to standard error. Note that ouput should
-not be left permanently turned off.
-
-@example
-...
-#include <avm/mwrap.h>
-...
-
-x = y + z;
-avm_turn_off_stdout ();
-w = blather (foo, bar, baz);
-avm_turn_on_stdout ();
-return w;
-...
-@end example
-
-One possible issue with these functions is that they rely on a
-feature of the GNU C library that might not be portable to non-GNU
-@cindex portability
-systems and has not been widely tested on other platforms.
-
-Another issue is that a library function could be both careless enough
-to clutter the console unconditionally and meticulous enough to check
-for I/O errors after each attempted write. Writing while the output
-stream is disabled will return an I/O error to the caller (i.e., to
-the verbose library function) for appropriate action, which could
-include terminating the process.
-
-@node Memory leaks, Suicidal exception handling, Inept excess verbiage, Working around library misfeatures
-@subsubsection Memory leaks
-
-Incorrect memory management may undermine confidence in a library when
-one wonders what else it gets wrong, but if the worst it does is leave
-a few bytes unreclaimed, then help is at hand.
-
-The first priority is to assess the seriousness of the situation.
-Similarly to the way library functions are bracketed with calls to
-those listed in @ref{Inept excess verbiage}, the following functions
-are meant to be placed before and after a call to a library function
-either for diagnostic purposes or production use.
-
-@deftypefun void avm_manage_memory ()
-After this function is called, all subsequent calls to the standard C
-functions @code{malloc}, @code{free}, and @code{realloc} are
-intercepted and logged until the next time
-@code{avm_dont_manage_memory} is called. Furthermore, a complete
-record is maintained of the addresses and sizes of all allocated areas
-of memory during this time in a persistent data structure managed
-internally.
-@end deftypefun
-
-@deftypefun void avm_dont_manage_memory ()
-Calling this function suspends the storage monitoring activities
-initiated by calling @code{avm_manage_memory}, but the record of
-allocated memory areas is not erased.
-@end deftypefun
-
-@deftypefun void avm_debug_memory ()
-After this function is called and @code{avm_manage_memory} is also
-called, the standard output stream will display a running account of
-the sizes and addresses of all memory allocations or deallocations as
-they occur until the next call to either @code{avm_dont_debug_memory}
-or @code{avm_dont_manage_memory}.
-@end deftypefun
-
-@deftypefun void avm_dont_debug_memory ()
-This function stops the output being sent to @code{stdout} caused by
-@code{avm_debug_memory}, if any, but has no effect on the logging of
-memory management events preformed due to @code{avm_manage_memory}.
-@end deftypefun
-
-While the latter two are not useful in production code, they can help
-to clarify an inadequately documented API during development by
-experimentally identifying the functions that cause memory to be
-allocated. They can also provide the answer to questions like whether
-separate copies are made from arrays passed to functions (useful for
-knowing when it's appropriate to free them).
-
-Although the console output reveals everything there is to know about
-memory management during the selected window, the question of
-unreclaimed storage is more directly settled by the following
-functions.
-
-@deftypefun void avm_initialize_mwrap ()
-This function has to be called before any other functions from
-@file{mwrap.h} in order to clean the slate and prepare the static data
-structures for use. This function might not have to be called
-explicitly if the client module is part of @code{avram}, whose main
-program would have already called it. There is no harm in calling it
-repeatedly.
-@end deftypefun
-
-@deftypefun void avm_count_mwrap ()
-This function should be called after the last call to any other
-functions in @file{mwrap.h}, when it is expected that all storage that
-was allocated while @code{avm_manage_memory} was in effect should have
-been reclaimed.
-
-If there is no unreclaimed storage allocated during an interval when
-memory was being managed, this function returns uneventfully. However,
-if any storage remains unreclaimed, a message stating the number of
-bytes is written to @code{stderr}.
-
-If @code{avm_debug_memory} is also in effect when this function
-detects unreclaimed storage, an itemized list of the unreclaimed
-memory addresses and their sizes is written to standard output.
-@end deftypefun
-
-Of course, in order for @code{avm_count_mwrap} to report meaningful
-results, any memory that is allocated during the interval between
-calls to @code{avm_manage_memory} and @code{avm_dont_manage_memory}
-must have been given an opportunity to be reclaimed also while
-this logging mechanism is in effect. However, there may be arbitrarily
-many intervening intervals during which it is suspended.
-
-On the other hand, any storage that is allocated when memory is not
-being managed must not be freed at a time when it is (except for
-freeing a @code{NULL} pointer, which is tolerated but not
-encouraged). Doing so raises an internal error, causing termination
-@cindex internal error
-with extreme prejudice. This behavior is a precaution against library
-functions freeing storage that they didn't allocate, which would mean
-no memory is safe and it's better for @code{avram} not to continue.
-
-If these investigations uncover no evidence of a memory leak, then
-perhaps the relevant library functions are reliable enough to run
-without supervisory memory management. Alternatively, when memory
-leaks are indicated, the next function provides a simple remedy.
-
-@deftypefun void avm_free_managed_memory ()
-This function causes all storage to be reclaimed that was allocated
-at any time while logging of memory allocation was in effect (i.e.,
-whenever @code{avm_manage_memory} had been called more recently than
-@code{avm_dont_manage_memory}). When the storage is freed, no further
-record of it is maintained.
-
-A side effect of this function is to call @code{avm_dont_manage_memory}
-and therefore leave memory management turned off.
-@end deftypefun
-
-This last function when used in conjunction with the others is
-therefore the workaround for library functions that don't clean up
-after themselves. It may be important to do it for them if repeated
-calls to the library function are expected, which would otherwise
-cause unreclaimed storage to accumulate until it curtailed other
-operations.
-
-One small issue with this function is the assumption that unreclaimed
-storage is really a leak and not internal library data that is
-designed to persist between calls. If this assumption is not valid,
-breakage will occur. However, libraries deliberately making use of
-persistent data are likely to have initialization and destructor
-functions as part of their API's, so this assumption is often
-justified if they don't.
-
-An example of using these functions is given below.
-
-In this example, @code{allocated_library_object} is a hypothetical
-function exported by an external library that causes storage to be
-allocated, and @code{library_reclamation_routine} is provided by the
-same library ostensibly to reclaim the storage thus
-allocated. However, the latter is suspected of memory leaks.
-
-The variable @code{my_data} is declared and used by an @code{avram}
-developer who is presumably competent to reclaim it correctly, rather
-than it being part of an external library. Memory management is
-therefore enabled during the calls to the library routines but not at
-other times.
-
-The call to @code{avm_count_mwrap} is redundant immediately after a
-call to @code{avm_free_managed_memory}, because with all managed
-memory having been freed, no memory leak will ever be detected, but it
-is included for illustrative purposes.
-
-@example
-#include <avm/mwrap.h>
-...
-
-@{
-  void *behemoth;
-  char *my_data;
-
-  avm_initialize_mwrap ();
-  avm_manage_memory ();
-  behemoth = allocated_library_object (foo, bar);
-  avm_dont_manage_memory ();
-  my_data = (char *) malloc (100);
-  ...
-  free (my_data);
-  avm_manage_memory ();
-  library_reclamation_routine (&behemoth);
-  avm_free_managed_memory ();
-  avm_count_mwrap ();
-  return;
-@}
-@end example
-
-It might be a cleaner solution in some sense to omit the call to
-@code{library_reclamation_routine} entirely, because the storage
-allocated during the call to @code{allocated_library_object} will be
-reclaimed perfectly well by @code{avm_free_managed_memory} without
-it. Doing so may also be the only option if the library reclamation
-routine is either extremely unreliable or non-existent. However, the
-style above is to be preferred for portability if possible. The memory
-management functions rely on the availability of the system header
-file @code{malloc.h}, and GNU C library features whose portability is
-not assured.  If the required features are not detected on the host
-system at configuration time, conditional directives in the
-@code{avram} source will make the @code{avm_}* memory management
-functions perform no operations, and the responsibility for memory
-management will devolve to the possibly less robust external library
-implementation.
-
-@node Suicidal exception handling, , Memory leaks, Working around library misfeatures
-@subsubsection Suicidal exception handling
-
-An inconvenient characteristic of some external library functions is
-to terminate the program rather than returning an error status to the
-caller for routine events such as a failure of memory allocation.
-Although in many cases there is no simple workaround for this
-behavior, memory allocation failures at least can be detected and
-preventive action taken by using the functions described in this
-section.
-
-The general approach is to use memory management functions from
-@file{mwrap.h} as described previously (@ref{Memory leaks}), while
-additionally registering a return destination for a non-local jump to
-@cindex non-local jumps
-be taken in the event of a memory overflow. The jump is taken when an
-external library function calls @code{malloc} or @code{realloc}
-unsuccessfully.  The jump avoids passing control back to the library
-function, thereby denying it the opportunity to abort, but restores
-the context to that of the jump destination almost as if the library
-function and all of its intervening callers had returned normally.
-
-The interface is similar to that of the standard @code{setjmp}
-@cindex setjmp
-function defined in the system header file @code{setjmp.h}, and in
-fact is built on it, but differs in that the client module does not
-explicitly refer to jump buffers. Instead, the @code{mwrap} module
-internally maintains a stack of return destinations.
-
-If a jump is taken, it always goes to the most recently registered
-destination. It may revert to the previously registered destination
-only when the current one is cleared. This organization provides the
-necessary flexibility for multiple clients and recursion, but it
-necessitates a protocol whereby each registration of a destination
-must be explicitly cleared exactly once.
-
-The following functions implement these two features.
-
-@deftypefun int avm_setjmp ()
-This function specifies the point to which control will pass by a
-non-local jump if there is insufficient memory to complete a
-subsequent @code{malloc} or @code{realloc} operation. Only the
-operations that take place while memory is being managed due to
-@code{avm_manage_memory} are affected (@ref{Memory leaks}).
-
-The function returns zero when it is called normally and successfully
-registers the return point.
-
-It returns a non-zero value when it has been entered by a non-local
-jump (i.e., when @code{malloc} or @code{realloc} has reported
-insufficient memory while memory management is active), or when the
-return point could not be successfully registered due to insufficient
-memory. The client need not distinguish between these two cases,
-because both correspond to memory overflows and the destination must
-be cleared by @code{avm_clearjmp} regardless.
-
-When a non-zero value is returned due to this function being reached
-by a non-local jump, it has the side effects of reclaiming all managed
-memory by calling @code{avm_free_managed_memory} and disabling memory
-management by calling @code{avm_dont_manage_memory}.
-@end deftypefun
-
-@deftypefun void avm_clearjmp ()
-This function cancels the effect of @code{avm_setjmp ()} by preventing
-further non-local jumps to its destination if the destination was
-successfully registered, or by acknowledging unsuccessful registration
-otherwise. It should be called before exiting any function that calls
-@code{avm_setjmp ()} or anomalous results may ensue.
-@end deftypefun
-
-The memory management functions @code{avm_manage_memory} and
-@code{avm_dont_manage_memory} can be useful with or without
-@code{avm_setjmp}, depending on how much of a workaround is needed for
-a given library. If a library does not abort on memory overflows,
-there is no need to use @code{avm_setjmp}, while it may still be
-appropriate to use the other functions against memory leaks.
-
-Calling @code{avm_clearjmp} is particularly important if a client
-module with memory management that doesn't use @code{avm_setjmp} is
-invoked subsequently to one that does, so that memory overflows in the
-latter won't cause an attempted jump to a stale destination.
-
-A further complication that arises from careful consideration of these
-issues is the situation of a client module that does not intend to use
-@code{avm_setjmp} but is called (perhaps indirectly) by one that
-does. The latter will have registered a return destination that
-remains active and valid even if the former refrains from doing so,
-thereby allowing a branch to be taken that should have been prevented.
-Although it is an unusual situation, it can be accommodated by the
-following function.
-
-@deftypefun void avm_setnonjump ()
-This function temporarily inhibits non-local jumps to destinations
-previously registered by @code{avm_setjmp} until the next time
-@code{avm_clearjmp} is called. Thereafter, any previously registered
-destinations are reinstated.
-@end deftypefun
-
-A sketch of how some of these functions might be used to cope with
-library functions that would otherwise terminate the program in the
-event of a memory overflow is shown below. The GNU @code{libc}
-@cindex non-local jumps
-reference manual contains a related discussion of non-local jumps.
-
-@example
-#include <avm/mwrap.h>
-...
-
-int
-function foobar (foo, bar)
-...
-@{
-char *my_data;
-
-  my_data = (char *) malloc (100);
-  if (avm_setjmp () != 0)
-    @{
-      avm_clearjmp ();
-      avm_turn_on_stdout ();       /* reaching here */
-      free (my_data);              /* means malloc  */
-      return ABNORMAL_STATUS;      /* failed below  */
-    @}
-  avm_turn_off_stdout ();
-  avm_manage_memory ();
-  ...
-  call_library_functions (foo, bar);    /* may jump */
-  ...                                   /* to above */
-  avm_free_managed_memory ();
-  avm_turn_on_stdout ();
-  avm_clearjmp ();
-  free (my_data);            /* reaching here means */
-  return OK_STATUS;          /* jumping wasn't done */
-@}
-@end example
-
-Portability issues with these functions are not well known at this
-@cindex portability
-writing. If the configuration script for @code{avram} fails to detect
-the required features in @code{setjmp.h} on the host system,
-conditional compilation directives will disable the functions
-@code{avm_setjmp}, @code{avm_clearjmp}, and @code{avm_setnonjmp}.
-However, it may still be possible for the other @code{avm_}* memory
-management functions to be configured.
-
-If @code{setjmp} is not configured, the @code{avm_setjmp} function
-is still callable but will always return a value of zero, and will
-provide no protection against external library functions aborting the
-program. The other two will perform no operation and return.
-
-@node Character Table, Reference Implementations, Library Reference, Top
-@appendix Character Table
-
-@cindex character representations
-This table lists the representations used by @code{avram} for
-characters. The left column shows the character code in decimal. For
-printable characters, the middle column shows the character. The right
-column shows the representation used. For example, the letter @code{A} has
-character code 65, and the representation
-@code{(nil,(((nil,(nil,(nil,nil))),nil),(nil,nil)))}.
-
-These representations were generated automatically to meet various
-helpful criteria, and are not expected to change in future releases. No
-character representation coincides with the representations used for
-boolean values, natural numbers, character strings, pairs of characters,
-or certain other data types beyond the scope of this document. An easy
-algorithm for lexical sorting is possible. Subject to these criteria,
-the smallest possible trees were chosen.
-
-@example
-
-  0   (nil,(nil,(nil,((nil,nil),(nil,nil)))))
-  1   (nil,(nil,((nil,nil),(nil,nil))))
-  2   (nil,(nil,((nil,nil),(nil,(nil,nil)))))
-  3   (nil,(nil,((nil,(nil,nil)),(nil,nil))))
-  4   (nil,(nil,(((nil,nil),nil),(nil,nil))))
-  5   (nil,(nil,(((nil,nil),(nil,nil)),nil)))
-  6   (nil,(nil,((((nil,nil),(nil,nil)),nil),nil)))
-  7   (nil,((nil,nil),(nil,nil)))
-  8   (nil,((nil,nil),(nil,(nil,nil))))
-  9   (nil,((nil,nil),(nil,(nil,(nil,nil)))))
- 10   (nil,((nil,nil),(nil,(nil,(nil,(nil,nil))))))
- 11   (nil,((nil,nil),(nil,((nil,nil),(nil,nil)))))
- 12   (nil,((nil,nil),(nil,((nil,(nil,nil)),nil))))
- 13   (nil,((nil,nil),(nil,(((nil,nil),nil),nil))))
- 14   (nil,((nil,nil),((nil,nil),(nil,nil))))
- 15   (nil,((nil,nil),((nil,nil),(nil,(nil,nil)))))
- 16   (nil,((nil,nil),((nil,(nil,nil)),nil)))
- 17   (nil,((nil,nil),((nil,(nil,nil)),(nil,nil))))
- 18   (nil,((nil,nil),((nil,(nil,(nil,nil))),nil)))
- 19   (nil,((nil,nil),(((nil,nil),nil),(nil,nil))))
- 20   (nil,((nil,nil),(((nil,nil),(nil,nil)),nil)))
- 21   (nil,((nil,(nil,nil)),(nil,nil)))
- 22   (nil,((nil,(nil,nil)),(nil,(nil,nil))))
- 23   (nil,((nil,(nil,nil)),(nil,(nil,(nil,nil)))))
- 24   (nil,((nil,(nil,nil)),(nil,((nil,nil),nil))))
- 25   (nil,((nil,(nil,nil)),((nil,nil),nil)))
- 26   (nil,((nil,(nil,nil)),((nil,nil),(nil,nil))))
- 27   (nil,((nil,(nil,nil)),((nil,(nil,nil)),nil)))
- 28   (nil,((nil,(nil,nil)),(((nil,nil),nil),nil)))
- 29   (nil,((nil,(nil,(nil,nil))),(nil,nil)))
- 30   (nil,((nil,(nil,(nil,nil))),(nil,(nil,nil))))
- 31   (nil,((nil,(nil,(nil,nil))),((nil,nil),nil)))
- 32   (nil,((nil,(nil,(nil,(nil,nil)))),(nil,nil)))
- 33 ! (nil,((nil,(nil,((nil,nil),nil))),(nil,nil)))
- 34 " (nil,((nil,(nil,((nil,nil),(nil,nil)))),nil))
- 35 # (nil,((nil,((nil,nil),nil)),(nil,nil)))
- 36 $ (nil,((nil,((nil,nil),nil)),(nil,(nil,nil))))
- 37 % (nil,((nil,((nil,nil),(nil,nil))),nil))
- 38 & (nil,((nil,((nil,nil),(nil,nil))),(nil,nil)))
- 39 ' (nil,((nil,((nil,nil),(nil,(nil,nil)))),nil))
- 40 ( (nil,((nil,((nil,(nil,nil)),nil)),(nil,nil)))
- 41 ) (nil,((nil,((nil,(nil,nil)),(nil,nil))),nil))
- 42 * (nil,((nil,(((nil,nil),nil),nil)),(nil,nil)))
- 43 + (nil,((nil,(((nil,nil),nil),(nil,nil))),nil))
- 44 , (nil,((nil,(((nil,nil),(nil,nil)),nil)),nil))
- 45 - (nil,(((nil,nil),nil),(nil,nil)))
- 46 . (nil,(((nil,nil),nil),(nil,(nil,nil))))
- 47 / (nil,(((nil,nil),nil),(nil,(nil,(nil,nil)))))
- 48 0 (nil,(((nil,nil),nil),((nil,nil),(nil,nil))))
- 49 1 (nil,(((nil,nil),nil),((nil,(nil,nil)),nil)))
- 50 2 (nil,(((nil,nil),(nil,nil)),nil))
- 51 3 (nil,(((nil,nil),(nil,nil)),(nil,nil)))
- 52 4 (nil,(((nil,nil),(nil,nil)),(nil,(nil,nil))))
- 53 5 (nil,(((nil,nil),(nil,nil)),((nil,nil),nil)))
- 54 6 (nil,(((nil,nil),(nil,(nil,nil))),nil))
- 55 7 (nil,(((nil,nil),(nil,(nil,nil))),(nil,nil)))
- 56 8 (nil,(((nil,nil),(nil,(nil,(nil,nil)))),nil))
- 57 9 (nil,(((nil,nil),((nil,nil),nil)),(nil,nil)))
- 58 : (nil,(((nil,nil),((nil,nil),(nil,nil))),nil))
- 59 ; (nil,(((nil,nil),((nil,(nil,nil)),nil)),nil))
- 60 < (nil,(((nil,(nil,nil)),nil),(nil,nil)))
- 61 = (nil,(((nil,(nil,nil)),nil),(nil,(nil,nil))))
- 62 > (nil,(((nil,(nil,nil)),(nil,nil)),nil))
- 63 ? (nil,(((nil,(nil,nil)),(nil,nil)),(nil,nil)))
- 64 @@ (nil,(((nil,(nil,nil)),(nil,(nil,nil))),nil))
- 65 A (nil,(((nil,(nil,(nil,nil))),nil),(nil,nil)))
- 66 B (nil,(((nil,(nil,(nil,nil))),(nil,nil)),nil))
- 67 C (nil,(((nil,((nil,nil),nil)),nil),(nil,nil)))
- 68 D (nil,(((nil,((nil,nil),nil)),(nil,nil)),nil))
- 69 E (nil,((((nil,nil),nil),nil),(nil,nil)))
- 70 F (nil,((((nil,nil),nil),nil),(nil,(nil,nil))))
- 71 G (nil,((((nil,nil),nil),(nil,nil)),nil))
- 72 H (nil,((((nil,nil),nil),(nil,nil)),(nil,nil)))
- 73 I (nil,((((nil,nil),nil),(nil,(nil,nil))),nil))
- 74 J (nil,((((nil,nil),(nil,nil)),nil),(nil,nil)))
- 75 K (nil,((((nil,nil),(nil,nil)),(nil,nil)),nil))
- 76 L (nil,((((nil,(nil,nil)),nil),nil),(nil,nil)))
- 77 M (nil,((((nil,(nil,nil)),nil),(nil,nil)),nil))
- 78 N (nil,(((((nil,nil),nil),nil),nil),(nil,nil)))
- 79 O (nil,(((((nil,nil),nil),nil),(nil,nil)),nil))
- 80 P ((nil,nil),(nil,nil))
- 81 Q ((nil,nil),(nil,(nil,nil)))
- 82 R ((nil,nil),(nil,(nil,(nil,nil))))
- 83 S ((nil,nil),(nil,(nil,(nil,(nil,nil)))))
- 84 T ((nil,nil),(nil,(nil,(nil,(nil,(nil,nil))))))
- 85 U ((nil,nil),(nil,(nil,((nil,(nil,nil)),nil))))
- 86 V ((nil,nil),(nil,(nil,(((nil,nil),nil),nil))))
- 87 W ((nil,nil),(nil,((nil,nil),(nil,nil))))
- 88 X ((nil,nil),(nil,((nil,(nil,nil)),nil)))
- 89 Y ((nil,nil),(nil,((nil,(nil,nil)),(nil,nil))))
- 90 Z ((nil,nil),(nil,((nil,(nil,(nil,nil))),nil)))
- 91 [ ((nil,nil),(nil,((nil,((nil,nil),nil)),nil)))
- 92 \ ((nil,nil),(nil,(((nil,nil),nil),nil)))
- 93 ] ((nil,nil),(nil,(((nil,nil),nil),(nil,nil))))
- 94 ^ ((nil,nil),(nil,(((nil,nil),(nil,nil)),nil)))
- 95 _ ((nil,nil),(nil,(((nil,(nil,nil)),nil),nil)))
- 96 ` ((nil,nil),(nil,((((nil,nil),nil),nil),nil)))
- 97 a ((nil,nil),((nil,nil),(nil,nil)))
- 98 b ((nil,nil),((nil,nil),(nil,(nil,nil))))
- 99 c ((nil,nil),((nil,nil),(nil,(nil,(nil,nil)))))
-100 d ((nil,nil),((nil,nil),((nil,nil),(nil,nil))))
-101 e ((nil,nil),((nil,nil),((nil,(nil,nil)),nil)))
-102 f ((nil,nil),((nil,(nil,nil)),nil))
-103 g ((nil,nil),((nil,(nil,nil)),(nil,nil)))
-104 h ((nil,nil),((nil,(nil,nil)),(nil,(nil,nil))))
-105 i ((nil,nil),((nil,(nil,nil)),((nil,nil),nil)))
-106 j ((nil,nil),((nil,(nil,(nil,nil))),nil))
-107 k ((nil,nil),((nil,(nil,(nil,nil))),(nil,nil)))
-108 l ((nil,nil),((nil,(nil,(nil,(nil,nil)))),nil))
-109 m ((nil,nil),((nil,((nil,nil),nil)),(nil,nil)))
-110 n ((nil,nil),((nil,((nil,nil),(nil,nil))),nil))
-111 o ((nil,nil),((nil,((nil,(nil,nil)),nil)),nil))
-112 p ((nil,nil),(((nil,nil),nil),(nil,nil)))
-113 q ((nil,nil),(((nil,nil),nil),(nil,(nil,nil))))
-114 r ((nil,nil),(((nil,nil),(nil,nil)),nil))
-115 s ((nil,nil),(((nil,nil),(nil,nil)),(nil,nil)))
-116 t ((nil,nil),(((nil,nil),(nil,(nil,nil))),nil))
-117 u ((nil,nil),(((nil,(nil,nil)),nil),(nil,nil)))
-118 v ((nil,nil),(((nil,(nil,nil)),(nil,nil)),nil))
-119 w ((nil,nil),((((nil,nil),nil),nil),(nil,nil)))
-120 x ((nil,nil),((((nil,nil),nil),(nil,nil)),nil))
-121 y ((nil,nil),(((((nil,nil),nil),nil),nil),nil))
-122 z ((nil,(nil,nil)),(nil,nil))
-123 @{ ((nil,(nil,nil)),(nil,(nil,(nil,nil))))
-124 | ((nil,(nil,nil)),(nil,(nil,(nil,(nil,nil)))))
-125 @} ((nil,(nil,nil)),(nil,((nil,nil),nil)))
-126 ~ ((nil,(nil,nil)),(nil,((nil,nil),(nil,nil))))
-127   ((nil,(nil,nil)),(nil,((nil,(nil,nil)),nil)))
-128   ((nil,(nil,nil)),((nil,nil),(nil,nil)))
-129   ((nil,(nil,nil)),((nil,nil),(nil,(nil,nil))))
-130   ((nil,(nil,nil)),((nil,(nil,nil)),nil))
-131   ((nil,(nil,nil)),((nil,(nil,nil)),(nil,nil)))
-132   ((nil,(nil,nil)),((nil,(nil,(nil,nil))),nil))
-133   ((nil,(nil,nil)),(((nil,nil),nil),(nil,nil)))
-134   ((nil,(nil,nil)),(((nil,nil),(nil,nil)),nil))
-135   ((nil,(nil,(nil,nil))),(nil,nil))
-136   ((nil,(nil,(nil,nil))),(nil,(nil,nil)))
-137   ((nil,(nil,(nil,nil))),(nil,(nil,(nil,nil))))
-138   ((nil,(nil,(nil,nil))),(nil,((nil,nil),nil)))
-139   ((nil,(nil,(nil,nil))),((nil,nil),(nil,nil)))
-140   ((nil,(nil,(nil,nil))),((nil,(nil,nil)),nil))
-141   ((nil,(nil,(nil,(nil,nil)))),(nil,nil))
-142   ((nil,(nil,(nil,(nil,nil)))),(nil,(nil,nil)))
-143   ((nil,(nil,(nil,(nil,nil)))),((nil,nil),nil))
-144   ((nil,(nil,(nil,(nil,(nil,nil))))),(nil,nil))
-145   ((nil,(nil,(nil,((nil,nil),nil)))),(nil,nil))
-146   ((nil,(nil,((nil,nil),nil))),(nil,nil))
-147   ((nil,(nil,((nil,nil),(nil,nil)))),(nil,nil))
-148   ((nil,(nil,((nil,(nil,nil)),nil))),(nil,nil))
-149   ((nil,(nil,(((nil,nil),nil),nil))),(nil,nil))
-150   ((nil,((nil,nil),nil)),(nil,nil))
-151   ((nil,((nil,nil),nil)),(nil,(nil,nil)))
-152   ((nil,((nil,nil),nil)),(nil,(nil,(nil,nil))))
-153   ((nil,((nil,nil),nil)),(nil,((nil,nil),nil)))
-154   ((nil,((nil,nil),nil)),((nil,nil),(nil,nil)))
-155   ((nil,((nil,nil),nil)),((nil,(nil,nil)),nil))
-156   ((nil,((nil,nil),(nil,nil))),(nil,nil))
-157   ((nil,((nil,nil),(nil,nil))),(nil,(nil,nil)))
-158   ((nil,((nil,nil),(nil,(nil,nil)))),(nil,nil))
-159   ((nil,((nil,nil),((nil,nil),nil))),(nil,nil))
-160   ((nil,((nil,(nil,nil)),nil)),(nil,nil))
-161   ((nil,((nil,(nil,nil)),nil)),(nil,(nil,nil)))
-162   ((nil,((nil,(nil,nil)),nil)),((nil,nil),nil))
-163   ((nil,((nil,(nil,nil)),(nil,nil))),(nil,nil))
-164   ((nil,((nil,(nil,(nil,nil))),nil)),(nil,nil))
-165   ((nil,((nil,((nil,nil),nil)),nil)),(nil,nil))
-166   ((nil,(((nil,nil),nil),nil)),(nil,nil))
-167   ((nil,(((nil,nil),nil),(nil,nil))),(nil,nil))
-168   ((nil,(((nil,nil),(nil,nil)),nil)),(nil,nil))
-169   ((nil,(((nil,(nil,nil)),nil),nil)),(nil,nil))
-170   ((nil,((((nil,nil),nil),nil),nil)),(nil,nil))
-171   (((nil,nil),nil),(nil,nil))
-172   (((nil,nil),nil),(nil,(nil,nil)))
-173   (((nil,nil),nil),(nil,(nil,(nil,nil))))
-174   (((nil,nil),nil),(nil,(nil,(nil,(nil,nil)))))
-175   (((nil,nil),nil),(nil,(nil,((nil,nil),nil))))
-176   (((nil,nil),nil),(nil,((nil,nil),nil)))
-177   (((nil,nil),nil),(nil,((nil,nil),(nil,nil))))
-178   (((nil,nil),nil),(nil,((nil,(nil,nil)),nil)))
-179   (((nil,nil),nil),(nil,(((nil,nil),nil),nil)))
-180   (((nil,nil),nil),((nil,nil),(nil,nil)))
-181   (((nil,nil),nil),((nil,nil),(nil,(nil,nil))))
-182   (((nil,nil),nil),((nil,(nil,nil)),nil))
-183   (((nil,nil),nil),((nil,(nil,nil)),(nil,nil)))
-184   (((nil,nil),nil),((nil,(nil,(nil,nil))),nil))
-185   (((nil,nil),nil),(((nil,nil),nil),(nil,nil)))
-186   (((nil,nil),nil),(((nil,nil),(nil,nil)),nil))
-187   (((nil,nil),(nil,nil)),(nil,nil))
-188   (((nil,nil),(nil,nil)),(nil,(nil,nil)))
-189   (((nil,nil),(nil,nil)),(nil,(nil,(nil,nil))))
-190   (((nil,nil),(nil,nil)),(nil,((nil,nil),nil)))
-191   (((nil,nil),(nil,nil)),((nil,(nil,nil)),nil))
-192   (((nil,nil),(nil,(nil,nil))),(nil,nil))
-193   (((nil,nil),(nil,(nil,nil))),(nil,(nil,nil)))
-194   (((nil,nil),(nil,(nil,(nil,nil)))),(nil,nil))
-195   (((nil,nil),(nil,((nil,nil),nil))),(nil,nil))
-196   (((nil,nil),((nil,nil),nil)),(nil,nil))
-197   (((nil,nil),((nil,nil),nil)),(nil,(nil,nil)))
-198   (((nil,nil),((nil,nil),(nil,nil))),(nil,nil))
-199   (((nil,nil),((nil,(nil,nil)),nil)),(nil,nil))
-200   (((nil,nil),(((nil,nil),nil),nil)),(nil,nil))
-201   (((nil,(nil,nil)),nil),(nil,nil))
-202   (((nil,(nil,nil)),nil),(nil,(nil,nil)))
-203   (((nil,(nil,nil)),nil),(nil,(nil,(nil,nil))))
-204   (((nil,(nil,nil)),nil),(nil,((nil,nil),nil)))
-205   (((nil,(nil,nil)),nil),((nil,nil),(nil,nil)))
-206   (((nil,(nil,nil)),nil),((nil,(nil,nil)),nil))
-207   (((nil,(nil,nil)),(nil,nil)),(nil,nil))
-208   (((nil,(nil,nil)),(nil,nil)),(nil,(nil,nil)))
-209   (((nil,(nil,nil)),(nil,(nil,nil))),(nil,nil))
-210   (((nil,(nil,nil)),((nil,nil),nil)),(nil,nil))
-211   (((nil,(nil,(nil,nil))),nil),(nil,nil))
-212   (((nil,(nil,(nil,nil))),nil),(nil,(nil,nil)))
-213   (((nil,(nil,(nil,nil))),nil),((nil,nil),nil))
-214   (((nil,(nil,(nil,nil))),(nil,nil)),(nil,nil))
-215   (((nil,(nil,(nil,(nil,nil)))),nil),(nil,nil))
-216   (((nil,(nil,((nil,nil),nil))),nil),(nil,nil))
-217   (((nil,((nil,nil),nil)),nil),(nil,nil))
-218   (((nil,((nil,nil),nil)),nil),(nil,(nil,nil)))
-219   (((nil,((nil,nil),nil)),nil),((nil,nil),nil))
-220   (((nil,((nil,nil),nil)),(nil,nil)),(nil,nil))
-221   (((nil,((nil,nil),(nil,nil))),nil),(nil,nil))
-222   (((nil,((nil,(nil,nil)),nil)),nil),(nil,nil))
-223   (((nil,(((nil,nil),nil),nil)),nil),(nil,nil))
-224   ((((nil,nil),nil),nil),(nil,nil))
-225   ((((nil,nil),nil),nil),(nil,(nil,nil)))
-226   ((((nil,nil),nil),nil),(nil,(nil,(nil,nil))))
-227   ((((nil,nil),nil),nil),(nil,((nil,nil),nil)))
-228   ((((nil,nil),nil),nil),((nil,nil),nil))
-229   ((((nil,nil),nil),nil),((nil,nil),(nil,nil)))
-230   ((((nil,nil),nil),nil),((nil,(nil,nil)),nil))
-231   ((((nil,nil),nil),nil),(((nil,nil),nil),nil))
-232   ((((nil,nil),nil),(nil,nil)),(nil,nil))
-233   ((((nil,nil),nil),(nil,nil)),(nil,(nil,nil)))
-234   ((((nil,nil),nil),(nil,(nil,nil))),(nil,nil))
-235   ((((nil,nil),nil),((nil,nil),nil)),(nil,nil))
-236   ((((nil,nil),(nil,nil)),nil),(nil,nil))
-237   ((((nil,nil),(nil,nil)),nil),(nil,(nil,nil)))
-238   ((((nil,nil),(nil,nil)),(nil,nil)),(nil,nil))
-239   ((((nil,nil),(nil,(nil,nil))),nil),(nil,nil))
-240   ((((nil,nil),((nil,nil),nil)),nil),(nil,nil))
-241   ((((nil,(nil,nil)),nil),nil),(nil,nil))
-242   ((((nil,(nil,nil)),nil),nil),(nil,(nil,nil)))
-243   ((((nil,(nil,nil)),nil),nil),((nil,nil),nil))
-244   ((((nil,(nil,nil)),nil),(nil,nil)),(nil,nil))
-245   ((((nil,(nil,nil)),(nil,nil)),nil),(nil,nil))
-246   ((((nil,(nil,(nil,nil))),nil),nil),(nil,nil))
-247   ((((nil,((nil,nil),nil)),nil),nil),(nil,nil))
-248   (((((nil,nil),nil),nil),nil),(nil,nil))
-249   (((((nil,nil),nil),nil),nil),(nil,(nil,nil)))
-250   (((((nil,nil),nil),nil),nil),((nil,nil),nil))
-251   (((((nil,nil),nil),nil),(nil,nil)),(nil,nil))
-252   (((((nil,nil),nil),(nil,nil)),nil),(nil,nil))
-253   (((((nil,nil),(nil,nil)),nil),nil),(nil,nil))
-254   (((((nil,(nil,nil)),nil),nil),nil),(nil,nil))
-255   ((((((nil,nil),nil),nil),nil),nil),(nil,nil))
-@end example
-
-@node Reference Implementations, Changes, Character Table, Top
-@appendix Reference Implementations
-
-This appendix contains some @code{silly} source code for several
-functions that are mentioned in @ref{Virtual Code Semantics}, for specifying the virtual
-machine code semantics, namely @code{pairwise}, @code{transition},
-@code{insert} and @code{replace}.
-
-The intention is to specify the virtual machine mathematically with a
-minimum of hand waving, by using only simple equations and small
-fragments of @code{silly} code, which has a straightforward semantics.
-However, the @code{silly} code fragments are more significant in some
-cases than what could fit into a few lines or be mechanically derived
-from an equation.
-
-The purpose of this appendix is therefore to avoid leaving any gaps in
-the construction by demonstrating that everything mentioned can be done. None
-of this code is needed for any practical purpose, because its
-functionality is inherent in the virtual machine, but it shows how
-certain operations would be specified if they were not built in.
-
-@menu
-* Pairwise::                    
-* Insert::                      
-* Replace::                     
-* Transition::                  
-@end menu
-
-@node Pairwise, Insert, Reference Implementations, Reference Implementations
-@section Pairwise
-
-@cindex @code{pairwise}
-This @code{silly} code fragment is mentioned in @ref{Reduce}, in the
-discussion of @code{reduce}, and is provided as an example of a solution
-to equations @emph{E1} to @emph{E3}. It is written in the style of a
-higher order function, in that it takes a function @code{@var{f}} as an
-argument and returns another function, [[@code{pairwise}]]
-@code{@var{f}} as a result.
-
-@example
-
-self     = left
-argument = right
-head     = left
-tail     = right
-
-pairwise =
-
-compose(
-   refer,
-   compose(
-      bu(
-         conditional,
-         conditional(argument,compose(tail,argument),constant nil)),
-      couple(
-         (hired couple)(
-            (hired compose)(
-               identity,
-               constant (hired fan head)(
-                  argument,
-                  compose(tail,argument))),
-            constant (hired meta)(
-               self,
-               compose(tail,compose(tail,argument)))),
-         constant argument)))
-
-@end example
-
-@noindent
-To see how this works, one should evaluate it symbolically with an
-unknown @code{@var{f}}, which will result in some @code{silly}
-pseudocode, and then evaluate that symbolically with some sample lists.
-
-@node Insert, Replace, Pairwise, Reference Implementations
-@section Insert
-
-@cindex @code{insert}
-This function is mentioned in @ref{Sort}, on sorting. It takes the
-virtual code for a partial order relational operator and returns the
-code for a function of two arguments. The left argument is a list item
-and the right argument is a list of items of the same type, which is
-already sorted with respect to the relational operator given as the
-argument to @code{insert}. The result of the function returned by
-@code{insert} is a list similar to its right argument but with the left
-argument inserted in the proper position to maintain the order.
-
-This code makes use of the @code{self}, @code{argument}, @code{head}
-and @code{tail} declarations associated with @code{pairwise}.
-
-@example
-
-insert =
-
-bu(compose,refer) (hired conditional)(
-   constant compose(right,argument),
-   couple(
-      (hired conditional)(
-         (hired compose)(
-            identity,
-            constant compose(
-               couple(left,compose(head,right)),
-               argument)),
-         constant (
-            argument,
-            couple(
-               compose(head,compose(right,argument)),
-               (hired meta)(
-                  self,
-                  couple(
-                     compose(left,argument),
-                     compose(tail,compose(right,argument))))))),
-      constant argument))
-
-@end example
-
-As with the other higher order functions in this appendix, the only
-feasible ways to verify it would be either by formal proof or by some
-form of symbolic interpretation.
-
-
-@node Replace, Transition, Insert, Reference Implementations
-@section Replace
-
-@cindex @code{replace}
-This code is needed in the discussion of assignment in @ref{Assignment}.
-where it serves as a solution to equation @emph{E0}. The idea is that
-the function takes an argument of the form
-@code{((@var{locations},@var{values}),@var{store})} and returns the
-store with the values stored at the locations indicated.
-
-
-@example
-
-locations = compose(left,compose(left,argument))
-values    = compose(right,compose(left,argument))
-store     = compose(right,argument)
-
-replace =
-
-refer conditional(
-   store,
-   (
-      conditional(
-         compose(left,locations),
-         (
-            conditional(
-               compose(right,locations),
-               (
-                  (hired meta)(
-                     self,
-                     couple(
-                        (hired fan right)(locations,values),
-                        (hired meta)(
-                           self,
-                           couple(
-                              (hired fan left)(locations,values),
-                              store)))),
-                  couple(
-                     (hired meta)(
-                        self,
-                        couple(
-                           couple(compose(left,locations),values),
-                           compose(left,store))),
-                     compose(right,store)))),
-            conditional(
-               compose(right,locations),
-               (
-                  couple(
-                     compose(left,store),
-                     (hired meta)(
-                        self,
-                        couple(
-                           couple(compose(right,locations),values),
-                           compose(right,store)))),
-                  values)))),
-         (hired meta)(
-            self,
-            couple(couple(locations,values),constant (nil,nil)))))
-@end example
-
-@node Transition,  , Replace, Reference Implementations
-@section Transition
-
-This code is relevant to the discussion of @code{transfer} in @ref{Transfer},
-where its specification is described in detail. When this code
-is evaluated on a virtual code application @code{@var{f}}, the result is
-the code for a transition function that takes one configuration to the
-next in the course of evaluating a transfer function, as specified in
-equations @emph{E7} to @emph{E9}.
-@cindex @code{transition}
-
-@example
-
-output_buffer = compose(left,argument)
-input_buffer = compose(right,compose(right,argument))
-active = compose(left,compose(right,argument))
-state = compose(left,active)
-output = compose(right,active)
-
-transition =
-
-bu(compose,refer) (hired bu(conditional,active))(
-   (hired conditional)(
-      constant input_buffer,
-      bu(compose,(fan bu(hired meta,self))) (hired apply)(
-         constant fan bu(couple,couple(output,output_buffer)),
-         couple (fan bu(compose,couple))(
-            couple(
-               (hired apply)(
-                  hired,
-                  constant (state,compose(head,input_buffer))),
-               constant compose(tail,input_buffer)),
-            couple(
-               (hired apply)(hired,constant(state,constant nil)),
-               constant constant nil)))),
-   constant compose(flat,compose(reverse,output_buffer)))
-@end example
-
-@node Changes, External Libraries, Reference Implementations, Top
-@appendix Changes
-
-This section is reserved for brief updates due to changes in the
-software that may be important enough to note temporarily until more
-thorough revisions to the document can be made.
-
-The lack of content here indicates that the current version is either
-completely up to date or in such a sorry state of neglect that even
-this section is obsolete.
-
-
-@node External Libraries, Copying, Changes, Top
-@appendix External Libraries
-
-Various functions are callable from virtual code applications by way
-of the @code{library} combinator as explained in @ref{Library
-combinator}. An expression (shown in @code{silly} syntax) of the form
-@code{library('foo','bar') x} applies a function named @code{'bar'}
-from a library named @code{'foo'} to an argument @code{x}.
-
-A brief overview of the libraries and functions can always be had by
-executing
-
-@example
-$ avram --external-libraries
-@end example
-
-@noindent
-The listing displayed by this command may show some that are not
-included here if this version of the documentation is not current or
-your installation has been locally enhanced. It may also lack some
-that are documented here if your installation is not fully equipped.
-
-Although the overview from the command line is adequate for a
-reminder, it is not informative enough to explain how each function
-should be used. The purpose of this section is to provide this
-information in greater detail.
-
-Some general comments are applicable to all libraries.
-
-Each library documented in this section can generate error messages in
-the event of exceptional conditions, that are documented individually.
-In addition to those, it's also possible for any library function to
-return error messages of
-@cindex unrecognized library
-@cindex unrecognized function name
-
-@example
-<'unrecognized library'>
-<'unrecognized @var{xxxx} function name'>
-@end example
-
-@noindent
-where @var{xxxx} is the name of a library.  These indicate either that
-the library name is invalid, or the library name is valid but the
-function name is invalid, or that they're both valid but the library
-wasn't detected on the host when @code{avram} was compiled. A virtual
-code application can always avoid these errors by testing for the
-availability of a function using the @code{have} combinator (@ref{Have
-combinator}).
-
-In addition, any library function that operates on numerical values or
-lists thereof can return these messages in cases of invalid input.
-@cindex missing value
-@cindex invalid value
-@cindex bad vector specification
-@cindex bad matrix specification
-
-@example
-<'missing value'>
-<'invalid value'>
-<'bad vector specification'>
-<'bad matrix specification'>
-@end example
-
-@noindent
-These messages indicate that an input parameter that was required to
-be a valid representation of a floating point number, a vector,
-or a matrix was something other than that (@ref{Type Conversions}).
-The last could also occur if a parameter that is required to be
-a square matrix has unequal numbers of rows and columns.
-
-@menu
-* bes::       Bessel functions
-* complex::   native complex arithmetic
-* fftw::      fast Fourier transforms
-* glpk::      simplex linear programming
-* gsldif::    numerical differentiation
-* gslevu::    series acceleration
-* gslint::    numerical integration
-* harminv::   harmonic inversion
-* kinsol::    constrained non-linear optimization
-* lapack::    linear algebra
-* math::      native floating point arithmetic
-* mtwist::    random number generation
-* minpack::   non-linear optimization
-* mpfr::      arbitrary precision arithmetic
-* lpsolve::   mixed integer programming
-* rmath::     statistical and special functions
-* umf::       sparse matrices
-@end menu
-
-@node bes, complex, External Libraries, External Libraries
-@section @code{bes}
-
-An interface to the Bessel functions as defined in the GNU Scientific
-Library (gsl) is available to virtual code applications by invoking a
-function of the form
-
-@example
-library('bes',f)
-@end example
-
-@noindent
-where f is a character string identifying the Bessel function family.
-All functions in this library return a floating point number encoded
-as in @ref{math}.
-
-@menu
-* Bessel function calling conventions::
-* Bessel function errors::
-@end menu
-
-@node Bessel function calling conventions, Bessel function errors, bes, bes
-@subsection Bessel function calling conventions
-
-@cindex bessel functions
-The virtual code interface simplifies the gsl C language API by
-excluding the facilities for error estimates, omitting certain array
-valued functions, and subsuming sets of related functions
-within common ones where possible.
-
-The functions with names in the following group take an argument of
-the form @code{(n,x)}, where @code{n} identifies the member of the
-function family, and @code{x} is the argument to the function.
-
-@itemize @bullet
-@item @code{J}
-regular cylindrical Bessel functions
-@item @code{Y}
-irregular cylindrical Bessel functions
-@item @code{I}
-regular modified cylindrical Bessel functions
-@item @code{K}
-irregular modified cylindrical Bessel functions
-@end itemize
-
-For these functions, @code{n} can be either a natural number encoded
-as in @ref{Representation of Numeric and Textual Data}, or a floating
-point number encoded as in @ref{math}. The latter case specifies
-functions of a fractional order. The relevant gsl function is called
-based on the value and type of the parameter.
-
-Two further related families of functions follow the same calling
-convention.
-
-@itemize @bullet
-@item @code{Isc}
-scaled regular modified cylindrical Bessel functions
-@item @code{Ksc}
-scaled irregular modified cylindrical Bessel functions
-@end itemize
-
-@noindent
-The foregoing functions are related to those above by an exponential scale
-factor as documented in the gsl reference manual.
-
-Functions with names in the following group also take an argument of
-the form @code{(n,x)}, but are not defined for fractional orders and
-so require a natural number for @code{n}.
-
-@itemize @bullet
-@item @code{j}
-regular spherical Bessel functions
-@item @code{y}
-irregular spherical Bessel functions
-@item @code{isc}
-regular modified spherical Bessel functions
-@item @code{ksc}
-irregular modified spherical Bessel functions
-@end itemize
-
-The functions in the remaining group follow idiosyncratic calling
-conventions.
-
-@itemize @bullet
-@item @code{zJ0}, @code{zJ1}
-These take a natural number @code{n} and return the @code{n}th root of
-the regular cylindrical Bessel functions of order 0 or 1,
-respectively.
-@item @code{zJnu}
-This takes a pair @code{(nu,n)} where @code{nu} is the (fractional)
-order of a regular cylindrical Bessel function, @code{n} is a natural
-number. It returns the @code{n}th zero of the function.
-@item @code{lnKnu}
-This takes a pair of floating point numbers @code{(nu,x)} where
-@code{nu} is the (fractional) order of an irregular modified
-cylindrical Bessel and @code{x} is the argument to the function,
-and it returns the natural log of the function.
-@end itemize
-
-@node Bessel function errors, ,Bessel function calling conventions, bes
-@subsection Bessel function errors
-
-Memory overflows and unrecognized function names can happen as with
-other library interfaces. A message of
-@cindex bad bessel function call
-
-@example
-<'bad bessel function call'>
-@end example
-
-@noindent
-means that invalid input parameters were given, such as a fractional
-order to a function family that is defined only for natural orders.
-
-@node complex, fftw, bes, External Libraries
-@section @code{complex}
-
-Complex numbers are represented according to the ISO C standard as
-@cindex complex numbers
-arrays of two IEEE double precision floating point numbers of 8 bytes
-each, with the number representing the real part first.
-
-A small selection of operations on complex numbers is available by
-function calls of the form @code{library('complex',f)}. These
-functions are implemented by the host system's C library.
-
-One example is @code{library('complex','create')} which takes a pair
-of floating point numbers @code{(@var{x},@var{y})} to a complex number
-whose real part is @var{x} and whose imaginary part is @var{y}.
-See @ref{math} for information about constructing floating point
-numbers.
-
-Other than that, the @code{complex} library functions @code{f} fall
-into three main groups, which are the real valued unary operations,
-the complex valued unary operations, and the complex valued binary
-operations. All of these operations are designated by their standard C
-names as documented elsewhere, such as the GNU @code{libc} reference
-manual, except as noted.
-
-@table @bullet
-@item @asis{} real valued unary operations
-@example
-
-creal  cimag  cabs  carg
-@end example
-@item @asis{} complex valued unary operations
-@example
-
-ccos   cexp    clog   conj   csin    csqrt
-ctan   csinh   ccosh  ctanh  casinh  cacosh
-catanh casin   cacos  catan
-@end example
-@item @asis{} complex valued binary operations
-@example
-
-cpow  vid  bus  mul  add  sub  div
-@end example
-@end table
-
-The last four correspond to the C language operators @code{*},
-@code{+}, @code{-}, and @code{/} for complex numbers.  The functions
-named @code{vid} and @code{bus} are similar to @code{div} and
-@code{sub}, respectively, but with the operands interchanged. That is,
-
-@example
-library('complex','vid') (x,y)
-@end example
-
-@noindent
-is equivalent to
-
-@example
-library('complex','div') (y,x)
-@end example
-
-All functions in this library taking complex numbers as input may also
-operate on real numbers, and binary operators can have either or both
-operands real. For real operands, a value of zero is inferred as the
-imaginary part. The result type of the function is the same
-regardless.
-
-@node fftw, glpk, complex, External Libraries
-@section @code{fftw}
-
-Some functions in the @code{fftw} fast Fourier transform library are
-@cindex Fourier transforms
-@cindex Hartley transforms
-callable by virtual code programs of the form
-@code{library('fftw',f)}, where @code{f} can be one of the following
-character strings.
-
-@table @asis
-@item @code{u_fw_dft}
-(uni-dimensional forward Discrete Fourier transform)
-@item @code{u_bw_dft}
-(uni-dimensional backward Discrete Fourier transform)
-@item @code{b_fw_dft}
-(bi-dimensional forward Discrete Fourier transform)
-@item @code{b_bw_dft}
-(bi-dimensional backward Discrete Fourier transform)
-@item @code{u_dht}
-(uni-dimensional Discrete Hartley transform)
-@item @code{b_dht}
-(bi-dimensional Discrete Hartley transform)
-@end table
-
-These stand for the discrete Fourier transform, in one dimension and two
-dimensions, either backward or forward, and the discrete Hartley
-transform in one dimension and two dimensions. The @code{fftw} library
-documentation (@url{http://www.fftw.org}) can give more information
-about the meaning of these transformations.
-
-The interface is somewhat simplified compared to the API for the @code{fftw}
-C library because there are no considerations of memory management or
-planning, nor any provision for dimensions higher than two.
-
-Furthermore, from the virtual side of the interface, these
-functions operate on lists rather than arrays. The one dimensional
-Fourier transforms take a list of complex numbers to a list of complex
-numbers (see @ref{complex}), and the one dimensional Hartley
-transforms take a list of reals to a list of reals (see
-@ref{math}). The two dimensional transforms are analogous but they
-take a matrix represented as a list of lists. Error messages
-pertaining to invalid input documented at the beginning of
-this section (@ref{External Libraries}) are relevant.
-
-Finally, unlike the native API for @code{fftw}, these transformations are
-scaled so that the backward transformation is the inverse of the
-forward, and the Hartley transformations are their own inverses
-(subject to roundoff error).
-
-@node glpk, gsldif, fftw, External Libraries
-@section @code{glpk}
-
-The @code{glpk} library (@url{ftp://ftp.gnu.org/pub/gnu/glpk/}) solves
-linear programming problems by the either the simplex algorithm or
-@cindex linear programming
-an interior point method.
-
-The API for C client programs involves a complicated protocol with
-many optional settings, which is simplified for the virtual machine
-interface. Specifically, the library gives a choice of only two
-functions, which can be expressed in the following forms.
-
-@example
-library('glpk','simplex')
-
-library('glpk','interior')
-@end example
-
-@noindent
-These functions have the same calling convention and should return
-generally the same output for identical inputs, but differences in
-performance, precision, and maybe correctness can be expected.
-The remainder of this section applies to both of them.
-
-@menu
-* glpk input parameters::
-* glpk output::
-* glpk errors::
-* Additional glpk notes::
-@end menu
-
-@node glpk input parameters, glpk output, glpk, glpk
-@subsection @code{glpk} input parameters
-
-The argument must be a triple of the form,
-@code{(@var{c},(@var{m},@var{y}))}, subject to the following specification.
-
-@itemize @bullet
-@item @var{c}
-is a list of cost function coefficients as floating point numbers (see
-@ref{math}). There should be one item of @var{c} for each variable in
-the linear programming problem (Note that there is no additive
-constant, which would require one extra).
-
-The interpretation of @var{c} is that an assignment of non-negative
-values to the variables @var{x} is sought to make the vector inner
-product @var{c} @var{x} as small as possible.
-@item @var{m}
-is a sparse matrix represented as a list of triples in the form
-@cindex sparse matrix
-
-@example
-<((@var{i},@var{j}),@var{a})...>
-@end example
-
-@noindent
-where @var{i} and @var{j} are row and column indices as natural
-numbers starting from 0 and @var{a} is a non-zero floating point
-number. The presence of a triple @code{((@var{i},@var{j}),@var{a})} in
-the list indicates that the @var{i},@var{j}-th entry in the matrix has
-a value of @var{a}.  Missing combinations of @var{i} and @var{j}
-indicate that the corresponding entry is zero.
-
-The interpretation of @var{m} is that together with @var{y} it
-specifies a system of equations the variables in the solution @var{x}
-must satisfy simultaneously, as explained below.
-@item @var{y}
-is a list of floating point numbers, with one number for each distinct value of
-@var{i} in @var{m}, above, needed to complete the equations.
-
-The interpretation of @var{y} is that in matrix notation, the
-condition @var{m} @var{x} = @var{y} must be met by any acceptable
-solution @var{x}.
-
-To put it another way, for each distinct value of @var{i}, the @var{i}-th item
-of @var{y} has to equal the sum over all @var{j} of @var{xj} @var{a},
-where @var{a} is the real number appearing in the triple
-@code{((@var{i},@var{j}),@var{a})} in @var{m}, if any, and @var{xj} is
-the @var{j}-th variable of the solution.
-@end itemize
-
-@node glpk output, glpk errors, glpk input parameters, glpk
-@subsection @code{glpk} output
-
-If a solution meeting the constraints is found, it is returned as a
-list of pairs of the form @code{<(@var{i},@var{x})...>}, where each
-@var{i} is a natural number and each @var{x} is a floating point
-number giving the value obtained for the @var{i}-th variable numbered
-from zero. Any values of @var{i} that are omitted from the list
-indicate that the corresponding variable has a value of zero.
-
-If no solution is found due to infeasibility or because @code{glpk}
-just didn't find one, an empty list is returned. The lack of a
-solution is not treated as an exceptional condition.
-
-@node glpk errors, Additional glpk notes, glpk output, glpk
-@subsection @code{glpk} errors
-
-Possible error messages are
-
-@example
-<'bad glpk specification'>
-@end example
-
-@noindent
-which means that the input did not conform to the description given above,
-and
-
-@example
-<'memory overflow'>
-@end example
-
-It is not considered an exceptional condition for no feasible solution
-to exist, and in that case an empty list is returned. 
-
-The @code{glpk} documentation gives no assurance as to the correctness
-of reported solutions, so the user should also take the possibility of
-incorrect results into account.
-
-@node Additional glpk notes, , glpk errors, glpk
-@subsection Additional @code{glpk} notes
-
-A sparse matrix representation of @var{m} is used because in practice
-@cindex sparse matrix
-most linear programming problems have very sparse systems of equations.
-
-Only the constraint of non-negativity is admitted.  Other
-@cindex constraints
-constraints such as upper bounds must be effected through a change of
-variables if required.
-
-The @code{glpk} library has a small memory leak, which @code{avram}
-corrects by methods described in @ref{Memory leaks}.
-
-@node gsldif, gslevu, glpk, External Libraries
-@section @code{gsldif}
-
-Numerical differentiation of a real valued function of a single real
-@cindex numerical differentiation
-variable can be done by a library function of the form
-
-@example
-library('gsldif',method)
-@end example
-
-@noindent
-where @code{method} is one of
-
-@itemize @bullet
-@item @code{'backward'}
-@item @code{'central'}
-@item @code{'forward'}
-@item @code{'t_backward'}
-@item @code{'t_central'}
-@item @code{'t_forward'}
-@end itemize
-
-@menu
-* gsldif input parameters::
-* gsldif output::
-* gsldif exceptions::
-* Additional gsldif notes::
-@end menu
-
-@node gsldif input parameters, gsldif output, gsldif, gsldif
-@subsection @code{gsldif} input parameters
-
-The argument to the functions with mnemonics of @code{backward},
-@code{central} or @code{forward} is a pair @code{(@var{f},@var{x})},
-where @var{f} is the virtual machine code for a real valued function
-of a real variable, and @var{x} is the input to @var{f} where the
-derivative is sought. Real numbers are represented according to
-@ref{math}.
-
-The argument to the functions with mnemonics of @code{t_backward},
-@code{t_central} or @code{t_forward} is a pair @code{((@var{f},@var{t}),@var{x})},
-where @var{f} and @var{x} are as above, and @var{t} is a tolerance represented
-as a floating point number. The tolerance is passed through
-to the GNU Scientific library (GSL) differentiation routines.
-
-When no tolerance is specified, the default is  @code{1.0e-8}.
-
-@node gsldif output, gsldif exceptions, gsldif input parameters, gsldif
-@subsection @code{gsldif} output
-
-The result returned by @code{library('gsldif',method) (f,x)} or
-@code{library('gsldif',method) ((f,t),x)}
-is an approximation of the first derivative of @var{f} evaluated at
-@var{x}. 
-
-The result is obtained by the one of the GNU Scientific Library (GSL)
-@cindex GNU Scientific Library
-functions for numerical differentiation that matches the virtual code
-function name. These functions are documented in the GSL reference
-manual. The three methods should have approximately the same results
-but may differ in numerical properties.
-
-@node gsldif exceptions, Additional gsldif notes, gsldif output, gsldif
-@subsection @code{gsldif} exceptions
-
-An error message of
-@cindex bad derivative specification
-
-@example
-<'bad derivative specification'>
-@end example
-
-@noindent
-will be returned if the either the whole argument, @var{f}, or @var{x} is
-@code{nil}. 
-
-Any error message caused by the evaluation of @var{f} will
-propagate to the result.
-
-@node Additional gsldif notes, , gsldif exceptions, gsldif
-@subsection Additional @code{gsldif} notes
-
-The function @var{f} may be any expressible virtual machine code
-function that takes a real argument to a real result, including one
-that uses other library functions. However, if @var{f} passes
-functions to other library functions as arguments, there is a constant
-overhead in stack space for each level, and a remote possibility of a
-@cindex segmentation fault
-segmentation fault if they are very deeply nested.
-
-Numerical instability is an issue for higher derivatives (i.e.,
-differentiating a function that is obtained by differentiating another
-function). Some experimentation with larger tolerances may be needed.
-
-@node gslevu, gslint, gsldif, External Libraries
-@section @code{gslevu}
-This library exports a pair of functions of the form
-
-@example
-library('gslevu','accel')
-
-library('gslevu','utrunc')
-@end example
-
-@noindent
-that take a list of real numbers @var{x} to a pair of real numbers
-@code{(@var{s},@var{e})}.
-
-The idea is that @var{x} represents the first few terms of an infinite
-@cindex infinite series
-series whose sum converges, but only very slowly. The functions
-@cindex convergence
-extrapolate an estimate of the infinite summation by the Levin
-@cindex Levin u-transform
-u-transform as documented in the GNU Scientific Library reference
-manual.
-
-For well behaved series, considerably fewer terms are needed for an
-accurate estimate than a direct summation would require.
-
-@menu
-* gslevu calling conventions::
-* gslevu exceptions::
-@end menu
-
-@node gslevu calling conventions, gslevu exceptions, gslevu, gslevu
-@subsection @code{gslevu} calling conventions
-
-The input to either of these functions is a list of real numbers
-represented as explained in @ref{math}.
-
-The result is a pair @code{(@var{s},@var{e})} holding an estimate of
-the sum, @var{s}, and an estimate of the error in the sum,
-@var{e}, each being a real number.
-
-Both functions compute the same sum, @var{s}, but the @code{utrunc} function
-is faster and
-@cindex infinite sum
-more memory efficient, using a less trustworthy method of estimating
-the error.
-
-@node gslevu exceptions, , gslevu calling conventions, gslevu
-@subsection @code{gslevu} exceptions
-
-If an empty list is passed as a parameter to a function in this library,
-an error message of @code{<'empty gslevu sequence'>} is returned.
-
-If there is insufficient memory, an error message of @code{<'memory
-overflow'>} is returned.
-
-Other than that, no exceptional conditions are relevant other than the
-general ones documented at the beginning of @ref{External Libraries}.
-
-
-@node gslint, harminv, gslevu, External Libraries
-@section @code{gslint}
-An interface to a selection of numerical integration routines from the
-@cindex numerical integration
-GNU Scientific Library is provided by functions of the form
-
-@example
-library('gslint',q)
-@end example
-
-@noindent
-where q can be one of
-@code{'qng'}, @code{'qng_tol'},
-@code{'qagx'}, @code{'qagx_tol'},
-@code{'qagp'}, or @code{'qagp_tol'}.
-
-@menu
-* gslint input parameters::
-* gslint output::
-* gslint exceptions::
-* Additional gslint notes::
-@end menu
-
-@node gslint input parameters, gslint output, gslint, gslint
-@subsection @code{gslint} input parameters
-
-The library functions @code{qng} and @code{qagx} take an
-argument of the form @code{(@var{f},(@var{a},@var{b}))}, where @var{f}
-is a function to be integrated, @var{a} is the lower limit, and
-@var{b} is the upper limit, both limits being floating point numbers
-as in @ref{math}.
-
-The @code{qng_tol} and @code{qagx_tol} functions take an argument of
-@cindex tolerance
-the form @code{((@var{f},@var{t}),(@var{a},@var{b}))}, where @var{f},
-@var{a}, and @var{b} are as above, and @var{t} is a specified
-tolerance.
-
-The @code{qagp} and @code{qagp_tol} functions take arguments of
-the form @code{(@var{f},@var{p})} and
-@code{((@var{f},@var{t}),@var{p})}, respectively, where @var{f} and
-@var{t} are as above, and @var{p} is an ordered list of real numbers
-specifying the limits of integration along with arbitrarily many
-intervening breakpoints.
-
-The integrand @var{f} is expressed in virtual machine code, and takes a
-single real argument to a real result. The argument and result of
-@var{f} are required to be floating point numbers as described in
-@ref{math}. Any expressible function of this type is acceptable, even
-one defined in terms of other integrals, so that a double or triple
-integral can be expressed easily, albeit a costly computation.
-However, a constant overhead in stack space is required for each
-nested library function call, and there is currently no mechanism to
-@cindex segmentation fault
-prevent segmentation faults due to a stack overflow.
-
-When no tolerance is specified, as with @code{qng}, @code{qagx}, and
-@code{qagp}, the tightest attainable tolerance is chosen by default,
-currently @code{2e-14}, in order find the most accurate result
-possible. A selection of progressively looser tolerances is tried
-automatically if the tightest one is not successful, stopping when
-either a solution is found or ten orders of magnitude are covered.
-
-If a tolerance is explicitly specified, as with @code{qng_tol},
-@code{qagx_tol} or @code{qagp_tol}, only that tolerance is tried.
-
-@node gslint output, gslint exceptions, gslint input parameters, gslint
-@subsection @code{gslint} output
-
-In all cases, if no exception occurs, the result returned is an
-approximation of the integral of @var{f} over the interval from
-@var{a} to @var{b} or from the first item of @var{p} to the last.
-
-Results may differ in numerical properties depending on the
-integration method and the tolerance used. 
-
-@itemize @bullet
-@item
-The @code{qagp}* and @code{qagx}* functions use an adaptive algorithm,
-@cindex adaptive integration
-@cindex non-adaptive integration
-whereas the @code{qng}* functions use a faster non-adaptive algorithm
-suitable only for smooth integrands.
-@item
-Faster and maybe more accurate results are obtained for discontinuous
-or non-differentiable integrands by the @code{qagp}* integration
-methods if the interior points in @var{p} are chosen to coincide with
-the discontinuities or corners.
-@item
-Larger tolerances are conducive to faster but less accurate results in
-most cases.
-@end itemize
-
-@node gslint exceptions, Additional gslint notes, gslint output, gslint
-@subsection @code{gslint} exceptions
-
-If an argument of an inappropriate form can be detected (such as an
-empty pair or one without floating point numbers), it causes an error
-message to be returned saying 
-@cindex bad integral specification
-
-@example
-<'bad integral specification'>
-@end example
-
-@noindent
-Error messages signalled by the integrand @var{f} may also be
-reported, as well as any message returned by @code{gsl_strerror}. A
-typical cause for a @code{gsl_strerror} message would be an explicitly
-specified tolerance that is too tight. An error message of
-@cindex slow convergence
-
-@example
-<'slow convergence'>
-@end example
-
-@noindent
-is returned in the event of excessively many function evaluations
-(currently 3600 at each tolerance level).
-
-@node Additional gslint notes, , gslint exceptions, gslint
-@subsection Additional @code{gslint} notes
-
-The @code{qagx}* functions subsume the GSL variants @code{qags},
-@code{qagiu}, @code{qagil}, and @code{qagi} for finite, semi-infinite,
-and infinite intervals, which are seleted as appropriate based on the
-@cindex improper integrals
-limits of integration @var{a} and @var{b}.
-
-The @code{qagp} function reverts to the @code{qagx} function if there
-are only two points given in @var{p}. Fewer than two will cause an
-error.
-
-The library interface code relies on the standard @code{setjmp}
-@cindex setjmp
-utility found in the system header file @code{setjmp.h} to break out
-of integrals that don't converge after excessively many function
-evaluations. Non-termination has been an issue in the past with GSL
-integration routines for very badly behaved integrands, and the API
-provides no documented means for the user supplied integrand function
-to request a halt.
-
-Although it is meant to be standard, a host without @code{setjmp} will
-cause @code{avram} to be configured to abort the application with an
-error message in the event of non-convergence. This behavior is
-considered preferable to the alternative of non-termination. Usually
-an effective workaround in such cases is to specify a sufficiently
-loose tolerance explicitly by using one of the *@code{_tol} library
-functions.
-
-
-@node harminv, kinsol, gslint, External Libraries
-@section @code{harminv}
-
-The @code{harminv} library decomposes a complex valued function of a
-@cindex harminv
-discrete variable into a sum of decaying sinusoids given a finite
-sample. It uses a method with better accuracy and convergence than
-Fourier analysis or least squares curve fitting. More information
-@cindex least squares
-@cindex Fourier transforms
-is available at @url{http://ab-initio.mit.edu/wiki/index.php/Harminv}.
-
-@menu
-* harminv input parameters::
-* harminv output::
-* harminv exceptions::
-* Additional harminv notes::
-@end menu
-
-@node harminv input parameters, harminv output, harminv, harminv
-@subsection @code{harminv} input parameters
-
-The virtual machine interface to the @code{harminv} library provides
-only a single function, callable as
-
-@example
-library('harminv','hsolve')
-@end example
-
-@noindent
-The input to this function is an operand of the form
-
-@example
-(signal,(fmin,fmax),nf)
-@end example
-
-@noindent
-where
-
-@itemize @bullet
-@item
-@code{signal} is a list of complex numbers containing samples
-of the function to be decomposed at equal time steps
-(@ref{complex} and @ref{Representation of Numeric and Textual Data}).
-@item
-@code{fmin} and @code{fmax} are the band limits expressed in units
-of inverse time steps as floating point numbers (@ref{math}).
-@item
-@code{nf} is the number of spectral basis functions expressed as a
-natural (@ref{Representation of Numeric and Textual Data}).
-@end itemize
-
-@noindent
-If a value of 0 is specified for @code{nf} a default value of
-
-@example
-min(300, (fmax - fmin) * n * 1.1)
-@end example
-
-@noindent
-is used, where @code{n} is the length of @code{signal}. The
-computation time increases cubically with @code{nf}.
-
-
-@node harminv output, harminv exceptions, harminv input parameters, harminv
-@subsection @code{harminv} output
-
-The result returned by a call to
-
-@example
-library('harminv','hsolve')
-@end example
-
-@noindent
-with valid input (@ref{harminv input parameters}) is a list of similar tuples of the form
-
-@example
-<(amplitude,frequency,decay,quality,error)...>
-@end example
-
-@noindent
-with all members being real valued except for the amplitudes, which are
-complex. Each tuple describes a function of the form
-
-@example
-f(t) = A * sin (frequency * t + P) * exp (-decay * t)
-@end example
-
-@noindent
-such that the summation of these functions approximates the original
-given signal (@ref{harminv input parameters}). The real amplitude
-@code{A} and phase @code{P} are given by the modulus and argument of
-the complex amplitude returned in the result,
-
-@example
-A = library('complex','cabs') amplitude
-P = library('complex','carg') amplitude
-@end example
-
-@noindent
-in terms of the complex library functions (@ref{complex}).
-The error values are measures of the goodness of fit, and the quality
-factors are defined as
-
-@example
-quality = (pi * |frequency| / decay)
-@end example
-
-@noindent
-It may be useful in some applications to ignore components with
-quality factors outside of a certain range.
-
-@node harminv exceptions, Additional harminv notes, harminv output, harminv
-@subsection @code{harminv} exceptions
-
-Various exceptional conditions are possible with the @code{harminv}
-library interface, and one of the following messages could be
-returned. Each of them has the form of a list containing a single
-character string.
-
-@itemize @bullet
-@item 
-@code{unrecognized harminv function name}
-is reported in case of a function call of the form
-@code{library('harminv',f)} where @code{f} is anything other than
-the character string @code{'hsolve'}, this being the only function in
-the library.
-@item 
-@code{bad harminv function call}
-is reported if the input parameters don't meet the specifications
-described in @ref{harminv input parameters}, or if @code{fmin} is
-greater than @code{fmax}. 
-@item 
-@code{bad vector specification}
-could be the result of a list of real numbers rather than complex
-numbers being passed as a @code{signal}. Real numbers can
-be converted to complex numbers using the @code{create} function from
-the @code{complex} library (@ref{complex}).
-@item 
-@code{memory overflow}
-can occur if @code{avram} is operating very close to the limit of host
-memory, or perhaps if infeasibly large values are passed as @code{nf}
-@item 
-@code{counter overflow}
-is similar to a memory overflow
-@end itemize
-
-@node Additional harminv notes, , harminv exceptions, harminv
-@subsection Additional @code{harminv} notes
-
-The @code{harminv} library interface requires the @code{harminv} and
-@code{lapack} libraries to be installed on the host system, and also
-requires standard complex number support from the system's C library.
-
-The author's installation of @code{avram} has been compiled against
-the Debian @code{harminv} development library package, which at this
-writing is unmaintained and is missing the necessary header file
-@file{harminv-int.h}, without which compilation of files including
-@file{harminv.h} fails. Some headers from @file{harminv.h} have been
-copied directly into @file{avram-x.x.x/src/harminv.c} under the
-@code{avram} source tree to avoid this dependence, so that
-@code{avram} will compile correctly on a Debian system. These may need
-to be updated if necessary to track the @code{harminv} source.
-
-@node kinsol, lapack, harminv, External Libraries
-@section @code{kinsol}
-
-The @code{kinsol} library (@url{http://www.llnl.gov/CASC/sundials/})
-contains sophisticated routines for non-linear optimization and
-@cindex optimization
-@cindex non-linear optimization
-constrained non-linear optimization, some of which are available to
-@cindex constrained non-linear optimization
-virtual code applications by way of functions expressed as shown.
-
-@example
-library('kinsol',k)
-@end example
-
-@noindent
-The function name @code{k} is a string of the form
-@code{'@var{xy}_@var{zzzzz}'}. The field @var{zzzzz} specifies
-the optimization algorithm, which can be one of @code{dense},
-@code{gmres}, @code{bicgs}, or @code{tfqmr}, following the names used
-by the API for @code{kinsol} in C. The field @var{y} determines
-the way gradients are obtained, which is either @code{j} for a user
-supplied Jacobian, or @code{d} for finite differences computed by
-@code{kinsol}. The remaining field @var{x} is either @code{c} for
-constrained optimization, or @code{u} for unconstrained. Hence, the
-whole function name can be one of sixteen possible alternatives.
-
-@example
-cd_dense   cd_gmres   cd_bicgs   cd_tfqmr
-ud_dense   ud_gmres   ud_bicgs   ud_tfqmr
-cj_dense   cj_gmres   cj_bicgs   cj_tfqmr
-uj_dense   uj_gmres   uj_bicgs   uj_tfqmr
-@end example
-
-More specific information about the optimization algorithms can be
-found in the @code{kinsol} documentation at the above
-address. Different algorithms may perform better on different
-problems.
-
-@menu
-* kinsol input parameters::
-* kinsol output::
-* kinsol exceptions::
-* Additional kinsol notes::
-@end menu
-
-@node kinsol input parameters, kinsol output, kinsol, kinsol
-@subsection @code{kinsol} input parameters
-
-Functions whose names are of the form @code{@var{x}d_@var{zzzzz}}
-take an argument of the form
-@code{(@var{f},(@var{i},@var{o}))},
-and functions whose names are of the form @code{@var{x}j_@var{zzzzz}}
-take an argument of the form
-@code{((@var{f},@var{j}),(@var{i},@var{o}))}.
-The parameters have these interpretations.
-
-@itemize @bullet
-@item 
-@var{f} is a function to be optimized, expressed in virtual machine
-code. It takes a list of real numbers as input and returns a list of
-real numbers as output. The numbers must be in floating point format
-as described in @ref{math}.  
-@item
-@var{j} is a function in virtual machine code that computes the
-Jacobian or partial derivatives of @var{f} for a given list of input
-@cindex Jacobian
-numbers. The exact calling convention for @var{j} depends on the
-optimization algorithm selected, as explained below.
-@item
-@var{i} is a list of real numbers suitable as an input for @var{f}.
-The exact values of the numbers in @var{i} are not crucial but the
-length of @var{i} is taken as an indication of the required length for
-any input list to @var{f}. In the case of constrained optimization
-problems (i.e., functions with names beginning with @code{c}), @var{i} must
-consist entirely of non-negative numbers.
-@item
-@var{o} is a list numbers indicating the ``optimal'' output from
-@var{f} in the sense described below (@ref{kinsol output}). Its length
-is taken to indicate the usual length of an output returned by
-@var{f}.
-@end itemize
-
-If the optimization problem is being solved by either the
-@code{cj_dense} or the @code{uj_dense} method, the Jacobian parameter
-@var{j} is expected to take a list @var{v} of real numbers the length
-of @var{i} as input and return a list of lists of reals as output. The
-numbers are represented as described in @ref{math}. The outer list in
-the output from @var{j} is required to be the length of @var{o}, while
-each inner list is required to be the length of @var{i}.
-
-The output from @var{j} is interpreted as a matrix of the form
-described in @ref{Two dimensional arrays}. The entry in row @var{m}
-and column @var{n} is the partial derivative (evaluated at @var{v}) of
-the @var{m}-th component of the output of @var{f} with respect to the
-@var{n}-th item of the input list.
-
-For optimization problems being solved by the methods of
-@code{@var{x}j_gmres}, @code{@var{x}j_bicgs}, or
-@code{@var{x}j_tfqmr}, (i.e., where @var{x} is either @code{c} or
-@code{u}) the Jacobian function @var{j} follows a different convention
-that is meant to be more memory efficient. Given an argument of the
-form @code{(@var{m},@var{v})}, it returns only the @var{m}-th row of
-the matrix described above instead of the whole thing. The parameter
-@var{m} is a natural number less than the length of @var{o}, and
-@var{v} is a list of real numbers the length of @var{i} the same as
-above. The number @var{m} is encoded as described in
-@ref{Representation of Numeric and Textual Data}.
-
-@node kinsol output, kinsol exceptions, kinsol input parameters, kinsol
-@subsection @code{kinsol} output
-
-The @code{kinsol} functions attempt to search the domain of
-@var{f} for a vector @var{v} the length of @var{i} to satisfy
-@code{@var{f}(@var{v}) = @var{o}} as closely as possible. In the case
-of constrained optimization, (i.e., functions whose names begin with
-@code{c}), only non-negative numbers are acceptable in @var{v}. The
-search for @var{v} will start in the vicinity of @var{i}. The value of
-@var{i} will therefore determine a unique solution if multiple
-solutions exist, and will save time if it is near a solution.
-
-In some cases when a solution can't be found due to non-convergence,
-@cindex non-convergence
-an empty list is returned. Non-convergence is not considered an
-exceptional condition. In all other cases where no exception occurs,
-the output from a @code{kinsol} function will be the list @var{v} of
-real numbers satisfying @code{@var{f}(@var{v}) = @var{o}} to the best
-possible tolerance.
-@cindex tolerance
-
-@node kinsol exceptions, Additional kinsol notes, kinsol output, kinsol
-@subsection @code{kinsol} exceptions
-
-@itemize @bullet
-@item
-Any error messages that may be generated in the course of evaluating
-the functions @var{f} and @var{j} will propagate to the result
-returned by the @code{kinsol} library functions.
-
-@item
-If there is insufficient memory to complete any operation, the result
-is a message of 
-
-@example
-<'memory overflow'>
-@end example
-
-@item
-If the argument to the library function (i.e.,
-@code{(@var{f},(@var{i},@var{o}))} or
-@code{((@var{f},@var{j}),(@var{i},@var{o}))}) fails to meet the
-required specifications in a detectable way, the result will be a
-message of
-@cindex bad kinsol specification
-
-@example
-<'bad kinsol specification'>
-@end example
-
-@item
-Any status returned by any @code{kinsol} API functions other than
-success or one of several types of non-convergence results in a
-message of 
-
-@example
-<'kinsol error'>
-@end example
-@end itemize
-
-@node Additional kinsol notes, , kinsol exceptions, kinsol
-@subsection Additional @code{kinsol} notes
-
-When a user supplied Jacobian function @var{j} is specified, the
-@cindex Jacobian
-solution is likely to be found faster and more accurately. The
-Jacobian should be given if an analytical form for @var{f} is known,
-from which the Jacobian can be obtained easily by partial
-differentiation. If the Jacobian is unavailable, a finite difference
-method implemented internally by @code{kinsol} is used as a substitute
-and will usually yield acceptable results.
-
-Tolerances are not explicitly specified on the virtual side of the
-interface although the native @code{kinsol} API requires them. A range
-of tolerances over ten orders of magnitude is automatically tried
-before giving up.
-
-Similarly to the @code{glpk} and @code{lpsolve} library interfaces
-(@ref{glpk} and @ref{lpsolve}), the only expressible constraint through
-@cindex constraints
-the virtual code interface is that all variables are
-non-negative. Arbitrary upper and lower bounds can be simulated by
-appropriate variable substitutions in the formulation of the problem.
-
-The @code{kinsol} library natively requires a system function @var{f}
-with equally many inputs as outputs, and will search only for the
-input associated with an output vector of all zeros, but the virtual
-code interface relaxes these requirements by allowing a function that
-transforms between lists of unequal lengths, and will search for the
-input of @var{f} causing it to match any given ``optimal'' output
-@var{o}. These effects are achieved by padding the shorter of the two
-vectors transparently and subtracting the specified optimum from the
-result.
-
-The @code{kinsol} library can be configured to use single precision,
-double precision, or extended precision arithmetic, but only a double
-precision configuration is compatible with @code{avram}. This
-condition is checked when @code{avram} is configured and it will not
-interface with alternative @code{kinsol} configurations.
-
-The @code{kinsol} library has some more advanced features to which
-this interface doesn't do justice, such as preconditioning, scaling,
-solution of systems with band limited Jacobians, and concurrent
-computation.
-
-@node lapack, math, kinsol, External Libraries
-@section @code{lapack}
-
-An arsenal of weapons grade linear algebra functions from the
-@cindex Fortran
-@code{LAPACK} Fortran library is accessible to virtual code
-@cindex linear algebra
-applications through library calls of the form
-
-@example
-library('lapack',f)
-@end example
-
-Each library function @code{f} invokes a @code{LAPACK} function of the
-same name, but the calling conventions on the virtual side are an
-artifact of the interface requiring their own documentation.
-
-Some functions that are part of @code{LAPACK} are not described here
-(mostly the so called computational and auxiliary routines, and
-@cindex single precision
-anything in single precision), because they are not accessible by
-the virtual code interface.
-
-@menu
-* lapack calling conventions::
-* lapack exceptions::
-* Additional lapack notes::
-@end menu
-
-@node lapack calling conventions, lapack exceptions, lapack, lapack
-@subsection @code{lapack} calling conventions
-
-A table describing the inputs and outputs to the @code{lapack} library
-functions listed by their function names is given in this
-section. Some general points related to most of the functions are
-mentioned first.
-
-@itemize @bullet
-@item
-References to vectors, matrices, and packed matrices should be
-understood as their list representations explained in @ref{Type
-Conversions}. Although @code{LAPACK} internally uses column order
-arrays, the virtual code library interface exhibits a matrix as a list
-of lists with one inner list for each row.
-@item
-Some functions require a symmetric matrix as an input parameter.  Any
-@cindex symmetric matrices
-input parameter that is required to be a symmetric matrix may be
-specified optionally either in square form or in triangular form as
-@cindex triangular matrices
-described in @ref{Two dimensional arrays}. If a square matrix form is
-used, symmetry is not checked and the lower triangular portion is
-ignored.
-@item
-Some function names are listed in pairs differing only in the first
-letter.  Function names beginning with @code{d} pertain to vectors or
-matrices of real numbers (@ref{math}), and function names beginning
-with @code{z} pertain to complex numbers (@ref{complex}). The
-specifications of similarly named functions are otherwise identical.
-@end itemize
-
-@table @asis
-@item @code{dgesvx}
-@item @code{zgesvx}
-These library functions take a pair @code{(@var{a},@var{b})} where
-@var{a} is an @var{n} by @var{n} matrix and @var{b} is a vector of
-length @var{n}. If @var{a} is non-singular, they return a
-vector @var{x} such that @code{@var{a} @var{x} = @var{b}}.
-Otherwise they return an empty list.
-@item @code{dgelsd}
-@item @code{zgelsd}
-These functions generalize those above by taking a pair
-@code{(@var{a},@var{b})} where @var{a} is an @var{m} by @var{n} matrix
-and @var{b} is a vector of length @var{m}, with @var{m} greater than
-@var{n}. They return a vector @var{x} of length @var{n} to minimize
-the magnitude of @code{@var{b} - @var{a} @var{x}}.
-@item @code{dgesdd}
-@item @code{zgesdd}
-These functions take a list of @var{m} time series (i.e., vectors)
-each of length @var{n} and return a list of basis vectors each of
-length @var{n}. The basis vectors span the set of time series in the
-@cindex singular value decomposition
-given list according to the singular value decomposition (i.e., with
-the basis vectors forming a series in order of decreasing
-significance). The number of basis vectors is at most
-@code{@var{min}(@var{m},@var{n})} but could be less if the input time
-series aren't linearly independent. An empty list could be returned
-due to lack of convergence.
-@item @code{dgeevx}
-@item @code{zgeevx}
-These functions take a non-symmetric square matrix and
-return a pair @code{(@var{e},@var{v})} where @var{e} is a list of
-eigenvectors and @var{v} is a list of eigenvalues, both of which will
-@cindex eigenvectors
-contain only complex numbers. (N.B., both functions return complex
-results even though @code{dgeevx} takes real input.) They could also
-return @code{nil} due to a lack of convergence.
-@item @code{dpptrf}
-@item @code{zpptrf}
-These functions take a symmetric square matrix and
-return one of the Cholesky factors. The Cholesky factors are a pair
-@cindex Cholesky decomposition
-of triangular matrices, each equal to the transpose of the other,
-whose product is the original matrix. 
-
-@itemize @bullet
-@item
-If the input matrix is specified in lower triangular form, the lower
-triangular Cholesky factor is returned.
-@item
-If the input matrix is specified in square or upper triangular form,
-the upper triangular Cholesky factor is returned.
-@item
-In either case, the result is returned in triangular form.
-@end itemize
-@item @code{dggglm}
-@item @code{zggglm}
-The input is a pair of matrices and a vector
-@cindex generalized least squares
-@cindex least squares
-@code{((@var{A},@var{B}),@var{d})}. The output is a pair of vectors
-@code{(@var{x},@var{y})} satisfying @code{@var{A}@var{x} +
-@var{B}@var{y} = @var{d}} for which the magnitude of @var{y} is
-minimal. The dimensions all have to be consistent, which means
-the number of rows in @var{A} and @var{B} is the length of @var{d},
-the number of columns in @var{A} is the length of @var{x}, and
-the number of columns in @var{B} is the length of @var{y}.
-@item @code{dgglse}
-@item @code{zgglse}
-The input is of the form @code{((@var{A},@var{c}),(@var{B},@var{d}))}
-where @var{A} and @var{B} are matrices and @var{c} and @var{d} are
-vectors. The output is a vector @var{x} to minimize the magnitude of
-@code{@var{A}@var{x} - @var{c}} subject to the constraint that
-@code{@var{B}@var{x} = @var{d}}. The dimensions have to be consistent,
-which means @var{A} has @var{m} rows, @var{c} has length @var{m},
-@var{B} has @var{p} rows, @var{d} has length @var{p}, both @var{A} and
-@var{B} have @var{n} columns, and the output @var{x} has length
-@var{n}. It is also a requirement that @code{@var{p} <= @var{n} <=
-@var{m} + @var{p}}.
-@item @code{dsyevr}
-This function takes a symmetric real matrix and returns a pair
-@code{(@var{e},@var{v})} where @var{e} is a list of eigenvectors and
-@var{v} is a list of eigenvalues. Both contain only real numbers.
-This function is fast and accurate but not as storage efficient as
-possible. If there is insufficient memory, it automatically invokes
-@code{dspev}.
-@item @code{dspev}
-This function takes a symmetric real matrix and returns a pair
-@code{(@var{e},@var{v})} where @var{e} is a list of eigenvectors and
-@var{v} is a list of eigenvalues. Both contain only real numbers.  It
-uses roughly half the memory of @code{dsyevr} but is not as fast or
-accurate.
-@item @code{zheevr}
-This function takes a complex Hermitian matrix and returns a pair
-@cindex Hermitian matrix
-@code{(@var{e},@var{v})} where @var{e} is a list of eigenvectors and
-@var{v} is a list of eigenvalues. The eigenvectors are complex but the
-eigenvalues are real.
-
-@itemize @bullet
-@item
-A Hermitian matrix has @var{Aij} equal to the complex conjugate of
-@var{Aji}.
-@item
-Although not exactly symmetric, a Hermitian matrix may nevertheless
-be given in either upper or lower triangular form.
-@item
-This function is faster but less storage efficient than @code{zhpev},
-and calls it automatically if it runs out of memory.
-@end itemize
-@item @code{zhpev}
-This function has the same inputs and approximate outputs as
-@code{zheevr} but is slower and more memory efficient because it uses
-only packed matrices.
-@end table
-
-@node lapack exceptions, Additional lapack notes, lapack calling conventions, lapack
-@subsection @code{lapack} exceptions
-
-@itemize @bullet
-@item
-Any of these functions can return a message of
-
-@example
-<'memory overflow'>
-@end example
-
-if it runs out of memory. 
-@item
-If the input parameters don't meet the
-specification, they can also return
-@cindex bad lapack specification
-
-@example
-<'bad lapack specification'>
-@end example
-
-@item
-Any unexpected behavior from the @code{LAPACK} Fortran functions or
-irregular status returned by them is reported by the message
-@cindex lapack error
-
-@example
-<'lapack error'>
-@end example
-
-@noindent
-Getting to the bottom of it may require some debugging
-of the @code{avram} source code in the file @file{lapack.c}.
-@end itemize
-
-@node Additional lapack notes, , lapack exceptions, lapack
-@subsection Additional @code{lapack} notes
-
-The functions @code{dgesdd} and @code{zgesdd} are an effective
-dimensionality reduction technique for a large database of time
-@cindex dimensionality reduction
-series.  A set of basis vectors can be computed once for the database,
-and then any time series in the database can be expressed as a linear
-combination thereof. To the extent that the data embody any redundant
-information, an approximate reconstruction of an individual series
-from the database will require fewer coefficients (maybe far fewer) in
-terms of the basis than original length of the series.
-
-The library functions @code{dgelsd} and @code{zgelsd} are good for
-@cindex least squares
-finding least squares fits to empirical data. If the matrix parameter
-@var{a} is interpreted as a list of inputs and the vector parameter
-@var{b} as the list of corresponding output data from some unknown
-linear function of @var{n} variables @var{f}, then @var{x} is the list
-of coefficients whereby @var{f} achieves the optimum fit to the data
-in the least squares sense.
-
-These functions solve a special case of the problem solved by
-@cindex generalized least squares
-@cindex least squares
-@code{dggglm} and @code{zggglm} where the parameter @var{B} is the
-identity matrix. For the latter functions, the output vector @var{y}
-can be interpreted as a measure of the error, and @var{B} can be
-chosen to express unequal costs for errors at different points in
-the fitted function.
-
-Cholesky decompositions obtained by @code{dpptrf} and @code{zpptrf}
-@cindex Cholesky decomposition
-are useful for generating correlated random numbers. A population of
-vectors of uncorrelated standard normally distributed random numbers
-can be made to exhibit any correlations to order by multiplying all of
-@cindex correlation
-the vectors by the lower Cholesky factor of the desired covariance
-@cindex covariance matrix
-matrix.
-
-@node math, mtwist, lapack, External Libraries
-@section @code{math}
-
-The @code{math} library exports functions that operate on IEEE double
-precision floating point numbers using the host system's C
-library. The numbers are represented natively as contiguous blocks of
-8 bytes each, and on the virtual side as lists of eight character
-representations. (More explanation is given in @ref{Type
-Conversions}.) These functions take the form
-
-@example
-library('math',f)
-@end example
-
-@noindent
-where @code{f} is a character string identifying the function in most
-cases by its standard name in the C library.
-
-@menu
-* math library operators::
-* math library predicates::
-* math library conversion functions::
-* math library exceptions::
-* Additional math library notes::
-@end menu
-
-@node math library operators, math library predicates, math, math
-@subsection @code{math} library operators
-
-The unary operators take a single real number to a real result. They
-@cindex trigonometric functions
-include
-
-@example
-ceil  floor round trunc
-sin   cos   tan   sinh   cosh   tanh
-asin  acos  atan  asinh  acosh  atanh
-exp   log   sqrt  cbrt   expm1  log1p  fabs
-@end example
-
-The binary operators take a pair of real numbers @code{(@var{x},@var{y})} to
-a single real number output. They include
-
-@example
-pow  hypot  atan2  remainder  bus  vid  add  sub  mul  div
-@end example
-
-@noindent
-where the last four correspond to the C language operators @code{+},
-@code{-}, @code{*}, and @code{/}. The functions named @code{bus} and
-@code{vid} are like the @code{sub} and @code{div} functions,
-respectively, with the order of the operands reversed, as explained in
-@ref{complex}.
-
-The meanings of these operators are documented in the GNU @code{libc} reference
-manual or other C language references. They follow IEEE standards including
-proper handling of @code{nan} and infinity.
-
-@node math library predicates, math library conversion functions, math library operators, math
-@subsection @code{math} library predicates
-
-There is one binary predicate, @code{islessequal}, and several unary
-@cindex predicates
-predicates, @code{isinfinite}, @code{isnan}, @code{isnormal}, @code{isubnormal}
-and @code{iszero}.
-
-The predicate @code{islessequal} takes a pair of floating point
-numbers @code{(@var{x},@var{y})} as an argument, and returns
-@code{nil} for a false result and @code{(nil,nil)} for a true result.
-
-The unary predicates have the obvious interpretations as
-classification functions, and should probably be used in preference to
-comparison with constants in case the representations aren't unique.
-
-@node math library conversion functions, math library exceptions, math library predicates, math
-@subsection @code{math} library conversion functions
-
-The conversion function @code{strtod} takes a string representing a
-@cindex strtod
-floating point number in C format to its representation. This function
-is the primary means of creating or initializing floating point
-numbers in virtual code. A value of floating point 0.0 is returned if
-the string is not valid, but no exception is raised.
-
-The conversion @code{asprintf} is similar to the one by that name in
-@cindex asprintf
-C, but requires a pair @code{(@var{f},@var{x})} as an argument.  The
-left side @var{f} is a character string containing a C style format
-conversion for exactly one double precision floating point number,
-such as @code{'%0.4e'}, and the parameter @var{x} is a floating point
-number. The result returned will be a character string expressing the
-number in the specified format.
-
-@node math library exceptions, Additional math library notes, math library conversion functions, math
-@subsection @code{math} library exceptions
-
-The most likely cause of an exception is an attempt to apply a
-@code{math} library function to @code{nil} or to an argument that
-doesn't represent a floating point number. In these cases, an error
-@cindex missing value
-@cindex invalid value
-message of @code{<'missing value'>} or @code{<'invalid value'>} will
-be the result.
-
-An error message of @code{<'invalid asprintf() specifier'>} is
-@cindex invalid asprintf specifier
-reported by the @code{asprintf} function if the format specifier
-@cindex asprintf
-pertains to a string, such as @code{'%s'}. This error is specifically
-trapped because the alternative would be a segmentation
-@cindex segmentation fault
-fault. Otherwise, invalid format specifiers are not detected or
-reported.
-
-Error messages of @code{<'invalid text format'>} can be generated
-@cindex invalid text format
-by conversion functions if any parameters that are meant to be
-character string representations are something else.
-
-There is always a chance of a @code{<'memory overflow'>} error if
-there is insufficient memory to allocate a result.
-
-@node Additional math library notes, , math library exceptions, math
-@subsection Additional @code{math} library notes
-
-Floating point exceptions such as division by zero are not
-specifically reported as exceptions, but invalid computations can be
-@cindex nan
-detected by the propagation of @code{nan} into the result, following
-standard conventions.
-
-The C function @code{feclearexcept (FE_ALL_EXCEPT)} is called before
-@cindex feclearexcept
-every floating point operation so that no lingering exception flags
-can affect it.
-
-There is no library predicate for exact comparison of floating point
-numbers, but none is required because the virtual machine's
-@code{compare} combinator will work on their representations as it
-@cindex compare combinator
-will on any other data. The usual caveats apply with regard to
-comparing floating point numbers in the presence of roundoff error.
-
-@node mtwist, minpack, math, External Libraries
-@section @code{mtwist}
-
-The @code{mtwist} library interfaces to a random number generator
-@cindex random numbers
-based on the Mersenne Twistor algorithm. The algorithm has good
-properties but is not meant to be cryptographically secure. The
-library functions are of the form
-
-@example
-library('mtwist',f)
-@end example
-
-@noindent
-where @code{f} is one of the followng character strings.
-
-@example
-bern   u_cont   u_disc   u_path   u_enum   w_disc   w_enum
-@end example
-
-Formally they are not mathematical functions because their results
-depend on a pseudo-random number that is not uniquely determined by
-their arguments. The numbers are generated deterministically in a
-sequence starting from a seed derived from the system clock at the
-time @code{avram} is launched, and each call uses the next number
-in the sequence. In so doing, it simulates a random draw from a
-uniformly distributed population.
-
-@menu
-* mtwist calling conventions::
-* mtwist exceptions::
-* Additional mtwist notes::
-@end menu
-
-@node mtwist calling conventions, mtwist exceptions, mtwist, mtwist
-@subsection @code{mtwist} calling conventions
-
-All of the functions in this library simulate a random draw from a
-distribution. There is a choice of distribution statistics depending
-on the function used.
-
-@table @asis
-@item @code{bern}
-takes a floating point number @var{p} between 0 and 1, encoded as in
-@ref{math}, and returns a boolean value, either @code{(nil,nil)} for
-true or @code{nil} for false. A true value is returned only if a
-random draw from a uniform distribution ranging from 0 to 1 is less
-than @var{p}.  This function therefore simulates a draw from a
-Bernoulli distribution. A @code{nil} value of @var{p} is treated as
-1/2.
-@item @code{u_cont}
-takes a floating point number @var{x} as an
-argument, and returns a random draw from a continuous uniform
-distribution ranging from 0 to @var{x}. A @code{nil} value of @var{x}
-is treated as unity.
-@item @code{u_disc}
-simulates a draw from a uniform discrete distribution whose domain
-is the set of natural numbers from 0 to @var{n} - 1. The number @var{n}
-is given as a parameter to this function, and the retuned value
-is the draw.
-
-@itemize @bullet
-@item
-The returned value will have at most 64 bits regardless of @var{n}.
-@item
-Natural numbers are encoded as described in
-@ref{Representation of Numeric and Textual Data}.
-@item
-If a value of 0 is passed for @var{n}, the full 64 bit range is
-used.
-@end itemize
-@item @code{u_path}
-takes a pair of natural numbers @code{(@var{n},@var{m})} and returns a
-randomly chosen tree (@ref{Raw Material}) with 1 leaf and @var{n}
-non-leaves each having either a left or a right descendent but not
-both. The number @var{m} constrains the result to fall within the
-first @var{m} - 1 trees of this form enumerated by exhausting all
-possibilities at lower levels before admitting a right descendent at a
-higher level. Within these criteria, all possible results are equally
-probable. Both numbers are masked to 64 bits, but if @var{m} is zero,
-it is treated as 2^@var{n}.
-@item @code{u_enum}
-simulates a random draw from a uniform discrete distribution whose
-domain is enumerated. The argument to the function is a non-empty list,
-and the result is an item selected from the list, with all choices
-being equally probable.
-@item @code{w_disc}
-simulates a random draw from a non-uniform, or ``weighted'' discrete
-distribution whose domain is a set of consecutive natural numbers
-starting from zero. The argument to the function is a list giving the
-probability of each outcome starting from zero as a floating point
-number. Probabilities must be non-negative but needn't be normalized.
-@item @code{w_enum}
-simulates a random draw from a non-uniform, or ``weighted'' discrete
-distribution with an arbitrary domain enumerated in the argument. The
-argument is a list of pairs @code{<(@var{x},@var{p})..>}, where
-@var{x} is a possible outcome and @var{p} is its probability. The
-result returned is one of the values of @var{x} from the input list
-chosen at random according to the associated
-probability. Probabilities must be non-negative but needn't be
-normalized.
-@end table
-
-@node mtwist exceptions, Additional mtwist notes, mtwist calling conventions, mtwist
-@subsection @code{mtwist} exceptions
-
-@itemize @bullet
-@item
-@code{<'memory overflow'>} can be returned if there is insufficient
-memory to allocate a result.
-@item
-Messages of @code{<'missing value'>} and @code{<'invalid value'>} can
-be returned if any floating point argument is @code{nil} or is not a
-valid floating point number, unless there is a designated default
-interpretation for @code{nil} as in @code{bern} and @code{u_cont}.
-@item
-A message of @code{<'bad mtwist specification'>} is returned if an
-argument to the @code{bern} function is not in the range of 0 to 1, or
-if any probability passed to the @code{w_}* functions is negative.
-@item
-A message of @code{<'draw from empty list'>} is returned if
-an argument to the *@code{_enum} functions is @code{nil}
-or if an argument to @code{w_enum} contains @code{nil}.
-@end itemize
-
-@node Additional mtwist notes, , mtwist exceptions, mtwist
-@subsection Additional @code{mtwist} notes
-
-Although the @code{mtwist} library is ``external'', it requires no
-special configuration on the host because the uniform variate
-generator in the form developed by its original authors is short and
-elegant enough to be packaged easily within the @code{avram}
-distribution. All further embellishments are home grown despite the
-advice at the end of @ref{Implementing new library functions}.
-
-The @code{u_path} function is intended to allow sampling from a large
-population in logarithmic time when it is stored in a balanced tree. A
-left-heavy tree should be constructed initially with the data items
-all at the same level. Thereafter, a result returned by @code{u_path}
-with the appropriate dimensions can be used as an index into the tree
-for fast retrieval by the virtual machine's @code{field} combinator
-(@ref{Field}).
-
-The last three functions, @code{u_enum}, @code{w_disc}, and
-@code{w_enum} use an inversion method with a binary search.  The first
-draw from a given list will take a time asymptotically proportional to
-the length of the list, but subsequent draws from the same list are
-considerably faster due to a persistent cache maintained transparently
-by @code{avram}. For lists whose length is up to 2^16, the time
-required for a subsequent draw consists mainly of constant overhead
-with a small logarithmic component in the length of the list. For
-longer lists, the time ramps up linearly by a small factor.
-
-Information allowing fast draws from up to sixteen lists can be cached
-simultaneously. If an application uses more than sixteen, the cached
-data are replaced in first-in first-out order. The size of the cache
-and the maximum list length for logarithmic time access can be
-adjusted easily by redefining constants in @file{mtwist.c} under the
-@code{avram} source tree, but will require recompilation.
-
-@node minpack, mpfr, mtwist, External Libraries
-@section @code{minpack}
-
-The @code{minpack} library contains functions to solve non-linear
-@cindex non-linear optimization
-optimization and least squares problems. The functions can be
-@cindex least squares
-expressed as
-
-@example
-library('minpack',f)
-@end example
-
-@noindent
-where @code{f} can be one of @code{'hybrd'}, @code{'hybrj'},
-@code{'lmder'}, @code{'lmdif'}, or @code{'lmstr'}, following the names
-of the underlying Fortran subroutines.
-
-@menu
-* minpack calling conventions::
-* minpack exceptions::
-* Additional minpack notes::
-@end menu
-
-@node minpack calling conventions, minpack exceptions, minpack, minpack
-@subsection @code{minpack} calling conventions
-
-The @code{minpack} library solves a similar problem to that of the
-@code{kinsol} library (@ref{kinsol}), and the two libraries have
-identical calling conventions at the level of the virtual code
-interface.
-
-The @code{hybrd} and @code{lmdif} functions take input arguments of
-the form @code{(@var{f},(@var{i},@var{o}))}, whereas @code{hybrj},
-@code{lmder}, and @code{lmstr} take arguments of the form
-@code{((@var{f},@var{j}),(@var{i},@var{o}))}.  The interpretations of
-these parameters are explained in @ref{kinsol input parameters}.
-
-For the @code{lmstr} function, the Jacobian function @var{j} takes
-@cindex Jacobian
-an argument @code{(@var{m},@var{v})} and returns only the @var{m}-th
-row of the Jacobian matrix. For @code{lmder} and @code{hybrj}, the
-Jacobian function takes only an input vector @var{v} and returns the
-whole matrix. These specifications are also explained further in
-relation to the @code{kinsol} library.
-
-The output from any minpack function is a vector @var{v} satisfying
-@code{@var{f}(@var{v}) = @var{o}} to the best possible tolerance if a
-@cindex tolerance
-solution is found. A range of tolerances over ten orders of magnitude
-is sampled starting from @code{1e-15}. If no solution is found, an
-empty list is returned.
-
-@node minpack exceptions, Additional minpack notes, minpack calling conventions, minpack
-@subsection @code{minpack} exceptions
-
-@itemize @bullet
-@item
-A message of @code{<'memory overflow'>} is possible any time
-@code{minpack} runs out of memory.
-@item
-A message of @code{<'bad minpack specification'>} will be returned
-@cindex bad minpack specification
-if an input argument recognizably violates the required specification.
-@item
-The @code{<'minpack error'>} message is returned in the event of any
-@cindex minpack error
-unexpected behavior or irregular status from the API.
-@item
-Any error messages reported by the system function @var{f} or the
-Jacobian function @var{j} are propagated to the result.
-@end itemize
-
-@node Additional minpack notes, , minpack exceptions, minpack
-@subsection Additional @code{minpack} notes
-
-The @code{lm}* functions are better suited to problems in which the
-system function @var{f} has more outputs than inputs, and the
-@code{hybr}* functions are better suited to the alternative. If either
-is called when the other is more appropriate, the job is handed off to
-the other automatically.
-
-The @code{lmstr} function is more memory efficient than the others
-because it doesn't compute the whole Jacobian matrix at once. Any
-@cindex Jacobian
-of the @code{lm}* functions is more memory efficient than
-the @code{kinsol} equivalent when the output list is sufficiently
-longer than the input list.
-
-Unlike @code{kinsol}, there is no provision in @code{minpack} for
-@cindex constrained optimization
-constrained optimization.
-
-The @code{minpack} documentation doesn't state whether it's
-@cindex re-entrancy
-re-entrant, but the odds are against it unless it uses no storage
-outside the user provided work areas. If it isn't re-entrant,
-anomalous effects could occur when a virtual code function being
-optimized calls another @code{minpack} function.  A workaround would
-be to use an equivalent @code{kinsol} function, which is re-entrant by
-design.
-
-The @code{avram} configuration script searches for a C header file
-@cindex header file
-@file{minpack.h} on the host system in order to build an interface to
-this library. This file is specific to the Debian @code{minpack-dev}
-package and is not part of the upstream Fortran source. Configuring
-@code{avram} with an interface to the @code{minpack} library on a
-@cindex Debian
-non-Debian system may require the administrator to retrieve the header
-file manually from the Debian archive and place it under
-@file{/usr/include} before running the configuration script (in
-addition to installing the @code{minpack} library itself, of course).
-
-@node mpfr, lpsolve, minpack, External Libraries
-@section @code{mpfr}
-
-The @code{mpfr} library provides a rich assortment of floating point
-operations on arbitrary precision numbers
-(@url{http://www.mpfr.org}). These numbers are represented in a format
-that is not binary compatible with the standard IEEE floating point
-number format used by other libraries, but they offer superior
-numerical stability suitable for many ill conditioned problems.
-
-The virtual code interface to the @code{mpfr} library follows the
-native API to the extent of using the same names for most operations,
-but excludes features pertaining to i/o, mutable storage, and memory
-management.
-
-The @code{mpfr} library functions are invoked by an expression of the
-form
-
-@example
-library('mpfr',f)
-@end example
-
-@noindent
-Aside from a few exceptions as noted, @code{f} is a character string
-derived from the name of the related function from the @code{mpfr} C
-library as documented at the above address, but without the
-@code{mpfr_} prefix.
-
-The full complement of available functions is documented in the
-remainder of this section.
-
-@itemize @bullet
-@item
-References to natural numbers pertain to the list representation
-described in @ref{Representation of Numeric and Textual Data}.
-@item
-All functions that perform rounding use a mode of @code{GMP_RNDN} for
-@cindex rounding
-rounding to nearest, which is not explicitly specified on the virtual
-side.
-@end itemize
-
-@menu
-* mpfr binary operators::
-* mpfr unary operators::
-* mpfr binary operators with a natural operand::
-* mpfr binary predicates::
-* mpfr unary predicates::
-* mpfr constants::
-* mpfr functions with miscellaneous calling conventions::
-* mpfr conversion functions::
-* mpfr exceptions::
-* Additional mpfr notes::
-@end menu
-
-@node mpfr binary operators, mpfr unary operators, mpfr, mpfr
-@subsection @code{mpfr} binary operators
-
-Functions with these names take a pair of @code{mpfr} numbers
-@code{(@var{x},@var{y})} and return an @code{mpfr} number as a result.
-
-@itemize @bullet
-@item @code{add}
-@item @code{sub}
-@item @code{mul}
-@item @code{div}
-@item @code{pow}
-@item @code{atan2}
-@item @code{hypot}
-@item @code{min}
-@item @code{max}
-@item @code{vid}
-@item @code{bus}
-@end itemize
-
-Their semantics are similar to those listed in the @code{mpfr}
-documentation, with some minor qualifications.
-
-@itemize @bullet
-@item
-Unlike the native API, there is no third argument to which the result
-is assigned, because the result is the returned value.
-@item
-The precision of the result is the greater of the two precisions of
-the input numbers @var{x} and @var{y}.
-@item
-The @code{vid} and @code{bus} functions are added features of the
-virtual code interface, corresponding to division and subtraction with
-the order of the operands reversed, as explained in @ref{complex}.
-@end itemize
-
-Mathematically it might make more sense for the precision of the
-@cindex precision
-result to be the lesser of the two input precisions, but this way is
-more convenient for virtual code programs that perform binary
-operations on their input with hard coded constants, because it makes
-one size fit all.
-
-@node mpfr unary operators, mpfr binary operators with a natural operand, mpfr binary operators, mpfr
-@subsection @code{mpfr} unary operators
-
-Functions with these names take a single @code{mpfr} number as an
-argument and return a single @code{mpfr} number as a result.
-@cindex gamma functions
-
-@example
-sqr      sqrt     cbrt     neg      abs      log
-log2     log10    exp      exp2     exp10    cos
-sin      tan      acos     asin     atan     cosh
-sinh     tanh     acosh    asinh    atanh    lngamma
-expm1    eint     gamma    erf      log1p    nextbelow
-ceil     floor    round    trunc    frac     nextabove
-erfc  
-@end example
-
-The semantics of these functions are similar to those of their
-counterparts in the native API, with these provisions.
-
-@itemize @bullet
-@item
-The precision of the result is the precision of the argument.
-@item
-There is no second argument for assigning the result.
-@item
-The @code{nextabove} and @code{nextbelow} functions do not modify
-their arguments in place, but return a freshly allocated result
-like all other functions.
-@end itemize
-
-@node mpfr binary operators with a natural operand, mpfr binary predicates, mpfr unary operators, mpfr
-@subsection @code{mpfr} binary operators with a natural operand
-
-Functions with these names take an argument of the form
-@code{(@var{x},@var{n})}, where @var{x} is an @code{mpfr} number
-and @var{n} is a natural number.
-
-@itemize @bullet
-@item @code{root}
-@item @code{pow_ui}
-@item @code{mul_2ui}
-@item @code{div_2ui}
-@item @code{grow}
-@item @code{shrink}
-@end itemize
-
-The last two are specific to the virtual code interface, having no
-counterpart in the native API of the @code{mpfr} library.  The
-@code{grow} function returns a copy of @var{x} with its precision
-increased by @var{n} bits, and the @code{shrink} function returns a
-copy of @var{x} with its precision reduced by @var{n} bits. 
-
-@itemize @bullet
-@item
-The precisions are silently capped at the maximum or floored at the
-@cindex precision
-minimum allowable precisions if necessary.
-@item
-Increasing the precision by the @code{grow} function does not directly
-cause a more accurate result to be computed, but only pads an existing
-number with zeros.
-@item
-Decreasing the precision by the @code{shrink} function does not prevent
-valid bits from being discarded.
-@end itemize
-
-The appropriate way to use @code{grow} is to grow the precision of an
-operand before applying an operator to it, which will cause the result
-to be computed to the full precision. This capability is suitable for
-algorithms that iterate over increasing precisions until a stopping
-criterion is met.
-
-@node mpfr binary predicates, mpfr unary predicates, mpfr binary operators with a natural operand, mpfr
-@subsection @code{mpfr} binary predicates
-
-These predicates take a pair of @code{mpfr} numbers
-@code{(@var{x},@var{y})} as arguments and perform a logical operation.
-If the result is true, they return @code{(nil,nil)}, and if it's
-false, they return @code{nil}.
-
-@itemize @bullet
-@item @code{equal_p}
-@item @code{unequal_abs}
-@item @code{greater_p}
-@item @code{greaterequal_p}
-@item @code{less_p}
-@item @code{lessequal_p}
-@item @code{lessgreater_p}
-@end itemize
-
-The name of the function @code{unequal_abs}, for comparing absolute
-values, has been changed from @code{mpfr_cmpabs} to avoid confusion
-with the virtual machine's @code{compare} combinator. The
-@code{compare} combinator returns a @code{(nil,nil)} result (i.e.,
-true) if the
-@cindex compare combinator
-operands are equal and a @code{nil} result if they're unequal,
-opposite from @code{unequal_abs}.
-
-@node mpfr unary predicates, mpfr constants, mpfr binary predicates, mpfr
-@subsection @code{mpfr} unary predicates
-
-Each of these predicates takes an @code{mpfr} number as an argument
-and performs a logical operation. If the result is true, it returns
-@code{(nil,nil)}, and otherwise it returns @code{nil}.
-
-@itemize @bullet
-@item @code{nan_p}
-@item @code{inf_p}
-@item @code{number_p}
-@item @code{zero_p}
-@item @code{integer_p}
-@end itemize
-
-@node mpfr constants, mpfr functions with miscellaneous calling conventions, mpfr unary predicates, mpfr
-@subsection @code{mpfr} constants
-
-Each of these functions takes a natural number as an argument
-specifying a precision, and returns a mathematical constant evaluated
-to that precision.
-
-@itemize @bullet
-@item @code{const_log2}
-@item @code{pi}
-@item @code{const_catalan}
-@item @code{inf}
-@item @code{ninf}
-@item @code{nan}
-@end itemize
-
-The name of the constant @code{pi} has been shortened from
-@code{mpfr_const_pi}.  The functions @code{inf} and @code{ninf} return
-infinity and negative infinity, respectively.
-
-The encoding of @code{nan}, used to represent the results of undefined
-@cindex nan
-computations such as division by zero, is not unique even for a fixed
-precision.  Applications should test for undefined results using
-@code{nan_p} rather than by comparing a result to a hard coded
-@code{nan} (@ref{mpfr unary predicates}).
-
-@node mpfr functions with miscellaneous calling conventions, mpfr conversion functions, mpfr constants, mpfr
-@subsection @code{mpfr} functions with miscellaneous calling conventions
-
-Some functions listed below don't conform to any of the previously
-mentioned calling conventions.
-
-@table @asis
-@item @code{eq}
-This is a ternary operator taking a triple
-@code{(@var{prec},(@var{x},@var{y}))}, where @var{prec} is a natural
-number and @var{x} and @var{y} are @code{mpfr} numbers. It returns a
-result of @code{(nil,nil)} (i.e., true) if the numbers agree up to the
-specified precision measured in bits, and returns @code{nil}
-otherwise.@footnote{a potentially useful tool for algorithms concerned
-with numerical approximations despite its inexplicable malignment in
-the @code{mpfr} documentation}
-@item @code{urandomb}
-This function takes a natural number specifying a precision and
-@cindex random numbers
-returns a uniformly distributed pseudo-random number of that precision
-between 0 and 1.
-@item @code{prec}
-This function takes an @code{mpfr} number and returns a natural number
-as a result, which is the precision of the argument in bits.
-@item @code{sin_cos}
-This function takes an @code{mpfr} number @var{z} as an argument and
-returns a pair of @code{mpfr} numbers @code{(@var{x},@var{y})} as a
-result, where @var{x} is the sine of @var{z} and @var{y} is the cosine.  The
-precisions of the results are the same as the precision of the
-argument.
-@end table
-
-@node mpfr conversion functions, mpfr exceptions, mpfr functions with miscellaneous calling conventions, mpfr
-@subsection @code{mpfr} conversion functions
-
-The functions described in this section convert between @code{mpfr}
-numbers and character strings, naturals, or standard IEEE floating
-point format (in their list representations). Where these functions
-have similar or equivalent counterparts in the @code{mpfr} library's
-native API, the names have been changed for mnemonic reasons.
-
-@table @asis
-@item @code{dbl2mp}
-The input is a standard floating point number as in @ref{math}. The
-result is an @code{mpfr} number equal to the input with a
-fixed precision, currently set to 160 bits.
-@item @code{mp2dbl}
-The input is an @code{mpfr} number, and the output is the best
-possible approximation to it by a standard a double precision
-number.
-@item @code{str2mp}
-The input is a pair @code{(@var{prec},@var{s})}, where @var{prec} is a
-natural number specifying the precision, and @var{s} is a string
-expressing a floating point number in C format. The output is an
-@code{mpfr} number with the specified precision.
-@item @code{mp2str}
-The input is an @code{mpfr} number, and the output is a character
-string expressing the number in exponential decimal notation.
-Sufficiently many decimal digits are included in the string to express
-the full precision.
-@item @code{nat2mp}
-The input is a natural number represented as described in
-@ref{Representation of Numeric and Textual Data},
-and the output is an @code{mpfr} number of sufficient precision to
-express the natural number exactly.
-@end table
-
-The @code{mp2str} function enhances the native @code{mpfr_get_str}
-function by properly formatting the output string rather than only
-listing the digits of the mantissa.
-
-The @code{nat2mp} function does not rely on the @code{mpfr} native
-integer conversion functions, so natural numbers with any number of
-bits up to @code{MP_PREC_MAX} can be used losslessly. There is
-currently no conversion in the other direction.
-
-@node mpfr exceptions, Additional mpfr notes, mpfr conversion functions, mpfr
-@subsection @code{mpfr} exceptions
-
-@itemize @bullet
-@item
-A message of @code{<'memory overflow'>} is possible any time
-@code{mpfr} runs out of memory.
-@item
-A message of @code{<'bad mpfr specification'>} will be returned
-@cindex bad mpfr specification
-if an input argument recognizably violates the required specification.
-@item
-The @code{<'mpfr error'>} message is returned in the event of any
-@cindex mpfr error
-unexpected behavior or irregular status from the API.
-@item
-The message of @code{<'mpfr overflow'>} can be cause by the
-@code{nat2mp} function if a natural number has too many bits to be
-represented exactly as an @code{mpfr} number.
-@end itemize
-
-@node Additional mpfr notes, , mpfr exceptions, mpfr
-@subsection Additional @code{mpfr} notes
-
-The @code{eq} and @code{urandomb} functions depend not only on the
-@code{mpfr} library but on the @code{gmp} library
-@cindex gmp library
-(@url{http://ftp.gnu.org/gnu/gmp}). It's possible for them to be
-unavailable on a host without @code{gmp} even if the rest of the
-@code{mpfr} library is properly configured.
-
-The file @code{mpfr.c} in the @code{avram} source tree exports a
-couple of functions that may be of use to C hackers interested in
-further development of @code{avram} with @code{mpfr}. The functions
-@code{avm_mpfr_of_list} and @code{avm_list_of_mpfr} convert between
-the native representation for @code{mpfr} numbers and the caching list
-representation used by @code{avram} (@ref{Type Conversions}). This
-conversion is non-trivial because the numbers are not stored
-contiguously.
-
-@node lpsolve, rmath, mpfr, External Libraries
-@section @code{lpsolve}
-
-This library interface exports functions to solve linear programming
-@cindex mixed integer programming
-@cindex linear programming
-and mixed integer programming problems using the @code{lpsolve}
-package documented at
-
-@url{http://lpsolve.sourceforge.net/5.5/}.
-
-@noindent
-Of the two linear
-programming solvers currently interfaced with @code{avram}, this one
-is believed to be the more robust.
-
-@menu
-* lpsolve calling conventions::
-* lpsolve return values::
-* lpsolve errors::
-@end menu
-
-@node lpsolve calling conventions, lpsolve return values, lpsolve, lpsolve
-@subsection @code{lpsolve} calling conventions
-
-The library is able to solve linear and mixed integer programming
-problems, depending on which function is selected. The
-@cindex linear programming
-function to call the linear programming solver is of the form
-
-@itemize @bullet
-@item @code{library('lpsolve','stdform')}
-@end itemize
-
-@noindent
-@cindex mixed integer programming
-and the mixed integer programming functions are of the form
-
-@itemize @bullet
-@item @code{library('lpsolve','iform')}
-@item @code{library('lpsolve','bform')}
-@item @code{library('lpsolve','biform')}
-@end itemize
-
-@noindent
-The argument to the @code{stdform} function represents a triple
-@code{(@var{c},(@var{m},@var{y}))}, which has the same interpretation
-described in @ref{glpk input parameters}. The arguments to the @code{iform},
-@code{bform}, and @code{biform} functions are tuples
-@code{(@var{i},(@var{c},(@var{m},@var{y})))}
-@code{(@var{b},(@var{c},(@var{m},@var{y})))}, and
-@code{((@var{b},@var{i}),(@var{c},(@var{m},@var{y})))}, respectively, where
-@var{c}, @var{m}, and @var{y} are as above, and
-
-@itemize @bullet
-@item @var{b} is a list of binary variable column indices
-@item @var{i} is a list of integer variable column indices
-@end itemize
-
-@noindent
-where column indices pertain to the constraint matrix, and are
-numbered from zero.  Specifying some or all variables as integers
-directs the solver to seek only solutions in which those variables
-have integer values, and specifying any as binary directs the solver
-to seek only solutions in which those variables have values of zero or
-one.  The IEEE floating point representation is used for all variables
-regardless (@ref{math}).
-
-@node lpsolve return values, lpsolve errors, lpsolve calling conventions, lpsolve
-@subsection @code{lpsolve} return values
-
-If a feasible and optimal solution is found, a list of values for the variables
-is returned in the form @code{<(@var{i},@var{x})...>}, where @var{i} is a natural
-number and @var{x} is a floating point number giving the value of the @var{i}-th
-variable numbered from zero. Values of @var{x} equal to zero are omitted.
-
-@node lpsolve errors, , lpsolve return values, lpsolve
-@subsection @code{lpsolve} errors
-
-If any calling conventions are not followed, an exception is raised and a diagnostic
-message of @code{bad lpsolve problem specification} is reported. If no feasible solution
-can be found, no exception is raised but an empty list is returned.
-
-@node rmath, umf, lpsolve, External Libraries
-@section @code{rmath}
-
-A selection of mathematical and statistical functions from the GNU R
-math library has a virtual code interface of the form
-
-@example
-library('rmath',f)
-@end example
-
-@noindent
-where @code{f} is a character string derived from the name of a
-function in the C language API described in the manual
-@file{R-exts.pdf}, available at @url{http://www.r-project.org}.
-
-Every function in the library returns a real result in the form of
-@ref{math}, but functions differ in the argument types. The arguments
-are tuples of real numbers and booleans that also closely follow the
-native API as explained below.
-
-@menu
-* rmath statistical functions::
-* rmath miscellaneous functions::
-* rmath exceptions::
-@end menu
-
-@node rmath statistical functions, rmath miscellaneous functions, rmath, rmath
-@subsection @code{rmath} statistical functions
-
-Functions for evaluating random draws, density, cumulative probability
-and inverse cumulative probability are provided for some of the more
-frequently used probability distributions, which are chi-squared,
-non-central chi-squared, exponential, lognormal, normal, poisson,
-Student's t, and uniform.
-
-Each distribution is known by an abbreviated name and specified by one
-@cindex distributions
-@cindex probability distributions
-@cindex statistical distributions
-or two real parameters as listed below. Names of distributions in this
-table form the stem of a library function name.  The names of the
-parameters such as @var{mu} and @var{sigma} are not explicitly
-mentioned when invoking the functions, but are listed here for
-reference.  The precise definitions of the distribution functions and
-interpretations of these parameters can be found in standard texts on
-probability and statistics.
-
-@example
-chisq         @var{df}
-nchisq        @var{df}, @var{lambda}
-exp           @var{scale}
-lnorm         @var{logmean}, @var{logsd}
-norm          @var{mu}, @var{sigma}
-pois          @var{lambda}
-t             @var{n}
-unif          @var{a}, @var{b}
-@end example
-
-The virtual code interface follows a naming convention similar to the
-native API, in that function names beginning with @code{r} represent
-random draws from a distribution, with the argument to the function
-being the parameters specifying the distribution. Functions in this
-first group return a random draw from a distribution described by a
-single real parameter.
-
-@itemize @bullet
-@item @code{rchisq}
-@item @code{rexp}
-@item @code{rpois}
-@item @code{rt}
-@end itemize
-
-@noindent
-These next functions return random draws from distributions specified
-by a pair of parameters, @code{(@var{x},@var{y})}.
-
-@itemize @bullet
-@item @code{rnchisq}
-@item @code{rlnorm}
-@item @code{rnorm}
-@item @code{runif}
-@end itemize
-
-Functions whose names begin with @code{d} evaluate the probability
-density of a distribution at a given point. They require at least two
-real arguments, the first being the point whose probability density is
-sought, and the remaining ones being the parameters that specify the
-distribution. A boolean operand, which is @code{nil} for false and
-@code{(nil,nil)} for true, requests the logarithm of the density when
-true.
-
-Functions with names in the following group take a triple with two
-real operands and a boolean, @code{(@var{x},(@var{y},@var{a}))}, and
-return a probabiity density.
-
-@itemize @bullet
-@item @code{dchisq}
-@item @code{dexp}
-@item @code{dpois}
-@item @code{dt}
-@end itemize
-
-@noindent
-The next functions pertain to distributions requiring two paramters to
-specify them, so they take a quadruple with three real operands and a
-boolean, @code{(@var{x},(@var{y},(@var{z},@var{a})))}.
-
-@itemize @bullet
-@item @code{dnchisq}
-@item @code{dlnorm}
-@item @code{dnorm}
-@item @code{dunif}
-@end itemize
-
-Functions whose names begin with @code{p} or @code{q} obtain
-@cindex cumulative probability
-cumulative probabilities or inverse cumulative probabilities
-respectively for a specified distribution. They require one real
-operand to identify the point whose probability or inverse probability
-is sought, and other real operands to parameterize the distribution,
-as above. There are also two boolean operands. The first is true in
-order to request a probability or inverse probability with respect to
-the lower tail as opposed to the upper, and the other is true to
-indicate that probabilities are to be expressed logarithmically.
-
-The argument to these functions is a quadruple with two real operands
-and two booleans, @code{(@var{x},(@var{y},(@var{a},@var{b})))}.
-
-@itemize @bullet
-@item @code{pchisq}, @code{qchisq}
-@item @code{pexp}, @code{qexp}
-@item @code{ppois}, @code{qpois}
-@item @code{pt}, @code{qt}
-@end itemize
-
-@noindent
-The remaining functions pertain to distributions parameterized by two
-real operands. These take a quintuple with three real operands and two
-booleans, @code{(@var{x},(@var{y},(@var{z},(@var{a},@var{b}))))}.
-
-@itemize @bullet
-@item @code{pnchisq},
-@code{qnchisq}
-@item @code{plnorm},
-@code{qlnorm}
-@item @code{pnorm},
-@code{qnorm}
-@item @code{punif},
-@code{qunif}
-@end itemize
-
-@node rmath miscellaneous functions, rmath exceptions, rmath statistical functions, rmath
-@subsection @code{rmath} miscellaneous functions
-
-Some less frequently used real valued mathematical functions are also
-accessible by the @code{rmath} library interface.  The functions with
-@cindex gamma functions
-names in this group take a single real operand.
-
-@example
-gammafn         lgammafn        digamma
-trigamma        tetragamma      pentagamma
-@end example
-
-@noindent
-The ones in this group take a pair of real operands
-@cindex bessel functions
-@code{(@var{x},@var{y})}.
-
-@example
-beta            lbeta           bessel_j       bessel_y
-@end example
-
-@noindent
-Those remaining take a triple of real operands
-@code{(@var{x},(@var{y},@var{z}))}.
-
-@example
-bessel_i        bessel_k
-@end example
-
-An alternative and better documented selection of Bessel functions is
-provided by the @code{bes} library interface (@ref{bes}).
-
-@node rmath exceptions, , rmath miscellaneous functions, rmath
-@subsection @code{rmath} exceptions
-
-The only exceptional condition specific to the @code{rmath} library
-interface is associated with the message @code{<'bad rmath
-specification'>}, which means that a tuple given as an argument
-@cindex bad rmath specification
-has the wrong number or types of operands.
-
-@node umf, ,rmath, External Libraries
-@section @code{umf}
-
-Systems of equations described by sparse matrices (i.e., matrices
-@cindex sparse matrices
-containing mostly zeros) arise in certain practical problems. The
-usual array representation in which zeros are explicitly stored would
-be prohibitive for large matrices occurring in many problems of
-interest. A more sophisticated approach is used by the @code{umf}
-library to manage memory efficiently, which is documented at
-@url{http://www.cise.ufl.edu/research/sparse/SuiteSparse/current/SuiteSparse/UMFPACK/Doc/}.
-
-
-
-A virtual code interface to functions for solving sparse systems of
-equations by these methods is afforded by library functions of the form
-
-@example
-library('umf',f)
-@end example
-
-@noindent
-where the library function name, @code{f} is a character string
-of the form @code{@var{tt}_@var{m}_@var{rrr}}.
-
-@itemize @bullet
-@item @var{tt}
-can be either @code{di} for real matrices, or @code{zi} for complex.
-@item @var{m}
-can be one of @code{a}, @code{t}, or @code{c} for solving a system
-given either by a matrix, its transpose, or its conjugate transpose,
-respectively,
-@cindex conjugate transpose
-corresponding to mnemonics @code{A}, @code{Aat} and @code{At} used in
-the C language API.
-@item @var{rrr}
-is either @code{trp} or @code{col}, to indicate a sparse matrix expressed
-either as a list of triples, or in packed column form, as documented below.
-@end itemize
-
-The complete set of function names for this library interface is as
-follows.
-
-@example
-di_a_trp      di_a_col       zi_a_trp       zi_a_col
-di_t_trp      di_t_col       zi_t_trp       zi_t_col
-                             zi_c_trp       zi_c_col
-@end example
-
-@noindent
-Not all combinations are represented, because the conjugate transpose
-is relevant only to complex matrices.
-
-@menu
-* umf input parameters::
-* umf output::
-* umf exceptions::
-* Additional umf notes::
-@end menu
-
-@node umf input parameters, umf output, umf, umf
-@subsection @code{umf} input parameters
-
-For a square matrix @var{A} and a column vector @var{b}, the
-@code{umf} functions find the solution @var{x} to the matrix equation
-@var{M} @var{x} = @var{b}, where @var{M} is either @var{A}, the
-transpose of @var{A}, or its conjugate transpose. As noted above, the
-choice is determined by whether the the function name is of the form
-*@code{_a_}*, *@code{_t_}*, or *@code{_c_}* respectively.
-
-The argument to any of these functions is a pair
-@code{(@var{A},@var{b})}, where @var{A} represents the matrix
-mentioned above and @var{b} represents the column vector.
-
-The parameter @var{b} is required to be a list of numbers whose length
-matches the number of rows in the matrix. The numbers are either real
-numbers for the @code{di_}* functions (@ref{math}), or complex
-for the @code{zi_}* functions (@ref{complex}).
-
-There is a choice of representations for the parameter @var{A},
-depending on whether the function being called is one of the *@code{_trp}
-functions or one of the *@code{_col} functions.
-
-For the *@code{_trp} functions, @var{A} is represented as a non-empty
-list of triples @code{<((@var{i},@var{j}),@var{v})...>}, where each
-item of the list corresponds to a non-zero entry in the matrix.
-
-@itemize @bullet
-@item
-The parameters @var{i} and @var{j} are natural numbers as in
-@ref{Representation of Numeric and Textual Data}. 
-@item
-The value @var{v} is a real number for the @code{di_}*@code{_trp} functions or a
-complex number for the @code{zi_}*@code{_trp} functions.
-@item
-The presence of a triple ((@var{i},@var{j}),@var{v}) in the list
-signifies that the @var{i},@var{j}-th entry in the matrix @var{A}
-(numbered from zero) has a value of @var{v}.
-@end itemize
-
-For the *@code{_col} functions, the representation of @var{A} is more
-complicated but has a slight advantage in memory usage. It may also
-have an advantage in speed unless more time is wasted on the virtual
-side transforming a matrix to this representation than it saves.
-
-In this case, @var{A} is represented by a triple of the form
-@code{((@var{p},@var{i}),@var{v})}. The parameters @var{p} and @var{i}
-are lists of natural numbers. The parameter @var{v} is a list of real
-numbers for the @code{di_}*@code{_col} functions and complex numbers
-for the @code{zi_}*@code{_col} functions. They have the following
-interpretations.
-
-@itemize @bullet
-@item @var{v}
-is the list of non-zero entries in the matrix in
-@cindex column major order
-column major order.
-@item @var{i}
-has the same length as @var{v}, and each item of @var{i} is the row
-index of the corresponding item in @var{v}, numbered from zero.
-@item @var{p}
-has the length of the number of columns in the matrix, and each
-item identifies the starting position of a column in @var{v} and
-@var{i}, numbered from zero.
-@end itemize
-
-@noindent
-The first item of @var{p} is always zero. Further explanation of this
-format in terms of an array representation can be found in the file
-@file{UMFPACK_UserGuide.pdf}, available from the @code{umf} library
-home page at @url{http://www.cise.ufl.edu/research/sparse/SuiteSparse/current/SuiteSparse/}.
-
-
-@node umf output, umf exceptions, umf input parameters, umf
-@subsection @code{umf} output
-
-If no exception occurs, the solution @var{x} to the matrix equation
-@var{M} @var{x} = @var{b} noted previously will be returned if one
-exists. 
-
-The solution is represented as either a list of real numbers as in
-@ref{math}, or a list of complex numbers as in @ref{complex}. Real
-numbers are returned by the @code{di_}* functions, and complex numbers
-are returned by the @code{zi_}* functions.
-
-If no solution exists due to a singular matrix, an empty list is
-returned. The lack of a solution isn't treated as an exceptional
-condition.
-
-@node umf exceptions, Additional umf notes, umf output, umf
-@subsection @code{umf} exceptions
-
-If an exceptional condition arises from the use of this library, one
-of the following lists of character strings may be returned as the
-function result.
-
-@itemize @bullet
-@item
-@code{<'memory overflow'>} means the library function ran out of
-memory, most likely due to a matrix being too large.
-@item
-@code{<'bad umf specification'>} means an input parameter didn't
-@cindex bad umf specification
-conform to the appropriate format described above (@ref{umf input
-parameters})
-@item
-@code{<'umf error'>} covers any unexpected behavior or abnormal
-@cindex umf error
-status returned by any function from the C language API.
-@end itemize
-
-For the *@code{_trp} functions. A non-square matrix will cause the
-second exception above. For the *@code{_col} functions, a non-square
-matrix will cause the third exception or cause an empty result
-to be returned.
-
-The exceptions noted at the beginning of this section (@ref{External
-Libraries}) are also possible.
-
-@node Additional umf notes, , umf exceptions, umf
-@subsection Additional @code{umf} notes
-
-The C language API to @code{umf} provides very many less frequently
-used features that are not part of the virtual code interface, some of
-which could be added by minor modifications to the file @file{umf.c}
-in the @code{avram} source tree. 
-
-A set of @code{dl_}* and @code{zl_}* functions orthogonal to those
-presently accessible would enable matrices having billions of rows or
-columns by using long integers, but memory requirements on the virtual
-code side for problems of that scale are probably prohibitive for the
-foreseeable future.
-
-@node Copying, Function Index, External Libraries, Top
-@include gpl.texinfo
-
-@node Function Index, Concept Index, Copying, Top
-@unnumbered Function Index
-@printindex fn
-
-@node Concept Index,  , Function Index, Top
-@unnumbered Concept Index
-@printindex cp
-
-@bye
-
-
-pcx has been ditched, but this section is left here
-in case someone decides to put it back
-
-@node pcx, lpsolve, mpfr, External Libraries
-@section @code{pcx}
-
-This library interface exports a function that uses the algorithm
-documented at @url{http://www-fp.mcs.anl.gov/otc/Tools/PCx/} to solve
-linear programming problems by an interior point method. The library
-@cindex linear programming
-function is of the form
-
-@example
-library('pcx','solution')
-@end example
-
-@noindent
-This function has the same calling conventions as
-@code{library('glpk','simplex')} and @code{library('glpk','interior')}
-(@ref{glpk}).
-
-@cindex internal errors
-Error messages are also the same as @ref{glpk errors}, except that the
-a message text of @code{<'bad pcx specification'>} is used.  In
-addition, @code{pcx} can cause a virtual machine internal error (code
-70), which is raised when @code{avram} detects access anomalies by an
-external library, or in the worst case, a segmentation fault.
-@cindex segmentation fault
-
-A working configuration of this library interface requires a shared
-library @file{libPCx.so} to be installed on the host, which is not a
-feature of the standard installation distributed by the authors of
-@code{PCx}. However, the shared library can be built from the source
-package by any system administrator familiar with these
-procedures. Alternatively, an unofficial patched version of the Debian
-@cindex Debian
-package of @code{pcx} that includes the shared library is available on
-the @code{avram} home page. This patch has been submitted to the
-Debian maintainer of @code{pcx} and may be expected in a future
-release.
-
-If @code{avram} has been built already on a system that has the
-@code{pcx} header files but not the shared library, it should be
-possible to get the @code{pcx} library interface to work just by
-installing the shared library without recompiling @code{avram},
-because @code{pcx} is dynamically loaded due to licensing
-restrictions.

+ 0 - 396
doc/gpl.texinfo

@@ -1,396 +0,0 @@
-@setfilename gpl.info
-
-@unnumbered GNU GENERAL PUBLIC LICENSE
-@center Version 2, June 1991
-
-@display
-Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
-675 Mass Ave, Cambridge, MA 02139, USA
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-@end display
-
-@unnumberedsec Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software---to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  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
-this service 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 make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  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.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-@iftex
-@unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-@end iftex
-@ifinfo
-@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-@end ifinfo
-
-@enumerate
-@item
-This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The ``Program'', below,
-refers to any such program or work, and a ``work based on the Program''
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term ``modification''.)  Each licensee is addressed as ``you''.
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-@item
-You may copy and distribute 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 and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-@item
-You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-@enumerate a
-@item
-You must cause the modified files to carry prominent notices
-stating that you changed the files and the date of any change.
-
-@item
-You must cause any work that you distribute or publish, that in
-whole or in part contains or is derived from the Program or any
-part thereof, to be licensed as a whole at no charge to all third
-parties under the terms of this License.
-
-@item
-If the modified program normally reads commands interactively
-when run, you must cause it, when started running for such
-interactive use in the most ordinary way, to print or display an
-announcement including an appropriate copyright notice and a
-notice that there is no warranty (or else, saying that you provide
-a warranty) and that users may redistribute the program under
-these conditions, and telling the user how to view a copy of this
-License.  (Exception: if the Program itself is interactive but
-does not normally print such an announcement, your work based on
-the Program is not required to print an announcement.)
-@end enumerate
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-@item
-You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-@enumerate a
-@item
-Accompany it with the complete corresponding machine-readable
-source code, which must be distributed under the terms of Sections
-1 and 2 above on a medium customarily used for software interchange; or,
-
-@item
-Accompany it with a written offer, valid for at least three
-years, to give any third party, for a charge no more than your
-cost of physically performing source distribution, a complete
-machine-readable copy of the corresponding source code, to be
-distributed under the terms of Sections 1 and 2 above on a medium
-customarily used for software interchange; or,
-
-@item
-Accompany it with the information you received as to the offer
-to distribute corresponding source code.  (This alternative is
-allowed only for noncommercial distribution and only if you
-received the program in object code or executable form with such
-an offer, in accord with Subsection b above.)
-@end enumerate
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-@item
-You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-@item
-You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-@item
-Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-@item
-If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-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
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-@item
-If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-@item
-The Free Software Foundation may publish revised and/or new versions
-of the 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 a version number of this License which applies to it and ``any
-later version'', you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-@item
-If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-@iftex
-@heading NO WARRANTY
-@end iftex
-@ifinfo
-@center NO WARRANTY
-@end ifinfo
-
-@item
-BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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.
-
-@item
-IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE 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.
-@end enumerate
-
-@iftex
-@heading END OF TERMS AND CONDITIONS
-@end iftex
-@ifinfo
-@center END OF TERMS AND CONDITIONS
-@end ifinfo
-
-@page
-@unnumberedsec 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
-convey the exclusion of warranty; and each file should have at least
-the ``copyright'' line and a pointer to where the full notice is found.
-
-@smallexample
-@var{one line to give the program's name and an idea of what it does.}
-Copyright (C) 19@var{yy}  @var{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 2
-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, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-@end smallexample
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-@smallexample
-Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
-Gnomovision 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.
-@end smallexample
-
-The hypothetical commands @samp{show w} and @samp{show c} should show
-the appropriate parts of the General Public License.  Of course, the
-commands you use may be called something other than @samp{show w} and
-@samp{show c}; they could even be mouse-clicks or menu items---whatever
-suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a ``copyright disclaimer'' for the program, if
-necessary.  Here is a sample; alter the names:
-
-@smallexample
-@group
-Yoyodyne, Inc., hereby disclaims all copyright
-interest in the program `Gnomovision'
-(which makes passes at compilers) written 
-by James Hacker.
-
-@var{signature of Ty Coon}, 1 April 1989
-Ty Coon, President of Vice
-@end group
-@end smallexample
-
-This 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 Library General
-Public License instead of this License.

+ 0 - 5484
doc/texinfo.tex

@@ -1,5484 +0,0 @@
-% texinfo.tex -- TeX macros to handle Texinfo files.
-%
-% Load plain if necessary, i.e., if running under initex.
-\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
-%
-\def\texinfoversion{1999-01-05}%
-%
-% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98
-% Free Software Foundation, Inc.
-%
-% This texinfo.tex file 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 2, or (at
-% your option) any later version.
-%
-% This texinfo.tex file 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 texinfo.tex file; see the file COPYING.  If not, write
-% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-% Boston, MA 02111-1307, USA.
-%
-% In other words, you are welcome to use, share and improve this program.
-% You are forbidden to forbid anyone else to use, share and improve
-% what you give them.   Help stamp out software-hoarding!
-%
-% Please try the latest version of texinfo.tex before submitting bug
-% reports; you can get the latest version from:
-%   ftp://ftp.gnu.org/pub/gnu/texinfo.tex
-%   /home/gd/gnu/doc/texinfo.tex on the GNU machines.
-%   (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
-%   ftp://tug.org/tex/texinfo.tex
-%   ftp://ctan.org/macros/texinfo/texinfo.tex
-%   (and all CTAN mirrors, finger [email protected] for a list).
-% The texinfo.tex in the texinfo distribution itself could well be out
-% of date, so if that's what you're using, please check.
-% 
-% Send bug reports to [email protected].
-% Please include a precise test case in each bug report,
-% including a complete document with which we can reproduce the problem.
-% 
-% To process a Texinfo manual with TeX, it's most reliable to use the
-% texi2dvi shell script that comes with the distribution.  For simple
-% manuals, however, you can get away with:
-%   tex foo.texi
-%   texindex foo.??
-%   tex foo.texi
-%   tex foo.texi
-%   dvips foo.dvi -o # or whatever, to process the dvi file.
-% The extra runs of TeX get the cross-reference information correct.
-% Sometimes one run after texindex suffices, and sometimes you need more
-% than two; texi2dvi does it as many times as necessary.
-
-\message{Loading texinfo [version \texinfoversion]:}
-
-% If in a .fmt file, print the version number
-% and turn on active characters that we couldn't do earlier because
-% they might have appeared in the input file name.
-\everyjob{\message{[Texinfo version \texinfoversion]}%
-  \catcode`+=\active \catcode`\_=\active}
-
-% Save some parts of plain tex whose names we will redefine.
-
-\let\ptexb=\b
-\let\ptexbullet=\bullet
-\let\ptexc=\c
-\let\ptexcomma=\,
-\let\ptexdot=\.
-\let\ptexdots=\dots
-\let\ptexend=\end
-\let\ptexequiv=\equiv
-\let\ptexexclam=\!
-\let\ptexi=\i
-\let\ptexlbrace=\{
-\let\ptexrbrace=\}
-\let\ptexstar=\*
-\let\ptext=\t
-
-% We never want plain's outer \+ definition in Texinfo.
-% For @tex, we can use \tabalign.
-\let\+ = \relax
-
-
-\message{Basics,}
-\chardef\other=12
-
-% If this character appears in an error message or help string, it
-% starts a new line in the output.
-\newlinechar = `^^J
-
-% Set up fixed words for English if not already set.
-\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
-\ifx\putwordChapter\undefined  \gdef\putwordChapter{Chapter}\fi
-\ifx\putwordfile\undefined     \gdef\putwordfile{file}\fi
-\ifx\putwordInfo\undefined     \gdef\putwordInfo{Info}\fi
-\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
-\ifx\putwordon\undefined       \gdef\putwordon{on}\fi
-\ifx\putwordpage\undefined     \gdef\putwordpage{page}\fi
-\ifx\putwordsection\undefined  \gdef\putwordsection{section}\fi
-\ifx\putwordSection\undefined  \gdef\putwordSection{Section}\fi
-\ifx\putwordsee\undefined      \gdef\putwordsee{see}\fi
-\ifx\putwordSee\undefined      \gdef\putwordSee{See}\fi
-\ifx\putwordShortContents\undefined  \gdef\putwordShortContents{Short Contents}\fi
-\ifx\putwordTableofContents\undefined\gdef\putwordTableofContents{Table of Contents}\fi
-
-% Ignore a token.
-%
-\def\gobble#1{}
-
-\hyphenation{ap-pen-dix}
-\hyphenation{mini-buf-fer mini-buf-fers}
-\hyphenation{eshell}
-\hyphenation{white-space}
-
-% Margin to add to right of even pages, to left of odd pages.
-\newdimen \bindingoffset
-\newdimen \normaloffset
-\newdimen\pagewidth \newdimen\pageheight
-
-% Sometimes it is convenient to have everything in the transcript file
-% and nothing on the terminal.  We don't just call \tracingall here,
-% since that produces some useless output on the terminal.
-%
-\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
-\ifx\eTeXversion\undefined
-\def\loggingall{\tracingcommands2 \tracingstats2
-   \tracingpages1 \tracingoutput1 \tracinglostchars1
-   \tracingmacros2 \tracingparagraphs1 \tracingrestores1
-   \showboxbreadth\maxdimen\showboxdepth\maxdimen
-}%
-\else
-\def\loggingall{\tracingcommands3 \tracingstats2
-   \tracingpages1 \tracingoutput1 \tracinglostchars1
-   \tracingmacros2 \tracingparagraphs1 \tracingrestores1
-   \tracingscantokens1 \tracingassigns1 \tracingifs1
-   \tracinggroups1 \tracingnesting2
-   \showboxbreadth\maxdimen\showboxdepth\maxdimen
-}%
-\fi
-
-% For @cropmarks command.
-% Do @cropmarks to get crop marks.
-% 
-\newif\ifcropmarks
-\let\cropmarks = \cropmarkstrue
-%
-% Dimensions to add cropmarks at corners.
-% Added by P. A. MacKay, 12 Nov. 1986
-%
-\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
-\newdimen\cornerlong  \cornerlong=1pc
-\newdimen\cornerthick \cornerthick=.3pt
-\newdimen\topandbottommargin \topandbottommargin=.75in
-
-% Main output routine.
-\chardef\PAGE = 255
-\output = {\onepageout{\pagecontents\PAGE}}
-
-\newbox\headlinebox
-\newbox\footlinebox
-
-% \onepageout takes a vbox as an argument.  Note that \pagecontents
-% does insertions, but you have to call it yourself.
-\def\onepageout#1{%
-  \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
-  %
-  \ifodd\pageno  \advance\hoffset by \bindingoffset
-  \else \advance\hoffset by -\bindingoffset\fi
-  %
-  % Do this outside of the \shipout so @code etc. will be expanded in
-  % the headline as they should be, not taken literally (outputting ''code).
-  \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
-  \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
-  %
-  {%
-    % Have to do this stuff outside the \shipout because we want it to
-    % take effect in \write's, yet the group defined by the \vbox ends
-    % before the \shipout runs.
-    %
-    \escapechar = `\\     % use backslash in output files.
-    \indexdummies         % don't expand commands in the output.
-    \normalturnoffactive  % \ in index entries must not stay \, e.g., if
-                   % the page break happens to be in the middle of an example.
-    \shipout\vbox{%
-      \ifcropmarks \vbox to \outervsize\bgroup
-        \hsize = \outerhsize
-        \vskip-\topandbottommargin
-        \vtop to0pt{%
-          \line{\ewtop\hfil\ewtop}%
-          \nointerlineskip
-          \line{%
-            \vbox{\moveleft\cornerthick\nstop}%
-            \hfill
-            \vbox{\moveright\cornerthick\nstop}%
-          }%
-          \vss}%
-        \vskip\topandbottommargin
-        \line\bgroup
-          \hfil % center the page within the outer (page) hsize.
-          \ifodd\pageno\hskip\bindingoffset\fi
-          \vbox\bgroup
-      \fi
-      %
-      \unvbox\headlinebox
-      \pagebody{#1}%
-      \ifdim\ht\footlinebox > 0pt
-        % Only leave this space if the footline is nonempty.
-        % (We lessened \vsize for it in \oddfootingxxx.)
-        % The \baselineskip=24pt in plain's \makefootline has no effect.
-        \vskip 2\baselineskip
-        \unvbox\footlinebox
-      \fi
-      %
-      \ifcropmarks
-          \egroup % end of \vbox\bgroup
-        \hfil\egroup % end of (centering) \line\bgroup
-        \vskip\topandbottommargin plus1fill minus1fill
-        \boxmaxdepth = \cornerthick
-        \vbox to0pt{\vss
-          \line{%
-            \vbox{\moveleft\cornerthick\nsbot}%
-            \hfill
-            \vbox{\moveright\cornerthick\nsbot}%
-          }%
-          \nointerlineskip
-          \line{\ewbot\hfil\ewbot}%
-        }%
-      \egroup % \vbox from first cropmarks clause
-      \fi
-    }% end of \shipout\vbox
-  }% end of group with \turnoffactive
-  \advancepageno
-  \ifnum\outputpenalty>-20000 \else\dosupereject\fi
-}
-
-\newinsert\margin \dimen\margin=\maxdimen
-
-\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
-{\catcode`\@ =11
-\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
-% marginal hacks, [email protected] (Juha Takala)
-\ifvoid\margin\else % marginal info is present
-  \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
-\dimen@=\dp#1 \unvbox#1
-\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
-\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
-}
-
-% Here are the rules for the cropmarks.  Note that they are
-% offset so that the space between them is truly \outerhsize or \outervsize
-% (P. A. MacKay, 12 November, 1986)
-%
-\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
-\def\nstop{\vbox
-  {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
-\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
-\def\nsbot{\vbox
-  {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
-
-% Parse an argument, then pass it to #1.  The argument is the rest of
-% the input line (except we remove a trailing comment).  #1 should be a
-% macro which expects an ordinary undelimited TeX argument.
-%
-\def\parsearg#1{%
-  \let\next = #1%
-  \begingroup
-    \obeylines
-    \futurelet\temp\parseargx
-}
-
-% If the next token is an obeyed space (from an @example environment or
-% the like), remove it and recurse.  Otherwise, we're done.
-\def\parseargx{%
-  % \obeyedspace is defined far below, after the definition of \sepspaces.
-  \ifx\obeyedspace\temp
-    \expandafter\parseargdiscardspace
-  \else
-    \expandafter\parseargline
-  \fi
-}
-
-% Remove a single space (as the delimiter token to the macro call).
-{\obeyspaces %
- \gdef\parseargdiscardspace {\futurelet\temp\parseargx}}
-
-{\obeylines %
-  \gdef\parseargline#1^^M{%
-    \endgroup % End of the group started in \parsearg.
-    %
-    % First remove any @c comment, then any @comment.
-    % Result of each macro is put in \toks0.
-    \argremovec #1\c\relax %
-    \expandafter\argremovecomment \the\toks0 \comment\relax %
-    %
-    % Call the caller's macro, saved as \next in \parsearg.
-    \expandafter\next\expandafter{\the\toks0}%
-  }%
-}
-
-% Since all \c{,omment} does is throw away the argument, we can let TeX
-% do that for us.  The \relax here is matched by the \relax in the call
-% in \parseargline; it could be more or less anything, its purpose is
-% just to delimit the argument to the \c.
-\def\argremovec#1\c#2\relax{\toks0 = {#1}}
-\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}}
-
-% \argremovec{,omment} might leave us with trailing spaces, though; e.g.,
-%    @end itemize  @c foo
-% will have two active spaces as part of the argument with the
-% `itemize'.  Here we remove all active spaces from #1, and assign the
-% result to \toks0.
-%
-% This loses if there are any *other* active characters besides spaces
-% in the argument -- _ ^ +, for example -- since they get expanded.
-% Fortunately, Texinfo does not define any such commands.  (If it ever
-% does, the catcode of the characters in questionwill have to be changed
-% here.)  But this means we cannot call \removeactivespaces as part of
-% \argremovec{,omment}, since @c uses \parsearg, and thus the argument
-% that \parsearg gets might well have any character at all in it.
-%
-\def\removeactivespaces#1{%
-  \begingroup
-    \ignoreactivespaces
-    \edef\temp{#1}%
-    \global\toks0 = \expandafter{\temp}%
-  \endgroup
-}
-
-% Change the active space to expand to nothing.
-%
-\begingroup
-  \obeyspaces
-  \gdef\ignoreactivespaces{\obeyspaces\let =\empty}
-\endgroup
-
-
-\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
-
-%% These are used to keep @begin/@end levels from running away
-%% Call \inENV within environments (after a \begingroup)
-\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
-\def\ENVcheck{%
-\ifENV\errmessage{Still within an environment; press RETURN to continue}
-\endgroup\fi} % This is not perfect, but it should reduce lossage
-
-% @begin foo  is the same as @foo, for now.
-\newhelp\EMsimple{Press RETURN to continue.}
-
-\outer\def\begin{\parsearg\beginxxx}
-
-\def\beginxxx #1{%
-\expandafter\ifx\csname #1\endcsname\relax
-{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
-\csname #1\endcsname\fi}
-
-% @end foo executes the definition of \Efoo.
-%
-\def\end{\parsearg\endxxx}
-\def\endxxx #1{%
-  \removeactivespaces{#1}%
-  \edef\endthing{\the\toks0}%
-  %
-  \expandafter\ifx\csname E\endthing\endcsname\relax
-    \expandafter\ifx\csname \endthing\endcsname\relax
-      % There's no \foo, i.e., no ``environment'' foo.
-      \errhelp = \EMsimple
-      \errmessage{Undefined command `@end \endthing'}%
-    \else
-      \unmatchedenderror\endthing
-    \fi
-  \else
-    % Everything's ok; the right environment has been started.
-    \csname E\endthing\endcsname
-  \fi
-}
-
-% There is an environment #1, but it hasn't been started.  Give an error.
-%
-\def\unmatchedenderror#1{%
-  \errhelp = \EMsimple
-  \errmessage{This `@end #1' doesn't have a matching `@#1'}%
-}
-
-% Define the control sequence \E#1 to give an unmatched @end error.
-%
-\def\defineunmatchedend#1{%
-  \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}%
-}
-
-
-% Single-spacing is done by various environments (specifically, in
-% \nonfillstart and \quotations).
-\newskip\singlespaceskip \singlespaceskip = 12.5pt
-\def\singlespace{%
-  % Why was this kern here?  It messes up equalizing space above and below
-  % environments.  --karl, 6may93
-  %{\advance \baselineskip by -\singlespaceskip
-  %\kern \baselineskip}%
-  \setleading \singlespaceskip
-}
-
-%% Simple single-character @ commands
-
-% @@ prints an @
-% Kludge this until the fonts are right (grr).
-\def\@{{\tt\char64}}
-
-% This is turned off because it was never documented
-% and you can use @w{...} around a quote to suppress ligatures.
-%% Define @` and @' to be the same as ` and '
-%% but suppressing ligatures.
-%\def\`{{`}}
-%\def\'{{'}}
-
-% Used to generate quoted braces.
-\def\mylbrace {{\tt\char123}}
-\def\myrbrace {{\tt\char125}}
-\let\{=\mylbrace
-\let\}=\myrbrace
-\begingroup
-  % Definitions to produce actual \{ & \} command in an index.
-  \catcode`\{ = 12 \catcode`\} = 12
-  \catcode`\[ = 1 \catcode`\] = 2
-  \catcode`\@ = 0 \catcode`\\ = 12
-  @gdef@lbracecmd[\{]%
-  @gdef@rbracecmd[\}]%
-@endgroup
-
-% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
-% Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H.
-\let\, = \c
-\let\dotaccent = \.
-\def\ringaccent#1{{\accent23 #1}}
-\let\tieaccent = \t
-\let\ubaraccent = \b
-\let\udotaccent = \d
-
-% Other special characters: @questiondown @exclamdown
-% Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss.
-\def\questiondown{?`}
-\def\exclamdown{!`}
-
-% Dotless i and dotless j, used for accents.
-\def\imacro{i}
-\def\jmacro{j}
-\def\dotless#1{%
-  \def\temp{#1}%
-  \ifx\temp\imacro \ptexi
-  \else\ifx\temp\jmacro \j
-  \else \errmessage{@dotless can be used only with i or j}%
-  \fi\fi
-}
-
-% Be sure we're in horizontal mode when doing a tie, since we make space
-% equivalent to this in @example-like environments. Otherwise, a space
-% at the beginning of a line will start with \penalty -- and
-% since \penalty is valid in vertical mode, we'd end up putting the
-% penalty on the vertical list instead of in the new paragraph.
-{\catcode`@ = 11
- % Avoid using \@M directly, because that causes trouble
- % if the definition is written into an index file.
- \global\let\tiepenalty = \@M
- \gdef\tie{\leavevmode\penalty\tiepenalty\ }
-}
-
-% @: forces normal size whitespace following.
-\def\:{\spacefactor=1000 }
-
-% @* forces a line break.
-\def\*{\hfil\break\hbox{}\ignorespaces}
-
-% @. is an end-of-sentence period.
-\def\.{.\spacefactor=3000 }
-
-% @! is an end-of-sentence bang.
-\def\!{!\spacefactor=3000 }
-
-% @? is an end-of-sentence query.
-\def\?{?\spacefactor=3000 }
-
-% @w prevents a word break.  Without the \leavevmode, @w at the
-% beginning of a paragraph, when TeX is still in vertical mode, would
-% produce a whole line of output instead of starting the paragraph.
-\def\w#1{\leavevmode\hbox{#1}}
-
-% @group ... @end group forces ... to be all on one page, by enclosing
-% it in a TeX vbox.  We use \vtop instead of \vbox to construct the box
-% to keep its height that of a normal line.  According to the rules for
-% \topskip (p.114 of the TeXbook), the glue inserted is
-% max (\topskip - \ht (first item), 0).  If that height is large,
-% therefore, no glue is inserted, and the space between the headline and
-% the text is small, which looks bad.
-%
-\def\group{\begingroup
-  \ifnum\catcode13=\active \else
-    \errhelp = \groupinvalidhelp
-    \errmessage{@group invalid in context where filling is enabled}%
-  \fi
-  %
-  % The \vtop we start below produces a box with normal height and large
-  % depth; thus, TeX puts \baselineskip glue before it, and (when the
-  % next line of text is done) \lineskip glue after it.  (See p.82 of
-  % the TeXbook.)  Thus, space below is not quite equal to space
-  % above.  But it's pretty close.
-  \def\Egroup{%
-    \egroup           % End the \vtop.
-    \endgroup         % End the \group.
-  }%
-  %
-  \vtop\bgroup
-    % We have to put a strut on the last line in case the @group is in
-    % the midst of an example, rather than completely enclosing it.
-    % Otherwise, the interline space between the last line of the group
-    % and the first line afterwards is too small.  But we can't put the
-    % strut in \Egroup, since there it would be on a line by itself.
-    % Hence this just inserts a strut at the beginning of each line.
-    \everypar = {\strut}%
-    %
-    % Since we have a strut on every line, we don't need any of TeX's
-    % normal interline spacing.
-    \offinterlineskip
-    %
-    % OK, but now we have to do something about blank
-    % lines in the input in @example-like environments, which normally
-    % just turn into \lisppar, which will insert no space now that we've
-    % turned off the interline space.  Simplest is to make them be an
-    % empty paragraph.
-    \ifx\par\lisppar
-      \edef\par{\leavevmode \par}%
-      %
-      % Reset ^^M's definition to new definition of \par.
-      \obeylines
-    \fi
-    %
-    % Do @comment since we are called inside an environment such as
-    % @example, where each end-of-line in the input causes an
-    % end-of-line in the output.  We don't want the end-of-line after
-    % the `@group' to put extra space in the output.  Since @group
-    % should appear on a line by itself (according to the Texinfo
-    % manual), we don't worry about eating any user text.
-    \comment
-}
-%
-% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
-% message, so this ends up printing `@group can only ...'.
-%
-\newhelp\groupinvalidhelp{%
-group can only be used in environments such as @example,^^J%
-where each line of input produces a line of output.}
-
-% @need space-in-mils
-% forces a page break if there is not space-in-mils remaining.
-
-\newdimen\mil  \mil=0.001in
-
-\def\need{\parsearg\needx}
-
-% Old definition--didn't work.
-%\def\needx #1{\par %
-%% This method tries to make TeX break the page naturally
-%% if the depth of the box does not fit.
-%{\baselineskip=0pt%
-%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
-%\prevdepth=-1000pt
-%}}
-
-\def\needx#1{%
-  % Go into vertical mode, so we don't make a big box in the middle of a
-  % paragraph.
-  \par
-  %
-  % Don't add any leading before our big empty box, but allow a page
-  % break, since the best break might be right here.
-  \allowbreak
-  \nointerlineskip
-  \vtop to #1\mil{\vfil}%
-  %
-  % TeX does not even consider page breaks if a penalty added to the
-  % main vertical list is 10000 or more.  But in order to see if the
-  % empty box we just added fits on the page, we must make it consider
-  % page breaks.  On the other hand, we don't want to actually break the
-  % page after the empty box.  So we use a penalty of 9999.
-  %
-  % There is an extremely small chance that TeX will actually break the
-  % page at this \penalty, if there are no other feasible breakpoints in
-  % sight.  (If the user is using lots of big @group commands, which
-  % almost-but-not-quite fill up a page, TeX will have a hard time doing
-  % good page breaking, for example.)  However, I could not construct an
-  % example where a page broke at this \penalty; if it happens in a real
-  % document, then we can reconsider our strategy.
-  \penalty9999
-  %
-  % Back up by the size of the box, whether we did a page break or not.
-  \kern -#1\mil
-  %
-  % Do not allow a page break right after this kern.
-  \nobreak
-}
-
-% @br   forces paragraph break
-
-\let\br = \par
-
-% @dots{} output an ellipsis using the current font.
-% We do .5em per period so that it has the same spacing in a typewriter
-% font as three actual period characters.
-%
-\def\dots{%
-  \leavevmode
-  \hbox to 1.5em{%
-    \hskip 0pt plus 0.25fil minus 0.25fil
-    .\hss.\hss.%
-    \hskip 0pt plus 0.5fil minus 0.5fil
-  }%
-}
-
-% @enddots{} is an end-of-sentence ellipsis.
-% 
-\def\enddots{%
-  \leavevmode
-  \hbox to 2em{%
-    \hskip 0pt plus 0.25fil minus 0.25fil
-    .\hss.\hss.\hss.%
-    \hskip 0pt plus 0.5fil minus 0.5fil
-  }%
-  \spacefactor=3000
-}
-
-
-% @page    forces the start of a new page
-%
-\def\page{\par\vfill\supereject}
-
-% @exdent text....
-% outputs text on separate line in roman font, starting at standard page margin
-
-% This records the amount of indent in the innermost environment.
-% That's how much \exdent should take out.
-\newskip\exdentamount
-
-% This defn is used inside fill environments such as @defun.
-\def\exdent{\parsearg\exdentyyy}
-\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}}
-
-% This defn is used inside nofill environments such as @example.
-\def\nofillexdent{\parsearg\nofillexdentyyy}
-\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
-\leftline{\hskip\leftskip{\rm#1}}}}
-
-% @inmargin{TEXT} puts TEXT in the margin next to the current paragraph.
-
-\def\inmargin#1{%
-\strut\vadjust{\nobreak\kern-\strutdepth
-  \vtop to \strutdepth{\baselineskip\strutdepth\vss
-  \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}}
-\newskip\inmarginspacing \inmarginspacing=1cm
-\def\strutdepth{\dp\strutbox}
-
-%\hbox{{\rm#1}}\hfil\break}}
-
-% @include file    insert text of that file as input.
-% Allow normal characters that  we make active in the argument (a file name).
-\def\include{\begingroup
-  \catcode`\\=12
-  \catcode`~=12
-  \catcode`^=12
-  \catcode`_=12
-  \catcode`|=12
-  \catcode`<=12
-  \catcode`>=12
-  \catcode`+=12
-  \parsearg\includezzz}
-% Restore active chars for included file.
-\def\includezzz#1{\endgroup\begingroup
-  % Read the included file in a group so nested @include's work.
-  \def\thisfile{#1}%
-  \input\thisfile
-\endgroup}
-
-\def\thisfile{}
-
-% @center line   outputs that line, centered
-
-\def\center{\parsearg\centerzzz}
-\def\centerzzz #1{{\advance\hsize by -\leftskip
-\advance\hsize by -\rightskip
-\centerline{#1}}}
-
-% @sp n   outputs n lines of vertical space
-
-\def\sp{\parsearg\spxxx}
-\def\spxxx #1{\vskip #1\baselineskip}
-
-% @comment ...line which is ignored...
-% @c is the same as @comment
-% @ignore ... @end ignore  is another way to write a comment
-
-\def\comment{\begingroup \catcode`\^^M=\other%
-\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
-\commentxxx}
-{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
-
-\let\c=\comment
-
-% @paragraphindent  is defined for the Info formatting commands only.
-\let\paragraphindent=\comment
-
-% Prevent errors for section commands.
-% Used in @ignore and in failing conditionals.
-\def\ignoresections{%
-\let\chapter=\relax
-\let\unnumbered=\relax
-\let\top=\relax
-\let\unnumberedsec=\relax
-\let\unnumberedsection=\relax
-\let\unnumberedsubsec=\relax
-\let\unnumberedsubsection=\relax
-\let\unnumberedsubsubsec=\relax
-\let\unnumberedsubsubsection=\relax
-\let\section=\relax
-\let\subsec=\relax
-\let\subsubsec=\relax
-\let\subsection=\relax
-\let\subsubsection=\relax
-\let\appendix=\relax
-\let\appendixsec=\relax
-\let\appendixsection=\relax
-\let\appendixsubsec=\relax
-\let\appendixsubsection=\relax
-\let\appendixsubsubsec=\relax
-\let\appendixsubsubsection=\relax
-\let\contents=\relax
-\let\smallbook=\relax
-\let\titlepage=\relax
-}
-
-% Used in nested conditionals, where we have to parse the Texinfo source
-% and so want to turn off most commands, in case they are used
-% incorrectly.
-%
-\def\ignoremorecommands{%
-  \let\defcodeindex = \relax
-  \let\defcv = \relax
-  \let\deffn = \relax
-  \let\deffnx = \relax
-  \let\defindex = \relax
-  \let\defivar = \relax
-  \let\defmac = \relax
-  \let\defmethod = \relax
-  \let\defop = \relax
-  \let\defopt = \relax
-  \let\defspec = \relax
-  \let\deftp = \relax
-  \let\deftypefn = \relax
-  \let\deftypefun = \relax
-  \let\deftypevar = \relax
-  \let\deftypevr = \relax
-  \let\defun = \relax
-  \let\defvar = \relax
-  \let\defvr = \relax
-  \let\ref = \relax
-  \let\xref = \relax
-  \let\printindex = \relax
-  \let\pxref = \relax
-  \let\settitle = \relax
-  \let\setchapternewpage = \relax
-  \let\setchapterstyle = \relax
-  \let\everyheading = \relax
-  \let\evenheading = \relax
-  \let\oddheading = \relax
-  \let\everyfooting = \relax
-  \let\evenfooting = \relax
-  \let\oddfooting = \relax
-  \let\headings = \relax
-  \let\include = \relax
-  \let\lowersections = \relax
-  \let\down = \relax
-  \let\raisesections = \relax
-  \let\up = \relax
-  \let\set = \relax
-  \let\clear = \relax
-  \let\item = \relax
-}
-
-% Ignore @ignore ... @end ignore.
-%
-\def\ignore{\doignore{ignore}}
-
-% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.
-%
-\def\ifinfo{\doignore{ifinfo}}
-\def\ifhtml{\doignore{ifhtml}}
-\def\ifnottex{\doignore{ifnottex}}
-\def\html{\doignore{html}}
-\def\menu{\doignore{menu}}
-\def\direntry{\doignore{direntry}}
-
-% @dircategory CATEGORY  -- specify a category of the dir file
-% which this file should belong to.  Ignore this in TeX.
-\let\dircategory = \comment
-
-% Ignore text until a line `@end #1'.
-%
-\def\doignore#1{\begingroup
-  % Don't complain about control sequences we have declared \outer.
-  \ignoresections
-  %
-  % Define a command to swallow text until we reach `@end #1'.
-  % This @ is a catcode 12 token (that is the normal catcode of @ in
-  % this texinfo.tex file).  We change the catcode of @ below to match.
-  \long\def\doignoretext##1@end #1{\enddoignore}%
-  %
-  % Make sure that spaces turn into tokens that match what \doignoretext wants.
-  \catcode32 = 10
-  %
-  % Ignore braces, too, so mismatched braces don't cause trouble.
-  \catcode`\{ = 9
-  \catcode`\} = 9
-  %
-  % We must not have @c interpreted as a control sequence.
-  \catcode`\@ = 12
-  %
-  % Make the letter c a comment character so that the rest of the line
-  % will be ignored. This way, the document can have (for example)
-  %   @c @end ifinfo
-  % and the @end ifinfo will be properly ignored.
-  % (We've just changed @ to catcode 12.)
-  \catcode`\c = 14
-  %
-  % And now expand that command.
-  \doignoretext
-}
-
-% What we do to finish off ignored text.
-%
-\def\enddoignore{\endgroup\ignorespaces}%
-
-\newif\ifwarnedobs\warnedobsfalse
-\def\obstexwarn{%
-  \ifwarnedobs\relax\else
-  % We need to warn folks that they may have trouble with TeX 3.0.
-  % This uses \immediate\write16 rather than \message to get newlines.
-    \immediate\write16{}
-    \immediate\write16{***WARNING*** for users of Unix TeX 3.0!}
-    \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
-    \immediate\write16{If you are running another version of TeX, relax.}
-    \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
-    \immediate\write16{  Then upgrade your TeX installation if you can.}
-    \immediate\write16{  (See ftp://ftp.gnu.org/pub/gnu/TeX.README.)}
-    \immediate\write16{If you are stuck with version 3.0, run the}
-    \immediate\write16{  script ``tex3patch'' from the Texinfo distribution}
-    \immediate\write16{  to use a workaround.}
-    \immediate\write16{}
-    \global\warnedobstrue
-    \fi
-}
-
-% **In TeX 3.0, setting text in \nullfont hangs tex.  For a
-% workaround (which requires the file ``dummy.tfm'' to be installed),
-% uncomment the following line:
-%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
-
-% Ignore text, except that we keep track of conditional commands for
-% purposes of nesting, up to an `@end #1' command.
-%
-\def\nestedignore#1{%
-  \obstexwarn
-  % We must actually expand the ignored text to look for the @end
-  % command, so that nested ignore constructs work.  Thus, we put the
-  % text into a \vbox and then do nothing with the result.  To minimize
-  % the change of memory overflow, we follow the approach outlined on
-  % page 401 of the TeXbook: make the current font be a dummy font.
-  %
-  \setbox0 = \vbox\bgroup
-    % Don't complain about control sequences we have declared \outer.
-    \ignoresections
-    %
-    % Define `@end #1' to end the box, which will in turn undefine the
-    % @end command again.
-    \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
-    %
-    % We are going to be parsing Texinfo commands.  Most cause no
-    % trouble when they are used incorrectly, but some commands do
-    % complicated argument parsing or otherwise get confused, so we
-    % undefine them.
-    %
-    % We can't do anything about stray @-signs, unfortunately;
-    % they'll produce `undefined control sequence' errors.
-    \ignoremorecommands
-    %
-    % Set the current font to be \nullfont, a TeX primitive, and define
-    % all the font commands to also use \nullfont.  We don't use
-    % dummy.tfm, as suggested in the TeXbook, because not all sites
-    % might have that installed.  Therefore, math mode will still
-    % produce output, but that should be an extremely small amount of
-    % stuff compared to the main input.
-    %
-    \nullfont
-    \let\tenrm = \nullfont  \let\tenit = \nullfont  \let\tensl = \nullfont
-    \let\tenbf = \nullfont  \let\tentt = \nullfont  \let\smallcaps = \nullfont
-    \let\tensf = \nullfont
-    % Similarly for index fonts (mostly for their use in
-    % smallexample)
-    \let\indrm = \nullfont  \let\indit = \nullfont  \let\indsl = \nullfont
-    \let\indbf = \nullfont  \let\indtt = \nullfont  \let\indsc = \nullfont
-    \let\indsf = \nullfont
-    %
-    % Don't complain when characters are missing from the fonts.
-    \tracinglostchars = 0
-    %
-    % Don't bother to do space factor calculations.
-    \frenchspacing
-    %
-    % Don't report underfull hboxes.
-    \hbadness = 10000
-    %
-    % Do minimal line-breaking.
-    \pretolerance = 10000
-    %
-    % Do not execute instructions in @tex
-    \def\tex{\doignore{tex}}%
-    % Do not execute macro definitions.
-    % `c' is a comment character, so the word `macro' will get cut off.
-    \def\macro{\doignore{ma}}%
-}
-
-% @set VAR sets the variable VAR to an empty value.
-% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
-%
-% Since we want to separate VAR from REST-OF-LINE (which might be
-% empty), we can't just use \parsearg; we have to insert a space of our
-% own to delimit the rest of the line, and then take it out again if we
-% didn't need it.  Make sure the catcode of space is correct to avoid
-% losing inside @example, for instance.
-%
-\def\set{\begingroup\catcode` =10
-  \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
-  \parsearg\setxxx}
-\def\setxxx#1{\setyyy#1 \endsetyyy}
-\def\setyyy#1 #2\endsetyyy{%
-  \def\temp{#2}%
-  \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
-  \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
-  \fi
-  \endgroup
-}
-% Can't use \xdef to pre-expand #2 and save some time, since \temp or
-% \next or other control sequences that we've defined might get us into
-% an infinite loop. Consider `@set foo @cite{bar}'.
-\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
-
-% @clear VAR clears (i.e., unsets) the variable VAR.
-%
-\def\clear{\parsearg\clearxxx}
-\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
-
-% @value{foo} gets the text saved in variable foo.
-%
-{
-  \catcode`\_ = \active
-  %
-  % We might end up with active _ or - characters in the argument if
-  % we're called from @code, as @code{@value{foo-bar_}}.  So \let any
-  % such active characters to their normal equivalents.
-  \gdef\value{\begingroup
-    \catcode`\-=12 \catcode`\_=12
-    \indexbreaks \let_\normalunderscore
-    \valuexxx}
-}
-\def\valuexxx#1{\expandablevalue{#1}\endgroup}
-
-% We have this subroutine so that we can handle at least some @value's
-% properly in indexes (we \let\value to this in \indexdummies).  Ones
-% whose names contain - or _ still won't work, but we can't do anything
-% about that.  The command has to be fully expandable, since the result
-% winds up in the index file.  This means that if the variable's value
-% contains other Texinfo commands, it's almost certain it will fail
-% (although perhaps we could fix that with sufficient work to do a
-% one-level expansion on the result, instead of complete).
-% 
-\def\expandablevalue#1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    {[No value for ``#1'']}%
-  \else
-    \csname SET#1\endcsname
-  \fi
-}
-
-% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
-% with @set.
-%
-\def\ifset{\parsearg\ifsetxxx}
-\def\ifsetxxx #1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    \expandafter\ifsetfail
-  \else
-    \expandafter\ifsetsucceed
-  \fi
-}
-\def\ifsetsucceed{\conditionalsucceed{ifset}}
-\def\ifsetfail{\nestedignore{ifset}}
-\defineunmatchedend{ifset}
-
-% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
-% defined with @set, or has been undefined with @clear.
-%
-\def\ifclear{\parsearg\ifclearxxx}
-\def\ifclearxxx #1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    \expandafter\ifclearsucceed
-  \else
-    \expandafter\ifclearfail
-  \fi
-}
-\def\ifclearsucceed{\conditionalsucceed{ifclear}}
-\def\ifclearfail{\nestedignore{ifclear}}
-\defineunmatchedend{ifclear}
-
-% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text
-% following, through the first @end iftex (etc.).  Make `@end iftex'
-% (etc.) valid only after an @iftex.
-%
-\def\iftex{\conditionalsucceed{iftex}}
-\def\ifnothtml{\conditionalsucceed{ifnothtml}}
-\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
-\defineunmatchedend{iftex}
-\defineunmatchedend{ifnothtml}
-\defineunmatchedend{ifnotinfo}
-
-% We can't just want to start a group at @iftex (for example) and end it
-% at @end iftex, since then @set commands inside the conditional have no
-% effect (they'd get reverted at the end of the group).  So we must
-% define \Eiftex to redefine itself to be its previous value.  (We can't
-% just define it to fail again with an ``unmatched end'' error, since
-% the @ifset might be nested.)
-%
-\def\conditionalsucceed#1{%
-  \edef\temp{%
-    % Remember the current value of \E#1.
-    \let\nece{prevE#1} = \nece{E#1}%
-    %
-    % At the `@end #1', redefine \E#1 to be its previous value.
-    \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
-  }%
-  \temp
-}
-
-% We need to expand lots of \csname's, but we don't want to expand the
-% control sequences after we've constructed them.
-%
-\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
-
-% @asis just yields its argument.  Used with @table, for example.
-%
-\def\asis#1{#1}
-
-% @math means output in math mode.
-% We don't use $'s directly in the definition of \math because control
-% sequences like \math are expanded when the toc file is written.  Then,
-% we read the toc file back, the $'s will be normal characters (as they
-% should be, according to the definition of Texinfo).  So we must use a
-% control sequence to switch into and out of math mode.
-%
-% This isn't quite enough for @math to work properly in indices, but it
-% seems unlikely it will ever be needed there.
-%
-\let\implicitmath = $
-\def\math#1{\implicitmath #1\implicitmath}
-
-% @bullet and @minus need the same treatment as @math, just above.
-\def\bullet{\implicitmath\ptexbullet\implicitmath}
-\def\minus{\implicitmath-\implicitmath}
-
-% @refill is a no-op.
-\let\refill=\relax
-
-% If working on a large document in chapters, it is convenient to
-% be able to disable indexing, cross-referencing, and contents, for test runs.
-% This is done with @novalidate (before @setfilename).
-%
-\newif\iflinks \linkstrue % by default we want the aux files.
-\let\novalidate = \linksfalse
-
-% @setfilename is done at the beginning of every texinfo file.
-% So open here the files we need to have open while reading the input.
-% This makes it possible to make a .fmt file for texinfo.
-\def\setfilename{%
-   \iflinks 
-     \readauxfile
-   \fi % \openindices needs to do some work in any case.
-   \openindices
-   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
-   \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
-   %
-   % If texinfo.cnf is present on the system, read it.
-   % Useful for site-wide @afourpaper, etc.
-   % Just to be on the safe side, close the input stream before the \input.
-   \openin 1 texinfo.cnf
-   \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
-   \closein1
-   \temp
-   %
-   \comment % Ignore the actual filename.
-}
-
-% Called from \setfilename.
-% 
-\def\openindices{%
-  \newindex{cp}%
-  \newcodeindex{fn}%
-  \newcodeindex{vr}%
-  \newcodeindex{tp}%
-  \newcodeindex{ky}%
-  \newcodeindex{pg}%
-}
-
-% @bye.
-\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
-
-
-\message{fonts,}
-% Font-change commands.
-
-% Texinfo sort of supports the sans serif font style, which plain TeX does not.
-% So we set up a \sf analogous to plain's \rm, etc.
-\newfam\sffam
-\def\sf{\fam=\sffam \tensf}
-\let\li = \sf % Sometimes we call it \li, not \sf.
-
-% We don't need math for this one.
-\def\ttsl{\tenttsl}
-
-% Use Computer Modern fonts at \magstephalf (11pt).
-\newcount\mainmagstep
-\mainmagstep=\magstephalf
-
-% Set the font macro #1 to the font named #2, adding on the
-% specified font prefix (normally `cm').
-% #3 is the font's design size, #4 is a scale factor
-\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
-
-% Use cm as the default font prefix.
-% To specify the font prefix, you must define \fontprefix
-% before you read in texinfo.tex.
-\ifx\fontprefix\undefined
-\def\fontprefix{cm}
-\fi
-% Support font families that don't use the same naming scheme as CM.
-\def\rmshape{r}
-\def\rmbshape{bx}               %where the normal face is bold
-\def\bfshape{b}
-\def\bxshape{bx}
-\def\ttshape{tt}
-\def\ttbshape{tt}
-\def\ttslshape{sltt}
-\def\itshape{ti}
-\def\itbshape{bxti}
-\def\slshape{sl}
-\def\slbshape{bxsl}
-\def\sfshape{ss}
-\def\sfbshape{ss}
-\def\scshape{csc}
-\def\scbshape{csc}
-
-\ifx\bigger\relax
-\let\mainmagstep=\magstep1
-\setfont\textrm\rmshape{12}{1000}
-\setfont\texttt\ttshape{12}{1000}
-\else
-\setfont\textrm\rmshape{10}{\mainmagstep}
-\setfont\texttt\ttshape{10}{\mainmagstep}
-\fi
-% Instead of cmb10, you many want to use cmbx10.
-% cmbx10 is a prettier font on its own, but cmb10
-% looks better when embedded in a line with cmr10.
-\setfont\textbf\bfshape{10}{\mainmagstep}
-\setfont\textit\itshape{10}{\mainmagstep}
-\setfont\textsl\slshape{10}{\mainmagstep}
-\setfont\textsf\sfshape{10}{\mainmagstep}
-\setfont\textsc\scshape{10}{\mainmagstep}
-\setfont\textttsl\ttslshape{10}{\mainmagstep}
-\font\texti=cmmi10 scaled \mainmagstep
-\font\textsy=cmsy10 scaled \mainmagstep
-
-% A few fonts for @defun, etc.
-\setfont\defbf\bxshape{10}{\magstep1} %was 1314
-\setfont\deftt\ttshape{10}{\magstep1}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
-
-% Fonts for indices and small examples (9pt).
-% We actually use the slanted font rather than the italic,
-% because texinfo normally uses the slanted fonts for that.
-% Do not make many font distinctions in general in the index, since they
-% aren't very useful.
-\setfont\ninett\ttshape{9}{1000}
-\setfont\ninettsl\ttslshape{10}{900}
-\setfont\indrm\rmshape{9}{1000}
-\setfont\indit\itshape{9}{1000}
-\setfont\indsl\slshape{9}{1000}
-\let\indtt=\ninett
-\let\indttsl=\ninettsl
-\let\indsf=\indrm
-\let\indbf=\indrm
-\setfont\indsc\scshape{10}{900}
-\font\indi=cmmi9
-\font\indsy=cmsy9
-
-% Fonts for title page:
-\setfont\titlerm\rmbshape{12}{\magstep3}
-\setfont\titleit\itbshape{10}{\magstep4}
-\setfont\titlesl\slbshape{10}{\magstep4}
-\setfont\titlett\ttbshape{12}{\magstep3}
-\setfont\titlettsl\ttslshape{10}{\magstep4}
-\setfont\titlesf\sfbshape{17}{\magstep1}
-\let\titlebf=\titlerm
-\setfont\titlesc\scbshape{10}{\magstep4}
-\font\titlei=cmmi12 scaled \magstep3
-\font\titlesy=cmsy10 scaled \magstep4
-\def\authorrm{\secrm}
-
-% Chapter (and unnumbered) fonts (17.28pt).
-\setfont\chaprm\rmbshape{12}{\magstep2}
-\setfont\chapit\itbshape{10}{\magstep3}
-\setfont\chapsl\slbshape{10}{\magstep3}
-\setfont\chaptt\ttbshape{12}{\magstep2}
-\setfont\chapttsl\ttslshape{10}{\magstep3}
-\setfont\chapsf\sfbshape{17}{1000}
-\let\chapbf=\chaprm
-\setfont\chapsc\scbshape{10}{\magstep3}
-\font\chapi=cmmi12 scaled \magstep2
-\font\chapsy=cmsy10 scaled \magstep3
-
-% Section fonts (14.4pt).
-\setfont\secrm\rmbshape{12}{\magstep1}
-\setfont\secit\itbshape{10}{\magstep2}
-\setfont\secsl\slbshape{10}{\magstep2}
-\setfont\sectt\ttbshape{12}{\magstep1}
-\setfont\secttsl\ttslshape{10}{\magstep2}
-\setfont\secsf\sfbshape{12}{\magstep1}
-\let\secbf\secrm
-\setfont\secsc\scbshape{10}{\magstep2}
-\font\seci=cmmi12 scaled \magstep1
-\font\secsy=cmsy10 scaled \magstep2
-
-% \setfont\ssecrm\bxshape{10}{\magstep1}    % This size an font looked bad.
-% \setfont\ssecit\itshape{10}{\magstep1}    % The letters were too crowded.
-% \setfont\ssecsl\slshape{10}{\magstep1}
-% \setfont\ssectt\ttshape{10}{\magstep1}
-% \setfont\ssecsf\sfshape{10}{\magstep1}
-
-%\setfont\ssecrm\bfshape{10}{1315}      % Note the use of cmb rather than cmbx.
-%\setfont\ssecit\itshape{10}{1315}      % Also, the size is a little larger than
-%\setfont\ssecsl\slshape{10}{1315}      % being scaled magstep1.
-%\setfont\ssectt\ttshape{10}{1315}
-%\setfont\ssecsf\sfshape{10}{1315}
-
-%\let\ssecbf=\ssecrm
-
-% Subsection fonts (13.15pt).
-\setfont\ssecrm\rmbshape{12}{\magstephalf}
-\setfont\ssecit\itbshape{10}{1315}
-\setfont\ssecsl\slbshape{10}{1315}
-\setfont\ssectt\ttbshape{12}{\magstephalf}
-\setfont\ssecttsl\ttslshape{10}{1315}
-\setfont\ssecsf\sfbshape{12}{\magstephalf}
-\let\ssecbf\ssecrm
-\setfont\ssecsc\scbshape{10}{\magstep1}
-\font\sseci=cmmi12 scaled \magstephalf
-\font\ssecsy=cmsy10 scaled 1315
-% The smallcaps and symbol fonts should actually be scaled \magstep1.5,
-% but that is not a standard magnification.
-
-% In order for the font changes to affect most math symbols and letters,
-% we have to define the \textfont of the standard families.  Since
-% texinfo doesn't allow for producing subscripts and superscripts, we
-% don't bother to reset \scriptfont and \scriptscriptfont (which would
-% also require loading a lot more fonts).
-%
-\def\resetmathfonts{%
-  \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy
-  \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf
-  \textfont\ttfam = \tentt \textfont\sffam = \tensf
-}
-
-
-% The font-changing commands redefine the meanings of \tenSTYLE, instead
-% of just \STYLE.  We do this so that font changes will continue to work
-% in math mode, where it is the current \fam that is relevant in most
-% cases, not the current font.  Plain TeX does \def\bf{\fam=\bffam
-% \tenbf}, for example.  By redefining \tenbf, we obviate the need to
-% redefine \bf itself.
-\def\textfonts{%
-  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
-  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
-  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
-  \resetmathfonts}
-\def\titlefonts{%
-  \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
-  \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
-  \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
-  \let\tenttsl=\titlettsl
-  \resetmathfonts \setleading{25pt}}
-\def\titlefont#1{{\titlefonts\rm #1}}
-\def\chapfonts{%
-  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
-  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
-  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
-  \resetmathfonts \setleading{19pt}}
-\def\secfonts{%
-  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
-  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
-  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
-  \resetmathfonts \setleading{16pt}}
-\def\subsecfonts{%
-  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
-  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
-  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
-  \resetmathfonts \setleading{15pt}}
-\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
-\def\indexfonts{%
-  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
-  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
-  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl
-  \resetmathfonts \setleading{12pt}}
-
-% Set up the default fonts, so we can use them for creating boxes.
-%
-\textfonts
-
-% Define these so they can be easily changed for other fonts.
-\def\angleleft{$\langle$}
-\def\angleright{$\rangle$}
-
-% Count depth in font-changes, for error checks
-\newcount\fontdepth \fontdepth=0
-
-% Fonts for short table of contents.
-\setfont\shortcontrm\rmshape{12}{1000}
-\setfont\shortcontbf\bxshape{12}{1000}
-\setfont\shortcontsl\slshape{12}{1000}
-
-%% Add scribe-like font environments, plus @l for inline lisp (usually sans
-%% serif) and @ii for TeX italic
-
-% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
-% unless the following character is such as not to need one.
-\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
-\def\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx}
-\def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx}
-
-\let\i=\smartitalic
-\let\var=\smartslanted
-\let\dfn=\smartslanted
-\let\emph=\smartitalic
-\let\cite=\smartslanted
-
-\def\b#1{{\bf #1}}
-\let\strong=\b
-
-% We can't just use \exhyphenpenalty, because that only has effect at
-% the end of a paragraph.  Restore normal hyphenation at the end of the
-% group within which \nohyphenation is presumably called.
-%
-\def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
-\def\restorehyphenation{\hyphenchar\font = `- }
-
-\def\t#1{%
-  {\tt \rawbackslash \frenchspacing #1}%
-  \null
-}
-\let\ttfont=\t
-\def\samp#1{`\tclose{#1}'\null}
-\setfont\smallrm\rmshape{8}{1000}
-\font\smallsy=cmsy9
-\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{%
-  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
-    \vbox{\hrule\kern-0.4pt
-     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
-    \kern-0.4pt\hrule}%
-  \kern-.06em\raise0.4pt\hbox{\angleright}}}}
-% The old definition, with no lozenge:
-%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
-\def\ctrl #1{{\tt \rawbackslash \hat}#1}
-
-% @file, @option are the same as @samp.
-\let\file=\samp
-\let\option=\samp
-
-% @code is a modification of @t,
-% which makes spaces the same size as normal in the surrounding text.
-\def\tclose#1{%
-  {%
-    % Change normal interword space to be same as for the current font.
-    \spaceskip = \fontdimen2\font
-    %
-    % Switch to typewriter.
-    \tt
-    %
-    % But `\ ' produces the large typewriter interword space.
-    \def\ {{\spaceskip = 0pt{} }}%
-    %
-    % Turn off hyphenation.
-    \nohyphenation
-    %
-    \rawbackslash
-    \frenchspacing
-    #1%
-  }%
-  \null
-}
-
-% We *must* turn on hyphenation at `-' and `_' in \code.
-% Otherwise, it is too hard to avoid overfull hboxes
-% in the Emacs manual, the Library manual, etc.
-
-% Unfortunately, TeX uses one parameter (\hyphenchar) to control
-% both hyphenation at - and hyphenation within words.
-% We must therefore turn them both off (\tclose does that)
-% and arrange explicitly to hyphenate at a dash.
-%  -- rms.
-{
-  \catcode`\-=\active
-  \catcode`\_=\active
-  %
-  \global\def\code{\begingroup
-    \catcode`\-=\active \let-\codedash
-    \catcode`\_=\active \let_\codeunder
-    \codex
-  }
-  %
-  % If we end up with any active - characters when handling the index,
-  % just treat them as a normal -.
-  \global\def\indexbreaks{\catcode`\-=\active \let-\realdash}
-}
-
-\def\realdash{-}
-\def\codedash{-\discretionary{}{}{}}
-\def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}}
-\def\codex #1{\tclose{#1}\endgroup}
-
-%\let\exp=\tclose  %Was temporary
-
-% @kbd is like @code, except that if the argument is just one @key command,
-% then @kbd has no effect.
-
-% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
-%   `example' (@kbd uses ttsl only inside of @example and friends),
-%   or `code' (@kbd uses normal tty font always).
-\def\kbdinputstyle{\parsearg\kbdinputstylexxx}
-\def\kbdinputstylexxx#1{%
-  \def\arg{#1}%
-  \ifx\arg\worddistinct
-    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
-  \else\ifx\arg\wordexample
-    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
-  \else\ifx\arg\wordcode
-    \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
-  \fi\fi\fi
-}
-\def\worddistinct{distinct}
-\def\wordexample{example}
-\def\wordcode{code}
-
-% Default is kbdinputdistinct.  (Too much of a hassle to call the macro,
-% the catcodes are wrong for parsearg to work.)
-\gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}
-
-\def\xkey{\key}
-\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
-\ifx\one\xkey\ifx\threex\three \key{#2}%
-\else{\tclose{\kbdfont\look}}\fi
-\else{\tclose{\kbdfont\look}}\fi}
-
-% For @url, @env, @command quotes seem unnecessary, so use \code.
-\let\url=\code
-\let\env=\code
-\let\command=\code
-
-% @uref (abbreviation for `urlref') takes an optional second argument
-% specifying the text to display.  First (mandatory) arg is the url.
-% Perhaps eventually put in a hypertex \special here.
-% 
-\def\uref#1{\urefxxx #1,,\finish}
-\def\urefxxx#1,#2,#3\finish{%
-  \setbox0 = \hbox{\ignorespaces #2}%
-  \ifdim\wd0 > 0pt
-    \unhbox0\ (\code{#1})%
-  \else
-    \code{#1}%
-  \fi
-}
-
-% rms does not like the angle brackets --karl, 17may97.
-% So now @email is just like @uref.
-%\def\email#1{\angleleft{\tt #1}\angleright}
-\let\email=\uref
-
-% Check if we are currently using a typewriter font.  Since all the
-% Computer Modern typewriter fonts have zero interword stretch (and
-% shrink), and it is reasonable to expect all typewriter fonts to have
-% this property, we can check that font parameter.
-%
-\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
-
-% Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
-% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
-%
-\def\dmn#1{\thinspace #1}
-
-\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
-
-% @l was never documented to mean ``switch to the Lisp font'',
-% and it is not used as such in any manual I can find.  We need it for
-% Polish suppressed-l.  --karl, 22sep96.
-%\def\l#1{{\li #1}\null}
-
-% Explicit font changes: @r, @sc, undocumented @ii.
-\def\r#1{{\rm #1}}              % roman font
-\def\sc#1{{\smallcaps#1}}       % smallcaps font
-\def\ii#1{{\it #1}}             % italic font
-
-% @acronym downcases the argument and prints in smallcaps.
-\def\acronym#1{{\smallcaps \lowercase{#1}}}
-
-% @pounds{} is a sterling sign.
-\def\pounds{{\it\$}}
-
-
-\message{page headings,}
-
-\newskip\titlepagetopglue \titlepagetopglue = 1.5in
-\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
-
-% First the title page.  Must do @settitle before @titlepage.
-\newif\ifseenauthor
-\newif\iffinishedtitlepage
-
-% Do an implicit @contents or @shortcontents after @end titlepage if the
-% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
-% 
-\newif\ifsetcontentsaftertitlepage
- \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
-\newif\ifsetshortcontentsaftertitlepage
- \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
-
-\def\shorttitlepage{\parsearg\shorttitlepagezzz}
-\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
-        \endgroup\page\hbox{}\page}
-
-\def\titlepage{\begingroup \parindent=0pt \textfonts
-   \let\subtitlerm=\tenrm
-   \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
-   %
-   \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
-   %
-   % Leave some space at the very top of the page.
-   \vglue\titlepagetopglue
-   %
-   % Now you can print the title using @title.
-   \def\title{\parsearg\titlezzz}%
-   \def\titlezzz##1{\leftline{\titlefonts\rm ##1}
-                    % print a rule at the page bottom also.
-                    \finishedtitlepagefalse
-                    \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
-   % No rule at page bottom unless we print one at the top with @title.
-   \finishedtitlepagetrue
-   %
-   % Now you can put text using @subtitle.
-   \def\subtitle{\parsearg\subtitlezzz}%
-   \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}%
-   %
-   % @author should come last, but may come many times.
-   \def\author{\parsearg\authorzzz}%
-   \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi
-      {\authorfont \leftline{##1}}}%
-   %
-   % Most title ``pages'' are actually two pages long, with space
-   % at the top of the second.  We don't want the ragged left on the second.
-   \let\oldpage = \page
-   \def\page{%
-      \iffinishedtitlepage\else
-         \finishtitlepage
-      \fi
-      \oldpage
-      \let\page = \oldpage
-      \hbox{}}%
-%   \def\page{\oldpage \hbox{}}
-}
-
-\def\Etitlepage{%
-   \iffinishedtitlepage\else
-      \finishtitlepage
-   \fi
-   % It is important to do the page break before ending the group,
-   % because the headline and footline are only empty inside the group.
-   % If we use the new definition of \page, we always get a blank page
-   % after the title page, which we certainly don't want.
-   \oldpage
-   \endgroup
-   %
-   % If they want short, they certainly want long too.
-   \ifsetshortcontentsaftertitlepage
-     \shortcontents
-     \contents
-     \global\let\shortcontents = \relax
-     \global\let\contents = \relax
-   \fi
-   %
-   \ifsetcontentsaftertitlepage
-     \contents
-     \global\let\contents = \relax
-     \global\let\shortcontents = \relax
-   \fi
-   %
-   \HEADINGSon
-}
-
-\def\finishtitlepage{%
-   \vskip4pt \hrule height 2pt width \hsize
-   \vskip\titlepagebottomglue
-   \finishedtitlepagetrue
-}
-
-%%% Set up page headings and footings.
-
-\let\thispage=\folio
-
-\newtoks\evenheadline    % headline on even pages
-\newtoks\oddheadline     % headline on odd pages
-\newtoks\evenfootline    % footline on even pages
-\newtoks\oddfootline     % footline on odd pages
-
-% Now make Tex use those variables
-\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
-                            \else \the\evenheadline \fi}}
-\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
-                            \else \the\evenfootline \fi}\HEADINGShook}
-\let\HEADINGShook=\relax
-
-% Commands to set those variables.
-% For example, this is what  @headings on  does
-% @evenheading @thistitle|@thispage|@thischapter
-% @oddheading @thischapter|@thispage|@thistitle
-% @evenfooting @thisfile||
-% @oddfooting ||@thisfile
-
-\def\evenheading{\parsearg\evenheadingxxx}
-\def\oddheading{\parsearg\oddheadingxxx}
-\def\everyheading{\parsearg\everyheadingxxx}
-
-\def\evenfooting{\parsearg\evenfootingxxx}
-\def\oddfooting{\parsearg\oddfootingxxx}
-\def\everyfooting{\parsearg\everyfootingxxx}
-
-{\catcode`\@=0 %
-
-\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
-\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
-\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
-\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
-
-\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
-\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
-\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
-  \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
-  %
-  % Leave some space for the footline.  Hopefully ok to assume
-  % @evenfooting will not be used by itself.
-  \global\advance\pageheight by -\baselineskip
-  \global\advance\vsize by -\baselineskip
-}
-
-\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}}
-%
-}% unbind the catcode of @.
-
-% @headings double      turns headings on for double-sided printing.
-% @headings single      turns headings on for single-sided printing.
-% @headings off         turns them off.
-% @headings on          same as @headings double, retained for compatibility.
-% @headings after       turns on double-sided headings after this page.
-% @headings doubleafter turns on double-sided headings after this page.
-% @headings singleafter turns on single-sided headings after this page.
-% By default, they are off at the start of a document,
-% and turned `on' after @end titlepage.
-
-\def\headings #1 {\csname HEADINGS#1\endcsname}
-
-\def\HEADINGSoff{
-\global\evenheadline={\hfil} \global\evenfootline={\hfil}
-\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
-\HEADINGSoff
-% When we turn headings on, set the page number to 1.
-% For double-sided printing, put current file name in lower left corner,
-% chapter name on inside top of right hand pages, document
-% title on inside top of left hand pages, and page numbers on outside top
-% edge of all pages.
-\def\HEADINGSdouble{
-\global\pageno=1
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chapoddpage
-}
-\let\contentsalignmacro = \chappager
-
-% For single-sided printing, chapter title goes across top left of page,
-% page number on top right.
-\def\HEADINGSsingle{
-\global\pageno=1
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chappager
-}
-\def\HEADINGSon{\HEADINGSdouble}
-
-\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
-\let\HEADINGSdoubleafter=\HEADINGSafter
-\def\HEADINGSdoublex{%
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chapoddpage
-}
-
-\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
-\def\HEADINGSsinglex{%
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chappager
-}
-
-% Subroutines used in generating headings
-% Produces Day Month Year style of output.
-\def\today{\number\day\space
-\ifcase\month\or
-January\or February\or March\or April\or May\or June\or
-July\or August\or September\or October\or November\or December\fi
-\space\number\year}
-
-% Use this if you want the Month Day, Year style of output.
-%\def\today{\ifcase\month\or
-%January\or February\or March\or April\or May\or June\or
-%July\or August\or September\or October\or November\or December\fi
-%\space\number\day, \number\year}
-
-% @settitle line...  specifies the title of the document, for headings
-% It generates no output of its own
-
-\def\thistitle{No Title}
-\def\settitle{\parsearg\settitlezzz}
-\def\settitlezzz #1{\gdef\thistitle{#1}}
-
-
-\message{tables,}
-% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
-
-% default indentation of table text
-\newdimen\tableindent \tableindent=.8in
-% default indentation of @itemize and @enumerate text
-\newdimen\itemindent  \itemindent=.3in
-% margin between end of table item and start of table text.
-\newdimen\itemmargin  \itemmargin=.1in
-
-% used internally for \itemindent minus \itemmargin
-\newdimen\itemmax
-
-% Note @table, @vtable, and @vtable define @item, @itemx, etc., with
-% these defs.
-% They also define \itemindex
-% to index the item name in whatever manner is desired (perhaps none).
-
-\newif\ifitemxneedsnegativevskip
-
-\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
-
-\def\internalBitem{\smallbreak \parsearg\itemzzz}
-\def\internalBitemx{\itemxpar \parsearg\itemzzz}
-
-\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
-\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz}
-
-\def\internalBkitem{\smallbreak \parsearg\kitemzzz}
-\def\internalBkitemx{\itemxpar \parsearg\kitemzzz}
-
-\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}%
-                 \itemzzz {#1}}
-
-\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}%
-                 \itemzzz {#1}}
-
-\def\itemzzz #1{\begingroup %
-  \advance\hsize by -\rightskip
-  \advance\hsize by -\tableindent
-  \setbox0=\hbox{\itemfont{#1}}%
-  \itemindex{#1}%
-  \nobreak % This prevents a break before @itemx.
-  %
-  % If the item text does not fit in the space we have, put it on a line
-  % by itself, and do not allow a page break either before or after that
-  % line.  We do not start a paragraph here because then if the next
-  % command is, e.g., @kindex, the whatsit would get put into the
-  % horizontal list on a line by itself, resulting in extra blank space.
-  \ifdim \wd0>\itemmax
-    %
-    % Make this a paragraph so we get the \parskip glue and wrapping,
-    % but leave it ragged-right.
-    \begingroup
-      \advance\leftskip by-\tableindent
-      \advance\hsize by\tableindent
-      \advance\rightskip by0pt plus1fil
-      \leavevmode\unhbox0\par
-    \endgroup
-    %
-    % We're going to be starting a paragraph, but we don't want the
-    % \parskip glue -- logically it's part of the @item we just started.
-    \nobreak \vskip-\parskip
-    %
-    % Stop a page break at the \parskip glue coming up.  Unfortunately
-    % we can't prevent a possible page break at the following
-    % \baselineskip glue.
-    \nobreak
-    \endgroup
-    \itemxneedsnegativevskipfalse
-  \else
-    % The item text fits into the space.  Start a paragraph, so that the
-    % following text (if any) will end up on the same line.  
-    \noindent
-    % Do this with kerns and \unhbox so that if there is a footnote in
-    % the item text, it can migrate to the main vertical list and
-    % eventually be printed.
-    \nobreak\kern-\tableindent
-    \dimen0 = \itemmax  \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
-    \unhbox0
-    \nobreak\kern\dimen0
-    \endgroup
-    \itemxneedsnegativevskiptrue
-  \fi
-}
-
-\def\item{\errmessage{@item while not in a table}}
-\def\itemx{\errmessage{@itemx while not in a table}}
-\def\kitem{\errmessage{@kitem while not in a table}}
-\def\kitemx{\errmessage{@kitemx while not in a table}}
-\def\xitem{\errmessage{@xitem while not in a table}}
-\def\xitemx{\errmessage{@xitemx while not in a table}}
-
-% Contains a kludge to get @end[description] to work.
-\def\description{\tablez{\dontindex}{1}{}{}{}{}}
-
-% @table, @ftable, @vtable.
-\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
-{\obeylines\obeyspaces%
-\gdef\tablex #1^^M{%
-\tabley\dontindex#1        \endtabley}}
-
-\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
-{\obeylines\obeyspaces%
-\gdef\ftablex #1^^M{%
-\tabley\fnitemindex#1        \endtabley
-\def\Eftable{\endgraf\afterenvbreak\endgroup}%
-\let\Etable=\relax}}
-
-\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex}
-{\obeylines\obeyspaces%
-\gdef\vtablex #1^^M{%
-\tabley\vritemindex#1        \endtabley
-\def\Evtable{\endgraf\afterenvbreak\endgroup}%
-\let\Etable=\relax}}
-
-\def\dontindex #1{}
-\def\fnitemindex #1{\doind {fn}{\code{#1}}}%
-\def\vritemindex #1{\doind {vr}{\code{#1}}}%
-
-{\obeyspaces %
-\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
-\tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
-
-\def\tablez #1#2#3#4#5#6{%
-\aboveenvbreak %
-\begingroup %
-\def\Edescription{\Etable}% Necessary kludge.
-\let\itemindex=#1%
-\ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
-\ifnum 0#4>0 \tableindent=#4\mil \fi %
-\ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
-\def\itemfont{#2}%
-\itemmax=\tableindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \tableindent %
-\exdentamount=\tableindent
-\parindent = 0pt
-\parskip = \smallskipamount
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def\Etable{\endgraf\afterenvbreak\endgroup}%
-\let\item = \internalBitem %
-\let\itemx = \internalBitemx %
-\let\kitem = \internalBkitem %
-\let\kitemx = \internalBkitemx %
-\let\xitem = \internalBxitem %
-\let\xitemx = \internalBxitemx %
-}
-
-% This is the counter used by @enumerate, which is really @itemize
-
-\newcount \itemno
-
-\def\itemize{\parsearg\itemizezzz}
-
-\def\itemizezzz #1{%
-  \begingroup % ended by the @end itemize
-  \itemizey {#1}{\Eitemize}
-}
-
-\def\itemizey #1#2{%
-\aboveenvbreak %
-\itemmax=\itemindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \itemindent %
-\exdentamount=\itemindent
-\parindent = 0pt %
-\parskip = \smallskipamount %
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def#2{\endgraf\afterenvbreak\endgroup}%
-\def\itemcontents{#1}%
-\let\item=\itemizeitem}
-
-% Set sfcode to normal for the chars that usually have another value.
-% These are `.?!:;,'
-\def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000
-  \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 }
-
-% \splitoff TOKENS\endmark defines \first to be the first token in
-% TOKENS, and \rest to be the remainder.
-%
-\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
-
-% Allow an optional argument of an uppercase letter, lowercase letter,
-% or number, to specify the first label in the enumerated list.  No
-% argument is the same as `1'.
-%
-\def\enumerate{\parsearg\enumeratezzz}
-\def\enumeratezzz #1{\enumeratey #1  \endenumeratey}
-\def\enumeratey #1 #2\endenumeratey{%
-  \begingroup % ended by the @end enumerate
-  %
-  % If we were given no argument, pretend we were given `1'.
-  \def\thearg{#1}%
-  \ifx\thearg\empty \def\thearg{1}\fi
-  %
-  % Detect if the argument is a single token.  If so, it might be a
-  % letter.  Otherwise, the only valid thing it can be is a number.
-  % (We will always have one token, because of the test we just made.
-  % This is a good thing, since \splitoff doesn't work given nothing at
-  % all -- the first parameter is undelimited.)
-  \expandafter\splitoff\thearg\endmark
-  \ifx\rest\empty
-    % Only one token in the argument.  It could still be anything.
-    % A ``lowercase letter'' is one whose \lccode is nonzero.
-    % An ``uppercase letter'' is one whose \lccode is both nonzero, and
-    %   not equal to itself.
-    % Otherwise, we assume it's a number.
-    %
-    % We need the \relax at the end of the \ifnum lines to stop TeX from
-    % continuing to look for a <number>.
-    %
-    \ifnum\lccode\expandafter`\thearg=0\relax
-      \numericenumerate % a number (we hope)
-    \else
-      % It's a letter.
-      \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
-        \lowercaseenumerate % lowercase letter
-      \else
-        \uppercaseenumerate % uppercase letter
-      \fi
-    \fi
-  \else
-    % Multiple tokens in the argument.  We hope it's a number.
-    \numericenumerate
-  \fi
-}
-
-% An @enumerate whose labels are integers.  The starting integer is
-% given in \thearg.
-%
-\def\numericenumerate{%
-  \itemno = \thearg
-  \startenumeration{\the\itemno}%
-}
-
-% The starting (lowercase) letter is in \thearg.
-\def\lowercaseenumerate{%
-  \itemno = \expandafter`\thearg
-  \startenumeration{%
-    % Be sure we're not beyond the end of the alphabet.
-    \ifnum\itemno=0
-      \errmessage{No more lowercase letters in @enumerate; get a bigger
-                  alphabet}%
-    \fi
-    \char\lccode\itemno
-  }%
-}
-
-% The starting (uppercase) letter is in \thearg.
-\def\uppercaseenumerate{%
-  \itemno = \expandafter`\thearg
-  \startenumeration{%
-    % Be sure we're not beyond the end of the alphabet.
-    \ifnum\itemno=0
-      \errmessage{No more uppercase letters in @enumerate; get a bigger
-                  alphabet}
-    \fi
-    \char\uccode\itemno
-  }%
-}
-
-% Call itemizey, adding a period to the first argument and supplying the
-% common last two arguments.  Also subtract one from the initial value in
-% \itemno, since @item increments \itemno.
-%
-\def\startenumeration#1{%
-  \advance\itemno by -1
-  \itemizey{#1.}\Eenumerate\flushcr
-}
-
-% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
-% to @enumerate.
-%
-\def\alphaenumerate{\enumerate{a}}
-\def\capsenumerate{\enumerate{A}}
-\def\Ealphaenumerate{\Eenumerate}
-\def\Ecapsenumerate{\Eenumerate}
-
-% Definition of @item while inside @itemize.
-
-\def\itemizeitem{%
-\advance\itemno by 1
-{\let\par=\endgraf \smallbreak}%
-\ifhmode \errmessage{In hmode at itemizeitem}\fi
-{\parskip=0in \hskip 0pt
-\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
-\vadjust{\penalty 1200}}%
-\flushcr}
-
-% @multitable macros
-% Amy Hendrickson, 8/18/94, 3/6/96
-%
-% @multitable ... @end multitable will make as many columns as desired.
-% Contents of each column will wrap at width given in preamble.  Width
-% can be specified either with sample text given in a template line,
-% or in percent of \hsize, the current width of text on page.
-
-% Table can continue over pages but will only break between lines.
-
-% To make preamble:
-%
-% Either define widths of columns in terms of percent of \hsize:
-%   @multitable @columnfractions .25 .3 .45
-%   @item ...
-%
-%   Numbers following @columnfractions are the percent of the total
-%   current hsize to be used for each column. You may use as many
-%   columns as desired.
-
-
-% Or use a template:
-%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
-%   @item ...
-%   using the widest term desired in each column.
-%
-% For those who want to use more than one line's worth of words in
-% the preamble, break the line within one argument and it
-% will parse correctly, i.e.,
-%
-%     @multitable {Column 1 template} {Column 2 template} {Column 3
-%      template}
-% Not:
-%     @multitable {Column 1 template} {Column 2 template}
-%      {Column 3 template}
-
-% Each new table line starts with @item, each subsequent new column
-% starts with @tab. Empty columns may be produced by supplying @tab's
-% with nothing between them for as many times as empty columns are needed,
-% ie, @tab@tab@tab will produce two empty columns.
-
-% @item, @tab, @multitable or @end multitable do not need to be on their
-% own lines, but it will not hurt if they are.
-
-% Sample multitable:
-
-%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
-%   @item first col stuff @tab second col stuff @tab third col
-%   @item
-%   first col stuff
-%   @tab
-%   second col stuff
-%   @tab
-%   third col
-%   @item first col stuff @tab second col stuff
-%   @tab Many paragraphs of text may be used in any column.
-%
-%         They will wrap at the width determined by the template.
-%   @item@tab@tab This will be in third column.
-%   @end multitable
-
-% Default dimensions may be reset by user.
-% @multitableparskip is vertical space between paragraphs in table.
-% @multitableparindent is paragraph indent in table.
-% @multitablecolmargin is horizontal space to be left between columns.
-% @multitablelinespace is space to leave between table items, baseline
-%                                                            to baseline.
-%   0pt means it depends on current normal line spacing.
-%
-\newskip\multitableparskip
-\newskip\multitableparindent
-\newdimen\multitablecolspace
-\newskip\multitablelinespace
-\multitableparskip=0pt
-\multitableparindent=6pt
-\multitablecolspace=12pt
-\multitablelinespace=0pt
-
-% Macros used to set up halign preamble:
-% 
-\let\endsetuptable\relax
-\def\xendsetuptable{\endsetuptable}
-\let\columnfractions\relax
-\def\xcolumnfractions{\columnfractions}
-\newif\ifsetpercent
-
-% #1 is the part of the @columnfraction before the decimal point, which
-% is presumably either 0 or the empty string (but we don't check, we
-% just throw it away).  #2 is the decimal part, which we use as the
-% percent of \hsize for this column.
-\def\pickupwholefraction#1.#2 {%
-  \global\advance\colcount by 1
-  \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}%
-  \setuptable
-}
-
-\newcount\colcount
-\def\setuptable#1{%
-  \def\firstarg{#1}%
-  \ifx\firstarg\xendsetuptable
-    \let\go = \relax
-  \else
-    \ifx\firstarg\xcolumnfractions
-      \global\setpercenttrue
-    \else
-      \ifsetpercent
-         \let\go\pickupwholefraction
-      \else
-         \global\advance\colcount by 1
-         \setbox0=\hbox{#1\unskip }% Add a normal word space as a separator;
-                            % typically that is always in the input, anyway.
-         \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
-      \fi
-    \fi
-    \ifx\go\pickupwholefraction
-      % Put the argument back for the \pickupwholefraction call, so
-      % we'll always have a period there to be parsed.
-      \def\go{\pickupwholefraction#1}%
-    \else
-      \let\go = \setuptable
-    \fi%
-  \fi
-  \go
-}
-
-% multitable syntax
-\def\tab{&\hskip1sp\relax} % 2/2/96
-                           % tiny skip here makes sure this column space is
-                           % maintained, even if it is never used.
-
-% @multitable ... @end multitable definitions:
-%
-\def\multitable{\parsearg\dotable}
-\def\dotable#1{\bgroup
-  \vskip\parskip
-  \let\item\crcr
-  \tolerance=9500
-  \hbadness=9500
-  \setmultitablespacing
-  \parskip=\multitableparskip
-  \parindent=\multitableparindent
-  \overfullrule=0pt
-  \global\colcount=0
-  \def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}%
-  %
-  % To parse everything between @multitable and @item:
-  \setuptable#1 \endsetuptable
-  %
-  % \everycr will reset column counter, \colcount, at the end of
-  % each line. Every column entry will cause \colcount to advance by one.
-  % The table preamble
-  % looks at the current \colcount to find the correct column width.
-  \everycr{\noalign{%
-  %
-  % \filbreak%% keeps underfull box messages off when table breaks over pages.
-  % Maybe so, but it also creates really weird page breaks when the table
-  % breaks over pages. Wouldn't \vfil be better?  Wait until the problem
-  % manifests itself, so it can be fixed for real --karl.
-    \global\colcount=0\relax}}%
-  %
-  % This preamble sets up a generic column definition, which will
-  % be used as many times as user calls for columns.
-  % \vtop will set a single line and will also let text wrap and
-  % continue for many paragraphs if desired.
-  \halign\bgroup&\global\advance\colcount by 1\relax
-    \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
-  %
-  % In order to keep entries from bumping into each other
-  % we will add a \leftskip of \multitablecolspace to all columns after
-  % the first one.
-  % 
-  % If a template has been used, we will add \multitablecolspace
-  % to the width of each template entry.
-  % 
-  % If the user has set preamble in terms of percent of \hsize we will
-  % use that dimension as the width of the column, and the \leftskip
-  % will keep entries from bumping into each other.  Table will start at
-  % left margin and final column will justify at right margin.
-  % 
-  % Make sure we don't inherit \rightskip from the outer environment.
-  \rightskip=0pt
-  \ifnum\colcount=1
-    % The first column will be indented with the surrounding text.
-    \advance\hsize by\leftskip
-  \else
-    \ifsetpercent \else
-      % If user has not set preamble in terms of percent of \hsize
-      % we will advance \hsize by \multitablecolspace.
-      \advance\hsize by \multitablecolspace
-    \fi
-   % In either case we will make \leftskip=\multitablecolspace:
-  \leftskip=\multitablecolspace
-  \fi
-  % Ignoring space at the beginning and end avoids an occasional spurious
-  % blank line, when TeX decides to break the line at the space before the
-  % box from the multistrut, so the strut ends up on a line by itself.
-  % For example:
-  % @multitable @columnfractions .11 .89
-  % @item @code{#}
-  % @tab Legal holiday which is valid in major parts of the whole country.
-  % Is automatically provided with highlighting sequences respectively marking
-  % characters.
-  \noindent\ignorespaces##\unskip\multistrut}\cr
-}
-
-\def\setmultitablespacing{% test to see if user has set \multitablelinespace.
-% If so, do nothing. If not, give it an appropriate dimension based on
-% current baselineskip.
-\ifdim\multitablelinespace=0pt
-%% strut to put in table in case some entry doesn't have descenders,
-%% to keep lines equally spaced
-\let\multistrut = \strut
-%% Test to see if parskip is larger than space between lines of
-%% table. If not, do nothing.
-%%        If so, set to same dimension as multitablelinespace.
-\else
-\gdef\multistrut{\vrule height\multitablelinespace depth\dp0
-width0pt\relax} \fi
-\ifdim\multitableparskip>\multitablelinespace
-\global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
-                                      %% than skip between lines in the table.
-\fi%
-\ifdim\multitableparskip=0pt
-\global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
-                                      %% than skip between lines in the table.
-\fi}
-
-
-\message{indexing,}
-% Index generation facilities
-
-% Define \newwrite to be identical to plain tex's \newwrite
-% except not \outer, so it can be used within \newindex.
-{\catcode`\@=11
-\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}}
-
-% \newindex {foo} defines an index named foo.
-% It automatically defines \fooindex such that
-% \fooindex ...rest of line... puts an entry in the index foo.
-% It also defines \fooindfile to be the number of the output channel for
-% the file that accumulates this index.  The file's extension is foo.
-% The name of an index should be no more than 2 characters long
-% for the sake of vms.
-%
-\def\newindex#1{%
-  \iflinks
-    \expandafter\newwrite \csname#1indfile\endcsname
-    \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-  \fi
-  \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
-    \noexpand\doindex{#1}}
-}
-
-% @defindex foo  ==  \newindex{foo}
-
-\def\defindex{\parsearg\newindex}
-
-% Define @defcodeindex, like @defindex except put all entries in @code.
-
-\def\newcodeindex#1{%
-  \iflinks
-    \expandafter\newwrite \csname#1indfile\endcsname
-    \openout \csname#1indfile\endcsname \jobname.#1
-  \fi
-  \expandafter\xdef\csname#1index\endcsname{%
-    \noexpand\docodeindex{#1}}
-}
-
-\def\defcodeindex{\parsearg\newcodeindex}
-
-% @synindex foo bar    makes index foo feed into index bar.
-% Do this instead of @defindex foo if you don't want it as a separate index.
-% The \closeout helps reduce unnecessary open files; the limit on the
-% Acorn RISC OS is a mere 16 files.
-\def\synindex#1 #2 {%
-  \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-  \expandafter\closeout\csname#1indfile\endcsname
-  \expandafter\let\csname#1indfile\endcsname=\synindexfoo
-  \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
-    \noexpand\doindex{#2}}%
-}
-
-% @syncodeindex foo bar   similar, but put all entries made for index foo
-% inside @code.
-\def\syncodeindex#1 #2 {%
-  \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-  \expandafter\closeout\csname#1indfile\endcsname
-  \expandafter\let\csname#1indfile\endcsname=\synindexfoo
-  \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
-    \noexpand\docodeindex{#2}}%
-}
-
-% Define \doindex, the driver for all \fooindex macros.
-% Argument #1 is generated by the calling \fooindex macro,
-%  and it is "foo", the name of the index.
-
-% \doindex just uses \parsearg; it calls \doind for the actual work.
-% This is because \doind is more useful to call from other macros.
-
-% There is also \dosubind {index}{topic}{subtopic}
-% which makes an entry in a two-level index such as the operation index.
-
-\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
-\def\singleindexer #1{\doind{\indexname}{#1}}
-
-% like the previous two, but they put @code around the argument.
-\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
-\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
-
-\def\indexdummies{%
-\def\ { }%
-% Take care of the plain tex accent commands.
-\def\"{\realbackslash "}%
-\def\`{\realbackslash `}%
-\def\'{\realbackslash '}%
-\def\^{\realbackslash ^}%
-\def\~{\realbackslash ~}%
-\def\={\realbackslash =}%
-\def\b{\realbackslash b}%
-\def\c{\realbackslash c}%
-\def\d{\realbackslash d}%
-\def\u{\realbackslash u}%
-\def\v{\realbackslash v}%
-\def\H{\realbackslash H}%
-% Take care of the plain tex special European modified letters.
-\def\oe{\realbackslash oe}%
-\def\ae{\realbackslash ae}%
-\def\aa{\realbackslash aa}%
-\def\OE{\realbackslash OE}%
-\def\AE{\realbackslash AE}%
-\def\AA{\realbackslash AA}%
-\def\o{\realbackslash o}%
-\def\O{\realbackslash O}%
-\def\l{\realbackslash l}%
-\def\L{\realbackslash L}%
-\def\ss{\realbackslash ss}%
-% Take care of texinfo commands likely to appear in an index entry.
-% (Must be a way to avoid doing expansion at all, and thus not have to
-% laboriously list every single command here.)
-\def\@{@}% will be @@ when we switch to @ as escape char.
-% Need these in case \tex is in effect and \{ is a \delimiter again.
-% But can't use \lbracecmd and \rbracecmd because texindex assumes
-% braces and backslashes are used only as delimiters.
-\let\{ = \mylbrace
-\let\} = \myrbrace
-\def\_{{\realbackslash _}}%
-\def\w{\realbackslash w }%
-\def\bf{\realbackslash bf }%
-%\def\rm{\realbackslash rm }%
-\def\sl{\realbackslash sl }%
-\def\sf{\realbackslash sf}%
-\def\tt{\realbackslash tt}%
-\def\gtr{\realbackslash gtr}%
-\def\less{\realbackslash less}%
-\def\hat{\realbackslash hat}%
-\def\TeX{\realbackslash TeX}%
-\def\dots{\realbackslash dots }%
-\def\result{\realbackslash result}%
-\def\equiv{\realbackslash equiv}%
-\def\expansion{\realbackslash expansion}%
-\def\print{\realbackslash print}%
-\def\error{\realbackslash error}%
-\def\point{\realbackslash point}%
-\def\copyright{\realbackslash copyright}%
-\def\tclose##1{\realbackslash tclose {##1}}%
-\def\code##1{\realbackslash code {##1}}%
-\def\uref##1{\realbackslash uref {##1}}%
-\def\url##1{\realbackslash url {##1}}%
-\def\env##1{\realbackslash env {##1}}%
-\def\command##1{\realbackslash command {##1}}%
-\def\option##1{\realbackslash option {##1}}%
-\def\dotless##1{\realbackslash dotless {##1}}%
-\def\samp##1{\realbackslash samp {##1}}%
-\def\,##1{\realbackslash ,{##1}}%
-\def\t##1{\realbackslash t {##1}}%
-\def\r##1{\realbackslash r {##1}}%
-\def\i##1{\realbackslash i {##1}}%
-\def\b##1{\realbackslash b {##1}}%
-\def\sc##1{\realbackslash sc {##1}}%
-\def\cite##1{\realbackslash cite {##1}}%
-\def\key##1{\realbackslash key {##1}}%
-\def\file##1{\realbackslash file {##1}}%
-\def\var##1{\realbackslash var {##1}}%
-\def\kbd##1{\realbackslash kbd {##1}}%
-\def\dfn##1{\realbackslash dfn {##1}}%
-\def\emph##1{\realbackslash emph {##1}}%
-\def\acronym##1{\realbackslash acronym {##1}}%
-%
-% Handle some cases of @value -- where the variable name does not
-% contain - or _, and the value does not contain any
-% (non-fully-expandable) commands.
-\let\value = \expandablevalue
-%
-\unsepspaces
-}
-
-% If an index command is used in an @example environment, any spaces
-% therein should become regular spaces in the raw index file, not the
-% expansion of \tie (\\leavevmode \penalty \@M \ ).
-{\obeyspaces
- \gdef\unsepspaces{\obeyspaces\let =\space}}
-
-% \indexnofonts no-ops all font-change commands.
-% This is used when outputting the strings to sort the index by.
-\def\indexdummyfont#1{#1}
-\def\indexdummytex{TeX}
-\def\indexdummydots{...}
-
-\def\indexnofonts{%
-% Just ignore accents.
-\let\,=\indexdummyfont
-\let\"=\indexdummyfont
-\let\`=\indexdummyfont
-\let\'=\indexdummyfont
-\let\^=\indexdummyfont
-\let\~=\indexdummyfont
-\let\==\indexdummyfont
-\let\b=\indexdummyfont
-\let\c=\indexdummyfont
-\let\d=\indexdummyfont
-\let\u=\indexdummyfont
-\let\v=\indexdummyfont
-\let\H=\indexdummyfont
-\let\dotless=\indexdummyfont
-% Take care of the plain tex special European modified letters.
-\def\oe{oe}%
-\def\ae{ae}%
-\def\aa{aa}%
-\def\OE{OE}%
-\def\AE{AE}%
-\def\AA{AA}%
-\def\o{o}%
-\def\O{O}%
-\def\l{l}%
-\def\L{L}%
-\def\ss{ss}%
-\let\w=\indexdummyfont
-\let\t=\indexdummyfont
-\let\r=\indexdummyfont
-\let\i=\indexdummyfont
-\let\b=\indexdummyfont
-\let\emph=\indexdummyfont
-\let\strong=\indexdummyfont
-\let\cite=\indexdummyfont
-\let\sc=\indexdummyfont
-%Don't no-op \tt, since it isn't a user-level command
-% and is used in the definitions of the active chars like <, >, |...
-%\let\tt=\indexdummyfont
-\let\tclose=\indexdummyfont
-\let\code=\indexdummyfont
-\let\url=\indexdummyfont
-\let\uref=\indexdummyfont
-\let\env=\indexdummyfont
-\let\command=\indexdummyfont
-\let\option=\indexdummyfont
-\let\file=\indexdummyfont
-\let\samp=\indexdummyfont
-\let\kbd=\indexdummyfont
-\let\key=\indexdummyfont
-\let\var=\indexdummyfont
-\let\TeX=\indexdummytex
-\let\dots=\indexdummydots
-\def\@{@}%
-}
-
-% To define \realbackslash, we must make \ not be an escape.
-% We must first make another character (@) an escape
-% so we do not become unable to do a definition.
-
-{\catcode`\@=0 \catcode`\\=\other
- @gdef@realbackslash{\}}
-
-\let\indexbackslash=0  %overridden during \printindex.
-\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
-
-% For \ifx comparisons.
-\def\emptymacro{\empty}
-
-% Most index entries go through here, but \dosubind is the general case.
-% 
-\def\doind#1#2{\dosubind{#1}{#2}\empty}
-
-% Workhorse for all \fooindexes.
-% #1 is name of index, #2 is stuff to put there, #3 is subentry --
-% \empty if called from \doind, as we usually are.  The main exception
-% is with defuns, which call us directly.
-% 
-\def\dosubind#1#2#3{%
-  % Put the index entry in the margin if desired.
-  \ifx\SETmarginindex\relax\else
-    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
-  \fi
-  {%
-    \count255=\lastpenalty
-    {%
-      \indexdummies % Must do this here, since \bf, etc expand at this stage
-      \escapechar=`\\
-      {%
-        \let\folio = 0% We will expand all macros now EXCEPT \folio.
-        \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
-        % so it will be output as is; and it will print as backslash.
-        %
-        \def\thirdarg{#3}%
-        %
-        % If third arg is present, precede it with space in sort key.
-        \ifx\thirdarg\emptymacro
-          \let\subentry = \empty
-        \else
-          \def\subentry{ #3}%
-        \fi
-        %
-        % First process the index-string with all font commands turned off
-        % to get the string to sort by.
-        {\indexnofonts \xdef\indexsorttmp{#2\subentry}}%
-        %
-        % Now produce the complete index entry, with both the sort key and the
-        % original text, including any font commands.
-        \toks0 = {#2}%
-        \edef\temp{%
-          \write\csname#1indfile\endcsname{%
-            \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
-        }%
-        %
-        % If third (subentry) arg is present, add it to the index string.
-        \ifx\thirdarg\emptymacro \else
-          \toks0 = {#3}%
-          \edef\temp{\temp{\the\toks0}}%
-        \fi
-        %
-        % If a skip is the last thing on the list now, preserve it
-        % by backing up by \lastskip, doing the \write, then inserting
-        % the skip again.  Otherwise, the whatsit generated by the
-        % \write will make \lastskip zero.  The result is that sequences
-        % like this:
-        % @end defun
-        % @tindex whatever
-        % @defun ...
-        % will have extra space inserted, because the \medbreak in the
-        % start of the @defun won't see the skip inserted by the @end of
-        % the previous defun.
-        % 
-        % But don't do any of this if we're not in vertical mode.  We
-        % don't want to do a \vskip and prematurely end a paragraph.
-        % 
-        % Avoid page breaks due to these extra skips, too.
-        % 
-        \iflinks
-          \ifvmode
-            \skip0 = \lastskip
-            \ifdim\lastskip = 0pt \else \nobreak\vskip-\lastskip \fi
-          \fi
-          %
-          \temp % do the write
-          %
-          % 
-          \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi
-        \fi
-      }%
-    }%
-    \penalty\count255
-  }%
-}
-
-% The index entry written in the file actually looks like
-%  \entry {sortstring}{page}{topic}
-% or
-%  \entry {sortstring}{page}{topic}{subtopic}
-% The texindex program reads in these files and writes files
-% containing these kinds of lines:
-%  \initial {c}
-%     before the first topic whose initial is c
-%  \entry {topic}{pagelist}
-%     for a topic that is used without subtopics
-%  \primary {topic}
-%     for the beginning of a topic that is used with subtopics
-%  \secondary {subtopic}{pagelist}
-%     for each subtopic.
-
-% Define the user-accessible indexing commands
-% @findex, @vindex, @kindex, @cindex.
-
-\def\findex {\fnindex}
-\def\kindex {\kyindex}
-\def\cindex {\cpindex}
-\def\vindex {\vrindex}
-\def\tindex {\tpindex}
-\def\pindex {\pgindex}
-
-\def\cindexsub {\begingroup\obeylines\cindexsub}
-{\obeylines %
-\gdef\cindexsub "#1" #2^^M{\endgroup %
-\dosubind{cp}{#2}{#1}}}
-
-% Define the macros used in formatting output of the sorted index material.
-
-% @printindex causes a particular index (the ??s file) to get printed.
-% It does not print any chapter heading (usually an @unnumbered).
-%
-\def\printindex{\parsearg\doprintindex}
-\def\doprintindex#1{\begingroup
-  \dobreak \chapheadingskip{10000}%
-  %
-  \indexfonts \rm
-  \tolerance = 9500
-  \indexbreaks
-  %
-  % See if the index file exists and is nonempty.
-  % Change catcode of @ here so that if the index file contains
-  % \initial {@}
-  % as its first line, TeX doesn't complain about mismatched braces
-  % (because it thinks @} is a control sequence).
-  \catcode`\@ = 11
-  \openin 1 \jobname.#1s
-  \ifeof 1
-    % \enddoublecolumns gets confused if there is no text in the index,
-    % and it loses the chapter title and the aux file entries for the
-    % index.  The easiest way to prevent this problem is to make sure
-    % there is some text.
-    (Index is nonexistent)
-  \else
-    %
-    % If the index file exists but is empty, then \openin leaves \ifeof
-    % false.  We have to make TeX try to read something from the file, so
-    % it can discover if there is anything in it.
-    \read 1 to \temp
-    \ifeof 1
-      (Index is empty)
-    \else
-      % Index files are almost Texinfo source, but we use \ as the escape
-      % character.  It would be better to use @, but that's too big a change
-      % to make right now.
-      \def\indexbackslash{\rawbackslashxx}%
-      \catcode`\\ = 0
-      \escapechar = `\\
-      \begindoublecolumns
-      \input \jobname.#1s
-      \enddoublecolumns
-    \fi
-  \fi
-  \closein 1
-\endgroup}
-
-% These macros are used by the sorted index file itself.
-% Change them to control the appearance of the index.
-
-\def\initial#1{{%
-  % Some minor font changes for the special characters.
-  \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
-  %
-  % Remove any glue we may have, we'll be inserting our own.
-  \removelastskip
-  % 
-  % We like breaks before the index initials, so insert a bonus.
-  \penalty -300
-  %
-  % Typeset the initial.  Making this add up to a whole number of
-  % baselineskips increases the chance of the dots lining up from column
-  % to column.  It still won't often be perfect, because of the stretch
-  % we need before each entry, but it's better.
-  % 
-  % No shrink because it confuses \balancecolumns.
-  \vskip 1.67\baselineskip plus .5\baselineskip
-  \leftline{\secbf #1}%
-  \vskip .33\baselineskip plus .1\baselineskip
-  %
-  % Do our best not to break after the initial.
-  \nobreak
-}}
-
-% This typesets a paragraph consisting of #1, dot leaders, and then #2
-% flush to the right margin.  It is used for index and table of contents
-% entries.  The paragraph is indented by \leftskip.
-%
-\def\entry#1#2{\begingroup
-  %
-  % Start a new paragraph if necessary, so our assignments below can't
-  % affect previous text.
-  \par
-  %
-  % Do not fill out the last line with white space.
-  \parfillskip = 0in
-  %
-  % No extra space above this paragraph.
-  \parskip = 0in
-  %
-  % Do not prefer a separate line ending with a hyphen to fewer lines.
-  \finalhyphendemerits = 0
-  %
-  % \hangindent is only relevant when the entry text and page number
-  % don't both fit on one line.  In that case, bob suggests starting the
-  % dots pretty far over on the line.  Unfortunately, a large
-  % indentation looks wrong when the entry text itself is broken across
-  % lines.  So we use a small indentation and put up with long leaders.
-  %
-  % \hangafter is reset to 1 (which is the value we want) at the start
-  % of each paragraph, so we need not do anything with that.
-  \hangindent = 2em
-  %
-  % When the entry text needs to be broken, just fill out the first line
-  % with blank space.
-  \rightskip = 0pt plus1fil
-  %
-  % A bit of stretch before each entry for the benefit of balancing columns.
-  \vskip 0pt plus1pt
-  %
-  % Start a ``paragraph'' for the index entry so the line breaking
-  % parameters we've set above will have an effect.
-  \noindent
-  %
-  % Insert the text of the index entry.  TeX will do line-breaking on it.
-  #1%
-  % The following is kludged to not output a line of dots in the index if
-  % there are no page numbers.  The next person who breaks this will be
-  % cursed by a Unix daemon.
-  \def\tempa{{\rm }}%
-  \def\tempb{#2}%
-  \edef\tempc{\tempa}%
-  \edef\tempd{\tempb}%
-  \ifx\tempc\tempd\ \else%
-    %
-    % If we must, put the page number on a line of its own, and fill out
-    % this line with blank space.  (The \hfil is overwhelmed with the
-    % fill leaders glue in \indexdotfill if the page number does fit.)
-    \hfil\penalty50
-    \null\nobreak\indexdotfill % Have leaders before the page number.
-    %
-    % The `\ ' here is removed by the implicit \unskip that TeX does as
-    % part of (the primitive) \par.  Without it, a spurious underfull
-    % \hbox ensues.
-    \ #2% The page number ends the paragraph.
-  \fi%
-  \par
-\endgroup}
-
-% Like \dotfill except takes at least 1 em.
-\def\indexdotfill{\cleaders
-  \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
-
-\def\primary #1{\line{#1\hfil}}
-
-\newskip\secondaryindent \secondaryindent=0.5cm
-
-\def\secondary #1#2{
-{\parfillskip=0in \parskip=0in
-\hangindent =1in \hangafter=1
-\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par
-}}
-
-% Define two-column mode, which we use to typeset indexes.
-% Adapted from the TeXbook, page 416, which is to say,
-% the manmac.tex format used to print the TeXbook itself.
-\catcode`\@=11
-
-\newbox\partialpage
-\newdimen\doublecolumnhsize
-
-\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
-  % Grab any single-column material above us.
-  \output = {\global\setbox\partialpage = \vbox{%
-    % 
-    % Here is a possibility not foreseen in manmac: if we accumulate a
-    % whole lot of material, we might end up calling this \output
-    % routine twice in a row (see the doublecol-lose test, which is
-    % essentially a couple of indexes with @setchapternewpage off).  In
-    % that case, we must prevent the second \partialpage from
-    % simply overwriting the first, causing us to lose the page.
-    % This will preserve it until a real output routine can ship it
-    % out.  Generally, \partialpage will be empty when this runs and
-    % this will be a no-op.
-    \unvbox\partialpage
-    %
-    % Unvbox the main output page.
-    \unvbox255
-    \kern-\topskip \kern\baselineskip
-  }}%
-  \eject % run that output routine to set \partialpage
-  %
-  % Use the double-column output routine for subsequent pages.
-  \output = {\doublecolumnout}%
-  %
-  % Change the page size parameters.  We could do this once outside this
-  % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
-  % format, but then we repeat the same computation.  Repeating a couple
-  % of assignments once per index is clearly meaningless for the
-  % execution time, so we may as well do it in one place.
-  %
-  % First we halve the line length, less a little for the gutter between
-  % the columns.  We compute the gutter based on the line length, so it
-  % changes automatically with the paper format.  The magic constant
-  % below is chosen so that the gutter has the same value (well, +-<1pt)
-  % as it did when we hard-coded it.
-  %
-  % We put the result in a separate register, \doublecolumhsize, so we
-  % can restore it in \pagesofar, after \hsize itself has (potentially)
-  % been clobbered.
-  %
-  \doublecolumnhsize = \hsize
-    \advance\doublecolumnhsize by -.04154\hsize
-    \divide\doublecolumnhsize by 2
-  \hsize = \doublecolumnhsize
-  %
-  % Double the \vsize as well.  (We don't need a separate register here,
-  % since nobody clobbers \vsize.)
-  \advance\vsize by -\ht\partialpage
-  \vsize = 2\vsize
-}
-
-% The double-column output routine for all double-column pages except
-% the last.
-% 
-\def\doublecolumnout{%
-  \splittopskip=\topskip \splitmaxdepth=\maxdepth
-  % Get the available space for the double columns -- the normal
-  % (undoubled) page height minus any material left over from the
-  % previous page.
-  \dimen@ = \vsize
-  \divide\dimen@ by 2
-  %
-  % box0 will be the left-hand column, box2 the right.
-  \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
-  \onepageout\pagesofar
-  \unvbox255
-  \penalty\outputpenalty
-}
-\def\pagesofar{%
-  % Re-output the contents of the output page -- any previous material,
-  % followed by the two boxes we just split, in box0 and box2.
-  \advance\vsize by \ht\partialpage
-  \unvbox\partialpage
-  %
-  \hsize = \doublecolumnhsize
-  \wd0=\hsize \wd2=\hsize
-  \hbox to\pagewidth{\box0\hfil\box2}%
-}
-\def\enddoublecolumns{%
-  \output = {%
-    % Split the last of the double-column material.  Leave it on the
-    % current page, no automatic page break.
-    \balancecolumns
-    %
-    % If we end up splitting too much material for the current page,
-    % though, there will be another page break right after this \output
-    % invocation ends.  Having called \balancecolumns once, we do not
-    % want to call it again.  Therefore, reset \output to its normal
-    % definition right away.  (We hope \balancecolumns will never be
-    % called on to balance too much material, but if it is, this makes
-    % the output somewhat more palatable.)
-    \global\output = {\onepageout{\pagecontents\PAGE}}%
-  }%
-  \eject
-  \endgroup % started in \begindoublecolumns
-  %
-  % \pagegoal was set to the doubled \vsize above, since we restarted
-  % the current page.  We're now back to normal single-column
-  % typesetting, so reset \pagegoal to the normal \vsize (after the
-  % \endgroup where \vsize got restored).
-  \pagegoal = \vsize
-}
-\def\balancecolumns{%
-  % Called at the end of the double column material.
-  \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
-  \dimen@ = \ht0
-  \advance\dimen@ by \topskip
-  \advance\dimen@ by-\baselineskip
-  \divide\dimen@ by 2 % target to split to
-  %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
-  \splittopskip = \topskip
-  % Loop until we get a decent breakpoint.
-  {%
-    \vbadness = 10000
-    \loop
-      \global\setbox3 = \copy0
-      \global\setbox1 = \vsplit3 to \dimen@
-    \ifdim\ht3>\dimen@
-      \global\advance\dimen@ by 1pt
-    \repeat
-  }%
-  %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
-  \setbox0=\vbox to\dimen@{\unvbox1}%
-  \setbox2=\vbox to\dimen@{\unvbox3}%
-  %
-  \pagesofar
-}
-\catcode`\@ = \other
-
-
-\message{sectioning,}
-% Define chapters, sections, etc.
-
-\newcount\chapno
-\newcount\secno        \secno=0
-\newcount\subsecno     \subsecno=0
-\newcount\subsubsecno  \subsubsecno=0
-
-% This counter is funny since it counts through charcodes of letters A, B, ...
-\newcount\appendixno  \appendixno = `\@
-\def\appendixletter{\char\the\appendixno}
-
-% Each @chapter defines this as the name of the chapter.
-% page headings and footings can use it.  @section does likewise.
-\def\thischapter{}
-\def\thissection{}
-
-\newcount\absseclevel % used to calculate proper heading level
-\newcount\secbase\secbase=0 % @raise/lowersections modify this count
-
-% @raisesections: treat @section as chapter, @subsection as section, etc.
-\def\raisesections{\global\advance\secbase by -1}
-\let\up=\raisesections % original BFox name
-
-% @lowersections: treat @chapter as section, @section as subsection, etc.
-\def\lowersections{\global\advance\secbase by 1}
-\let\down=\lowersections % original BFox name
-
-% Choose a numbered-heading macro
-% #1 is heading level if unmodified by @raisesections or @lowersections
-% #2 is text for heading
-\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
-  \chapterzzz{#2}
-\or
-  \seczzz{#2}
-\or
-  \numberedsubseczzz{#2}
-\or
-  \numberedsubsubseczzz{#2}
-\else
-  \ifnum \absseclevel<0
-    \chapterzzz{#2}
-  \else
-    \numberedsubsubseczzz{#2}
-  \fi
-\fi
-}
-
-% like \numhead, but chooses appendix heading levels
-\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
-  \appendixzzz{#2}
-\or
-  \appendixsectionzzz{#2}
-\or
-  \appendixsubseczzz{#2}
-\or
-  \appendixsubsubseczzz{#2}
-\else
-  \ifnum \absseclevel<0
-    \appendixzzz{#2}
-  \else
-    \appendixsubsubseczzz{#2}
-  \fi
-\fi
-}
-
-% like \numhead, but chooses numberless heading levels
-\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
-  \unnumberedzzz{#2}
-\or
-  \unnumberedseczzz{#2}
-\or
-  \unnumberedsubseczzz{#2}
-\or
-  \unnumberedsubsubseczzz{#2}
-\else
-  \ifnum \absseclevel<0
-    \unnumberedzzz{#2}
-  \else
-    \unnumberedsubsubseczzz{#2}
-  \fi
-\fi
-}
-
-% @chapter, @appendix, @unnumbered.
-\def\thischaptername{No Chapter Title}
-\outer\def\chapter{\parsearg\chapteryyy}
-\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
-\def\chapterzzz #1{%
-\secno=0 \subsecno=0 \subsubsecno=0
-\global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}%
-\chapmacro {#1}{\the\chapno}%
-\gdef\thissection{#1}%
-\gdef\thischaptername{#1}%
-% We don't substitute the actual chapter name into \thischapter
-% because we don't want its macros evaluated now.
-\xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
-                                  {\the\chapno}}}%
-\temp
-\donoderef
-\global\let\section = \numberedsec
-\global\let\subsection = \numberedsubsec
-\global\let\subsubsection = \numberedsubsubsec
-}
-
-\outer\def\appendix{\parsearg\appendixyyy}
-\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
-\def\appendixzzz #1{%
-\secno=0 \subsecno=0 \subsubsecno=0
-\global\advance \appendixno by 1
-\message{\putwordAppendix\space \appendixletter}%
-\chapmacro {#1}{\putwordAppendix{} \appendixletter}%
-\gdef\thissection{#1}%
-\gdef\thischaptername{#1}%
-\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
-                       {\putwordAppendix{} \appendixletter}}}%
-\temp
-\appendixnoderef
-\global\let\section = \appendixsec
-\global\let\subsection = \appendixsubsec
-\global\let\subsubsection = \appendixsubsubsec
-}
-
-% @centerchap is like @unnumbered, but the heading is centered.
-\outer\def\centerchap{\parsearg\centerchapyyy}
-\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
-
-% @top is like @unnumbered.
-\outer\def\top{\parsearg\unnumberedyyy}
-
-\outer\def\unnumbered{\parsearg\unnumberedyyy}
-\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
-\def\unnumberedzzz #1{%
-\secno=0 \subsecno=0 \subsubsecno=0
-%
-% This used to be simply \message{#1}, but TeX fully expands the
-% argument to \message.  Therefore, if #1 contained @-commands, TeX
-% expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
-% expanded @cite (which turns out to cause errors because \cite is meant
-% to be executed, not expanded).
-%
-% Anyway, we don't want the fully-expanded definition of @cite to appear
-% as a result of the \message, we just want `@cite' itself.  We use
-% \the<toks register> to achieve this: TeX expands \the<toks> only once,
-% simply yielding the contents of <toks register>.  (We also do this for
-% the toc entries.)
-\toks0 = {#1}\message{(\the\toks0)}%
-%
-\unnumbchapmacro {#1}%
-\gdef\thischapter{#1}\gdef\thissection{#1}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}%
-\temp
-\unnumbnoderef
-\global\let\section = \unnumberedsec
-\global\let\subsection = \unnumberedsubsec
-\global\let\subsubsection = \unnumberedsubsubsec
-}
-
-% Sections.
-\outer\def\numberedsec{\parsearg\secyyy}
-\def\secyyy #1{\numhead1{#1}} % normally calls seczzz
-\def\seczzz #1{%
-\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
-\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
-                                  {\the\chapno}{\the\secno}}}%
-\temp
-\donoderef
-\nobreak
-}
-
-\outer\def\appendixsection{\parsearg\appendixsecyyy}
-\outer\def\appendixsec{\parsearg\appendixsecyyy}
-\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
-\def\appendixsectionzzz #1{%
-\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
-\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
-                                  {\appendixletter}{\the\secno}}}%
-\temp
-\appendixnoderef
-\nobreak
-}
-
-\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
-\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
-\def\unnumberedseczzz #1{%
-\plainsecheading {#1}\gdef\thissection{#1}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}%
-\temp
-\unnumbnoderef
-\nobreak
-}
-
-% Subsections.
-\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
-\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
-\def\numberedsubseczzz #1{%
-\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
-\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
-                                    {\the\chapno}{\the\secno}{\the\subsecno}}}%
-\temp
-\donoderef
-\nobreak
-}
-
-\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
-\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
-\def\appendixsubseczzz #1{%
-\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
-\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
-                                {\appendixletter}{\the\secno}{\the\subsecno}}}%
-\temp
-\appendixnoderef
-\nobreak
-}
-
-\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
-\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
-\def\unnumberedsubseczzz #1{%
-\plainsubsecheading {#1}\gdef\thissection{#1}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%
-                                    {\the\toks0}}}%
-\temp
-\unnumbnoderef
-\nobreak
-}
-
-% Subsubsections.
-\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
-\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
-\def\numberedsubsubseczzz #1{%
-\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
-\subsubsecheading {#1}
-  {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
-  {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
-\temp
-\donoderef
-\nobreak
-}
-
-\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
-\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
-\def\appendixsubsubseczzz #1{%
-\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
-\subsubsecheading {#1}
-  {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
-  {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
-\temp
-\appendixnoderef
-\nobreak
-}
-
-\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
-\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
-\def\unnumberedsubsubseczzz #1{%
-\plainsubsubsecheading {#1}\gdef\thissection{#1}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%
-                                    {\the\toks0}}}%
-\temp
-\unnumbnoderef
-\nobreak
-}
-
-% These are variants which are not "outer", so they can appear in @ifinfo.
-% Actually, they should now be obsolete; ordinary section commands should work.
-\def\infotop{\parsearg\unnumberedzzz}
-\def\infounnumbered{\parsearg\unnumberedzzz}
-\def\infounnumberedsec{\parsearg\unnumberedseczzz}
-\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz}
-\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
-
-\def\infoappendix{\parsearg\appendixzzz}
-\def\infoappendixsec{\parsearg\appendixseczzz}
-\def\infoappendixsubsec{\parsearg\appendixsubseczzz}
-\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}
-
-\def\infochapter{\parsearg\chapterzzz}
-\def\infosection{\parsearg\sectionzzz}
-\def\infosubsection{\parsearg\subsectionzzz}
-\def\infosubsubsection{\parsearg\subsubsectionzzz}
-
-% These macros control what the section commands do, according
-% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
-% Define them by default for a numbered chapter.
-\global\let\section = \numberedsec
-\global\let\subsection = \numberedsubsec
-\global\let\subsubsection = \numberedsubsubsec
-
-% Define @majorheading, @heading and @subheading
-
-% NOTE on use of \vbox for chapter headings, section headings, and such:
-%       1) We use \vbox rather than the earlier \line to permit
-%          overlong headings to fold.
-%       2) \hyphenpenalty is set to 10000 because hyphenation in a
-%          heading is obnoxious; this forbids it.
-%       3) Likewise, headings look best if no \parindent is used, and
-%          if justification is not attempted.  Hence \raggedright.
-
-
-\def\majorheading{\parsearg\majorheadingzzz}
-\def\majorheadingzzz #1{%
-{\advance\chapheadingskip by 10pt \chapbreak }%
-{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                  \parindent=0pt\raggedright
-                  \rm #1\hfill}}\bigskip \par\penalty 200}
-
-\def\chapheading{\parsearg\chapheadingzzz}
-\def\chapheadingzzz #1{\chapbreak %
-{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                  \parindent=0pt\raggedright
-                  \rm #1\hfill}}\bigskip \par\penalty 200}
-
-% @heading, @subheading, @subsubheading.
-\def\heading{\parsearg\plainsecheading}
-\def\subheading{\parsearg\plainsubsecheading}
-\def\subsubheading{\parsearg\plainsubsubsecheading}
-
-% These macros generate a chapter, section, etc. heading only
-% (including whitespace, linebreaking, etc. around it),
-% given all the information in convenient, parsed form.
-
-%%% Args are the skip and penalty (usually negative)
-\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
-
-\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
-
-%%% Define plain chapter starts, and page on/off switching for it
-% Parameter controlling skip before chapter headings (if needed)
-
-\newskip\chapheadingskip
-
-\def\chapbreak{\dobreak \chapheadingskip {-4000}}
-\def\chappager{\par\vfill\supereject}
-\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
-
-\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
-
-\def\CHAPPAGoff{%
-\global\let\contentsalignmacro = \chappager
-\global\let\pchapsepmacro=\chapbreak
-\global\let\pagealignmacro=\chappager}
-
-\def\CHAPPAGon{%
-\global\let\contentsalignmacro = \chappager
-\global\let\pchapsepmacro=\chappager
-\global\let\pagealignmacro=\chappager
-\global\def\HEADINGSon{\HEADINGSsingle}}
-
-\def\CHAPPAGodd{
-\global\let\contentsalignmacro = \chapoddpage
-\global\let\pchapsepmacro=\chapoddpage
-\global\let\pagealignmacro=\chapoddpage
-\global\def\HEADINGSon{\HEADINGSdouble}}
-
-\CHAPPAGon
-
-\def\CHAPFplain{
-\global\let\chapmacro=\chfplain
-\global\let\unnumbchapmacro=\unnchfplain
-\global\let\centerchapmacro=\centerchfplain}
-
-% Plain chapter opening.
-% #1 is the text, #2 the chapter number or empty if unnumbered.
-\def\chfplain#1#2{%
-  \pchapsepmacro
-  {%
-    \chapfonts \rm
-    \def\chapnum{#2}%
-    \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}%
-    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
-          \hangindent = \wd0 \centerparametersmaybe
-          \unhbox0 #1\par}%
-  }%
-  \nobreak\bigskip % no page break after a chapter title
-  \nobreak
-}
-
-% Plain opening for unnumbered.
-\def\unnchfplain#1{\chfplain{#1}{}}
-
-% @centerchap -- centered and unnumbered.
-\let\centerparametersmaybe = \relax
-\def\centerchfplain#1{{%
-  \def\centerparametersmaybe{%
-    \advance\rightskip by 3\rightskip
-    \leftskip = \rightskip
-    \parfillskip = 0pt
-  }%
-  \chfplain{#1}{}%
-}}
-
-\CHAPFplain % The default
-
-\def\unnchfopen #1{%
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                       \parindent=0pt\raggedright
-                       \rm #1\hfill}}\bigskip \par\nobreak
-}
-
-\def\chfopen #1#2{\chapoddpage {\chapfonts
-\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
-\par\penalty 5000 %
-}
-
-\def\centerchfopen #1{%
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                       \parindent=0pt
-                       \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
-}
-
-\def\CHAPFopen{
-\global\let\chapmacro=\chfopen
-\global\let\unnumbchapmacro=\unnchfopen
-\global\let\centerchapmacro=\centerchfopen}
-
-
-% Section titles.
-\newskip\secheadingskip
-\def\secheadingbreak{\dobreak \secheadingskip {-1000}}
-\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}}
-\def\plainsecheading#1{\sectionheading{sec}{}{#1}}
-
-% Subsection titles.
-\newskip \subsecheadingskip
-\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
-\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}}
-\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}}
-
-% Subsubsection titles.
-\let\subsubsecheadingskip = \subsecheadingskip
-\let\subsubsecheadingbreak = \subsecheadingbreak
-\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}}
-\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}}
-
-
-% Print any size section title.
-%
-% #1 is the section type (sec/subsec/subsubsec), #2 is the section
-% number (maybe empty), #3 the text.
-\def\sectionheading#1#2#3{%
-  {%
-    \expandafter\advance\csname #1headingskip\endcsname by \parskip
-    \csname #1headingbreak\endcsname
-  }%
-  {%
-    % Switch to the right set of fonts.
-    \csname #1fonts\endcsname \rm
-    %
-    % Only insert the separating space if we have a section number.
-    \def\secnum{#2}%
-    \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}%
-    %
-    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
-          \hangindent = \wd0 % zero if no section number
-          \unhbox0 #3}%
-  }%
-  \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak
-}
-
-
-\message{toc,}
-\newwrite\tocfile
-
-% Write an entry to the toc file, opening it if necessary.
-% Called from @chapter, etc.  We supply {\folio} at the end of the
-% argument, which will end up as the last argument to the \...entry macro.
-% 
-% We open the .toc file here instead of at @setfilename or any other
-% given time so that @contents can be put in the document anywhere.
-% 
-\newif\iftocfileopened
-\def\writetocentry#1{%
-  \iftocfileopened\else
-    \immediate\openout\tocfile = \jobname.toc
-    \global\tocfileopenedtrue
-  \fi
-  \iflinks \write\tocfile{#1{\folio}}\fi
-}
-
-\newskip\contentsrightmargin \contentsrightmargin=1in
-\newcount\savepageno
-\newcount\lastnegativepageno \lastnegativepageno = -1
-
-% Finish up the main text and prepare to read what we've written
-% to \tocfile.
-% 
-\def\startcontents#1{%
-   % If @setchapternewpage on, and @headings double, the contents should
-   % start on an odd page, unlike chapters.  Thus, we maintain
-   % \contentsalignmacro in parallel with \pagealignmacro.
-   % From: Torbjorn Granlund <[email protected]>
-   \contentsalignmacro
-   \immediate\closeout\tocfile
-   %
-   % Don't need to put `Contents' or `Short Contents' in the headline.
-   % It is abundantly clear what they are.
-   \unnumbchapmacro{#1}\def\thischapter{}%
-   \savepageno = \pageno
-   \begingroup                  % Set up to handle contents files properly.
-      \catcode`\\=0  \catcode`\{=1  \catcode`\}=2  \catcode`\@=11
-      % We can't do this, because then an actual ^ in a section
-      % title fails, e.g., @chapter ^ -- exponentiation.  --karl, 9jul97.
-      %\catcode`\^=7 % to see ^^e4 as \"a etc. [email protected]
-      \raggedbottom             % Worry more about breakpoints than the bottom.
-      \advance\hsize by -\contentsrightmargin % Don't use the full line length.
-      %
-      % Roman numerals for page numbers.
-      \ifnum \pageno>0 \pageno = \lastnegativepageno \fi
-}
-
-
-% Normal (long) toc.
-\def\contents{%
-   \startcontents{\putwordTableofContents}%
-     \openin 1 \jobname.toc
-     \ifeof 1 \else
-       \closein 1
-       \input \jobname.toc
-     \fi
-     \vfill \eject
-   \endgroup
-   \lastnegativepageno = \pageno
-   \pageno = \savepageno
-}
-
-% And just the chapters.
-\def\summarycontents{%
-   \startcontents{\putwordShortContents}%
-      %
-      \let\chapentry = \shortchapentry
-      \let\unnumbchapentry = \shortunnumberedentry
-      % We want a true roman here for the page numbers.
-      \secfonts
-      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl
-      \rm
-      \hyphenpenalty = 10000
-      \advance\baselineskip by 1pt % Open it up a little.
-      \def\secentry ##1##2##3##4{}
-      \def\unnumbsecentry ##1##2{}
-      \def\subsecentry ##1##2##3##4##5{}
-      \def\unnumbsubsecentry ##1##2{}
-      \def\subsubsecentry ##1##2##3##4##5##6{}
-      \def\unnumbsubsubsecentry ##1##2{}
-      \openin 1 \jobname.toc
-      \ifeof 1 \else
-        \closein 1
-        \input \jobname.toc
-      \fi
-     \vfill \eject
-   \endgroup
-   \lastnegativepageno = \pageno
-   \pageno = \savepageno
-}
-\let\shortcontents = \summarycontents
-
-% These macros generate individual entries in the table of contents.
-% The first argument is the chapter or section name.
-% The last argument is the page number.
-% The arguments in between are the chapter number, section number, ...
-
-% Chapter-level things, for both the long and short contents.
-\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
-
-% See comments in \dochapentry re vbox and related settings
-\def\shortchapentry#1#2#3{%
-  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}%
-}
-
-% Typeset the label for a chapter or appendix for the short contents.
-% The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter.
-% We could simplify the code here by writing out an \appendixentry
-% command in the toc file for appendices, instead of using \chapentry
-% for both, but it doesn't seem worth it.
-\setbox0 = \hbox{\shortcontrm \putwordAppendix }
-\newdimen\shortappendixwidth \shortappendixwidth = \wd0
-
-\def\shortchaplabel#1{%
-  % We typeset #1 in a box of constant width, regardless of the text of
-  % #1, so the chapter titles will come out aligned.
-  \setbox0 = \hbox{#1}%
-  \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi
-  %
-  % This space should be plenty, since a single number is .5em, and the
-  % widest letter (M) is 1em, at least in the Computer Modern fonts.
-  % (This space doesn't include the extra space that gets added after
-  % the label; that gets put in by \shortchapentry above.)
-  \advance\dimen0 by 1.1em
-  \hbox to \dimen0{#1\hfil}%
-}
-
-\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
-\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}}
-
-% Sections.
-\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
-\def\unnumbsecentry#1#2{\dosecentry{#1}{#2}}
-
-% Subsections.
-\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
-\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}}
-
-% And subsubsections.
-\def\subsubsecentry#1#2#3#4#5#6{%
-  \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
-\def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}
-
-% This parameter controls the indentation of the various levels.
-\newdimen\tocindent \tocindent = 3pc
-
-% Now for the actual typesetting. In all these, #1 is the text and #2 is the
-% page number.
-%
-% If the toc has to be broken over pages, we want it to be at chapters
-% if at all possible; hence the \penalty.
-\def\dochapentry#1#2{%
-   \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
-   \begingroup
-     \chapentryfonts
-     \tocentry{#1}{\dopageno{#2}}%
-   \endgroup
-   \nobreak\vskip .25\baselineskip plus.1\baselineskip
-}
-
-\def\dosecentry#1#2{\begingroup
-  \secentryfonts \leftskip=\tocindent
-  \tocentry{#1}{\dopageno{#2}}%
-\endgroup}
-
-\def\dosubsecentry#1#2{\begingroup
-  \subsecentryfonts \leftskip=2\tocindent
-  \tocentry{#1}{\dopageno{#2}}%
-\endgroup}
-
-\def\dosubsubsecentry#1#2{\begingroup
-  \subsubsecentryfonts \leftskip=3\tocindent
-  \tocentry{#1}{\dopageno{#2}}%
-\endgroup}
-
-% Final typesetting of a toc entry; we use the same \entry macro as for
-% the index entries, but we want to suppress hyphenation here.  (We
-% can't do that in the \entry macro, since index entries might consist
-% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
-\def\tocentry#1#2{\begingroup
-  \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
-  % Do not use \turnoffactive in these arguments.  Since the toc is
-  % typeset in cmr, so characters such as _ would come out wrong; we
-  % have to do the usual translation tricks.
-  \entry{#1}{#2}%
-\endgroup}
-
-% Space between chapter (or whatever) number and the title.
-\def\labelspace{\hskip1em \relax}
-
-\def\dopageno#1{{\rm #1}}
-\def\doshortpageno#1{{\rm #1}}
-
-\def\chapentryfonts{\secfonts \rm}
-\def\secentryfonts{\textfonts}
-\let\subsecentryfonts = \textfonts
-\let\subsubsecentryfonts = \textfonts
-
-
-\message{environments,}
-
-% Since these characters are used in examples, it should be an even number of
-% \tt widths. Each \tt character is 1en, so two makes it 1em.
-% Furthermore, these definitions must come after we define our fonts.
-\newbox\dblarrowbox    \newbox\longdblarrowbox
-\newbox\pushcharbox    \newbox\bullbox
-\newbox\equivbox       \newbox\errorbox
-
-%{\tentt
-%\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}
-%\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}
-%\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil}
-%\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil}
-% Adapted from the manmac format (p.420 of TeXbook)
-%\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex
-%                                      depth .1ex\hfil}
-%}
-
-% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
-\def\point{$\star$}
-\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
-\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
-\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
-\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
-
-% Adapted from the TeXbook's \boxit.
-{\tentt \global\dimen0 = 3em}% Width of the box.
-\dimen2 = .55pt % Thickness of rules
-% The text. (`r' is open on the right, `e' somewhat less so on the left.)
-\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
-
-\global\setbox\errorbox=\hbox to \dimen0{\hfil
-   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
-   \advance\hsize by -2\dimen2 % Rules.
-   \vbox{
-      \hrule height\dimen2
-      \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
-         \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
-         \kern3pt\vrule width\dimen2}% Space to right.
-      \hrule height\dimen2}
-    \hfil}
-
-% The @error{} command.
-\def\error{\leavevmode\lower.7ex\copy\errorbox}
-
-% @tex ... @end tex    escapes into raw Tex temporarily.
-% One exception: @ is still an escape character, so that @end tex works.
-% But \@ or @@ will get a plain tex @ character.
-
-\def\tex{\begingroup
-  \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
-  \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
-  \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
-  \catcode `\%=14
-  \catcode 43=12 % plus
-  \catcode`\"=12
-  \catcode`\==12
-  \catcode`\|=12
-  \catcode`\<=12
-  \catcode`\>=12
-  \escapechar=`\\
-  %
-  \let\b=\ptexb
-  \let\bullet=\ptexbullet
-  \let\c=\ptexc
-  \let\,=\ptexcomma
-  \let\.=\ptexdot
-  \let\dots=\ptexdots
-  \let\equiv=\ptexequiv
-  \let\!=\ptexexclam
-  \let\i=\ptexi
-  \let\{=\ptexlbrace
-  \let\+=\tabalign
-  \let\}=\ptexrbrace
-  \let\*=\ptexstar
-  \let\t=\ptext
-  %
-  \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
-  \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
-  \def\@{@}%
-\let\Etex=\endgroup}
-
-% Define @lisp ... @endlisp.
-% @lisp does a \begingroup so it can rebind things,
-% including the definition of @endlisp (which normally is erroneous).
-
-% Amount to narrow the margins by for @lisp.
-\newskip\lispnarrowing \lispnarrowing=0.4in
-
-% This is the definition that ^^M gets inside @lisp, @example, and other
-% such environments.  \null is better than a space, since it doesn't
-% have any width.
-\def\lisppar{\null\endgraf}
-
-% Make each space character in the input produce a normal interword
-% space in the output.  Don't allow a line break at this space, as this
-% is used only in environments like @example, where each line of input
-% should produce a line of output anyway.
-%
-{\obeyspaces %
-\gdef\sepspaces{\obeyspaces\let =\tie}}
-
-% Define \obeyedspace to be our active space, whatever it is.  This is
-% for use in \parsearg.
-{\sepspaces%
-\global\let\obeyedspace= }
-
-% This space is always present above and below environments.
-\newskip\envskipamount \envskipamount = 0pt
-
-% Make spacing and below environment symmetrical.  We use \parskip here
-% to help in doing that, since in @example-like environments \parskip
-% is reset to zero; thus the \afterenvbreak inserts no space -- but the
-% start of the next paragraph will insert \parskip
-%
-\def\aboveenvbreak{{\advance\envskipamount by \parskip
-\endgraf \ifdim\lastskip<\envskipamount
-\removelastskip \penalty-50 \vskip\envskipamount \fi}}
-
-\let\afterenvbreak = \aboveenvbreak
-
-% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins.
-\let\nonarrowing=\relax
-
-% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
-% environment contents.
-\font\circle=lcircle10
-\newdimen\circthick
-\newdimen\cartouter\newdimen\cartinner
-\newskip\normbskip\newskip\normpskip\newskip\normlskip
-\circthick=\fontdimen8\circle
-%
-\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
-\def\ctr{{\hskip 6pt\circle\char'010}}
-\def\cbl{{\circle\char'012\hskip -6pt}}
-\def\cbr{{\hskip 6pt\circle\char'011}}
-\def\carttop{\hbox to \cartouter{\hskip\lskip
-        \ctl\leaders\hrule height\circthick\hfil\ctr
-        \hskip\rskip}}
-\def\cartbot{\hbox to \cartouter{\hskip\lskip
-        \cbl\leaders\hrule height\circthick\hfil\cbr
-        \hskip\rskip}}
-%
-\newskip\lskip\newskip\rskip
-
-\long\def\cartouche{%
-\begingroup
-        \lskip=\leftskip \rskip=\rightskip
-        \leftskip=0pt\rightskip=0pt %we want these *outside*.
-        \cartinner=\hsize \advance\cartinner by-\lskip
-                          \advance\cartinner by-\rskip
-        \cartouter=\hsize
-        \advance\cartouter by 18.4pt % allow for 3pt kerns on either
-%                                    side, and for 6pt waste from
-%                                    each corner char, and rule thickness
-        \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
-        % Flag to tell @lisp, etc., not to narrow margin.
-        \let\nonarrowing=\comment
-        \vbox\bgroup
-                \baselineskip=0pt\parskip=0pt\lineskip=0pt
-                \carttop
-                \hbox\bgroup
-                        \hskip\lskip
-                        \vrule\kern3pt
-                        \vbox\bgroup
-                                \hsize=\cartinner
-                                \kern3pt
-                                \begingroup
-                                        \baselineskip=\normbskip
-                                        \lineskip=\normlskip
-                                        \parskip=\normpskip
-                                        \vskip -\parskip
-\def\Ecartouche{%
-                                \endgroup
-                                \kern3pt
-                        \egroup
-                        \kern3pt\vrule
-                        \hskip\rskip
-                \egroup
-                \cartbot
-        \egroup
-\endgroup
-}}
-
-
-% This macro is called at the beginning of all the @example variants,
-% inside a group.
-\def\nonfillstart{%
-  \aboveenvbreak
-  \inENV % This group ends at the end of the body
-  \hfuzz = 12pt % Don't be fussy
-  \sepspaces % Make spaces be word-separators rather than space tokens.
-  \singlespace
-  \let\par = \lisppar % don't ignore blank lines
-  \obeylines % each line of input is a line of output
-  \parskip = 0pt
-  \parindent = 0pt
-  \emergencystretch = 0pt % don't try to avoid overfull boxes
-  % @cartouche defines \nonarrowing to inhibit narrowing
-  % at next level down.
-  \ifx\nonarrowing\relax
-    \advance \leftskip by \lispnarrowing
-    \exdentamount=\lispnarrowing
-    \let\exdent=\nofillexdent
-    \let\nonarrowing=\relax
-  \fi
-}
-
-% Define the \E... control sequence only if we are inside the particular
-% environment, so the error checking in \end will work.
-% 
-% To end an @example-like environment, we first end the paragraph (via
-% \afterenvbreak's vertical glue), and then the group.  That way we keep
-% the zero \parskip that the environments set -- \parskip glue will be
-% inserted at the beginning of the next paragraph in the document, after
-% the environment.
-%
-\def\nonfillfinish{\afterenvbreak\endgroup}
-
-% @lisp: indented, narrowed, typewriter font.
-\def\lisp{\begingroup
-  \nonfillstart
-  \let\Elisp = \nonfillfinish
-  \tt
-  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
-  \gobble       % eat return
-}
-
-% @example: Same as @lisp.
-\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
-
-% @small... is usually equivalent to the non-small (@smallbook
-% redefines).  We must call \example (or whatever) last in the
-% definition, since it reads the return following the @example (or
-% whatever) command.
-% 
-% This actually allows (for example) @end display inside an
-% @smalldisplay.  Too bad, but makeinfo will catch the error anyway.
-%
-\def\smalldisplay{\begingroup\def\Esmalldisplay{\nonfillfinish\endgroup}\display}
-\def\smallexample{\begingroup\def\Esmallexample{\nonfillfinish\endgroup}\lisp}
-\def\smallformat{\begingroup\def\Esmallformat{\nonfillfinish\endgroup}\format}
-\def\smalllisp{\begingroup\def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
-
-% Real @smallexample and @smalllisp (when @smallbook): use smaller fonts.
-% Originally contributed by Pavel@xerox.
-\def\smalllispx{\begingroup
-  \def\Esmalllisp{\nonfillfinish\endgroup}%
-  \def\Esmallexample{\nonfillfinish\endgroup}%
-  \indexfonts
-  \lisp
-}
-
-% @display: same as @lisp except keep current font.
-%
-\def\display{\begingroup
-  \nonfillstart
-  \let\Edisplay = \nonfillfinish
-  \gobble
-}
-
-% @smalldisplay (when @smallbook): @display plus smaller fonts.
-%
-\def\smalldisplayx{\begingroup
-  \def\Esmalldisplay{\nonfillfinish\endgroup}%
-  \indexfonts \rm
-  \display
-}
-
-% @format: same as @display except don't narrow margins.
-%
-\def\format{\begingroup
-  \let\nonarrowing = t
-  \nonfillstart
-  \let\Eformat = \nonfillfinish
-  \gobble
-}
-
-% @smallformat (when @smallbook): @format plus smaller fonts.
-%
-\def\smallformatx{\begingroup
-  \def\Esmallformat{\nonfillfinish\endgroup}%
-  \indexfonts \rm
-  \format
-}
-
-% @flushleft (same as @format).
-%
-\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format}
-
-% @flushright.
-% 
-\def\flushright{\begingroup
-  \let\nonarrowing = t
-  \nonfillstart
-  \let\Eflushright = \nonfillfinish
-  \advance\leftskip by 0pt plus 1fill
-  \gobble
-}
-
-% @quotation does normal linebreaking (hence we can't use \nonfillstart)
-% and narrows the margins.
-%
-\def\quotation{%
-  \begingroup\inENV %This group ends at the end of the @quotation body
-  {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
-  \singlespace
-  \parindent=0pt
-  % We have retained a nonzero parskip for the environment, since we're
-  % doing normal filling. So to avoid extra space below the environment...
-  \def\Equotation{\parskip = 0pt \nonfillfinish}%
-  %
-  % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
-  \ifx\nonarrowing\relax
-    \advance\leftskip by \lispnarrowing
-    \advance\rightskip by \lispnarrowing
-    \exdentamount = \lispnarrowing
-    \let\nonarrowing = \relax
-  \fi
-}
-
-
-\message{defuns,}
-% Define formatter for defuns
-% First, allow user to change definition object font (\df) internally
-\def\setdeffont #1 {\csname DEF#1\endcsname}
-
-\newskip\defbodyindent \defbodyindent=.4in
-\newskip\defargsindent \defargsindent=50pt
-\newskip\deftypemargin \deftypemargin=12pt
-\newskip\deflastargmargin \deflastargmargin=18pt
-
-\newcount\parencount
-% define \functionparens, which makes ( and ) and & do special things.
-% \functionparens affects the group it is contained in.
-\def\activeparens{%
-\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active
-\catcode`\[=\active \catcode`\]=\active}
-
-% Make control sequences which act like normal parenthesis chars.
-\let\lparen = ( \let\rparen = )
-
-{\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
-
-% Be sure that we always have a definition for `(', etc.  For example,
-% if the fn name has parens in it, \boldbrax will not be in effect yet,
-% so TeX would otherwise complain about undefined control sequence.
-\global\let(=\lparen \global\let)=\rparen
-\global\let[=\lbrack \global\let]=\rbrack
-
-\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
-\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
-% This is used to turn on special parens
-% but make & act ordinary (given that it's active).
-\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr}
-
-% Definitions of (, ) and & used in args for functions.
-% This is the definition of ( outside of all parentheses.
-\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested
-  \global\advance\parencount by 1
-}
-%
-% This is the definition of ( when already inside a level of parens.
-\gdef\opnested{\char`\(\global\advance\parencount by 1 }
-%
-\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
-  % also in that case restore the outer-level definition of (.
-  \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
-  \global\advance \parencount by -1 }
-% If we encounter &foo, then turn on ()-hacking afterwards
-\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
-%
-\gdef\normalparens{\boldbrax\let&=\ampnr}
-} % End of definition inside \activeparens
-%% These parens (in \boldbrax) actually are a little bolder than the
-%% contained text.  This is especially needed for [ and ]
-\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
-\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
-\def\ampnr{\&}
-\def\lbrb{{\bf\char`\[}}
-\def\rbrb{{\bf\char`\]}}
-
-% First, defname, which formats the header line itself.
-% #1 should be the function name.
-% #2 should be the type of definition, such as "Function".
-
-\def\defname #1#2{%
-% Get the values of \leftskip and \rightskip as they were
-% outside the @def...
-\dimen2=\leftskip
-\advance\dimen2 by -\defbodyindent
-\noindent
-\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
-\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
-\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
-\parshape 2 0in \dimen0 \defargsindent \dimen1
-% Now output arg 2 ("Function" or some such)
-% ending at \deftypemargin from the right margin,
-% but stuck inside a box of width 0 so it does not interfere with linebreaking
-{% Adjust \hsize to exclude the ambient margins,
-% so that \rightline will obey them.
-\advance \hsize by -\dimen2
-\rlap{\rightline{{\rm #2}\hskip -1.25pc }}}%
-% Make all lines underfull and no complaints:
-\tolerance=10000 \hbadness=10000
-\advance\leftskip by -\defbodyindent
-\exdentamount=\defbodyindent
-{\df #1}\enskip        % Generate function name
-}
-
-% Actually process the body of a definition
-% #1 should be the terminating control sequence, such as \Edefun.
-% #2 should be the "another name" control sequence, such as \defunx.
-% #3 should be the control sequence that actually processes the header,
-%    such as \defunheader.
-
-\def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
-\parindent=0in
-\advance\leftskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup %
-\catcode 61=\active % 61 is `='
-\obeylines\activeparens\spacesplit#3}
-
-% #1 is the \E... control sequence to end the definition (which we define).
-% #2 is the \...x control sequence for consecutive fns (which we define).
-% #3 is the control sequence to call to resume processing.
-% #4, delimited by the space, is the class name.
-% 
-\def\defmethparsebody#1#2#3#4 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
-
-% @deftypemethod has an extra argument that nothing else does.  Sigh.
-% #1 is the \E... control sequence to end the definition (which we define).
-% #2 is the \...x control sequence for consecutive fns (which we define).
-% #3 is the control sequence to call to resume processing.
-% #4, delimited by the space, is the class name.
-% #5 is the method's return type.
-% 
-\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}}
-
-\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 ##2 {\def#4{##1}%
-\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\activeparens\spacesplit{#3{#5}}}
-
-% These parsing functions are similar to the preceding ones
-% except that they do not make parens into active characters.
-% These are used for "variables" since they have no arguments.
-
-\def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2{\begingroup\obeylines\spacesplit#3}%
-\parindent=0in
-\advance\leftskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup %
-\catcode 61=\active %
-\obeylines\spacesplit#3}
-
-% This is used for \def{tp,vr}parsebody.  It could probably be used for
-% some of the others, too, with some judicious conditionals.
-%
-\def\parsebodycommon#1#2#3{%
-  \begingroup\inENV %
-  \medbreak %
-  % Define the end token that this defining construct specifies
-  % so that it will exit this group.
-  \def#1{\endgraf\endgroup\medbreak}%
-  \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
-  \parindent=0in
-  \advance\leftskip by \defbodyindent
-  \exdentamount=\defbodyindent
-  \begingroup\obeylines
-}
-
-\def\defvrparsebody#1#2#3#4 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \spacesplit{#3{#4}}%
-}
-
-% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the
-% type is just `struct', because we lose the braces in `{struct
-% termios}' when \spacesplit reads its undelimited argument.  Sigh.
-% \let\deftpparsebody=\defvrparsebody
-%
-% So, to get around this, we put \empty in with the type name.  That
-% way, TeX won't find exactly `{...}' as an undelimited argument, and
-% won't strip off the braces.
-%
-\def\deftpparsebody #1#2#3#4 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \spacesplit{\parsetpheaderline{#3{#4}}}\empty
-}
-
-% Fine, but then we have to eventually remove the \empty *and* the
-% braces (if any).  That's what this does.
-%
-\def\removeemptybraces\empty#1\relax{#1}
-
-% After \spacesplit has done its work, this is called -- #1 is the final
-% thing to call, #2 the type name (which starts with \empty), and #3
-% (which might be empty) the arguments.
-%
-\def\parsetpheaderline#1#2#3{%
-  #1{\removeemptybraces#2\relax}{#3}%
-}%
-
-\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 ##2 {\def#4{##1}%
-\begingroup\obeylines\spacesplit{#3{##2}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\spacesplit{#3{#5}}}
-
-% Split up #2 at the first space token.
-% call #1 with two arguments:
-%  the first is all of #2 before the space token,
-%  the second is all of #2 after that space token.
-% If #2 contains no space token, all of it is passed as the first arg
-% and the second is passed as empty.
-
-{\obeylines
-\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
-\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
-\ifx\relax #3%
-#1{#2}{}\else #1{#2}{#3#4}\fi}}
-
-% So much for the things common to all kinds of definitions.
-
-% Define @defun.
-
-% First, define the processing that is wanted for arguments of \defun
-% Use this to expand the args and terminate the paragraph they make up
-
-\def\defunargs #1{\functionparens \sl
-% Expand, preventing hyphenation at `-' chars.
-% Note that groups don't affect changes in \hyphenchar.
-\hyphenchar\tensl=0
-#1%
-\hyphenchar\tensl=45
-\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
-\interlinepenalty=10000
-\advance\rightskip by 0pt plus 1fil
-\endgraf\nobreak\vskip -\parskip\nobreak
-}
-
-\def\deftypefunargs #1{%
-% Expand, preventing hyphenation at `-' chars.
-% Note that groups don't affect changes in \hyphenchar.
-% Use \boldbraxnoamp, not \functionparens, so that & is not special.
-\boldbraxnoamp
-\tclose{#1}% avoid \code because of side effects on active chars
-\interlinepenalty=10000
-\advance\rightskip by 0pt plus 1fil
-\endgraf\nobreak\vskip -\parskip\nobreak
-}
-
-% Do complete processing of one @defun or @defunx line already parsed.
-
-% @deffn Command forward-char nchars
-
-\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}
-
-\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @defun == @deffn Function
-
-\def\defun{\defparsebody\Edefun\defunx\defunheader}
-
-\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Function}%
-\defunargs {#2}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @deftypefun int foobar (int @var{foo}, float @var{bar})
-
-\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}
-
-% #1 is the data type.  #2 is the name and args.
-\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax}
-% #1 is the data type, #2 the name, #3 the args.
-\def\deftypefunheaderx #1#2 #3\relax{%
-\doind {fn}{\code{#2}}% Make entry in function index
-\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}%
-\deftypefunargs {#3}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
-
-\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
-
-% \defheaderxcond#1\relax$$$
-% puts #1 in @code, followed by a space, but does nothing if #1 is null.
-\def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi}
-
-% #1 is the classification.  #2 is the data type.  #3 is the name and args.
-\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
-% #1 is the classification, #2 the data type, #3 the name, #4 the args.
-\def\deftypefnheaderx #1#2#3 #4\relax{%
-\doind {fn}{\code{#3}}% Make entry in function index
-\begingroup
-\normalparens % notably, turn off `&' magic, which prevents
-%               at least some C++ text from working
-\defname {\defheaderxcond#2\relax$$$#3}{#1}%
-\deftypefunargs {#4}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @defmac == @deffn Macro
-
-\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
-
-\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Macro}%
-\defunargs {#2}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @defspec == @deffn Special Form
-
-\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
-
-\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Special Form}%
-\defunargs {#2}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% This definition is run if you use @defunx
-% anywhere other than immediately after a @defun or @defunx.
-
-\def\deffnx #1 {\errmessage{@deffnx in invalid context}}
-\def\defunx #1 {\errmessage{@defunx in invalid context}}
-\def\defmacx #1 {\errmessage{@defmacx in invalid context}}
-\def\defspecx #1 {\errmessage{@defspecx in invalid context}}
-\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}}
-\def\deftypemethodx #1 {\errmessage{@deftypemethodx in invalid context}}
-\def\deftypefunx #1 {\errmessage{@deftypefunx in invalid context}}
-
-% @defmethod, and so on
-
-% @defop CATEGORY CLASS OPERATION ARG...
-
-\def\defop #1 {\def\defoptype{#1}%
-\defopparsebody\Edefop\defopx\defopheader\defoptype}
-
-\def\defopheader #1#2#3{%
-\dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index
-\begingroup\defname {#2}{\defoptype{} on #1}%
-\defunargs {#3}\endgroup %
-}
-
-% @deftypemethod CLASS RETURN-TYPE METHOD ARG...
-%
-\def\deftypemethod{%
-  \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
-%
-% #1 is the class name, #2 the data type, #3 the method name, #4 the args.
-\def\deftypemethodheader#1#2#3#4{%
-  \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
-  \begingroup
-    \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}%
-    \deftypefunargs{#4}%
-  \endgroup
-}
-
-% @defmethod == @defop Method
-%
-\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
-%
-% #1 is the class name, #2 the method name, #3 the args.
-\def\defmethodheader#1#2#3{%
-  \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index
-  \begingroup
-    \defname{#2}{\putwordMethodon\ \code{#1}}%
-    \defunargs{#3}%
-  \endgroup
-}
-
-% @defcv {Class Option} foo-class foo-flag
-
-\def\defcv #1 {\def\defcvtype{#1}%
-\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
-
-\def\defcvarheader #1#2#3{%
-\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
-\begingroup\defname {#2}{\defcvtype{} of #1}%
-\defvarargs {#3}\endgroup %
-}
-
-% @defivar == @defcv {Instance Variable}
-
-\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
-
-\def\defivarheader #1#2#3{%
-\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
-\begingroup\defname {#2}{Instance Variable of #1}%
-\defvarargs {#3}\endgroup %
-}
-
-% These definitions are run if you use @defmethodx, etc.,
-% anywhere other than immediately after a @defmethod, etc.
-
-\def\defopx #1 {\errmessage{@defopx in invalid context}}
-\def\defmethodx #1 {\errmessage{@defmethodx in invalid context}}
-\def\defcvx #1 {\errmessage{@defcvx in invalid context}}
-\def\defivarx #1 {\errmessage{@defivarx in invalid context}}
-
-% Now @defvar
-
-% First, define the processing that is wanted for arguments of @defvar.
-% This is actually simple: just print them in roman.
-% This must expand the args and terminate the paragraph they make up
-\def\defvarargs #1{\normalparens #1%
-\interlinepenalty=10000
-\endgraf\nobreak\vskip -\parskip\nobreak}
-
-% @defvr Counter foo-count
-
-\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}
-
-\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup}
-
-% @defvar == @defvr Variable
-
-\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
-
-\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{Variable}%
-\defvarargs {#2}\endgroup %
-}
-
-% @defopt == @defvr {User Option}
-
-\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
-
-\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{User Option}%
-\defvarargs {#2}\endgroup %
-}
-
-% @deftypevar int foobar
-
-\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
-
-% #1 is the data type.  #2 is the name, perhaps followed by text that
-% is actually part of the data type, which should not be put into the index.
-\def\deftypevarheader #1#2{%
-\dovarind#2 \relax% Make entry in variables index
-\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}%
-\interlinepenalty=10000
-\endgraf\nobreak\vskip -\parskip\nobreak
-\endgroup}
-\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
-
-% @deftypevr {Global Flag} int enable
-
-\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
-
-\def\deftypevrheader #1#2#3{\dovarind#3 \relax%
-\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
-\interlinepenalty=10000
-\endgraf\nobreak\vskip -\parskip\nobreak
-\endgroup}
-
-% This definition is run if you use @defvarx
-% anywhere other than immediately after a @defvar or @defvarx.
-
-\def\defvrx #1 {\errmessage{@defvrx in invalid context}}
-\def\defvarx #1 {\errmessage{@defvarx in invalid context}}
-\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
-\def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}}
-\def\deftypevrx #1 {\errmessage{@deftypevrx in invalid context}}
-
-% Now define @deftp
-% Args are printed in bold, a slight difference from @defvar.
-
-\def\deftpargs #1{\bf \defvarargs{#1}}
-
-% @deftp Class window height width ...
-
-\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader}
-
-\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
-\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
-
-% This definition is run if you use @deftpx, etc
-% anywhere other than immediately after a @deftp, etc.
-
-\def\deftpx #1 {\errmessage{@deftpx in invalid context}}
-
-
-\message{macros,}
-% @macro.
-
-% To do this right we need a feature of e-TeX, \scantokens, 
-% which we arrange to emulate with a temporary file in ordinary TeX.
-\ifx\eTeXversion\undefined
- \newwrite\macscribble
- \def\scanmacro#1{%
-   \begingroup \newlinechar`\^^M
-   \immediate\openout\macscribble=\jobname.tmp
-   \immediate\write\macscribble{#1}%
-   \immediate\closeout\macscribble
-   \let\xeatspaces\eatspaces
-   \input \jobname.tmp
-   \endgroup
-}
-\else
-\def\scanmacro#1{%
-\begingroup \newlinechar`\^^M
-\let\xeatspaces\eatspaces\scantokens{#1}\endgroup}
-\fi
-
-\newcount\paramno   % Count of parameters
-\newtoks\macname    % Macro name
-\newif\ifrecursive  % Is it recursive?
-
-% Utility routines.
-% Thisdoes \let #1 = #2, except with \csnames.
-\def\cslet#1#2{%
-\expandafter\expandafter
-\expandafter\let
-\expandafter\expandafter
-\csname#1\endcsname
-\csname#2\endcsname}
-
-% Trim leading and trailing spaces off a string.
-% Concepts from aro-bend problem 15 (see CTAN).
-{\catcode`\@=11
-\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
-\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
-\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
-\def\unbrace#1{#1}
-\unbrace{\gdef\trim@@@ #1 } #2@{#1}
-}
-
-% Trim a single trailing ^^M off a string.
-{\catcode`\^^M=12\catcode`\Q=3%
-\gdef\eatcr #1{\eatcra #1Q^^MQ}%
-\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
-\gdef\eatcrb#1Q#2Q{#1}%
-}
-
-% Macro bodies are absorbed as an argument in a context where
-% all characters are catcode 10, 11 or 12, except \ which is active
-% (as in normal texinfo). It is necessary to change the definition of \.
-
-% It's necessary to have hard CRs when the macro is executed. This is 
-% done by  making ^^M (\endlinechar) catcode 12 when reading the macro 
-% body, and then making it the \newlinechar in \scanmacro.
-
-\def\macrobodyctxt{%
-  \catcode`\~=12
-  \catcode`\^=12
-  \catcode`\_=12
-  \catcode`\|=12
-  \catcode`\<=12
-  \catcode`\>=12
-  \catcode`\+=12
-  \catcode`\{=12
-  \catcode`\}=12
-  \catcode`\@=12
-  \catcode`\^^M=12
-  \usembodybackslash}
-
-\def\macroargctxt{%
-  \catcode`\~=12
-  \catcode`\^=12
-  \catcode`\_=12
-  \catcode`\|=12
-  \catcode`\<=12
-  \catcode`\>=12
-  \catcode`\+=12
-  \catcode`\@=12
-  \catcode`\\=12}
-
-% \mbodybackslash is the definition of \ in @macro bodies.
-% It maps \foo\ => \csname macarg.foo\endcsname => #N 
-% where N is the macro parameter number.
-% We define \csname macarg.\endcsname to be \realbackslash, so
-% \\ in macro replacement text gets you a backslash.
-
-{\catcode`@=0 @catcode`@\=@active
- @gdef@usembodybackslash{@let\=@mbodybackslash}
- @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
-}
-\expandafter\def\csname macarg.\endcsname{\realbackslash}
-
-\def\macro{\recursivefalse\parsearg\macroxxx}
-\def\rmacro{\recursivetrue\parsearg\macroxxx}
-
-\def\macroxxx#1{%
-  \getargs{#1}%           now \macname is the macname and \argl the arglist
-  \ifx\argl\empty       % no arguments
-     \paramno=0%
-  \else
-     \expandafter\parsemargdef \argl;% 
-  \fi
-  \expandafter\ifx \csname macsave.\the\macname\endcsname \relax
-     \cslet{macsave.\the\macname}{\the\macname}%
-  \else
-     \message{Warning: redefining \the\macname}%
-  \fi
-  \begingroup \macrobodyctxt
-  \ifrecursive \expandafter\parsermacbody
-  \else \expandafter\parsemacbody 
-  \fi}
-
-\def\unmacro{\parsearg\unmacroxxx}
-\def\unmacroxxx#1{%
-  \expandafter\ifx \csname macsave.\the\macname\endcsname \relax
-    \errmessage{Macro \the\macname\ not defined.}%
-  \else
-    \cslet{#1}{macsave.#1}%
-    \expandafter\let \csname macsave.\the\macname\endcsname \undefined
-  \fi
-}
-
-% This makes use of the obscure feature that if the last token of a
-% <parameter list> is #, then the preceding argument is delimited by
-% an opening brace, and that opening brace is not consumed.
-\def\getargs#1{\getargsxxx#1{}}
-\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
-\def\getmacname #1 #2\relax{\macname={#1}}
-\def\getmacargs#1{\def\argl{#1}}
-
-% Parse the optional {params} list.  Set up \paramno and \paramlist
-% so \defmacro knows what to do.  Define \macarg.blah for each blah
-% in the params list, to be ##N where N is the position in that list.
-% That gets used by \mbodybackslash (above).
-
-% We need to get `macro parameter char #' into several definitions.
-% The technique used is stolen from LaTeX:  let \hash be something
-% unexpandable, insert that wherever you need a #, and then redefine
-% it to # just before using the token list produced.
-%
-% The same technique is used to protect \eatspaces till just before
-% the macro is used.
-
-\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
-        \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
-\def\parsemargdefxxx#1,{%
-  \if#1;\let\next=\relax
-  \else \let\next=\parsemargdefxxx
-    \advance\paramno by 1%
-    \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
-        {\xeatspaces{\hash\the\paramno}}%
-    \edef\paramlist{\paramlist\hash\the\paramno,}%
-  \fi\next}
-
-% These two commands read recursive and nonrecursive macro bodies.
-% (They're different since rec and nonrec macros end differently.)
-
-\long\def\parsemacbody#1@end macro%
-{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-\long\def\parsermacbody#1@end rmacro%
-{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-
-% This defines the macro itself. There are six cases: recursive and
-% nonrecursive macros of zero, one, and many arguments.
-% Much magic with \expandafter here.
-% \xdef is used so that macro definitions will survive the file
-% they're defined in; @include reads the file inside a group.
-\def\defmacro{%
-  \let\hash=##% convert placeholders to macro parameter chars
-  \ifrecursive
-    \ifcase\paramno
-    % 0
-      \expandafter\xdef\csname\the\macname\endcsname{%
-        \noexpand\scanmacro{\temp}}%
-    \or % 1
-      \expandafter\xdef\csname\the\macname\endcsname{%
-         \bgroup\noexpand\macroargctxt
-         \noexpand\braceorline\csname\the\macname xxx\endcsname}%
-      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
-         \egroup\noexpand\scanmacro{\temp}}%
-    \else % many
-      \expandafter\xdef\csname\the\macname\endcsname{%
-         \bgroup\noexpand\macroargctxt
-         \noexpand\csname\the\macname xx\endcsname}
-      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-          \csname\the\macname xxx\endcsname ##1,}%
-      \expandafter\expandafter
-      \expandafter\xdef
-      \expandafter\expandafter
-        \csname\the\macname xxx\endcsname 
-          \paramlist{\egroup\noexpand\scanmacro{\temp}}%
-    \fi
-  \else
-    \ifcase\paramno
-    % 0
-      \expandafter\xdef\csname\the\macname\endcsname{%
-        \noexpand\norecurse{\the\macname}%
-        \noexpand\scanmacro{\temp}\egroup}%
-    \or % 1
-      \expandafter\xdef\csname\the\macname\endcsname{%
-         \bgroup\noexpand\macroargctxt
-         \noexpand\braceorline\csname\the\macname xxx\endcsname}%
-      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
-        \egroup
-        \noexpand\norecurse{\the\macname}%
-        \noexpand\scanmacro{\temp}\egroup}%
-    \else % many
-      \expandafter\xdef\csname\the\macname\endcsname{%
-         \bgroup\noexpand\macroargctxt
-         \noexpand\csname\the\macname xx\endcsname}
-      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-          \csname\the\macname xxx\endcsname ##1,}%
-      \expandafter\expandafter
-      \expandafter\xdef
-      \expandafter\expandafter
-      \csname\the\macname xxx\endcsname
-      \paramlist{%
-          \egroup
-          \noexpand\norecurse{\the\macname}%
-          \noexpand\scanmacro{\temp}\egroup}%
-    \fi
-  \fi}
-
-\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
-
-% \braceorline decides whether the next nonwhitespace character is a
-% {.  If so it reads up to the closing }, if not, it reads the whole
-% line.  Whatever was read is then fed to the next control sequence
-% as an argument (by \parsebrace or \parsearg)
-\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
-\def\braceorlinexxx{%
-  \ifx\nchar\bgroup\else
-    \expandafter\parsearg 
-  \fi \next}
-
-
-\message{cross references,}
-\newwrite\auxfile
-
-\newif\ifhavexrefs    % True if xref values are known.
-\newif\ifwarnedxrefs  % True if we warned once that they aren't known.
-
-% @inforef is relatively simple.
-\def\inforef #1{\inforefzzz #1,,,,**}
-\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
-  node \samp{\ignorespaces#1{}}}
-
-% @node's job is to define \lastnode.
-\def\node{\ENVcheck\parsearg\nodezzz}
-\def\nodezzz#1{\nodexxx [#1,]}
-\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
-\let\nwnode=\node
-\let\lastnode=\relax
-
-% The sectioning commands (@chapter, etc.) call these.
-\def\donoderef{%
-  \ifx\lastnode\relax\else
-    \expandafter\expandafter\expandafter\setref{\lastnode}%
-      {Ysectionnumberandtype}%
-    \global\let\lastnode=\relax
-  \fi
-}
-\def\unnumbnoderef{%
-  \ifx\lastnode\relax\else
-    \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}%
-    \global\let\lastnode=\relax
-  \fi
-}
-\def\appendixnoderef{%
-  \ifx\lastnode\relax\else
-    \expandafter\expandafter\expandafter\setref{\lastnode}%
-      {Yappendixletterandtype}%
-    \global\let\lastnode=\relax
-  \fi
-}
-
-
-% @anchor{NAME} -- define xref target at arbitrary point.
-% 
-\def\anchor#1{\setref{#1}{Ynothing}}
-
-
-% \setref{NAME}{SNT} defines a cross-reference point NAME, namely
-% NAME-title, NAME-pg, and NAME-SNT.  Called from \foonoderef.  We have
-% to set \indexdummies so commands such as @code in a section title
-% aren't expanded.  It would be nicer not to expand the titles in the
-% first place, but there's so many layers that that is hard to do.
-% 
-\def\setref#1#2{{%
-  \indexdummies
-  \dosetq{#1-title}{Ytitle}%
-  \dosetq{#1-pg}{Ypagenumber}%
-  \dosetq{#1-snt}{#2}
-}}
-
-% @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
-% the node name, #2 the name of the Info cross-reference, #3 the printed
-% node name, #4 the name of the Info file, #5 the name of the printed
-% manual.  All but the node name can be omitted.
-%
-\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
-\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
-\def\ref#1{\xrefX[#1,,,,,,,]}
-\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
-  \def\printedmanual{\ignorespaces #5}%
-  \def\printednodename{\ignorespaces #3}%
-  \setbox1=\hbox{\printedmanual}%
-  \setbox0=\hbox{\printednodename}%
-  \ifdim \wd0 = 0pt
-    % No printed node name was explicitly given.
-    \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
-      % Use the node name inside the square brackets.
-      \def\printednodename{\ignorespaces #1}%
-    \else
-      % Use the actual chapter/section title appear inside
-      % the square brackets.  Use the real section title if we have it.
-      \ifdim \wd1 > 0pt
-        % It is in another manual, so we don't have it.
-        \def\printednodename{\ignorespaces #1}%
-      \else
-        \ifhavexrefs
-          % We know the real title if we have the xref values.
-          \def\printednodename{\refx{#1-title}{}}%
-        \else
-          % Otherwise just copy the Info node name.
-          \def\printednodename{\ignorespaces #1}%
-        \fi%
-      \fi
-    \fi
-  \fi
-  %
-  % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
-  % insert empty discretionaries after hyphens, which means that it will
-  % not find a line break at a hyphen in a node names.  Since some manuals
-  % are best written with fairly long node names, containing hyphens, this
-  % is a loss.  Therefore, we give the text of the node name again, so it
-  % is as if TeX is seeing it for the first time.
-  \ifdim \wd1 > 0pt
-    \putwordsection{} ``\printednodename'' in \cite{\printedmanual}%
-  \else
-    % _ (for example) has to be the character _ for the purposes of the
-    % control sequence corresponding to the node, but it has to expand
-    % into the usual \leavevmode...\vrule stuff for purposes of
-    % printing. So we \turnoffactive for the \refx-snt, back on for the
-    % printing, back off for the \refx-pg.
-    {\normalturnoffactive
-     % Only output a following space if the -snt ref is nonempty; for
-     % @unnumbered and @anchor, it won't be.
-     \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
-     \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
-    }%
-    % [mynode], 
-    [\printednodename],\space
-    % page 3
-    \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
-  \fi
-\endgroup}
-
-% \dosetq is the interface for calls from other macros
-
-% Use \normalturnoffactive so that punctuation chars such as underscore
-% and backslash work in node names.  (\turnoffactive doesn't do \.)
-\def\dosetq#1#2{%
-  {\let\folio=0
-   \normalturnoffactive
-   \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}%
-   \iflinks
-     \next
-   \fi
-  }%
-}
-
-% \internalsetq {foo}{page} expands into
-% CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
-% When the aux file is read, ' is the escape character
-
-\def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}}
-
-% Things to be expanded by \internalsetq
-
-\def\Ypagenumber{\folio}
-
-\def\Ytitle{\thissection}
-
-\def\Ynothing{}
-
-\def\Ysectionnumberandtype{%
-\ifnum\secno=0 \putwordChapter\xreftie\the\chapno %
-\else \ifnum \subsecno=0 \putwordSection\xreftie\the\chapno.\the\secno %
-\else \ifnum \subsubsecno=0 %
-\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno %
-\else %
-\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno %
-\fi \fi \fi }
-
-\def\Yappendixletterandtype{%
-\ifnum\secno=0 \putwordAppendix\xreftie'char\the\appendixno{}%
-\else \ifnum \subsecno=0 \putwordSection\xreftie'char\the\appendixno.\the\secno %
-\else \ifnum \subsubsecno=0 %
-\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno %
-\else %
-\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %
-\fi \fi \fi }
-
-\gdef\xreftie{'tie}
-
-% Use TeX 3.0's \inputlineno to get the line number, for better error
-% messages, but if we're using an old version of TeX, don't do anything.
-%
-\ifx\inputlineno\thisisundefined
-  \let\linenumber = \empty % Non-3.0.
-\else
-  \def\linenumber{\the\inputlineno:\space}
-\fi
-
-% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
-% If its value is nonempty, SUFFIX is output afterward.
-
-\def\refx#1#2{%
-  \expandafter\ifx\csname X#1\endcsname\relax
-    % If not defined, say something at least.
-    \angleleft un\-de\-fined\angleright
-    \iflinks
-      \ifhavexrefs
-        \message{\linenumber Undefined cross reference `#1'.}%
-      \else
-        \ifwarnedxrefs\else
-          \global\warnedxrefstrue
-          \message{Cross reference values unknown; you must run TeX again.}%
-        \fi
-      \fi
-    \fi
-  \else
-    % It's defined, so just use it.
-    \csname X#1\endcsname
-  \fi
-  #2% Output the suffix in any case.
-}
-
-% This is the macro invoked by entries in the aux file.
-% 
-\def\xrdef#1{\begingroup
-  % Reenable \ as an escape while reading the second argument.
-  \catcode`\\ = 0
-  \afterassignment\endgroup
-  \expandafter\gdef\csname X#1\endcsname
-}
-
-% Read the last existing aux file, if any.  No error if none exists.
-\def\readauxfile{\begingroup
-  \catcode`\^^@=\other
-  \catcode`\^^A=\other
-  \catcode`\^^B=\other
-  \catcode`\^^C=\other
-  \catcode`\^^D=\other
-  \catcode`\^^E=\other
-  \catcode`\^^F=\other
-  \catcode`\^^G=\other
-  \catcode`\^^H=\other
-  \catcode`\^^K=\other
-  \catcode`\^^L=\other
-  \catcode`\^^N=\other
-  \catcode`\^^P=\other
-  \catcode`\^^Q=\other
-  \catcode`\^^R=\other
-  \catcode`\^^S=\other
-  \catcode`\^^T=\other
-  \catcode`\^^U=\other
-  \catcode`\^^V=\other
-  \catcode`\^^W=\other
-  \catcode`\^^X=\other
-  \catcode`\^^Z=\other
-  \catcode`\^^[=\other
-  \catcode`\^^\=\other
-  \catcode`\^^]=\other
-  \catcode`\^^^=\other
-  \catcode`\^^_=\other
-  \catcode`\@=\other
-  \catcode`\^=\other
-  % It was suggested to define this as 7, which would allow ^^e4 etc.
-  % in xref tags, i.e., node names.  But since ^^e4 notation isn't
-  % supported in the main text, it doesn't seem desirable.  Furthermore,
-  % that is not enough: for node names that actually contain a ^
-  % character, we would end up writing a line like this: 'xrdef {'hat
-  % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
-  % argument, and \hat is not an expandable control sequence.  It could
-  % all be worked out, but why?  Either we support ^^ or we don't.
-  %
-  % The other change necessary for this was to define \auxhat:
-  % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
-  % and then to call \auxhat in \setq.
-  %
-  \catcode`\~=\other
-  \catcode`\[=\other
-  \catcode`\]=\other
-  \catcode`\"=\other
-  \catcode`\_=\other
-  \catcode`\|=\other
-  \catcode`\<=\other
-  \catcode`\>=\other
-  \catcode`\$=\other
-  \catcode`\#=\other
-  \catcode`\&=\other
-  \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
-  % Make the characters 128-255 be printing characters
-  {%
-    \count 1=128
-    \def\loop{%
-      \catcode\count 1=\other
-      \advance\count 1 by 1
-      \ifnum \count 1<256 \loop \fi
-    }%
-  }%
-  % The aux file uses ' as the escape (for now).
-  % Turn off \ as an escape so we do not lose on
-  % entries which were dumped with control sequences in their names.
-  % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
-  % Reference to such entries still does not work the way one would wish,
-  % but at least they do not bomb out when the aux file is read in.
-  \catcode`\{=1
-  \catcode`\}=2
-  \catcode`\%=\other
-  \catcode`\'=0
-  \catcode`\\=\other
-  %
-  \openin 1 \jobname.aux
-  \ifeof 1 \else
-    \closein 1
-    \input \jobname.aux
-    \global\havexrefstrue
-    \global\warnedobstrue
-  \fi
-  % Open the new aux file.  TeX will close it automatically at exit.
-  \openout\auxfile=\jobname.aux
-\endgroup}
-
-
-% Footnotes.
-
-\newcount \footnoteno
-
-% The trailing space in the following definition for supereject is
-% vital for proper filling; pages come out unaligned when you do a
-% pagealignmacro call if that space before the closing brace is
-% removed. (Generally, numeric constants should always be followed by a
-% space to prevent strange expansion errors.)
-\def\supereject{\par\penalty -20000\footnoteno =0 }
-
-% @footnotestyle is meaningful for info output only.
-\let\footnotestyle=\comment
-
-\let\ptexfootnote=\footnote
-
-{\catcode `\@=11
-%
-% Auto-number footnotes.  Otherwise like plain.
-\gdef\footnote{%
-  \global\advance\footnoteno by \@ne
-  \edef\thisfootno{$^{\the\footnoteno}$}%
-  %
-  % In case the footnote comes at the end of a sentence, preserve the
-  % extra spacing after we do the footnote number.
-  \let\@sf\empty
-  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
-  %
-  % Remove inadvertent blank space before typesetting the footnote number.
-  \unskip
-  \thisfootno\@sf
-  \footnotezzz
-}%
-
-% Don't bother with the trickery in plain.tex to not require the
-% footnote text as a parameter.  Our footnotes don't need to be so general.
-%
-% Oh yes, they do; otherwise, @ifset and anything else that uses
-% \parseargline fail inside footnotes because the tokens are fixed when
-% the footnote is read.  --karl, 16nov96.
-%
-\long\gdef\footnotezzz{\insert\footins\bgroup
-  % We want to typeset this text as a normal paragraph, even if the
-  % footnote reference occurs in (for example) a display environment.
-  % So reset some parameters.
-  \interlinepenalty\interfootnotelinepenalty
-  \splittopskip\ht\strutbox % top baseline for broken footnotes
-  \splitmaxdepth\dp\strutbox
-  \floatingpenalty\@MM
-  \leftskip\z@skip
-  \rightskip\z@skip
-  \spaceskip\z@skip
-  \xspaceskip\z@skip
-  \parindent\defaultparindent
-  %
-  % Hang the footnote text off the number.
-  \hang
-  \textindent{\thisfootno}%
-  %
-  % Don't crash into the line above the footnote text.  Since this
-  % expands into a box, it must come within the paragraph, lest it
-  % provide a place where TeX can split the footnote.
-  \footstrut
-  \futurelet\next\fo@t
-}
-\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
-  \else\let\next\f@t\fi \next}
-\def\f@@t{\bgroup\aftergroup\@foot\let\next}
-\def\f@t#1{#1\@foot}
-\def\@foot{\strut\egroup}
-
-}%end \catcode `\@=11
-
-% Set the baselineskip to #1, and the lineskip and strut size
-% correspondingly.  There is no deep meaning behind these magic numbers
-% used as factors; they just match (closely enough) what Knuth defined.
-%
-\def\lineskipfactor{.08333}
-\def\strutheightpercent{.70833}
-\def\strutdepthpercent {.29167}
-%
-\def\setleading#1{%
-  \normalbaselineskip = #1\relax
-  \normallineskip = \lineskipfactor\normalbaselineskip
-  \normalbaselines
-  \setbox\strutbox =\hbox{%
-    \vrule width0pt height\strutheightpercent\baselineskip
-                    depth \strutdepthpercent \baselineskip
-  }%
-}
-
-% @| inserts a changebar to the left of the current line.  It should
-% surround any changed text.  This approach does *not* work if the
-% change spans more than two lines of output.  To handle that, we would
-% have adopt a much more difficult approach (putting marks into the main
-% vertical list for the beginning and end of each change).
-%
-\def\|{%
-  % \vadjust can only be used in horizontal mode.
-  \leavevmode
-  %
-  % Append this vertical mode material after the current line in the output.
-  \vadjust{%
-    % We want to insert a rule with the height and depth of the current
-    % leading; that is exactly what \strutbox is supposed to record.
-    \vskip-\baselineskip
-    %
-    % \vadjust-items are inserted at the left edge of the type.  So
-    % the \llap here moves out into the left-hand margin.
-    \llap{%
-      %
-      % For a thicker or thinner bar, change the `1pt'.
-      \vrule height\baselineskip width1pt
-      %
-      % This is the space between the bar and the text.
-      \hskip 12pt
-    }%
-  }%
-}
-
-% For a final copy, take out the rectangles
-% that mark overfull boxes (in case you have decided
-% that the text looks ok even though it passes the margin).
-%
-\def\finalout{\overfullrule=0pt}
-
-% @image.  We use the macros from epsf.tex to support this.
-% If epsf.tex is not installed and @image is used, we complain.
-% 
-% Check for and read epsf.tex up front.  If we read it only at @image
-% time, we might be inside a group, and then its definitions would get
-% undone and the next image would fail.
-\openin 1 = epsf.tex
-\ifeof 1 \else
-  \closein 1
-  % Do not bother showing banner with post-v2.7 epsf.tex (available in
-  % doc/epsf.tex until it shows up on ctan).
-  \def\epsfannounce{\toks0 = }%
-  \input epsf.tex
-\fi
-%
-\newif\ifwarnednoepsf
-\newhelp\noepsfhelp{epsf.tex must be installed for images to
-  work.  It is also included in the Texinfo distribution, or you can get
-  it from ftp://ftp.tug.org/tex/epsf.tex.}
-%
-% Only complain once about lack of epsf.tex.
-\def\image#1{%
-  \ifx\epsfbox\undefined
-    \ifwarnednoepsf \else
-      \errhelp = \noepsfhelp
-      \errmessage{epsf.tex not found, images will be ignored}%
-      \global\warnednoepsftrue
-    \fi
-  \else
-    \imagexxx #1,,,\finish
-  \fi
-}
-%
-% Arguments to @image:
-% #1 is (mandatory) image filename; we tack on .eps extension.
-% #2 is (optional) width, #3 is (optional) height.
-% #4 is just the usual extra ignored arg for parsing this stuff.
-\def\imagexxx#1,#2,#3,#4\finish{%
-  % \epsfbox itself resets \epsf?size at each figure.
-  \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
-  \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
-  % If the image is by itself, center it.
-  \ifvmode
-    \nobreak\medskip
-    \nobreak
-    \centerline{\epsfbox{#1.eps}}%
-    \bigbreak
-  \else
-    \epsfbox{#1.eps}%
-  \fi
-}
-
-
-\message{paper sizes,}
-% And other related parameters.
-
-\newdimen\defaultparindent \defaultparindent = 15pt
-
-\chapheadingskip = 15pt plus 4pt minus 2pt
-\secheadingskip = 12pt plus 3pt minus 2pt
-\subsecheadingskip = 9pt plus 2pt minus 2pt
-
-% Prevent underfull vbox error messages.
-\vbadness = 10000
-
-% Don't be so finicky about underfull hboxes, either.
-\hbadness = 2000
-
-% Following George Bush, just get rid of widows and orphans.
-\widowpenalty=10000
-\clubpenalty=10000
-
-% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
-% using an old version of TeX, don't do anything.  We want the amount of
-% stretch added to depend on the line length, hence the dependence on
-% \hsize.  This makes it come to about 9pt for the 8.5x11 format.  We
-% call this whenever the paper size is set.
-%
-\def\setemergencystretch{%
-  \ifx\emergencystretch\thisisundefined
-    % Allow us to assign to \emergencystretch anyway.
-    \def\emergencystretch{\dimen0}%
-  \else
-    \emergencystretch = \hsize
-    \divide\emergencystretch by 45
-  \fi
-}
-
-% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
-% 4) hoffset; 5) binding offset; 6) topskip.  Then whoever calls us can
-% set \parskip and call \setleading for \baselineskip.
-%
-\def\internalpagesizes#1#2#3#4#5#6{%
-  \voffset = #3\relax
-  \topskip = #6\relax
-  \splittopskip = \topskip
-  %
-  \vsize = #1\relax
-  \advance\vsize by \topskip
-  \outervsize = \vsize
-  \advance\outervsize by 2\topandbottommargin
-  \pageheight = \vsize
-  %
-  \hsize = #2\relax
-  \outerhsize = \hsize
-  \advance\outerhsize by 0.5in
-  \pagewidth = \hsize
-  %
-  \normaloffset = #4\relax
-  \bindingoffset = #5\relax
-  %
-  \parindent = \defaultparindent
-  \setemergencystretch
-}
-
-% @letterpaper (the default).
-\def\letterpaper{{\globaldefs = 1
-  \parskip = 3pt plus 2pt minus 1pt
-  \setleading{13.2pt}%
-  %
-  % If page is nothing but text, make it come out even.
-  \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
-}}
-
-% Use @smallbook to reset parameters for 7x9.5 (or so) format.
-\def\smallbook{{\globaldefs = 1
-  \parskip = 2pt plus 1pt
-  \setleading{12pt}%
-  %
-  \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
-  %
-  \lispnarrowing = 0.3in
-  \tolerance = 700
-  \hfuzz = 1pt
-  \contentsrightmargin = 0pt
-  \deftypemargin = 0pt
-  \defbodyindent = .5cm
-  %
-  \let\smalldisplay = \smalldisplayx
-  \let\smallexample = \smalllispx
-  \let\smallformat = \smallformatx
-  \let\smalllisp = \smalllispx
-}}
-
-% Use @afourpaper to print on European A4 paper.
-\def\afourpaper{{\globaldefs = 1
-  \setleading{12pt}%
-  \parskip = 3pt plus 2pt minus 1pt
-  %
-  \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%
-  %
-  \tolerance = 700
-  \hfuzz = 1pt
-}}
-
-% A specific text layout, 24x15cm overall, intended for A4 paper.  Top margin
-% 29mm, hence bottom margin 28mm, nominal side margin 3cm.
-\def\afourlatex{{\globaldefs = 1
-  \setleading{13.6pt}%
-  %
-  \afourpaper
-  \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
-  %
-  \globaldefs = 0
-}}
-
-% Use @afourwide to print on European A4 paper in wide format.
-\def\afourwide{%
-  \afourpaper
-  \internalpagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
-  %
-  \globaldefs = 0
-}
-
-% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
-% Perhaps we should allow setting the margins, \topskip, \parskip,
-% and/or leading, also. Or perhaps we should compute them somehow.
-% 
-\def\pagesizes{\parsearg\pagesizesxxx}
-\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish}
-\def\pagesizesyyy#1,#2,#3\finish{{%
-  \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
-  \globaldefs = 1
-  %
-  \parskip = 3pt plus 2pt minus 1pt
-  \setleading{13.2pt}%
-  %
-  \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
-}}
-
-% Set default to letter.
-% 
-\letterpaper
-
-\message{and turning on texinfo input format.}
-
-% Define macros to output various characters with catcode for normal text.
-\catcode`\"=\other
-\catcode`\~=\other
-\catcode`\^=\other
-\catcode`\_=\other
-\catcode`\|=\other
-\catcode`\<=\other
-\catcode`\>=\other
-\catcode`\+=\other
-\def\normaldoublequote{"}
-\def\normaltilde{~}
-\def\normalcaret{^}
-\def\normalunderscore{_}
-\def\normalverticalbar{|}
-\def\normalless{<}
-\def\normalgreater{>}
-\def\normalplus{+}
-
-% This macro is used to make a character print one way in ttfont
-% where it can probably just be output, and another way in other fonts,
-% where something hairier probably needs to be done.
-%
-% #1 is what to print if we are indeed using \tt; #2 is what to print
-% otherwise.  Since all the Computer Modern typewriter fonts have zero
-% interword stretch (and shrink), and it is reasonable to expect all
-% typewriter fonts to have this, we can check that font parameter.
-%
-\def\ifusingtt#1#2{\ifdim \fontdimen3\the\font=0pt #1\else #2\fi}
-
-% Turn off all special characters except @
-% (and those which the user can use as if they were ordinary).
-% Most of these we simply print from the \tt font, but for some, we can
-% use math or other variants that look better in normal text.
-
-\catcode`\"=\active
-\def\activedoublequote{{\tt\char34}}
-\let"=\activedoublequote
-\catcode`\~=\active
-\def~{{\tt\char126}}
-\chardef\hat=`\^
-\catcode`\^=\active
-\def^{{\tt \hat}}
-
-\catcode`\_=\active
-\def_{\ifusingtt\normalunderscore\_}
-% Subroutine for the previous macro.
-\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
-
-\catcode`\|=\active
-\def|{{\tt\char124}}
-\chardef \less=`\<
-\catcode`\<=\active
-\def<{{\tt \less}}
-\chardef \gtr=`\>
-\catcode`\>=\active
-\def>{{\tt \gtr}}
-\catcode`\+=\active
-\def+{{\tt \char 43}}
-%\catcode 27=\active
-%\def^^[{$\diamondsuit$}
-
-% Set up an active definition for =, but don't enable it most of the time.
-{\catcode`\==\active
-\global\def={{\tt \char 61}}}
-
-\catcode`+=\active
-\catcode`\_=\active
-
-% If a .fmt file is being used, characters that might appear in a file
-% name cannot be active until we have parsed the command line.
-% So turn them off again, and have \everyjob (or @setfilename) turn them on.
-% \otherifyactive is called near the end of this file.
-\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
-
-\catcode`\@=0
-
-% \rawbackslashxx output one backslash character in current font
-\global\chardef\rawbackslashxx=`\\
-%{\catcode`\\=\other
-%@gdef@rawbackslashxx{\}}
-
-% \rawbackslash redefines \ as input to do \rawbackslashxx.
-{\catcode`\\=\active
-@gdef@rawbackslash{@let\=@rawbackslashxx }}
-
-% \normalbackslash outputs one backslash in fixed width font.
-\def\normalbackslash{{\tt\rawbackslashxx}}
-
-% Say @foo, not \foo, in error messages.
-\escapechar=`\@
-
-% \catcode 17=0   % Define control-q
-\catcode`\\=\active
-
-% Used sometimes to turn off (effectively) the active characters
-% even after parsing them.
-@def@turnoffactive{@let"=@normaldoublequote
-@let\=@realbackslash
-@let~=@normaltilde
-@let^=@normalcaret
-@let_=@normalunderscore
-@let|=@normalverticalbar
-@let<=@normalless
-@let>=@normalgreater
-@let+=@normalplus}
-
-@def@normalturnoffactive{@let"=@normaldoublequote
-@let\=@normalbackslash
-@let~=@normaltilde
-@let^=@normalcaret
-@let_=@normalunderscore
-@let|=@normalverticalbar
-@let<=@normalless
-@let>=@normalgreater
-@let+=@normalplus}
-
-% Make _ and + \other characters, temporarily.
-% This is canceled by @fixbackslash.
-@otherifyactive
-
-% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
-% That is what \eatinput is for; after that, the `\' should revert to printing
-% a backslash.
-%
-@gdef@eatinput input texinfo{@fixbackslash}
-@global@let\ = @eatinput
-
-% On the other hand, perhaps the file did not have a `\input texinfo'. Then
-% the first `\{ in the file would cause an error. This macro tries to fix
-% that, assuming it is called before the first `\' could plausibly occur.
-% Also back turn on active characters that might appear in the input
-% file name, in case not using a pre-dumped format.
-%
-@gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi
-  @catcode`+=@active @catcode`@_=@active}
-
-% These look ok in all fonts, so just make them not special.  The @rm below
-% makes sure that the current font starts out as the newly loaded cmr10
-@catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other
-
-@textfonts
-@rm
-
-@c Local variables:
-@c eval: (add-hook 'write-file-hooks 'time-stamp)
-@c page-delimiter: "^\\\\message"
-@c time-stamp-start: "def\\\\texinfoversion{"
-@c time-stamp-format: "%:y-%02m-%02d"
-@c time-stamp-end: "}"
-@c End:

+ 0 - 251
install-sh

@@ -1,251 +0,0 @@
-#!/bin/sh
-#
-# install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
-#
-# Copyright 1991 by the Massachusetts Institute of Technology
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission.  M.I.T. makes no representations about the
-# suitability of this software for any purpose.  It is provided "as is"
-# without express or implied warranty.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.  It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-transformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
-    case $1 in
-	-c) instcmd="$cpprog"
-	    shift
-	    continue;;
-
-	-d) dir_arg=true
-	    shift
-	    continue;;
-
-	-m) chmodcmd="$chmodprog $2"
-	    shift
-	    shift
-	    continue;;
-
-	-o) chowncmd="$chownprog $2"
-	    shift
-	    shift
-	    continue;;
-
-	-g) chgrpcmd="$chgrpprog $2"
-	    shift
-	    shift
-	    continue;;
-
-	-s) stripcmd="$stripprog"
-	    shift
-	    continue;;
-
-	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
-	    shift
-	    continue;;
-
-	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
-	    shift
-	    continue;;
-
-	*)  if [ x"$src" = x ]
-	    then
-		src=$1
-	    else
-		# this colon is to work around a 386BSD /bin/sh bug
-		:
-		dst=$1
-	    fi
-	    shift
-	    continue;;
-    esac
-done
-
-if [ x"$src" = x ]
-then
-	echo "install:	no input file specified"
-	exit 1
-else
-	true
-fi
-
-if [ x"$dir_arg" != x ]; then
-	dst=$src
-	src=""
-	
-	if [ -d $dst ]; then
-		instcmd=:
-		chmodcmd=""
-	else
-		instcmd=mkdir
-	fi
-else
-
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad 
-# if $src (and thus $dsttmp) contains '*'.
-
-	if [ -f $src -o -d $src ]
-	then
-		true
-	else
-		echo "install:  $src does not exist"
-		exit 1
-	fi
-	
-	if [ x"$dst" = x ]
-	then
-		echo "install:	no destination specified"
-		exit 1
-	else
-		true
-	fi
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
-	if [ -d $dst ]
-	then
-		dst="$dst"/`basename $src`
-	else
-		true
-	fi
-fi
-
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-#  this part is taken from Noah Friedman's mkinstalldirs script
-
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS=' 	
-'
-IFS="${IFS-${defaultIFS}}"
-
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
-
-pathcomp=''
-
-while [ $# -ne 0 ] ; do
-	pathcomp="${pathcomp}${1}"
-	shift
-
-	if [ ! -d "${pathcomp}" ] ;
-        then
-		$mkdirprog "${pathcomp}"
-	else
-		true
-	fi
-
-	pathcomp="${pathcomp}/"
-done
-fi
-
-if [ x"$dir_arg" != x ]
-then
-	$doit $instcmd $dst &&
-
-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
-else
-
-# If we're going to rename the final executable, determine the name now.
-
-	if [ x"$transformarg" = x ] 
-	then
-		dstfile=`basename $dst`
-	else
-		dstfile=`basename $dst $transformbasename | 
-			sed $transformarg`$transformbasename
-	fi
-
-# don't allow the sed command to completely eliminate the filename
-
-	if [ x"$dstfile" = x ] 
-	then
-		dstfile=`basename $dst`
-	else
-		true
-	fi
-
-# Make a temp file name in the proper directory.
-
-	dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
-	$doit $instcmd $src $dsttmp &&
-
-	trap "rm -f ${dsttmp}" 0 &&
-
-# and set any options; do chmod last to preserve setuid bits
-
-# If any of these fail, we abort the whole thing.  If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
-
-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
-
-# Now rename the file to the real destination.
-
-	$doit $rmcmd -f $dstdir/$dstfile &&
-	$doit $mvcmd $dsttmp $dstdir/$dstfile 
-
-fi &&
-
-
-exit 0

+ 0 - 3115
ltconfig

@@ -1,3115 +0,0 @@
-#! /bin/sh
-
-# ltconfig - Create a system-specific libtool.
-# Copyright (C) 1996-1999 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <[email protected]>, 1996
-#
-# This file 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 2 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, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# A lot of this script is taken from autoconf-2.10.
-
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-echo=echo
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
-  # Yippee, $echo works!
-  :
-else
-  # Restart under the correct shell.
-  exec "$SHELL" "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<EOF
-$*
-EOF
-  exit 0
-fi
-
-# Find the correct PATH separator.  Usually this is `:', but
-# DJGPP uses `;' like DOS.
-if test "X${PATH_SEPARATOR+set}" != Xset; then
-  UNAME=${UNAME-`uname 2>/dev/null`}
-  case X$UNAME in
-    *-DOS) PATH_SEPARATOR=';' ;;
-    *)     PATH_SEPARATOR=':' ;;
-  esac
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
-
-if test "X${echo_test_string+set}" != Xset; then
-  # find a string as large as possible, as long as the shell can cope with it
-  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
-    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
-       echo_test_string="`eval $cmd`" &&
-       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null; then
-      break
-    fi
-  done
-fi
-
-if test "X`($echo '\t') 2>/dev/null`" != 'X\t' ||
-   test "X`($echo "$echo_test_string") 2>/dev/null`" != X"$echo_test_string"; then
-  # The Solaris, AIX, and Digital Unix default echo programs unquote
-  # backslashes.  This makes it impossible to quote backslashes using
-  #   echo "$something" | sed 's/\\/\\\\/g'
-  #
-  # So, first we look for a working echo in the user's PATH.
-
-  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-  for dir in $PATH /usr/ucb; do
-    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-       test "X`($dir/echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-      echo="$dir/echo"
-      break
-    fi
-  done
-  IFS="$save_ifs"
-
-  if test "X$echo" = Xecho; then
-    # We didn't find a better echo, so look for alternatives.
-    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
-       test "X`(print -r "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-      # This shell has a builtin print -r that does the trick.
-      echo='print -r'
-    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
-	 test "X$CONFIG_SHELL" != X/bin/ksh; then
-      # If we have ksh, try running ltconfig again with it.
-      ORIGINAL_CONFIG_SHELL="${CONFIG_SHELL-/bin/sh}"
-      export ORIGINAL_CONFIG_SHELL
-      CONFIG_SHELL=/bin/ksh
-      export CONFIG_SHELL
-      exec "$CONFIG_SHELL" "$0" --no-reexec ${1+"$@"}
-    else
-      # Try using printf.
-      echo='printf "%s\n"'
-      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
-	 test "X`($echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-	# Cool, printf works
-	:
-      elif test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
-	   test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-	CONFIG_SHELL="$ORIGINAL_CONFIG_SHELL"
-	export CONFIG_SHELL
-	SHELL="$CONFIG_SHELL"
-	export SHELL
-	echo="$CONFIG_SHELL $0 --fallback-echo"
-      elif test "X`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
-	   test "X`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-	echo="$CONFIG_SHELL $0 --fallback-echo"
-      else
-	# maybe with a smaller string...
-	prev=:
-
-	for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
-	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null; then
-	    break
-	  fi
-	  prev="$cmd"
-	done
-
-	if test "$prev" != 'sed 50q "$0"'; then
-	  echo_test_string=`eval $prev`
-	  export echo_test_string
-	  exec "${ORIGINAL_CONFIG_SHELL}" "$0" ${1+"$@"}
-	else
-	  # Oops.  We lost completely, so just stick with echo.
-	  echo=echo
-	fi
-      fi
-    fi
-  fi
-fi
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e s/^X//'
-sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# The name of this program.
-progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'`
-
-# Constants:
-PROGRAM=ltconfig
-PACKAGE=libtool
-VERSION=1.3.5
-TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)"
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-rm="rm -f"
-
-help="Try \`$progname --help' for more information."
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-enable_shared=yes
-# All known linkers require a `.a' archive for static linking (except M$VC,
-# which needs '.lib').
-enable_static=yes
-enable_fast_install=yes
-enable_dlopen=unknown
-enable_win32_dll=no
-ltmain=
-silent=
-srcdir=
-ac_config_guess=
-ac_config_sub=
-host=
-nonopt=
-ofile="$default_ofile"
-verify_host=yes
-with_gcc=no
-with_gnu_ld=no
-need_locks=yes
-ac_ext=c
-objext=o
-libext=a
-exeext=
-cache_file=
-
-old_AR="$AR"
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-old_CPPFLAGS="$CPPFLAGS"
-old_LDFLAGS="$LDFLAGS"
-old_LD="$LD"
-old_LN_S="$LN_S"
-old_LIBS="$LIBS"
-old_NM="$NM"
-old_RANLIB="$RANLIB"
-old_DLLTOOL="$DLLTOOL"
-old_OBJDUMP="$OBJDUMP"
-old_AS="$AS"
-
-# Parse the command line options.
-args=
-prev=
-for option
-do
-  case "$option" in
-  -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
-  *) optarg= ;;
-  esac
-
-  # If the previous option needs an argument, assign it.
-  if test -n "$prev"; then
-    eval "$prev=\$option"
-    prev=
-    continue
-  fi
-
-  case "$option" in
-  --help) cat <<EOM
-Usage: $progname [OPTION]... [HOST [LTMAIN]]
-
-Generate a system-specific libtool script.
-
-    --debug                enable verbose shell tracing
-    --disable-shared       do not build shared libraries
-    --disable-static       do not build static libraries
-    --disable-fast-install do not optimize for fast installation
-    --enable-dlopen        enable dlopen support
-    --enable-win32-dll     enable building dlls on win32 hosts
-    --help                 display this help and exit
-    --no-verify            do not verify that HOST is a valid host type
--o, --output=FILE          specify the output file [default=$default_ofile]
-    --quiet                same as \`--silent'
-    --silent               do not print informational messages
-    --srcdir=DIR           find \`config.guess' in DIR
-    --version              output version information and exit
-    --with-gcc             assume that the GNU C compiler will be used
-    --with-gnu-ld          assume that the C compiler uses the GNU linker
-    --disable-lock         disable file locking
-    --cache-file=FILE      configure cache file
-
-LTMAIN is the \`ltmain.sh' shell script fragment or \`ltmain.c' program
-that provides basic libtool functionality.
-
-HOST is the canonical host system name [default=guessed].
-EOM
-  exit 0
-  ;;
-
-  --debug)
-    echo "$progname: enabling shell trace mode"
-    set -x
-    ;;
-
-  --disable-shared) enable_shared=no ;;
-
-  --disable-static) enable_static=no ;;
-
-  --disable-fast-install) enable_fast_install=no ;;
-
-  --enable-dlopen) enable_dlopen=yes ;;
-
-  --enable-win32-dll) enable_win32_dll=yes ;;
-
-  --quiet | --silent) silent=yes ;;
-
-  --srcdir) prev=srcdir ;;
-  --srcdir=*) srcdir="$optarg" ;;
-
-  --no-verify) verify_host=no ;;
-
-  --output | -o) prev=ofile ;;
-  --output=*) ofile="$optarg" ;;
-
-  --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"; exit 0 ;;
-
-  --with-gcc) with_gcc=yes ;;
-  --with-gnu-ld) with_gnu_ld=yes ;;
-
-  --disable-lock) need_locks=no ;;
-
-  --cache-file=*) cache_file="$optarg" ;;
-
-  -*)
-    echo "$progname: unrecognized option \`$option'" 1>&2
-    echo "$help" 1>&2
-    exit 1
-    ;;
-
-  *)
-    if test -z "$ltmain"; then
-      ltmain="$option"
-    elif test -z "$host"; then
-# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1
-#      if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then
-#        echo "$progname: warning \`$option' is not a valid host type" 1>&2
-#      fi
-      host="$option"
-    else
-      echo "$progname: too many arguments" 1>&2
-      echo "$help" 1>&2
-      exit 1
-    fi ;;
-  esac
-done
-
-if test -z "$ltmain"; then
-  echo "$progname: you must specify a LTMAIN file" 1>&2
-  echo "$help" 1>&2
-  exit 1
-fi
-
-if test ! -f "$ltmain"; then
-  echo "$progname: \`$ltmain' does not exist" 1>&2
-  echo "$help" 1>&2
-  exit 1
-fi
-
-# Quote any args containing shell metacharacters.
-ltconfig_args=
-for arg
-do
-  case "$arg" in
-  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
-  ltconfig_args="$ltconfig_args '$arg'" ;;
-  *) ltconfig_args="$ltconfig_args $arg" ;;
-  esac
-done
-
-# A relevant subset of AC_INIT.
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 5 compiler messages saved in config.log
-# 6 checking for... messages and results
-if test "$silent" = yes; then
-  exec 6>/dev/null
-else
-  exec 6>&1
-fi
-exec 5>>./config.log
-
-# NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-if test "X${LC_ALL+set}" = Xset; then LC_ALL=C; export LC_ALL; fi
-if test "X${LANG+set}"   = Xset; then LANG=C;   export LANG;   fi
-
-if test -n "$cache_file" && test -r "$cache_file"; then
-  echo "loading cache $cache_file within ltconfig"
-  . $cache_file
-fi
-
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
-  # Stardent Vistra SVR4 grep lacks -e, says [email protected].
-  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
-    ac_n= ac_c='
-' ac_t='	'
-  else
-    ac_n=-n ac_c= ac_t=
-  fi
-else
-  ac_n= ac_c='\c' ac_t=
-fi
-
-if test -z "$srcdir"; then
-  # Assume the source directory is the same one as the path to LTMAIN.
-  srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'`
-  test "$srcdir" = "$ltmain" && srcdir=.
-fi
-
-trap "$rm conftest*; exit 1" 1 2 15
-if test "$verify_host" = yes; then
-  # Check for config.guess and config.sub.
-  ac_aux_dir=
-  for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
-    if test -f $ac_dir/config.guess; then
-      ac_aux_dir=$ac_dir
-      break
-    fi
-  done
-  if test -z "$ac_aux_dir"; then
-    echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2
-    echo "$help" 1>&2
-    exit 1
-  fi
-  ac_config_guess=$ac_aux_dir/config.guess
-  ac_config_sub=$ac_aux_dir/config.sub
-
-  # Make sure we can run config.sub.
-  if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then :
-  else
-    echo "$progname: cannot run $ac_config_sub" 1>&2
-    echo "$help" 1>&2
-    exit 1
-  fi
-
-  echo $ac_n "checking host system type""... $ac_c" 1>&6
-
-  host_alias=$host
-  case "$host_alias" in
-  "")
-    if host_alias=`$SHELL $ac_config_guess`; then :
-    else
-      echo "$progname: cannot guess host type; you must specify one" 1>&2
-      echo "$help" 1>&2
-      exit 1
-    fi ;;
-  esac
-  host=`$SHELL $ac_config_sub $host_alias`
-  echo "$ac_t$host" 1>&6
-
-  # Make sure the host verified.
-  test -z "$host" && exit 1
-
-elif test -z "$host"; then
-  echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2
-  echo "$help" 1>&2
-  exit 1
-else
-  host_alias=$host
-fi
-
-# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
-case "$host_os" in
-linux-gnu*) ;;
-linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
-esac
-
-host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-case "$host_os" in
-aix3*)
-  # AIX sometimes has problems with the GCC collect2 program.  For some
-  # reason, if we set the COLLECT_NAMES environment variable, the problems
-  # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR cru $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-# Set a sane default for `AR'.
-test -z "$AR" && AR=ar
-
-# Set a sane default for `OBJDUMP'.
-test -z "$OBJDUMP" && OBJDUMP=objdump
-
-# If RANLIB is not set, then run the test.
-if test "${RANLIB+set}" != "set"; then
-  result=no
-
-  echo $ac_n "checking for ranlib... $ac_c" 1>&6
-  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-  for dir in $PATH; do
-    test -z "$dir" && dir=.
-    if test -f $dir/ranlib || test -f $dir/ranlib$ac_exeext; then
-      RANLIB="ranlib"
-      result="ranlib"
-      break
-    fi
-  done
-  IFS="$save_ifs"
-
-  echo "$ac_t$result" 1>&6
-fi
-
-if test -n "$RANLIB"; then
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-  old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
-fi
-
-# Set sane defaults for `DLLTOOL', `OBJDUMP', and `AS', used on cygwin.
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$AS" && AS=as
-
-# Check to see if we are using GCC.
-if test "$with_gcc" != yes || test -z "$CC"; then
-  # If CC is not set, then try to find GCC or a usable CC.
-  if test -z "$CC"; then
-    echo $ac_n "checking for gcc... $ac_c" 1>&6
-    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-    for dir in $PATH; do
-      test -z "$dir" && dir=.
-      if test -f $dir/gcc || test -f $dir/gcc$ac_exeext; then
-	CC="gcc"
-	break
-      fi
-    done
-    IFS="$save_ifs"
-
-    if test -n "$CC"; then
-      echo "$ac_t$CC" 1>&6
-    else
-      echo "$ac_t"no 1>&6
-    fi
-  fi
-
-  # Not "gcc", so try "cc", rejecting "/usr/ucb/cc".
-  if test -z "$CC"; then
-    echo $ac_n "checking for cc... $ac_c" 1>&6
-    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-    cc_rejected=no
-    for dir in $PATH; do
-      test -z "$dir" && dir=.
-      if test -f $dir/cc || test -f $dir/cc$ac_exeext; then
-	if test "$dir/cc" = "/usr/ucb/cc"; then
-	  cc_rejected=yes
-	  continue
-	fi
-	CC="cc"
-	break
-      fi
-    done
-    IFS="$save_ifs"
-    if test $cc_rejected = yes; then
-      # We found a bogon in the path, so make sure we never use it.
-      set dummy $CC
-      shift
-      if test $# -gt 0; then
-	# We chose a different compiler from the bogus one.
-	# However, it has the same name, so the bogon will be chosen
-	# first if we set CC to just the name; use the full file name.
-	shift
-	set dummy "$dir/cc" "$@"
-	shift
-	CC="$@"
-      fi
-    fi
-
-    if test -n "$CC"; then
-      echo "$ac_t$CC" 1>&6
-    else
-      echo "$ac_t"no 1>&6
-    fi
-
-    if test -z "$CC"; then
-      echo "$progname: error: no acceptable cc found in \$PATH" 1>&2
-      exit 1
-    fi
-  fi
-
-  # Now see if the compiler is really GCC.
-  with_gcc=no
-  echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6
-  echo "$progname:581: checking whether we are using GNU C" >&5
-
-  $rm conftest.c
-  cat > conftest.c <<EOF
-#ifdef __GNUC__
-  yes;
-#endif
-EOF
-  if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
-    with_gcc=yes
-  fi
-  $rm conftest.c
-  echo "$ac_t$with_gcc" 1>&6
-fi
-
-# Allow CC to be a program name with arguments.
-set dummy $CC
-compiler="$2"
-
-echo $ac_n "checking for object suffix... $ac_c" 1>&6
-$rm conftest*
-echo 'int i = 1;' > conftest.c
-echo "$progname:603: checking for object suffix" >& 5
-if { (eval echo $progname:604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then
-  # Append any warnings to the config.log.
-  cat conftest.err 1>&5
-
-  for ac_file in conftest.*; do
-    case $ac_file in
-    *.c) ;;
-    *) objext=`echo $ac_file | sed -e s/conftest.//` ;;
-    esac
-  done
-else
-  cat conftest.err 1>&5
-  echo "$progname: failed program was:" >&5
-  cat conftest.c >&5
-fi
-$rm conftest*
-echo "$ac_t$objext" 1>&6
-
-echo $ac_n "checking for executable suffix... $ac_c" 1>&6
-if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_cv_exeext="no"
-  $rm conftest*
-  echo 'main () { return 0; }' > conftest.c
-  echo "$progname:629: checking for executable suffix" >& 5
-  if { (eval echo $progname:630: \"$ac_link\") 1>&5; (eval $ac_link) 2>conftest.err; }; then
-    # Append any warnings to the config.log.
-    cat conftest.err 1>&5
-
-    for ac_file in conftest.*; do
-      case $ac_file in
-      *.c | *.err | *.$objext ) ;;
-      *) ac_cv_exeext=.`echo $ac_file | sed -e s/conftest.//` ;;
-      esac
-    done
-  else
-    cat conftest.err 1>&5
-    echo "$progname: failed program was:" >&5
-    cat conftest.c >&5
-  fi
-  $rm conftest*
-fi
-if test "X$ac_cv_exeext" = Xno; then
-  exeext=""
-else
-  exeext="$ac_cv_exeext"
-fi
-echo "$ac_t$ac_cv_exeext" 1>&6
-
-echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6
-pic_flag=
-special_shlib_compile_flags=
-wl=
-link_static_flag=
-no_builtin_flag=
-
-if test "$with_gcc" = yes; then
-  wl='-Wl,'
-  link_static_flag='-static'
-
-  case "$host_os" in
-  beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
-    # PIC is the default for these OSes.
-    ;;
-  aix*)
-    # Below there is a dirty hack to force normal static linking with -ldl
-    # The problem is because libdl dynamically linked with both libc and
-    # libC (AIX C++ library), which obviously doesn't included in libraries
-    # list by gcc. This cause undefined symbols with -static flags.
-    # This hack allows C programs to be linked with "-static -ldl", but
-    # we not sure about C++ programs.
-    link_static_flag="$link_static_flag ${wl}-lC"
-    ;;
-  cygwin* | mingw* | os2*)
-    # We can build DLLs from non-PIC.
-    ;;
-  amigaos*)
-    # FIXME: we need at least 68020 code to build shared libraries, but
-    # adding the `-m68020' flag to GCC prevents building anything better,
-    # like `-m68040'.
-    pic_flag='-m68020 -resident32 -malways-restore-a4'
-    ;;
-  sysv4*MP*)
-    if test -d /usr/nec; then
-       pic_flag=-Kconform_pic
-    fi
-    ;;
-  *)
-    pic_flag='-fPIC'
-    ;;
-  esac
-else
-  # PORTME Check for PIC flags for the system compiler.
-  case "$host_os" in
-  aix3* | aix4*)
-    # All AIX code is PIC.
-    link_static_flag='-bnso -bI:/lib/syscalls.exp'
-    ;;
-
-  hpux9* | hpux10* | hpux11*)
-    # Is there a better link_static_flag that works with the bundled CC?
-    wl='-Wl,'
-    link_static_flag="${wl}-a ${wl}archive"
-    pic_flag='+Z'
-    ;;
-
-  irix5* | irix6*)
-    wl='-Wl,'
-    link_static_flag='-non_shared'
-    # PIC (with -KPIC) is the default.
-    ;;
-
-  cygwin* | mingw* | os2*)
-    # We can build DLLs from non-PIC.
-    ;;
-
-  osf3* | osf4* | osf5*)
-    # All OSF/1 code is PIC.
-    wl='-Wl,'
-    link_static_flag='-non_shared'
-    ;;
-
-  sco3.2v5*)
-    pic_flag='-Kpic'
-    link_static_flag='-dn'
-    special_shlib_compile_flags='-belf'
-    ;;
-
-  solaris*)
-    pic_flag='-KPIC'
-    link_static_flag='-Bstatic'
-    wl='-Wl,'
-    ;;
-
-  sunos4*)
-    pic_flag='-PIC'
-    link_static_flag='-Bstatic'
-    wl='-Qoption ld '
-    ;;
-
-  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-    pic_flag='-KPIC'
-    link_static_flag='-Bstatic'
-    wl='-Wl,'
-    ;;
-
-  uts4*)
-    pic_flag='-pic'
-    link_static_flag='-Bstatic'
-    ;;
-  sysv4*MP*)
-    if test -d /usr/nec ;then
-      pic_flag='-Kconform_pic'
-      link_static_flag='-Bstatic'
-    fi
-    ;;
-  *)
-    can_build_shared=no
-    ;;
-  esac
-fi
-
-if test -n "$pic_flag"; then
-  echo "$ac_t$pic_flag" 1>&6
-
-  # Check to make sure the pic_flag actually works.
-  echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6
-  $rm conftest*
-  echo "int some_variable = 0;" > conftest.c
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS $pic_flag -DPIC"
-  echo "$progname:776: checking if $compiler PIC flag $pic_flag works" >&5
-  if { (eval echo $progname:777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then
-    # Append any warnings to the config.log.
-    cat conftest.err 1>&5
-    
-    case "$host_os" in
-    hpux9* | hpux10* | hpux11*)
-      # On HP-UX, both CC and GCC only warn that PIC is supported... then they
-      # create non-PIC objects.  So, if there were any warnings, we assume that
-      # PIC is not supported.
-      if test -s conftest.err; then
-	echo "$ac_t"no 1>&6
-	can_build_shared=no
-	pic_flag=
-      else
-	echo "$ac_t"yes 1>&6
-	pic_flag=" $pic_flag"
-      fi
-      ;;
-    *)
-      echo "$ac_t"yes 1>&6
-      pic_flag=" $pic_flag"
-      ;;
-    esac
-  else
-    # Append any errors to the config.log.
-    cat conftest.err 1>&5
-    can_build_shared=no
-    pic_flag=
-    echo "$ac_t"no 1>&6
-  fi
-  CFLAGS="$save_CFLAGS"
-  $rm conftest*
-else
-  echo "$ac_t"none 1>&6
-fi
-
-# Check to see if options -o and -c are simultaneously supported by compiler
-echo $ac_n "checking if $compiler supports -c -o file.o... $ac_c" 1>&6
-$rm -r conftest 2>/dev/null
-mkdir conftest
-cd conftest
-$rm conftest*
-echo "int some_variable = 0;" > conftest.c
-mkdir out
-# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
-# that will create temporary files in the current directory regardless of
-# the output directory.  Thus, making CWD read-only will cause this test
-# to fail, enabling locking or at least warning the user not to do parallel
-# builds.
-chmod -w .
-save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -o out/conftest2.o"
-echo "$progname:829: checking if $compiler supports -c -o file.o" >&5
-if { (eval echo $progname:830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; then
-
-  # The compiler can only warn and ignore the option if not recognized
-  # So say no if there are warnings
-    if test -s out/conftest.err; then
-      echo "$ac_t"no 1>&6
-      compiler_c_o=no
-    else
-      echo "$ac_t"yes 1>&6
-      compiler_c_o=yes
-    fi
-else
-  # Append any errors to the config.log.
-  cat out/conftest.err 1>&5
-  compiler_c_o=no
-  echo "$ac_t"no 1>&6
-fi
-CFLAGS="$save_CFLAGS"
-chmod u+w .
-$rm conftest* out/*
-rmdir out
-cd ..
-rmdir conftest
-$rm -r conftest 2>/dev/null
-
-if test x"$compiler_c_o" = x"yes"; then
-  # Check to see if we can write to a .lo
-  echo $ac_n "checking if $compiler supports -c -o file.lo... $ac_c" 1>&6
-  $rm conftest*
-  echo "int some_variable = 0;" > conftest.c
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -c -o conftest.lo"
-  echo "$progname:862: checking if $compiler supports -c -o file.lo" >&5
-if { (eval echo $progname:863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then
-
-    # The compiler can only warn and ignore the option if not recognized
-    # So say no if there are warnings
-      if test -s conftest.err; then
-	echo "$ac_t"no 1>&6
-	compiler_o_lo=no
-      else
-	echo "$ac_t"yes 1>&6
-	compiler_o_lo=yes
-      fi
-  else
-    # Append any errors to the config.log.
-    cat conftest.err 1>&5
-    compiler_o_lo=no
-    echo "$ac_t"no 1>&6
-  fi
-  CFLAGS="$save_CFLAGS"
-  $rm conftest*
-else
-  compiler_o_lo=no
-fi
-
-# Check to see if we can do hard links to lock some files if needed
-hard_links="nottested"
-if test "$compiler_c_o" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&6
-  hard_links=yes
-  $rm conftest*
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  touch conftest.a
-  ln conftest.a conftest.b 2>&5 || hard_links=no
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  echo "$ac_t$hard_links" 1>&6
-  $rm conftest*
-  if test "$hard_links" = no; then
-    echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2
-    need_locks=warn
-  fi
-else
-  need_locks=no
-fi
-
-if test "$with_gcc" = yes; then
-  # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
-  echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions ... $ac_c" 1>&6
-  $rm conftest*
-  echo "int some_variable = 0;" > conftest.c
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c"
-  echo "$progname:914: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-  if { (eval echo $progname:915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then
-
-    # The compiler can only warn and ignore the option if not recognized
-    # So say no if there are warnings
-      if test -s conftest.err; then
-	echo "$ac_t"no 1>&6
-	compiler_rtti_exceptions=no
-      else
-	echo "$ac_t"yes 1>&6
-	compiler_rtti_exceptions=yes
-      fi
-  else
-    # Append any errors to the config.log.
-    cat conftest.err 1>&5
-    compiler_rtti_exceptions=no
-    echo "$ac_t"no 1>&6
-  fi
-  CFLAGS="$save_CFLAGS"
-  $rm conftest*
-
-  if test "$compiler_rtti_exceptions" = "yes"; then
-    no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
-  else
-    no_builtin_flag=' -fno-builtin'
-  fi
-  
-fi
-
-# Check for any special shared library compilation flags.
-if test -n "$special_shlib_compile_flags"; then
-  echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2
-  if echo "$old_CC $old_CFLAGS " | egrep -e "[ 	]$special_shlib_compile_flags[ 	]" >/dev/null; then :
-  else
-    echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2
-    can_build_shared=no
-  fi
-fi
-
-echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6
-$rm conftest*
-echo 'main(){return(0);}' > conftest.c
-save_LDFLAGS="$LDFLAGS"
-LDFLAGS="$LDFLAGS $link_static_flag"
-echo "$progname:958: checking if $compiler static flag $link_static_flag works" >&5
-if { (eval echo $progname:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
-  echo "$ac_t$link_static_flag" 1>&6
-else
-  echo "$ac_t"none 1>&6
-  link_static_flag=
-fi
-LDFLAGS="$save_LDFLAGS"
-$rm conftest*
-
-if test -z "$LN_S"; then
-  # Check to see if we can use ln -s, or we need hard links.
-  echo $ac_n "checking whether ln -s works... $ac_c" 1>&6
-  $rm conftest.dat
-  if ln -s X conftest.dat 2>/dev/null; then
-    $rm conftest.dat
-    LN_S="ln -s"
-  else
-    LN_S=ln
-  fi
-  if test "$LN_S" = "ln -s"; then
-    echo "$ac_t"yes 1>&6
-  else
-    echo "$ac_t"no 1>&6
-  fi
-fi
-
-# Make sure LD is an absolute path.
-if test -z "$LD"; then
-  ac_prog=ld
-  if test "$with_gcc" = yes; then
-    # Check if gcc -print-prog-name=ld gives a path.
-    echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6
-    echo "$progname:991: checking for ld used by GCC" >&5
-    ac_prog=`($CC -print-prog-name=ld) 2>&5`
-    case "$ac_prog" in
-    # Accept absolute paths.
-    [\\/]* | [A-Za-z]:[\\/]*)
-      re_direlt='/[^/][^/]*/\.\./'
-      # Canonicalize the path of ld
-      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
-      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-    "")
-      # If it fails, then pretend we are not using GCC.
-      ac_prog=ld
-      ;;
-    *)
-      # If it is relative, then search for the first ld in PATH.
-      with_gnu_ld=unknown
-      ;;
-    esac
-  elif test "$with_gnu_ld" = yes; then
-    echo $ac_n "checking for GNU ld... $ac_c" 1>&6
-    echo "$progname:1015: checking for GNU ld" >&5
-  else
-    echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-    echo "$progname:1018: checking for non-GNU ld" >&5
-  fi
-
-  if test -z "$LD"; then
-    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-    for ac_dir in $PATH; do
-      test -z "$ac_dir" && ac_dir=.
-      if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-	LD="$ac_dir/$ac_prog"
-	# Check to see if the program is GNU ld.  I'd rather use --version,
-	# but apparently some GNU ld's only accept -v.
-	# Break only if it was the GNU/non-GNU ld that we prefer.
-	if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
-	  test "$with_gnu_ld" != no && break
-	else
-	  test "$with_gnu_ld" != yes && break
-	fi
-      fi
-    done
-    IFS="$ac_save_ifs"
-  fi
-
-  if test -n "$LD"; then
-    echo "$ac_t$LD" 1>&6
-  else
-    echo "$ac_t"no 1>&6
-  fi
-
-  if test -z "$LD"; then
-    echo "$progname: error: no acceptable ld found in \$PATH" 1>&2
-    exit 1
-  fi
-fi
-
-# Check to see if it really is or is not GNU ld.
-echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6
-# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
-  with_gnu_ld=yes
-else
-  with_gnu_ld=no
-fi
-echo "$ac_t$with_gnu_ld" 1>&6
-
-# See if the linker supports building shared libraries.
-echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6
-
-allow_undefined_flag=
-no_undefined_flag=
-need_lib_prefix=unknown
-need_version=unknown
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-archive_cmds=
-archive_expsym_cmds=
-old_archive_from_new_cmds=
-export_dynamic_flag_spec=
-whole_archive_flag_spec=
-thread_safe_flag_spec=
-hardcode_libdir_flag_spec=
-hardcode_libdir_separator=
-hardcode_direct=no
-hardcode_minus_L=no
-hardcode_shlibpath_var=unsupported
-runpath_var=
-always_export_symbols=no
-export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
-# include_expsyms should be a list of space-separated symbols to be *always*
-# included in the symbol list
-include_expsyms=
-# exclude_expsyms can be an egrep regular expression of symbols to exclude
-# it will be wrapped by ` (' and `)$', so one must not match beginning or
-# end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-# as well as any symbol that contains `d'.
-exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
-# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-# platforms (ab)use it in PIC code, but their linkers get confused if
-# the symbol is explicitly referenced.  Since portable code cannot
-# rely on this symbol name, it's probably fine to never include it in
-# preloaded symbol tables.
-
-case "$host_os" in
-cygwin* | mingw*)
-  # FIXME: the MSVC++ port hasn't been tested in a loooong time
-  # When not using gcc, we currently assume that we are using
-  # Microsoft Visual C++.
-  if test "$with_gcc" != yes; then
-    with_gnu_ld=no
-  fi
-  ;;
-
-esac
-
-ld_shlibs=yes
-if test "$with_gnu_ld" = yes; then
-  # If archive_cmds runs LD, not CC, wlarc should be empty
-  wlarc='${wl}'
-
-  # See if GNU ld supports shared libraries.
-  case "$host_os" in
-  aix3* | aix4*)
-    # On AIX, the GNU linker is very broken
-    ld_shlibs=no
-    cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
-    ;;
-
-  amigaos*)
-    archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_minus_L=yes
-
-    # Samuel A. Falvo II <[email protected]> reports
-    # that the semantics of dynamic libraries on AmigaOS, at least up
-    # to version 4, is to share data among multiple programs linked
-    # with the same dynamic library.  Since this doesn't match the
-    # behavior of shared libraries on other platforms, we can use
-    # them.
-    ld_shlibs=no
-    ;;
-
-  beos*)
-    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-      allow_undefined_flag=unsupported
-      # Joseph Beckenbach <[email protected]> says some releases of gcc
-      # support --undefined.  This deserves some investigation.  FIXME
-      archive_cmds='$CC -nostart $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-    else
-      ld_shlibs=no
-    fi
-    ;;
-
-  cygwin* | mingw*)
-    # hardcode_libdir_flag_spec is actually meaningless, as there is
-    # no search path for DLLs.
-    hardcode_libdir_flag_spec='-L$libdir'
-    allow_undefined_flag=unsupported
-    always_export_symbols=yes
-
-    # Extract the symbol export list from an `--export-all' def file,
-    # then regenerate the def file from the symbol export list, so that
-    # the compiled dll only exports the symbol export list.
-    # Be careful not to strip the DATA tag left by newer dlltools.
-    export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
-      test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
-      $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def  $objdir/$soname-ltdll.$objext $libobjs $convenience~
-      sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $objdir/$soname-def > $export_symbols'
-
-    # If DATA tags from a recent dlltool are present, honour them!
-    archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~
-      _lt_hint=1;
-      cat $export_symbols | while read symbol; do
-        set dummy \$symbol;
-        case \$# in
-          2) echo "	\$2 @ \$_lt_hint ; " >> $objdir/$soname-def;;
-          *) echo "     \$2 @ \$_lt_hint \$3 ; " >> $objdir/$soname-def;;
-        esac;
-	_lt_hint=`expr 1 + \$_lt_hint`;
-      done~
-      test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
-      test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
-      $CC -Wl,--base-file,$objdir/$soname-base -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
-      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
-      $CC -Wl,--base-file,$objdir/$soname-base $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
-      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
-      $CC $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts'
-
-      old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a' 
-    ;;
-
-  netbsd*)
-    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-      archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-      archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-    else
-      archive_cmds='$LD -Bshareable $libobjs $deplibs $linkopts -o $lib'
-      # can we support soname and/or expsyms with a.out? -oliva
-    fi
-    ;;
-
-  solaris* | sysv5*)
-    if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
-      ld_shlibs=no
-      cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
-    elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-      archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-      archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-    else
-      ld_shlibs=no
-    fi
-    ;;      
-
-  sunos4*)
-    archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linkopts'
-    wlarc=
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  *)
-    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-      archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-      archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-    else
-      ld_shlibs=no
-    fi
-    ;;
-  esac
-
-  if test "$ld_shlibs" = yes; then
-    runpath_var=LD_RUN_PATH
-    hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
-    export_dynamic_flag_spec='${wl}--export-dynamic'
-    case $host_os in
-    cygwin* | mingw*)
-      # dlltool doesn't understand --whole-archive et. al.
-      whole_archive_flag_spec=
-      ;;
-    *)
-      # ancient GNU ld didn't support --whole-archive et. al.
-      if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
-        whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-      else
-        whole_archive_flag_spec=
-      fi
-      ;;
-    esac
-  fi
-else
-  # PORTME fill in a description of your system's linker (not GNU ld)
-  case "$host_os" in
-  aix3*)
-    allow_undefined_flag=unsupported
-    always_export_symbols=yes
-    archive_expsym_cmds='$LD -o $objdir/$soname $libobjs $deplibs $linkopts -bE:$export_symbols -T512 -H512 -bM:SRE~$AR cru $lib $objdir/$soname'
-    # Note: this linker hardcodes the directories in LIBPATH if there
-    # are no directories specified by -L.
-    hardcode_minus_L=yes
-    if test "$with_gcc" = yes && test -z "$link_static_flag"; then
-      # Neither direct hardcoding nor static linking is supported with a
-      # broken collect2.
-      hardcode_direct=unsupported
-    fi
-    ;;
-
-  aix4*)
-    hardcode_libdir_flag_spec='${wl}-b ${wl}nolibpath ${wl}-b ${wl}libpath:$libdir:/usr/lib:/lib'
-    hardcode_libdir_separator=':'
-    if test "$with_gcc" = yes; then
-      collect2name=`${CC} -print-prog-name=collect2`
-      if test -f "$collect2name" && \
-	 strings "$collect2name" | grep resolve_lib_name >/dev/null
-      then
-	# We have reworked collect2
-	hardcode_direct=yes
-      else
-	# We have old collect2
-	hardcode_direct=unsupported
-	# It fails to find uninstalled libraries when the uninstalled
-	# path is not listed in the libpath.  Setting hardcode_minus_L
-	# to unsupported forces relinking
-	hardcode_minus_L=yes
-	hardcode_libdir_flag_spec='-L$libdir'
-	hardcode_libdir_separator=
-      fi
-      shared_flag='-shared'
-    else
-      shared_flag='${wl}-bM:SRE'
-      hardcode_direct=yes
-    fi
-    allow_undefined_flag=' ${wl}-berok'
-    archive_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bexpall ${wl}-bnoentry${allow_undefined_flag}'
-    archive_expsym_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}'
-    case "$host_os" in aix4.[01]|aix4.[01].*)
-      # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on
-      always_export_symbols=yes ;;
-    esac
-   ;;
-
-  amigaos*)
-    archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_minus_L=yes
-    # see comment about different semantics on the GNU ld section
-    ld_shlibs=no
-    ;;
-
-  cygwin* | mingw*)
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    # hardcode_libdir_flag_spec is actually meaningless, as there is
-    # no search path for DLLs.
-    hardcode_libdir_flag_spec=' '
-    allow_undefined_flag=unsupported
-    # Tell ltmain to make .lib files, not .a files.
-    libext=lib
-    # FIXME: Setting linknames here is a bad hack.
-    archive_cmds='$CC -o $lib $libobjs $linkopts `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-    # The linker will automatically build a .lib file if we build a DLL.
-    old_archive_from_new_cmds='true'
-    # FIXME: Should let the user specify the lib program.
-    old_archive_cmds='lib /OUT:$oldlib$oldobjs'
-    fix_srcfile_path='`cygpath -w $srcfile`'
-    ;;
-
-  freebsd1*)
-    ld_shlibs=no
-    ;;
-
-  # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-  # support.  Future versions do this automatically, but an explicit c++rt0.o
-  # does not break anything, and helps significantly (at the cost of a little
-  # extra space).
-  freebsd2.2*)
-    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts /usr/lib/c++rt0.o'
-    hardcode_libdir_flag_spec='-R$libdir'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-  freebsd2*)
-    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
-    hardcode_direct=yes
-    hardcode_minus_L=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-  freebsd*)
-    archive_cmds='$CC -shared -o $lib $libobjs $deplibs $linkopts'
-    hardcode_libdir_flag_spec='-R$libdir'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  hpux9* | hpux10* | hpux11*)
-    case "$host_os" in
-    hpux9*) archive_cmds='$rm $objdir/$soname~$LD -b +b $install_libdir -o $objdir/$soname $libobjs $deplibs $linkopts~test $objdir/$soname = $lib || mv $objdir/$soname $lib' ;;
-    *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linkopts' ;;
-    esac
-    hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-    hardcode_libdir_separator=:
-    hardcode_direct=yes
-    hardcode_minus_L=yes # Not in the search PATH, but as the default
-			 # location of the library.
-    export_dynamic_flag_spec='${wl}-E'
-    ;;
-
-  irix5* | irix6*)
-    if test "$with_gcc" = yes; then
-      archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-    else
-      archive_cmds='$LD -shared $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-    fi
-    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-    hardcode_libdir_separator=:
-    ;;
-
-  netbsd*)
-    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'  # a.out
-    else
-      archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linkopts'      # ELF
-    fi
-    hardcode_libdir_flag_spec='${wl}-R$libdir'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  openbsd*)
-    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
-    hardcode_libdir_flag_spec='-R$libdir'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  os2*)
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_minus_L=yes
-    allow_undefined_flag=unsupported
-    archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $linkopts $objdir/$libname.def'
-    old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def'
-    ;;
-
-  osf3*)
-    if test "$with_gcc" = yes; then
-      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-    else
-      allow_undefined_flag=' -expect_unresolved \*'
-      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-    fi
-    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-    hardcode_libdir_separator=:
-    ;;
-
-  osf4* | osf5*)  # As osf3* with the addition of the -msym flag
-    if test "$with_gcc" = yes; then
-      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-    else
-      allow_undefined_flag=' -expect_unresolved \*'
-      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-    fi
-    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-    hardcode_libdir_separator=:
-    ;;
-  rhapsody*)
-    archive_cmds='$CC -bundle -undefined suppress -o $lib $libobjs $deplibs $linkopts'
-    hardcode_libdir_flags_spec='-L$libdir'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-                                       
-  sco3.2v5*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-    hardcode_shlibpath_var=no
-    runpath_var=LD_RUN_PATH
-    hardcode_runpath_var=yes
-    ;;
-
-  solaris*)
-    no_undefined_flag=' -z text'
-    # $CC -shared without GNU ld will not create a library from C++
-    # object files and a static libstdc++, better avoid it by now
-    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
-    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
-    hardcode_libdir_flag_spec='-R$libdir'
-    hardcode_shlibpath_var=no
-    case "$host_os" in
-    solaris2.[0-5] | solaris2.[0-5].*) ;;
-    *) # Supported since Solaris 2.6 (maybe 2.5.1?)
-      whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
-    esac
-    ;;
-
-  sunos4*)
-    archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linkopts'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_direct=yes
-    hardcode_minus_L=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  sysv4)
-    if test "x$host_vendor" = xsequent; then
-      # Use $CC to link under sequent, because it throws in some extra .o 
-      # files that make .init and .fini sections work.
-      archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $linkopts'
-    else
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-    fi
-    runpath_var='LD_RUN_PATH'
-    hardcode_shlibpath_var=no
-    hardcode_direct=no #Motorola manual says yes, but my tests say they lie 
-    ;;  
-
-  sysv4.3*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-    hardcode_shlibpath_var=no
-    export_dynamic_flag_spec='-Bexport'
-    ;;
-
-  sysv5*)
-    no_undefined_flag=' -z text'
-    # $CC -shared without GNU ld will not create a library from C++
-    # object files and a static libstdc++, better avoid it by now
-    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
-    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
-    hardcode_libdir_flag_spec=
-    hardcode_shlibpath_var=no
-    runpath_var='LD_RUN_PATH'
-    ;;
-
-  uts4*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_shlibpath_var=no
-    ;;
-
-  dgux*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_shlibpath_var=no
-    ;;
-
-  sysv4*MP*)
-    if test -d /usr/nec; then
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-      hardcode_shlibpath_var=no
-      runpath_var=LD_RUN_PATH
-      hardcode_runpath_var=yes
-      ld_shlibs=yes
-    fi
-    ;;
-
-  sysv4.2uw2*)
-    archive_cmds='$LD -G -o $lib $libobjs $deplibs $linkopts'
-    hardcode_direct=yes
-    hardcode_minus_L=no
-    hardcode_shlibpath_var=no
-    hardcode_runpath_var=yes
-    runpath_var=LD_RUN_PATH
-    ;;
-
-  unixware7*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-    runpath_var='LD_RUN_PATH'
-    hardcode_shlibpath_var=no
-    ;;
-
-  *)
-    ld_shlibs=no
-    ;;
-  esac
-fi
-echo "$ac_t$ld_shlibs" 1>&6
-test "$ld_shlibs" = no && can_build_shared=no
-
-if test -z "$NM"; then
-  echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6
-  case "$NM" in
-  [\\/]* | [A-Za-z]:[\\/]*) ;; # Let the user override the test with a path.
-  *)
-    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-    for ac_dir in $PATH /usr/ucb /usr/ccs/bin /bin; do
-      test -z "$ac_dir" && ac_dir=.
-      if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext; then
-	# Check to see if the nm accepts a BSD-compat flag.
-	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
-	#   nm: unknown option "B" ignored
-	if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
-	  NM="$ac_dir/nm -B"
-	  break
-	elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
-	  NM="$ac_dir/nm -p"
-	  break
-	else
-	  NM=${NM="$ac_dir/nm"} # keep the first match, but
-	  continue # so that we can try to find one that supports BSD flags
-	fi
-      fi
-    done
-    IFS="$ac_save_ifs"
-    test -z "$NM" && NM=nm
-    ;;
-  esac
-  echo "$ac_t$NM" 1>&6
-fi
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6
-
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[BCDEGRST]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
-
-# Transform the above into a raw symbol and a C symbol.
-symxfrm='\1 \2\3 \3'
-
-# Transform an extracted symbol line into a proper C declaration
-global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
-
-# Define system-specific variables.
-case "$host_os" in
-aix*)
-  symcode='[BCDT]'
-  ;;
-cygwin* | mingw*)
-  symcode='[ABCDGISTW]'
-  ;;
-hpux*) # Its linker distinguishes data from code symbols
-  global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'"
-  ;;
-irix*)
-  symcode='[BCDEGRST]'
-  ;;
-solaris*)
-  symcode='[BDT]'
-  ;;
-sysv4)
-  symcode='[DFNSTU]'
-  ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
-  symcode='[ABCDGISTW]'
-fi
-
-# Try without a prefix undercore, then with it.
-for ac_symprfx in "" "_"; do
-
-  # Write the raw and C identifiers.
-  global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode\)[ 	][ 	]*\($ac_symprfx\)$sympat$/$symxfrm/p'"
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-  $rm conftest*
-  cat > conftest.c <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-main(){nm_test_var='a';nm_test_func();return(0);}
-EOF
-
-  echo "$progname:1653: checking if global_symbol_pipe works" >&5
-  if { (eval echo $progname:1654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
-    # Now try to grab the symbols.
-    nlist=conftest.nm
-    if { echo "$progname:1657: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then
-
-      # Try sorting and uniquifying the output.
-      if sort "$nlist" | uniq > "$nlist"T; then
-	mv -f "$nlist"T "$nlist"
-      else
-	rm -f "$nlist"T
-      fi
-
-      # Make sure that we snagged all the symbols we need.
-      if egrep ' nm_test_var$' "$nlist" >/dev/null; then
-	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
-	  cat <<EOF > conftest.c
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EOF
-	  # Now generate the symbol file.
-	  eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.c'
-
-	  cat <<EOF >> conftest.c
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
-  const char *name;
-  lt_ptr_t address;
-}
-lt_preloaded_symbols[] =
-{
-EOF
-	  sed 's/^. \(.*\) \(.*\)$/  {"\2", (lt_ptr_t) \&\2},/' < "$nlist" >> conftest.c
-	  cat <<\EOF >> conftest.c
-  {0, (lt_ptr_t) 0}
-};
-
-#ifdef __cplusplus
-}
-#endif
-EOF
-	  # Now try linking the two files.
-	  mv conftest.$objext conftstm.$objext
-	  save_LIBS="$LIBS"
-	  save_CFLAGS="$CFLAGS"
-	  LIBS="conftstm.$objext"
-	  CFLAGS="$CFLAGS$no_builtin_flag"
-	  if { (eval echo $progname:1709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
-	    pipe_works=yes
-	  else
-	    echo "$progname: failed program was:" >&5
-	    cat conftest.c >&5
-	  fi
-	  LIBS="$save_LIBS"
-	else
-	  echo "cannot find nm_test_func in $nlist" >&5
-	fi
-      else
-	echo "cannot find nm_test_var in $nlist" >&5
-      fi
-    else
-      echo "cannot run $global_symbol_pipe" >&5
-    fi
-  else
-    echo "$progname: failed program was:" >&5
-    cat conftest.c >&5
-  fi
-  $rm conftest* conftst*
-
-  # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
-    break
-  else
-    global_symbol_pipe=
-  fi
-done
-if test "$pipe_works" = yes; then
-  echo "${ac_t}ok" 1>&6
-else
-  echo "${ac_t}failed" 1>&6
-fi
-
-if test -z "$global_symbol_pipe"; then
-  global_symbol_to_cdecl=
-fi
-
-# Check hardcoding attributes.
-echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" || \
-   test -n "$runpath_var"; then
-
-  # We can hardcode non-existant directories.
-  if test "$hardcode_direct" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$hardcode_shlibpath_var" != no &&
-     test "$hardcode_minus_L" != no; then
-    # Linking always hardcodes the temporary library directory.
-    hardcode_action=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    hardcode_action=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  hardcode_action=unsupported
-fi
-echo "$ac_t$hardcode_action" 1>&6
-
-
-reload_flag=
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6
-# PORTME Some linkers may need a different reload flag.
-reload_flag='-r'
-echo "$ac_t$reload_flag" 1>&6
-test -n "$reload_flag" && reload_flag=" $reload_flag"
-
-# PORTME Fill in your ld.so characteristics
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-file_magic_cmd=
-file_magic_test_file=
-deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [regex]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given egrep regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6
-case "$host_os" in
-aix3*)
-  version_type=linux
-  library_names_spec='${libname}${release}.so$versuffix $libname.a'
-  shlibpath_var=LIBPATH
-
-  # AIX has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}.so$major'
-  ;;
-
-aix4*)
-  version_type=linux
-  # AIX has no versioning support, so currently we can not hardcode correct
-  # soname into executable. Probably we can add versioning support to
-  # collect2, so additional links can be useful in future.
-  # We preserve .a as extension for shared libraries though AIX4.2
-  # and later linker supports .so
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a'
-  shlibpath_var=LIBPATH
-  deplibs_check_method=pass_all
-  ;;
-
-amigaos*)
-  library_names_spec='$libname.ixlibrary $libname.a'
-  # Create ${libname}_ixlibrary.a entries in /sys/libs.
-  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
-  ;;
-
-beos*)
-  library_names_spec='${libname}.so'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  deplibs_check_method=pass_all
-  lt_cv_dlopen="load_add_on"
-  lt_cv_dlopen_libs=
-  lt_cv_dlopen_self=yes
-  ;;
-
-bsdi4*)
-  version_type=linux
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
-  file_magic_cmd=/usr/bin/file
-  file_magic_test_file=/shlib/libc.so
-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-  export_dynamic_flag_spec=-rdynamic
-  # the default ld.so.conf also contains /usr/contrib/lib and
-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-  # libtool to hard-code these into programs
-  ;;
-
-cygwin* | mingw*)
-  version_type=windows
-  need_version=no
-  need_lib_prefix=no
-  if test "$with_gcc" = yes; then
-    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a'
-  else
-    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
-  fi
-  dynamic_linker='Win32 ld.exe'
-  deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-  file_magic_cmd='${OBJDUMP} -f'
-  # FIXME: first we should search . and the directory the executable is in
-  shlibpath_var=PATH
-  lt_cv_dlopen="LoadLibrary"
-  lt_cv_dlopen_libs=
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-  
-freebsd*)
-  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
-  version_type=freebsd-$objformat
-  case "$version_type" in
-    freebsd-elf*)
-      deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
-      file_magic_cmd=/usr/bin/file
-      file_magic_test_file=`echo /usr/lib/libc.so*`
-      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
-      need_version=no
-      need_lib_prefix=no
-      ;;
-    freebsd-*)
-      deplibs_check_method=unknown
-      library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
-      need_version=yes
-      ;;
-  esac
-  shlibpath_var=LD_LIBRARY_PATH
-  case "$host_os" in
-  freebsd2* | freebsd3.[01]* | freebsdelf3.[01]*)
-    shlibpath_overrides_runpath=yes
-    ;;
-  *) # from 3.2 on
-    shlibpath_overrides_runpath=no
-    ;;
-  esac
-  ;;
-
-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  deplibs_check_method=pass_all
-  ;;
-
-hpux9* | hpux10* | hpux11*)
-  # Give a soname corresponding to the major version so that dld.sl refuses to
-  # link against other versions.
-  dynamic_linker="$host_os dld.sl"
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  shlibpath_var=SHLIB_PATH
-  shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-  library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
-  soname_spec='${libname}${release}.sl$major'
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
-  postinstall_cmds='chmod 555 $lib'
-  case "$host_os" in
-  hpux10.20*)
-    # TODO:  Does this work for hpux-11 too?
-    deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
-    file_magic_cmd=/usr/bin/file
-    file_magic_test_file=/usr/lib/libc.sl
-    ;;
-  esac
-  ;;
-
-irix5* | irix6*)
-  version_type=irix
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}.so.$major'
-  library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major ${libname}${release}.so $libname.so'
-  case "$host_os" in
-  irix5*)
-    libsuff= shlibsuff=
-    # this will be overridden with pass_all, but let us keep it just in case
-    deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
-    ;;
-  *)
-    case "$LD" in # libtool.m4 will add one of these switches to LD
-    *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
-    *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
-    *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
-    *) libsuff= shlibsuff= libmagic=never-match;;
-    esac
-    ;;
-  esac
-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-  shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-  file_magic_cmd=/usr/bin/file
-  file_magic_test_file=`echo /lib${libsuff}/libc.so*`
-  deplibs_check_method='pass_all'
-  ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
-  dynamic_linker=no
-  ;;
-
-# This must be Linux ELF.
-linux-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  deplibs_check_method=pass_all
-
-  if test -f /lib/ld.so.1; then
-    dynamic_linker='GNU ld.so'
-  else
-    # Only the GNU ld.so supports shared libraries on MkLinux.
-    case "$host_cpu" in
-    powerpc*) dynamic_linker=no ;;
-    *) dynamic_linker='Linux ld.so' ;;
-    esac
-  fi
-  ;;
-
-netbsd*)
-  version_type=sunos
-  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-    dynamic_linker='NetBSD (a.out) ld.so'
-  else
-    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
-    soname_spec='${libname}${release}.so$major'
-    dynamic_linker='NetBSD ld.elf_so'
-  fi
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-openbsd*)
-  version_type=sunos
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-    need_version=no
-  fi
-  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-os2*)
-  libname_spec='$name'
-  need_lib_prefix=no
-  library_names_spec='$libname.dll $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-osf3* | osf4* | osf5*)
-  version_type=osf
-  need_version=no
-  soname_spec='${libname}${release}.so'
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
-  shlibpath_var=LD_LIBRARY_PATH
-  # this will be overridden with pass_all, but let us keep it just in case
-  deplibs_check_method='file_magic COFF format alpha shared library'
-  file_magic_cmd=/usr/bin/file
-  file_magic_test_file=/shlib/libc.so
-  deplibs_check_method='pass_all'
-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-  ;;
-
-rhapsody*)
-  version_type=sunos
-  library_names_spec='${libname}.so'
-  soname_spec='${libname}.so'
-  shlibpath_var=DYLD_LIBRARY_PATH
-  deplibs_check_method=pass_all
-  ;;
-
-sco3.2v5*)
-  version_type=osf
-  soname_spec='${libname}${release}.so$major'
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-solaris*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  # ldd complains unless libraries are executable
-  postinstall_cmds='chmod +x $lib'
-  deplibs_check_method="file_magic ELF [0-9][0-9]-bit [LM]SB dynamic lib"
-  file_magic_cmd=/usr/bin/file
-  file_magic_test_file=/lib/libc.so
-  ;;
-
-sunos4*)
-  version_type=sunos
-  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-  version_type=linux
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  case "$host_vendor" in
-    sequent)
-      file_magic_cmd='/bin/file'
-      deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
-      ;;
-    ncr)
-      deplibs_check_method='pass_all'
-      ;;
-    motorola)
-      need_lib_prefix=no
-      need_version=no
-      shlibpath_overrides_runpath=no
-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-      deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
-      file_magic_cmd=/usr/bin/file
-      file_magic_test_file=`echo /usr/lib/libc.so*`
-      ;;
-  esac
-  ;;
-
-uts4*)
-  version_type=linux
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-dgux*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-sysv4*MP*)
-  if test -d /usr/nec ;then
-    version_type=linux
-    library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
-    soname_spec='$libname.so.$major'
-    shlibpath_var=LD_LIBRARY_PATH
-  fi
-  ;;
-
-*)
-  dynamic_linker=no
-  ;;
-esac
-echo "$ac_t$dynamic_linker" 1>&6
-test "$dynamic_linker" = no && can_build_shared=no
-
-# Report the final consequences.
-echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6
-
-# Only try to build win32 dlls if AC_LIBTOOL_WIN32_DLL was used in
-# configure.in, otherwise build static only libraries.
-case "$host_os" in
-cygwin* | mingw* | os2*)
-  if test x$can_build_shared = xyes; then
-    test x$enable_win32_dll = xno && can_build_shared=no
-    echo "checking if package supports dlls... $can_build_shared" 1>&6
-  fi
-;;
-esac
-
-if test -n "$file_magic_test_file" && test -n "$file_magic_cmd"; then
-  case "$deplibs_check_method" in
-  "file_magic "*)
-    file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
-    if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-       egrep "$file_magic_regex" > /dev/null; then
-      :
-    else
-      cat <<EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** [email protected]
-
-EOF
-    fi ;;
-  esac
-fi
-
-echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case "$host_os" in
-aix3*)
-  test "$enable_shared" = yes && enable_static=no
-  if test -n "$RANLIB"; then
-    archive_cmds="$archive_cmds~\$RANLIB \$lib"
-    postinstall_cmds='$RANLIB $lib'
-  fi
-  ;;
-
-aix4*)
-  test "$enable_shared" = yes && enable_static=no
-  ;;
-esac
-
-echo "$ac_t$enable_shared" 1>&6
-
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-
-echo "checking whether to build static libraries... $enable_static" 1>&6
-
-if test "$hardcode_action" = relink; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-
-echo $ac_n "checking for objdir... $ac_c" 1>&6
-rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
-  objdir=.libs
-else
-  # MS-DOS does not allow filenames that begin with a dot.
-  objdir=_libs
-fi
-rmdir .libs 2>/dev/null
-echo "$ac_t$objdir" 1>&6
-
-if test "x$enable_dlopen" != xyes; then
-  enable_dlopen=unknown
-  enable_dlopen_self=unknown
-  enable_dlopen_self_static=unknown
-else
-if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then
-  lt_cv_dlopen=no lt_cv_dlopen_libs=
-echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "$progname:2248: checking for dlopen in -ldl" >&5
-ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-ldl  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2256 "ltconfig"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen();
-
-int main() {
-dlopen()
-; return 0; }
-EOF
-if { (eval echo $progname:2269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-  echo "$ac_t""no" 1>&6
-echo $ac_n "checking for dlopen""... $ac_c" 1>&6
-echo "$progname:2288: checking for dlopen" >&5
-if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 2293 "ltconfig"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char dlopen(); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_dlopen) || defined (__stub___dlopen)
-choke me
-#else
-dlopen();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo $progname:2318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_func_dlopen=yes"
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_func_dlopen=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  lt_cv_dlopen="dlopen"
-else
-  echo "$ac_t""no" 1>&6
-echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
-echo "$progname:2335: checking for dld_link in -ldld" >&5
-ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-ldld  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2343 "ltconfig"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dld_link();
-
-int main() {
-dld_link()
-; return 0; }
-EOF
-if { (eval echo $progname:2356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
-else
-  echo "$ac_t""no" 1>&6
-echo $ac_n "checking for shl_load""... $ac_c" 1>&6
-echo "$progname:2375: checking for shl_load" >&5
-if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 2380 "ltconfig"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char shl_load(); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_shl_load) || defined (__stub___shl_load)
-choke me
-#else
-shl_load();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo $progname:2405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_func_shl_load=yes"
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_func_shl_load=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  lt_cv_dlopen="shl_load"
-else
-  echo "$ac_t""no" 1>&6
-echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "$progname:2423: checking for shl_load in -ldld" >&5
-ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-ldld  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2431 "ltconfig"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load();
-
-int main() {
-shl_load()
-; return 0; }
-EOF
-if { (eval echo $progname:2445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-
-fi
-
-    
-fi
-
-  
-fi
-
-
-fi
-
-fi
-
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  fi
-
-  case "$lt_cv_dlopen" in
-  dlopen)
-for ac_hdr in dlfcn.h; do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "$progname:2488: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 2493 "ltconfig"
-#include <$ac_hdr>
-int fnord = 0;
-EOF
-ac_try="$ac_compile >/dev/null 2>conftest.out"
-{ (eval echo $progname:2498: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=yes"
-else
-  echo "$ac_err" >&5
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-done
-
-    if test "x$ac_cv_header_dlfcn_h" = xyes; then
-      CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-    fi
-    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-  echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:2526: checking whether a program can dlopen itself" >&5
-if test "${lt_cv_dlopen_self+set}" = set; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test "$cross_compiling" = yes; then
-    lt_cv_dlopen_self=cross
-  else
-    cat > conftest.c <<EOF
-#line 2534 "ltconfig"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LTDL_GLOBAL	RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-#  define LTDL_GLOBAL	DL_GLOBAL
-# else
-#  define LTDL_GLOBAL	0
-# endif
-#endif
-
-/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LTDL_LAZY_OR_NOW
-# ifdef RTLD_LAZY
-#  define LTDL_LAZY_OR_NOW	RTLD_LAZY
-# else
-#  ifdef DL_LAZY
-#   define LTDL_LAZY_OR_NOW	DL_LAZY
-#  else
-#   ifdef RTLD_NOW
-#    define LTDL_LAZY_OR_NOW	RTLD_NOW
-#   else
-#    ifdef DL_NOW
-#     define LTDL_LAZY_OR_NOW	DL_NOW
-#    else
-#     define LTDL_LAZY_OR_NOW	0
-#    endif
-#   endif
-#  endif
-# endif
-#endif
-
-fnord() { int i=42;}
-main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
-    if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
-	       if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } 
-
-EOF
-if { (eval echo $progname:2580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
-  lt_cv_dlopen_self=yes
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -fr conftest*
-  lt_cv_dlopen_self=no
-fi
-rm -fr conftest*
-fi
-
-fi
-
-echo "$ac_t""$lt_cv_dlopen_self" 1>&6
-
-  if test "$lt_cv_dlopen_self" = yes; then
-    LDFLAGS="$LDFLAGS $link_static_flag"
-  echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:2599: checking whether a statically linked program can dlopen itself" >&5
-if test "${lt_cv_dlopen_self_static+set}" = set; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test "$cross_compiling" = yes; then
-    lt_cv_dlopen_self_static=cross
-  else
-    cat > conftest.c <<EOF
-#line 2607 "ltconfig"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LTDL_GLOBAL	RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-#  define LTDL_GLOBAL	DL_GLOBAL
-# else
-#  define LTDL_GLOBAL	0
-# endif
-#endif
-
-/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LTDL_LAZY_OR_NOW
-# ifdef RTLD_LAZY
-#  define LTDL_LAZY_OR_NOW	RTLD_LAZY
-# else
-#  ifdef DL_LAZY
-#   define LTDL_LAZY_OR_NOW	DL_LAZY
-#  else
-#   ifdef RTLD_NOW
-#    define LTDL_LAZY_OR_NOW	RTLD_NOW
-#   else
-#    ifdef DL_NOW
-#     define LTDL_LAZY_OR_NOW	DL_NOW
-#    else
-#     define LTDL_LAZY_OR_NOW	0
-#    endif
-#   endif
-#  endif
-# endif
-#endif
-
-fnord() { int i=42;}
-main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
-    if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
-    if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } 
-
-EOF
-if { (eval echo $progname:2653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
-  lt_cv_dlopen_self_static=yes
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -fr conftest*
-  lt_cv_dlopen_self_static=no
-fi
-rm -fr conftest*
-fi
-
-fi
-
-echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6
-fi
-    ;;
-  esac
-
-  case "$lt_cv_dlopen_self" in
-  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-  *) enable_dlopen_self=unknown ;;
-  esac
-
-  case "$lt_cv_dlopen_self_static" in
-  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-  *) enable_dlopen_self_static=unknown ;;
-  esac
-fi
-
-# Copy echo and quote the copy, instead of the original, because it is
-# used later.
-ltecho="$echo"
-if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then
-   ltecho="$CONFIG_SHELL \$0 --fallback-echo"
-fi
-LTSHELL="$SHELL"
-
-LTCONFIG_VERSION="$VERSION"
-
-# Only quote variables if we're using ltmain.sh.
-case "$ltmain" in
-*.sh)
-  # Now quote all the things that may contain metacharacters.
-  for var in ltecho old_CC old_CFLAGS old_CPPFLAGS \
-    old_LD old_LDFLAGS old_LIBS \
-    old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS \
-    AR CC LD LN_S NM LTSHELL LTCONFIG_VERSION \
-    reload_flag reload_cmds wl \
-    pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
-    thread_safe_flag_spec whole_archive_flag_spec libname_spec \
-    library_names_spec soname_spec \
-    RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
-    old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds postuninstall_cmds \
-    file_magic_cmd export_symbols_cmds deplibs_check_method allow_undefined_flag no_undefined_flag \
-    finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
-    hardcode_libdir_flag_spec hardcode_libdir_separator  \
-    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-    compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
-
-    case "$var" in
-    reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
-    old_postinstall_cmds | old_postuninstall_cmds | \
-    export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
-    postinstall_cmds | postuninstall_cmds | \
-    finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-      # Double-quote double-evaled strings.
-      eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-      ;;
-    *)
-      eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-      ;;
-    esac
-  done
-
-  case "$ltecho" in
-  *'\$0 --fallback-echo"')
-    ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-    ;;
-  esac
-
-  trap "$rm \"$ofile\"; exit 1" 1 2 15
-  echo "creating $ofile"
-  $rm "$ofile"
-  cat <<EOF > "$ofile"
-#! $SHELL
-
-# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh.
-#
-# Copyright (C) 1996-1999 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <[email protected]>, 1996
-#
-# 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 2 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, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="sed -e s/^X//"
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
-
-### BEGIN LIBTOOL CONFIG
-EOF
-  cfgfile="$ofile"
-  ;;
-
-*)
-  # Double-quote the variables that need it (for aesthetics).
-  for var in old_CC old_CFLAGS old_CPPFLAGS \
-    old_LD old_LDFLAGS old_LIBS \
-    old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS; do
-    eval "$var=\\\"\$var\\\""
-  done
-
-  # Just create a config file.
-  cfgfile="$ofile.cfg"
-  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
-  echo "creating $cfgfile"
-  $rm "$cfgfile"
-  cat <<EOF > "$cfgfile"
-# `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-EOF
-  ;;
-esac
-
-cat <<EOF >> "$cfgfile"
-# Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# CC=$old_CC CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\
-# LD=$old_LD LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS \\
-# NM=$old_NM RANLIB=$old_RANLIB LN_S=$old_LN_S \\
-# DLLTOOL=$old_DLLTOOL OBJDUMP=$old_OBJDUMP AS=$old_AS \\
-#   $0$ltconfig_args
-#
-# Compiler and other test output produced by $progname, useful for
-# debugging $progname, is in ./config.log if it exists.
-
-# The version of $progname that generated this script.
-LTCONFIG_VERSION=$LTCONFIG_VERSION
-
-# Shell to use when invoking shell scripts.
-SHELL=$LTSHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-
-# An echo program that does not interpret backslashes.
-echo=$ltecho
-
-# The archiver.
-AR=$AR
-
-# The default C compiler.
-CC=$CC
-
-# The linker used to build libraries.
-LD=$LD
-
-# Whether we need hard or soft links.
-LN_S=$LN_S
-
-# A BSD-compatible nm program.
-NM=$NM
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$reload_flag
-reload_cmds=$reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$wl
-
-# Object file suffix (normally "o").
-objext="$objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$pic_flag
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$compiler_c_o
-
-# Can we write directly to a .lo ?
-compiler_o_lo=$compiler_o_lo
-
-# Must we lock files when doing compilation ?
-need_locks=$need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$link_static_flag
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$no_builtin_flag
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$export_dynamic_flag_spec
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$whole_archive_flag_spec
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$thread_safe_flag_spec
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$libname_spec
-
-# List of archive names.  First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$RANLIB
-old_archive_cmds=$old_archive_cmds
-old_postinstall_cmds=$old_postinstall_cmds
-old_postuninstall_cmds=$old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$old_archive_from_new_cmds
-
-# Commands used to build and install a shared archive.
-archive_cmds=$archive_cmds
-archive_expsym_cmds=$archive_expsym_cmds
-postinstall_cmds=$postinstall_cmds
-postuninstall_cmds=$postuninstall_cmds
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$allow_undefined_flag
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$no_undefined_flag
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$global_symbol_to_cdecl
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$hardcode_libdir_separator
-
-# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$fix_srcfile_path"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols
-
-# The commands to list exported symbols.
-export_symbols_cmds=$export_symbols_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$exclude_expsyms
-
-# Symbols that must always be exported.
-include_expsyms=$include_expsyms
-
-EOF
-
-case "$ltmain" in
-*.sh)
-  echo '### END LIBTOOL CONFIG' >> "$ofile"
-  echo >> "$ofile"
-  case "$host_os" in
-  aix3*)
-    cat <<\EOF >> "$ofile"
-
-# AIX sometimes has problems with the GCC collect2 program.  For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
-  COLLECT_NAMES=
-  export COLLECT_NAMES
-fi
-EOF
-    ;;
-  esac
-
-  # Append the ltmain.sh script.
-  sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1)
-  # We use sed instead of cat because bash on DJGPP gets confused if
-  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
-  # text mode, it properly converts lines to CR/LF.  This bash problem
-  # is reportedly fixed, but why not run on old versions too?
-
-  chmod +x "$ofile"
-  ;;
-
-*)
-  # Compile the libtool program.
-  echo "FIXME: would compile $ltmain"
-  ;;
-esac
-
-test -n "$cache_file" || exit 0
-
-# AC_CACHE_SAVE
-trap '' 1 2 15
-cat > confcache <<\EOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs.  It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already.  You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
-  case `(ac_space=' '; set | grep ac_space) 2>&1` in
-  *ac_space=\ *)
-    # `set' does not quote correctly, so add quotes (double-quote substitution
-    # turns \\\\ into \\, and sed turns \\ into \).
-    sed -n \
-      -e "s/'/'\\\\''/g" \
-      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
-    ;;
-  *)
-    # `set' quotes correctly as required by POSIX, so do not add quotes.
-    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
-    ;;
-  esac >> confcache
-if cmp -s $cache_file confcache; then
-  :
-else
-  if test -w $cache_file; then
-    echo "updating cache $cache_file"
-    cat confcache > $cache_file
-  else
-    echo "not updating unwritable cache $cache_file"
-  fi
-fi
-rm -f confcache
-
-exit 0
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:

+ 0 - 6399
ltmain.sh

@@ -1,6399 +0,0 @@
-# ltmain.sh - Provide generalized library-building support services.
-# NOTE: Changing this file will not affect anything until you rerun configure.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003
-# Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <[email protected]>, 1996
-#
-# 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 2 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, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Check that we have a working $echo.
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
-  # Yippee, $echo works!
-  :
-else
-  # Restart under the correct shell, and then maybe $echo will work.
-  exec $SHELL "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<EOF
-$*
-EOF
-  exit 0
-fi
-
-# The name of this program.
-progname=`$echo "$0" | ${SED} 's%^.*/%%'`
-modename="$progname"
-
-# Constants.
-PROGRAM=ltmain.sh
-PACKAGE=libtool
-VERSION=1.5.2
-TIMESTAMP=" (1.1220.2.60 2004/01/25 12:25:08) Debian$Rev: 192 $"
-
-default_mode=
-help="Try \`$progname --help' for more information."
-magic="%%%MAGIC variable%%%"
-mkdir="mkdir"
-mv="mv -f"
-rm="rm -f"
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed="${SED}"' -e 1s/^X//'
-sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
-# test EBCDIC or ASCII
-case `echo A|tr A '\301'` in
- A) # EBCDIC based system
-  SP2NL="tr '\100' '\n'"
-  NL2SP="tr '\r\n' '\100\100'"
-  ;;
- *) # Assume ASCII based system
-  SP2NL="tr '\040' '\012'"
-  NL2SP="tr '\015\012' '\040\040'"
-  ;;
-esac
-
-# NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-# We save the old values to restore during execute mode.
-if test "${LC_ALL+set}" = set; then
-  save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
-fi
-if test "${LANG+set}" = set; then
-  save_LANG="$LANG"; LANG=C; export LANG
-fi
-
-# Make sure IFS has a sensible default
-: ${IFS=" 	
-"}
-
-if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-  $echo "$modename: not configured to build any kind of library" 1>&2
-  $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-  exit 1
-fi
-
-# Global variables.
-mode=$default_mode
-nonopt=
-prev=
-prevopt=
-run=
-show="$echo"
-show_help=
-execute_dlfiles=
-lo2o="s/\\.lo\$/.${objext}/"
-o2lo="s/\\.${objext}\$/.lo/"
-
-#####################################
-# Shell function definitions:
-# This seems to be the best place for them
-
-# Need a lot of goo to handle *both* DLLs and import libs
-# Has to be a shell function in order to 'eat' the argument
-# that is supplied when $file_magic_command is called.
-win32_libid () {
-  win32_libid_type="unknown"
-  win32_fileres=`file -L $1 2>/dev/null`
-  case $win32_fileres in
-  *ar\ archive\ import\ library*) # definitely import
-    win32_libid_type="x86 archive import"
-    ;;
-  *ar\ archive*) # could be an import, or static
-    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
-      grep -E 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
-      win32_nmres=`eval $NM -f posix -A $1 | \
-	sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'`
-      if test "X$win32_nmres" = "Ximport" ; then
-        win32_libid_type="x86 archive import"
-      else
-        win32_libid_type="x86 archive static"
-      fi
-    fi
-    ;;
-  *DLL*) 
-    win32_libid_type="x86 DLL"
-    ;;
-  *executable*) # but shell scripts are "executable" too...
-    case $win32_fileres in
-    *MS\ Windows\ PE\ Intel*)
-      win32_libid_type="x86 DLL"
-      ;;
-    esac
-    ;;
-  esac
-  $echo $win32_libid_type
-}
-
-# End of Shell function definitions
-#####################################
-
-# Parse our command line options once, thoroughly.
-while test "$#" -gt 0
-do
-  arg="$1"
-  shift
-
-  case $arg in
-  -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
-  *) optarg= ;;
-  esac
-
-  # If the previous option needs an argument, assign it.
-  if test -n "$prev"; then
-    case $prev in
-    execute_dlfiles)
-      execute_dlfiles="$execute_dlfiles $arg"
-      ;;
-    tag)
-      tagname="$arg"
-      preserve_args="${preserve_args}=$arg"
-
-      # Check whether tagname contains only valid characters
-      case $tagname in
-      *[!-_A-Za-z0-9,/]*)
-	$echo "$progname: invalid tag name: $tagname" 1>&2
-	exit 1
-	;;
-      esac
-
-      case $tagname in
-      CC)
-	# Don't test for the "default" C tag, as we know, it's there, but
-	# not specially marked.
-	;;
-      *)
-	if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$0" > /dev/null; then
-	  taglist="$taglist $tagname"
-	  # Evaluate the configuration.
-	  eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $0`"
-	else
-	  $echo "$progname: ignoring unknown tag $tagname" 1>&2
-	fi
-	;;
-      esac
-      ;;
-    *)
-      eval "$prev=\$arg"
-      ;;
-    esac
-
-    prev=
-    prevopt=
-    continue
-  fi
-
-  # Have we seen a non-optional argument yet?
-  case $arg in
-  --help)
-    show_help=yes
-    ;;
-
-  --version)
-    $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
-    $echo
-    $echo "Copyright (C) 2003  Free Software Foundation, Inc."
-    $echo "This is free software; see the source for copying conditions.  There is NO"
-    $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-    exit 0
-    ;;
-
-  --config)
-    ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0
-    # Now print the configurations for the tags.
-    for tagname in $taglist; do
-      ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$0"
-    done
-    exit 0
-    ;;
-
-  --debug)
-    $echo "$progname: enabling shell trace mode"
-    set -x
-    preserve_args="$preserve_args $arg"
-    ;;
-
-  --dry-run | -n)
-    run=:
-    ;;
-
-  --features)
-    $echo "host: $host"
-    if test "$build_libtool_libs" = yes; then
-      $echo "enable shared libraries"
-    else
-      $echo "disable shared libraries"
-    fi
-    if test "$build_old_libs" = yes; then
-      $echo "enable static libraries"
-    else
-      $echo "disable static libraries"
-    fi
-    exit 0
-    ;;
-
-  --finish) mode="finish" ;;
-
-  --mode) prevopt="--mode" prev=mode ;;
-  --mode=*) mode="$optarg" ;;
-
-  --preserve-dup-deps) duplicate_deps="yes" ;;
-
-  --quiet | --silent)
-    show=:
-    preserve_args="$preserve_args $arg"
-    ;;
-
-  --tag) prevopt="--tag" prev=tag ;;
-  --tag=*)
-    set tag "$optarg" ${1+"$@"}
-    shift
-    prev=tag
-    preserve_args="$preserve_args --tag"
-    ;;
-
-  -dlopen)
-    prevopt="-dlopen"
-    prev=execute_dlfiles
-    ;;
-
-  -*)
-    $echo "$modename: unrecognized option \`$arg'" 1>&2
-    $echo "$help" 1>&2
-    exit 1
-    ;;
-
-  *)
-    nonopt="$arg"
-    break
-    ;;
-  esac
-done
-
-if test -n "$prevopt"; then
-  $echo "$modename: option \`$prevopt' requires an argument" 1>&2
-  $echo "$help" 1>&2
-  exit 1
-fi
-
-# If this variable is set in any of the actions, the command in it
-# will be execed at the end.  This prevents here-documents from being
-# left over by shells.
-exec_cmd=
-
-if test -z "$show_help"; then
-
-  # Infer the operation mode.
-  if test -z "$mode"; then
-    $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
-    $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2
-    case $nonopt in
-    *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
-      mode=link
-      for arg
-      do
-	case $arg in
-	-c)
-	   mode=compile
-	   break
-	   ;;
-	esac
-      done
-      ;;
-    *db | *dbx | *strace | *truss)
-      mode=execute
-      ;;
-    *install*|cp|mv)
-      mode=install
-      ;;
-    *rm)
-      mode=uninstall
-      ;;
-    *)
-      # If we have no mode, but dlfiles were specified, then do execute mode.
-      test -n "$execute_dlfiles" && mode=execute
-
-      # Just use the default operation mode.
-      if test -z "$mode"; then
-	if test -n "$nonopt"; then
-	  $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
-	else
-	  $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
-	fi
-      fi
-      ;;
-    esac
-  fi
-
-  # Only execute mode is allowed to have -dlopen flags.
-  if test -n "$execute_dlfiles" && test "$mode" != execute; then
-    $echo "$modename: unrecognized option \`-dlopen'" 1>&2
-    $echo "$help" 1>&2
-    exit 1
-  fi
-
-  # Change the help message to a mode-specific one.
-  generic_help="$help"
-  help="Try \`$modename --help --mode=$mode' for more information."
-
-  # These modes are in order of execution frequency so that they run quickly.
-  case $mode in
-  # libtool compile mode
-  compile)
-    modename="$modename: compile"
-    # Get the compilation command and the source file.
-    base_compile=
-    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
-    suppress_opt=yes
-    suppress_output=
-    arg_mode=normal
-    libobj=
-    later=
-
-    for arg
-    do
-      case "$arg_mode" in
-      arg  )
-	# do not "continue".  Instead, add this to base_compile
-	lastarg="$arg"
-	arg_mode=normal
-	;;
-
-      target )
-	libobj="$arg"
-	arg_mode=normal
-	continue
-	;;
-
-      normal )
-	# Accept any command-line options.
-	case $arg in
-	-o)
-	  if test -n "$libobj" ; then
-	    $echo "$modename: you cannot specify \`-o' more than once" 1>&2
-	    exit 1
-	  fi
-	  arg_mode=target
-	  continue
-	  ;;
-
-	-static | -prefer-pic | -prefer-non-pic)
-	  later="$later $arg"
-	  continue
-	  ;;
-
-	-no-suppress)
-	  suppress_opt=no
-	  continue
-	  ;;
-
-	-Xcompiler)
-	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
-	  continue      #  The current "srcfile" will either be retained or
-	  ;;            #  replaced later.  I would guess that would be a bug.
-
-	-Wc,*)
-	  args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
-	  lastarg=
-	  save_ifs="$IFS"; IFS=','
-	  for arg in $args; do
-	    IFS="$save_ifs"
-
-	    # Double-quote args containing other shell metacharacters.
-	    # Many Bourne shells cannot handle close brackets correctly
-	    # in scan sets, so we specify it separately.
-	    case $arg in
-	      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
-	      arg="\"$arg\""
-	      ;;
-	    esac
-	    lastarg="$lastarg $arg"
-	  done
-	  IFS="$save_ifs"
-	  lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
-
-	  # Add the arguments to base_compile.
-	  base_compile="$base_compile $lastarg"
-	  continue
-	  ;;
-
-	* )
-	  # Accept the current argument as the source file.
-	  # The previous "srcfile" becomes the current argument.
-	  #
-	  lastarg="$srcfile"
-	  srcfile="$arg"
-	  ;;
-	esac  #  case $arg
-	;;
-      esac    #  case $arg_mode
-
-      # Aesthetically quote the previous argument.
-      lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
-
-      case $lastarg in
-      # Double-quote args containing other shell metacharacters.
-      # Many Bourne shells cannot handle close brackets correctly
-      # in scan sets, so we specify it separately.
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
-	lastarg="\"$lastarg\""
-	;;
-      esac
-
-      base_compile="$base_compile $lastarg"
-    done # for arg
-
-    case $arg_mode in
-    arg)
-      $echo "$modename: you must specify an argument for -Xcompile"
-      exit 1
-      ;;
-    target)
-      $echo "$modename: you must specify a target with \`-o'" 1>&2
-      exit 1
-      ;;
-    *)
-      # Get the name of the library object.
-      [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
-      ;;
-    esac
-
-    # Recognize several different file suffixes.
-    # If the user specifies -o file.o, it is replaced with file.lo
-    xform='[cCFSifmso]'
-    case $libobj in
-    *.ada) xform=ada ;;
-    *.adb) xform=adb ;;
-    *.ads) xform=ads ;;
-    *.asm) xform=asm ;;
-    *.c++) xform=c++ ;;
-    *.cc) xform=cc ;;
-    *.ii) xform=ii ;;
-    *.class) xform=class ;;
-    *.cpp) xform=cpp ;;
-    *.cxx) xform=cxx ;;
-    *.f90) xform=f90 ;;
-    *.for) xform=for ;;
-    *.java) xform=java ;;
-    esac
-
-    libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
-
-    case $libobj in
-    *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
-    *)
-      $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
-      exit 1
-      ;;
-    esac
-
-    # Infer tagged configuration to use if any are available and
-    # if one wasn't chosen via the "--tag" command line option.
-    # Only attempt this if the compiler in the base compile
-    # command doesn't match the default compiler.
-    if test -n "$available_tags" && test -z "$tagname"; then
-      case $base_compile in
-      # Blanks in the command may have been stripped by the calling shell,
-      # but not from the CC environment variable when configure was run.
-      " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "*) ;;
-      # Blanks at the start of $base_compile will cause this to fail
-      # if we don't check for them as well.
-      *)
-	for z in $available_tags; do
-	  if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then
-	    # Evaluate the configuration.
-	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`"
-	    case "$base_compile " in
-	    "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*)
-	      # The compiler in the base compile command matches
-	      # the one in the tagged configuration.
-	      # Assume this is the tagged configuration we want.
-	      tagname=$z
-	      break
-	      ;;
-	    esac
-	  fi
-	done
-	# If $tagname still isn't set, then no tagged configuration
-	# was found and let the user know that the "--tag" command
-	# line option must be used.
-	if test -z "$tagname"; then
-	  $echo "$modename: unable to infer tagged configuration"
-	  $echo "$modename: specify a tag with \`--tag'" 1>&2
-	  exit 1
-#        else
-#          $echo "$modename: using $tagname tagged configuration"
-	fi
-	;;
-      esac
-    fi
-
-    for arg in $later; do
-      case $arg in
-      -static)
-	build_old_libs=yes
-	continue
-	;;
-
-      -prefer-pic)
-	pic_mode=yes
-	continue
-	;;
-
-      -prefer-non-pic)
-	pic_mode=no
-	continue
-	;;
-      esac
-    done
-
-    objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
-    xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
-    if test "X$xdir" = "X$obj"; then
-      xdir=
-    else
-      xdir=$xdir/
-    fi
-    lobj=${xdir}$objdir/$objname
-
-    if test -z "$base_compile"; then
-      $echo "$modename: you must specify a compilation command" 1>&2
-      $echo "$help" 1>&2
-      exit 1
-    fi
-
-    # Delete any leftover library objects.
-    if test "$build_old_libs" = yes; then
-      removelist="$obj $lobj $libobj ${libobj}T"
-    else
-      removelist="$lobj $libobj ${libobj}T"
-    fi
-
-    $run $rm $removelist
-    trap "$run $rm $removelist; exit 1" 1 2 15
-
-    # On Cygwin there's no "real" PIC flag so we must build both object types
-    case $host_os in
-    cygwin* | mingw* | pw32* | os2*)
-      pic_mode=default
-      ;;
-    esac
-    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
-      # non-PIC code in shared libraries is not supported
-      pic_mode=default
-    fi
-
-    # Calculate the filename of the output object if compiler does
-    # not support -o with -c
-    if test "$compiler_c_o" = no; then
-      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
-      lockfile="$output_obj.lock"
-      removelist="$removelist $output_obj $lockfile"
-      trap "$run $rm $removelist; exit 1" 1 2 15
-    else
-      output_obj=
-      need_locks=no
-      lockfile=
-    fi
-
-    # Lock this critical section if it is needed
-    # We use this script file to make the link, it avoids creating a new file
-    if test "$need_locks" = yes; then
-      until $run ln "$0" "$lockfile" 2>/dev/null; do
-	$show "Waiting for $lockfile to be removed"
-	sleep 2
-      done
-    elif test "$need_locks" = warn; then
-      if test -f "$lockfile"; then
-	$echo "\
-*** ERROR, $lockfile exists and contains:
-`cat $lockfile 2>/dev/null`
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
-	$run $rm $removelist
-	exit 1
-      fi
-      $echo $srcfile > "$lockfile"
-    fi
-
-    if test -n "$fix_srcfile_path"; then
-      eval srcfile=\"$fix_srcfile_path\"
-    fi
-
-    $run $rm "$libobj" "${libobj}T"
-
-    # Create a libtool object file (analogous to a ".la" file),
-    # but don't create it if we're doing a dry run.
-    test -z "$run" && cat > ${libobj}T <<EOF
-# $libobj - a libtool object file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-EOF
-
-    # Only build a PIC object if we are building libtool libraries.
-    if test "$build_libtool_libs" = yes; then
-      # Without this assignment, base_compile gets emptied.
-      fbsd_hideous_sh_bug=$base_compile
-
-      if test "$pic_mode" != no; then
-	command="$base_compile $srcfile $pic_flag"
-      else
-	# Don't build PIC code
-	command="$base_compile $srcfile"
-      fi
-
-      if test ! -d "${xdir}$objdir"; then
-	$show "$mkdir ${xdir}$objdir"
-	$run $mkdir ${xdir}$objdir
-	status=$?
-	if test "$status" -ne 0 && test ! -d "${xdir}$objdir"; then
-	  exit $status
-	fi
-      fi
-
-      if test -z "$output_obj"; then
-	# Place PIC objects in $objdir
-	command="$command -o $lobj"
-      fi
-
-      $run $rm "$lobj" "$output_obj"
-
-      $show "$command"
-      if $run eval "$command"; then :
-      else
-	test -n "$output_obj" && $run $rm $removelist
-	exit 1
-      fi
-
-      if test "$need_locks" = warn &&
-	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
-	$echo "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
-	$run $rm $removelist
-	exit 1
-      fi
-
-      # Just move the object if needed, then go on to compile the next one
-      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
-	$show "$mv $output_obj $lobj"
-	if $run $mv $output_obj $lobj; then :
-	else
-	  error=$?
-	  $run $rm $removelist
-	  exit $error
-	fi
-      fi
-
-      # Append the name of the PIC object to the libtool object file.
-      test -z "$run" && cat >> ${libobj}T <<EOF
-pic_object='$objdir/$objname'
-
-EOF
-
-      # Allow error messages only from the first compilation.
-      if test "$suppress_opt" = yes; then
-        suppress_output=' >/dev/null 2>&1'
-      fi
-    else
-      # No PIC object so indicate it doesn't exist in the libtool
-      # object file.
-      test -z "$run" && cat >> ${libobj}T <<EOF
-pic_object=none
-
-EOF
-    fi
-
-    # Only build a position-dependent object if we build old libraries.
-    if test "$build_old_libs" = yes; then
-      if test "$pic_mode" != yes; then
-	# Don't build PIC code
-	command="$base_compile $srcfile"
-      else
-	command="$base_compile $srcfile $pic_flag"
-      fi
-      if test "$compiler_c_o" = yes; then
-	command="$command -o $obj"
-      fi
-
-      # Suppress compiler output if we already did a PIC compilation.
-      command="$command$suppress_output"
-      $run $rm "$obj" "$output_obj"
-      $show "$command"
-      if $run eval "$command"; then :
-      else
-	$run $rm $removelist
-	exit 1
-      fi
-
-      if test "$need_locks" = warn &&
-	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
-	$echo "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
-	$run $rm $removelist
-	exit 1
-      fi
-
-      # Just move the object if needed
-      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
-	$show "$mv $output_obj $obj"
-	if $run $mv $output_obj $obj; then :
-	else
-	  error=$?
-	  $run $rm $removelist
-	  exit $error
-	fi
-      fi
-
-      # Append the name of the non-PIC object the libtool object file.
-      # Only append if the libtool object file exists.
-      test -z "$run" && cat >> ${libobj}T <<EOF
-# Name of the non-PIC object.
-non_pic_object='$objname'
-
-EOF
-    else
-      # Append the name of the non-PIC object the libtool object file.
-      # Only append if the libtool object file exists.
-      test -z "$run" && cat >> ${libobj}T <<EOF
-# Name of the non-PIC object.
-non_pic_object=none
-
-EOF
-    fi
-
-    $run $mv "${libobj}T" "${libobj}"
-
-    # Unlock the critical section if it was locked
-    if test "$need_locks" != no; then
-      $run $rm "$lockfile"
-    fi
-
-    exit 0
-    ;;
-
-  # libtool link mode
-  link | relink)
-    modename="$modename: link"
-    case $host in
-    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-      # It is impossible to link a dll without this setting, and
-      # we shouldn't force the makefile maintainer to figure out
-      # which system we are compiling for in order to pass an extra
-      # flag for every libtool invocation.
-      # allow_undefined=no
-
-      # FIXME: Unfortunately, there are problems with the above when trying
-      # to make a dll which has undefined symbols, in which case not
-      # even a static library is built.  For now, we need to specify
-      # -no-undefined on the libtool link line when we can be certain
-      # that all symbols are satisfied, otherwise we get a static library.
-      allow_undefined=yes
-      ;;
-    *)
-      allow_undefined=yes
-      ;;
-    esac
-    libtool_args="$nonopt"
-    base_compile="$nonopt $@"
-    compile_command="$nonopt"
-    finalize_command="$nonopt"
-
-    compile_rpath=
-    finalize_rpath=
-    compile_shlibpath=
-    finalize_shlibpath=
-    convenience=
-    old_convenience=
-    deplibs=
-    old_deplibs=
-    compiler_flags=
-    linker_flags=
-    dllsearchpath=
-    lib_search_path=`pwd`
-    inst_prefix_dir=
-
-    avoid_version=no
-    dlfiles=
-    dlprefiles=
-    dlself=no
-    export_dynamic=no
-    export_symbols=
-    export_symbols_regex=
-    generated=
-    libobjs=
-    ltlibs=
-    module=no
-    no_install=no
-    objs=
-    non_pic_objects=
-    precious_files_regex=
-    prefer_static_libs=no
-    preload=no
-    prev=
-    prevarg=
-    release=
-    rpath=
-    xrpath=
-    perm_rpath=
-    temp_rpath=
-    thread_safe=no
-    vinfo=
-    vinfo_number=no
-
-    # Infer tagged configuration to use if any are available and
-    # if one wasn't chosen via the "--tag" command line option.
-    # Only attempt this if the compiler in the base link
-    # command doesn't match the default compiler.
-    if test -n "$available_tags" && test -z "$tagname"; then
-      case $base_compile in
-      # Blanks in the command may have been stripped by the calling shell,
-      # but not from the CC environment variable when configure was run.
-      "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) ;;
-      # Blanks at the start of $base_compile will cause this to fail
-      # if we don't check for them as well.
-      *)
-	for z in $available_tags; do
-	  if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then
-	    # Evaluate the configuration.
-	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`"
-	    case $base_compile in
-	    "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*)
-	      # The compiler in $compile_command matches
-	      # the one in the tagged configuration.
-	      # Assume this is the tagged configuration we want.
-	      tagname=$z
-	      break
-	      ;;
-	    esac
-	  fi
-	done
-	# If $tagname still isn't set, then no tagged configuration
-	# was found and let the user know that the "--tag" command
-	# line option must be used.
-	if test -z "$tagname"; then
-	  $echo "$modename: unable to infer tagged configuration"
-	  $echo "$modename: specify a tag with \`--tag'" 1>&2
-	  exit 1
-#       else
-#         $echo "$modename: using $tagname tagged configuration"
-	fi
-	;;
-      esac
-    fi
-
-    # We need to know -static, to get the right output filenames.
-    for arg
-    do
-      case $arg in
-      -all-static | -static)
-	if test "X$arg" = "X-all-static"; then
-	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
-	    $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
-	  fi
-	  if test -n "$link_static_flag"; then
-	    dlopen_self=$dlopen_self_static
-	  fi
-	else
-	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
-	    dlopen_self=$dlopen_self_static
-	  fi
-	fi
-	build_libtool_libs=no
-	build_old_libs=yes
-	prefer_static_libs=yes
-	break
-	;;
-      esac
-    done
-
-    # See if our shared archives depend on static archives.
-    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
-
-    # Go through the arguments, transforming them on the way.
-    while test "$#" -gt 0; do
-      arg="$1"
-      shift
-      case $arg in
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
-	qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
-	;;
-      *) qarg=$arg ;;
-      esac
-      libtool_args="$libtool_args $qarg"
-
-      # If the previous option needs an argument, assign it.
-      if test -n "$prev"; then
-	case $prev in
-	output)
-	  compile_command="$compile_command @OUTPUT@"
-	  finalize_command="$finalize_command @OUTPUT@"
-	  ;;
-	esac
-
-	case $prev in
-	dlfiles|dlprefiles)
-	  if test "$preload" = no; then
-	    # Add the symbol object into the linking commands.
-	    compile_command="$compile_command @SYMFILE@"
-	    finalize_command="$finalize_command @SYMFILE@"
-	    preload=yes
-	  fi
-	  case $arg in
-	  *.la | *.lo) ;;  # We handle these cases below.
-	  force)
-	    if test "$dlself" = no; then
-	      dlself=needless
-	      export_dynamic=yes
-	    fi
-	    prev=
-	    continue
-	    ;;
-	  self)
-	    if test "$prev" = dlprefiles; then
-	      dlself=yes
-	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
-	      dlself=yes
-	    else
-	      dlself=needless
-	      export_dynamic=yes
-	    fi
-	    prev=
-	    continue
-	    ;;
-	  *)
-	    if test "$prev" = dlfiles; then
-	      dlfiles="$dlfiles $arg"
-	    else
-	      dlprefiles="$dlprefiles $arg"
-	    fi
-	    prev=
-	    continue
-	    ;;
-	  esac
-	  ;;
-	expsyms)
-	  export_symbols="$arg"
-	  if test ! -f "$arg"; then
-	    $echo "$modename: symbol file \`$arg' does not exist"
-	    exit 1
-	  fi
-	  prev=
-	  continue
-	  ;;
-	expsyms_regex)
-	  export_symbols_regex="$arg"
-	  prev=
-	  continue
-	  ;;
-	inst_prefix)
-	  inst_prefix_dir="$arg"
-	  prev=
-	  continue
-	  ;;
-	precious_regex)
-	  precious_files_regex="$arg"
-	  prev=
-	  continue
-	  ;;
-	release)
-	  release="-$arg"
-	  prev=
-	  continue
-	  ;;
-	objectlist)
-	  if test -f "$arg"; then
-	    save_arg=$arg
-	    moreargs=
-	    for fil in `cat $save_arg`
-	    do
-#	      moreargs="$moreargs $fil"
-	      arg=$fil
-	      # A libtool-controlled object.
-
-	      # Check to see that this really is a libtool object.
-	      if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-		pic_object=
-		non_pic_object=
-
-		# Read the .lo file
-		# If there is no directory component, then add one.
-		case $arg in
-		*/* | *\\*) . $arg ;;
-		*) . ./$arg ;;
-		esac
-
-		if test -z "$pic_object" || \
-		   test -z "$non_pic_object" ||
-		   test "$pic_object" = none && \
-		   test "$non_pic_object" = none; then
-		  $echo "$modename: cannot find name of object for \`$arg'" 1>&2
-		  exit 1
-		fi
-
-		# Extract subdirectory from the argument.
-		xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-		if test "X$xdir" = "X$arg"; then
-		  xdir=
-		else
-		  xdir="$xdir/"
-		fi
-
-		if test "$pic_object" != none; then
-		  # Prepend the subdirectory the object is found in.
-		  pic_object="$xdir$pic_object"
-
-		  if test "$prev" = dlfiles; then
-		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-		      dlfiles="$dlfiles $pic_object"
-		      prev=
-		      continue
-		    else
-		      # If libtool objects are unsupported, then we need to preload.
-		      prev=dlprefiles
-		    fi
-		  fi
-
-		  # CHECK ME:  I think I busted this.  -Ossama
-		  if test "$prev" = dlprefiles; then
-		    # Preload the old-style object.
-		    dlprefiles="$dlprefiles $pic_object"
-		    prev=
-		  fi
-
-		  # A PIC object.
-		  libobjs="$libobjs $pic_object"
-		  arg="$pic_object"
-		fi
-
-		# Non-PIC object.
-		if test "$non_pic_object" != none; then
-		  # Prepend the subdirectory the object is found in.
-		  non_pic_object="$xdir$non_pic_object"
-
-		  # A standard non-PIC object
-		  non_pic_objects="$non_pic_objects $non_pic_object"
-		  if test -z "$pic_object" || test "$pic_object" = none ; then
-		    arg="$non_pic_object"
-		  fi
-		fi
-	      else
-		# Only an error if not doing a dry-run.
-		if test -z "$run"; then
-		  $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
-		  exit 1
-		else
-		  # Dry-run case.
-
-		  # Extract subdirectory from the argument.
-		  xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-		  if test "X$xdir" = "X$arg"; then
-		    xdir=
-		  else
-		    xdir="$xdir/"
-		  fi
-
-		  pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
-		  non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
-		  libobjs="$libobjs $pic_object"
-		  non_pic_objects="$non_pic_objects $non_pic_object"
-		fi
-	      fi
-	    done
-	  else
-	    $echo "$modename: link input file \`$save_arg' does not exist"
-	    exit 1
-	  fi
-	  arg=$save_arg
-	  prev=
-	  continue
-	  ;;
-	rpath | xrpath)
-	  # We need an absolute path.
-	  case $arg in
-	  [\\/]* | [A-Za-z]:[\\/]*) ;;
-	  *)
-	    $echo "$modename: only absolute run-paths are allowed" 1>&2
-	    exit 1
-	    ;;
-	  esac
-	  if test "$prev" = rpath; then
-	    case "$rpath " in
-	    *" $arg "*) ;;
-	    *) rpath="$rpath $arg" ;;
-	    esac
-	  else
-	    case "$xrpath " in
-	    *" $arg "*) ;;
-	    *) xrpath="$xrpath $arg" ;;
-	    esac
-	  fi
-	  prev=
-	  continue
-	  ;;
-	xcompiler)
-	  compiler_flags="$compiler_flags $qarg"
-	  prev=
-	  compile_command="$compile_command $qarg"
-	  finalize_command="$finalize_command $qarg"
-	  continue
-	  ;;
-	xlinker)
-	  linker_flags="$linker_flags $qarg"
-	  compiler_flags="$compiler_flags $wl$qarg"
-	  prev=
-	  compile_command="$compile_command $wl$qarg"
-	  finalize_command="$finalize_command $wl$qarg"
-	  continue
-	  ;;
-	xcclinker)
-	  linker_flags="$linker_flags $qarg"
-	  compiler_flags="$compiler_flags $qarg"
-	  prev=
-	  compile_command="$compile_command $qarg"
-	  finalize_command="$finalize_command $qarg"
-	  continue
-	  ;;
-	*)
-	  eval "$prev=\"\$arg\""
-	  prev=
-	  continue
-	  ;;
-	esac
-      fi # test -n "$prev"
-
-      prevarg="$arg"
-
-      case $arg in
-      -all-static)
-	if test -n "$link_static_flag"; then
-	  compile_command="$compile_command $link_static_flag"
-	  finalize_command="$finalize_command $link_static_flag"
-	fi
-	continue
-	;;
-
-      -allow-undefined)
-	# FIXME: remove this flag sometime in the future.
-	$echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
-	continue
-	;;
-
-      -avoid-version)
-	avoid_version=yes
-	continue
-	;;
-
-      -dlopen)
-	prev=dlfiles
-	continue
-	;;
-
-      -dlpreopen)
-	prev=dlprefiles
-	continue
-	;;
-
-      -export-dynamic)
-	export_dynamic=yes
-	continue
-	;;
-
-      -export-symbols | -export-symbols-regex)
-	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
-	  $echo "$modename: more than one -exported-symbols argument is not allowed"
-	  exit 1
-	fi
-	if test "X$arg" = "X-export-symbols"; then
-	  prev=expsyms
-	else
-	  prev=expsyms_regex
-	fi
-	continue
-	;;
-
-      -inst-prefix-dir)
-	prev=inst_prefix
-	continue
-	;;
-
-      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
-      # so, if we see these flags be careful not to treat them like -L
-      -L[A-Z][A-Z]*:*)
-	case $with_gcc/$host in
-	no/*-*-irix* | /*-*-irix*)
-	  compile_command="$compile_command $arg"
-	  finalize_command="$finalize_command $arg"
-	  ;;
-	esac
-	continue
-	;;
-
-      -L*)
-	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
-	# We need an absolute path.
-	case $dir in
-	[\\/]* | [A-Za-z]:[\\/]*) ;;
-	*)
-	  absdir=`cd "$dir" && pwd`
-	  if test -z "$absdir"; then
-	    $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
-	    exit 1
-	  fi
-	  dir="$absdir"
-	  ;;
-	esac
-	case "$deplibs " in
-	*" -L$dir "*) ;;
-	*)
-	  deplibs="$deplibs -L$dir"
-	  lib_search_path="$lib_search_path $dir"
-	  ;;
-	esac
-	case $host in
-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-	  case :$dllsearchpath: in
-	  *":$dir:"*) ;;
-	  *) dllsearchpath="$dllsearchpath:$dir";;
-	  esac
-	  ;;
-	esac
-	continue
-	;;
-
-      -l*)
-	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
-	  case $host in
-	  *-*-cygwin* | *-*-pw32* | *-*-beos*)
-	    # These systems don't actually have a C or math library (as such)
-	    continue
-	    ;;
-	  *-*-mingw* | *-*-os2*)
-	    # These systems don't actually have a C library (as such)
-	    test "X$arg" = "X-lc" && continue
-	    ;;
-	  *-*-openbsd* | *-*-freebsd*)
-	    # Do not include libc due to us having libc/libc_r.
-	    test "X$arg" = "X-lc" && continue
-	    ;;
-	  *-*-rhapsody* | *-*-darwin1.[012])
-	    # Rhapsody C and math libraries are in the System framework
-	    deplibs="$deplibs -framework System"
-	    continue
-	  esac
-	elif test "X$arg" = "X-lc_r"; then
-	 case $host in
-	 *-*-openbsd* | *-*-freebsd*)
-	   # Do not include libc_r directly, use -pthread flag.
-	   continue
-	   ;;
-	 esac
-	fi
-	deplibs="$deplibs $arg"
-	continue
-	;;
-
-     -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
-	deplibs="$deplibs $arg"
-	continue
-	;;
-
-      -module)
-	module=yes
-	continue
-	;;
-
-      # gcc -m* arguments should be passed to the linker via $compiler_flags
-      # in order to pass architecture information to the linker
-      # (e.g. 32 vs 64-bit).  This may also be accomplished via -Wl,-mfoo
-      # but this is not reliable with gcc because gcc may use -mfoo to
-      # select a different linker, different libraries, etc, while
-      # -Wl,-mfoo simply passes -mfoo to the linker.
-      -m*)
-	# Unknown arguments in both finalize_command and compile_command need
-	# to be aesthetically quoted because they are evaled later.
-	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-	case $arg in
-	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
-	  arg="\"$arg\""
-	  ;;
-	esac
-        compile_command="$compile_command $arg"
-        finalize_command="$finalize_command $arg"
-        if test "$with_gcc" = "yes" ; then
-          compiler_flags="$compiler_flags $arg"
-        fi
-        continue
-        ;;
-
-      -shrext)
-	prev=shrext
-	continue
-	;;
-
-      -no-fast-install)
-	fast_install=no
-	continue
-	;;
-
-      -no-install)
-	case $host in
-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-	  # The PATH hackery in wrapper scripts is required on Windows
-	  # in order for the loader to find any dlls it needs.
-	  $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
-	  $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
-	  fast_install=no
-	  ;;
-	*) no_install=yes ;;
-	esac
-	continue
-	;;
-
-      -no-undefined)
-	allow_undefined=no
-	continue
-	;;
-
-      -objectlist)
-	prev=objectlist
-	continue
-	;;
-
-      -o) prev=output ;;
-
-      -precious-files-regex)
-	prev=precious_regex
-	continue
-	;;
-
-      -release)
-	prev=release
-	continue
-	;;
-
-      -rpath)
-	prev=rpath
-	continue
-	;;
-
-      -R)
-	prev=xrpath
-	continue
-	;;
-
-      -R*)
-	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
-	# We need an absolute path.
-	case $dir in
-	[\\/]* | [A-Za-z]:[\\/]*) ;;
-	*)
-	  $echo "$modename: only absolute run-paths are allowed" 1>&2
-	  exit 1
-	  ;;
-	esac
-	case "$xrpath " in
-	*" $dir "*) ;;
-	*) xrpath="$xrpath $dir" ;;
-	esac
-	continue
-	;;
-
-      -static)
-	# The effects of -static are defined in a previous loop.
-	# We used to do the same as -all-static on platforms that
-	# didn't have a PIC flag, but the assumption that the effects
-	# would be equivalent was wrong.  It would break on at least
-	# Digital Unix and AIX.
-	continue
-	;;
-
-      -thread-safe)
-	thread_safe=yes
-	continue
-	;;
-
-      -version-info)
-	prev=vinfo
-	continue
-	;;
-      -version-number)
-	prev=vinfo
-	vinfo_number=yes
-	continue
-	;;
-
-      -Wc,*)
-	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
-	arg=
-	save_ifs="$IFS"; IFS=','
-	for flag in $args; do
-	  IFS="$save_ifs"
-	  case $flag in
-	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
-	    flag="\"$flag\""
-	    ;;
-	  esac
-	  arg="$arg $wl$flag"
-	  compiler_flags="$compiler_flags $flag"
-	done
-	IFS="$save_ifs"
-	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
-	;;
-
-      -Wl,*)
-	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
-	arg=
-	save_ifs="$IFS"; IFS=','
-	for flag in $args; do
-	  IFS="$save_ifs"
-	  case $flag in
-	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
-	    flag="\"$flag\""
-	    ;;
-	  esac
-	  arg="$arg $wl$flag"
-	  compiler_flags="$compiler_flags $wl$flag"
-	  linker_flags="$linker_flags $flag"
-	done
-	IFS="$save_ifs"
-	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
-	;;
-
-      -Xcompiler)
-	prev=xcompiler
-	continue
-	;;
-
-      -Xlinker)
-	prev=xlinker
-	continue
-	;;
-
-      -XCClinker)
-	prev=xcclinker
-	continue
-	;;
-
-      # Some other compiler flag.
-      -* | +*)
-	# Unknown arguments in both finalize_command and compile_command need
-	# to be aesthetically quoted because they are evaled later.
-	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-	case $arg in
-	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
-	  arg="\"$arg\""
-	  ;;
-	esac
-	;;
-
-      *.$objext)
-	# A standard object.
-	objs="$objs $arg"
-	;;
-
-      *.lo)
-	# A libtool-controlled object.
-
-	# Check to see that this really is a libtool object.
-	if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-	  pic_object=
-	  non_pic_object=
-
-	  # Read the .lo file
-	  # If there is no directory component, then add one.
-	  case $arg in
-	  */* | *\\*) . $arg ;;
-	  *) . ./$arg ;;
-	  esac
-
-	  if test -z "$pic_object" || \
-	     test -z "$non_pic_object" ||
-	     test "$pic_object" = none && \
-	     test "$non_pic_object" = none; then
-	    $echo "$modename: cannot find name of object for \`$arg'" 1>&2
-	    exit 1
-	  fi
-
-	  # Extract subdirectory from the argument.
-	  xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-	  if test "X$xdir" = "X$arg"; then
-	    xdir=
- 	  else
-	    xdir="$xdir/"
-	  fi
-
-	  if test "$pic_object" != none; then
-	    # Prepend the subdirectory the object is found in.
-	    pic_object="$xdir$pic_object"
-
-	    if test "$prev" = dlfiles; then
-	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-		dlfiles="$dlfiles $pic_object"
-		prev=
-		continue
-	      else
-		# If libtool objects are unsupported, then we need to preload.
-		prev=dlprefiles
-	      fi
-	    fi
-
-	    # CHECK ME:  I think I busted this.  -Ossama
-	    if test "$prev" = dlprefiles; then
-	      # Preload the old-style object.
-	      dlprefiles="$dlprefiles $pic_object"
-	      prev=
-	    fi
-
-	    # A PIC object.
-	    libobjs="$libobjs $pic_object"
-	    arg="$pic_object"
-	  fi
-
-	  # Non-PIC object.
-	  if test "$non_pic_object" != none; then
-	    # Prepend the subdirectory the object is found in.
-	    non_pic_object="$xdir$non_pic_object"
-
-	    # A standard non-PIC object
-	    non_pic_objects="$non_pic_objects $non_pic_object"
-	    if test -z "$pic_object" || test "$pic_object" = none ; then
-	      arg="$non_pic_object"
-	    fi
-	  fi
-	else
-	  # Only an error if not doing a dry-run.
-	  if test -z "$run"; then
-	    $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
-	    exit 1
-	  else
-	    # Dry-run case.
-
-	    # Extract subdirectory from the argument.
-	    xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-	    if test "X$xdir" = "X$arg"; then
-	      xdir=
-	    else
-	      xdir="$xdir/"
-	    fi
-
-	    pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
-	    non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
-	    libobjs="$libobjs $pic_object"
-	    non_pic_objects="$non_pic_objects $non_pic_object"
-	  fi
-	fi
-	;;
-
-      *.$libext)
-	# An archive.
-	deplibs="$deplibs $arg"
-	old_deplibs="$old_deplibs $arg"
-	continue
-	;;
-
-      *.la)
-	# A libtool-controlled library.
-
-	if test "$prev" = dlfiles; then
-	  # This library was specified with -dlopen.
-	  dlfiles="$dlfiles $arg"
-	  prev=
-	elif test "$prev" = dlprefiles; then
-	  # The library was specified with -dlpreopen.
-	  dlprefiles="$dlprefiles $arg"
-	  prev=
-	else
-	  deplibs="$deplibs $arg"
-	fi
-	continue
-	;;
-
-      # Some other compiler argument.
-      *)
-	# Unknown arguments in both finalize_command and compile_command need
-	# to be aesthetically quoted because they are evaled later.
-	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-	case $arg in
-	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
-	  arg="\"$arg\""
-	  ;;
-	esac
-	;;
-      esac # arg
-
-      # Now actually substitute the argument into the commands.
-      if test -n "$arg"; then
-	compile_command="$compile_command $arg"
-	finalize_command="$finalize_command $arg"
-      fi
-    done # argument parsing loop
-
-    if test -n "$prev"; then
-      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
-      $echo "$help" 1>&2
-      exit 1
-    fi
-
-    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
-      eval arg=\"$export_dynamic_flag_spec\"
-      compile_command="$compile_command $arg"
-      finalize_command="$finalize_command $arg"
-    fi
-
-    oldlibs=
-    # calculate the name of the file, without its directory
-    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
-    libobjs_save="$libobjs"
-
-    if test -n "$shlibpath_var"; then
-      # get the directories listed in $shlibpath_var
-      eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
-    else
-      shlib_search_path=
-    fi
-    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
-    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-
-    output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
-    if test "X$output_objdir" = "X$output"; then
-      output_objdir="$objdir"
-    else
-      output_objdir="$output_objdir/$objdir"
-    fi
-    # Create the object directory.
-    if test ! -d "$output_objdir"; then
-      $show "$mkdir $output_objdir"
-      $run $mkdir $output_objdir
-      status=$?
-      if test "$status" -ne 0 && test ! -d "$output_objdir"; then
-	exit $status
-      fi
-    fi
-
-    # Determine the type of output
-    case $output in
-    "")
-      $echo "$modename: you must specify an output file" 1>&2
-      $echo "$help" 1>&2
-      exit 1
-      ;;
-    *.$libext) linkmode=oldlib ;;
-    *.lo | *.$objext) linkmode=obj ;;
-    *.la) linkmode=lib ;;
-    *) linkmode=prog ;; # Anything else should be a program.
-    esac
-
-    case $host in
-    *cygwin* | *mingw* | *pw32*)
-      # don't eliminate duplcations in $postdeps and $predeps
-      duplicate_compiler_generated_deps=yes
-      ;;
-    *)
-      duplicate_compiler_generated_deps=$duplicate_deps
-      ;;
-    esac
-    specialdeplibs=
-
-    libs=
-    # Find all interdependent deplibs by searching for libraries
-    # that are linked more than once (e.g. -la -lb -la)
-    for deplib in $deplibs; do
-      if test "X$duplicate_deps" = "Xyes" ; then
-	case "$libs " in
-	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-	esac
-      fi
-      libs="$libs $deplib"
-    done
-
-    if test "$linkmode" = lib; then
-      libs="$predeps $libs $compiler_lib_search_path $postdeps"
-
-      # Compute libraries that are listed more than once in $predeps
-      # $postdeps and mark them as special (i.e., whose duplicates are
-      # not to be eliminated).
-      pre_post_deps=
-      if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
-	for pre_post_dep in $predeps $postdeps; do
-	  case "$pre_post_deps " in
-	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
-	  esac
-	  pre_post_deps="$pre_post_deps $pre_post_dep"
-	done
-      fi
-      pre_post_deps=
-    fi
-
-    deplibs=
-    newdependency_libs=
-    newlib_search_path=
-    need_relink=no # whether we're linking any uninstalled libtool libraries
-    notinst_deplibs= # not-installed libtool libraries
-    notinst_path= # paths that contain not-installed libtool libraries
-    case $linkmode in
-    lib)
-	passes="conv link"
-	for file in $dlfiles $dlprefiles; do
-	  case $file in
-	  *.la) ;;
-	  *)
-	    $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
-	    exit 1
-	    ;;
-	  esac
-	done
-	;;
-    prog)
-	compile_deplibs=
-	finalize_deplibs=
-	alldeplibs=no
-	newdlfiles=
-	newdlprefiles=
-	passes="conv scan dlopen dlpreopen link"
-	;;
-    *)  passes="conv"
-	;;
-    esac
-    for pass in $passes; do
-      if test "$linkmode,$pass" = "lib,link" ||
-	 test "$linkmode,$pass" = "prog,scan"; then
-	libs="$deplibs"
-	deplibs=
-      fi
-      if test "$linkmode" = prog; then
-	case $pass in
-	dlopen) libs="$dlfiles" ;;
-	dlpreopen) libs="$dlprefiles" ;;
-	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
-	esac
-      fi
-      if test "$pass" = dlopen; then
-	# Collect dlpreopened libraries
-	save_deplibs="$deplibs"
-	deplibs=
-      fi
-      for deplib in $libs; do
-	lib=
-	found=no
-	case $deplib in
-	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
-	  if test "$linkmode,$pass" = "prog,link"; then
-	    compile_deplibs="$deplib $compile_deplibs"
-	    finalize_deplibs="$deplib $finalize_deplibs"
-	  else
-	    deplibs="$deplib $deplibs"
-	  fi
-	  continue
-	  ;;
-	-l*)
-	  if test "$linkmode" != lib && test "$linkmode" != prog; then
-	    $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
-	    continue
-	  fi
-	  if test "$pass" = conv; then
-	    deplibs="$deplib $deplibs"
-	    continue
-	  fi
-	  name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
-	  for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
-	    for search_ext in .la $shrext .so .a; do
-	      # Search the libtool library
-	      lib="$searchdir/lib${name}${search_ext}"
-	      if test -f "$lib"; then
-		if test "$search_ext" = ".la"; then
-		  found=yes
-		else
-		  found=no
-		fi
-		break 2
-	      fi
-	    done
-	  done
-	  if test "$found" != yes; then
-	    # deplib doesn't seem to be a libtool library
-	    if test "$linkmode,$pass" = "prog,link"; then
-	      compile_deplibs="$deplib $compile_deplibs"
-	      finalize_deplibs="$deplib $finalize_deplibs"
-	    else
-	      deplibs="$deplib $deplibs"
-	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
-	    fi
-	    continue
-	  else # deplib is a libtool library
-	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
-	    # We need to do some special things here, and not later.
-	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-	      case " $predeps $postdeps " in
-	      *" $deplib "*)
-		if (${SED} -e '2q' $lib |
-                    grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-		  library_names=
-		  old_library=
-		  case $lib in
-		  */* | *\\*) . $lib ;;
-		  *) . ./$lib ;;
-		  esac
-		  for l in $old_library $library_names; do
-		    ll="$l"
-		  done
-		  if test "X$ll" = "X$old_library" ; then # only static version available
-		    found=no
-		    ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
-		    test "X$ladir" = "X$lib" && ladir="."
-		    lib=$ladir/$old_library
-		    if test "$linkmode,$pass" = "prog,link"; then
-		      compile_deplibs="$deplib $compile_deplibs"
-		      finalize_deplibs="$deplib $finalize_deplibs"
-		    else
-		      deplibs="$deplib $deplibs"
-		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
-		    fi
-		    continue
-		  fi
-		fi
-	        ;;
-	      *) ;;
-	      esac
-	    fi
-	  fi
-	  ;; # -l
-	-L*)
-	  case $linkmode in
-	  lib)
-	    deplibs="$deplib $deplibs"
-	    test "$pass" = conv && continue
-	    newdependency_libs="$deplib $newdependency_libs"
-	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
-	    ;;
-	  prog)
-	    if test "$pass" = conv; then
-	      deplibs="$deplib $deplibs"
-	      continue
-	    fi
-	    if test "$pass" = scan; then
-	      deplibs="$deplib $deplibs"
-	      newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
-	    else
-	      compile_deplibs="$deplib $compile_deplibs"
-	      finalize_deplibs="$deplib $finalize_deplibs"
-	    fi
-	    ;;
-	  *)
-	    $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
-	    ;;
-	  esac # linkmode
-	  continue
-	  ;; # -L
-	-R*)
-	  if test "$pass" = link; then
-	    dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
-	    # Make sure the xrpath contains only unique directories.
-	    case "$xrpath " in
-	    *" $dir "*) ;;
-	    *) xrpath="$xrpath $dir" ;;
-	    esac
-	  fi
-	  deplibs="$deplib $deplibs"
-	  continue
-	  ;;
-	*.la) lib="$deplib" ;;
-	*.$libext)
-	  if test "$pass" = conv; then
-	    deplibs="$deplib $deplibs"
-	    continue
-	  fi
-	  case $linkmode in
-	  lib)
-	    if test "$deplibs_check_method" != pass_all; then
-	      $echo
-	      $echo "*** Warning: Trying to link with static lib archive $deplib."
-	      $echo "*** I have the capability to make that library automatically link in when"
-	      $echo "*** you link to this library.  But I can only do this if you have a"
-	      $echo "*** shared version of the library, which you do not appear to have"
-	      $echo "*** because the file extensions .$libext of this argument makes me believe"
-	      $echo "*** that it is just a static archive that I should not used here."
-	    else
-	      $echo
-	      $echo "*** Warning: Linking the shared library $output against the"
-	      $echo "*** static library $deplib is not portable!"
-	      deplibs="$deplib $deplibs"
-	    fi
-	    continue
-	    ;;
-	  prog)
-	    if test "$pass" != link; then
-	      deplibs="$deplib $deplibs"
-	    else
-	      compile_deplibs="$deplib $compile_deplibs"
-	      finalize_deplibs="$deplib $finalize_deplibs"
-	    fi
-	    continue
-	    ;;
-	  esac # linkmode
-	  ;; # *.$libext
-	*.lo | *.$objext)
-	  if test "$pass" = conv; then
-	    deplibs="$deplib $deplibs"
-	  elif test "$linkmode" = prog; then
-	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
-	      # If there is no dlopen support or we're linking statically,
-	      # we need to preload.
-	      newdlprefiles="$newdlprefiles $deplib"
-	      compile_deplibs="$deplib $compile_deplibs"
-	      finalize_deplibs="$deplib $finalize_deplibs"
-	    else
-	      newdlfiles="$newdlfiles $deplib"
-	    fi
-	  fi
-	  continue
-	  ;;
-	%DEPLIBS%)
-	  alldeplibs=yes
-	  continue
-	  ;;
-	esac # case $deplib
-	if test "$found" = yes || test -f "$lib"; then :
-	else
-	  $echo "$modename: cannot find the library \`$lib'" 1>&2
-	  exit 1
-	fi
-
-	# Check to see that this really is a libtool archive.
-	if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
-	else
-	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-	  exit 1
-	fi
-
-	ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
-	test "X$ladir" = "X$lib" && ladir="."
-
-	dlname=
-	dlopen=
-	dlpreopen=
-	libdir=
-	library_names=
-	old_library=
-	# If the library was installed with an old release of libtool,
-	# it will not redefine variables installed, or shouldnotlink
-	installed=yes
-	shouldnotlink=no
-
-	# Read the .la file
-	case $lib in
-	*/* | *\\*) . $lib ;;
-	*) . ./$lib ;;
-	esac
-
-	if test "$linkmode,$pass" = "lib,link" ||
-	   test "$linkmode,$pass" = "prog,scan" ||
-	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
-	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
-	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
-	fi
-
-	if test "$pass" = conv; then
-	  # Only check for convenience libraries
-	  deplibs="$lib $deplibs"
-	  if test -z "$libdir"; then
-	    if test -z "$old_library"; then
-	      $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
-	      exit 1
-	    fi
-	    # It is a libtool convenience library, so add in its objects.
-	    convenience="$convenience $ladir/$objdir/$old_library"
-	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
-	    tmp_libs=
-	    for deplib in $dependency_libs; do
-	      deplibs="$deplib $deplibs"
-              if test "X$duplicate_deps" = "Xyes" ; then
-	        case "$tmp_libs " in
-	        *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-	        esac
-              fi
-	      tmp_libs="$tmp_libs $deplib"
-	    done
-	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
-	    $echo "$modename: \`$lib' is not a convenience library" 1>&2
-	    exit 1
-	  fi
-	  continue
-	fi # $pass = conv
-
-    
-	# Get the name of the library we link against.
-	linklib=
-	for l in $old_library $library_names; do
-	  linklib="$l"
-	done
-	if test -z "$linklib"; then
-	  $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
-	  exit 1
-	fi
-
-	# This library was specified with -dlopen.
-	if test "$pass" = dlopen; then
-	  if test -z "$libdir"; then
-	    $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
-	    exit 1
-	  fi
-	  if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
-	    # If there is no dlname, no dlopen support or we're linking
-	    # statically, we need to preload.  We also need to preload any
-	    # dependent libraries so libltdl's deplib preloader doesn't
-	    # bomb out in the load deplibs phase.
-	    dlprefiles="$dlprefiles $lib $dependency_libs"
-	  else
-	    newdlfiles="$newdlfiles $lib"
-	  fi
-	  continue
-	fi # $pass = dlopen
-
-	# We need an absolute path.
-	case $ladir in
-	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
-	*)
-	  abs_ladir=`cd "$ladir" && pwd`
-	  if test -z "$abs_ladir"; then
-	    $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
-	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
-	    abs_ladir="$ladir"
-	  fi
-	  ;;
-	esac
-	laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-
-	# Find the relevant object directory and library name.
-	if test "X$installed" = Xyes; then
-	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
-	    $echo "$modename: warning: library \`$lib' was moved." 1>&2
-	    dir="$ladir"
-	    absdir="$abs_ladir"
-	    libdir="$abs_ladir"
-	  else
-	    dir="$libdir"
-	    absdir="$libdir"
-	  fi
-	else
-	  dir="$ladir/$objdir"
-	  absdir="$abs_ladir/$objdir"
-	  # Remove this search path later
-	  notinst_path="$notinst_path $abs_ladir"
-	fi # $installed = yes
-	name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
-
-	# This library was specified with -dlpreopen.
-	if test "$pass" = dlpreopen; then
-	  if test -z "$libdir"; then
-	    $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
-	    exit 1
-	  fi
-	  # Prefer using a static library (so that no silly _DYNAMIC symbols
-	  # are required to link).
-	  if test -n "$old_library"; then
-	    newdlprefiles="$newdlprefiles $dir/$old_library"
-	  # Otherwise, use the dlname, so that lt_dlopen finds it.
-	  elif test -n "$dlname"; then
-	    newdlprefiles="$newdlprefiles $dir/$dlname"
-	  else
-	    newdlprefiles="$newdlprefiles $dir/$linklib"
-	  fi
-	fi # $pass = dlpreopen
-
-	if test -z "$libdir"; then
-	  # Link the convenience library
-	  if test "$linkmode" = lib; then
-	    deplibs="$dir/$old_library $deplibs"
-	  elif test "$linkmode,$pass" = "prog,link"; then
-	    compile_deplibs="$dir/$old_library $compile_deplibs"
-	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
-	  else
-	    deplibs="$lib $deplibs" # used for prog,scan pass
-	  fi
-	  continue
-	fi
-
-    
-	if test "$linkmode" = prog && test "$pass" != link; then
-	  newlib_search_path="$newlib_search_path $ladir"
-	  deplibs="$lib $deplibs"
-
-	  linkalldeplibs=no
-	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
-	     test "$build_libtool_libs" = no; then
-	    linkalldeplibs=yes
-	  fi
-
-	  tmp_libs=
-	  for deplib in $dependency_libs; do
-	    case $deplib in
-	    -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
-	    esac
-	    # Need to link against all dependency_libs?
-	    if test "$linkalldeplibs" = yes; then
-	      deplibs="$deplib $deplibs"
-	    else
-	      # Need to hardcode shared library paths
-	      # or/and link against static libraries
-	      newdependency_libs="$deplib $newdependency_libs"
-	    fi
-	    if test "X$duplicate_deps" = "Xyes" ; then
-	      case "$tmp_libs " in
-	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-	      esac
-	    fi
-	    tmp_libs="$tmp_libs $deplib"
-	  done # for deplib
-	  continue
-	fi # $linkmode = prog...
-
-	if test "$linkmode,$pass" = "prog,link"; then
-	  if test -n "$library_names" &&
-	     { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
-	    # We need to hardcode the library path
-	    if test -n "$shlibpath_var"; then
-	      # Make sure the rpath contains only unique directories.
-	      case "$temp_rpath " in
-	      *" $dir "*) ;;
-	      *" $absdir "*) ;;
-	      *) temp_rpath="$temp_rpath $dir" ;;
-	      esac
-	    fi
-
-	    # Hardcode the library path.
-	    # Skip directories that are in the system default run-time
-	    # search path.
-	    case " $sys_lib_dlsearch_path " in
-	    *" $absdir "*) ;;
-	    *)
-	      case "$compile_rpath " in
-	      *" $absdir "*) ;;
-	      *) compile_rpath="$compile_rpath $absdir"
-	      esac
-	      ;;
-	    esac
-	    case " $sys_lib_dlsearch_path " in
-	    *" $libdir "*) ;;
-	    *)
-	      case "$finalize_rpath " in
-	      *" $libdir "*) ;;
-	      *) finalize_rpath="$finalize_rpath $libdir"
-	      esac
-	      ;;
-	    esac
-	  fi # $linkmode,$pass = prog,link...
-
-	  if test "$alldeplibs" = yes &&
-	     { test "$deplibs_check_method" = pass_all ||
-	       { test "$build_libtool_libs" = yes &&
-		 test -n "$library_names"; }; }; then
-	    # We only need to search for static libraries
-	    continue
-	  fi
-	fi
-
-	link_static=no # Whether the deplib will be linked statically
-	if test -n "$library_names" &&
-	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
-	  if test "$installed" = no; then
-	    notinst_deplibs="$notinst_deplibs $lib"
-	    need_relink=yes
-	  fi
-	  # This is a shared library
-	
-      # Warn about portability, can't link against -module's on some systems (darwin)
-      if test "$shouldnotlink" = yes && test "$pass" = link ; then
-	    $echo
-	    if test "$linkmode" = prog; then
-	      $echo "*** Warning: Linking the executable $output against the loadable module"
-	    else
-	      $echo "*** Warning: Linking the shared library $output against the loadable module"
-	    fi
-	    $echo "*** $linklib is not portable!"    
-      fi	  
-	  if test "$linkmode" = lib &&
-	     test "$hardcode_into_libs" = yes; then
-	    # Hardcode the library path.
-	    # Skip directories that are in the system default run-time
-	    # search path.
-	    case " $sys_lib_dlsearch_path " in
-	    *" $absdir "*) ;;
-	    *)
-	      case "$compile_rpath " in
-	      *" $absdir "*) ;;
-	      *) compile_rpath="$compile_rpath $absdir"
-	      esac
-	      ;;
-	    esac
-	    case " $sys_lib_dlsearch_path " in
-	    *" $libdir "*) ;;
-	    *)
-	      case "$finalize_rpath " in
-	      *" $libdir "*) ;;
-	      *) finalize_rpath="$finalize_rpath $libdir"
-	      esac
-	      ;;
-	    esac
-	  fi
-
-	  if test -n "$old_archive_from_expsyms_cmds"; then
-	    # figure out the soname
-	    set dummy $library_names
-	    realname="$2"
-	    shift; shift
-	    libname=`eval \\$echo \"$libname_spec\"`
-	    # use dlname if we got it. it's perfectly good, no?
-	    if test -n "$dlname"; then
-	      soname="$dlname"
-	    elif test -n "$soname_spec"; then
-	      # bleh windows
-	      case $host in
-	      *cygwin* | mingw*)
-		major=`expr $current - $age`
-		versuffix="-$major"
-		;;
-	      esac
-	      eval soname=\"$soname_spec\"
-	    else
-	      soname="$realname"
-	    fi
-
-	    # Make a new name for the extract_expsyms_cmds to use
-	    soroot="$soname"
-	    soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
-	    newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
-
-	    # If the library has no export list, then create one now
-	    if test -f "$output_objdir/$soname-def"; then :
-	    else
-	      $show "extracting exported symbol list from \`$soname'"
-	      save_ifs="$IFS"; IFS='~'
-	      cmds=$extract_expsyms_cmds
-	      for cmd in $cmds; do
-		IFS="$save_ifs"
-		eval cmd=\"$cmd\"
-		$show "$cmd"
-		$run eval "$cmd" || exit $?
-	      done
-	      IFS="$save_ifs"
-	    fi
-
-	    # Create $newlib
-	    if test -f "$output_objdir/$newlib"; then :; else
-	      $show "generating import library for \`$soname'"
-	      save_ifs="$IFS"; IFS='~'
-	      cmds=$old_archive_from_expsyms_cmds
-	      for cmd in $cmds; do
-		IFS="$save_ifs"
-		eval cmd=\"$cmd\"
-		$show "$cmd"
-		$run eval "$cmd" || exit $?
-	      done
-	      IFS="$save_ifs"
-	    fi
-	    # make sure the library variables are pointing to the new library
-	    dir=$output_objdir
-	    linklib=$newlib
-	  fi # test -n "$old_archive_from_expsyms_cmds"
-
-	  if test "$linkmode" = prog || test "$mode" != relink; then
-	    add_shlibpath=
-	    add_dir=
-	    add=
-	    lib_linked=yes
-	    case $hardcode_action in
-	    immediate | unsupported)
-	      if test "$hardcode_direct" = no; then
-		add="$dir/$linklib"
-		case $host in
-		  *-*-sco3.2v5* ) add_dir="-L$dir" ;;
-		  *-*-darwin* )
-		    # if the lib is a module then we can not link against it, someone
-		    # is ignoring the new warnings I added
-		    if /usr/bin/file -L $add 2> /dev/null | grep "bundle" >/dev/null ; then
-		      $echo "** Warning, lib $linklib is a module, not a shared library"
-		      if test -z "$old_library" ; then
-		        $echo
-		        $echo "** And there doesn't seem to be a static archive available"
-		        $echo "** The link will probably fail, sorry"
-		      else
-		        add="$dir/$old_library"
-		      fi 
-		    fi
-		esac
-	      elif test "$hardcode_minus_L" = no; then
-		case $host in
-		*-*-sunos*) add_shlibpath="$dir" ;;
-		esac
-		add_dir="-L$dir"
-		add="-l$name"
-	      elif test "$hardcode_shlibpath_var" = no; then
-		add_shlibpath="$dir"
-		add="-l$name"
-	      else
-		lib_linked=no
-	      fi
-	      ;;
-	    relink)
-	      if test "$hardcode_direct" = yes; then
-		add="$dir/$linklib"
-	      elif test "$hardcode_minus_L" = yes; then
-		add_dir="-L$dir"
-		# Try looking first in the location we're being installed to.
-		if test -n "$inst_prefix_dir"; then
-		  case "$libdir" in
-		    [\\/]*)
-		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
-		      ;;
-		  esac
-		fi
-		add="-l$name"
-	      elif test "$hardcode_shlibpath_var" = yes; then
-		add_shlibpath="$dir"
-		add="-l$name"
-	      else
-		lib_linked=no
-	      fi
-	      ;;
-	    *) lib_linked=no ;;
-	    esac
-
-	    if test "$lib_linked" != yes; then
-	      $echo "$modename: configuration error: unsupported hardcode properties"
-	      exit 1
-	    fi
-
-	    if test -n "$add_shlibpath"; then
-	      case :$compile_shlibpath: in
-	      *":$add_shlibpath:"*) ;;
-	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
-	      esac
-	    fi
-	    if test "$linkmode" = prog; then
-	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
-	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
-	    else
-	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
-	      test -n "$add" && deplibs="$add $deplibs"
-	      if test "$hardcode_direct" != yes && \
-		 test "$hardcode_minus_L" != yes && \
-		 test "$hardcode_shlibpath_var" = yes; then
-		case :$finalize_shlibpath: in
-		*":$libdir:"*) ;;
-		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
-		esac
-	      fi
-	    fi
-	  fi
-
-	  if test "$linkmode" = prog || test "$mode" = relink; then
-	    add_shlibpath=
-	    add_dir=
-	    add=
-	    # Finalize command for both is simple: just hardcode it.
-	    if test "$hardcode_direct" = yes; then
-	      add="$libdir/$linklib"
-	    elif test "$hardcode_minus_L" = yes; then
-	      add_dir="-L$libdir"
-	      add="-l$name"
-	    elif test "$hardcode_shlibpath_var" = yes; then
-	      case :$finalize_shlibpath: in
-	      *":$libdir:"*) ;;
-	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
-	      esac
-	      add="-l$name"
-	    elif test "$hardcode_automatic" = yes; then
-	      if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then
-	        add="$inst_prefix_dir$libdir/$linklib"
-	      else
-	        add="$libdir/$linklib"
-	      fi
-	    else
-	      # We cannot seem to hardcode it, guess we'll fake it.
-	      add_dir="-L$libdir"
-	      # Try looking first in the location we're being installed to.
-	      if test -n "$inst_prefix_dir"; then
-		case "$libdir" in
-		  [\\/]*)
-		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
-		    ;;
-		esac
-	      fi
-	      add="-l$name"
-	    fi
-
-	    if test "$linkmode" = prog; then
-	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
-	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
-	    else
-	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
-	      test -n "$add" && deplibs="$add $deplibs"
-	    fi
-	  fi
-	elif test "$linkmode" = prog; then
-	  # Here we assume that one of hardcode_direct or hardcode_minus_L
-	  # is not unsupported.  This is valid on all known static and
-	  # shared platforms.
-	  if test "$hardcode_direct" != unsupported; then
-	    test -n "$old_library" && linklib="$old_library"
-	    compile_deplibs="$dir/$linklib $compile_deplibs"
-	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
-	  else
-	    compile_deplibs="-l$name -L$dir $compile_deplibs"
-	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
-	  fi
-	elif test "$build_libtool_libs" = yes; then
-	  # Not a shared library
-	  if test "$deplibs_check_method" != pass_all; then
-	    # We're trying link a shared library against a static one
-	    # but the system doesn't support it.
-
-	    # Just print a warning and add the library to dependency_libs so
-	    # that the program can be linked against the static library.
-	    $echo
-	    $echo "*** Warning: This system can not link to static lib archive $lib."
-	    $echo "*** I have the capability to make that library automatically link in when"
-	    $echo "*** you link to this library.  But I can only do this if you have a"
-	    $echo "*** shared version of the library, which you do not appear to have."
-	    if test "$module" = yes; then
-	      $echo "*** But as you try to build a module library, libtool will still create "
-	      $echo "*** a static module, that should work as long as the dlopening application"
-	      $echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
-	      if test -z "$global_symbol_pipe"; then
-		$echo
-		$echo "*** However, this would only work if libtool was able to extract symbol"
-		$echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
-		$echo "*** not find such a program.  So, this module is probably useless."
-		$echo "*** \`nm' from GNU binutils and a full rebuild may help."
-	      fi
-	      if test "$build_old_libs" = no; then
-		build_libtool_libs=module
-		build_old_libs=yes
-	      else
-		build_libtool_libs=no
-	      fi
-	    fi
-	  else
-	    convenience="$convenience $dir/$old_library"
-	    old_convenience="$old_convenience $dir/$old_library"
-	    deplibs="$dir/$old_library $deplibs"
-	    link_static=yes
-	  fi
-	fi # link shared/static library?
-
-	if test "$linkmode" = lib; then
-	  if test -n "$dependency_libs" &&
-	     { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes ||
-	       test "$link_static" = yes; }; then
-	    # Extract -R from dependency_libs
-	    temp_deplibs=
-	    for libdir in $dependency_libs; do
-	      case $libdir in
-	      -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
-		   case " $xrpath " in
-		   *" $temp_xrpath "*) ;;
-		   *) xrpath="$xrpath $temp_xrpath";;
-		   esac;;
-	      *) temp_deplibs="$temp_deplibs $libdir";;
-	      esac
-	    done
-	    dependency_libs="$temp_deplibs"
-	  fi
-
-	  newlib_search_path="$newlib_search_path $absdir"
-	  # Link against this library
-	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
-	  # ... and its dependency_libs
-	  tmp_libs=
-	  for deplib in $dependency_libs; do
-	    newdependency_libs="$deplib $newdependency_libs"
-	    if test "X$duplicate_deps" = "Xyes" ; then
-	      case "$tmp_libs " in
-	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-	      esac
-	    fi
-	    tmp_libs="$tmp_libs $deplib"
-	  done
-
-	  if test "$link_all_deplibs" != no; then
-	    # Add the search paths of all dependency libraries
-	    for deplib in $dependency_libs; do
-	      case $deplib in
-	      -L*) path="$deplib" ;;
-	      *.la)
-		dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
-		test "X$dir" = "X$deplib" && dir="."
-		# We need an absolute path.
-		case $dir in
-		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
-		*)
-		  absdir=`cd "$dir" && pwd`
-		  if test -z "$absdir"; then
-		    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
-		    absdir="$dir"
-		  fi
-		  ;;
-		esac
-		if grep "^installed=no" $deplib > /dev/null; then
-		  path="$absdir/$objdir"
-		else
-		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
-		  if test -z "$libdir"; then
-		    $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
-		    exit 1
-		  fi
-		  if test "$absdir" != "$libdir"; then
-		    $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
-		  fi
-		  path="$absdir"
-		fi
-		depdepl=
-		case $host in
-		*-*-darwin*)
-		  # we do not want to link against static libs, but need to link against shared
-		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
-		  if test -n "$deplibrary_names" ; then
-		    for tmp in $deplibrary_names ; do
-		      depdepl=$tmp
-		    done
-		    if test -f "$path/$depdepl" ; then
-		      depdepl="$path/$depdepl"
-		   fi
-		    # do not add paths which are already there
-		    case " $newlib_search_path " in
-		    *" $path "*) ;;
-		    *) newlib_search_path="$newlib_search_path $path";;
-		    esac
-		  fi
-		  path=""
-		  ;;
-		*)
-		path="-L$path"
-		;;
-		esac 
-		
-		;;
-		  -l*)
-		case $host in
-		*-*-darwin*)
-		 # Again, we only want to link against shared libraries
-		 eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"`
-		 for tmp in $newlib_search_path ; do
-		     if test -f "$tmp/lib$tmp_libs.dylib" ; then
-		       eval depdepl="$tmp/lib$tmp_libs.dylib"
-		       break
-		     fi  
-         done
-         path=""
-		  ;;
-		*) continue ;;
-		esac  		  
-		;;
-	      *) continue ;;
-	      esac
-	      case " $deplibs " in
-	      *" $depdepl "*) ;;
-	      *) deplibs="$deplibs $depdepl" ;;
-	      esac	      
-	      case " $deplibs " in
-	      *" $path "*) ;;
-	      *) deplibs="$deplibs $path" ;;
-	      esac
-	    done
-	  fi # link_all_deplibs != no
-	fi # linkmode = lib
-      done # for deplib in $libs
-      dependency_libs="$newdependency_libs"
-      if test "$pass" = dlpreopen; then
-	# Link the dlpreopened libraries before other libraries
-	for deplib in $save_deplibs; do
-	  deplibs="$deplib $deplibs"
-	done
-      fi
-      if test "$pass" != dlopen; then
-	if test "$pass" != conv; then
-	  # Make sure lib_search_path contains only unique directories.
-	  lib_search_path=
-	  for dir in $newlib_search_path; do
-	    case "$lib_search_path " in
-	    *" $dir "*) ;;
-	    *) lib_search_path="$lib_search_path $dir" ;;
-	    esac
-	  done
-	  newlib_search_path=
-	fi
-
-	if test "$linkmode,$pass" != "prog,link"; then
-	  vars="deplibs"
-	else
-	  vars="compile_deplibs finalize_deplibs"
-	fi
-	for var in $vars dependency_libs; do
-	  # Add libraries to $var in reverse order
-	  eval tmp_libs=\"\$$var\"
-	  new_libs=
-	  for deplib in $tmp_libs; do
-	    # FIXME: Pedantically, this is the right thing to do, so
-	    #        that some nasty dependency loop isn't accidentally
-	    #        broken:
-	    #new_libs="$deplib $new_libs"
-	    # Pragmatically, this seems to cause very few problems in
-	    # practice:
-	    case $deplib in
-	    -L*) new_libs="$deplib $new_libs" ;;
-	    -R*) ;;
-	    *)
-	      # And here is the reason: when a library appears more
-	      # than once as an explicit dependence of a library, or
-	      # is implicitly linked in more than once by the
-	      # compiler, it is considered special, and multiple
-	      # occurrences thereof are not removed.  Compare this
-	      # with having the same library being listed as a
-	      # dependency of multiple other libraries: in this case,
-	      # we know (pedantically, we assume) the library does not
-	      # need to be listed more than once, so we keep only the
-	      # last copy.  This is not always right, but it is rare
-	      # enough that we require users that really mean to play
-	      # such unportable linking tricks to link the library
-	      # using -Wl,-lname, so that libtool does not consider it
-	      # for duplicate removal.
-	      case " $specialdeplibs " in
-	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
-	      *)
-		case " $new_libs " in
-		*" $deplib "*) ;;
-		*) new_libs="$deplib $new_libs" ;;
-		esac
-		;;
-	      esac
-	      ;;
-	    esac
-	  done
-	  tmp_libs=
-	  for deplib in $new_libs; do
-	    case $deplib in
-	    -L*)
-	      case " $tmp_libs " in
-	      *" $deplib "*) ;;
-	      *) tmp_libs="$tmp_libs $deplib" ;;
-	      esac
-	      ;;
-	    *) tmp_libs="$tmp_libs $deplib" ;;
-	    esac
-	  done
-	  eval $var=\"$tmp_libs\"
-	done # for var
-      fi
-      # Last step: remove runtime libs from dependency_libs (they stay in deplibs)
-      tmp_libs=
-      for i in $dependency_libs ; do
-	case " $predeps $postdeps $compiler_lib_search_path " in
-	*" $i "*)
-	  i=""
-	  ;;
-	esac
-	if test -n "$i" ; then
-	  tmp_libs="$tmp_libs $i"
-	fi
-      done
-      dependency_libs=$tmp_libs
-    done # for pass
-    if test "$linkmode" = prog; then
-      dlfiles="$newdlfiles"
-      dlprefiles="$newdlprefiles"
-    fi
-
-    case $linkmode in
-    oldlib)
-      if test -n "$deplibs"; then
-	$echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
-      fi
-
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-	$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$rpath"; then
-	$echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$xrpath"; then
-	$echo "$modename: warning: \`-R' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$vinfo"; then
-	$echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$release"; then
-	$echo "$modename: warning: \`-release' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
-	$echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
-      fi
-
-      # Now set the variables for building old libraries.
-      build_libtool_libs=no
-      oldlibs="$output"
-      objs="$objs$old_deplibs"
-      ;;
-
-    lib)
-      # Make sure we only generate libraries of the form `libNAME.la'.
-      case $outputname in
-      lib*)
-	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
-	eval shared_ext=\"$shrext\"
-	eval libname=\"$libname_spec\"
-	;;
-      *)
-	if test "$module" = no; then
-	  $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
-	  $echo "$help" 1>&2
-	  exit 1
-	fi
-	if test "$need_lib_prefix" != no; then
-	  # Add the "lib" prefix for modules if required
-	  name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
-	  eval shared_ext=\"$shrext\"
-	  eval libname=\"$libname_spec\"
-	else
-	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
-	fi
-	;;
-      esac
-
-      if test -n "$objs"; then
-	if test "$deplibs_check_method" != pass_all; then
-	  $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
-	  exit 1
-	else
-	  $echo
-	  $echo "*** Warning: Linking the shared library $output against the non-libtool"
-	  $echo "*** objects $objs is not portable!"
-	  libobjs="$libobjs $objs"
-	fi
-      fi
-
-      if test "$dlself" != no; then
-	$echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
-      fi
-
-      set dummy $rpath
-      if test "$#" -gt 2; then
-	$echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
-      fi
-      install_libdir="$2"
-
-      oldlibs=
-      if test -z "$rpath"; then
-	if test "$build_libtool_libs" = yes; then
-	  # Building a libtool convenience library.
-	  # Some compilers have problems with a `.al' extension so
-	  # convenience libraries should have the same extension an
-	  # archive normally would.
-	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
-	  build_libtool_libs=convenience
-	  build_old_libs=yes
-	fi
-
-	if test -n "$vinfo"; then
-	  $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2
-	fi
-
-	if test -n "$release"; then
-	  $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
-	fi
-      else
-
-	# Parse the version information argument.
-	save_ifs="$IFS"; IFS=':'
-	set dummy $vinfo 0 0 0
-	IFS="$save_ifs"
-
-	if test -n "$8"; then
-	  $echo "$modename: too many parameters to \`-version-info'" 1>&2
-	  $echo "$help" 1>&2
-	  exit 1
-	fi
-
-	# convert absolute version numbers to libtool ages
-	# this retains compatibility with .la files and attempts
-	# to make the code below a bit more comprehensible
-	
-	case $vinfo_number in
-	yes)
-	  number_major="$2"
-	  number_minor="$3"
-	  number_revision="$4"
-	  #
-	  # There are really only two kinds -- those that
-	  # use the current revision as the major version
-	  # and those that subtract age and use age as
-	  # a minor version.  But, then there is irix
-	  # which has an extra 1 added just for fun
-	  #
-	  case $version_type in
-	  darwin|linux|osf|windows)
-	    current=`expr $number_major + $number_minor`
-	    age="$number_minor"
-	    revision="$number_revision"
-	    ;;
-	  freebsd-aout|freebsd-elf|sunos)
-	    current="$number_major"
-	    revision="$number_minor"
-	    age="0"
-	    ;;
-	  irix|nonstopux)
-	    current=`expr $number_major + $number_minor - 1`
-	    age="$number_minor"
-	    revision="$number_minor"
-	    ;;
-	  esac
-	  ;;
-	no)
-	  current="$2"
-	  revision="$3"
-	  age="$4"
-	  ;;
-	esac
-
-	# Check that each of the things are valid numbers.
-	case $current in
-	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
-	*)
-	  $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
-	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-	  exit 1
-	  ;;
-	esac
-
-	case $revision in
-	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
-	*)
-	  $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
-	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-	  exit 1
-	  ;;
-	esac
-
-	case $age in
-	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
-	*)
-	  $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
-	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-	  exit 1
-	  ;;
-	esac
-
-	if test "$age" -gt "$current"; then
-	  $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
-	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-	  exit 1
-	fi
-
-	# Calculate the version variables.
-	major=
-	versuffix=
-	verstring=
-	case $version_type in
-	none) ;;
-
-	darwin)
-	  # Like Linux, but with the current version available in
-	  # verstring for coding it into the library header
-	  major=.`expr $current - $age`
-	  versuffix="$major.$age.$revision"
-	  # Darwin ld doesn't like 0 for these options...
-	  minor_current=`expr $current + 1`
-	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
-	  ;;
-
-	freebsd-aout)
-	  major=".$current"
-	  versuffix=".$current.$revision";
-	  ;;
-
-	freebsd-elf)
-	  major=".$current"
-	  versuffix=".$current";
-	  ;;
-
-	irix | nonstopux)
-	  major=`expr $current - $age + 1`
-
-	  case $version_type in
-	    nonstopux) verstring_prefix=nonstopux ;;
-	    *)         verstring_prefix=sgi ;;
-	  esac
-	  verstring="$verstring_prefix$major.$revision"
-
-	  # Add in all the interfaces that we are compatible with.
-	  loop=$revision
-	  while test "$loop" -ne 0; do
-	    iface=`expr $revision - $loop`
-	    loop=`expr $loop - 1`
-	    verstring="$verstring_prefix$major.$iface:$verstring"
-	  done
-
-	  # Before this point, $major must not contain `.'.
-	  major=.$major
-	  versuffix="$major.$revision"
-	  ;;
-
-	linux)
-	  major=.`expr $current - $age`
-	  versuffix="$major.$age.$revision"
-	  ;;
-
-	osf)
-	  major=.`expr $current - $age`
-	  versuffix=".$current.$age.$revision"
-	  verstring="$current.$age.$revision"
-
-	  # Add in all the interfaces that we are compatible with.
-	  loop=$age
-	  while test "$loop" -ne 0; do
-	    iface=`expr $current - $loop`
-	    loop=`expr $loop - 1`
-	    verstring="$verstring:${iface}.0"
-	  done
-
-	  # Make executables depend on our current version.
-	  verstring="$verstring:${current}.0"
-	  ;;
-
-	sunos)
-	  major=".$current"
-	  versuffix=".$current.$revision"
-	  ;;
-
-	windows)
-	  # Use '-' rather than '.', since we only want one
-	  # extension on DOS 8.3 filesystems.
-	  major=`expr $current - $age`
-	  versuffix="-$major"
-	  ;;
-
-	*)
-	  $echo "$modename: unknown library version type \`$version_type'" 1>&2
-	  $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-	  exit 1
-	  ;;
-	esac
-
-	# Clear the version info if we defaulted, and they specified a release.
-	if test -z "$vinfo" && test -n "$release"; then
-	  major=
-	  case $version_type in
-	  darwin)
-	    # we can't check for "0.0" in archive_cmds due to quoting
-	    # problems, so we reset it completely
-	    verstring=
-	    ;;
-	  *)
-	    verstring="0.0"
-	    ;;
-	  esac
-	  if test "$need_version" = no; then
-	    versuffix=
-	  else
-	    versuffix=".0.0"
-	  fi
-	fi
-
-	# Remove version info from name if versioning should be avoided
-	if test "$avoid_version" = yes && test "$need_version" = no; then
-	  major=
-	  versuffix=
-	  verstring=""
-	fi
-
-	# Check to see if the archive will have undefined symbols.
-	if test "$allow_undefined" = yes; then
-	  if test "$allow_undefined_flag" = unsupported; then
-	    $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
-	    build_libtool_libs=no
-	    build_old_libs=yes
-	  fi
-	else
-	  # Don't allow undefined symbols.
-	  allow_undefined_flag="$no_undefined_flag"
-	fi
-      fi
-
-      if test "$mode" != relink; then
-	# Remove our outputs, but don't remove object files since they
-	# may have been created when compiling PIC objects.
-	removelist=
-	tempremovelist=`$echo "$output_objdir/*"`
-	for p in $tempremovelist; do
-	  case $p in
-	    *.$objext)
-	       ;;
-	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
-	       if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
-	       then
-		 continue
-	       fi
-	       removelist="$removelist $p"
-	       ;;
-	    *) ;;
-	  esac
-	done
-	if test -n "$removelist"; then
-	  $show "${rm}r $removelist"
-	  $run ${rm}r $removelist
-	fi
-      fi
-
-      # Now set the variables for building old libraries.
-      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
-	oldlibs="$oldlibs $output_objdir/$libname.$libext"
-
-	# Transform .lo files to .o files.
-	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
-      fi
-
-      # Eliminate all temporary directories.
-      for path in $notinst_path; do
-	lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'`
-	deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'`
-	dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'`
-      done
-
-      if test -n "$xrpath"; then
-	# If the user specified any rpath flags, then add them.
-	temp_xrpath=
-	for libdir in $xrpath; do
-	  temp_xrpath="$temp_xrpath -R$libdir"
-	  case "$finalize_rpath " in
-	  *" $libdir "*) ;;
-	  *) finalize_rpath="$finalize_rpath $libdir" ;;
-	  esac
-	done
-	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
-	  dependency_libs="$temp_xrpath $dependency_libs"
-	fi
-      fi
-
-      # Make sure dlfiles contains only unique files that won't be dlpreopened
-      old_dlfiles="$dlfiles"
-      dlfiles=
-      for lib in $old_dlfiles; do
-	case " $dlprefiles $dlfiles " in
-	*" $lib "*) ;;
-	*) dlfiles="$dlfiles $lib" ;;
-	esac
-      done
-
-      # Make sure dlprefiles contains only unique files
-      old_dlprefiles="$dlprefiles"
-      dlprefiles=
-      for lib in $old_dlprefiles; do
-	case "$dlprefiles " in
-	*" $lib "*) ;;
-	*) dlprefiles="$dlprefiles $lib" ;;
-	esac
-      done
-
-      if test "$build_libtool_libs" = yes; then
-	if test -n "$rpath"; then
-	  case $host in
-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
-	    # these systems don't actually have a c library (as such)!
-	    ;;
-	  *-*-rhapsody* | *-*-darwin1.[012])
-	    # Rhapsody C library is in the System framework
-	    deplibs="$deplibs -framework System"
-	    ;;
-	  *-*-netbsd*)
-	    # Don't link with libc until the a.out ld.so is fixed.
-	    ;;
-	  *-*-openbsd* | *-*-freebsd*)
-	    # Do not include libc due to us having libc/libc_r.
-	    test "X$arg" = "X-lc" && continue
-	    ;;
- 	  *)
-	    # Add libc to deplibs on all other systems if necessary.
-	    if test "$build_libtool_need_lc" = "yes"; then
-	      deplibs="$deplibs -lc"
-	    fi
-	    ;;
-	  esac
-	fi
-
-	# Transform deplibs into only deplibs that can be linked in shared.
-	name_save=$name
-	libname_save=$libname
-	release_save=$release
-	versuffix_save=$versuffix
-	major_save=$major
-	# I'm not sure if I'm treating the release correctly.  I think
-	# release should show up in the -l (ie -lgmp5) so we don't want to
-	# add it in twice.  Is that correct?
-	release=""
-	versuffix=""
-	major=""
-	newdeplibs=
-	droppeddeps=no
-	case $deplibs_check_method in
-	pass_all)
-	  # Don't check for shared/static.  Everything works.
-	  # This might be a little naive.  We might want to check
-	  # whether the library exists or not.  But this is on
-	  # osf3 & osf4 and I'm not really sure... Just
-	  # implementing what was already the behavior.
-	  newdeplibs=$deplibs
-	  ;;
-	test_compile)
-	  # This code stresses the "libraries are programs" paradigm to its
-	  # limits. Maybe even breaks it.  We compile a program, linking it
-	  # against the deplibs as a proxy for the library.  Then we can check
-	  # whether they linked in statically or dynamically with ldd.
-	  $rm conftest.c
-	  cat > conftest.c <<EOF
-	  int main() { return 0; }
-EOF
-	  $rm conftest
-	  $LTCC -o conftest conftest.c $deplibs
-	  if test "$?" -eq 0 ; then
-	    ldd_output=`ldd conftest`
-	    for i in $deplibs; do
-	      name="`expr $i : '-l\(.*\)'`"
-	      # If $name is empty we are operating on a -L argument.
-              if test "$name" != "" && test "$name" -ne "0"; then
-		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-		  case " $predeps $postdeps " in
-		  *" $i "*)
-		    newdeplibs="$newdeplibs $i"
-		    i=""
-		    ;;
-		  esac
-	        fi
-		if test -n "$i" ; then
-		  libname=`eval \\$echo \"$libname_spec\"`
-		  deplib_matches=`eval \\$echo \"$library_names_spec\"`
-		  set dummy $deplib_matches
-		  deplib_match=$2
-		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-		    newdeplibs="$newdeplibs $i"
-		  else
-		    droppeddeps=yes
-		    $echo
-		    $echo "*** Warning: dynamic linker does not accept needed library $i."
-		    $echo "*** I have the capability to make that library automatically link in when"
-		    $echo "*** you link to this library.  But I can only do this if you have a"
-		    $echo "*** shared version of the library, which I believe you do not have"
-		    $echo "*** because a test_compile did reveal that the linker did not use it for"
-		    $echo "*** its dynamic dependency list that programs get resolved with at runtime."
-		  fi
-		fi
-	      else
-		newdeplibs="$newdeplibs $i"
-	      fi
-	    done
-	  else
-	    # Error occurred in the first compile.  Let's try to salvage
-	    # the situation: Compile a separate program for each library.
-	    for i in $deplibs; do
-	      name="`expr $i : '-l\(.*\)'`"
-	      # If $name is empty we are operating on a -L argument.
-              if test "$name" != "" && test "$name" != "0"; then
-		$rm conftest
-		$LTCC -o conftest conftest.c $i
-		# Did it work?
-		if test "$?" -eq 0 ; then
-		  ldd_output=`ldd conftest`
-		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-		    case " $predeps $postdeps " in
-		    *" $i "*)
-		      newdeplibs="$newdeplibs $i"
-		      i=""
-		      ;;
-		    esac
-		  fi
-		  if test -n "$i" ; then
-		    libname=`eval \\$echo \"$libname_spec\"`
-		    deplib_matches=`eval \\$echo \"$library_names_spec\"`
-		    set dummy $deplib_matches
-		    deplib_match=$2
-		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-		      newdeplibs="$newdeplibs $i"
-		    else
-		      droppeddeps=yes
-		      $echo
-		      $echo "*** Warning: dynamic linker does not accept needed library $i."
-		      $echo "*** I have the capability to make that library automatically link in when"
-		      $echo "*** you link to this library.  But I can only do this if you have a"
-		      $echo "*** shared version of the library, which you do not appear to have"
-		      $echo "*** because a test_compile did reveal that the linker did not use this one"
-		      $echo "*** as a dynamic dependency that programs can get resolved with at runtime."
-		    fi
-		  fi
-		else
-		  droppeddeps=yes
-		  $echo
-		  $echo "*** Warning!  Library $i is needed by this library but I was not able to"
-		  $echo "***  make it link in!  You will probably need to install it or some"
-		  $echo "*** library that it depends on before this library will be fully"
-		  $echo "*** functional.  Installing it before continuing would be even better."
-		fi
-	      else
-		newdeplibs="$newdeplibs $i"
-	      fi
-	    done
-	  fi
-	  ;;
-	file_magic*)
-	  set dummy $deplibs_check_method
-	  file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
-	  for a_deplib in $deplibs; do
-	    name="`expr $a_deplib : '-l\(.*\)'`"
-	    # If $name is empty we are operating on a -L argument.
-            if test "$name" != "" && test  "$name" != "0"; then
-	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-		case " $predeps $postdeps " in
-		*" $a_deplib "*)
-		  newdeplibs="$newdeplibs $a_deplib"
-		  a_deplib=""
-		  ;;
-		esac
-	      fi
-	      if test -n "$a_deplib" ; then
-		libname=`eval \\$echo \"$libname_spec\"`
-		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
-		  for potent_lib in $potential_libs; do
-		      # Follow soft links.
-		      if ls -lLd "$potent_lib" 2>/dev/null \
-			 | grep " -> " >/dev/null; then
-			continue
-		      fi
-		      # The statement above tries to avoid entering an
-		      # endless loop below, in case of cyclic links.
-		      # We might still enter an endless loop, since a link
-		      # loop can be closed while we follow links,
-		      # but so what?
-		      potlib="$potent_lib"
-		      while test -h "$potlib" 2>/dev/null; do
-			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
-			case $potliblink in
-			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
-			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
-			esac
-		      done
-		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
-			 | ${SED} 10q \
-			 | $EGREP "$file_magic_regex" > /dev/null; then
-			newdeplibs="$newdeplibs $a_deplib"
-			a_deplib=""
-			break 2
-		      fi
-		  done
-		done
-	      fi
-	      if test -n "$a_deplib" ; then
-		droppeddeps=yes
-		$echo
-		$echo "*** Warning: linker path does not have real file for library $a_deplib."
-		$echo "*** I have the capability to make that library automatically link in when"
-		$echo "*** you link to this library.  But I can only do this if you have a"
-		$echo "*** shared version of the library, which you do not appear to have"
-		$echo "*** because I did check the linker path looking for a file starting"
-		if test -z "$potlib" ; then
-		  $echo "*** with $libname but no candidates were found. (...for file magic test)"
-		else
-		  $echo "*** with $libname and none of the candidates passed a file format test"
-		  $echo "*** using a file magic. Last file checked: $potlib"
-		fi
-	      fi
-	    else
-	      # Add a -L argument.
-	      newdeplibs="$newdeplibs $a_deplib"
-	    fi
-	  done # Gone through all deplibs.
-	  ;;
-	match_pattern*)
-	  set dummy $deplibs_check_method
-	  match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
-	  for a_deplib in $deplibs; do
-	    name="`expr $a_deplib : '-l\(.*\)'`"
-	    # If $name is empty we are operating on a -L argument.
-	    if test -n "$name" && test "$name" != "0"; then
-	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-		case " $predeps $postdeps " in
-		*" $a_deplib "*)
-		  newdeplibs="$newdeplibs $a_deplib"
-		  a_deplib=""
-		  ;;
-		esac
-	      fi
-	      if test -n "$a_deplib" ; then
-		libname=`eval \\$echo \"$libname_spec\"`
-		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
-		  for potent_lib in $potential_libs; do
-		    potlib="$potent_lib" # see symlink-check above in file_magic test
-		    if eval $echo \"$potent_lib\" 2>/dev/null \
-		        | ${SED} 10q \
-		        | $EGREP "$match_pattern_regex" > /dev/null; then
-		      newdeplibs="$newdeplibs $a_deplib"
-		      a_deplib=""
-		      break 2
-		    fi
-		  done
-		done
-	      fi
-	      if test -n "$a_deplib" ; then
-		droppeddeps=yes
-		$echo
-		$echo "*** Warning: linker path does not have real file for library $a_deplib."
-		$echo "*** I have the capability to make that library automatically link in when"
-		$echo "*** you link to this library.  But I can only do this if you have a"
-		$echo "*** shared version of the library, which you do not appear to have"
-		$echo "*** because I did check the linker path looking for a file starting"
-		if test -z "$potlib" ; then
-		  $echo "*** with $libname but no candidates were found. (...for regex pattern test)"
-		else
-		  $echo "*** with $libname and none of the candidates passed a file format test"
-		  $echo "*** using a regex pattern. Last file checked: $potlib"
-		fi
-	      fi
-	    else
-	      # Add a -L argument.
-	      newdeplibs="$newdeplibs $a_deplib"
-	    fi
-	  done # Gone through all deplibs.
-	  ;;
-	none | unknown | *)
-	  newdeplibs=""
-	  tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
-	    -e 's/ -[LR][^ ]*//g'`
-	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-	    for i in $predeps $postdeps ; do
-	      # can't use Xsed below, because $i might contain '/'
-	      tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
-	    done
-	  fi
-	  if $echo "X $tmp_deplibs" | $Xsed -e 's/[ 	]//g' \
-	    | grep . >/dev/null; then
-	    $echo
-	    if test "X$deplibs_check_method" = "Xnone"; then
-	      $echo "*** Warning: inter-library dependencies are not supported in this platform."
-	    else
-	      $echo "*** Warning: inter-library dependencies are not known to be supported."
-	    fi
-	    $echo "*** All declared inter-library dependencies are being dropped."
-	    droppeddeps=yes
-	  fi
-	  ;;
-	esac
-	versuffix=$versuffix_save
-	major=$major_save
-	release=$release_save
-	libname=$libname_save
-	name=$name_save
-
-	case $host in
-	*-*-rhapsody* | *-*-darwin1.[012])
-	  # On Rhapsody replace the C library is the System framework
-	  newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
-	  ;;
-	esac
-
-	if test "$droppeddeps" = yes; then
-	  if test "$module" = yes; then
-	    $echo
-	    $echo "*** Warning: libtool could not satisfy all declared inter-library"
-	    $echo "*** dependencies of module $libname.  Therefore, libtool will create"
-	    $echo "*** a static module, that should work as long as the dlopening"
-	    $echo "*** application is linked with the -dlopen flag."
-	    if test -z "$global_symbol_pipe"; then
-	      $echo
-	      $echo "*** However, this would only work if libtool was able to extract symbol"
-	      $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
-	      $echo "*** not find such a program.  So, this module is probably useless."
-	      $echo "*** \`nm' from GNU binutils and a full rebuild may help."
-	    fi
-	    if test "$build_old_libs" = no; then
-	      oldlibs="$output_objdir/$libname.$libext"
-	      build_libtool_libs=module
-	      build_old_libs=yes
-	    else
-	      build_libtool_libs=no
-	    fi
-	  else
-	    $echo "*** The inter-library dependencies that have been dropped here will be"
-	    $echo "*** automatically added whenever a program is linked with this library"
-	    $echo "*** or is declared to -dlopen it."
-
-	    if test "$allow_undefined" = no; then
-	      $echo
-	      $echo "*** Since this library must not contain undefined symbols,"
-	      $echo "*** because either the platform does not support them or"
-	      $echo "*** it was explicitly requested with -no-undefined,"
-	      $echo "*** libtool will only create a static version of it."
-	      if test "$build_old_libs" = no; then
-		oldlibs="$output_objdir/$libname.$libext"
-		build_libtool_libs=module
-		build_old_libs=yes
-	      else
-		build_libtool_libs=no
-	      fi
-	    fi
-	  fi
-	fi
-	# Done checking deplibs!
-	deplibs=$newdeplibs
-      fi
-
-      # All the library-specific variables (install_libdir is set above).
-      library_names=
-      old_library=
-      dlname=
-
-      # Test again, we may have decided not to build it any more
-      if test "$build_libtool_libs" = yes; then
-	if test "$hardcode_into_libs" = yes; then
-	  # Hardcode the library paths
-	  hardcode_libdirs=
-	  dep_rpath=
-	  rpath="$finalize_rpath"
-	  test "$mode" != relink && rpath="$compile_rpath$rpath"
-	  for libdir in $rpath; do
-	    if test -n "$hardcode_libdir_flag_spec"; then
-	      if test -n "$hardcode_libdir_separator"; then
-		if test -z "$hardcode_libdirs"; then
-		  hardcode_libdirs="$libdir"
-		else
-		  # Just accumulate the unique libdirs.
-		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
-		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-		    ;;
-		  *)
-		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-		    ;;
-		  esac
-		fi
-	      else
-		eval flag=\"$hardcode_libdir_flag_spec\"
-		dep_rpath="$dep_rpath $flag"
-	      fi
-	    elif test -n "$runpath_var"; then
-	      case "$perm_rpath " in
-	      *" $libdir "*) ;;
-	      *) perm_rpath="$perm_rpath $libdir" ;;
-	      esac
-	    fi
-	  done
-	  # Substitute the hardcoded libdirs into the rpath.
-	  if test -n "$hardcode_libdir_separator" &&
-	     test -n "$hardcode_libdirs"; then
-	    libdir="$hardcode_libdirs"
-	    if test -n "$hardcode_libdir_flag_spec_ld"; then
-	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
-	    else
-	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
-	    fi
-	  fi
-	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
-	    # We should set the runpath_var.
-	    rpath=
-	    for dir in $perm_rpath; do
-	      rpath="$rpath$dir:"
-	    done
-	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
-	  fi
-	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
-	fi
-
-	shlibpath="$finalize_shlibpath"
-	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
-	if test -n "$shlibpath"; then
-	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
-	fi
-
-	# Get the real and link names of the library.
-	eval shared_ext=\"$shrext\"
-	eval library_names=\"$library_names_spec\"
-	set dummy $library_names
-	realname="$2"
-	shift; shift
-
-	if test -n "$soname_spec"; then
-	  eval soname=\"$soname_spec\"
-	else
-	  soname="$realname"
-	fi
-	if test -z "$dlname"; then
-	  dlname=$soname
-	fi
-
-	lib="$output_objdir/$realname"
-	for link
-	do
-	  linknames="$linknames $link"
-	done
-
-	# Use standard objects if they are pic
-	test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-
-	# Prepare the list of exported symbols
-	if test -z "$export_symbols"; then
-	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
-	    $show "generating symbol list for \`$libname.la'"
-	    export_symbols="$output_objdir/$libname.exp"
-	    $run $rm $export_symbols
-	    cmds=$export_symbols_cmds
-	    save_ifs="$IFS"; IFS='~'
-	    for cmd in $cmds; do
-	      IFS="$save_ifs"
-	      eval cmd=\"$cmd\"
-	      if len=`expr "X$cmd" : ".*"` &&
-	       test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-	        $show "$cmd"
-	        $run eval "$cmd" || exit $?
-	        skipped_export=false
-	      else
-	        # The command line is too long to execute in one step.
-	        $show "using reloadable object file for export list..."
-	        skipped_export=:
-	      fi
-	    done
-	    IFS="$save_ifs"
-	    if test -n "$export_symbols_regex"; then
-	      $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
-	      $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
-	      $show "$mv \"${export_symbols}T\" \"$export_symbols\""
-	      $run eval '$mv "${export_symbols}T" "$export_symbols"'
-	    fi
-	  fi
-	fi
-
-	if test -n "$export_symbols" && test -n "$include_expsyms"; then
-	  $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
-	fi
-
-	tmp_deplibs=
-	for test_deplib in $deplibs; do
-		case " $convenience " in
-		*" $test_deplib "*) ;;
-		*) 
-			tmp_deplibs="$tmp_deplibs $test_deplib"
-			;;
-		esac
-	done
-	deplibs="$tmp_deplibs" 
-
-	if test -n "$convenience"; then
-	  if test -n "$whole_archive_flag_spec"; then
-	    save_libobjs=$libobjs
-	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
-	  else
-	    gentop="$output_objdir/${outputname}x"
-	    $show "${rm}r $gentop"
-	    $run ${rm}r "$gentop"
-	    $show "$mkdir $gentop"
-	    $run $mkdir "$gentop"
-	    status=$?
-	    if test "$status" -ne 0 && test ! -d "$gentop"; then
-	      exit $status
-	    fi
-	    generated="$generated $gentop"
-
-	    for xlib in $convenience; do
-	      # Extract the objects.
-	      case $xlib in
-	      [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
-	      *) xabs=`pwd`"/$xlib" ;;
-	      esac
-	      xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
-	      xdir="$gentop/$xlib"
-
-	      $show "${rm}r $xdir"
-	      $run ${rm}r "$xdir"
-	      $show "$mkdir $xdir"
-	      $run $mkdir "$xdir"
-	      status=$?
-	      if test "$status" -ne 0 && test ! -d "$xdir"; then
-		exit $status
-	      fi
-	      # We will extract separately just the conflicting names and we will no
-	      # longer touch any unique names. It is faster to leave these extract
-	      # automatically by $AR in one run.
-	      $show "(cd $xdir && $AR x $xabs)"
-	      $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-	      if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
-		:
-	      else
-		$echo "$modename: warning: object name conflicts; renaming object files" 1>&2
-		$echo "$modename: warning: to ensure that they will not overwrite" 1>&2
-		$AR t "$xabs" | sort | uniq -cd | while read -r count name
-		do
-		  i=1
-		  while test "$i" -le "$count"
-		  do
-		   # Put our $i before any first dot (extension)
-		   # Never overwrite any file
-		   name_to="$name"
-		   while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
-		   do
-		     name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
-		   done
-		   $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
-		   $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
-		   i=`expr $i + 1`
-		  done
-		done
-	      fi
-
-	      libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
-	    done
-	  fi
-	fi
-
-	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
-	  eval flag=\"$thread_safe_flag_spec\"
-	  linker_flags="$linker_flags $flag"
-	fi
-
-	# Make a backup of the uninstalled library when relinking
-	if test "$mode" = relink; then
-	  $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
-	fi
-
-	# Do each of the archive commands.
-	if test "$module" = yes && test -n "$module_cmds" ; then
-	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
-	    eval test_cmds=\"$module_expsym_cmds\"
-	    cmds=$module_expsym_cmds
-	  else
-	    eval test_cmds=\"$module_cmds\"
-	    cmds=$module_cmds
-	  fi
-	else
-	if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
-	  eval test_cmds=\"$archive_expsym_cmds\"
-	  cmds=$archive_expsym_cmds
-	else
-	  eval test_cmds=\"$archive_cmds\"
-	  cmds=$archive_cmds
-	  fi
-	fi
-
-	if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` &&
-	   test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-	  :
-	else
-	  # The command line is too long to link in one step, link piecewise.
-	  $echo "creating reloadable object files..."
-
-	  # Save the value of $output and $libobjs because we want to
-	  # use them later.  If we have whole_archive_flag_spec, we
-	  # want to use save_libobjs as it was before
-	  # whole_archive_flag_spec was expanded, because we can't
-	  # assume the linker understands whole_archive_flag_spec.
-	  # This may have to be revisited, in case too many
-	  # convenience libraries get linked in and end up exceeding
-	  # the spec.
-	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
-	    save_libobjs=$libobjs
-	  fi
-	  save_output=$output
-
-	  # Clear the reloadable object creation command queue and
-	  # initialize k to one.
-	  test_cmds=
-	  concat_cmds=
-	  objlist=
-	  delfiles=
-	  last_robj=
-	  k=1
-	  output=$output_objdir/$save_output-${k}.$objext
-	  # Loop over the list of objects to be linked.
-	  for obj in $save_libobjs
-	  do
-	    eval test_cmds=\"$reload_cmds $objlist $last_robj\"
-	    if test "X$objlist" = X ||
-	       { len=`expr "X$test_cmds" : ".*"` &&
-		 test "$len" -le "$max_cmd_len"; }; then
-	      objlist="$objlist $obj"
-	    else
-	      # The command $test_cmds is almost too long, add a
-	      # command to the queue.
-	      if test "$k" -eq 1 ; then
-		# The first file doesn't have a previous command to add.
-		eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
-	      else
-		# All subsequent reloadable object files will link in
-		# the last one created.
-		eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
-	      fi
-	      last_robj=$output_objdir/$save_output-${k}.$objext
-	      k=`expr $k + 1`
-	      output=$output_objdir/$save_output-${k}.$objext
-	      objlist=$obj
-	      len=1
-	    fi
-	  done
-	  # Handle the remaining objects by creating one last
-	  # reloadable object file.  All subsequent reloadable object
-	  # files will link in the last one created.
-	  test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-	  eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
-
-	  if ${skipped_export-false}; then
-	    $show "generating symbol list for \`$libname.la'"
-	    export_symbols="$output_objdir/$libname.exp"
-	    $run $rm $export_symbols
-	    libobjs=$output
-	    # Append the command to create the export file.
-	    eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
-          fi
-
-	  # Set up a command to remove the reloadale object files
-	  # after they are used.
-	  i=0
-	  while test "$i" -lt "$k"
-	  do
-	    i=`expr $i + 1`
-	    delfiles="$delfiles $output_objdir/$save_output-${i}.$objext"
-	  done
-
-	  $echo "creating a temporary reloadable object file: $output"
-
-	  # Loop through the commands generated above and execute them.
-	  save_ifs="$IFS"; IFS='~'
-	  for cmd in $concat_cmds; do
-	    IFS="$save_ifs"
-	    eval cmd=\"$cmd\"
-	    $show "$cmd"
-	    $run eval "$cmd" || exit $?
-	  done
-	  IFS="$save_ifs"
-
-	  libobjs=$output
-	  # Restore the value of output.
-	  output=$save_output
-
-	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
-	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
-	  fi
-	  # Expand the library linking commands again to reset the
-	  # value of $libobjs for piecewise linking.
-
-	  # Do each of the archive commands.
-	  if test "$module" = yes && test -n "$module_cmds" ; then
-	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
-	      cmds=$module_expsym_cmds
-	    else
-	      cmds=$module_cmds
-	    fi
-	  else
-	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
-	    cmds=$archive_expsym_cmds
-	  else
-	    cmds=$archive_cmds
-	    fi
-	  fi
-
-	  # Append the command to remove the reloadable object files
-	  # to the just-reset $cmds.
-	  eval cmds=\"\$cmds~\$rm $delfiles\"
-	fi
-	save_ifs="$IFS"; IFS='~'
-	for cmd in $cmds; do
-	  IFS="$save_ifs"
-	  eval cmd=\"$cmd\"
-	  $show "$cmd"
-	  $run eval "$cmd" || exit $?
-	done
-	IFS="$save_ifs"
-
-	# Restore the uninstalled library and exit
-	if test "$mode" = relink; then
-	  $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
-	  exit 0
-	fi
-
-	# Create links to the real library.
-	for linkname in $linknames; do
-	  if test "$realname" != "$linkname"; then
-	    $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
-	    $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
-	  fi
-	done
-
-	# If -module or -export-dynamic was specified, set the dlname.
-	if test "$module" = yes || test "$export_dynamic" = yes; then
-	  # On all known operating systems, these are identical.
-	  dlname="$soname"
-	fi
-      fi
-      ;;
-
-    obj)
-      if test -n "$deplibs"; then
-	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
-      fi
-
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-	$echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$rpath"; then
-	$echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$xrpath"; then
-	$echo "$modename: warning: \`-R' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$vinfo"; then
-	$echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$release"; then
-	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
-      fi
-
-      case $output in
-      *.lo)
-	if test -n "$objs$old_deplibs"; then
-	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
-	  exit 1
-	fi
-	libobj="$output"
-	obj=`$echo "X$output" | $Xsed -e "$lo2o"`
-	;;
-      *)
-	libobj=
-	obj="$output"
-	;;
-      esac
-
-      # Delete the old objects.
-      $run $rm $obj $libobj
-
-      # Objects from convenience libraries.  This assumes
-      # single-version convenience libraries.  Whenever we create
-      # different ones for PIC/non-PIC, this we'll have to duplicate
-      # the extraction.
-      reload_conv_objs=
-      gentop=
-      # reload_cmds runs $LD directly, so let us get rid of
-      # -Wl from whole_archive_flag_spec
-      wl=
-
-      if test -n "$convenience"; then
-	if test -n "$whole_archive_flag_spec"; then
-	  eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
-	else
-	  gentop="$output_objdir/${obj}x"
-	  $show "${rm}r $gentop"
-	  $run ${rm}r "$gentop"
-	  $show "$mkdir $gentop"
-	  $run $mkdir "$gentop"
-	  status=$?
-	  if test "$status" -ne 0 && test ! -d "$gentop"; then
-	    exit $status
-	  fi
-	  generated="$generated $gentop"
-
-	  for xlib in $convenience; do
-	    # Extract the objects.
-	    case $xlib in
-	    [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
-	    *) xabs=`pwd`"/$xlib" ;;
-	    esac
-	    xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
-	    xdir="$gentop/$xlib"
-
-	    $show "${rm}r $xdir"
-	    $run ${rm}r "$xdir"
-	    $show "$mkdir $xdir"
-	    $run $mkdir "$xdir"
-	    status=$?
-	    if test "$status" -ne 0 && test ! -d "$xdir"; then
-	      exit $status
-	    fi
-	    # We will extract separately just the conflicting names and we will no
-	    # longer touch any unique names. It is faster to leave these extract
-	    # automatically by $AR in one run.
-	    $show "(cd $xdir && $AR x $xabs)"
-	    $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-	    if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
-	      :
-	    else
-	      $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
-	      $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
-	      $AR t "$xabs" | sort | uniq -cd | while read -r count name
-	      do
-		i=1
-		while test "$i" -le "$count"
-		do
-		 # Put our $i before any first dot (extension)
-		 # Never overwrite any file
-		 name_to="$name"
-		 while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
-		 do
-		   name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
-		 done
-		 $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
-		 $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
-		 i=`expr $i + 1`
-		done
-	      done
-	    fi
-
-	    reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
-	  done
-	fi
-      fi
-
-      # Create the old-style object.
-      reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
-
-      output="$obj"
-      cmds=$reload_cmds
-      save_ifs="$IFS"; IFS='~'
-      for cmd in $cmds; do
-	IFS="$save_ifs"
-	eval cmd=\"$cmd\"
-	$show "$cmd"
-	$run eval "$cmd" || exit $?
-      done
-      IFS="$save_ifs"
-
-      # Exit if we aren't doing a library object file.
-      if test -z "$libobj"; then
-	if test -n "$gentop"; then
-	  $show "${rm}r $gentop"
-	  $run ${rm}r $gentop
-	fi
-
-	exit 0
-      fi
-
-      if test "$build_libtool_libs" != yes; then
-	if test -n "$gentop"; then
-	  $show "${rm}r $gentop"
-	  $run ${rm}r $gentop
-	fi
-
-	# Create an invalid libtool object if no PIC, so that we don't
-	# accidentally link it into a program.
-	# $show "echo timestamp > $libobj"
-	# $run eval "echo timestamp > $libobj" || exit $?
-	exit 0
-      fi
-
-      if test -n "$pic_flag" || test "$pic_mode" != default; then
-	# Only do commands if we really have different PIC objects.
-	reload_objs="$libobjs $reload_conv_objs"
-	output="$libobj"
-	cmds=$reload_cmds
-	save_ifs="$IFS"; IFS='~'
-	for cmd in $cmds; do
-	  IFS="$save_ifs"
-	  eval cmd=\"$cmd\"
-	  $show "$cmd"
-	  $run eval "$cmd" || exit $?
-	done
-	IFS="$save_ifs"
-      fi
-
-      if test -n "$gentop"; then
-	$show "${rm}r $gentop"
-	$run ${rm}r $gentop
-      fi
-
-      exit 0
-      ;;
-
-    prog)
-      case $host in
-	*cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
-      esac
-      if test -n "$vinfo"; then
-	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
-      fi
-
-      if test -n "$release"; then
-	$echo "$modename: warning: \`-release' is ignored for programs" 1>&2
-      fi
-
-      if test "$preload" = yes; then
-	if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
-	   test "$dlopen_self_static" = unknown; then
-	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
-	fi
-      fi
-
-      case $host in
-      *-*-rhapsody* | *-*-darwin1.[012])
-	# On Rhapsody replace the C library is the System framework
-	compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
-	finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
-	;;
-      esac
-
-      case $host in
-      *darwin*)
-        # Don't allow lazy linking, it breaks C++ global constructors
-        if test "$tagname" = CXX ; then
-        compile_command="$compile_command ${wl}-bind_at_load"
-        finalize_command="$finalize_command ${wl}-bind_at_load"
-        fi
-        ;;
-      esac
-
-      compile_command="$compile_command $compile_deplibs"
-      finalize_command="$finalize_command $finalize_deplibs"
-
-      if test -n "$rpath$xrpath"; then
-	# If the user specified any rpath flags, then add them.
-	for libdir in $rpath $xrpath; do
-	  # This is the magic to use -rpath.
-	  case "$finalize_rpath " in
-	  *" $libdir "*) ;;
-	  *) finalize_rpath="$finalize_rpath $libdir" ;;
-	  esac
-	done
-      fi
-
-      # Now hardcode the library paths
-      rpath=
-      hardcode_libdirs=
-      for libdir in $compile_rpath $finalize_rpath; do
-	if test -n "$hardcode_libdir_flag_spec"; then
-	  if test -n "$hardcode_libdir_separator"; then
-	    if test -z "$hardcode_libdirs"; then
-	      hardcode_libdirs="$libdir"
-	    else
-	      # Just accumulate the unique libdirs.
-	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
-	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-		;;
-	      *)
-		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-		;;
-	      esac
-	    fi
-	  else
-	    eval flag=\"$hardcode_libdir_flag_spec\"
-	    rpath="$rpath $flag"
-	  fi
-	elif test -n "$runpath_var"; then
-	  case "$perm_rpath " in
-	  *" $libdir "*) ;;
-	  *) perm_rpath="$perm_rpath $libdir" ;;
-	  esac
-	fi
-	case $host in
-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-	  case :$dllsearchpath: in
-	  *":$libdir:"*) ;;
-	  *) dllsearchpath="$dllsearchpath:$libdir";;
-	  esac
-	  ;;
-	esac
-      done
-      # Substitute the hardcoded libdirs into the rpath.
-      if test -n "$hardcode_libdir_separator" &&
-	 test -n "$hardcode_libdirs"; then
-	libdir="$hardcode_libdirs"
-	eval rpath=\" $hardcode_libdir_flag_spec\"
-      fi
-      compile_rpath="$rpath"
-
-      rpath=
-      hardcode_libdirs=
-      for libdir in $finalize_rpath; do
-	if test -n "$hardcode_libdir_flag_spec"; then
-	  if test -n "$hardcode_libdir_separator"; then
-	    if test -z "$hardcode_libdirs"; then
-	      hardcode_libdirs="$libdir"
-	    else
-	      # Just accumulate the unique libdirs.
-	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
-	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-		;;
-	      *)
-		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-		;;
-	      esac
-	    fi
-	  else
-	    eval flag=\"$hardcode_libdir_flag_spec\"
-	    rpath="$rpath $flag"
-	  fi
-	elif test -n "$runpath_var"; then
-	  case "$finalize_perm_rpath " in
-	  *" $libdir "*) ;;
-	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
-	  esac
-	fi
-      done
-      # Substitute the hardcoded libdirs into the rpath.
-      if test -n "$hardcode_libdir_separator" &&
-	 test -n "$hardcode_libdirs"; then
-	libdir="$hardcode_libdirs"
-	eval rpath=\" $hardcode_libdir_flag_spec\"
-      fi
-      finalize_rpath="$rpath"
-
-      if test -n "$libobjs" && test "$build_old_libs" = yes; then
-	# Transform all the library objects into standard objects.
-	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-	finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-      fi
-
-      dlsyms=
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-	if test -n "$NM" && test -n "$global_symbol_pipe"; then
-	  dlsyms="${outputname}S.c"
-	else
-	  $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
-	fi
-      fi
-
-      if test -n "$dlsyms"; then
-	case $dlsyms in
-	"") ;;
-	*.c)
-	  # Discover the nlist of each of the dlfiles.
-	  nlist="$output_objdir/${outputname}.nm"
-
-	  $show "$rm $nlist ${nlist}S ${nlist}T"
-	  $run $rm "$nlist" "${nlist}S" "${nlist}T"
-
-	  # Parse the name list into a source file.
-	  $show "creating $output_objdir/$dlsyms"
-
-	  test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
-/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
-/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
-
-#ifdef __cplusplus
-extern \"C\" {
-#endif
-
-/* Prevent the only kind of declaration conflicts we can make. */
-#define lt_preloaded_symbols some_other_symbol
-
-/* External symbol declarations for the compiler. */\
-"
-
-	  if test "$dlself" = yes; then
-	    $show "generating symbol list for \`$output'"
-
-	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
-
-	    # Add our own program objects to the symbol list.
-	    progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-	    for arg in $progfiles; do
-	      $show "extracting global C symbols from \`$arg'"
-	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
-	    done
-
-	    if test -n "$exclude_expsyms"; then
-	      $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
-	      $run eval '$mv "$nlist"T "$nlist"'
-	    fi
-
-	    if test -n "$export_symbols_regex"; then
-	      $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
-	      $run eval '$mv "$nlist"T "$nlist"'
-	    fi
-
-	    # Prepare the list of exported symbols
-	    if test -z "$export_symbols"; then
-	      export_symbols="$output_objdir/$output.exp"
-	      $run $rm $export_symbols
-	      $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
-	    else
-	      $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
-	      $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
-	      $run eval 'mv "$nlist"T "$nlist"'
-	    fi
-	  fi
-
-	  for arg in $dlprefiles; do
-	    $show "extracting global C symbols from \`$arg'"
-	    name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
-	    $run eval '$echo ": $name " >> "$nlist"'
-	    $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
-	  done
-
-	  if test -z "$run"; then
-	    # Make sure we have at least an empty file.
-	    test -f "$nlist" || : > "$nlist"
-
-	    if test -n "$exclude_expsyms"; then
-	      $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
-	      $mv "$nlist"T "$nlist"
-	    fi
-
-	    # Try sorting and uniquifying the output.
-	    if grep -v "^: " < "$nlist" |
-		if sort -k 3 </dev/null >/dev/null 2>&1; then
-		  sort -k 3
-		else
-		  sort +2
-		fi |
-		uniq > "$nlist"S; then
-	      :
-	    else
-	      grep -v "^: " < "$nlist" > "$nlist"S
-	    fi
-
-	    if test -f "$nlist"S; then
-	      eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
-	    else
-	      $echo '/* NONE */' >> "$output_objdir/$dlsyms"
-	    fi
-
-	    $echo >> "$output_objdir/$dlsyms" "\
-
-#undef lt_preloaded_symbols
-
-#if defined (__STDC__) && __STDC__
-# define lt_ptr void *
-#else
-# define lt_ptr char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
-  const char *name;
-  lt_ptr address;
-}
-lt_preloaded_symbols[] =
-{\
-"
-
-	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
-
-	    $echo >> "$output_objdir/$dlsyms" "\
-  {0, (lt_ptr) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
-  return lt_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif\
-"
-	  fi
-
-	  pic_flag_for_symtable=
-	  case $host in
-	  # compiling the symbol table file with pic_flag works around
-	  # a FreeBSD bug that causes programs to crash when -lm is
-	  # linked before any other PIC object.  But we must not use
-	  # pic_flag when linking with -static.  The problem exists in
-	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
-	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
-	    case "$compile_command " in
-	    *" -static "*) ;;
-	    *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
-	    esac;;
-	  *-*-hpux*)
-	    case "$compile_command " in
-	    *" -static "*) ;;
-	    *) pic_flag_for_symtable=" $pic_flag";;
-	    esac
-	  esac
-
-	  # Now compile the dynamic symbol file.
-	  $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
-	  $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
-
-	  # Clean up the generated files.
-	  $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
-	  $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
-
-	  # Transform the symbol file into the correct name.
-	  compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
-	  finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
-	  ;;
-	*)
-	  $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
-	  exit 1
-	  ;;
-	esac
-      else
-	# We keep going just in case the user didn't refer to
-	# lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
-	# really was required.
-
-	# Nullify the symbol file.
-	compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
-	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
-      fi
-
-      if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
-	# Replace the output file specification.
-	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
-	link_command="$compile_command$compile_rpath"
-
-	# We have no uninstalled library dependencies, so finalize right now.
-	$show "$link_command"
-	$run eval "$link_command"
-	status=$?
-
-	# Delete the generated files.
-	if test -n "$dlsyms"; then
-	  $show "$rm $output_objdir/${outputname}S.${objext}"
-	  $run $rm "$output_objdir/${outputname}S.${objext}"
-	fi
-
-	exit $status
-      fi
-
-      if test -n "$shlibpath_var"; then
-	# We should set the shlibpath_var
-	rpath=
-	for dir in $temp_rpath; do
-	  case $dir in
-	  [\\/]* | [A-Za-z]:[\\/]*)
-	    # Absolute path.
-	    rpath="$rpath$dir:"
-	    ;;
-	  *)
-	    # Relative path: add a thisdir entry.
-	    rpath="$rpath\$thisdir/$dir:"
-	    ;;
-	  esac
-	done
-	temp_rpath="$rpath"
-      fi
-
-      if test -n "$compile_shlibpath$finalize_shlibpath"; then
-	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
-      fi
-      if test -n "$finalize_shlibpath"; then
-	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
-      fi
-
-      compile_var=
-      finalize_var=
-      if test -n "$runpath_var"; then
-	if test -n "$perm_rpath"; then
-	  # We should set the runpath_var.
-	  rpath=
-	  for dir in $perm_rpath; do
-	    rpath="$rpath$dir:"
-	  done
-	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
-	fi
-	if test -n "$finalize_perm_rpath"; then
-	  # We should set the runpath_var.
-	  rpath=
-	  for dir in $finalize_perm_rpath; do
-	    rpath="$rpath$dir:"
-	  done
-	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
-	fi
-      fi
-
-      if test "$no_install" = yes; then
-	# We don't need to create a wrapper script.
-	link_command="$compile_var$compile_command$compile_rpath"
-	# Replace the output file specification.
-	link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
-	# Delete the old output file.
-	$run $rm $output
-	# Link the executable and exit
-	$show "$link_command"
-	$run eval "$link_command" || exit $?
-	exit 0
-      fi
-
-      if test "$hardcode_action" = relink; then
-	# Fast installation is not supported
-	link_command="$compile_var$compile_command$compile_rpath"
-	relink_command="$finalize_var$finalize_command$finalize_rpath"
-
-	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
-	$echo "$modename: \`$output' will be relinked during installation" 1>&2
-      else
-	if test "$fast_install" != no; then
-	  link_command="$finalize_var$compile_command$finalize_rpath"
-	  if test "$fast_install" = yes; then
-	    relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
-	  else
-	    # fast_install is set to needless
-	    relink_command=
-	  fi
-	else
-	  link_command="$compile_var$compile_command$compile_rpath"
-	  relink_command="$finalize_var$finalize_command$finalize_rpath"
-	fi
-      fi
-
-      # Replace the output file specification.
-      link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-
-      # Delete the old output files.
-      $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
-
-      $show "$link_command"
-      $run eval "$link_command" || exit $?
-
-      # Now create the wrapper script.
-      $show "creating $output"
-
-      # Quote the relink command for shipping.
-      if test -n "$relink_command"; then
-	# Preserve any variables that may affect compiler behavior
-	for var in $variables_saved_for_relink; do
-	  if eval test -z \"\${$var+set}\"; then
-	    relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
-	  elif eval var_value=\$$var; test -z "$var_value"; then
-	    relink_command="$var=; export $var; $relink_command"
-	  else
-	    var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
-	    relink_command="$var=\"$var_value\"; export $var; $relink_command"
-	  fi
-	done
-	relink_command="(cd `pwd`; $relink_command)"
-	relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
-      fi
-
-      # Quote $echo for shipping.
-      if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
-	case $0 in
-	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
-	*) qecho="$SHELL `pwd`/$0 --fallback-echo";;
-	esac
-	qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
-      else
-	qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
-      fi
-
-      # Only actually do things if our run command is non-null.
-      if test -z "$run"; then
-	# win32 will think the script is a binary if it has
-	# a .exe suffix, so we strip it off here.
-	case $output in
-	  *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;;
-	esac
-	# test for cygwin because mv fails w/o .exe extensions
-	case $host in
-	  *cygwin*)
-	    exeext=.exe
-	    outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
-	  *) exeext= ;;
-	esac
-	case $host in
-	  *cygwin* | *mingw* )
-	    cwrappersource=`$echo ${objdir}/lt-${output}.c`
-	    cwrapper=`$echo ${output}.exe`
-	    $rm $cwrappersource $cwrapper
-	    trap "$rm $cwrappersource $cwrapper; exit 1" 1 2 15
-
-	    cat > $cwrappersource <<EOF
-
-/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
-   Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-
-   The $output program cannot be directly executed until all the libtool
-   libraries that it depends on are installed.
-   
-   This wrapper executable should never be moved out of the build directory.
-   If it is, it will not operate correctly.
-
-   Currently, it simply execs the wrapper *script* "/bin/sh $output",
-   but could eventually absorb all of the scripts functionality and
-   exec $objdir/$outputname directly.
-*/
-EOF
-	    cat >> $cwrappersource<<"EOF"
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <malloc.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#if defined(PATH_MAX)
-# define LT_PATHMAX PATH_MAX
-#elif defined(MAXPATHLEN)
-# define LT_PATHMAX MAXPATHLEN
-#else
-# define LT_PATHMAX 1024
-#endif
-
-#ifndef DIR_SEPARATOR
-#define DIR_SEPARATOR '/'
-#endif
-
-#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
-  defined (__OS2__)
-#define HAVE_DOS_BASED_FILE_SYSTEM
-#ifndef DIR_SEPARATOR_2 
-#define DIR_SEPARATOR_2 '\\'
-#endif
-#endif
-
-#ifndef DIR_SEPARATOR_2
-# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
-#else /* DIR_SEPARATOR_2 */
-# define IS_DIR_SEPARATOR(ch) \
-        (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
-#endif /* DIR_SEPARATOR_2 */
-
-#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
-#define XFREE(stale) do { \
-  if (stale) { free ((void *) stale); stale = 0; } \
-} while (0)
-
-const char *program_name = NULL;
-
-void * xmalloc (size_t num);
-char * xstrdup (const char *string);
-char * basename (const char *name);
-char * fnqualify(const char *path);
-char * strendzap(char *str, const char *pat);
-void lt_fatal (const char *message, ...);
-
-int
-main (int argc, char *argv[])
-{
-  char **newargz;
-  int i;
-  
-  program_name = (char *) xstrdup ((char *) basename (argv[0]));
-  newargz = XMALLOC(char *, argc+2);
-EOF
-
-	    cat >> $cwrappersource <<EOF
-  newargz[0] = "$SHELL";
-EOF
-
-	    cat >> $cwrappersource <<"EOF"
-  newargz[1] = fnqualify(argv[0]);
-  /* we know the script has the same name, without the .exe */
-  /* so make sure newargz[1] doesn't end in .exe */
-  strendzap(newargz[1],".exe"); 
-  for (i = 1; i < argc; i++)
-    newargz[i+1] = xstrdup(argv[i]);
-  newargz[argc+1] = NULL;
-EOF
-
-	    cat >> $cwrappersource <<EOF
-  execv("$SHELL",newargz);
-EOF
-
-	    cat >> $cwrappersource <<"EOF"
-}
-
-void *
-xmalloc (size_t num)
-{
-  void * p = (void *) malloc (num);
-  if (!p)
-    lt_fatal ("Memory exhausted");
-
-  return p;
-}
-
-char * 
-xstrdup (const char *string)
-{
-  return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL
-;
-}
-
-char *
-basename (const char *name)
-{
-  const char *base;
-
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
-  /* Skip over the disk name in MSDOS pathnames. */
-  if (isalpha (name[0]) && name[1] == ':') 
-    name += 2;
-#endif
-
-  for (base = name; *name; name++)
-    if (IS_DIR_SEPARATOR (*name))
-      base = name + 1;
-  return (char *) base;
-}
-
-char * 
-fnqualify(const char *path)
-{
-  size_t size;
-  char *p;
-  char tmp[LT_PATHMAX + 1];
-
-  assert(path != NULL);
-
-  /* Is it qualified already? */
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
-  if (isalpha (path[0]) && path[1] == ':')
-    return xstrdup (path);
-#endif
-  if (IS_DIR_SEPARATOR (path[0]))
-    return xstrdup (path);
-
-  /* prepend the current directory */
-  /* doesn't handle '~' */
-  if (getcwd (tmp, LT_PATHMAX) == NULL)
-    lt_fatal ("getcwd failed");
-  size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */
-  p = XMALLOC(char, size);
-  sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path);
-  return p;
-}
-
-char *
-strendzap(char *str, const char *pat) 
-{
-  size_t len, patlen;
-
-  assert(str != NULL);
-  assert(pat != NULL);
-
-  len = strlen(str);
-  patlen = strlen(pat);
-
-  if (patlen <= len)
-  {
-    str += len - patlen;
-    if (strcmp(str, pat) == 0)
-      *str = '\0';
-  }
-  return str;
-}
-
-static void
-lt_error_core (int exit_status, const char * mode, 
-          const char * message, va_list ap)
-{
-  fprintf (stderr, "%s: %s: ", program_name, mode);
-  vfprintf (stderr, message, ap);
-  fprintf (stderr, ".\n");
-
-  if (exit_status >= 0)
-    exit (exit_status);
-}
-
-void
-lt_fatal (const char *message, ...)
-{
-  va_list ap;
-  va_start (ap, message);
-  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
-  va_end (ap);
-}
-EOF
-	  # we should really use a build-platform specific compiler
-	  # here, but OTOH, the wrappers (shell script and this C one)
-	  # are only useful if you want to execute the "real" binary.
-	  # Since the "real" binary is built for $host, then this
-	  # wrapper might as well be built for $host, too.
-	  $run $LTCC -s -o $cwrapper $cwrappersource
-	  ;;
-	esac
-	$rm $output
-	trap "$rm $output; exit 1" 1 2 15
-
-	$echo > $output "\
-#! $SHELL
-
-# $output - temporary wrapper script for $objdir/$outputname
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# The $output program cannot be directly executed until all the libtool
-# libraries that it depends on are installed.
-#
-# This wrapper script should never be moved out of the build directory.
-# If it is, it will not operate correctly.
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='${SED} -e 1s/^X//'
-sed_quote_subst='$sed_quote_subst'
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
-
-relink_command=\"$relink_command\"
-
-# This environment variable determines our operation mode.
-if test \"\$libtool_install_magic\" = \"$magic\"; then
-  # install mode needs the following variable:
-  notinst_deplibs='$notinst_deplibs'
-else
-  # When we are sourced in execute mode, \$file and \$echo are already set.
-  if test \"\$libtool_execute_magic\" != \"$magic\"; then
-    echo=\"$qecho\"
-    file=\"\$0\"
-    # Make sure echo works.
-    if test \"X\$1\" = X--no-reexec; then
-      # Discard the --no-reexec flag, and continue.
-      shift
-    elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
-      # Yippee, \$echo works!
-      :
-    else
-      # Restart under the correct shell, and then maybe \$echo will work.
-      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
-    fi
-  fi\
-"
-	$echo >> $output "\
-
-  # Find the directory that this script lives in.
-  thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
-  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
-
-  # Follow symbolic links until we get to the real thisdir.
-  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
-  while test -n \"\$file\"; do
-    destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
-
-    # If there was a directory component, then change thisdir.
-    if test \"x\$destdir\" != \"x\$file\"; then
-      case \"\$destdir\" in
-      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
-      *) thisdir=\"\$thisdir/\$destdir\" ;;
-      esac
-    fi
-
-    file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
-    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
-  done
-
-  # Try to get the absolute directory name.
-  absdir=\`cd \"\$thisdir\" && pwd\`
-  test -n \"\$absdir\" && thisdir=\"\$absdir\"
-"
-
-	if test "$fast_install" = yes; then
-	  $echo >> $output "\
-  program=lt-'$outputname'$exeext
-  progdir=\"\$thisdir/$objdir\"
-
-  if test ! -f \"\$progdir/\$program\" || \\
-     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
-       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
-
-    file=\"\$\$-\$program\"
-
-    if test ! -d \"\$progdir\"; then
-      $mkdir \"\$progdir\"
-    else
-      $rm \"\$progdir/\$file\"
-    fi"
-
-	  $echo >> $output "\
-
-    # relink executable if necessary
-    if test -n \"\$relink_command\"; then
-      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
-      else
-	$echo \"\$relink_command_output\" >&2
-	$rm \"\$progdir/\$file\"
-	exit 1
-      fi
-    fi
-
-    $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
-    { $rm \"\$progdir/\$program\";
-      $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
-    $rm \"\$progdir/\$file\"
-  fi"
-	else
-	  $echo >> $output "\
-  program='$outputname'
-  progdir=\"\$thisdir/$objdir\"
-"
-	fi
-
-	$echo >> $output "\
-
-  if test -f \"\$progdir/\$program\"; then"
-
-	# Export our shlibpath_var if we have one.
-	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
-	  $echo >> $output "\
-    # Add our own library path to $shlibpath_var
-    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
-
-    # Some systems cannot cope with colon-terminated $shlibpath_var
-    # The second colon is a workaround for a bug in BeOS R4 sed
-    $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
-
-    export $shlibpath_var
-"
-	fi
-
-	# fixup the dll searchpath if we need to.
-	if test -n "$dllsearchpath"; then
-	  $echo >> $output "\
-    # Add the dll search path components to the executable PATH
-    PATH=$dllsearchpath:\$PATH
-"
-	fi
-
-	$echo >> $output "\
-    if test \"\$libtool_execute_magic\" != \"$magic\"; then
-      # Run the actual program with our arguments.
-"
-	case $host in
-	# Backslashes separate directories on plain windows
-	*-*-mingw | *-*-os2*)
-	  $echo >> $output "\
-      exec \$progdir\\\\\$program \${1+\"\$@\"}
-"
-	  ;;
-
-	*)
-	  $echo >> $output "\
-      exec \$progdir/\$program \${1+\"\$@\"}
-"
-	  ;;
-	esac
-	$echo >> $output "\
-      \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
-      exit 1
-    fi
-  else
-    # The program doesn't exist.
-    \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
-    \$echo \"This script is just a wrapper for \$program.\" 1>&2
-    $echo \"See the $PACKAGE documentation for more information.\" 1>&2
-    exit 1
-  fi
-fi\
-"
-	chmod +x $output
-      fi
-      exit 0
-      ;;
-    esac
-
-    # See if we need to build an old-fashioned archive.
-    for oldlib in $oldlibs; do
-
-      if test "$build_libtool_libs" = convenience; then
-	oldobjs="$libobjs_save"
-	addlibs="$convenience"
-	build_libtool_libs=no
-      else
-	if test "$build_libtool_libs" = module; then
-	  oldobjs="$libobjs_save"
-	  build_libtool_libs=no
-	else
-	  oldobjs="$old_deplibs $non_pic_objects"
-	fi
-	addlibs="$old_convenience"
-      fi
-
-      if test -n "$addlibs"; then
-	gentop="$output_objdir/${outputname}x"
-	$show "${rm}r $gentop"
-	$run ${rm}r "$gentop"
-	$show "$mkdir $gentop"
-	$run $mkdir "$gentop"
-	status=$?
-	if test "$status" -ne 0 && test ! -d "$gentop"; then
-	  exit $status
-	fi
-	generated="$generated $gentop"
-
-	# Add in members from convenience archives.
-	for xlib in $addlibs; do
-	  # Extract the objects.
-	  case $xlib in
-	  [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
-	  *) xabs=`pwd`"/$xlib" ;;
-	  esac
-	  xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
-	  xdir="$gentop/$xlib"
-
-	  $show "${rm}r $xdir"
-	  $run ${rm}r "$xdir"
-	  $show "$mkdir $xdir"
-	  $run $mkdir "$xdir"
-	  status=$?
-	  if test "$status" -ne 0 && test ! -d "$xdir"; then
-	    exit $status
-	  fi
-	  # We will extract separately just the conflicting names and we will no
-	  # longer touch any unique names. It is faster to leave these extract
-	  # automatically by $AR in one run.
-	  $show "(cd $xdir && $AR x $xabs)"
-	  $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-	  if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
-	    :
-	  else
-	    $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
-	    $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
-	    $AR t "$xabs" | sort | uniq -cd | while read -r count name
-	    do
-	      i=1
-	      while test "$i" -le "$count"
-	      do
-	       # Put our $i before any first dot (extension)
-	       # Never overwrite any file
-	       name_to="$name"
-	       while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
-	       do
-		 name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
-	       done
-	       $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
-	       $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
-	       i=`expr $i + 1`
-	      done
-	    done
-	  fi
-
-	  oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
-	done
-      fi
-
-      # Do each command in the archive commands.
-      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
-       cmds=$old_archive_from_new_cmds
-      else
-	eval cmds=\"$old_archive_cmds\"
-
-	if len=`expr "X$cmds" : ".*"` &&
-	     test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-	  cmds=$old_archive_cmds
-	else
-	  # the command line is too long to link in one step, link in parts
-	  $echo "using piecewise archive linking..."
-	  save_RANLIB=$RANLIB
-	  RANLIB=:
-	  objlist=
-	  concat_cmds=
-	  save_oldobjs=$oldobjs
-	  # GNU ar 2.10+ was changed to match POSIX; thus no paths are
-	  # encoded into archives.  This makes 'ar r' malfunction in
-	  # this piecewise linking case whenever conflicting object
-	  # names appear in distinct ar calls; check, warn and compensate.
-	    if (for obj in $save_oldobjs
-	    do
-	      $echo "X$obj" | $Xsed -e 's%^.*/%%'
-	    done | sort | sort -uc >/dev/null 2>&1); then
-	    :
-	  else
-	    $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2
-	    $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2
-	    AR_FLAGS=cq
-	  fi
-	  # Is there a better way of finding the last object in the list?
-	  for obj in $save_oldobjs
-	  do
-	    last_oldobj=$obj
-	  done  
-	  for obj in $save_oldobjs
-	  do
-	    oldobjs="$objlist $obj"
-	    objlist="$objlist $obj"
-	    eval test_cmds=\"$old_archive_cmds\"
-	    if len=`expr "X$test_cmds" : ".*"` &&
-	       test "$len" -le "$max_cmd_len"; then
-	      :
-	    else
-	      # the above command should be used before it gets too long
-	      oldobjs=$objlist
-	      if test "$obj" = "$last_oldobj" ; then
-	        RANLIB=$save_RANLIB
-	      fi  
-	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
-	      objlist=
-	    fi
-	  done
-	  RANLIB=$save_RANLIB
-	  oldobjs=$objlist
-	  if test "X$oldobjs" = "X" ; then
-	    eval cmds=\"\$concat_cmds\"
-	  else
-	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
-	  fi
-	fi
-      fi
-      save_ifs="$IFS"; IFS='~'
-      for cmd in $cmds; do
-        eval cmd=\"$cmd\"
-	IFS="$save_ifs"
-	$show "$cmd"
-	$run eval "$cmd" || exit $?
-      done
-      IFS="$save_ifs"
-    done
-
-    if test -n "$generated"; then
-      $show "${rm}r$generated"
-      $run ${rm}r$generated
-    fi
-
-    # Now create the libtool archive.
-    case $output in
-    *.la)
-      old_library=
-      test "$build_old_libs" = yes && old_library="$libname.$libext"
-      $show "creating $output"
-
-      # Preserve any variables that may affect compiler behavior
-      for var in $variables_saved_for_relink; do
-	if eval test -z \"\${$var+set}\"; then
-	  relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
-	elif eval var_value=\$$var; test -z "$var_value"; then
-	  relink_command="$var=; export $var; $relink_command"
-	else
-	  var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
-	  relink_command="$var=\"$var_value\"; export $var; $relink_command"
-	fi
-      done
-      # Quote the link command for shipping.
-      relink_command="(cd `pwd`; $SHELL $0 $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
-      relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
-      if test "$hardcode_automatic" = yes ; then
-        relink_command=
-      fi  
-      # Only create the output if not a dry run.
-      if test -z "$run"; then
-	for installed in no yes; do
-	  if test "$installed" = yes; then
-	    if test -z "$install_libdir"; then
-	      break
-	    fi
-	    output="$output_objdir/$outputname"i
-	    # Replace all uninstalled libtool libraries with the installed ones
-	    newdependency_libs=
-	    for deplib in $dependency_libs; do
-	      case $deplib in
-	      *.la)
-		name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
-		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
-		if test -z "$libdir"; then
-		  $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
-		  exit 1
-		fi
-		newdependency_libs="$newdependency_libs $libdir/$name"
-		;;
-	      *) newdependency_libs="$newdependency_libs $deplib" ;;
-	      esac
-	    done
-	    dependency_libs="$newdependency_libs"
-	    newdlfiles=
-	    for lib in $dlfiles; do
-	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-	      eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
-	      if test -z "$libdir"; then
-		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-		exit 1
-	      fi
-	      newdlfiles="$newdlfiles $libdir/$name"
-	    done
-	    dlfiles="$newdlfiles"
-	    newdlprefiles=
-	    for lib in $dlprefiles; do
-	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-	      eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
-	      if test -z "$libdir"; then
-		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-		exit 1
-	      fi
-	      newdlprefiles="$newdlprefiles $libdir/$name"
-	    done
-	    dlprefiles="$newdlprefiles"
-	  else
-	    newdlfiles=
-	    for lib in $dlfiles; do
-	      case $lib in 
-		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
-		*) abs=`pwd`"/$lib" ;;
-	      esac
-	      newdlfiles="$newdlfiles $abs"
-	    done
-	    dlfiles="$newdlfiles"
-	    newdlprefiles=
-	    for lib in $dlprefiles; do
-	      case $lib in 
-		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
-		*) abs=`pwd`"/$lib" ;;
-	      esac
-	      newdlprefiles="$newdlprefiles $abs"
-	    done
-	    dlprefiles="$newdlprefiles"
-	  fi
-	  $rm $output
-	  # place dlname in correct position for cygwin
-	  tdlname=$dlname
-	  case $host,$output,$installed,$module,$dlname in
-	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
-	  esac
-	  $echo > $output "\
-# $outputname - a libtool library file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname='$tdlname'
-
-# Names of this library.
-library_names='$library_names'
-
-# The name of the static archive.
-old_library='$old_library'
-
-# Libraries that this one depends upon.
-dependency_libs='$dependency_libs'
-
-# Version information for $libname.
-current=$current
-age=$age
-revision=$revision
-
-# Is this an already installed library?
-installed=$installed
-
-# Should we warn about portability when linking against -modules?
-shouldnotlink=$module
-
-# Files to dlopen/dlpreopen
-dlopen='$dlfiles'
-dlpreopen='$dlprefiles'
-
-# Directory that this library needs to be installed in:
-libdir='$install_libdir'"
-	  if test "$installed" = no && test "$need_relink" = yes; then
-	    $echo >> $output "\
-relink_command=\"$relink_command\""
-	  fi
-	done
-      fi
-
-      # Do a symbolic link so that the libtool archive can be found in
-      # LD_LIBRARY_PATH before the program is installed.
-      $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
-      $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
-      ;;
-    esac
-    exit 0
-    ;;
-
-  # libtool install mode
-  install)
-    modename="$modename: install"
-
-    # There may be an optional sh(1) argument at the beginning of
-    # install_prog (especially on Windows NT).
-    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
-       # Allow the use of GNU shtool's install command.
-       $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
-      # Aesthetically quote it.
-      arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
-      case $arg in
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
-	arg="\"$arg\""
-	;;
-      esac
-      install_prog="$arg "
-      arg="$1"
-      shift
-    else
-      install_prog=
-      arg="$nonopt"
-    fi
-
-    # The real first argument should be the name of the installation program.
-    # Aesthetically quote it.
-    arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-    case $arg in
-    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
-      arg="\"$arg\""
-      ;;
-    esac
-    install_prog="$install_prog$arg"
-
-    # We need to accept at least all the BSD install flags.
-    dest=
-    files=
-    opts=
-    prev=
-    install_type=
-    isdir=no
-    stripme=
-    for arg
-    do
-      if test -n "$dest"; then
-	files="$files $dest"
-	dest="$arg"
-	continue
-      fi
-
-      case $arg in
-      -d) isdir=yes ;;
-      -f) prev="-f" ;;
-      -g) prev="-g" ;;
-      -m) prev="-m" ;;
-      -o) prev="-o" ;;
-      -s)
-	stripme=" -s"
-	continue
-	;;
-      -*) ;;
-
-      *)
-	# If the previous option needed an argument, then skip it.
-	if test -n "$prev"; then
-	  prev=
-	else
-	  dest="$arg"
-	  continue
-	fi
-	;;
-      esac
-
-      # Aesthetically quote the argument.
-      arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-      case $arg in
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
-	arg="\"$arg\""
-	;;
-      esac
-      install_prog="$install_prog $arg"
-    done
-
-    if test -z "$install_prog"; then
-      $echo "$modename: you must specify an install program" 1>&2
-      $echo "$help" 1>&2
-      exit 1
-    fi
-
-    if test -n "$prev"; then
-      $echo "$modename: the \`$prev' option requires an argument" 1>&2
-      $echo "$help" 1>&2
-      exit 1
-    fi
-
-    if test -z "$files"; then
-      if test -z "$dest"; then
-	$echo "$modename: no file or destination specified" 1>&2
-      else
-	$echo "$modename: you must specify a destination" 1>&2
-      fi
-      $echo "$help" 1>&2
-      exit 1
-    fi
-
-    # Strip any trailing slash from the destination.
-    dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
-
-    # Check to see that the destination is a directory.
-    test -d "$dest" && isdir=yes
-    if test "$isdir" = yes; then
-      destdir="$dest"
-      destname=
-    else
-      destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
-      test "X$destdir" = "X$dest" && destdir=.
-      destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
-
-      # Not a directory, so check to see that there is only one file specified.
-      set dummy $files
-      if test "$#" -gt 2; then
-	$echo "$modename: \`$dest' is not a directory" 1>&2
-	$echo "$help" 1>&2
-	exit 1
-      fi
-    fi
-    case $destdir in
-    [\\/]* | [A-Za-z]:[\\/]*) ;;
-    *)
-      for file in $files; do
-	case $file in
-	*.lo) ;;
-	*)
-	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
-	  $echo "$help" 1>&2
-	  exit 1
-	  ;;
-	esac
-      done
-      ;;
-    esac
-
-    # This variable tells wrapper scripts just to set variables rather
-    # than running their programs.
-    libtool_install_magic="$magic"
-
-    staticlibs=
-    future_libdirs=
-    current_libdirs=
-    for file in $files; do
-
-      # Do each installation.
-      case $file in
-      *.$libext)
-	# Do the static libraries later.
-	staticlibs="$staticlibs $file"
-	;;
-
-      *.la)
-	# Check to see that this really is a libtool archive.
-	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
-	else
-	  $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
-	  $echo "$help" 1>&2
-	  exit 1
-	fi
-
-	library_names=
-	old_library=
-	relink_command=
-	# If there is no directory component, then add one.
-	case $file in
-	*/* | *\\*) . $file ;;
-	*) . ./$file ;;
-	esac
-
-	# Add the libdir to current_libdirs if it is the destination.
-	if test "X$destdir" = "X$libdir"; then
-	  case "$current_libdirs " in
-	  *" $libdir "*) ;;
-	  *) current_libdirs="$current_libdirs $libdir" ;;
-	  esac
-	else
-	  # Note the libdir as a future libdir.
-	  case "$future_libdirs " in
-	  *" $libdir "*) ;;
-	  *) future_libdirs="$future_libdirs $libdir" ;;
-	  esac
-	fi
-
-	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
-	test "X$dir" = "X$file/" && dir=
-	dir="$dir$objdir"
-
-	if test -n "$relink_command"; then
-	  # Determine the prefix the user has applied to our future dir.
-	  inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"`
-
-	  # Don't allow the user to place us outside of our expected
-	  # location b/c this prevents finding dependent libraries that
-	  # are installed to the same prefix.
-	  # At present, this check doesn't affect windows .dll's that
-	  # are installed into $libdir/../bin (currently, that works fine)
-	  # but it's something to keep an eye on.
-	  if test "$inst_prefix_dir" = "$destdir"; then
-	    $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
-	    exit 1
-	  fi
-
-	  if test -n "$inst_prefix_dir"; then
-	    # Stick the inst_prefix_dir data into the link command.
-	    relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
-	  else
-	    relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
-	  fi
-
-	  $echo "$modename: warning: relinking \`$file'" 1>&2
-	  $show "$relink_command"
-	  if $run eval "$relink_command"; then :
-	  else
-	    $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
-	    exit 1
-	  fi
-	fi
-
-	# See the names of the shared library.
-	set dummy $library_names
-	if test -n "$2"; then
-	  realname="$2"
-	  shift
-	  shift
-
-	  srcname="$realname"
-	  test -n "$relink_command" && srcname="$realname"T
-
-	  # Install the shared library and build the symlinks.
-	  $show "$install_prog $dir/$srcname $destdir/$realname"
-	  $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
-	  if test -n "$stripme" && test -n "$striplib"; then
-	    $show "$striplib $destdir/$realname"
-	    $run eval "$striplib $destdir/$realname" || exit $?
-	  fi
-
-	  if test "$#" -gt 0; then
-	    # Delete the old symlinks, and create new ones.
-	    for linkname
-	    do
-	      if test "$linkname" != "$realname"; then
-		$show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
-		$run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
-	      fi
-	    done
-	  fi
-
-	  # Do each command in the postinstall commands.
-	  lib="$destdir/$realname"
-	  cmds=$postinstall_cmds
-	  save_ifs="$IFS"; IFS='~'
-	  for cmd in $cmds; do
-	    IFS="$save_ifs"
-	    eval cmd=\"$cmd\"
-	    $show "$cmd"
-	    $run eval "$cmd" || exit $?
-	  done
-	  IFS="$save_ifs"
-	fi
-
-	# Install the pseudo-library for information purposes.
-	name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-	instname="$dir/$name"i
-	$show "$install_prog $instname $destdir/$name"
-	$run eval "$install_prog $instname $destdir/$name" || exit $?
-
-	# Maybe install the static library, too.
-	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
-	;;
-
-      *.lo)
-	# Install (i.e. copy) a libtool object.
-
-	# Figure out destination file name, if it wasn't already specified.
-	if test -n "$destname"; then
-	  destfile="$destdir/$destname"
-	else
-	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-	  destfile="$destdir/$destfile"
-	fi
-
-	# Deduce the name of the destination old-style object file.
-	case $destfile in
-	*.lo)
-	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
-	  ;;
-	*.$objext)
-	  staticdest="$destfile"
-	  destfile=
-	  ;;
-	*)
-	  $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
-	  $echo "$help" 1>&2
-	  exit 1
-	  ;;
-	esac
-
-	# Install the libtool object if requested.
-	if test -n "$destfile"; then
-	  $show "$install_prog $file $destfile"
-	  $run eval "$install_prog $file $destfile" || exit $?
-	fi
-
-	# Install the old object if enabled.
-	if test "$build_old_libs" = yes; then
-	  # Deduce the name of the old-style object file.
-	  staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
-
-	  $show "$install_prog $staticobj $staticdest"
-	  $run eval "$install_prog \$staticobj \$staticdest" || exit $?
-	fi
-	exit 0
-	;;
-
-      *)
-	# Figure out destination file name, if it wasn't already specified.
-	if test -n "$destname"; then
-	  destfile="$destdir/$destname"
-	else
-	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-	  destfile="$destdir/$destfile"
-	fi
-
-	# If the file is missing, and there is a .exe on the end, strip it
-	# because it is most likely a libtool script we actually want to
-	# install
-	stripped_ext=""
-	case $file in
-	  *.exe)
-	    if test ! -f "$file"; then
-	      file=`$echo $file|${SED} 's,.exe$,,'`
-	      stripped_ext=".exe"
-	    fi
-	    ;;
-	esac
-
-	# Do a test to see if this is really a libtool program.
-	case $host in
-	*cygwin*|*mingw*)
-	    wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
-	    ;;
-	*)
-	    wrapper=$file
-	    ;;
-	esac
-	if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
-	  notinst_deplibs=
-	  relink_command=
-
-	  # To insure that "foo" is sourced, and not "foo.exe",
-	  # finese the cygwin/MSYS system by explicitly sourcing "foo."
-	  # which disallows the automatic-append-.exe behavior.
-	  case $build in
-	  *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
-	  *) wrapperdot=${wrapper} ;;
-	  esac
-	  # If there is no directory component, then add one.
-	  case $file in
-	  */* | *\\*) . ${wrapperdot} ;;
-	  *) . ./${wrapperdot} ;;
-	  esac
-
-	  # Check the variables that should have been set.
-	  if test -z "$notinst_deplibs"; then
-	    $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
-	    exit 1
-	  fi
-
-	  finalize=yes
-	  for lib in $notinst_deplibs; do
-	    # Check to see that each library is installed.
-	    libdir=
-	    if test -f "$lib"; then
-	      # If there is no directory component, then add one.
-	      case $lib in
-	      */* | *\\*) . $lib ;;
-	      *) . ./$lib ;;
-	      esac
-	    fi
-	    libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
-	    if test -n "$libdir" && test ! -f "$libfile"; then
-	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
-	      finalize=no
-	    fi
-	  done
-
-	  relink_command=
-	  # To insure that "foo" is sourced, and not "foo.exe",
-	  # finese the cygwin/MSYS system by explicitly sourcing "foo."
-	  # which disallows the automatic-append-.exe behavior.
-	  case $build in
-	  *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
-	  *) wrapperdot=${wrapper} ;;
-	  esac
-	  # If there is no directory component, then add one.
-	  case $file in
-	  */* | *\\*) . ${wrapperdot} ;;
-	  *) . ./${wrapperdot} ;;
-	  esac
-
-	  outputname=
-	  if test "$fast_install" = no && test -n "$relink_command"; then
-	    if test "$finalize" = yes && test -z "$run"; then
-	      tmpdir="/tmp"
-	      test -n "$TMPDIR" && tmpdir="$TMPDIR"
-	      tmpdir="$tmpdir/libtool-$$"
-	      if $mkdir "$tmpdir" && chmod 700 "$tmpdir"; then :
-	      else
-		$echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
-		continue
-	      fi
-	      file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
-	      outputname="$tmpdir/$file"
-	      # Replace the output file specification.
-	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
-
-	      $show "$relink_command"
-	      if $run eval "$relink_command"; then :
-	      else
-		$echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
-		${rm}r "$tmpdir"
-		continue
-	      fi
-	      file="$outputname"
-	    else
-	      $echo "$modename: warning: cannot relink \`$file'" 1>&2
-	    fi
-	  else
-	    # Install the binary that we compiled earlier.
-	    file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
-	  fi
-	fi
-
-	# remove .exe since cygwin /usr/bin/install will append another
-	# one anyways
-	case $install_prog,$host in
-	*/usr/bin/install*,*cygwin*)
-	  case $file:$destfile in
-	  *.exe:*.exe)
-	    # this is ok
-	    ;;
-	  *.exe:*)
-	    destfile=$destfile.exe
-	    ;;
-	  *:*.exe)
-	    destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
-	    ;;
-	  esac
-	  ;;
-	esac
-	$show "$install_prog$stripme $file $destfile"
-	$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
-	test -n "$outputname" && ${rm}r "$tmpdir"
-	;;
-      esac
-    done
-
-    for file in $staticlibs; do
-      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-
-      # Set up the ranlib parameters.
-      oldlib="$destdir/$name"
-
-      $show "$install_prog $file $oldlib"
-      $run eval "$install_prog \$file \$oldlib" || exit $?
-
-      if test -n "$stripme" && test -n "$old_striplib"; then
-	$show "$old_striplib $oldlib"
-	$run eval "$old_striplib $oldlib" || exit $?
-      fi
-
-      # Do each command in the postinstall commands.
-      cmds=$old_postinstall_cmds
-      save_ifs="$IFS"; IFS='~'
-      for cmd in $cmds; do
-	IFS="$save_ifs"
-	eval cmd=\"$cmd\"
-	$show "$cmd"
-	$run eval "$cmd" || exit $?
-      done
-      IFS="$save_ifs"
-    done
-
-    if test -n "$future_libdirs"; then
-      $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
-    fi
-
-    if test -n "$current_libdirs"; then
-      # Maybe just do a dry run.
-      test -n "$run" && current_libdirs=" -n$current_libdirs"
-      exec_cmd='$SHELL $0 $preserve_args --finish$current_libdirs'
-    else
-      exit 0
-    fi
-    ;;
-
-  # libtool finish mode
-  finish)
-    modename="$modename: finish"
-    libdirs="$nonopt"
-    admincmds=
-
-    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-      for dir
-      do
-	libdirs="$libdirs $dir"
-      done
-
-      for libdir in $libdirs; do
-	if test -n "$finish_cmds"; then
-	  # Do each command in the finish commands.
-	  cmds=$finish_cmds
-	  save_ifs="$IFS"; IFS='~'
-	  for cmd in $cmds; do
-	    IFS="$save_ifs"
-	    eval cmd=\"$cmd\"
-	    $show "$cmd"
-	    $run eval "$cmd" || admincmds="$admincmds
-       $cmd"
-	  done
-	  IFS="$save_ifs"
-	fi
-	if test -n "$finish_eval"; then
-	  # Do the single finish_eval.
-	  eval cmds=\"$finish_eval\"
-	  $run eval "$cmds" || admincmds="$admincmds
-       $cmds"
-	fi
-      done
-    fi
-
-    # Exit here if they wanted silent mode.
-    test "$show" = : && exit 0
-
-    $echo "----------------------------------------------------------------------"
-    $echo "Libraries have been installed in:"
-    for libdir in $libdirs; do
-      $echo "   $libdir"
-    done
-    $echo
-    $echo "If you ever happen to want to link against installed libraries"
-    $echo "in a given directory, LIBDIR, you must either use libtool, and"
-    $echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
-    $echo "flag during linking and do at least one of the following:"
-    if test -n "$shlibpath_var"; then
-      $echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
-      $echo "     during execution"
-    fi
-    if test -n "$runpath_var"; then
-      $echo "   - add LIBDIR to the \`$runpath_var' environment variable"
-      $echo "     during linking"
-    fi
-    if test -n "$hardcode_libdir_flag_spec"; then
-      libdir=LIBDIR
-      eval flag=\"$hardcode_libdir_flag_spec\"
-
-      $echo "   - use the \`$flag' linker flag"
-    fi
-    if test -n "$admincmds"; then
-      $echo "   - have your system administrator run these commands:$admincmds"
-    fi
-    if test -f /etc/ld.so.conf; then
-      $echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
-    fi
-    $echo
-    $echo "See any operating system documentation about shared libraries for"
-    $echo "more information, such as the ld(1) and ld.so(8) manual pages."
-    $echo "----------------------------------------------------------------------"
-    exit 0
-    ;;
-
-  # libtool execute mode
-  execute)
-    modename="$modename: execute"
-
-    # The first argument is the command name.
-    cmd="$nonopt"
-    if test -z "$cmd"; then
-      $echo "$modename: you must specify a COMMAND" 1>&2
-      $echo "$help"
-      exit 1
-    fi
-
-    # Handle -dlopen flags immediately.
-    for file in $execute_dlfiles; do
-      if test ! -f "$file"; then
-	$echo "$modename: \`$file' is not a file" 1>&2
-	$echo "$help" 1>&2
-	exit 1
-      fi
-
-      dir=
-      case $file in
-      *.la)
-	# Check to see that this really is a libtool archive.
-	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
-	else
-	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-	  $echo "$help" 1>&2
-	  exit 1
-	fi
-
-	# Read the libtool library.
-	dlname=
-	library_names=
-
-	# If there is no directory component, then add one.
-	case $file in
-	*/* | *\\*) . $file ;;
-	*) . ./$file ;;
-	esac
-
-	# Skip this library if it cannot be dlopened.
-	if test -z "$dlname"; then
-	  # Warn if it was a shared library.
-	  test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
-	  continue
-	fi
-
-	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-	test "X$dir" = "X$file" && dir=.
-
-	if test -f "$dir/$objdir/$dlname"; then
-	  dir="$dir/$objdir"
-	else
-	  $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
-	  exit 1
-	fi
-	;;
-
-      *.lo)
-	# Just add the directory containing the .lo file.
-	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-	test "X$dir" = "X$file" && dir=.
-	;;
-
-      *)
-	$echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
-	continue
-	;;
-      esac
-
-      # Get the absolute pathname.
-      absdir=`cd "$dir" && pwd`
-      test -n "$absdir" && dir="$absdir"
-
-      # Now add the directory to shlibpath_var.
-      if eval "test -z \"\$$shlibpath_var\""; then
-	eval "$shlibpath_var=\"\$dir\""
-      else
-	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
-      fi
-    done
-
-    # This variable tells wrapper scripts just to set shlibpath_var
-    # rather than running their programs.
-    libtool_execute_magic="$magic"
-
-    # Check if any of the arguments is a wrapper script.
-    args=
-    for file
-    do
-      case $file in
-      -*) ;;
-      *)
-	# Do a test to see if this is really a libtool program.
-	if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-	  # If there is no directory component, then add one.
-	  case $file in
-	  */* | *\\*) . $file ;;
-	  *) . ./$file ;;
-	  esac
-
-	  # Transform arg to wrapped name.
-	  file="$progdir/$program"
-	fi
-	;;
-      esac
-      # Quote arguments (to preserve shell metacharacters).
-      file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
-      args="$args \"$file\""
-    done
-
-    if test -z "$run"; then
-      if test -n "$shlibpath_var"; then
-	# Export the shlibpath_var.
-	eval "export $shlibpath_var"
-      fi
-
-      # Restore saved environment variables
-      if test "${save_LC_ALL+set}" = set; then
-	LC_ALL="$save_LC_ALL"; export LC_ALL
-      fi
-      if test "${save_LANG+set}" = set; then
-	LANG="$save_LANG"; export LANG
-      fi
-
-      # Now prepare to actually exec the command.
-      exec_cmd="\$cmd$args"
-    else
-      # Display what would be done.
-      if test -n "$shlibpath_var"; then
-	eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
-	$echo "export $shlibpath_var"
-      fi
-      $echo "$cmd$args"
-      exit 0
-    fi
-    ;;
-
-  # libtool clean and uninstall mode
-  clean | uninstall)
-    modename="$modename: $mode"
-    rm="$nonopt"
-    files=
-    rmforce=
-    exit_status=0
-
-    # This variable tells wrapper scripts just to set variables rather
-    # than running their programs.
-    libtool_install_magic="$magic"
-
-    for arg
-    do
-      case $arg in
-      -f) rm="$rm $arg"; rmforce=yes ;;
-      -*) rm="$rm $arg" ;;
-      *) files="$files $arg" ;;
-      esac
-    done
-
-    if test -z "$rm"; then
-      $echo "$modename: you must specify an RM program" 1>&2
-      $echo "$help" 1>&2
-      exit 1
-    fi
-
-    rmdirs=
-
-    origobjdir="$objdir"
-    for file in $files; do
-      dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-      if test "X$dir" = "X$file"; then
-	dir=.
-	objdir="$origobjdir"
-      else
-	objdir="$dir/$origobjdir"
-      fi
-      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-      test "$mode" = uninstall && objdir="$dir"
-
-      # Remember objdir for removal later, being careful to avoid duplicates
-      if test "$mode" = clean; then
-	case " $rmdirs " in
-	  *" $objdir "*) ;;
-	  *) rmdirs="$rmdirs $objdir" ;;
-	esac
-      fi
-
-      # Don't error if the file doesn't exist and rm -f was used.
-      if (test -L "$file") >/dev/null 2>&1 \
-	|| (test -h "$file") >/dev/null 2>&1 \
-	|| test -f "$file"; then
-	:
-      elif test -d "$file"; then
-	exit_status=1
-	continue
-      elif test "$rmforce" = yes; then
-	continue
-      fi
-
-      rmfiles="$file"
-
-      case $name in
-      *.la)
-	# Possibly a libtool archive, so verify it.
-	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-	  . $dir/$name
-
-	  # Delete the libtool libraries and symlinks.
-	  for n in $library_names; do
-	    rmfiles="$rmfiles $objdir/$n"
-	  done
-	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
-	  test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
-
-	  if test "$mode" = uninstall; then
-	    if test -n "$library_names"; then
-	      # Do each command in the postuninstall commands.
-	      cmds=$postuninstall_cmds
-	      save_ifs="$IFS"; IFS='~'
-	      for cmd in $cmds; do
-		IFS="$save_ifs"
-		eval cmd=\"$cmd\"
-		$show "$cmd"
-		$run eval "$cmd"
-		if test "$?" -ne 0 && test "$rmforce" != yes; then
-		  exit_status=1
-		fi
-	      done
-	      IFS="$save_ifs"
-	    fi
-
-	    if test -n "$old_library"; then
-	      # Do each command in the old_postuninstall commands.
-	      cmds=$old_postuninstall_cmds
-	      save_ifs="$IFS"; IFS='~'
-	      for cmd in $cmds; do
-		IFS="$save_ifs"
-		eval cmd=\"$cmd\"
-		$show "$cmd"
-		$run eval "$cmd"
-		if test "$?" -ne 0 && test "$rmforce" != yes; then
-		  exit_status=1
-		fi
-	      done
-	      IFS="$save_ifs"
-	    fi
-	    # FIXME: should reinstall the best remaining shared library.
-	  fi
-	fi
-	;;
-
-      *.lo)
-	# Possibly a libtool object, so verify it.
-	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-
-	  # Read the .lo file
-	  . $dir/$name
-
-	  # Add PIC object to the list of files to remove.
-	  if test -n "$pic_object" \
-	     && test "$pic_object" != none; then
-	    rmfiles="$rmfiles $dir/$pic_object"
-	  fi
-
-	  # Add non-PIC object to the list of files to remove.
-	  if test -n "$non_pic_object" \
-	     && test "$non_pic_object" != none; then
-	    rmfiles="$rmfiles $dir/$non_pic_object"
-	  fi
-	fi
-	;;
-
-      *)
-	if test "$mode" = clean ; then
-	  noexename=$name
-	  case $file in
-	  *.exe) 
-	    file=`$echo $file|${SED} 's,.exe$,,'`
-	    noexename=`$echo $name|${SED} 's,.exe$,,'`
-	    # $file with .exe has already been added to rmfiles,
-	    # add $file without .exe
-	    rmfiles="$rmfiles $file"
-	    ;;
-	  esac
-	  # Do a test to see if this is a libtool program.
-	  if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-	    relink_command=
-	    . $dir/$noexename
-
-	    # note $name still contains .exe if it was in $file originally
-	    # as does the version of $file that was added into $rmfiles
-	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
-	    if test "$fast_install" = yes && test -n "$relink_command"; then
-	      rmfiles="$rmfiles $objdir/lt-$name"
-	    fi
-	    if test "X$noexename" != "X$name" ; then
-	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
-	    fi
-	  fi
-	fi
-	;;
-      esac
-      $show "$rm $rmfiles"
-      $run $rm $rmfiles || exit_status=1
-    done
-    objdir="$origobjdir"
-
-    # Try to remove the ${objdir}s in the directories where we deleted files
-    for dir in $rmdirs; do
-      if test -d "$dir"; then
-	$show "rmdir $dir"
-	$run rmdir $dir >/dev/null 2>&1
-      fi
-    done
-
-    exit $exit_status
-    ;;
-
-  "")
-    $echo "$modename: you must specify a MODE" 1>&2
-    $echo "$generic_help" 1>&2
-    exit 1
-    ;;
-  esac
-
-  if test -z "$exec_cmd"; then
-    $echo "$modename: invalid operation mode \`$mode'" 1>&2
-    $echo "$generic_help" 1>&2
-    exit 1
-  fi
-fi # test -z "$show_help"
-
-if test -n "$exec_cmd"; then
-  eval exec $exec_cmd
-  exit 1
-fi
-
-# We need to display help for each of the modes.
-case $mode in
-"") $echo \
-"Usage: $modename [OPTION]... [MODE-ARG]...
-
-Provide generalized library-building support services.
-
-    --config          show all configuration variables
-    --debug           enable verbose shell tracing
--n, --dry-run         display commands without modifying any files
-    --features        display basic configuration information and exit
-    --finish          same as \`--mode=finish'
-    --help            display this help message and exit
-    --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
-    --quiet           same as \`--silent'
-    --silent          don't print informational messages
-    --tag=TAG         use configuration variables from tag TAG
-    --version         print version information
-
-MODE must be one of the following:
-
-      clean           remove files from the build directory
-      compile         compile a source file into a libtool object
-      execute         automatically set library path, then run a program
-      finish          complete the installation of libtool libraries
-      install         install libraries or executables
-      link            create a library or an executable
-      uninstall       remove libraries from an installed directory
-
-MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for
-a more detailed description of MODE.
-
-Report bugs to <[email protected]>."
-  exit 0
-  ;;
-
-clean)
-  $echo \
-"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
-
-Remove files from the build directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, object or program, all the files associated
-with it are deleted. Otherwise, only FILE itself is deleted using RM."
-  ;;
-
-compile)
-  $echo \
-"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
-
-Compile a source file into a libtool library object.
-
-This mode accepts the following additional options:
-
-  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
-  -prefer-pic       try to building PIC objects only
-  -prefer-non-pic   try to building non-PIC objects only
-  -static           always build a \`.o' file suitable for static linking
-
-COMPILE-COMMAND is a command to be used in creating a \`standard' object file
-from the given SOURCEFILE.
-
-The output file name is determined by removing the directory component from
-SOURCEFILE, then substituting the C source code suffix \`.c' with the
-library object suffix, \`.lo'."
-  ;;
-
-execute)
-  $echo \
-"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
-
-Automatically set library path, then run a program.
-
-This mode accepts the following additional options:
-
-  -dlopen FILE      add the directory containing FILE to the library path
-
-This mode sets the library path environment variable according to \`-dlopen'
-flags.
-
-If any of the ARGS are libtool executable wrappers, then they are translated
-into their corresponding uninstalled binary, and any of their required library
-directories are added to the library path.
-
-Then, COMMAND is executed, with ARGS as arguments."
-  ;;
-
-finish)
-  $echo \
-"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
-
-Complete the installation of libtool libraries.
-
-Each LIBDIR is a directory that contains libtool libraries.
-
-The commands that this mode executes may require superuser privileges.  Use
-the \`--dry-run' option if you just want to see what would be executed."
-  ;;
-
-install)
-  $echo \
-"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
-
-Install executables or libraries.
-
-INSTALL-COMMAND is the installation command.  The first component should be
-either the \`install' or \`cp' program.
-
-The rest of the components are interpreted as arguments to that command (only
-BSD-compatible install options are recognized)."
-  ;;
-
-link)
-  $echo \
-"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
-
-Link object files or libraries together to form another library, or to
-create an executable program.
-
-LINK-COMMAND is a command using the C compiler that you would use to create
-a program from several object files.
-
-The following components of LINK-COMMAND are treated specially:
-
-  -all-static       do not do any dynamic linking at all
-  -avoid-version    do not add a version suffix if possible
-  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
-  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
-  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
-  -export-symbols SYMFILE
-		    try to export only the symbols listed in SYMFILE
-  -export-symbols-regex REGEX
-		    try to export only the symbols matching REGEX
-  -LLIBDIR          search LIBDIR for required installed libraries
-  -lNAME            OUTPUT-FILE requires the installed library libNAME
-  -module           build a library that can dlopened
-  -no-fast-install  disable the fast-install mode
-  -no-install       link a not-installable executable
-  -no-undefined     declare that a library does not refer to external symbols
-  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
-  -objectlist FILE  Use a list of object files found in FILE to specify objects
-  -precious-files-regex REGEX
-                    don't remove output files matching REGEX
-  -release RELEASE  specify package release information
-  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
-  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
-  -static           do not do any dynamic linking of libtool libraries
-  -version-info CURRENT[:REVISION[:AGE]]
-		    specify library version info [each variable defaults to 0]
-
-All other options (arguments beginning with \`-') are ignored.
-
-Every other argument is treated as a filename.  Files ending in \`.la' are
-treated as uninstalled libtool libraries, other files are standard or library
-object files.
-
-If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
-only library objects (\`.lo' files) may be specified, and \`-rpath' is
-required, except when creating a convenience library.
-
-If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
-using \`ar' and \`ranlib', or on Windows using \`lib'.
-
-If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
-is created, otherwise an executable program is created."
-  ;;
-
-uninstall)
-  $echo \
-"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
-
-Remove libraries from an installation directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, all the files associated with it are deleted.
-Otherwise, only FILE itself is deleted using RM."
-  ;;
-
-*)
-  $echo "$modename: invalid operation mode \`$mode'" 1>&2
-  $echo "$help" 1>&2
-  exit 1
-  ;;
-esac
-
-$echo
-$echo "Try \`$modename --help' for more information about other modes."
-
-exit 0
-
-# The TAGs below are defined such that we never get into a situation
-# in which we disable both kinds of libraries.  Given conflicting
-# choices, we go for a static library, that is the most portable,
-# since we can't tell whether shared libraries were disabled because
-# the user asked for that or because the platform doesn't support
-# them.  This is particularly important on AIX, because we don't
-# support having both static and shared libraries enabled at the same
-# time on that platform, so we default to a shared-only configuration.
-# If a disable-shared tag is given, we'll fallback to a static-only
-# configuration.  But we'll never go from static-only to shared-only.
-
-# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
-build_libtool_libs=no
-build_old_libs=yes
-# ### END LIBTOOL TAG CONFIG: disable-shared
-
-# ### BEGIN LIBTOOL TAG CONFIG: disable-static
-build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac`
-# ### END LIBTOOL TAG CONFIG: disable-static
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:

+ 0 - 360
missing

@@ -1,360 +0,0 @@
-#! /bin/sh
-# Common stub for a few missing GNU programs while installing.
-
-scriptversion=2005-06-08.21
-
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
-#   Free Software Foundation, Inc.
-# Originally by Fran,cois Pinard <[email protected]>, 1996.
-
-# 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 2, 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, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-if test $# -eq 0; then
-  echo 1>&2 "Try \`$0 --help' for more information"
-  exit 1
-fi
-
-run=:
-
-# In the cases where this matters, `missing' is being run in the
-# srcdir already.
-if test -f configure.ac; then
-  configure_ac=configure.ac
-else
-  configure_ac=configure.in
-fi
-
-msg="missing on your system"
-
-case "$1" in
---run)
-  # Try to run requested program, and just exit if it succeeds.
-  run=
-  shift
-  "$@" && exit 0
-  # Exit code 63 means version mismatch.  This often happens
-  # when the user try to use an ancient version of a tool on
-  # a file that requires a minimum version.  In this case we
-  # we should proceed has if the program had been absent, or
-  # if --run hadn't been passed.
-  if test $? = 63; then
-    run=:
-    msg="probably too old"
-  fi
-  ;;
-
-  -h|--h|--he|--hel|--help)
-    echo "\
-$0 [OPTION]... PROGRAM [ARGUMENT]...
-
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
-
-Options:
-  -h, --help      display this help and exit
-  -v, --version   output version information and exit
-  --run           try to run the given command, and emulate it if it fails
-
-Supported PROGRAM values:
-  aclocal      touch file \`aclocal.m4'
-  autoconf     touch file \`configure'
-  autoheader   touch file \`config.h.in'
-  automake     touch all \`Makefile.in' files
-  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
-  flex         create \`lex.yy.c', if possible, from existing .c
-  help2man     touch the output file
-  lex          create \`lex.yy.c', if possible, from existing .c
-  makeinfo     touch the output file
-  tar          try tar, gnutar, gtar, then tar without non-portable flags
-  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
-
-Send bug reports to <[email protected]>."
-    exit $?
-    ;;
-
-  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
-    echo "missing $scriptversion (GNU Automake)"
-    exit $?
-    ;;
-
-  -*)
-    echo 1>&2 "$0: Unknown \`$1' option"
-    echo 1>&2 "Try \`$0 --help' for more information"
-    exit 1
-    ;;
-
-esac
-
-# Now exit if we have it, but it failed.  Also exit now if we
-# don't have it and --version was passed (most likely to detect
-# the program).
-case "$1" in
-  lex|yacc)
-    # Not GNU programs, they don't have --version.
-    ;;
-
-  tar)
-    if test -n "$run"; then
-       echo 1>&2 "ERROR: \`tar' requires --run"
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       exit 1
-    fi
-    ;;
-
-  *)
-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-       # We have it, but it failed.
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       # Could not run --version or --help.  This is probably someone
-       # running `$TOOL --version' or `$TOOL --help' to check whether
-       # $TOOL exists and not knowing $TOOL uses missing.
-       exit 1
-    fi
-    ;;
-esac
-
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case "$1" in
-  aclocal*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
-         to install the \`Automake' and \`Perl' packages.  Grab them from
-         any GNU archive site."
-    touch aclocal.m4
-    ;;
-
-  autoconf)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`${configure_ac}'.  You might want to install the
-         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
-         archive site."
-    touch configure
-    ;;
-
-  autoheader)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
-         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
-         from any GNU archive site."
-    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
-    test -z "$files" && files="config.h"
-    touch_files=
-    for f in $files; do
-      case "$f" in
-      *:*) touch_files="$touch_files "`echo "$f" |
-				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
-      *) touch_files="$touch_files $f.in";;
-      esac
-    done
-    touch $touch_files
-    ;;
-
-  automake*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
-         You might want to install the \`Automake' and \`Perl' packages.
-         Grab them from any GNU archive site."
-    find . -type f -name Makefile.am -print |
-	   sed 's/\.am$/.in/' |
-	   while read f; do touch "$f"; done
-    ;;
-
-  autom4te)
-    echo 1>&2 "\
-WARNING: \`$1' is needed, but is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.
-         You can get \`$1' as part of \`Autoconf' from any GNU
-         archive site."
-
-    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
-    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
-    if test -f "$file"; then
-	touch $file
-    else
-	test -z "$file" || exec >$file
-	echo "#! /bin/sh"
-	echo "# Created by GNU Automake missing as a replacement of"
-	echo "#  $ $@"
-	echo "exit 0"
-	chmod +x $file
-	exit 1
-    fi
-    ;;
-
-  bison|yacc)
-    echo 1>&2 "\
-WARNING: \`$1' $msg.  You should only need it if
-         you modified a \`.y' file.  You may need the \`Bison' package
-         in order for those modifications to take effect.  You can get
-         \`Bison' from any GNU archive site."
-    rm -f y.tab.c y.tab.h
-    if [ $# -ne 1 ]; then
-        eval LASTARG="\${$#}"
-	case "$LASTARG" in
-	*.y)
-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-	    if [ -f "$SRCFILE" ]; then
-	         cp "$SRCFILE" y.tab.c
-	    fi
-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-	    if [ -f "$SRCFILE" ]; then
-	         cp "$SRCFILE" y.tab.h
-	    fi
-	  ;;
-	esac
-    fi
-    if [ ! -f y.tab.h ]; then
-	echo >y.tab.h
-    fi
-    if [ ! -f y.tab.c ]; then
-	echo 'main() { return 0; }' >y.tab.c
-    fi
-    ;;
-
-  lex|flex)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.l' file.  You may need the \`Flex' package
-         in order for those modifications to take effect.  You can get
-         \`Flex' from any GNU archive site."
-    rm -f lex.yy.c
-    if [ $# -ne 1 ]; then
-        eval LASTARG="\${$#}"
-	case "$LASTARG" in
-	*.l)
-	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-	    if [ -f "$SRCFILE" ]; then
-	         cp "$SRCFILE" lex.yy.c
-	    fi
-	  ;;
-	esac
-    fi
-    if [ ! -f lex.yy.c ]; then
-	echo 'main() { return 0; }' >lex.yy.c
-    fi
-    ;;
-
-  help2man)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-	 you modified a dependency of a manual page.  You may need the
-	 \`Help2man' package in order for those modifications to take
-	 effect.  You can get \`Help2man' from any GNU archive site."
-
-    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
-    if test -z "$file"; then
-	file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
-    fi
-    if [ -f "$file" ]; then
-	touch $file
-    else
-	test -z "$file" || exec >$file
-	echo ".ab help2man is required to generate this page"
-	exit 1
-    fi
-    ;;
-
-  makeinfo)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.texi' or \`.texinfo' file, or any other file
-         indirectly affecting the aspect of the manual.  The spurious
-         call might also be the consequence of using a buggy \`make' (AIX,
-         DU, IRIX).  You might want to install the \`Texinfo' package or
-         the \`GNU make' package.  Grab either from any GNU archive site."
-    # The file to touch is that specified with -o ...
-    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
-    if test -z "$file"; then
-      # ... or it is the one specified with @setfilename ...
-      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
-      # ... or it is derived from the source name (dir/f.texi becomes f.info)
-      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
-    fi
-    # If the file does not exist, the user really needs makeinfo;
-    # let's fail without touching anything.
-    test -f $file || exit 1
-    touch $file
-    ;;
-
-  tar)
-    shift
-
-    # We have already tried tar in the generic part.
-    # Look for gnutar/gtar before invocation to avoid ugly error
-    # messages.
-    if (gnutar --version > /dev/null 2>&1); then
-       gnutar "$@" && exit 0
-    fi
-    if (gtar --version > /dev/null 2>&1); then
-       gtar "$@" && exit 0
-    fi
-    firstarg="$1"
-    if shift; then
-	case "$firstarg" in
-	*o*)
-	    firstarg=`echo "$firstarg" | sed s/o//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-	case "$firstarg" in
-	*h*)
-	    firstarg=`echo "$firstarg" | sed s/h//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-    fi
-
-    echo 1>&2 "\
-WARNING: I can't seem to be able to run \`tar' with the given arguments.
-         You may want to install GNU tar or Free paxutils, or check the
-         command line arguments."
-    exit 1
-    ;;
-
-  *)
-    echo 1>&2 "\
-WARNING: \`$1' is needed, and is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.  Check the \`README' file,
-         it often tells you about the needed prerequisites for installing
-         this package.  You may also peek at any GNU archive site, in case
-         some other package would contain this missing \`$1' program."
-    exit 1
-    ;;
-esac
-
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:

+ 0 - 40
mkinstalldirs

@@ -1,40 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-# Author: Noah Friedman <[email protected]>
-# Created: 1993-05-16
-# Public domain
-
-# $Id: mkinstalldirs,v 1.13 1999/01/05 03:18:55 bje Exp $
-
-errstatus=0
-
-for file
-do
-   set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
-   shift
-
-   pathcomp=
-   for d
-   do
-     pathcomp="$pathcomp$d"
-     case "$pathcomp" in
-       -* ) pathcomp=./$pathcomp ;;
-     esac
-
-     if test ! -d "$pathcomp"; then
-        echo "mkdir $pathcomp"
-
-        mkdir "$pathcomp" || lasterr=$?
-
-        if test ! -d "$pathcomp"; then
-  	  errstatus=$lasterr
-        fi
-     fi
-
-     pathcomp="$pathcomp/"
-   done
-done
-
-exit $errstatus
-
-# mkinstalldirs ends here