diff options
author | cvs2svn <admin@example.com> | 1996-10-14 00:58:56 +0000 |
---|---|---|
committer | cvs2svn <admin@example.com> | 1996-10-14 00:58:56 +0000 |
commit | 78d469e4221478f0c79f67fef1d5aa98f2c96f47 (patch) | |
tree | fcf35814ba17653b9b8d16e99af99ea5b39bba5e | |
parent | 0682f7ab1dfa23adbf85435d5884b0ec91956a53 (diff) | |
parent | 0f2d19dd46f83f41177f61d585732b32a866d613 (diff) | |
download | guile-pre_vollmer_scm_p.tar.gz |
This commit was manufactured by cvs2svn to create tagpre_vollmer_scm_p
'pre_vollmer_scm_p'.
-rw-r--r-- | .cvsignore | 6 | ||||
-rw-r--r-- | AUTHORS | 26 | ||||
-rw-r--r-- | COPYING | 339 | ||||
-rw-r--r-- | ChangeLog | 132 | ||||
-rw-r--r-- | GUILE-VERSION | 4 | ||||
-rw-r--r-- | HACKING | 67 | ||||
-rw-r--r-- | INSTALL | 137 | ||||
-rw-r--r-- | Makefile.in | 304 | ||||
-rw-r--r-- | NEWS | 83 | ||||
-rw-r--r-- | README | 94 | ||||
-rw-r--r-- | TODO | 42 | ||||
-rw-r--r-- | aclocal.m4 | 102 | ||||
-rwxr-xr-x | config.guess | 497 | ||||
-rwxr-xr-x | config.sub | 833 | ||||
-rwxr-xr-x | configure | 1116 | ||||
-rw-r--r-- | configure.in | 92 | ||||
-rw-r--r-- | ice-9/.cvsignore | 3 | ||||
-rw-r--r-- | ice-9/COPYING | 339 | ||||
-rw-r--r-- | ice-9/ChangeLog | 240 | ||||
-rw-r--r-- | ice-9/Makefile.in | 99 | ||||
-rw-r--r-- | ice-9/boot-9.scm | 3602 | ||||
-rwxr-xr-x | ice-9/configure | 716 | ||||
-rw-r--r-- | ice-9/configure.in | 13 | ||||
-rw-r--r-- | ice-9/debug.scm | 114 | ||||
-rw-r--r-- | ice-9/hcons.scm | 76 | ||||
-rw-r--r-- | ice-9/lineio.scm | 112 | ||||
-rw-r--r-- | ice-9/mapping.scm | 121 | ||||
-rw-r--r-- | ice-9/poe.scm | 117 | ||||
-rw-r--r-- | ice-9/slib.scm | 144 | ||||
-rw-r--r-- | ice-9/tags.scm | 23 | ||||
-rw-r--r-- | ice-9/threads.scm | 53 | ||||
-rwxr-xr-x | install-sh | 238 | ||||
-rwxr-xr-x | mkinstalldirs | 36 | ||||
-rw-r--r-- | qt/.cvsignore | 4 | ||||
-rw-r--r-- | qt/CHANGES | 15 | ||||
-rw-r--r-- | qt/ChangeLog | 28 | ||||
-rw-r--r-- | qt/INSTALL | 81 | ||||
-rw-r--r-- | qt/Makefile.base | 112 | ||||
-rw-r--r-- | qt/Makefile.in | 129 | ||||
-rw-r--r-- | qt/README | 89 | ||||
-rw-r--r-- | qt/README.MISC | 56 | ||||
-rw-r--r-- | qt/README.PORT | 112 | ||||
-rw-r--r-- | qt/b.h | 11 | ||||
-rwxr-xr-x | qt/config | 308 | ||||
-rwxr-xr-x | qt/configure | 1254 | ||||
-rw-r--r-- | qt/configure.in | 65 | ||||
-rw-r--r-- | qt/copyright.h | 12 | ||||
-rw-r--r-- | qt/md/_sparc.s | 142 | ||||
-rw-r--r-- | qt/md/_sparc_b.s | 106 | ||||
-rw-r--r-- | qt/md/axp.1.Makefile | 5 | ||||
-rw-r--r-- | qt/md/axp.2.Makefile | 5 | ||||
-rw-r--r-- | qt/md/axp.Makefile | 5 | ||||
-rw-r--r-- | qt/md/axp.README | 10 | ||||
-rw-r--r-- | qt/md/axp.c | 133 | ||||
-rw-r--r-- | qt/md/axp.h | 160 | ||||
-rw-r--r-- | qt/md/axp.s | 160 | ||||
-rw-r--r-- | qt/md/axp_b.s | 111 | ||||
-rw-r--r-- | qt/md/default.Makefile | 6 | ||||
-rw-r--r-- | qt/md/hppa-cnx.Makefile | 9 | ||||
-rw-r--r-- | qt/md/hppa.Makefile | 9 | ||||
-rw-r--r-- | qt/md/hppa.h | 194 | ||||
-rw-r--r-- | qt/md/hppa.s | 237 | ||||
-rw-r--r-- | qt/md/hppa_b.s | 203 | ||||
-rw-r--r-- | qt/md/i386.README | 7 | ||||
-rw-r--r-- | qt/md/i386.h | 120 | ||||
-rw-r--r-- | qt/md/i386.s | 108 | ||||
-rw-r--r-- | qt/md/i386_b.s | 30 | ||||
-rw-r--r-- | qt/md/ksr1.Makefile | 6 | ||||
-rw-r--r-- | qt/md/ksr1.h | 164 | ||||
-rw-r--r-- | qt/md/ksr1.s | 424 | ||||
-rw-r--r-- | qt/md/ksr1_b.s | 49 | ||||
-rw-r--r-- | qt/md/m88k.Makefile | 6 | ||||
-rw-r--r-- | qt/md/m88k.c | 111 | ||||
-rw-r--r-- | qt/md/m88k.h | 159 | ||||
-rw-r--r-- | qt/md/m88k.s | 132 | ||||
-rw-r--r-- | qt/md/m88k_b.s | 117 | ||||
-rw-r--r-- | qt/md/mips-irix5.s | 182 | ||||
-rw-r--r-- | qt/md/mips.h | 134 | ||||
-rw-r--r-- | qt/md/mips.s | 164 | ||||
-rw-r--r-- | qt/md/mips_b.s | 99 | ||||
-rw-r--r-- | qt/md/null.README | 0 | ||||
-rw-r--r-- | qt/md/null.c | 14 | ||||
-rw-r--r-- | qt/md/solaris.README | 19 | ||||
-rw-r--r-- | qt/md/sparc.h | 140 | ||||
-rw-r--r-- | qt/md/sparc.s | 142 | ||||
-rw-r--r-- | qt/md/sparc_b.s | 106 | ||||
-rw-r--r-- | qt/md/vax.h | 130 | ||||
-rw-r--r-- | qt/md/vax.s | 69 | ||||
-rw-r--r-- | qt/md/vax_b.s | 92 | ||||
-rw-r--r-- | qt/meas.c | 1049 | ||||
-rw-r--r-- | qt/qt.c | 48 | ||||
-rw-r--r-- | qt/qt.h.in | 176 | ||||
-rw-r--r-- | qt/stp.c | 199 | ||||
-rw-r--r-- | qt/stp.h | 51 | ||||
-rw-r--r-- | qt/time/README.time | 17 | ||||
-rwxr-xr-x | qt/time/assim | 42 | ||||
-rwxr-xr-x | qt/time/cswap | 37 | ||||
-rwxr-xr-x | qt/time/go | 43 | ||||
-rwxr-xr-x | qt/time/init | 42 | ||||
-rwxr-xr-x | qt/time/prim | 41 | ||||
-rwxr-xr-x | qt/time/raw | 58 |
101 files changed, 0 insertions, 18218 deletions
diff --git a/.cvsignore b/.cvsignore deleted file mode 100644 index 76fb6f31a..000000000 --- a/.cvsignore +++ /dev/null @@ -1,6 +0,0 @@ -Makefile -config.cache -config.log -config.status -guile-*.tar.gz -config.build-subdirs diff --git a/AUTHORS b/AUTHORS deleted file mode 100644 index 17903b0a2..000000000 --- a/AUTHORS +++ /dev/null @@ -1,26 +0,0 @@ -To find out what should go in this file, see "Information For -Maintainers of GNU Software" (maintain.texi), the section called -"Recording Changes". - - -George Carrette: -wrote files present in Siod version 2.3, released in December of 1989. - -Aubrey Jaffer: -Wrote substantial portions of guile.texi, and surely others. -Changes to: eval.c, ioext.c, posix.c, gscm.c, scm.h, socket.c, -gsubr.c, sys.c, test.scm, stime.c, and unif.c. - -Gary Houston: changes to many files in libguile. -wrote: socket.c - -Tom Lord: Wrote the original versions of all files in the -subdirectories ctax, gtcltk-lib, guile, ice-9, lang, and rx. In doc, -wrote ctax.texi, gtcltk.texi, in.texi, lang.texi, and major portions -of guile.texi. - -Anthony Green: wrote the original code in the 'threads' directory. - -Mikael Djurfeldt: wrote debug.c, debug.h, options.c, options.h, -srcprop.c, srcprop.h. Rewrote the code in 'threads'. Many changes -throughout. diff --git a/COPYING b/COPYING deleted file mode 100644 index 9648fb9ea..000000000 --- a/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991, 1992, 1993 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. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. 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. - - 1. 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. - - 2. 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. - - 3. 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. - - 4. 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. - - 5. 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. - - 6. 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. - - 7. 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. - - 8. 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. - - 9. 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. - - 10. 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 - - 11. 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. - - 12. 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 - - Appendix: 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 a brief 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. diff --git a/ChangeLog b/ChangeLog deleted file mode 100644 index b45dd03a5..000000000 --- a/ChangeLog +++ /dev/null @@ -1,132 +0,0 @@ -Thu Oct 10 14:37:43 1996 Jim Blandy <jimb@floss.cyclic.com> - - * Makefile.in (TAGS tags): Find the source files in $srcdir. - -Wed Oct 9 19:37:14 1996 Jim Blandy <jimb@floss.cyclic.com> - - * Makefile.in (DISTFILES): Add AUTHORS and aclocal.m4. - -Tue Oct 1 00:13:55 1996 Mikael Djurfeldt <mdj@woody.nada.kth.se> - - * configure.in: Added some configuration magic from the Cygnus - distribution. - - * aclocal.m4: New file. For now used for thread support - configuration. - -Fri Sep 13 14:39:30 1996 Mark Galassi <rosalia@sarastro.lanl.gov> - - * Makefile.in (DISTFILES): added mkinstalldirs to the DISTFILES - - * PLUGIN: changed the PLUGIN/REQ files in the ice-9 and lgh - directories, to arrange for lgh to the last thing - configured/built. - -Wed Sep 11 21:11:33 1996 Mark Galassi <rosalia@papageno.lanl.gov> - - * lgh/: added the directory in which I implement the high level - libguile library (lgh_) for this release of Guile. See the - ChangeLog in there for further details. - -Wed Sep 11 16:12:53 1996 Mark Galassi <rosalia@sarastro.lanl.gov> - - * doc/ (guile-user and guile-programmer): added the guile-user and - guile-programmer directories which contain the user and programmer - manuals. See the ChangeLog entries there for detail. - -Wed Sep 11 14:33:49 1996 Jim Blandy <jimb@floss.cyclic.com> - - * Makefile.in (distclean): Don't forget to delete doc/Makefile. - - * Makefile.in (distclean): Don't forget to delete - config.build-subdirs. - -Thu Sep 5 17:36:15 1996 Jim Blandy <jimb@floss.cyclic.com> - - * Makefile.in (tags): New name for `TAGS' target, which will - always run the commands. - -Thu Sep 5 09:56:50 1996 Jim Blandy <jimb@totoro.cyclic.com> - - * README: Doc fixes. - -Fri Aug 30 16:56:27 1996 Jim Blandy <jimb@floss.cyclic.com> - - * Makefile.in (TAGS): Produce a single tags file for all of Guile. - -Thu Aug 15 19:03:03 1996 Jim Blandy <jimb@floss.cyclic.com> - - * configure.in: Check for -ldl, so the check for Tcl won't fail - spuriously. - -Thu Aug 15 01:29:29 1996 Jim Blandy <jimb@totoro.cyclic.com> - - Change the way we decide whether to build gtcltk-lib, so that it's - omitted from the build process when appropriate, but never from - the dist process. - * configure.in: Don't edit all_subdirs depending on the - availability of Tk; let that be the list of all PLUGIN - subdirectories present, as it used to be. Instead, edit a new - variable, build_subdirs; write its final value, the list of - subdirs we do want to compile in, to config.build-subdirs. - Substitute that into the top-level Makefile too. - * Makefile.in (subdirs): Set this to @build_subdirs@, so we only - recurse on the subdirectories we should build. - (distdirs): Set this to @existingdirs@, so it includes the subdirs - we decided not to build. - - * doc/gtcltk.texi: File resurrected from old Guile releases. - * doc/Makefile.in (info): Build the gtcltk documentation. - (DIST_FILES): Include it in the distribution. - - * configure.in: If we can find the library for tcl7.5, build - gtcltk-lib. Call AC_PROG_CC, to help run that test with the right - compiler (not sure this is necessary). - -Mon Aug 12 15:09:37 1996 Jim Blandy <jimb@totoro.cyclic.com> - - * NEWS: Fix bug reporting address. - -Fri Aug 9 15:58:42 1996 Jim Blandy <jimb@totoro.cyclic.com> - - * AUTHORS: New file, in accordance with the GNU maintainers' - standards. - -Tue Aug 6 14:40:44 1996 Jim Blandy <jimb@totoro.cyclic.com> - - * README: Renamed from ANNOUNCE; include bug report address, - description, and short tour. - * INSTALL: Renamed from BUILDING. - * NEWS: New file. - * Makefile.in (DISTFILES): Update appropriately. - -Thu Aug 1 02:31:53 1996 Jim Blandy <jimb@totoro.cyclic.com> - - * doc/Makefile.in: Added pattern targets for creating DVI and - PostScript files. - (%.ps, %.dvi, %.txt): New targets. - (DVIPS, TEXI2DVI): New variables. - - * GUILE-VERSION: Updated to 1.0b3. - - Rehashed distribution system, in preparation for nightly - snapshots. Other changes in subdirectories. - * Makefile.in (dist): Rewritten --- the old target was out of - date, dependent on files that we don't have, and relied on GNU - tar. The new target is simpler. - (VERSION, srcdir, dist_dirs): New variables. - (DISTFILES): Renamed from localfiles. Added GUILE-VERSION and - TODO. - (localtreats): Variable removed. We don't have this file. - (info): cd to doc and make info there; don't make info in every - ${subdir}; those Makefiles don't know what to do. - (distname, distdir, treats, announcefile): Variables removed. - (manifest-file): Target removed. - (dist-dir): New target, responsible for distributable files in - this directory. - (GZIP, GZIP_EXT, TAR_VERBOSE, DIST_NAME): New variables, - controlling the 'dist' target. - * configure.in: Substitute GUILE-VERSION into the top-level - Makefile. Build doc/Makefile from doc/Makefile.in. - - * doc/Makefile.in: New file. diff --git a/GUILE-VERSION b/GUILE-VERSION deleted file mode 100644 index 9d711aa35..000000000 --- a/GUILE-VERSION +++ /dev/null @@ -1,4 +0,0 @@ -GUILE_MAJOR_VERSION=1 -GUILE_MINOR_VERSION=0b3 -GUILE_VERSION=$GUILE_MAJOR_VERSION.$GUILE_MINOR_VERSION - diff --git a/HACKING b/HACKING deleted file mode 100644 index 3ed8070ef..000000000 --- a/HACKING +++ /dev/null @@ -1,67 +0,0 @@ -Here are some guidelines for working on the Guile source tree at GNU. - -- As for any part of Project GNU, changes to Guile should follow the -GNU coding standards. The standards are available via anonymous FTP -from prep.ai.mit.edu, as /pub/gnu/standards/standards.texi and -make-stds.texi. - -- Check Makefile.in and configure files into CVS, as well as any files -used to create them (Makefile.am, configure.in); don't check in -Makefiles or header files generated by configuration scripts. The -general rule is that you should be able to check out a working -directory of Guile from CVS, and then type "configure" and "make". - -- Make sure your changes compile and work, at least on your own -machine, before checking them into the main branch of the Guile -repository. If you really need to check in untested changes, make a -branch. - -- When you make a user-visible change (i.e. one that should be -documented, and appear in NEWS, put an asterisk in column zero of the -start of the ChangeLog entry, like so: - -Sat Aug 3 01:27:14 1996 Gary Houston <ghouston@actrix.gen.nz> - -* * fports.c (scm_open_file): don't return #f, throw error. - -- Include each log entry in both the ChangeLog and in the CVS logs. -If you're using Emacs, the pcl-cvs interface to CVS has features to -make this easier; it checks the ChangeLog, and generates good default -CVS log entries from that. - -- There's no need to keep a change log for documentation files. This -is because documentation is not susceptible to bugs that are hard to -fix. Documentation does not consist of parts that must interact in a -precisely engineered fashion; to correct an error, you need not know -the history of the erroneous passage. (This is copied from the GNU -coding standards.) - -- If you add or remove files, don't forget to update the 'dist-dir' -target in the relevant Makefile.in files, so the snapshot and -distribution processes will work. - -- Make sure you have papers from people before integrating their -changes or contributions. This is very frustrating, but very -important to do right. From maintain.texi, "Information for -Maintainers of GNU Software": - - When incorporating changes from other people, make sure to follow the - correct procedures. Doing this ensures that the FSF has the legal - right to distribute and defend GNU software. - - For the sake of registering the copyright on later versions ofthe - software you need to keep track of each person who makes significant - changes. A change of ten lines or so, or a few such changes, in a - large program is not significant. - - *Before* incorporating significant changes, make sure that the person - has signed copyright papers, and that the Free Software Foundation has - received them. - -If you receive contributions you want to use from someone, let me know -and I'll take care of the administrivia. Put the contributions aside -until we have the necessary papers. - - - -Jim Blandy diff --git a/INSTALL b/INSTALL deleted file mode 100644 index dfe41773a..000000000 --- a/INSTALL +++ /dev/null @@ -1,137 +0,0 @@ -To build Guile on unix, there are two basic steps: - - 1. Configure the package by running the configure script. - 2. Build the package by running make. - -Generic instructions for configuring and compiling GNU distributions -are included below. Here is an illustration of commands that might be -used to build Guile. The voluminous output of the commands is not shown. - - % tar xvf guile-snap.tar.gz # unpack the sources - % cd guile-snap - % ./configure - % make - -The `configure' script examines your system, and adapts Guile to -compile and run on it. - -The `make' command builds several things: -- An executable file `guile/guile', which is an interactive shell for - talking with the Guile Scheme interpreter. -- An object library `guile/libguile.a', containing the Guile Scheme - interpreter, ready to be linked into your programs. -- An object library `gtcltk-lib/libgtcltk.a', containing a simple - interface between Guile and Tcl/Tk. This is only built if the - configure script notices that you have the appropriate version of - Tcl/Tk installed on your system already. If it is installed, `make' - will automatically include Tcl/Tk and the interface in the guile - shell. If the interface were documented, we'd include a pointer to - it here. - -To install Guile, type `make install'. This installs the executable -and libraries mentioned above, as well as Guile's header files and -Scheme libraries. - -If you want to run Guile without installing it, set the environment -variable `SCHEME_LOAD_PATH' to a colon-separated list of directories, -including the directory containing this INSTALL file. For example, if -you unpacked Guile so that the full filename of this file is -`/home/jimb/guile-snap/INSTALL', then you might say - - export SCHEME_LOAD_PATH=/home/jimb/my-scheme:/home/jimb/guile-snap - -if you're using Bash or any other Bourne shell variant, or - - setenv SCHEME_LOAD_PATH /home/jimb/my-scheme:/home/jimb/guile-snap - -if you're using CSH or one of its variants. - - - Generic Instructions for Building Auto-Configured Packages - ========================================================== - - -To compile this package: - -1. Configure the package for your system. In the directory that this -file is in, type `./configure'. 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. - -The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation, and -creates the Makefile(s) (one in each subdirectory of the source -directory). In some packages it creates a C header file containing -system-dependent definitions. It also creates a file `config.status' -that you can run in the future to recreate the current configuration. -Running `configure' takes a minute or two. - -To compile the package in a different directory from the one -containing the source code, you must use GNU make. `cd' to the -directory where you want the object files and executables to go and -run `configure' with the option `--srcdir=DIR', where DIR is the -directory that contains the source code. Using this option is -actually unnecessary if the source code is in the parent directory of -the one in which you are compiling; `configure' automatically checks -for the source code in `..' if it does not find it in the current -directory. - -By default, `make install' will install the package's files in -/usr/local/bin, /usr/local/lib, /usr/local/man, etc. You can specify -an installation prefix other than /usr/local by giving `configure' the -option `--prefix=PATH'. Alternately, you can do so by changing the -`prefix' variable in the Makefile that `configure' creates (the -Makefile in the top-level directory, if the package contains -subdirectories). - -You can specify separate installation prefixes for machine-specific -files and machine-independent files. If you give `configure' the -option `--exec_prefix=PATH', the package will use PATH as the prefix -for installing programs and libraries. Normally, all files are -installed using the same prefix. - -`configure' ignores any other arguments that you give it. - -If your system requires unusual options for compilation or linking -that `configure' doesn't know about, you can give `configure' initial -values for some variables by setting them in the environment. In -Bourne-compatible shells, you can do that on the command line like -this: - CC='gcc -traditional' DEFS=-D_POSIX_SOURCE ./configure - -The `make' variables that you might want to override with environment -variables when running `configure' are: - -(For these variables, any value given in the environment overrides the -value that `configure' would choose:) -CC C compiler program. - Default is `cc', or `gcc' if `gcc' is in your PATH. -INSTALL Program to use to install files. - Default is `install' if you have it, `cp' otherwise. -INCLUDEDIR Directory for `configure' to search for include files. - Default is /usr/include. - -(For these variables, any value given in the environment is added to -the value that `configure' chooses:) -DEFS Configuration options, in the form '-Dfoo -Dbar ...' -LIBS Libraries to link with, in the form '-lfoo -lbar ...' - -If you need to do unusual things to compile the package, we encourage -you to teach `configure' how to do them and mail the diffs to the -address given in the README so we can include them in the next -release. - -2. Type `make' to compile the package. - -3. Type `make install' to install programs, data files, and -documentation. - -4. You can remove the program binaries and object files from the -source directory by typing `make clean'. To also remove the -Makefile(s), the header file containing system-dependent definitions -(if the package uses one), and `config.status' (all the files that -`configure' created), type `make distclean'. - -The file `configure.in' is used as a template to create `configure' by -a program called `autoconf'. You will only need it if you want to -regenerate `configure' using a newer version of `autoconf'. diff --git a/Makefile.in b/Makefile.in deleted file mode 100644 index ff7b79f4a..000000000 --- a/Makefile.in +++ /dev/null @@ -1,304 +0,0 @@ -# Copyright (C) 1994,1995 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 software; see the file COPYING. If not, write to -# the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -VERSION = @GUILE_VERSION@ - -SHELL = /bin/sh - -srcdir=@srcdir@ -subdirs=@build_subdirs@ -dist_dirs=@existingdirs@ doc - -DISTFILES = AUTHORS \ - COPYING \ - ChangeLog \ - GUILE-VERSION \ - INSTALL \ - NEWS \ - README \ - TODO \ - aclocal.m4 \ - Makefile.in \ - configure \ - configure.in \ - config.sub \ - config.guess \ - install-sh \ - mkinstalldirs - -# `all' -# Compile the entire program. This should be the default target. -# This target need not rebuild any documentation files; info files -# should normally be included in the distribution, and DVI files -# should be made only when explicitly asked for. -all: - @for dir in ${subdirs}; do \ - cd $$dir; \ - ${MAKE} all; \ - cd .. ;\ - done - -#`install' -# Compile the program and copy the executables, libraries, and so on -# to the file names where they should reside for actual use. If -# there is a simple test to verify that a program is properly -# installed then run that test. -# -# Use `-' before any command for installing a man page, so that -# `make' will ignore any errors. This is in case there are systems -# that don't have the Unix man page documentation system installed. -# -# In the future, when we have a standard way of installing info -# files, `install' targets will be the proper place to do so. -# -subdir-inst-target=install-nobuild - -install: all - ${MAKE} subdir-inst-target=install install-nobuild - -install-nobuild: - for dir in ${subdirs}; do \ - cd $$dir; \ - ${MAKE} ${subdir-inst-target}; \ - cd .. ;\ - done - -#`uninstall' -# Delete all the installed files that the `install' target would -# create (but not the noninstalled files such as `make all' would -# create). -uninstall: - for dir in ${subdirs}; do \ - cd $$dir; \ - ${MAKE} uninstall; \ - cd .. ;\ - done - - -#`clean' -# Delete all files from the current directory that are normally -# created by building the program. Don't delete the files that -# record the configuration. Also preserve files that could be made -# by building, but normally aren't because the distribution comes -# with them. -# -# Delete `.dvi' files here if they are not part of the distribution. -# -clean: - for dir in ${subdirs}; do \ - cd $$dir; \ - ${MAKE} clean; \ - cd .. ;\ - done - -#`distclean' -# Delete all files from the current directory that are created by -# configuring or building the program. If you have unpacked the -# source and built the program without creating any other files, -# `make distclean' should leave only the files that were in the -# distribution. -distclean: - rm -f config.cache - rm -f config.log - rm -f config.status - rm -f config.build-subdirs - rm -f Makefile - rm -f doc/Makefile - for dir in ${subdirs}; do \ - cd $$dir; \ - ${MAKE} distclean; \ - cd .. ;\ - done - - -#`mostlyclean' -# Like `clean', but may refrain from deleting a few files that people -# normally don't want to recompile. For example, the `mostlyclean' -# target for GCC does not delete `libgcc.a', because recompiling it -# is rarely necessary and takes a lot of time. -mostlyclean: - for dir in ${subdirs}; do \ - cd $$dir; \ - ${MAKE} mostlyclean; \ - cd .. ;\ - done - - -#`realclean' -# Delete everything from the current directory that can be -# reconstructed with this Makefile. This typically includes -# everything deleted by distclean, plus more: C source files -# produced by Bison, tags tables, info files, and so on. -# -# One exception, however: `make realclean' should not delete -# `configure' even if `configure' can be remade using a rule in the -# Makefile. More generally, `make realclean' should not delete -# anything that needs to exist in order to run `configure' and then -# begin to build the program. -realclean: - for dir in ${subdirs}; do \ - cd $$dir; \ - ${MAKE} realclean; \ - cd .. ;\ - done - - -#`TAGS' -# Update a tags table for this program. -# We could allow each subdirectory to create its own TAGS file, -# and then use etags' --include option to incorporate them all by -# reference into a top-level TAGS file, but the --include option -# seems to be deprecated, and this works fine. -# -# The extra 'tags' name is useful --- 'make TAGS' won't run the -# commands if the file `TAGS' already exists, but `make tags' -# doesn't have that problem. -TAGS tags: - etags \ - --regex='/SCM_PROC[^"]*"[^"]*"/' \ - `find ${srcdir} -name '*.[ch]' -o -name '*.scm'` - -#`info' -# Generate any info files needed. The best way to write the rules -# is as follows: -# -# info: foo.info -# -# foo.info: $(srcdir)/foo.texi $(srcdir)/chap1.texi $(srcdir)/chap2.texi -# $(MAKEINFO) $(srcdir)/foo.texi -# -# You must define the variable `MAKEINFO' in the Makefile. It -# should run the Makeinfo program, which is part of the Texinfo2 -# distribution. -info: - cd doc; ${MAKE} info - -#`dvi' -# Generate DVI files for all TeXinfo documentation. For example: -# -# dvi: foo.dvi -# -# foo.dvi: $(srcdir)/foo.texi $(srcdir)/chap1.texi $(srcdir)/chap2.texi -# $(TEXI2DVI) $(srcdir)/foo.texi -# -# You must define the variable `TEXI2DVI' in the Makefile. It should -# run the program `texi2dvi', which is part of the Texinfo2 -# distribution. Alternatively, write just the dependencies, and -# allow GNU Make to provide the command. -dvi: - for dir in ${subdirs}; do \ - cd $$dir; \ - ${MAKE} dvi; \ - cd .. ;\ - done - -#`dist' -# Create a distribution tar file for this program. The tar file -# should be set up so that the file names in the tar file start with -# a subdirectory name which is the name of the package it is a -# distribution for. This name can include the version number. -# -# For example, the distribution tar file of GCC version 1.40 unpacks -# into a subdirectory named `gcc-1.40'. -# -# The easiest way to do this is to create a subdirectory -# appropriately named, use `ln' or `cp' to install the proper files -# in it, and then `tar' that subdirectory. -# -# The `dist' target should explicitly depend on all non-source files -# that are in the distribution, to make sure they are up to date in -# the distribution. *Ref Making Releases: (standards)Releases. -.PHONY: dist -GZIP=gzip --best -GZIP_EXT=.gz -TAR_VERBOSE=v -DIST_NAME=guile-${VERSION} -dist: info - @echo "Creating distribution for ${DIST_NAME}." - rm -rf ${DIST_NAME} ${DIST_NAME}.tar${GZIP_EXT} - ${MAKE} dist-dir DISTDIR="${DIST_NAME}" - for dir in ${dist_dirs}; do \ - ( DISTDIR="../${DIST_NAME}/$${dir}"; \ - cd $${dir} && \ - ${MAKE} dist-dir DISTDIR="$${DISTDIR}" \ - ); \ - done - tar chf${TAR_VERBOSE} - ${DIST_NAME} | ${GZIP} > "${DIST_NAME}.tar${GZIP_EXT}" - rm -rf ${DIST_NAME} - -# The `dist' target in the top-level Makefile uses this `dist-dir' -# target to select the appropriate files for distribution from the -# directory containing this Makefile. -.PHONY: dist-dir -dist-dir: - mkdir ${DISTDIR} - for i in ${DISTFILES}; do \ - ln $(srcdir)/$${i} ${DISTDIR}; \ - done - -#`check' -# Perform self-tests (if any). The user must build the program -# before running the tests, but need not install the program; you -# should write the self-tests so that they work when the program is -# built but not installed. -check: - for dir in ${subdirs}; do \ - cd $$dir; \ - ${MAKE} check; \ - cd .. ;\ - done - - -#`installcheck' -# Perform installation tests (if any). The user must build and -# install the program before running the tests. You should not -# assume that `$(bindir)' is in the search path. -installcheck: - for dir in ${subdirs}; do \ - cd $$dir; \ - ${MAKE} installcheck; \ - cd .. ;\ - done - - -#`installdirs' -# It's useful to add a target named `installdirs' to create the -# directories where files are installed, and their parent -# directories. There is a script called `mkinstalldirs' which is -# convenient for this; find it in the Texinfo package.You can use a -# rule like this: -# -# # Make sure all installation directories, e.g. $(bindir) actually exist by -# # making them if necessary. -# installdirs: mkinstalldirs -# $(srcdir)/mkinstalldirs $(bindir) $(datadir) $(libdir) \ -# $(infodir) $(mandir) -installdirs: - for dir in ${subdirs}; do \ - cd $$dir; \ - ${MAKE} installdirs; \ - cd .. ;\ - done - - - -# Cygnus extention: -# -# `Makefile' -# Calls `./config.status' to rebuild the `Makefile' in this -# directory. -Makefile: - ${SHELL-/bin/sh} config.status @@ -1,83 +0,0 @@ -Guile NEWS --- history of user-visible changes. 2 Aug 1996 -*- text -*- -Copyright (C) 1996 Free Software Foundation, Inc. -See the end for copying conditions. - -Please send Guile bug reports to bug-guile@prep.ai.mit.edu. - -Guile 1.0b3 - -Changes since Thursday, September 5: - -* You can now run Guile without installing it. - -Previous versions of the interactive Guile interpreter (`guile') -couldn't start up unless Guile's Scheme library had been installed; -they used the value of the environment variable `SCHEME_LOAD_PATH' -later on in the startup process, but not to find the startup code -itself. Now Guile uses `SCHEME_LOAD_PATH' in all searches for Scheme -code. - -To run Guile without installing it, build it in the normal way, and -then set the environment variable `SCHEME_LOAD_PATH' to a -colon-separated list of directories, including the top-level directory -of the Guile sources. For example, if you unpacked Guile so that the -full filename of this NEWS file is /home/jimb/guile-1.0b3/NEWS, then -you might say - - export SCHEME_LOAD_PATH=/home/jimb/my-scheme:/home/jimb/guile-1.0b3 - -* Guile's header files should no longer conflict with your system's -header files. - -In order to compile code which #included <libguile.h>, previous -versions of Guile required you to add a directory containing all the -Guile header files to your #include path. This was a problem, since -Guile's header files have names which conflict with many systems' -header files. - -Now only <libguile.h> need appear in your #include path; you must -refer to all Guile's other header files as <libguile/mumble.h>. -Guile's installation procedure puts libguile.h in $(includedir), and -the rest in $(includedir)/libguile. - -* The compiled-library-path function has been deleted from libguile. - -* A variable and two new functions have been added to libguile: - -** The variable %load-path now tells Guile which directories to search -for Scheme code. Its value is a list of strings, each of which names -a directory. - -** (%search-load-path FILENAME) searches the directories listed in the -value of the %load-path variable for a Scheme file named FILENAME. If -it finds a match, then it returns its full filename. Otherwise, it -returns #f. %search-load-path will not return matches that refer to -directories. - -** (%try-load-path FILENAME :optional CASE-INSENSITIVE-P SHARP) -searches the directories listed in %load-path for a file named -FILENAME, and loads it if it finds it. If it can't read FILENAME for -any reason, it throws an error. - -The arguments CASE-INSENSITIVE-P and SHARP are interpreted as by the -%try-load function. - - - -This is the beginning of recorded history. - - -Copyright information: - -Copyright (C) 1996 Free Software Foundation, Inc. - - Permission is granted to anyone to make or distribute verbatim copies - of this document as received, in any medium, provided that the - copyright notice and this permission notice are preserved, - thus giving the recipient permission to redistribute in turn. - - Permission is granted to distribute modified versions - of this document, or of portions of it, - under the above conditions, provided also that they - carry prominent notices stating who last changed them. - diff --git a/README b/README deleted file mode 100644 index 97bfc3fa2..000000000 --- a/README +++ /dev/null @@ -1,94 +0,0 @@ -This is a nightly snapshot of Guile, a portable, embeddable Scheme -implementation written in C. Guile provides a machine independent -execution platform that can be linked in as a library when building -extensible programs. - -Please send bug reports to bug-guile@prep.ai.mit.edu. - - -Important Facts About Snapshots ====================================== - - please keep in mind that these sources are strictly experimental; - they will usually not be well-tested, and may not even compile on - some systems. They may contain interfaces which will change. - They will usually not be of sufficient quality for use by people - not comfortable hacking the innards of Guile. Caveat! - - However, we're providing them anyway for several reasons. We'd like - to encourage people to get involved in developing Guile. People - willing to use the bleeding edge of development can get earlier access - to new, experimental features. Patches submitted relative to recent - snapshots will be easier for us to evaluate and install, since the - patch's original sources will be closer to what we're working with. - And it allows us to start testing features earlier. - -The Guile snapshots are available via anonymous FTP from -alpha.gnu.ai.mit.edu, as /gnu/guile-snap.tar.gz. - -Via the web, that's: ftp://alpha.gnu.ai.mit.edu/gnu/guile-snap.tar.gz -For getit, that's: alpha.gnu.ai.mit.edu:/gnu/guile-snap.tar.gz - - -Contents Of This Distribution ======================================== - -Interesting files include: -- INSTALL, which contains instructions on building and installing Guile. -- NEWS, which describes user-visible changes since the last release of Guile. -- COPYING, which describes the terms under which you may redistribute - Guile, and explains that there is no warranty. - -The Guile source tree is laid out as follows: - -doc: Documentation for Guile, in Texinfo form. -libguile: - The Guile Scheme interpreter, packaged as an object library - for you to link with your programs. -guile: An interactive front end for the Guile Scheme interpreter. -rx: A regular expression matching library, interfaced to Guile. -ice-9: Guile's module system, initialization code, and other infrastructure. -lang: A Guile module of tools for writing lexical analyzers and parsers. -ctax: A Guile module providing a C-like syntax for Scheme. -gtcltk-lib: - Glue code for talking to Tcl/Tk from Guile. The Tcl/Tk - developers have big plans for the next major release of Tcl/Tk - which will make possible a clean, direct interface between - Guile and Tk, so we're providing this very simple-minded - interface until that's ready. -threads: Glue code for using various threads packages from Guile, including - qt (see below). - -This distribution also includes `qt', a cooperative threads package -from Washington University, which Guile can use. Qt is under a -separate copyright; see `qt/README' for more details. - -The mailing list `guile@cygnus.com' carries discussions, questions, -and often answers, about Guile. To subscribe, send mail to -guile-request@cygnus.com. Of course, please send bug reports (and -fixes!) to bug-guile@prep.ai.mit.edu. - - -Authors And Contributors ============================================= - -George Carrette wrote SIOD, a stand-alone scheme interpreter. -Although most of this code as been rewritten or replaced over time, -the garbage collector from SIOD is still an important part of Guile. - -Aubrey Jaffer seriously tuned performance and added features. He -designed many hairy parts of the tag system and evaluator. - -Tom Lord librarified SCM, yielding Guile. He wrote Guile's operating -system, Ice-9, and connected Guile to Tcl/Tk and the `rx' regular -expression matcher. - -Gary Houston wrote the Unix system call support, including the socket -support. - -Anthony Green wrote the original version of `threads' the interface -between Guile and qt. - -Mikael Djurfeldt designed and implemented: -* the source-level debugger, -* the GDB patches to support debugging mixed Scheme/C code -* the original implementation of weak hash tables, -* the dynamic root, and -* rewrote the `threads' interface. @@ -1,42 +0,0 @@ -Needed before release - -* Add facilities for debugging Scheme programs. - -Mikael Djurfeldt <mdj@nada.kth.se> is working on this. The low-level -functions are available, but need a user interface. He has also -written extensisons to GDB to allow it to print lispy values in lispy -notation when debugging Guile's C code. - -* Merge in the Cygnus threads package. - -This is done, but needs debugging. - -* Documentation. - -They should be complete and accurate. They should also have more -general explanation (right now they're strictly reference), but -perhaps that will have to wait until after the first release. - - -Desired later on - -* Good interface to Tk - -* Add a convenient facility for running a pipeline of processes -with redirections. Gary Houston <ghouston@actrix.gen.nz> -is working on this. - -* Make it possible to link Guile and TK without using libtcl.a, by -providing Guile-based replacements for the libtcl.a functions that TK -requires. - -* Make ordinary lambda functions work as callbacks for Tk; -eliminate the need for tcl-lambda. - -* Translators for additional languages; in particular, Perl, Python, -TCL, Emacs Lisp, and Rexx. - -* Clean up declarations of C functions to use a PROTO macro -for conditional prototypes, instead of explicit conditionals. - -* A package for time conversions and formatting. diff --git a/aclocal.m4 b/aclocal.m4 deleted file mode 100644 index 0466e8c7b..000000000 --- a/aclocal.m4 +++ /dev/null @@ -1,102 +0,0 @@ -dnl -dnl CY_AC_WITH_THREADS determines which thread library the user intends -dnl to put underneath guile. Pass it the path to find the guile top-level -dnl source directory. Eg CY_AC_WITH_THREADS(../..) for tcl/unix. -dnl - -AC_DEFUN([CY_AC_WITH_THREADS],[ -AC_CACHE_CHECK("threads package type",cy_cv_threads_package,[ -AC_CACHE_VAL(cy_cv_threads_cflags,[ -AC_CACHE_VAL(cy_cv_threads_libs,[ -use_threads=no; -AC_ARG_WITH(threads,[ --with-threads thread interface], - use_threads=$withval, use_threads=no) -test -n "$use_threads" || use_threads=qt -threads_package=unknown -if test "$use_threads" != no; then -dnl -dnl Test for the qt threads package - used for cooperative threads -dnl This may not necessarily be built yet - so just check for the -dnl header files. -dnl - if test "$use_threads" = yes || test "$use_threads" = qt; then - # Look for qt in source directory. This is a hack: we look in - # "./qt" because this check might be run at the top level. - if test -f $srcdir/../qt/qt.c || test -f $srcdir/qt/qt.c; then - threads_package=COOP - cy_cv_threads_cflags="-I$srcdir/../qt -I../qt" - cy_cv_threads_libs="../threads/libthreads.a ../qt/libqt.a" - fi - else - if test -f $use_threads/qt.c; then - # FIXME seems as though we should try to use an installed qt here. - threads_package=COOP - cy_cv_threads_cflags="-I$use_threads -I../qt" - cy_cv_threads_libs="../threads/libthreads.a ../qt/libqt.a" - fi - fi - if test "$use_threads" = pthreads; then - # Look for pthreads in srcdir. See above to understand why - # we always set threads_package. - if test -f $srcdir/../../pthreads/pthreads/queue.c \ - || test -f $srcdir/../pthreads/pthreads/queue.c; then - threads_package=MIT - cy_cv_threads_cflags="-I$srcdir/../../pthreads/include" - cy_cv_threads_libs="-L../../pthreads/lib -lpthread" - fi - fi - saved_CPP="$CPPFLAGS" - saved_LD="$LDFLAGS" - saved_LIBS="$LIBS" - if test "$threads_package" = unknown; then -dnl -dnl Test for the FSU threads package -dnl - CPPFLAGS="-I$use_threads/include" - LDFLAGS="-L$use_threads/lib" - LIBS="-lgthreads -lmalloc" - AC_TRY_LINK([#include <pthread.h>],[ -pthread_equal(NULL,NULL); -], threads_package=FSU) - fi - if test "$threads_package" = unknown; then -dnl -dnl Test for the MIT threads package -dnl - LIBS="-lpthread" - AC_TRY_LINK([#include <pthread.h>],[ -pthread_equal(NULL,NULL); -], threads_package=MIT) - fi - if test "$threads_package" = unknown; then -dnl -dnl Test for the PCthreads package -dnl - LIBS="-lpthreads" - AC_TRY_LINK([#include <pthread.h>],[ -pthread_equal(NULL,NULL); -], threads_package=PCthreads) - fi -dnl -dnl Set the appropriate flags! -dnl - cy_cv_threads_cflags="$CPPFLAGS $cy_cv_threads_cflags" - cy_cv_threads_libs="$LDFLAGS $LIBS $cy_cv_threads_libs" - cy_cv_threads_package=$threads_package - CPPFLAGS="$saved_CPP" - LDFLAGS="$saved_LD" - LIBS="$saved_LIBS" - if test "$threads_package" = unknown; then - AC_MSG_ERROR("cannot find thread library installation") - fi -fi -]) -]) -], -dnl -dnl Set flags according to what is cached. -dnl -CPPFLAGS="$cy_cv_threads_cflags" -LIBS="$cy_cv_threads_libs" -) -]) diff --git a/config.guess b/config.guess deleted file mode 100755 index a3d6a9f1b..000000000 --- a/config.guess +++ /dev/null @@ -1,497 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc. -# -# 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., 675 Mass Ave, Cambridge, MA 02139, 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. - -# Written by Per Bothner <bothner@cygnus.com>. -# The master version of this file is at the FSF in /home/gd/gnu/lib. -# -# 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 system type (host/target name). -# -# Only a few systems have been added to this list; please add others -# (but try to keep the structure clean). -# - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 8/24/94.) -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 - -trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15 - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - alpha:OSF1:V*:*) - # After 1.2, OSF1 uses "V1.3" for uname -r. - echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^V//'` - exit 0 ;; - alpha:OSF1:*:*) - # 1.2 uses "1.2" for uname -r. - echo alpha-dec-osf${UNAME_RELEASE} - exit 0 ;; - amiga:NetBSD:*:*) - echo m68k-cbm-netbsd${UNAME_RELEASE} - exit 0 ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit 0;; - Pyramid*:OSx*:*:*) - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit 0 ;; - sun4*:SunOS:5.*:*) - echo sparc-sun-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 ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - mips:*:5*:RISCos) - echo mips-mips-riscos${UNAME_RELEASE} - 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:*:*) - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ - -o ${TARGET_BINARY_INTERFACE}x = x ] ; then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${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[34]86:AIX:*:*) - echo i386-ibm-aix - exit 0 ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - 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-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy - 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:*:4) - if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if grep bos410 /usr/include/stdio.h >/dev/null 2>&1; then - IBM_REV=4.1 - elif grep bos411 /usr/include/stdio.h >/dev/null 2>&1; then - IBM_REV=4.1.1 - else - IBM_REV=4.${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 NetBSD 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/[3478]??:HP-UX:*:*) - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/7?? | 9000/8?7 ) HP_ARCH=hppa1.1 ;; - 9000/8?? ) HP_ARCH=hppa1.0 ;; - esac - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit 0 ;; - 3050*:HI-UX:*:*) - 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-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy - echo unknown-hitachi-hiuxwe2 - exit 0 ;; - 9000/7??:4.3bsd:*:* | 9000/8?7:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit 0 ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit 0 ;; - hp7??:OSF1:*:* | hp8?7:OSF1:*:* ) - echo hppa1.1-hp-osf - exit 0 ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - 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*X-MP:UNICOS:*:*) - echo xmp-cray-unicos - exit 0 ;; - CRAY*Y-MP:UNICOS:*:*) - echo ymp-cray-unicos - exit 0 ;; - CRAY-2:UNICOS:*:*) - echo cray2-cray-unicos - exit 0 ;; - hp3[0-9][05]:NetBSD:*:*) - echo m68k-hp-netbsd${UNAME_RELEASE} - exit 0 ;; - i[34]86:BSD/386:*:* | *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; - *:FreeBSD:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; - *:NetBSD:*:*) - echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; - *:GNU:*:*) - echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit 0 ;; - *:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux - exit 0 ;; -# 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. - i[34]86:DYNIX/ptx:4*:*) - echo i386-sequent-sysv4 - exit 0 ;; - i[34]86:*:4.*:* | i[34]86:SYSTEM_V:4.*:*) - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} - else - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE} - fi - exit 0 ;; - i[34]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}-unknown-isc$UNAME_REL - elif /bin/uname -X 2>/dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` - (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 - echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-unknown-sysv32 - fi - exit 0 ;; - Intel:Mach:3*:*) - echo i386-unknown-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 ;; - M680[234]0:*:R3V[567]*:*) - test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; - 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0) - uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4.3 && exit 0 ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4 && exit 0 ;; - m680[234]0:LynxOS:2.2*:*) - echo m68k-lynx-lynxos${UNAME_RELEASE} - exit 0 ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit 0 ;; - i[34]86:LynxOS:2.2*:*) - echo i386-lynx-lynxos${UNAME_RELEASE} - exit 0 ;; - TSUNAMI:LynxOS:2.2*:*) - echo sparc-lynx-lynxos${UNAME_RELEASE} - exit 0 ;; - rs6000:LynxOS:2.2*:*) - echo rs6000-lynx-lynxos${UNAME_RELEASE} - 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 ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -cat >dummy.c <<EOF -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`; - printf ("%s-next-nextstep%s\n", __ARCHITECTURE__, version==2 ? "2" : "3"); - 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-unknown-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_) - printf ("i386-sequent-ptx\n"); exit (0); -#endif - -#if defined (vax) -#if !defined (ultrix) - printf ("vax-dec-bsd\n"); exit (0); -#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-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0 -rm -f dummy.c dummy - -# 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 - -#echo '(Unable to guess system type)' 1>&2 - -exit 1 diff --git a/config.sub b/config.sub deleted file mode 100755 index 5641cc1ce..000000000 --- a/config.sub +++ /dev/null @@ -1,833 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script, version 1.1. -# Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. -# 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., 675 Mass Ave, Cambridge, MA 02139, 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. - -# 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 -# It is wrong to echo any other type of specification. - -if [ x$1 = x ] -then - echo Configuration name missing. 1>&2 - echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 - echo "or $0 ALIAS" 1>&2 - echo where ALIAS is a recognized configuration type. 1>&2 - exit 1 -fi - -# First pass through any local machine types. -case $1 in - *local*) - echo $1 - exit 0 - ;; - *) - ;; -esac - -# Separate what the user gave into CPU-COMPANY and OS (if any). -basic_machine=`echo $1 | sed 's/-[^-]*$//'` -if [ $basic_machine != $1 ] -then os=`echo $1 | sed 's/.*-/-/'` -else os=; fi - -### 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 ) - os= - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; -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. - tahoe | i[345]86 | i860 | m68k | m68000 | m88k | ns32k | arm | pyramid \ - | tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \ - | alpha | we32k | ns16k | clipper | sparclite | i370 | sh \ - | powerpc | sparc64 | 1750a | dsp16xx | mips64 | mipsel \ - | pdp11 | mips64el | mips64orion | mips64orionel \ - | sparc) - basic_machine=$basic_machine-unknown - ;; - # 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. - vax-* | tahoe-* | i[345]86-* | i860-* | m68k-* | m68000-* | m88k-* \ - | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \ - | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ - | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \ - | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \ - | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \ - | pdp11-* | sh-* | powerpc-* | sparc64-* | mips64-* | mipsel-* \ - | mips64el-* | mips64orion-* | mips64orionel-*) - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-cbm - ;; - amigados) - basic_machine=m68k-cbm - os=-amigados - ;; - amigaunix | amix) - basic_machine=m68k-cbm - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - 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 | ymp) - basic_machine=ymp-cray - os=-unicos - ;; - cray2) - basic_machine=cray2-cray - os=-unicos - ;; - crds | unos) - basic_machine=m68k-crds - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - 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 - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-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 - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - os=-mvs - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i[345]86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` - os=-sysv32 - ;; - i[345]86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` - os=-sysv4 - ;; - i[345]86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` - os=-sysv - ;; - i[345]86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` - os=-solaris2 - ;; - 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 - ;; - miniframe) - basic_machine=m68000-convergent - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - 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 - ;; - 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 - ;; - np1) - basic_machine=np1-gould - ;; - 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-*) - # We will change tis to say i586 once there has been - # time for various packages to start to recognize that. - basic_machine=i486-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - ps2) - basic_machine=i386-ibm - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - 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 - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - xmp) - basic_machine=xmp-cray - os=-unicos - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - 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. - mips) - basic_machine=mips-mips - ;; - romp) - basic_machine=romp-ibm - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sparc) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - *) - 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 - # -solaris* is a basic system type, with this one exception. - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -unixware* | svr4*) - os=-sysv4 - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux|'` - ;; - # 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[345]* \ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -amigados* | -msdos* | -newsos* | -unicos* | -aos* \ - | -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \ - | -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -netbsd* | -freebsd* | -riscix* \ - | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta | -udi | -eabi) - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -ctix* | -uts*) - os=-sysv - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -xenix) - os=-xenix - ;; - -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 - ;; - 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 - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-ibm) - os=-aix - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigados - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-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 - ;; - *) - 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 - ;; - -lynxos*) - vendor=lynx - ;; - -aix*) - vendor=ibm - ;; - -hpux*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -vxworks*) - vendor=wrs - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os diff --git a/configure b/configure deleted file mode 100755 index 0220f3608..000000000 --- a/configure +++ /dev/null @@ -1,1116 +0,0 @@ -#! /bin/sh - -# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.10 -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. - -# Defaults: -ac_help= -ac_default_prefix=/usr/local -# Any additions from configure.in: - -# Initialize some variables set by options. -# The variables have the same names as the options, with -# dashes changed to underlines. -build=NONE -cache_file=./config.cache -exec_prefix=NONE -host=NONE -no_create= -nonopt=NONE -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -target=NONE -verbose= -x_includes=NONE -x_libraries=NONE -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= - -ac_prev= -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=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) ac_optarg= ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case "$ac_option" in - - -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 ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$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" ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir="$ac_optarg" ;; - - -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; - - -enable-* | --enable-*) - ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "enable_${ac_feature}='$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) - # 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 << EOF -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --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 -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -EOF - if test -n "$ac_help"; then - echo "--enable and --with options recognized:$ac_help" - fi - exit 0 ;; - - -host | --host | --hos | --ho) - ac_prev=host ;; - -host=* | --host=* | --hos=* | --ho=*) - host="$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" ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - 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) - 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" ;; - - -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 ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.10" - exit 0 ;; - - -with-* | --with-*) - ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "with_${ac_package}='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=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" ;; - - -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } - ;; - - *) - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then - echo "configure: warning: $ac_option: invalid host type" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" - ;; - - esac -done - -if test -n "$ac_prev"; then - { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } -fi - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -# 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 -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 -fi -exec 5>./config.log - -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&5 - -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg -do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; - esac -done - -# 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 "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LANG+set}" = set; then LANG=C; export LANG; fi - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h - -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=Makefile.in - -# 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 its parent. - ac_prog=$0 - ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. - 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 - if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } - else - { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } - fi -fi -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` - -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file -else - echo "creating cache $cache_file" - > $cache_file -fi - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -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' - -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - 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 - - - -rm -f config.build-subdirs - -. $srcdir/GUILE-VERSION - -all_subdirs=`cat $srcdir/*/PLUGIN/REQ $srcdir/*/PLUGIN/OPT /dev/null | tsort | xargs echo` -req_subdirs=`cat $srcdir/*/PLUGIN/REQ /dev/null | tsort | xargs echo` -opt_subdirs=`cat $srcdir/*/PLUGIN/OPT /dev/null | tsort | xargs echo` - -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 - fi -done -if test -z "$ac_aux_dir"; then - { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } -fi -ac_config_guess=$ac_aux_dir/config.guess -ac_config_sub=$ac_aux_dir/config.sub -ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. - -subdirs="$all_subdirs" - -for d in $all_subdirs; do - if test -d $srcdir/$d ; then - existingdirs="$existingdirs $d" - if test "x$verbose" = xyes; then - if test -f $srcdir/$d/PLUGIN/greet ; then - cat $srcdir/$d/PLUGIN/greet - else - echo === - echo === Configuring plug-in component $d - echo === - fi - fi - fi -done - -for d in $req_subdirs; do - if test ! -d $srcdir/$d ; then - echo "*******" - echo "*******" - echo "**\+/**" - echo "**=*=**" ERROR: Missing required package: $d - echo "**/+\**" - echo "*******" - echo "*******" - exit 1 - fi -done - -if test "x$verbose" = xyes; then - for d in $opt_subdirs; do - if test ! -d $srcdir/$d ; then - echo "*****" - echo "*===*" - echo "*=*=*" WARNING: Missing suggested package: $d - echo "*===*" - echo "*****" - fi - done -fi - - -# Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="gcc" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -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 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - ac_prog_rejected=no - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - break - fi - done - IFS="$ac_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 $# -gt 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 - set dummy "$ac_dir/$ac_word" "$@" - shift - ac_cv_prog_CC="$@" - fi -fi -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } -fi - -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.c <<EOF -#ifdef __GNUC__ - yes; -#endif -EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:673: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gcc=yes -else - ac_cv_prog_gcc=no -fi -fi - -echo "$ac_t""$ac_cv_prog_gcc" 1>&6 -if test $ac_cv_prog_gcc = yes; then - GCC=yes - if test "${CFLAGS+set}" != set; then - echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_gcc_g'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - echo 'void f(){}' > conftest.c -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then - ac_cv_prog_gcc_g=yes -else - ac_cv_prog_gcc_g=no -fi -rm -f conftest* - -fi - -echo "$ac_t""$ac_cv_prog_gcc_g" 1>&6 - if test $ac_cv_prog_gcc_g = yes; then - CFLAGS="-g -O" - else - CFLAGS="-O" - fi - fi -else - GCC= - test "${CFLAGS+set}" = set || CFLAGS="-g" -fi - - -### build_subdirs is the list of directories we actually want to -### build. It's not equivalent to existingdirs: if we can't find the -### Tcl libraries, then we don't want to build in gtcltk-lib. -### -### So why can't we just forget about gtcltk-lib altogether, and -### delete it from existingdirs, in that case? Well, in order for -### 'make dist' to work, we still need to configure gtcltk-lib, and -### the top-level Makefile needs to know it exists, -build_subdirs="${existingdirs}" - -### Decide which directories to build; remove the ones we don't want -### from build_subdirs. - -### On some systems, the Tcl library contains references to -### functions in the dynamic linker library, -ldl, so we may need -### to include that. -echo $ac_n "checking for -ldl""... $ac_c" 1>&6 -ac_lib_var=`echo dl'_'dlopen | tr './+\055' '__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 735 "configure" -#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. */ -char dlopen(); - -int main() { return 0; } -int t() { -dlopen() -; return 0; } -EOF -if { (eval echo configure:747: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - 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 - ac_tr_lib=HAVE_LIB`echo dl | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_lib 1 -EOF - - LIBS="-ldl $LIBS" - -else - echo "$ac_t""no" 1>&6 -fi - - -### Use gtcltk-lib only if we seem to have Tcl installed on the -### system. We really should check for Tk as well, but that involves -### finding all the X libraries that we need to do a complete link. -echo $ac_n "checking for -ltcl7.5""... $ac_c" 1>&6 -ac_lib_var=`echo tcl7.5'_'Tcl_CreateInterp | tr './+\055' '__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="-ltcl7.5 -lm $LIBS" -cat > conftest.$ac_ext <<EOF -#line 783 "configure" -#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. */ -char Tcl_CreateInterp(); - -int main() { return 0; } -int t() { -Tcl_CreateInterp() -; return 0; } -EOF -if { (eval echo configure:795: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - 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 - have_tcl=true -else - echo "$ac_t""no" 1>&6 -have_tcl=false -fi - -if $have_tcl; then :; else - build_subdirs="`echo $build_subdirs | sed s:gtcltk-lib::`" - req_subdirs="`echo $req_subdirs | sed s:gtcltk-lib::`" -fi - -### Write the list of survivors, the directories we do want to build, -### to a file in the top level, so the subdirectories' configuration -### scripts can find it. We don't want to pass the list in the -### environment, because the subdirectory configuration scripts can be -### run on their own. -echo "${build_subdirs}" > config.build-subdirs - - - - -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 -# 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 | - sed -n "s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=\${\1='\2'}/p" \ - >> 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 - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Any assignment to VPATH causes Sun make to only execute -# the first set of double-colon rules, so remove it if not needed. -# If there is a colon in the path, we need to keep it. -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' -fi - -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -cat > conftest.defs <<\EOF -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g -s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g -s%\[%\\&%g -s%\]%\\&%g -s%\$%$$%g -EOF -DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` -rm -f conftest.defs - - -# Without the "./", some shells look in PATH for config.status. -: ${CONFIG_STATUS=./config.status} - -echo creating $CONFIG_STATUS -rm -f $CONFIG_STATUS -cat > $CONFIG_STATUS <<EOF -#! /bin/sh -# Generated automatically by configure. -# Run this file to recreate the current configuration. -# This directory was configured as follows, -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# -# $0 $ac_configure_args -# -# Compiler output produced by configure, useful for debugging -# configure, is in ./config.log if it exists. - -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" -for ac_option -do - case "\$ac_option" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" - exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; - -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "$CONFIG_STATUS generated by autoconf version 2.10" - exit 0 ;; - -help | --help | --hel | --he | --h) - echo "\$ac_cs_usage"; exit 0 ;; - *) echo "\$ac_cs_usage"; exit 1 ;; - esac -done - -ac_given_srcdir=$srcdir - -trap 'rm -fr `echo "Makefile doc/Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 -EOF -cat >> $CONFIG_STATUS <<EOF - -# Protect against being on the right side of a sed subst in config.status. -sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; - s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF -$ac_vpsub -$extrasub -s%@CFLAGS@%$CFLAGS%g -s%@CPPFLAGS@%$CPPFLAGS%g -s%@CXXFLAGS@%$CXXFLAGS%g -s%@DEFS@%$DEFS%g -s%@LDFLAGS@%$LDFLAGS%g -s%@LIBS@%$LIBS%g -s%@exec_prefix@%$exec_prefix%g -s%@prefix@%$prefix%g -s%@program_transform_name@%$program_transform_name%g -s%@bindir@%$bindir%g -s%@sbindir@%$sbindir%g -s%@libexecdir@%$libexecdir%g -s%@datadir@%$datadir%g -s%@sysconfdir@%$sysconfdir%g -s%@sharedstatedir@%$sharedstatedir%g -s%@localstatedir@%$localstatedir%g -s%@libdir@%$libdir%g -s%@includedir@%$includedir%g -s%@oldincludedir@%$oldincludedir%g -s%@infodir@%$infodir%g -s%@mandir@%$mandir%g -s%@subdirs@%$subdirs%g -s%@CC@%$CC%g -s%@existingdirs@%$existingdirs%g -s%@build_subdirs@%$build_subdirs%g -s%@GUILE_VERSION@%$GUILE_VERSION%g - -CEOF -EOF -cat >> $CONFIG_STATUS <<EOF - -CONFIG_FILES=\${CONFIG_FILES-"Makefile doc/Makefile"} -EOF -cat >> $CONFIG_STATUS <<\EOF -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then - # Support "outfile[:infile]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - # Adjust relative srcdir, etc. for subdirectories. - - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dir_suffix. - ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` - else - ac_dir_suffix= ac_dots= - fi - - case "$ac_given_srcdir" in - .) srcdir=. - if test -z "$ac_dots"; then top_srcdir=. - else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; - /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; - *) # Relative path. - srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" - top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - - echo creating "$ac_file" - rm -f "$ac_file" - configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." - case "$ac_file" in - *Makefile*) ac_comsub="1i\\ -# $configure_input" ;; - *) ac_comsub= ;; - esac - sed -e "$ac_comsub -s%@configure_input@%$configure_input%g -s%@srcdir@%$srcdir%g -s%@top_srcdir@%$top_srcdir%g -" -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file -fi; done -rm -f conftest.subs - - - -exit 0 -EOF -chmod +x $CONFIG_STATUS -rm -fr confdefs* $ac_clean_files -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 - -if test "$no_recursion" != yes; then - - # Remove --cache-file and --srcdir arguments so they do not pile up. - ac_sub_configure_args= - ac_prev= - for ac_arg in $ac_configure_args; do - if test -n "$ac_prev"; then - ac_prev= - continue - fi - case "$ac_arg" in - -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=*) - ;; - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - ;; - *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;; - esac - done - - for ac_config_dir in $all_subdirs; do - - # Do not complain, so a configure script can configure whichever - # parts of a large source tree are present. - if test ! -d $srcdir/$ac_config_dir; then - continue - fi - - echo configuring in $ac_config_dir - - case "$srcdir" in - .) ;; - *) - if test -d ./$ac_config_dir || mkdir ./$ac_config_dir; then :; - else - { echo "configure: error: can not create `pwd`/$ac_config_dir" 1>&2; exit 1; } - fi - ;; - esac - - ac_popdir=`pwd` - cd $ac_config_dir - - case "$srcdir" in - .) # No --srcdir option. We are building in place. - ac_sub_srcdir=$srcdir ;; - /*) # Absolute path. - ac_sub_srcdir=$srcdir/$ac_config_dir ;; - *) # Relative path. - ac_sub_srcdir=../$srcdir/$ac_config_dir ;; - esac - - # Check for guested configure; otherwise get Cygnus style configure. - if test -f $ac_sub_srcdir/configure; then - ac_sub_configure=$ac_sub_srcdir/configure - elif test -f $ac_sub_srcdir/configure.in; then - ac_sub_configure=$ac_configure - else - echo "configure: warning: no configuration information is in $ac_config_dir" 1>&2 - ac_sub_configure= - fi - - # The recursion is here. - if test -n "$ac_sub_configure"; then - - # Make the cache file name correct relative to the subdirectory. - # A "../" for each directory in /$ac_config_dir. - ac_dots=`echo $ac_config_dir|sed -e 's%^\./%%' -e 's%[^/]$%&/%' -e 's%[^/]*/%../%g'` - case "$cache_file" in - /*) ac_sub_cache_file=$cache_file ;; - *) # Relative path. - ac_sub_cache_file="$ac_dots$cache_file" ;; - esac - - echo "running ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir" - # The eval makes quoting arguments work. - if eval ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir - then : - else - { echo "configure: error: $ac_sub_configure failed for $ac_config_dir" 1>&2; exit 1; } - fi - fi - - cd $ac_popdir - done -fi - diff --git a/configure.in b/configure.in deleted file mode 100644 index 634f25682..000000000 --- a/configure.in +++ /dev/null @@ -1,92 +0,0 @@ -AC_INIT(Makefile.in) - -rm -f config.build-subdirs - -. $srcdir/GUILE-VERSION - -all_subdirs=`cat $srcdir/*/PLUGIN/REQ $srcdir/*/PLUGIN/OPT /dev/null | tsort | xargs echo` -req_subdirs=`cat $srcdir/*/PLUGIN/REQ /dev/null | tsort | xargs echo` -opt_subdirs=`cat $srcdir/*/PLUGIN/OPT /dev/null | tsort | xargs echo` - -AC_CONFIG_SUBDIRS($all_subdirs) -for d in $all_subdirs; do - if test -d $srcdir/$d ; then - existingdirs="$existingdirs $d" - if test "x$verbose" = xyes; then - if test -f $srcdir/$d/PLUGIN/greet ; then - cat $srcdir/$d/PLUGIN/greet - else - echo === - echo === Configuring plug-in component $d - echo === - fi - fi - fi -done - -for d in $req_subdirs; do - if test ! -d $srcdir/$d ; then - echo "*******" - echo "*******" - echo "**\+/**" - echo "**=*=**" ERROR: Missing required package: $d - echo "**/+\**" - echo "*******" - echo "*******" - exit 1 - fi -done - -if test "x$verbose" = xyes; then - for d in $opt_subdirs; do - if test ! -d $srcdir/$d ; then - echo "*****" - echo "*===*" - echo "*=*=*" WARNING: Missing suggested package: $d - echo "*===*" - echo "*****" - fi - done -fi - - -AC_PROG_CC - -### build_subdirs is the list of directories we actually want to -### build. It's not equivalent to existingdirs: if we can't find the -### Tcl libraries, then we don't want to build in gtcltk-lib. -### -### So why can't we just forget about gtcltk-lib altogether, and -### delete it from existingdirs, in that case? Well, in order for -### 'make dist' to work, we still need to configure gtcltk-lib, and -### the top-level Makefile needs to know it exists, -build_subdirs="${existingdirs}" - -### Decide which directories to build; remove the ones we don't want -### from build_subdirs. - -### On some systems, the Tcl library contains references to -### functions in the dynamic linker library, -ldl, so we may need -### to include that. -AC_CHECK_LIB(dl, dlopen) - -### Use gtcltk-lib only if we seem to have Tcl installed on the -### system. We really should check for Tk as well, but that involves -### finding all the X libraries that we need to do a complete link. -AC_CHECK_LIB(tcl7.5, Tcl_CreateInterp, have_tcl=true, have_tcl=false, -lm) -if $have_tcl; then :; else - build_subdirs="`echo $build_subdirs | sed s:gtcltk-lib::`" - req_subdirs="`echo $req_subdirs | sed s:gtcltk-lib::`" -fi - -### Write the list of survivors, the directories we do want to build, -### to a file in the top level, so the subdirectories' configuration -### scripts can find it. We don't want to pass the list in the -### environment, because the subdirectory configuration scripts can be -### run on their own. -echo "${build_subdirs}" > config.build-subdirs - -AC_SUBST(existingdirs) -AC_SUBST(build_subdirs) -AC_SUBST(GUILE_VERSION) -AC_OUTPUT(Makefile doc/Makefile) diff --git a/ice-9/.cvsignore b/ice-9/.cvsignore deleted file mode 100644 index 16b8c4510..000000000 --- a/ice-9/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -Makefile -config.log -config.status diff --git a/ice-9/COPYING b/ice-9/COPYING deleted file mode 100644 index 9648fb9ea..000000000 --- a/ice-9/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991, 1992, 1993 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. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. 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. - - 1. 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. - - 2. 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. - - 3. 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. - - 4. 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. - - 5. 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. - - 6. 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. - - 7. 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. - - 8. 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. - - 9. 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. - - 10. 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 - - 11. 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. - - 12. 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 - - Appendix: 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 a brief 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. diff --git a/ice-9/ChangeLog b/ice-9/ChangeLog deleted file mode 100644 index b5cfe6afd..000000000 --- a/ice-9/ChangeLog +++ /dev/null @@ -1,240 +0,0 @@ -Thu Oct 10 22:27:32 1996 Jim Blandy <jimb@totoro.cyclic.com> - - * mapping.scm (hash-table-mapping): Explicitly request that - make-vector fill new vectors with '(); this will make it easier to - port Guile Scheme code to other Schemes. - * boot-9.scm (make-print-style, make-print-table): Same. - -Sun Oct 6 03:54:59 1996 Gary Houston <ghouston@actrix.gen.nz> - - * boot-9.scm (load): rewritten again. - Append "." to the default %load-path. - (feature?): new function: checks for a symbol in the features list. - (module-local-variable): remove apparently useless (caddr (list m v - ...)) - (%load-announce): minor formatting change. - (file-exists?): use access? if posix is featured. - (file-is-directory?): use stat if i/o-extensions is featured. - (try-module-autoload module-name): use file-exists? before - file-is-directory? - -Sat Oct 5 18:54:03 1996 Mikael Djurfeldt <mdj@kenneth> - - * boot-9.scm: Added conditional loading of threads.scm. - - * threads.scm: New file. Modified from the Cygnus-r0.3 - distribution. - - * boot-9.scm (error-catching-loop): Added handling of key - `switch-repl'. - - * boot-9.scm: Name change %%bad-throw --> bad-throw. - -Wed Oct 2 23:38:44 1996 Jim Blandy <jimb@totoro.cyclic.com> - - * boot-9.scm (make-record-type, record-constructor): Don't assume - the empty list is false when parsing the argument list. - -Mon Sep 30 22:15:50 1996 Jim Blandy <jimb@totoro.cyclic.com> - - * boot-9.scm (signal-handler): Clean up logic. - - * boot-9.scm (load): Assume %load-path is always bound. - -Sat Sep 28 00:15:37 1996 Gary Houston <ghouston@actrix.gen.nz> - - * boot-9.scm (error): replace another throw with scm-error. Throw - to 'misc-error instead of 'error (no need to distinguish these.) - Don't set up 'error as a key. - Set up regex-error as a key, if regex is available. - (signal-handler): use scm-error, not throw. - -* (%try-load, try-load-with-path, %load, load-with-path, - basic-try-load-with-path, basic-load-with-path, - try-load-module-with-path,load-module-with-path): deleted, since - they seem redundant. - (try-load): define using %try-load, not try-load-with-path. -* (load): rewritten. load tries to open the file directly and - with a .scm extension before searching the library directories - (should "." be added to %load-path? then load could still open - directly files starting with "/"). - (try-module-autoload): use load, not load-with-path. - (%load-indent): deleted, -2 was causing errors. - - (%read-sharp): use port-line, not line-number. - -Fri Sep 27 16:23:51 1996 Jim Blandy <jimb@totoro.cyclic.com> - - * boot-9.scm (%%bad-throw): Delete definition. 1) It's very - straightforward to provide the equivalent functionality using - (catch #t ...), so there's no need for the extra complexity. 2) - Outside the context of a read-eval-print loop (which Guile should - not require) it's not clear we should do anything more complicated - than print an error and exit; the user or REPL can establish - something better if it wants. 3) In that case, it's much more - robust to just do it in the C code. - -Tue Sep 24 06:53:04 1996 Gary Houston <ghouston@actrix.gen.nz> - - * boot-9.scm (%try-load): define using primitive-load. Previously - %try-load itself was the primitive. - (load-with-path): use scm-error instead of %load-announce-lossage. - Errors are thrown to 'misc-error instead of 'could-not-load. - (%load-announce-lossage): deleted. - -Mon Sep 23 00:16:31 1996 Mikael Djurfeldt <mdj@kenneth> - - * boot-9.scm (warn, scm-style-repl): Use C printer instead of `print'. - (make-record-type type-name fields): Temporarily remove support - for printing of records (not possible yet with C printer). - -Fri Sep 20 00:24:27 1996 Gary Houston <ghouston@actrix.gen.nz> - - * boot-9.scm (file-exists?, file-is-directory): catch only - system-error, not every kind of error. - (scm-error): new procedure. - -Thu Sep 19 16:02:46 1996 Jim Blandy <jimb@totoro.cyclic.com> - - * boot-9.scm: Formatting tweaks. - -Wed Sep 18 09:07:37 1996 Gary Houston <ghouston@actrix.gen.nz> - - * boot-9.scm (%%handle-system-error key): remove the code for - SCM-style errors. handle the case that an unexpected number - of args are supplied. - (%%system-errors): removed. - (error): redefine using a throw with key and 4 args. - ('error): associate 'error, 'error-signal keys with - %%handle-system-error. - (%%default-error-handler): removed. - (signal-handler): throw with 4 args and use the error-signal key. - Create an error message instead of using numerical codes. - (%%bad-throw): call error instead of throw if key not found. - -Tue Sep 17 04:11:28 1996 Gary Houston <ghouston@actrix.gen.nz> - - * boot-9.scm: initialize new error keys (see libguile/ChangeLog). - (%%handle-system-error key): check subr is not #f before printing. - Recognize %s (embed an argument using "display") and - %S (embed an argument using "write"). - -Sun Sep 15 03:55:35 1996 Gary Houston <ghouston@actrix.gen.nz> - - * boot-9.scm (%%handle-system-error key): set args and rest to - the empty list if they are #f. - Initialize out-of-range as an error key. - -Sat Sep 14 03:41:15 1996 Gary Houston <ghouston@actrix.gen.nz> - - * PLUGIN/REQ: remove the "ice-9 lgh" line which causes a cycle. - - * boot-9.scm: remove leading %% from references to '%%system-error. - (%%handle-system-error): don't pass all the thrown arguments when - aborting, just the key and subr. - Remove the code to "Install default handlers for built-in errors." - Remove the definition of the syserror procedure. - Associate 'numerical-overflow with default handler. - -Fri Sep 13 04:58:11 1996 Mikael Djurfeldt <mdj@woody.nada.kth.se> - - * boot-9.scm: Name change: value-ref --> local-ref - resolved-ref --> nested-ref Motivation: conformance to the other - dictionary operators: list-ref operates on list, vector-ref - operates on vector, nested-ref operates on nested namespace, - local-ref operates on the local nested namespace. - -Sat Sep 7 06:44:47 1996 Gary Houston <ghouston@actrix.gen.nz> - - * boot-9.scm (%%handle-system-error): recognise errors thrown - by lgh-error (fill-message etc.) - (fill-message): check first whether args is null. - (fill-message): bug fix and check that args is a list. - -Thu Sep 5 11:33:41 1996 Jim Blandy <jimb@floss.cyclic.com> - - * boot-9.scm: %load-path is initialized in C code now. - (implementation-vicinity, parse-path): Deleted, along with code to - initialize %load-path. - - * boot-9.scm (in-vicinity): If the vicinity doesn't end with a - "/", use one to separate it from the file. - -Thu Aug 29 23:05:11 1996 Thomas Morgan <tmorgan@gnu.ai.mit.edu> - - * boot-9.scm (%load-path): Add the site directory. - Add the directory named after the version number. - Prepend the version number to the other directories in the path. - Simplify by mapping the common prefix onto each item. - * Makefile.in (datadir, pkgdatadir, pkgverdatadir, subpkgdatadir, - sitedatadir): New definitions. - (libparent, libdir, install_path): Replaced by above. - (install): Create the above directories. - Put the source files into subpkgdatadir. - (uninstall): Remove the above directories. - -Thu Aug 29 21:48:47 1996 Jim Blandy <jimb@floss.cyclic.com> - - Don't use the PLUGIN system to gather information for the - Makefile's distribution and installation targets; just put it all - in the Makefile directly. - * PLUGIN/this.configure (scm_files, aux_files): Remove sections - for these. - * configure.in: Remove code that gets and substitutes scm_files and - aux_files. - * Makefile.in (scm_files, aux_files): Write out the list of files - here, where people expect to find them. - -Fri Aug 23 06:44:36 1996 Mikael Djurfeldt <mdj@woody.nada.kth.se> - - * boot-9.scm: Preliminary solution: optionally load the debug - module. Changed "gls" to "guile1.0b3". - - * debug.scm: New file: debug extensions. - -Wed Aug 21 13:06:56 1996 Mikael Djurfeldt <mdj@woody.nada.kth.se> - - * boot-9.scm (print-vector): Renamed weak-hash-table? --> - weak-key-hash-table?. (Again!) - -Tue Aug 20 07:31:39 1996 Mikael Djurfeldt <mdj@woody.nada.kth.se> - - * boot-9.scm (print-vector, macro-table, xformer-table): - Renamed weak-hash-table --> weak-key-hash-table. - - * poe.scm (funcq-memo): Renamed weak-hash-table --> - weak-key-hash-table. - -Sat Aug 3 06:16:35 1996 Gary Houston <ghouston@actrix.gen.nz> - - * boot-9.scm (*null-device*): global constant from goonix. - (move->fdes): adjusted for boolean primitive-move->fdes. return - the modified port, always set revealed count to 1 (SCSH compatible). - (release-port-handle port): from goonix (SCSH compatible). - (%open-file): removed. - (open-input-file, open-output-file, file-exists?, file-is-directory?): - modified for open-file change (does not return #f). - -Thu Aug 1 02:52:42 1996 Jim Blandy <jimb@totoro.cyclic.com> - - * Makefile.in (dist-dir): New target for new dist system. - (manifest): Deleted. - * PLUGIN/this.configure (aux_files): Removed PLUGIN; it's a - directory, and needs special treatment in the dist-dir target. - -Thu Aug 1 09:00:21 1996 Gary Houston <ghouston@actrix.gen.nz> - - * boot-9.scm: remove the wrappers for '%' system primitives, - now that they throw errors directly. - remove make-simple-wrapper and similar functions. - protect a call to getenv which may now throw an exception. - -Wed Jul 31 23:44:42 1996 Gary Houston <ghouston@actrix.gen.nz> - - * boot-9.scm (false-if-exception): new macro. - -Fri Apr 19 13:53:08 1996 Tom Lord <lord@beehive> - - * The more things change... - - diff --git a/ice-9/Makefile.in b/ice-9/Makefile.in deleted file mode 100644 index 1f7e4d75b..000000000 --- a/ice-9/Makefile.in +++ /dev/null @@ -1,99 +0,0 @@ -# Copyright (C) 1995 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 software; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# - - - -SHELL = /bin/sh - -srcdir = @srcdir@ -VPATH = @srcdir@ -prefix = @prefix@ - -VERSION=@GUILE_VERSION@ - -datadir=@datadir@ -pkgdatadir=$(datadir)/guile -pkgverdatadir=$(pkgdatadir)/$(VERSION) -subpkgdatadir=$(pkgverdatadir)/@library_name@ -sitedatadir=$(pkgdatadir)/site - -INSTALL = $(srcdir)/../install-sh -c -INSTALL_DATA = $(INSTALL) -m 644 - -scm_files = \ - boot-9.scm \ - debug.scm \ - hcons.scm \ - lineio.scm \ - mapping.scm \ - poe.scm \ - slib.scm \ - tags.scm - -aux_files = \ - .cvsignore \ - COPYING \ - ChangeLog \ - Makefile.in \ - configure \ - configure.in - - -all: - -install: all - for dir in $(datadir) $(pkgdatadir) $(pkgverdatadir) \ - $(subpkgdatadir) $(sitedatadir); do \ - test -d $$dir || mkdir $$dir; \ - done - for file in $(scm_files); do \ - $(INSTALL_DATA) $(srcdir)/$$file $(subpkgdatadir); \ - done - -uninstall: - for file in $(scm_files) ; do \ - rm -f $(subpkgdatadir)/$$file; \ - done; - -rmdir $(subpkgdatadir) - -rmdir $(pkgverdatadir) - -rmdir $(sitedatadir) - -rmdir $(pkgdatadir) - -rmdir $(datadir) - - -# The `dist' target in the top-level Makefile uses this `dist-dir' -# target to select the appropriate files for distribution from the -# directory containing this Makefile. -.PHONY: dist-dir -dist-dir: - mkdir ${DISTDIR} - for f in ${scm_files} ${aux_files}; do \ - ln ${srcdir}/$$f ${DISTDIR}; \ - done - mkdir ${DISTDIR}/PLUGIN - for f in REQ greet split.sed this.configure; do \ - ln ${srcdir}/PLUGIN/$$f ${DISTDIR}/PLUGIN; \ - done - - -clean: - -distclean: - -rm -f config.log config.status Makefile - -realclean: - diff --git a/ice-9/boot-9.scm b/ice-9/boot-9.scm deleted file mode 100644 index 09edb9921..000000000 --- a/ice-9/boot-9.scm +++ /dev/null @@ -1,3602 +0,0 @@ -;;; installed-scm-file - -;;;; Copyright (C) 1995, 1996 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 software; see the file COPYING. If not, write to -;;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -;;;; - - -;;; This file is the first thing loaded into Guile. It adds many mundane -;;; definitions and a few that are interesting. -;;; -;;; The module system (hence the hierarchical namespace) are defined in this -;;; file. -;;; - - - -;; {Simple Debugging Tools} -;; - - -;; peek takes any number of arguments, writes them to the -;; current ouput port, and returns the last argument. -;; It is handy to wrap around an expression to look at -;; a value each time is evaluated, e.g.: -;; -;; (+ 10 (troublesome-fn)) -;; => (+ 10 (pk 'troublesome-fn-returned (troublesome-fn))) -;; - -(define (peek . stuff) - (newline) - (display ";;; ") - (write stuff) - (newline) - (car (last-pair stuff))) - -(define pk peek) - -(define (warn . stuff) - (with-output-to-port (current-error-port) - (lambda () - (newline) - (display ";;; WARNING ") - (display stuff) - (newline) - (car (last-pair stuff))))) - - -;;; {apply and call-with-current-continuation} -;;; -;;; These turn syntax, @apply and @call-with-current-continuation, -;;; into procedures. -;;; - -(set! apply (lambda (fun . args) (@apply fun (apply:nconc2last args)))) -(define (call-with-current-continuation proc) (@call-with-current-continuation proc)) - - - -;;; {apply-to-args} -;;; -;;; apply-to-args is functionally redunant with apply and, worse, -;;; is less general than apply since it only takes two arguments. -;;; -;;; On the other hand, apply-to-args is a syntacticly convenient way to -;;; perform binding in many circumstances when the "let" family of -;;; of forms don't cut it. E.g.: -;;; -;;; (apply-to-args (return-3d-mouse-coords) -;;; (lambda (x y z) -;;; ...)) -;;; - -(define (apply-to-args args fn) (apply fn args)) - - -;;; {Silly Naming Cleanups and Trivial Functions} -;;; - -(define (id x) x) -(define < <?) -(define <= <=?) -(define = =?) -(define > >?) -(define >= >=?) -(define (1+ n) (+ n 1)) -(define (-1+ n) (+ n -1)) -(define 1- -1+) -(define return-it noop) -(define (and=> value thunk) (and value (thunk value))) -(define (make-hash-table k) (make-vector k '())) - -;;; {Integer Math} -;;; - -(define (integer? x) (and (number? x) (= x (inexact->exact x)))) - -(define (ipow-by-squaring x k acc proc) - (cond ((zero? k) acc) - ((= 1 k) (proc acc x)) - (else (logical:ipow-by-squaring (proc x x) - (quotient k 2) - (if (even? k) acc (proc acc x)) - proc)))) - -(define string-character-length string-length) - - - -;; A convenience function for combining flag bits. Like logior, but -;; handles the cases of 0 and 1 arguments. -;; -(define (flags . args) - (cond - ((null? args) 0) - ((null? (cdr args)) (car args)) - (else (apply logior args)))) - - -;;; {Basic Port Code} -;;; -;;; Specificly, the parts of the low-level port code that are written in -;;; Scheme rather than C. -;;; -;;; WARNING: the parts of this interface that refer to file ports -;;; is going away. It would be gone already except that it is used -;;; "internally" in a few places. -;;; - - -;; OPEN_READ, OPEN_WRITE, and OPEN_BOTH are used to request the proper -;; mode to open files in. MSDOS does carraige return - newline -;; translation if not opened in `b' mode. -;; -(define OPEN_READ (case (software-type) - ((MS-DOS WINDOWS ATARIST) "rb") - (else "r"))) -(define OPEN_WRITE (case (software-type) - ((MS-DOS WINDOWS ATARIST) "wb") - (else "w"))) -(define OPEN_BOTH (case (software-type) - ((MS-DOS WINDOWS ATARIST) "r+b") - (else "r+"))) - -(define *null-device* "/dev/null") - -(define (open-input-file str) - (open-file str OPEN_READ)) - -(define (open-output-file str) - (open-file str OPEN_WRITE)) - -(define (open-io-file str) (open-file str OPEN_BOTH)) -(define close-input-port close-port) -(define close-output-port close-port) -(define close-io-port close-port) - -(define (call-with-input-file str proc) - (let* ((file (open-input-file str)) - (ans (proc file))) - (close-input-port file) - ans)) - -(define (call-with-output-file str proc) - (let* ((file (open-output-file str)) - (ans (proc file))) - (close-output-port file) - ans)) - -(define (with-input-from-port port thunk) - (let* ((swaports (lambda () (set! port (set-current-input-port port))))) - (dynamic-wind swaports thunk swaports))) - -(define (with-output-to-port port thunk) - (let* ((swaports (lambda () (set! port (set-current-output-port port))))) - (dynamic-wind swaports thunk swaports))) - -(define (with-error-to-port port thunk) - (let* ((swaports (lambda () (set! port (set-current-error-port port))))) - (dynamic-wind swaports thunk swaports))) - -(define (with-input-from-file file thunk) - (let* ((nport (open-input-file file)) - (ans (with-input-from-port nport thunk))) - (close-port nport) - ans)) - -(define (with-output-to-file file thunk) - (let* ((nport (open-output-file file)) - (ans (with-output-to-port nport thunk))) - (close-port nport) - ans)) - -(define (with-error-to-file file thunk) - (let* ((nport (open-output-file file)) - (ans (with-error-to-port nport thunk))) - (close-port nport) - ans)) - -(define (with-input-from-string string thunk) - (call-with-input-string string - (lambda (p) (with-input-from-port p thunk)))) - -(define (with-output-to-string thunk) - (call-with-output-string - (lambda (p) (with-output-to-port p thunk)))) - -(define (with-error-to-string thunk) - (call-with-output-string - (lambda (p) (with-error-to-port p thunk)))) - -(define the-eof-object (call-with-input-string "" (lambda (p) (read-char p)))) - - - -;;; {Symbol Properties} -;;; - -(define (symbol-property sym prop) - (let ((pair (assoc prop (symbol-pref sym)))) - (and pair (cdr pair)))) - -(define (set-symbol-property! sym prop val) - (let ((pair (assoc prop (symbol-pref sym)))) - (if pair - (set-cdr! pair val) - (symbol-pset! sym (acons prop val (symbol-pref sym)))))) - -(define (symbol-property-remove! sym prop) - (let ((pair (assoc prop (symbol-pref sym)))) - (if pair - (symbol-pset! sym (delq! pair (symbol-pref sym)))))) - - -;;; {Arrays} -;;; - -(begin - (define uniform-vector? array?) - (define make-uniform-vector dimensions->uniform-array) - ; (define uniform-vector-ref array-ref) - (define (uniform-vector-set! u i o) - (uniform-vector-set1! u o i)) - (define uniform-vector-fill! array-fill!) - (define uniform-vector-read! uniform-array-read!) - (define uniform-vector-write uniform-array-write) - - (define (make-array fill . args) - (dimensions->uniform-array args () fill)) - (define (make-uniform-array prot . args) - (dimensions->uniform-array args prot)) - (define (list->array ndim lst) - (list->uniform-array ndim '() lst)) - (define (list->uniform-vector prot lst) - (list->uniform-array 1 prot lst)) - (define (array-shape a) - (map (lambda (ind) (if (number? ind) (list 0 (+ -1 ind)) ind)) - (array-dimensions a)))) - - -;;; {Keywords} -;;; - -(define (symbol->keyword symbol) - (make-keyword-from-dash-symbol (symbol-append '- symbol))) - -(define (keyword->symbol kw) - (let ((sym (keyword-dash-symbol kw))) - (string->symbol (substring sym 1 (length sym))))) - -(define (kw-arg-ref args kw) - (let ((rem (member kw args))) - (and rem (pair? (cdr rem)) (cadr rem)))) - - - -;;; {Print} -;;; MDJ 960919 <djurfeldt@nada.kth.se>: This code will probably be -;;; removed before the first release of Guile. Later releases may -;;; contain more fancy printing code. - -(define (print obj . args) - (let ((default-args (list (current-output-port) 0 0 default-print-style #f))) - (apply-to-args (append args (list-cdr-ref default-args (length args))) - (lambda (port depth length style table) - (cond - ((and table (print-table-ref table obj)) ((print-style-tag-hook style 'eq-val) - obj port depth length style table)) - (else - (and table (print-table-add! table obj)) - (cond - ((print-style-max-depth? style depth) ((print-style-excess-depth-hook style))) - ((print-style-max-length? style length) ((print-style-excess-length-hook style))) - (else ((print-style-hook style obj) - obj port depth length style table))))))))) - -(define (make-print-style) (make-vector 59 '())) - -(define (extend-print-style! style utag printer) (hashq-set! style utag printer)) - -(define (print-style-hook style obj) - (let ((type-tag (tag obj))) - (or (hashq-ref style type-tag) - (hashq-ref style (logand type-tag 255)) - print-obj))) - -(define (print-style-tag-hook style type-tag) - (or (hashq-ref style type-tag) - print-obj)) - -(define (print-style-max-depth? style d) #f) -(define (print-style-max-length? style l) #f) -(define (print-style-excess-length-hook style) (hashq-ref style 'excess-length-hook)) -(define (print-style-excess-depth-hook style) (hashq-ref style 'excess-depth-hook)) - -(define (make-print-table) (make-vector 59 '())) -(define (print-table-ref table obj) (hashq-ref table obj)) -(define (print-table-add! table obj) (hashq-set! table obj (gensym 'ref))) - -(define (print-obj obj port depth length style table) (write obj port)) - -(define (print-pair pair port depth length style table) - (if (= 0 length) - (display #\( port)) - - (print (car pair) port (+ 1 depth) 0 style table) - - (cond - ((and (pair? (cdr pair)) - (or (not table) - (not (print-table-ref table (cdr pair))))) - - (display #\space port) - (print (cdr pair) port depth (+ 1 length) style table)) - - ((null? (cdr pair)) (display #\) port)) - - (else (display " . " port) - (print (cdr pair) port (+ 1 depth) 0 style table) - (display #\) port)))) - -(define (print-vector obj port depth length style table) - (if (= 0 length) - (cond - ((weak-key-hash-table? obj) (display "#wh(" port)) - ((weak-value-hash-table? obj) (display "#whv(" port)) - ((doubly-weak-hash-table? obj) (display "#whd(" port)) - (else (display "#(" port)))) - - (if (< length (vector-length obj)) - (print (vector-ref obj length) port (+ 1 depth) 0 style table)) - - (cond - ((>= (+ 1 length) (vector-length obj)) (display #\) port)) - (else (display #\space port) - (print obj port depth (+ 1 length) style table)))) - -(define default-print-style (make-print-style)) - -(extend-print-style! default-print-style utag_vector print-vector) -(extend-print-style! default-print-style utag_wvect print-vector) -(extend-print-style! default-print-style utag_pair print-pair) -(extend-print-style! default-print-style 'eq-val - (lambda (obj port depth length style table) - (if (symbol? obj) - (display obj) - (begin - (display "##" port) - (display (print-table-ref table obj)))))) - - -;;; {Records} -;;; - -(define record-type-vtable (make-vtable-vtable "prpr" 0)) - -(define (record-type? obj) - (and (struct? obj) (eq? record-type-vtable (struct-vtable obj)))) - -(define (make-record-type type-name fields . opt) - (let ((printer-fn (and (pair? opt) (car opt)))) - (let ((struct (make-struct record-type-vtable 0 - (make-struct-layout (apply symbol-append (map (lambda (f) "pw") fields))) - type-name - (copy-tree fields)))) - ;; !!! leaks printer functions - ;; MDJ 960919 <djurfeldt@nada.kth.se>: *fixme* need to make it - ;; possible to print records nicely. - ;(if printer-fn -; (extend-print-style! default-print-style -; (logior utag_struct_base (ash (struct-vtable-tag struct) 8)) -; printer-fn)) - struct))) - -(define (record-type-name obj) - (if (record-type? obj) - (struct-ref obj struct-vtable-offset) - (error 'not-a-record-type obj))) - -(define (record-type-fields obj) - (if (record-type? obj) - (struct-ref obj (+ 1 struct-vtable-offset)) - (error 'not-a-record-type obj))) - -(define (record-constructor rtd . opt) - (let ((field-names (if (pair? opt) (car opt) (record-type-fields rtd)))) - (eval `(lambda ,field-names - (make-struct ',rtd 0 ,@(map (lambda (f) - (if (memq f field-names) - f - #f)) - (record-type-fields rtd))))))) - -(define (record-predicate rtd) - (lambda (obj) (and (struct? obj) (eq? rtd (struct-vtable obj))))) - -(define (record-accessor rtd field-name) - (let* ((pos (list-index (record-type-fields rtd) field-name))) - (if (not pos) - (error 'no-such-field field-name)) - (eval `(lambda (obj) - (and (eq? ',rtd (record-type-descriptor obj)) - (struct-ref obj ,pos)))))) - -(define (record-modifier rtd field-name) - (let* ((pos (list-index (record-type-fields rtd) field-name))) - (if (not pos) - (error 'no-such-field field-name)) - (eval `(lambda (obj val) - (and (eq? ',rtd (record-type-descriptor obj)) - (struct-set! obj ,pos val)))))) - - -(define (record? obj) - (and (struct? obj) (record-type? (struct-vtable obj)))) - -(define (record-type-descriptor obj) - (if (struct? obj) - (struct-vtable obj) - (error 'not-a-record obj))) - - -;;; {Booleans} -;;; - -(define (->bool x) (not (not x))) - - -;;; {Symbols} -;;; - -(define (symbol-append . args) - (string->symbol (apply string-append args))) - -(define (list->symbol . args) - (string->symbol (apply list->string args))) - -(define (symbol . args) - (string->symbol (apply string args))) - -(define (obarray-symbol-append ob . args) - (string->obarray-symbol (apply string-append ob args))) - -(define obarray-gensym - (let ((n -1)) - (lambda (obarray . opt) - (if (null? opt) - (set! opt '(%%gensym))) - (let loop ((proposed-name (apply string-append opt))) - (if (string->obarray-symbol obarray proposed-name #t) - (loop (apply string-append (append opt (begin (set! n (1+ n)) (list (number->string n)))))) - (string->obarray-symbol obarray proposed-name)))))) - -(define (gensym . args) (apply obarray-gensym #f args)) - - -;;; {Lists} -;;; - -(define (list-index l k) - (let loop ((n 0) - (l l)) - (and (not (null? l)) - (if (eq? (car l) k) - n - (loop (+ n 1) (cdr l)))))) - -(define (make-list n init) - (let loop ((answer '()) - (n n)) - (if (<= n 0) - answer - (loop (cons init answer) (- n 1))))) - - - -;;; {and-map, or-map, and map-in-order} -;;; -;;; (and-map fn lst) is like (and (fn (car lst)) (fn (cadr lst)) (fn...) ...) -;;; (or-map fn lst) is like (or (fn (car lst)) (fn (cadr lst)) (fn...) ...) -;;; (map-in-order fn lst) is like (map fn lst) but definately in order of lst. -;;; - -;; and-map f l -;; -;; Apply f to successive elements of l until exhaustion or f returns #f. -;; If returning early, return #f. Otherwise, return the last value returned -;; by f. If f has never been called because l is empty, return #t. -;; -(define (and-map f lst) - (let loop ((result #t) - (l lst)) - (and result - (or (and (null? l) - result) - (loop (f (car l)) (cdr l)))))) - -;; or-map f l -;; -;; Apply f to successive elements of l until exhaustion or while f returns #f. -;; If returning early, return the return value of f. -;; -(define (or-map f lst) - (let loop ((result #f) - (l lst)) - (or result - (and (not (null? l)) - (loop (f (car l)) (cdr l)))))) - -;; map-in-order -;; -;; Like map, but guaranteed to process the list in order. -;; -(define (map-in-order fn l) - (if (null? l) - '() - (cons (fn (car l)) - (map-in-order fn (cdr l))))) - - -;;; {Files} -;;; !!!! these should be implemented using Tcl commands, not fports. -;;; - -(define (feature? feature) - (and (memq feature *features*) #t)) - -(define file-exists? - (if (feature? 'posix) - (lambda (str) - (access? str F_OK)) - (lambda (str) - (let ((port (catch 'system-error (lambda () (open-file str OPEN_READ)) - (lambda args #f)))) - (if port (begin (close-port port) #t) - #f))))) - -(define file-is-directory? - (if (feature? 'i/o-extensions) - (lambda (str) - (> (logand S_IFDIR - (vector-ref (stat str) 2)) - 0)) - (lambda (str) - (display str) - (newline) - (let ((port (catch 'system-error - (lambda () (open-file (string-append str "/.") - OPEN_READ)) - (lambda args #f)))) - (if port (begin (close-port port) #t) - #f))))) - -(define (has-suffix? str suffix) - (let ((sufl (string-length suffix)) - (sl (string-length str))) - (and (> sl sufl) - (string=? (substring str (- sl sufl) sl) suffix)))) - - -;;; {Error Handling} -;;; - -(define (error . args) - (if (null? args) - (scm-error 'misc-error #f "?" #f #f) - (let loop ((msg "%s") - (rest (cdr args))) - (if (not (null? rest)) - (loop (string-append msg " %S") - (cdr rest)) - (scm-error 'misc-error #f msg args #f))))) - -(define (scm-error key subr message args rest) - (throw key subr message args rest)) - -;; bad-throw is the hook that is called upon a throw to a an unhandled -;; key. If the key has a default handler (a throw-handler-default property), -;; it is applied to the throw. -;; -(define (bad-throw key . args) - (let ((default (symbol-property key 'throw-handler-default))) - (or (and default (apply default key args)) - (apply error "unhandled-exception:" key args)))) - -;; mostly obsolete. -;; A number of internally defined error types were represented -;; as integers. Here is the mapping to symbolic names -;; and error messages. -;; -;(define %%system-errors -; '((-1 UNKNOWN "Unknown error") -; (0 ARGn "Wrong type argument to ") -; (1 ARG1 "Wrong type argument in position 1 to ") -; (2 ARG2 "Wrong type argument in position 2 to ") -; (3 ARG3 "Wrong type argument in position 3 to ") -; (4 ARG4 "Wrong type argument in position 4 to ") -; (5 ARG5 "Wrong type argument in position 5 to ") -; (6 ARG5 "Wrong type argument in position 5 to ") -; (7 ARG5 "Wrong type argument in position 5 to ") -; (8 WNA "Wrong number of arguments to ") -; (9 OVFLOW "Numerical overflow to ") -; (10 OUTOFRANGE "Argument out of range to ") -; (11 NALLOC "Could not allocate to ") -; (12 STACK_OVFLOW "Stack overflow") -; (13 EXIT "Exit (internal error?).") -; (14 HUP_SIGNAL "hang-up") -; (15 INT_SIGNAL "user interrupt") -; (16 FPE_SIGNAL "arithmetic error") -; (17 BUS_SIGNAL "bus error") -; (18 SEGV_SIGNAL "segmentation violation") -; (19 ALRM_SIGNAL "alarm") -; (20 GC_SIGNAL "gc") -; (21 TICK_SIGNAL "tick"))) - - -(define (timer-thunk) #t) -(define (gc-thunk) #t) -(define (alarm-thunk) #t) - -(define (signal-handler n) - (let* ( - ;; these numbers are set in libguile, not the same as those - ;; interned in posix.c for SIGSEGV etc. - ;; - (signal-messages `((14 . "hang-up") - (15 . "user interrupt") - (16 . "arithmetic error") - (17 . "bus error") - (18 . "segmentation violation")))) - (cond - ((= n 21) (unmask-signals) (timer-thunk)) - ((= n 20) (unmask-signals) (gc-thunk)) - ((= n 19) (unmask-signals) (alarm-thunk)) - (else (unmask-signals) - (let ((sig-pair (assoc n signal-messages))) - (scm-error 'error-signal #f - (cdr (or sig-pair - (cons n "Unknown signal: %s"))) - (if sig-pair - #f - (list n)) - (list n))))))) - -(define display-error-message - (lambda (message args port) - (if (or (not (list? args)) - (null? args)) - (display message port) - (let ((len (string-length message))) - (cond ((< len 2) - (display message port)) - ((string=? (substring message 0 2) - "%s") - (display (car args) port) - (display-error-message (substring message 2 len) - (cdr args) - port)) - ((string=? (substring message 0 2) - "%S") - (write (car args) port) - (display-error-message (substring message 2 len) - (cdr args) - port)) - (else - (display (substring message 0 1) - port) - (display-error-message (substring message 1 len) - args - port))))))) - -;; The default handler for built-in error types when thrown by their -;; symbolic names. -(define (%%handle-system-error key . arg-list) - (let ((cep (current-error-port))) - (cond ((not (= (length arg-list) 4)) - (display "ERROR: bad error throw: " cep) - (write arg-list cep)) - (else - (let ((subr (car arg-list)) - (message (cadr arg-list)) - (args (or (caddr arg-list) - '())) - (rest (or (cadddr arg-list) - '()))) - (display "ERROR: " cep) - (cond (subr - (display subr cep) - (display ": " cep))) - (cond ((list? args) - (display-error-message message args cep)) - (else - (display message cep) - (display " (bad message args)" cep)))))) - (newline cep) - (force-output cep) - (throw 'abort key))) - -;; associate error symbols with %%handle-system-error. -(let ((keys '(error-signal system-error numerical-overflow - out-of-range wrong-type-arg - wrong-number-of-args - memory-allocation-error stack-overflow - misc-error))) - (if (memq 'regex *features*) - (set! keys (cons 'regex-error keys))) - (let loop ((keys keys)) - (cond ((not (null? keys)) - (set-symbol-property! (car keys) - 'throw-handler-default - %%handle-system-error) - (loop (cdr keys)))))) - - -(define (getgrnam name) (getgr name)) -(define (getgrgid id) (getgr id)) -(define (gethostbyaddr addr) (gethost addr)) -(define (gethostbyname name) (gethost name)) -(define (getnetbyaddr addr) (getnet addr)) -(define (getnetbyname name) (getnet name)) -(define (getprotobyname name) (getproto name)) -(define (getprotobynumber addr) (getproto addr)) -(define (getpwnam name) (getpw name)) -(define (getpwuid uid) (getpw uid)) -(define (getservbyname name proto) (%getserv name proto)) -(define (getservbyport port proto) (%getserv port proto)) -(define (endgrent) (setgr)) -(define (endhostent) (sethost)) -(define (endnetent) (setnet)) -(define (endprotoent) (setproto)) -(define (endpwent) (setpw)) -(define (endservent) (setserv)) -(define (file-position . args) (apply ftell args)) -(define (file-set-position . args) (apply fseek args)) -(define (getgrent) (getgr)) -(define (gethostent) (gethost)) -(define (getnetent) (getnet)) -(define (getprotoent) (getproto)) -(define (getpwent) (getpw)) -(define (getservent) (getserv)) -(define (reopen-file . args) (apply freopen args)) -(define (setgrent arg) (setgr arg)) -(define (sethostent arg) (sethost arg)) -(define (setnetent arg) (setnet arg)) -(define (setprotoent arg) (setproto arg)) -(define (setpwent arg) (setpw arg)) -(define (setservent arg) (setserv arg)) - -(define (move->fdes port fd) - (primitive-move->fdes port fd) - (set-port-revealed! port 1) - port) - -(define (release-port-handle port) - (let ((revealed (port-revealed port))) - (if (> revealed 0) - (set-port-revealed! port (- revealed 1))))) - - -;;; {Load Paths} -;;; - -;;; Here for backward compatability -;; -(define scheme-file-suffix (lambda () ".scm")) - -(define (in-vicinity vicinity file) - (let ((tail (let ((len (string-length vicinity))) - (if (zero? len) #f - (string-ref vicinity (- len 1)))))) - (string-append vicinity - (if (eq? tail #\/) "" "/") - file))) - - -;;; {try-load} -;;; - -;(define (try-load-with-path file-name path) -; (or-map (lambda (d) -; (let ((f (in-vicinity d file-name))) -; (and (not (file-is-directory? f)) -; (primitive-load f #t read-sharp)))) -; path)) - -(define (try-load name) - (%try-load-path name #t read-sharp)) - - -;;; {Load} -;;; - -(define %load-verbosely #t) -(define (assert-load-verbosity v) (set! %load-verbosely v)) - -(define (%load-announce file) - (if %load-verbosely - (with-output-to-port (current-error-port) - (lambda () - (display ";;; ") - (display "loading ") - (display file) - (newline) - (force-output))))) - -(define (%load-announce-win file) - (if %load-verbosely - (with-output-to-port (current-error-port) - (lambda () - (display ";;; ") - (display "...loaded ") - (display file) - (newline) - (force-output))))) - -;(define (load-with-path name path) -; (define (do-load) -; (%load-announce name) -; (if (not (or-map (lambda (d) -; (if (%load (in-vicinity d name)) -; (begin -; (%load-announce-win (in-vicinity d name)) -; #t) -; #f)) -; path)) -; (scm-error 'misc-error #f "Could not load %S from %S" -; (list name path) #f))) - -; (let ((indent %load-indent)) -; (dynamic-wind -; (lambda () (set! %load-indent (modulo (+ indent 2) 16))) -; do-load -; (lambda () (set! %load-indent indent)))) -; #t) - -(define (load name) - (let* ((full-path-supplied (eq? (string-ref name 0) #\/)) - (full-path - (cond (full-path-supplied - (or (and (file-exists? name) - (not (file-is-directory? name)) - name) - (and (not (has-suffix? name (scheme-file-suffix))) - (let ((name.scm - (string-append name - (scheme-file-suffix)))) - (and (file-exists? name.scm) - (not (file-is-directory? name.scm)) - name.scm))))) - (else - ;; we find name before name.scm even if the latter - ;; occurs earlier in %load-path (?). - (or (%search-load-path name) - (and (not (has-suffix? name (scheme-file-suffix))) - (%search-load-path (string-append - name - (scheme-file-suffix))))))))) - (cond (full-path - (%load-announce full-path) - (primitive-load full-path #t read-sharp)) - (else - (if full-path-supplied - (scm-error 'misc-error "load" "Unable to find file %S" - (list name) #f) - (scm-error 'misc-error "load" "Unable to find file %S in %S" - (list name %load-path) #f)))))) - - -;;; {Transcendental Functions} -;;; -;;; Derived from "Transcen.scm", Complex trancendental functions for SCM. -;;; Copyright (C) 1992, 1993 Jerry D. Hedden. -;;; See the file `COPYING' for terms applying to this program. -;;; - -(define (exp z) - (if (real? z) ($exp z) - (make-polar ($exp (real-part z)) (imag-part z)))) - -(define (log z) - (if (and (real? z) (>= z 0)) - ($log z) - (make-rectangular ($log (magnitude z)) (angle z)))) - -(define (sqrt z) - (if (real? z) - (if (negative? z) (make-rectangular 0 ($sqrt (- z))) - ($sqrt z)) - (make-polar ($sqrt (magnitude z)) (/ (angle z) 2)))) - -(define expt - (let ((integer-expt integer-expt)) - (lambda (z1 z2) - (cond ((exact? z2) - (integer-expt z1 z2)) - ((and (real? z2) (real? z1) (>= z1 0)) - ($expt z1 z2)) - (else - (exp (* z2 (log z1)))))))) - -(define (sinh z) - (if (real? z) ($sinh z) - (let ((x (real-part z)) (y (imag-part z))) - (make-rectangular (* ($sinh x) ($cos y)) - (* ($cosh x) ($sin y)))))) -(define (cosh z) - (if (real? z) ($cosh z) - (let ((x (real-part z)) (y (imag-part z))) - (make-rectangular (* ($cosh x) ($cos y)) - (* ($sinh x) ($sin y)))))) -(define (tanh z) - (if (real? z) ($tanh z) - (let* ((x (* 2 (real-part z))) - (y (* 2 (imag-part z))) - (w (+ ($cosh x) ($cos y)))) - (make-rectangular (/ ($sinh x) w) (/ ($sin y) w))))) - -(define (asinh z) - (if (real? z) ($asinh z) - (log (+ z (sqrt (+ (* z z) 1)))))) - -(define (acosh z) - (if (and (real? z) (>= z 1)) - ($acosh z) - (log (+ z (sqrt (- (* z z) 1)))))) - -(define (atanh z) - (if (and (real? z) (> z -1) (< z 1)) - ($atanh z) - (/ (log (/ (+ 1 z) (- 1 z))) 2))) - -(define (sin z) - (if (real? z) ($sin z) - (let ((x (real-part z)) (y (imag-part z))) - (make-rectangular (* ($sin x) ($cosh y)) - (* ($cos x) ($sinh y)))))) -(define (cos z) - (if (real? z) ($cos z) - (let ((x (real-part z)) (y (imag-part z))) - (make-rectangular (* ($cos x) ($cosh y)) - (- (* ($sin x) ($sinh y))))))) -(define (tan z) - (if (real? z) ($tan z) - (let* ((x (* 2 (real-part z))) - (y (* 2 (imag-part z))) - (w (+ ($cos x) ($cosh y)))) - (make-rectangular (/ ($sin x) w) (/ ($sinh y) w))))) - -(define (asin z) - (if (and (real? z) (>= z -1) (<= z 1)) - ($asin z) - (* -i (asinh (* +i z))))) - -(define (acos z) - (if (and (real? z) (>= z -1) (<= z 1)) - ($acos z) - (+ (/ (angle -1) 2) (* +i (asinh (* +i z)))))) - -(define (atan z . y) - (if (null? y) - (if (real? z) ($atan z) - (/ (log (/ (- +i z) (+ +i z))) +2i)) - ($atan2 z (car y)))) - -(set! abs magnitude) - - -;;; {User Settable Hooks} -;;; -;;; Parts of the C code check the bindings of these variables. -;;; - -(define ticks-interrupt #f) -(define user-interrupt #f) -(define alarm-interrupt #f) -(define out-of-storage #f) -(define could-not-open #f) -(define end-of-program #f) -(define hang-up #f) -(define arithmetic-error #f) -(define read-sharp #f) - - - -;;; {Reader Extensions} -;;; - -;;; Reader code for various "#c" forms. -;;; - -(define (parse-path-symbol s) - (define (seperate-fields-discarding-char ch str ret) - (let loop ((fields '()) - (str str)) - (cond - ((string-rindex str ch) - => (lambda (pos) (loop (cons (make-shared-substring str (+ 1 pos)) fields) - (make-shared-substring str 0 pos)))) - (else (ret (cons str fields)))))) - (seperate-fields-discarding-char #\/ - s - (lambda (fields) - (map string->symbol fields)))) - - -(define (%read-sharp c port) - (define (barf) - (error "unknown # object" c)) - - (case c - ((#\/) (let ((look (peek-char port))) - (if (or (eof-object? look) - (and (char? look) - (or (char-whitespace? look) - (string-index ")" look)))) - '() - (parse-path-symbol (read port #t read-sharp))))) - ((#\') (read port #t read-sharp)) - ((#\.) (eval (read port #t read-sharp))) - ((#\b) (read:uniform-vector #t port)) - ((#\a) (read:uniform-vector #\a port)) - ((#\u) (read:uniform-vector 1 port)) - ((#\e) (read:uniform-vector -1 port)) - ((#\s) (read:uniform-vector 1.0 port)) - ((#\i) (read:uniform-vector 1/3 port)) - ((#\c) (read:uniform-vector 0+i port)) - ((#\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9) - (read:array c port)) - ((#\!) (if (= 1 (port-line port)) ; (line-number)) - (let skip () (if (eq? #\newline (peek-char port)) - (read port #t read-sharp) - (begin (read-char port) (skip)))) - (barf))) - (else (barf)))) - -(define (read:array digit port) - (define chr0 (char->integer #\0)) - (let ((rank (let readnum ((val (- (char->integer digit) chr0))) - (if (char-numeric? (peek-char port)) - (readnum (+ (* 10 val) - (- (char->integer (read-char port)) chr0))) - val))) - (prot (if (eq? #\( (peek-char port)) - '() - (let ((c (read-char port))) - (case c ((#\b) #t) - ((#\a) #\a) - ((#\u) 1) - ((#\e) -1) - ((#\s) 1.0) - ((#\i) 1/3) - ((#\c) 0+i) - (else (error "read:array unknown option " c))))))) - (if (eq? (peek-char port) #\() - (list->uniform-array rank prot (read port #t read-sharp)) - (error "read:array list not found")))) - -(define (read:uniform-vector proto port) - (if (eq? #\( (peek-char port)) - (list->uniform-array 1 proto (read port #t read-sharp)) - (error "read:uniform-vector list not found"))) - - -(define read-sharp (lambda a (apply %read-sharp a))) - - - -;;; {Dynamic Roots} -;;; - -; mystery integers passed dynamic root error handlers -(define repl-quit -1) -(define repl-abort -2) - - - -;;; {Command Line Options} -;;; - -(define (get-option argv kw-opts kw-args return) - (cond - ((null? argv) - (return #f #f argv)) - - ((or (not (eq? #\- (string-ref (car argv) 0))) - (eq? (string-length (car argv)) 1)) - (return 'normal-arg (car argv) (cdr argv))) - - ((eq? #\- (string-ref (car argv) 1)) - (let* ((kw-arg-pos (or (string-index (car argv) #\=) - (string-length (car argv)))) - (kw (symbol->keyword (substring (car argv) 2 kw-arg-pos))) - (kw-opt? (member kw kw-opts)) - (kw-arg? (member kw kw-args)) - (arg (or (and (not (eq? kw-arg-pos (string-length (car argv)))) - (substring (car argv) - (+ kw-arg-pos 1) - (string-length (car argv)))) - (and kw-arg? - (begin (set! argv (cdr argv)) (car argv)))))) - (if (or kw-opt? kw-arg?) - (return kw arg (cdr argv)) - (return 'usage-error kw (cdr argv))))) - - (else - (let* ((char (substring (car argv) 1 2)) - (kw (symbol->keyword char))) - (cond - - ((member kw kw-opts) - (let* ((rest-car (substring (car argv) 2 (string-length (car argv)))) - (new-argv (if (= 0 (string-length rest-car)) - (cdr argv) - (cons (string-append "-" rest-car) (cdr argv))))) - (return kw #f new-argv))) - - ((member kw kw-args) - (let* ((rest-car (substring (car argv) 2 (string-length (car argv)))) - (arg (if (= 0 (string-length rest-car)) - (cadr argv) - rest-car)) - (new-argv (if (= 0 (string-length rest-car)) - (cddr argv) - (cdr argv)))) - (return kw arg new-argv))) - - (else (return 'usage-error kw argv))))))) - -(define (for-next-option proc argv kw-opts kw-args) - (let loop ((argv argv)) - (get-option argv kw-opts kw-args - (lambda (opt opt-arg argv) - (and opt (proc opt opt-arg argv loop)))))) - -(define (display-usage-report kw-desc) - (for-each - (lambda (kw) - (or (eq? (car kw) #t) - (eq? (car kw) 'else) - (let* ((opt-desc kw) - (help (cadr opt-desc)) - (opts (car opt-desc)) - (opts-proper (if (string? (car opts)) (cdr opts) opts)) - (arg-name (if (string? (car opts)) - (string-append "<" (car opts) ">") - "")) - (left-part (string-append - (with-output-to-string - (lambda () - (map (lambda (x) (display (keyword-symbol x)) (display " ")) - opts-proper))) - arg-name)) - (middle-part (if (and (< (length left-part) 30) - (< (length help) 40)) - (make-string (- 30 (length left-part)) #\ ) - "\n\t"))) - (display left-part) - (display middle-part) - (display help) - (newline)))) - kw-desc)) - - - -(define (delq-all! obj l) - (let ((answer (cons '() l))) - (let loop ((pos answer)) - (cond - ((null? (cdr pos)) (cdr answer)) - ((eq? (cadr pos) obj) (set-cdr! pos (cddr pos)) - (loop pos)) - (else (loop (cdr pos))))))) - -(define (transform-usage-lambda cases) - (let* ((raw-usage (delq! 'else (map car cases))) - (usage-sans-specials (map (lambda (x) - (or (and (not (list? x)) x) - (and (symbol? (car x)) #t) - (and (boolean? (car x)) #t) - x)) - raw-usage)) - (usage-desc (delq-all! #t usage-sans-specials)) - (kw-desc (map car usage-desc)) - (kw-opts (apply append (map (lambda (x) (and (not (string? (car x))) x)) kw-desc))) - (kw-args (apply append (map (lambda (x) (and (string? (car x)) (cdr x))) kw-desc))) - (transmogrified-cases (map (lambda (case) - (cons (let ((opts (car case))) - (if (or (boolean? opts) (eq? 'else opts)) - opts - (cond - ((symbol? (car opts)) opts) - ((boolean? (car opts)) opts) - ((string? (caar opts)) (cdar opts)) - (else (car opts))))) - (cdr case))) - cases))) - `(let ((%display-usage (lambda () (display-usage-report ',usage-desc)))) - (lambda (%argv) - (let %next-arg ((%argv %argv)) - (get-option %argv - ',kw-opts - ',kw-args - (lambda (%opt %arg %new-argv) - (case %opt - ,@ transmogrified-cases)))))))) - - - - -;;; {Low Level Modules} -;;; -;;; These are the low level data structures for modules. -;;; -;;; !!! warning: The interface to lazy binder procedures is going -;;; to be changed in an incompatible way to permit all the basic -;;; module ops to be virtualized. -;;; -;;; (make-module size use-list lazy-binding-proc) => module -;;; module-{obarray,uses,binder}[|-set!] -;;; (module? obj) => [#t|#f] -;;; (module-locally-bound? module symbol) => [#t|#f] -;;; (module-bound? module symbol) => [#t|#f] -;;; (module-symbol-locally-interned? module symbol) => [#t|#f] -;;; (module-symbol-interned? module symbol) => [#t|#f] -;;; (module-local-variable module symbol) => [#<variable ...> | #f] -;;; (module-variable module symbol) => [#<variable ...> | #f] -;;; (module-symbol-binding module symbol opt-value) -;;; => [ <obj> | opt-value | an error occurs ] -;;; (module-make-local-var! module symbol) => #<variable...> -;;; (module-add! module symbol var) => unspecified -;;; (module-remove! module symbol) => unspecified -;;; (module-for-each proc module) => unspecified -;;; (make-scm-module) => module ; a lazy copy of the symhash module -;;; (set-current-module module) => unspecified -;;; (current-module) => #<module...> -;;; -;;; - - -;; This is how modules are printed. -;; You can re-define it. -;; -(define (%print-module mod port depth length style table) - (display "#<" port) - (display (or (module-kind mod) "module") port) - (let ((name (module-name mod))) - (if name - (begin - (display " " port) - (display name port)))) - (display " " port) - (display (number->string (object-address mod) 16) port) - (display ">" port)) - -;; module-type -;; -;; A module is characterized by an obarray in which local symbols -;; are interned, a list of modules, "uses", from which non-local -;; bindings can be inherited, and an optional lazy-binder which -;; is a (THUNK module symbol) which, as a last resort, can provide -;; bindings that would otherwise not be found locally in the module. -;; -(define module-type - (make-record-type 'module '(obarray uses binder eval-thunk name kind) %print-module)) - -;; make-module &opt size uses -;; -;; Create a new module, perhaps with a particular size of obarray -;; or initial uses list. -;; -(define module-constructor (record-constructor module-type)) - -(define make-module - (lambda args - (let* ((size 1021) - (uses '()) - (binder #f) - (answer #f) - (eval-thunk - (lambda (symbol define?) - (if define? - (module-make-local-var! answer symbol) - (module-variable answer symbol))))) - - (if (> (length args) 0) - (begin - (set! size (or (car args) size)) - (set! args (cdr args)))) - - (if (> (length args) 0) - (begin - (set! uses (or (car args) uses)) - (set! args (cdr args)))) - - (if (> (length args) 0) - (begin - (set! binder (or (car args) binder)) - (set! args (cdr args)))) - - (if (not (null? args)) - (error "Too many args to make-module." args)) - - (if (not (integer? size)) - (error "Illegal size to make-module." size)) - - (and (list? uses) - (or (and-map module? uses) - (error "Incorrect use list." uses))) - - (if (and binder (not (procedure? binder))) - (error - "Lazy-binder expected to be a procedure or #f." binder)) - - (set! answer - (module-constructor (make-vector size '()) - uses - binder - eval-thunk - #f - #f)) - answer))) - -(define module-obarray (record-accessor module-type 'obarray)) -(define set-module-obarray! (record-modifier module-type 'obarray)) -(define module-uses (record-accessor module-type 'uses)) -(define set-module-uses! (record-modifier module-type 'uses)) -(define module-binder (record-accessor module-type 'binder)) -(define set-module-binder! (record-modifier module-type 'binder)) -(define module-eval-thunk (record-accessor module-type 'eval-thunk)) -(define set-module-eval-thunk! (record-modifier module-type 'eval-thunk)) -(define module-name (record-accessor module-type 'name)) -(define set-module-name! (record-modifier module-type 'name)) -(define module-kind (record-accessor module-type 'kind)) -(define set-module-kind! (record-modifier module-type 'kind)) -(define module? (record-predicate module-type)) - -(define (eval-in-module exp module) - (eval2 exp (module-eval-thunk module))) - - -;;; {Module Searching in General} -;;; -;;; We sometimes want to look for properties of a symbol -;;; just within the obarray of one module. If the property -;;; holds, then it is said to hold ``locally'' as in, ``The symbol -;;; DISPLAY is locally rebound in the module `safe-guile'.'' -;;; -;;; -;;; Other times, we want to test for a symbol property in the obarray -;;; of M and, if it is not found there, try each of the modules in the -;;; uses list of M. This is the normal way of testing for some -;;; property, so we state these properties without qualification as -;;; in: ``The symbol 'fnord is interned in module M because it is -;;; interned locally in module M2 which is a member of the uses list -;;; of M.'' -;;; - -;; module-search fn m -;; -;; return the first non-#f result of FN applied to M and then to -;; the modules in the uses of m, and so on recursively. If all applications -;; return #f, then so does this function. -;; -(define (module-search fn m v) - (define (loop pos) - (and (pair? pos) - (or (module-search fn (car pos) v) - (loop (cdr pos))))) - (or (fn m v) - (loop (module-uses m)))) - - -;;; {Is a symbol bound in a module?} -;;; -;;; Symbol S in Module M is bound if S is interned in M and if the binding -;;; of S in M has been set to some well-defined value. -;;; - -;; module-locally-bound? module symbol -;; -;; Is a symbol bound (interned and defined) locally in a given module? -;; -(define (module-locally-bound? m v) - (let ((var (module-local-variable m v))) - (and var - (variable-bound? var)))) - -;; module-bound? module symbol -;; -;; Is a symbol bound (interned and defined) anywhere in a given module -;; or its uses? -;; -(define (module-bound? m v) - (module-search module-locally-bound? m v)) - -;;; {Is a symbol interned in a module?} -;;; -;;; Symbol S in Module M is interned if S occurs in -;;; of S in M has been set to some well-defined value. -;;; -;;; It is possible to intern a symbol in a module without providing -;;; an initial binding for the corresponding variable. This is done -;;; with: -;;; (module-add! module symbol (make-undefined-variable)) -;;; -;;; In that case, the symbol is interned in the module, but not -;;; bound there. The unbound symbol shadows any binding for that -;;; symbol that might otherwise be inherited from a member of the uses list. -;;; - -(define (module-obarray-get-handle ob key) - ((if (symbol? key) hashq-get-handle hash-get-handle) ob key)) - -(define (module-obarray-ref ob key) - ((if (symbol? key) hashq-ref hash-ref) ob key)) - -(define (module-obarray-set! ob key val) - ((if (symbol? key) hashq-set! hash-set!) ob key val)) - -(define (module-obarray-remove! ob key) - ((if (symbol? key) hashq-remove! hash-remove!) ob key)) - -;; module-symbol-locally-interned? module symbol -;; -;; is a symbol interned (not neccessarily defined) locally in a given module -;; or its uses? Interned symbols shadow inherited bindings even if -;; they are not themselves bound to a defined value. -;; -(define (module-symbol-locally-interned? m v) - (not (not (module-obarray-get-handle (module-obarray m) v)))) - -;; module-symbol-interned? module symbol -;; -;; is a symbol interned (not neccessarily defined) anywhere in a given module -;; or its uses? Interned symbols shadow inherited bindings even if -;; they are not themselves bound to a defined value. -;; -(define (module-symbol-interned? m v) - (module-search module-symbol-locally-interned? m v)) - - -;;; {Mapping modules x symbols --> variables} -;;; - -;; module-local-variable module symbol -;; return the local variable associated with a MODULE and SYMBOL. -;; -;;; This function is very important. It is the only function that can -;;; return a variable from a module other than the mutators that store -;;; new variables in modules. Therefore, this function is the location -;;; of the "lazy binder" hack. -;;; -;;; If symbol is defined in MODULE, and if the definition binds symbol -;;; to a variable, return that variable object. -;;; -;;; If the symbols is not found at first, but the module has a lazy binder, -;;; then try the binder. -;;; -;;; If the symbol is not found at all, return #f. -;;; -(define (module-local-variable m v) -; (caddr -; (list m v - (let ((b (module-obarray-ref (module-obarray m) v))) - (or (and (variable? b) b) - (and (module-binder m) - ((module-binder m) m v #f))))) -;)) - -;; module-variable module symbol -;; -;; like module-local-variable, except search the uses in the -;; case V is not found in M. -;; -(define (module-variable m v) - (module-search module-local-variable m v)) - - -;;; {Mapping modules x symbols --> bindings} -;;; -;;; These are similar to the mapping to variables, except that the -;;; variable is dereferenced. -;;; - -;; module-symbol-binding module symbol opt-value -;; -;; return the binding of a variable specified by name within -;; a given module, signalling an error if the variable is unbound. -;; If the OPT-VALUE is passed, then instead of signalling an error, -;; return OPT-VALUE. -;; -(define (module-symbol-local-binding m v . opt-val) - (let ((var (module-local-variable m v))) - (if var - (variable-ref var) - (if (not (null? opt-val)) - (car opt-val) - (error "Locally unbound variable." v))))) - -;; module-symbol-binding module symbol opt-value -;; -;; return the binding of a variable specified by name within -;; a given module, signalling an error if the variable is unbound. -;; If the OPT-VALUE is passed, then instead of signalling an error, -;; return OPT-VALUE. -;; -(define (module-symbol-binding m v . opt-val) - (let ((var (module-variable m v))) - (if var - (variable-ref var) - (if (not (null? opt-val)) - (car opt-val) - (error "Unbound variable." v))))) - - - -;;; {Adding Variables to Modules} -;;; -;;; - - -;; module-make-local-var! module symbol -;; -;; ensure a variable for V in the local namespace of M. -;; If no variable was already there, then create a new and uninitialzied -;; variable. -;; -(define (module-make-local-var! m v) - (or (let ((b (module-obarray-ref (module-obarray m) v))) - (and (variable? b) b)) - (and (module-binder m) - ((module-binder m) m v #t)) - (begin - (let ((answer (make-undefined-variable v))) - (module-obarray-set! (module-obarray m) v answer) - answer)))) - -;; module-add! module symbol var -;; -;; ensure a particular variable for V in the local namespace of M. -;; -(define (module-add! m v var) - (if (not (variable? var)) - (error "Bad variable to module-add!" var)) - (module-obarray-set! (module-obarray m) v var)) - -;; module-remove! -;; -;; make sure that a symbol is undefined in the local namespace of M. -;; -(define (module-remove! m v) - (module-obarray-remove! (module-obarray m) v)) - -(define (module-clear! m) - (vector-fill! (module-obarray m) '())) - -;; MODULE-FOR-EACH -- exported -;; -;; Call PROC on each symbol in MODULE, with arguments of (SYMBOL VARIABLE). -;; -(define (module-for-each proc module) - (let ((obarray (module-obarray module))) - (do ((index 0 (+ index 1)) - (end (vector-length obarray))) - ((= index end)) - (for-each - (lambda (bucket) - (proc (car bucket) (cdr bucket))) - (vector-ref obarray index))))) - - -(define (module-map proc module) - (let* ((obarray (module-obarray module)) - (end (vector-length obarray))) - - (let loop ((i 0) - (answer '())) - (if (= i end) - answer - (loop (+ 1 i) - (append! - (map (lambda (bucket) - (proc (car bucket) (cdr bucket))) - (vector-ref obarray i)) - answer)))))) - - -;;; {Low Level Bootstrapping} -;;; - -;; make-root-module - -:; A root module uses the symhash table (the system's privileged -;; obarray). Being inside a root module is like using SCM without -;; any module system. -;; - - -(define (root-module-thunk m s define?) - (let ((bi (and (symbol-interned? #f s) - (builtin-variable s)))) - (and bi - (or define? (variable-bound? bi)) - (begin - (module-add! m s bi) - bi)))) - -(define (make-root-module) - (make-module 1019 #f root-module-thunk)) - - -;; make-scm-module - -;; An scm module is a module into which the lazy binder copies -;; variable bindings from the system symhash table. The mapping is -;; one way only; newly introduced bindings in an scm module are not -;; copied back into the system symhash table (and can be used to override -;; bindings from the symhash table). -;; - -(define (make-scm-module) - (make-module 1019 #f - (lambda (m s define?) - (let ((bi (and (symbol-interned? #f s) - (builtin-variable s)))) - (and bi - (variable-bound? bi) - (begin - (module-add! m s bi) - bi)))))) - - - - -;; the-module -;; -(define the-module #f) - -;; set-current-module module -;; -;; set the current module as viewed by the normalizer. -;; -(define (set-current-module m) - (set! the-module m) - (if m - (set! *top-level-lookup-thunk* (module-eval-thunk the-module)) - (set! *top-level-lookup-thunk* #f))) - - -;; current-module -;; -;; return the current module as viewed by the normalizer. -;; -(define (current-module) the-module) - -;;; {Module-based Loading} -;;; - -(define (save-module-excursion thunk) - (let ((inner-module (current-module)) - (outer-module #f)) - (dynamic-wind (lambda () - (set! outer-module (current-module)) - (set-current-module inner-module) - (set! inner-module #f)) - thunk - (lambda () - (set! inner-module (current-module)) - (set-current-module outer-module) - (set! outer-module #f))))) - -(define basic-try-load try-load) -(define basic-load load) - -;;(define (try-load-module-with-path . args) -;; (save-module-excursion (lambda () (apply basic-try-load-with-path args)))) - -(define (try-load-module . args) - (save-module-excursion (lambda () (apply basic-try-load args)))) - -;;(define (load-module-with-path . args) -;; (save-module-excursion (lambda () (apply basic-load-with-path args)))) - -(define (load-module . args) - (save-module-excursion (lambda () (apply basic-load args)))) - - - - -;; MODULE-REF -- exported -;; -;; Returns the value of a variable called NAME in MODULE or any of its -;; used modules. If there is no such variable, then if the optional third -;; argument DEFAULT is present, it is returned; otherwise an error is signaled. -;; -(define (module-ref module name . rest) - (let ((variable (module-variable module name))) - (if (and variable (variable-bound? variable)) - (variable-ref variable) - (if (null? rest) - (error "No variable named" name 'in module) - (car rest) ; default value - )))) - -;; MODULE-SET! -- exported -;; -;; Sets the variable called NAME in MODULE (or in a module that MODULE uses) -;; to VALUE; if there is no such variable, an error is signaled. -;; -(define (module-set! module name value) - (let ((variable (module-variable module name))) - (if variable - (variable-set! variable value) - (error "No variable named" name 'in module)))) - -;; MODULE-DEFINE! -- exported -;; -;; Sets the variable called NAME in MODULE to VALUE; if there is no such -;; variable, it is added first. -;; -(define (module-define! module name value) - (let ((variable (module-local-variable module name))) - (if variable - (variable-set! variable value) - (module-add! module name (make-variable value name))))) - -;; MODULE-USE! module interface -;; -;; Add INTERFACE to the list of interfaces used by MODULE. -;; -(define (module-use! module interface) - (set-module-uses! module - (cons interface (delq! interface (module-uses module))))) - - - - -;;;; -;;; {Recursive Namespaces} -;;; -;;; -;;; A hierarchical namespace emerges if we consider some module to be -;;; root, and variables bound to modules as nested namespaces. -;;; -;;; The routines in this file manage variable names in hierarchical namespace. -;;; Each variable name is a list of elements, looked up in successively nested -;;; modules. -;;; -;;; (nested-ref some-root-module '(foo bar baz)) -;;; => <value of a variable named baz in the module bound to bar in -;;; the module bound to foo in some-root-module> -;;; -;;; -;;; There are: -;;; -;;; ;; a-root is a module -;;; ;; name is a list of symbols -;;; -;;; nested-ref a-root name -;;; nested-set! a-root name val -;;; nested-define! a-root name val -;;; nested-remove! a-root name -;;; -;;; -;;; (current-module) is a natural choice for a-root so for convenience there are -;;; also: -;;; -;;; local-ref name == nested-ref (current-module) name -;;; local-set! name val == nested-set! (current-module) name val -;;; local-define! name val == nested-define! (current-module) name val -;;; local-remove! name == nested-remove! (current-module) name -;;; - - -(define (nested-ref root names) - (let loop ((cur root) - (elts names)) - (cond - ((null? elts) cur) - ((not (module? cur)) #f) - (else (loop (module-ref cur (car elts) #f) (cdr elts)))))) - -(define (nested-set! root names val) - (let loop ((cur root) - (elts names)) - (if (null? (cdr elts)) - (module-set! cur (car elts) val) - (loop (module-ref cur (car elts)) (cdr elts))))) - -(define (nested-define! root names val) - (let loop ((cur root) - (elts names)) - (if (null? (cdr elts)) - (module-define! cur (car elts) val) - (loop (module-ref cur (car elts)) (cdr elts))))) - -(define (nested-remove! root names) - (let loop ((cur root) - (elts names)) - (if (null? (cdr elts)) - (module-remove! cur (car elts)) - (loop (module-ref cur (car elts)) (cdr elts))))) - -(define (local-ref names) (nested-ref (current-module) names)) -(define (local-set! names val) (nested-set! (current-module) names val)) -(define (local-define names val) (nested-define! (current-module) names val)) -(define (local-remove names) (nested-remove! (current-module) names)) - - - - -;;;; -;;; #/app -;;; -;;; The root of conventionally named objects not directly in the top level. -;;; -;;; #/app/modules -;;; #/app/modules/guile -;;; -;;; The directory of all modules and the standard root module. -;;; - -(define (module-public-interface m) (module-ref m '%module-public-interface #f)) -(define (set-module-public-interface! m i) (module-define! m '%module-public-interface i)) -(define the-root-module (make-root-module)) -(define the-scm-module (make-scm-module)) -(set-module-public-interface! the-root-module the-scm-module) -(set-module-name! the-root-module 'the-root-module) -(set-module-name! the-scm-module 'the-scm-module) - -(set-current-module the-root-module) - -(define app (make-module 31)) -(local-define '(app modules) (make-module 31)) -(local-define '(app modules guile) the-root-module) - -;; (define-special-value '(app modules new-ws) (lambda () (make-scm-module))) - -(define (resolve-module name) - (let ((full-name (append '(app modules) name))) - (let ((already (local-ref full-name))) - (or already - (begin - (try-module-autoload name) - (make-modules-in (current-module) full-name)))))) - -(define (beautify-user-module! module) - (if (not (module-public-interface module)) - (let ((interface (make-module 31))) - (set-module-name! interface (module-name module)) - (set-module-kind! interface 'interface) - (set-module-public-interface! module interface))) - (if (not (memq the-scm-module (module-uses module))) - (set-module-uses! module (append (module-uses module) (list the-scm-module))))) - -(define (make-modules-in module name) - (if (null? name) - module - (cond - ((module-ref module (car name) #f) => (lambda (m) (make-modules-in m (cdr name)))) - (else (let ((m (make-module 31))) - (set-module-kind! m 'directory) - (set-module-name! m (car name)) - (module-define! module (car name) m) - (make-modules-in m (cdr name))))))) - -(define (resolve-interface name) - (let ((module (resolve-module name))) - (and module (module-public-interface module)))) - - -(define %autoloader-developer-mode #t) - -(define (process-define-module args) - (let* ((module-id (car args)) - (module (resolve-module module-id)) - (kws (cdr args))) - (beautify-user-module! module) - (let loop ((kws kws)) - (and (not (null? kws)) - (case (car kws) - ((:use-module) - (if (not (pair? (cdr kws))) - (error "unrecognized defmodule argument" kws)) - (let* ((used-name (cadr kws)) - (used-module (resolve-module used-name))) - (if (not (module-ref used-module '%module-public-interface #f)) - (begin - ((if %autoloader-developer-mode warn error) "no code for module" used-module) - (beautify-user-module! used-module))) - (let ((interface (module-ref used-module '%module-public-interface #f))) - (if (not interface) - (error "missing interface for use-module" used-module)) - (set-module-uses! module - (append! (delq! interface (module-uses module)) - (list interface))))) - (loop (cddr kws))) - - (else (error "unrecognized defmodule argument" kws))))) - module)) - - -(define autoloads-in-progress '()) - -(define (try-module-autoload module-name) - - (define (sfx name) (string-append name (scheme-file-suffix))) - (let* ((reverse-name (reverse module-name)) - (name (car reverse-name)) - (dir-hint-module-name (reverse (cdr reverse-name))) - (dir-hint (apply symbol-append (map (lambda (elt) (symbol-append elt "/")) dir-hint-module-name)))) - (resolve-module dir-hint-module-name) - (and (not (autoload-done-or-in-progress? dir-hint name)) - (let ((didit #f)) - (dynamic-wind - (lambda () (autoload-in-progress! dir-hint name)) - (lambda () - (let loop ((dirs %load-path)) - (and (not (null? dirs)) - (or - (let ((d (car dirs)) - (trys (list - dir-hint - (sfx dir-hint) - (in-vicinity dir-hint name) - (in-vicinity dir-hint (sfx name))))) - (and (or-map (lambda (f) - (let ((full (in-vicinity d f))) - full - (and (file-exists? full) - (not (file-is-directory? full)) - (begin - (save-module-excursion - (lambda () - (load (string-append - d "/" f)))) - #t)))) - trys) - (begin - (set! didit #t) - #t))) - (loop (cdr dirs)))))) - (lambda () (set-autoloaded! dir-hint name didit))) - didit)))) - -(define autoloads-done '((guile . guile))) - -(define (autoload-done-or-in-progress? p m) - (let ((n (cons p m))) - (->bool (or (member n autoloads-done) - (member n autoloads-in-progress))))) - -(define (autoload-done! p m) - (let ((n (cons p m))) - (set! autoloads-in-progress - (delete! n autoloads-in-progress)) - (or (member n autoloads-done) - (set! autoloads-done (cons n autoloads-done))))) - -(define (autoload-in-progress! p m) - (let ((n (cons p m))) - (set! autoloads-done - (delete! n autoloads-done)) - (set! autoloads-in-progress (cons n autoloads-in-progress)))) - -(define (set-autoloaded! p m done?) - (if done? - (autoload-done! p m) - (let ((n (cons p m))) - (set! autoloads-done (delete! n autoloads-done)) - (set! autoloads-in-progress (delete! n autoloads-in-progress))))) - - - - - -;;; {Macros} -;;; - -(define macro-table (make-weak-key-hash-table 523)) -(define xformer-table (make-weak-key-hash-table 523)) - -(define (defmacro? m) (hashq-ref macro-table m)) -(define (assert-defmacro?! m) (hashq-set! macro-table m #t)) -(define (defmacro-transformer m) (hashq-ref xformer-table m)) -(define (set-defmacro-transformer! m t) (hashq-set! xformer-table m t)) - -(define defmacro:transformer - (lambda (f) - (let* ((xform (lambda (exp env) - (copy-tree (apply f (cdr exp))))) - (a (procedure->memoizing-macro xform))) - (assert-defmacro?! a) - (set-defmacro-transformer! a f) - a))) - - -(define defmacro - (let ((defmacro-transformer - (lambda (name parms . body) - (let ((transformer `(lambda ,parms ,@body))) - `(define ,name - (,(lambda (transformer) - (defmacro:transformer transformer)) - ,transformer)))))) - (defmacro:transformer defmacro-transformer))) - -(define defmacro:syntax-transformer - (lambda (f) - (procedure->syntax - (lambda (exp env) - (copy-tree (apply f (cdr exp))))))) - -(define (macroexpand-1 e) - (cond - ((pair? e) (let* ((a (car e)) - (val (and (symbol? a) (eval `(defined? ,a)) (eval a)))) - (if (defmacro? val) - (apply (defmacro-transformer val) (cdr e)) - e))) - (#t e))) - -(define (macroexpand e) - (cond - ((pair? e) (let* ((a (car e)) - (val (and (symbol? a) (eval `(defined? ,a)) (eval a)))) - (if (defmacro? val) - (macroexpand (apply (defmacro-transformer val) (cdr e))) - e))) - (#t e))) - -(define gentemp - (let ((*gensym-counter* -1)) - (lambda () - (set! *gensym-counter* (+ *gensym-counter* 1)) - (string->symbol - (string-append "scm:G" (number->string *gensym-counter*)))))) - - - - -;;; {Running Repls} -;;; - -(define (repl read evaler print) - (let loop ((source (read (current-input-port) #t read-sharp))) - (print (evaler source)) - (loop (read (current-input-port) #t read-sharp)))) - -;; A provisional repl that acts like the SCM repl: -;; -(define scm-repl-silent #f) -(define (assert-repl-silence v) (set! scm-repl-silent v)) - -(define scm-repl-verbose #t) -(define (assert-repl-verbosity v) (set! scm-repl-verbose v)) - -(define scm-repl-prompt #t) -(define (assert-repl-prompt v) (set! scm-repl-prompt v)) - -(define the-prompt-string "guile> ") - -(define (error-catching-loop thunk) - (define (loop first) - (let ((next - (catch #t - - (lambda () - (dynamic-wind - (lambda () (unmask-signals)) - (lambda () - (first) - - ;; This line is needed because mark doesn't do closures quite right. - ;; Unreferenced locals should be collected. - ;; - (set! first #f) - (let loop ((v (thunk))) - (loop (thunk))) - #f) - (lambda () (mask-signals)))) - - (lambda (key . args) - (case key - ((quit) - (force-output) - (pk 'quit args) - #f) - - ((switch-repl) - (apply throw 'switch-repl args)) - - ((abort) - ;; This is one of the closures that require - ;; (set! first #f) above - ;; - (lambda () - (force-output) - (display "ABORT: " (current-error-port)) - (write args (current-error-port)) - (newline (current-error-port)))) - - (else - ;; This is the other cons-leak closure... - (lambda () - (apply bad-throw key args)))))))) - (and next (loop next)))) - (loop (lambda () #t))) - -(define (quit . args) - (apply throw 'quit args)) - -(define (error-catching-repl r e p) - (error-catching-loop (lambda () (p (e (r)))))) - -(define (gc-run-time) - (cdr (assq 'gc-time-taken (gc-stats)))) - -(define (scm-style-repl) - (letrec ( - (start-gc-rt #f) - (start-rt #f) - (repl-report-reset (lambda () #f)) - (repl-report-start-timing (lambda () - (set! start-gc-rt (gc-run-time)) - (set! start-rt (get-internal-run-time)))) - (repl-report (lambda () - (display ";;; ") - (display (inexact->exact - (* 1000 (/ (- (get-internal-run-time) start-rt) - internal-time-units-per-second)))) - (display " msec (") - (display (inexact->exact - (* 1000 (/ (- (gc-run-time) start-gc-rt) - internal-time-units-per-second)))) - (display " msec in gc)\n"))) - (-read (lambda () - (if scm-repl-prompt - (begin - (display the-prompt-string) - (force-output) - (repl-report-reset))) - (let ((val (read (current-input-port) #t read-sharp))) - (if (eof-object? val) - (begin - (if scm-repl-verbose - (begin - (newline) - (display ";;; EOF -- quitting") - (newline))) - (quit 0))) - val))) - - (-eval (lambda (sourc) - (repl-report-start-timing) - (eval sourc))) - - (-print (lambda (result) - (if (not scm-repl-silent) - (begin - (write result) - (newline) - (if scm-repl-verbose - (repl-report)) - (force-output))))) - - (-quit (lambda () - (if scm-repl-verbose - (begin - (display ";;; QUIT executed, repl exitting") - (newline) - (repl-report))) - #t)) - - (-abort (lambda () - (if scm-repl-verbose - (begin - (display ";;; ABORT executed.") - (newline) - (repl-report))) - (repl -read -eval -print)))) - - (error-catching-repl -read - -eval - -print))) - -(define (stand-alone-repl) - (let ((oport (current-input-port))) - (set-current-input-port *stdin*) - (scm-style-repl) - (set-current-input-port oport))) - - - - - -(define (reverse-iota n) (if (> n 0) (cons (1- n) (reverse-iota (1- n))) '())) -(define (iota n) (list-reverse! (reverse-iota n))) - - -;;; {While} -;;; -;;; with `continue' and `break'. -;;; - -(defmacro while (cond . body) - `(letrec ((continue (lambda () (or (not ,cond) (begin (begin ,@ body) (continue))))) - (break (lambda val (apply throw 'break val)))) - (catch 'break - (lambda () (continue)) - (lambda v (cadr v))))) - - - - -;;; {Macros} -;;; - -;; actually....hobbit might be able to hack these with a little -;; coaxing -;; - -(defmacro define-macro (first . rest) - (let ((name (if (symbol? first) first (car first))) - (transformer - (if (symbol? first) - (car rest) - `(lambda ,(cdr first) ,@rest)))) - `(define ,name (defmacro:transformer ,transformer)))) - - -(defmacro define-syntax-macro (first . rest) - (let ((name (if (symbol? first) first (car first))) - (transformer - (if (symbol? first) - (car rest) - `(lambda ,(cdr first) ,@rest)))) - `(define ,name (defmacro:syntax-transformer ,transformer)))) - -;;; {Module System Macros} -;;; - -(defmacro define-module args - `(let* ((process-define-module process-define-module) - (set-current-module set-current-module) - (module (process-define-module ',args))) - (set-current-module module) - module)) - -(define define-private define) - -(defmacro define-public args - (define (syntax) - (error "bad syntax" (list 'define-public args))) - (define (defined-name n) - (cond - ((symbol? n) n) - ((pair? n) (defined-name (car n))) - (else (syntax)))) - (cond - ((null? args) (syntax)) - - (#t (let ((name (defined-name (car args)))) - `(begin - (let ((public-i (module-public-interface (current-module)))) - ;; Make sure there is a local variable: - ;; - (module-define! (current-module) - ',name - (module-ref (current-module) ',name #f)) - - ;; Make sure that local is exported: - ;; - (module-add! public-i ',name (module-variable (current-module) ',name))) - - ;; Now (re)define the var normally. - ;; - (define-private ,@ args)))))) - - - -(defmacro defmacro-public args - (define (syntax) - (error "bad syntax" (list 'defmacro-public args))) - (define (defined-name n) - (cond - ((symbol? n) n) - (else (syntax)))) - (cond - ((null? args) (syntax)) - - (#t (let ((name (defined-name (car args)))) - `(begin - (let ((public-i (module-public-interface (current-module)))) - ;; Make sure there is a local variable: - ;; - (module-define! (current-module) - ',name - (module-ref (current-module) ',name #f)) - - ;; Make sure that local is exported: - ;; - (module-add! public-i ',name (module-variable (current-module) ',name))) - - ;; Now (re)define the var normally. - ;; - (defmacro ,@ args)))))) - - - - -;;(define try-load-with-path try-load-module-with-path) -(define try-load try-load-module) -;;(define load-with-path load-module-with-path) -(define load load-module) - - - - -;; (define in-ch (get-standard-channel TCL_STDIN)) -;; (define out-ch (get-standard-channel TCL_STDOUT)) -;; (define err-ch (get-standard-channel TCL_STDERR)) -;; -;; (define inp (%make-channel-port in-ch "r")) -;; (define outp (%make-channel-port out-ch "w")) -;; (define errp (%make-channel-port err-ch "w")) -;; -;; (define %system-char-ready? char-ready?) -;; -;; (define (char-ready? p) -;; (if (not (channel-port? p)) -;; (%system-char-ready? p) -;; (let* ((channel (%channel-port-channel p)) -;; (old-blocking (channel-option-ref channel :blocking))) -;; (dynamic-wind -;; (lambda () (set-channel-option the-root-tcl-interpreter channel :blocking "0")) -;; (lambda () (not (eof-object? (peek-char p)))) -;; (lambda () (set-channel-option the-root-tcl-interpreter channel :blocking old-blocking)))))) -;; -;; (define (top-repl) -;; (with-input-from-port inp -;; (lambda () -;; (with-output-to-port outp -;; (lambda () -;; (with-error-to-port errp -;; (lambda () -;; (scm-style-repl)))))))) -;; -;; (set-current-input-port inp) -;; (set-current-output-port outp) -;; (set-current-error-port errp) - -(define (top-repl) (scm-style-repl)) - -(defmacro false-if-exception (expr) - `(catch #t (lambda () ,expr) - (lambda args #f))) - - -(define-module (ice-9 calling)) - -;;;; -;;; {Calling Conventions} -;;; -;;; This file contains a number of macros that support -;;; common calling conventions. - -;;; -;;; with-excursion-function <vars> proc -;;; <vars> is an unevaluated list of names that are bound in the caller. -;;; proc is a procedure, called: -;;; (proc excursion) -;;; -;;; excursion is a procedure isolates all changes to <vars> -;;; in the dynamic scope of the call to proc. In other words, -;;; the values of <vars> are saved when proc is entered, and when -;;; proc returns, those values are restored. Values are also restored -;;; entering and leaving the call to proc non-locally, such as using -;;; call-with-current-continuation, error, or throw. -;;; -(defmacro-public with-excursion-function (vars proc) - `(,proc ,(excursion-function-syntax vars))) - - - -;;; with-getter-and-setter <vars> proc -;;; <vars> is an unevaluated list of names that are bound in the caller. -;;; proc is a procedure, called: -;;; (proc getter setter) -;;; -;;; getter and setter are procedures used to access -;;; or modify <vars>. -;;; -;;; setter, called with keywords arguments, modifies the named -;;; values. If "foo" and "bar" are among <vars>, then: -;;; -;;; (setter :foo 1 :bar 2) -;;; == (set! foo 1 bar 2) -;;; -;;; getter, called with just keywords, returns -;;; a list of the corresponding values. For example, -;;; if "foo" and "bar" are among the <vars>, then -;;; -;;; (getter :foo :bar) -;;; => (<value-of-foo> <value-of-bar>) -;;; -;;; getter, called with no arguments, returns a list of all accepted -;;; keywords and the corresponding values. If "foo" and "bar" are -;;; the *only* <vars>, then: -;;; -;;; (getter) -;;; => (:foo <value-of-bar> :bar <value-of-foo>) -;;; -;;; The unusual calling sequence of a getter supports too handy -;;; idioms: -;;; -;;; (apply setter (getter)) ;; save and restore -;;; -;;; (apply-to-args (getter :foo :bar) ;; fetch and bind -;;; (lambda (foo bar) ....)) -;;; -;;; ;; [ "apply-to-args" is just like two-argument "apply" except that it -;;; ;; takes its arguments in a different order. -;;; -;;; -(defmacro-public with-getter-and-setter (vars proc) - `(,proc ,@ (getter-and-setter-syntax vars))) - -;;; with-getter vars proc -;;; A short-hand for a call to with-getter-and-setter. -;;; The procedure is called: -;;; (proc getter) -;;; -(defmacro-public with-getter (vars proc) - `(,proc ,(car (getter-and-setter-syntax vars)))) - - -;;; with-delegating-getter-and-setter <vars> get-delegate set-delegate proc -;;; Compose getters and setters. -;;; -;;; <vars> is an unevaluated list of names that are bound in the caller. -;;; -;;; get-delegate is called by the new getter to extend the set of -;;; gettable variables beyond just <vars> -;;; set-delegate is called by the new setter to extend the set of -;;; gettable variables beyond just <vars> -;;; -;;; proc is a procedure that is called -;;; (proc getter setter) -;;; -(defmacro-public with-delegating-getter-and-setter (vars get-delegate set-delegate proc) - `(,proc ,@ (delegating-getter-and-setter-syntax vars get-delegate set-delegate))) - - -;;; with-delegating-getter-and-setter <vars> get-delegate set-delegate proc -;;; <vars> is an unevaluated list of names that are bound in the caller. -;;; proc is called: -;;; -;;; (proc excursion getter setter) -;;; -;;; See also: -;;; with-getter-and-setter -;;; with-excursion-function -;;; -(defmacro-public with-excursion-getter-and-setter (vars proc) - `(,proc ,(excursion-function-syntax vars) - ,@ (getter-and-setter-syntax vars))) - - -(define (excursion-function-syntax vars) - (let ((saved-value-names (map gensym vars)) - (tmp-var-name (gensym 'temp)) - (swap-fn-name (gensym 'swap)) - (thunk-name (gensym 'thunk))) - `(lambda (,thunk-name) - (letrec ((,tmp-var-name #f) - (,swap-fn-name - (lambda () ,@ (map (lambda (n sn) `(set! ,tmp-var-name ,n ,n ,sn ,sn ,tmp-var-name)) - vars saved-value-names))) - ,@ (map (lambda (sn n) `(,sn ,n)) saved-value-names vars)) - (dynamic-wind - ,swap-fn-name - ,thunk-name - ,swap-fn-name))))) - - -(define (getter-and-setter-syntax vars) - (let ((args-name (gensym 'args)) - (an-arg-name (gensym 'an-arg)) - (new-val-name (gensym 'new-value)) - (loop-name (gensym 'loop)) - (kws (map symbol->keyword vars))) - (list `(lambda ,args-name - (let ,loop-name ((,args-name ,args-name)) - (if (null? ,args-name) - ,(if (null? kws) - ''() - `(let ((all-vals (,loop-name ',kws))) - (let ,loop-name ((vals all-vals) - (kws ',kws)) - (if (null? vals) - '() - `(,(car kws) ,(car vals) ,@(,loop-name (cdr vals) (cdr kws))))))) - (map (lambda (,an-arg-name) - (case ,an-arg-name - ,@ (append - (map (lambda (kw v) `((,kw) ,v)) kws vars) - `((else (throw 'bad-get-option ,an-arg-name)))))) - ,args-name)))) - - `(lambda ,args-name - (let ,loop-name ((,args-name ,args-name)) - (or (null? ,args-name) - (null? (cdr ,args-name)) - (let ((,an-arg-name (car ,args-name)) - (,new-val-name (cadr ,args-name))) - (case ,an-arg-name - ,@ (append - (map (lambda (kw v) `((,kw) (set! ,v ,new-val-name))) kws vars) - `((else (throw 'bad-set-option ,an-arg-name))))) - (,loop-name (cddr ,args-name))))))))) - -(define (delegating-getter-and-setter-syntax vars get-delegate set-delegate) - (let ((args-name (gensym 'args)) - (an-arg-name (gensym 'an-arg)) - (new-val-name (gensym 'new-value)) - (loop-name (gensym 'loop)) - (kws (map symbol->keyword vars))) - (list `(lambda ,args-name - (let ,loop-name ((,args-name ,args-name)) - (if (null? ,args-name) - (append! - ,(if (null? kws) - ''() - `(let ((all-vals (,loop-name ',kws))) - (let ,loop-name ((vals all-vals) - (kws ',kws)) - (if (null? vals) - '() - `(,(car kws) ,(car vals) ,@(,loop-name (cdr vals) (cdr kws))))))) - (,get-delegate)) - (map (lambda (,an-arg-name) - (case ,an-arg-name - ,@ (append - (map (lambda (kw v) `((,kw) ,v)) kws vars) - `((else (car (,get-delegate ,an-arg-name))))))) - ,args-name)))) - - `(lambda ,args-name - (let ,loop-name ((,args-name ,args-name)) - (or (null? ,args-name) - (null? (cdr ,args-name)) - (let ((,an-arg-name (car ,args-name)) - (,new-val-name (cadr ,args-name))) - (case ,an-arg-name - ,@ (append - (map (lambda (kw v) `((,kw) (set! ,v ,new-val-name))) kws vars) - `((else (,set-delegate ,an-arg-name ,new-val-name))))) - (,loop-name (cddr ,args-name))))))))) - - - - -;;; with-configuration-getter-and-setter <vars-etc> proc -;;; -;;; Create a getter and setter that can trigger arbitrary computation. -;;; -;;; <vars-etc> is a list of variable specifiers, explained below. -;;; proc is called: -;;; -;;; (proc getter setter) -;;; -;;; Each element of the <vars-etc> list is of the form: -;;; -;;; (<var> getter-hook setter-hook) -;;; -;;; Both hook elements are evaluated; the variable name is not. -;;; Either hook may be #f or procedure. -;;; -;;; A getter hook is a thunk that returns a value for the corresponding -;;; variable. If omitted (#f is passed), the binding of <var> is -;;; returned. -;;; -;;; A setter hook is a procedure of one argument that accepts a new value -;;; for the corresponding variable. If omitted, the binding of <var> -;;; is simply set using set!. -;;; -(defmacro-public with-configuration-getter-and-setter (vars-etc proc) - `((lambda (simpler-get simpler-set body-proc) - (with-delegating-getter-and-setter () - simpler-get simpler-set body-proc)) - - (lambda (kw) - (case kw - ,@(map (lambda (v) `((,(symbol->keyword (car v))) - ,(cond - ((cadr v) => list) - (else `(list ,(car v)))))) - vars-etc))) - - (lambda (kw new-val) - (case kw - ,@(map (lambda (v) `((,(symbol->keyword (car v))) - ,(cond - ((caddr v) => (lambda (proc) `(,proc new-val))) - (else `(set! ,(car v) new-val))))) - vars-etc))) - - ,proc)) - -(defmacro-public with-delegating-configuration-getter-and-setter (vars-etc delegate-get delegate-set proc) - `((lambda (simpler-get simpler-set body-proc) - (with-delegating-getter-and-setter () - simpler-get simpler-set body-proc)) - - (lambda (kw) - (case kw - ,@(append! (map (lambda (v) `((,(symbol->keyword (car v))) - ,(cond - ((cadr v) => list) - (else `(list ,(car v)))))) - vars-etc) - `((else (,delegate-get kw)))))) - - (lambda (kw new-val) - (case kw - ,@(append! (map (lambda (v) `((,(symbol->keyword (car v))) - ,(cond - ((caddr v) => (lambda (proc) `(,proc new-val))) - (else `(set! ,(car v) new-val))))) - vars-etc) - `((else (,delegate-set kw new-val)))))) - - ,proc)) - - -;;; let-configuration-getter-and-setter <vars-etc> proc -;;; -;;; This procedure is like with-configuration-getter-and-setter (q.v.) -;;; except that each element of <vars-etc> is: -;;; -;;; (<var> initial-value getter-hook setter-hook) -;;; -;;; Unlike with-configuration-getter-and-setter, let-configuration-getter-and-setter -;;; introduces bindings for the variables named in <vars-etc>. -;;; It is short-hand for: -;;; -;;; (let ((<var1> initial-value-1) -;;; (<var2> initial-value-2) -;;; ...) -;;; (with-configuration-getter-and-setter ((<var1> v1-get v1-set) ...) proc)) -;;; -(defmacro-public let-with-configuration-getter-and-setter (vars-etc proc) - `(let ,(map (lambda (v) `(,(car v) ,(cadr v))) vars-etc) - (with-configuration-getter-and-setter ,(map (lambda (v) `(,(car v) ,(caddr v) ,(cadddr v))) vars-etc) - ,proc))) - - - - -(define-module (ice-9 common-list)) - -;;"comlist.scm" Implementation of COMMON LISP list functions for Scheme -; Copyright (C) 1991, 1993, 1995 Aubrey Jaffer. -; -;Permission to copy this software, to redistribute it, and to use it -;for any purpose is granted, subject to the following restrictions and -;understandings. -; -;1. Any copy made of this software must include this copyright notice -;in full. -; -;2. I have made no warrantee or representation that the operation of -;this software will be error-free, and I am under no obligation to -;provide any services, by way of maintenance, update, or otherwise. -; -;3. In conjunction with products arising from the use of this -;material, there shall be no use of my name in any advertising, -;promotional, or sales literature without prior written consent in -;each case. - - - - -;;;From: hugh@ear.mit.edu (Hugh Secker-Walker) -(define-public (make-list k . init) - (set! init (if (pair? init) (car init))) - (do ((k k (+ -1 k)) - (result '() (cons init result))) - ((<= k 0) result))) - -(define-public (adjoin e l) (if (memq e l) l (cons e l))) - -(define-public (union l1 l2) - (cond ((null? l1) l2) - ((null? l2) l1) - (else (union (cdr l1) (adjoin (car l1) l2))))) - -(define-public (intersection l1 l2) - (cond ((null? l1) l1) - ((null? l2) l2) - ((memv (car l1) l2) (cons (car l1) (intersection (cdr l1) l2))) - (else (intersection (cdr l1) l2)))) - -(define-public (set-difference l1 l2) - (cond ((null? l1) l1) - ((memv (car l1) l2) (set-difference (cdr l1) l2)) - (else (cons (car l1) (set-difference (cdr l1) l2))))) - -(define-public (reduce-init p init l) - (if (null? l) - init - (reduce-init p (p init (car l)) (cdr l)))) - -(define-public (reduce p l) - (cond ((null? l) l) - ((null? (cdr l)) (car l)) - (else (reduce-init p (car l) (cdr l))))) - -(define-public (some pred l . rest) - (cond ((null? rest) - (let mapf ((l l)) - (and (not (null? l)) - (or (pred (car l)) (mapf (cdr l)))))) - (else (let mapf ((l l) (rest rest)) - (and (not (null? l)) - (or (apply pred (car l) (map car rest)) - (mapf (cdr l) (map cdr rest)))))))) - -(define-public (every pred l . rest) - (cond ((null? rest) - (let mapf ((l l)) - (or (null? l) - (and (pred (car l)) (mapf (cdr l)))))) - (else (let mapf ((l l) (rest rest)) - (or (null? l) - (and (apply pred (car l) (map car rest)) - (mapf (cdr l) (map cdr rest)))))))) - -(define-public (notany pred . ls) (not (apply some pred ls))) - -(define-public (notevery pred . ls) (not (apply every pred ls))) - -(define-public (find-if t l) - (cond ((null? l) #f) - ((t (car l)) (car l)) - (else (find-if t (cdr l))))) - -(define-public (member-if t l) - (cond ((null? l) #f) - ((t (car l)) l) - (else (member-if t (cdr l))))) - -(define-public (remove-if p l) - (cond ((null? l) '()) - ((p (car l)) (remove-if p (cdr l))) - (else (cons (car l) (remove-if p (cdr l)))))) - -(define-public (delete-if! pred list) - (let delete-if ((list list)) - (cond ((null? list) '()) - ((pred (car list)) (delete-if (cdr list))) - (else - (set-cdr! list (delete-if (cdr list))) - list)))) - -(define-public (delete-if-not! pred list) - (let delete-if ((list list)) - (cond ((null? list) '()) - ((not (pred (car list))) (delete-if (cdr list))) - (else - (set-cdr! list (delete-if (cdr list))) - list)))) - -(define-public (butlast lst n) - (letrec ((l (- (length lst) n)) - (bl (lambda (lst n) - (cond ((null? lst) lst) - ((positive? n) - (cons (car lst) (bl (cdr lst) (+ -1 n)))) - (else '()))))) - (bl lst (if (negative? n) - (slib:error "negative argument to butlast" n) - l)))) - -(define-public (and? . args) - (cond ((null? args) #t) - ((car args) (apply and? (cdr args))) - (else #f))) - -(define-public (or? . args) - (cond ((null? args) #f) - ((car args) #t) - (else (apply or? (cdr args))))) - -(define-public (has-duplicates? lst) - (cond ((null? lst) #f) - ((member (car lst) (cdr lst)) #t) - (else (has-duplicates? (cdr lst))))) - -(define-public (list* x . y) - (define (list*1 x) - (if (null? (cdr x)) - (car x) - (cons (car x) (list*1 (cdr x))))) - (if (null? y) - x - (cons x (list*1 y)))) - -;; pick p l -;; Apply P to each element of L, returning a list of elts -;; for which P returns a non-#f value. -;; -(define-public (pick p l) - (let loop ((s '()) - (l l)) - (cond - ((null? l) s) - ((p (car l)) (loop (cons (car l) s) (cdr l))) - (else (loop s (cdr l)))))) - -;; pick p l -;; Apply P to each element of L, returning a list of the -;; non-#f return values of P. -;; -(define-public (pick-mappings p l) - (let loop ((s '()) - (l l)) - (cond - ((null? l) s) - ((p (car l)) => (lambda (mapping) (loop (cons mapping s) (cdr l)))) - (else (loop s (cdr l)))))) - -(define-public (uniq l) - (if (null? l) - '() - (let ((u (uniq (cdr l)))) - (if (memq (car l) u) - u - (cons (car l) u))))) - - -(define-module (ice-9 ls) - :use-module (ice-9 common-list)) - - - -;;;; -;;; local-definitions-in root name -;;; Returns a list of names defined locally in the named subdirectory of root. -;;; definitions-in root name -;;; Returns a list of all names defined in the named subdirectory of root. -;;; The list includes alll locally defined names as well as all names inherited -;;; from a member of a use-list. -;;; -;;; A convenient interface for examining the nature of things: -;;; -;;; ls . various-names -;;; -;;; With just one argument, interpret that argument as the name of a subdirectory -;;; of the current module and return a list of names defined there. -;;; -;;; With more than one argument, still compute subdirectory lists, but -;;; return a list: -;;; ((<subdir-name> . <names-defined-there>) -;;; (<subdir-name> . <names-defined-there>) -;;; ...) -;;; - -(define-public (local-definitions-in root names) - (let ((m (nested-ref root names)) - (answer '())) - (if (not (module? m)) - (set! answer m) - (module-for-each (lambda (k v) (set! answer (cons k answer))) m)) - answer)) - -(define-public (definitions-in root names) - (let ((m (nested-ref root names))) - (if (not (module? m)) - m - (reduce union - (cons (local-definitions-in m '()) - (map (lambda (m2) (definitions-in m2 '())) (module-uses m))))))) - -(define-public (ls . various-refs) - (and various-refs - (if (cdr various-refs) - (map (lambda (ref) - (cons ref (definitions-in (current-module) ref))) - various-refs) - (definitions-in (current-module) (car various-refs))))) - -(define-public (lls . various-refs) - (and various-refs - (if (cdr various-refs) - (map (lambda (ref) - (cons ref (local-definitions-in (current-module) ref))) - various-refs) - (local-definitions-in (current-module) (car various-refs))))) - -(define-public (recursive-local-define name value) - (let ((parent (reverse! (cdr (reverse name))))) - (and parent (make-modules-in (current-module) parent)) - (local-define name value))) - -(define-module (ice-9 q)) - -;;;; Copyright (C) 1995 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 software; see the file COPYING. If not, write to -;;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -;;;; - - -;;;; -;;; Q: Based on the interface to -;;; -;;; "queue.scm" Queues/Stacks for Scheme -;;; Written by Andrew Wilcox (awilcox@astro.psu.edu) on April 1, 1992. -;;; - - -;;;; -;;; {Q} -;;; -;;; A list is just a bunch of cons pairs that follows some constrains, right? -;;; Association lists are the same. Hash tables are just vectors and association -;;; lists. You can print them, read them, write them as constants, pun them off as other data -;;; structures etc. This is good. This is lisp. These structures are fast and compact -;;; and easy to manipulate arbitrarily because of their simple, regular structure and -;;; non-disjointedness (associations being lists and so forth). -;;; -;;; So I figured, queues should be the same -- just a "subtype" of cons-pair -;;; structures in general. -;;; -;;; A queue is a cons pair: -;;; ( <the-q> . <last-pair> ) -;;; -;;; <the-q> is a list of things in the q. New elements go at the end of that list. -;;; -;;; <last-pair> is #f if the q is empty, and otherwise is the last pair of <the-q>. -;;; -;;; q's print nicely, but alas, they do not read well because the eq?-ness of -;;; <last-pair> and (last-pair <the-q>) is lost by read. The procedure -;;; -;;; (sync-q! q) -;;; -;;; recomputes and resets the <last-pair> component of a queue. -;;; - -(define-public (sync-q! obj) (set-cdr! obj (and (car obj) (last-pair (car obj))))) - -;;; make-q -;;; return a new q. -;;; -(define-public (make-q) (cons '() '())) - -;;; q? obj -;;; Return true if obj is a Q. -;;; An object is a queue if it is equal? to '(#f . #f) or -;;; if it is a pair P with (list? (car P)) and (eq? (cdr P) (last-pair P)). -;;; -(define-public (q? obj) (and (pair? obj) - (or (and (null? (car obj)) - (null? (cdr obj))) - (and - (list? (car obj)) - (eq? (cdr obj) (last-pair (car obj))))))) - -;;; q-empty? obj -;;; -(define-public (q-empty? obj) (null? (car obj))) - -;;; q-empty-check q -;;; Throw a q-empty exception if Q is empty. -(define-public (q-empty-check q) (if (q-empty? q) (throw 'q-empty q))) - - -;;; q-front q -;;; Return the first element of Q. -(define-public (q-front q) (q-empty-check q) (caar q)) - -;;; q-front q -;;; Return the last element of Q. -(define-public (q-rear q) (q-empty-check q) (cadr q)) - -;;; q-remove! q obj -;;; Remove all occurences of obj from Q. -(define-public (q-remove! q obj) - (while (memq obj (car q)) - (set-car! q (delq! obj (car q)))) - (set-cdr! q (last-pair (car q)))) - -;;; q-push! q obj -;;; Add obj to the front of Q -(define-public (q-push! q d) - (let ((h (cons d (car q)))) - (set-car! q h) - (if (null? (cdr q)) - (set-cdr! q h)))) - -;;; enq! q obj -;;; Add obj to the rear of Q -(define-public (enq! q d) - (let ((h (cons d '()))) - (if (not (null? (cdr q))) - (set-cdr! (cdr q) h) - (set-car! q h)) - (set-cdr! q h))) - -;;; q-pop! q -;;; Take the front of Q and return it. -(define-public (q-pop! q) - (q-empty-check q) - (let ((it (caar q)) - (next (cdar q))) - (if (not next) - (set-cdr! q #f)) - (set-car! q next) - it)) - -;;; deq! q -;;; Take the front of Q and return it. -(define-public deq! q-pop!) - -;;; q-length q -;;; Return the number of enqueued elements. -;;; -(define-public (q-length q) (length (car q))) - - - - -;;; installed-scm-file -(define-module (ice-9 runq) - :use-module (ice-9 q)) - - - -;;;; Copyright (C) 1996 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 software; see the file COPYING. If not, write to -;;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -;;;; - - - -;;;; -;;; {The runq data structure} -;;; -;;; One way to schedule parallel computations in a serial environment is -;;; to explicitly divide each task up into small, finite execution time, -;;; strips. Then you interleave the execution of strips from various -;;; tasks to achieve a kind of parallelism. Runqs are a handy data -;;; structure for this style of programming. -;;; -;;; We use thunks (nullary procedures) and lists of thunks to represent -;;; strips. By convention, the return value of a strip-thunk must either -;;; be another strip or the value #f. -;;; -;;; A runq is a procedure that manages a queue of strips. Called with no -;;; arguments, it processes one strip from the queue. Called with -;;; arguments, the arguments form a control message for the queue. The -;;; first argument is a symbol which is the message selector. -;;; -;;; A strip is processed this way: If the strip is a thunk, the thunk is -;;; called -- if it returns a strip, that strip is added back to the -;;; queue. To process a strip which is a list of thunks, the CAR of that -;;; list is called. After a call to that CAR, there are 0, 1, or 2 strips -;;; -- perhaps one returned by the thunk, and perhaps the CDR of the -;;; original strip if that CDR is not nil. The runq puts whichever of -;;; these strips exist back on the queue. (The exact order in which -;;; strips are put back on the queue determines the scheduling behavior of -;;; a particular queue -- it's a parameter.) -;;; -;;; - - - -;;;; -;;; (runq-control q msg . args) -;;; -;;; processes in the default way the control messages that -;;; can be sent to a runq. Q should be an ordinary -;;; Q (see utils/q.scm). -;;; -;;; The standard runq messages are: -;;; -;;; 'add! strip0 strip1... ;; to enqueue one or more strips -;;; 'enqueue! strip0 strip1... ;; to enqueue one or more strips -;;; 'push! strip0 ... ;; add strips to the front of the queue -;;; 'empty? ;; true if it is -;;; 'length ;; how many strips in the queue? -;;; 'kill! ;; empty the queue -;;; else ;; throw 'not-understood -;;; -(define-public (runq-control q msg . args) - (case msg - ((add!) (for-each (lambda (t) (enq! q t)) args) '*unspecified*) - ((enque!) (for-each (lambda (t) (enq! q t)) args) '*unspecified*) - ((push!) (for-each (lambda (t) (q-push! q t)) args) '*unspecified*) - ((empty?) (q-empty? q)) - ((length) (q-length q)) - ((kill!) (set! q (make-q))) - (else (throw 'not-understood msg args)))) - -(define (run-strip thunk) (catch #t thunk (lambda ign (warn 'runq-strip thunk ign) #f))) - -;;;; -;;; make-void-runq -;;; -;;; Make a runq that discards all messages except "length", for which -;;; it returns 0. -;;; -(define-public (make-void-runq) - (lambda opts - (and opts - (apply-to-args opts - (lambda (msg . args) - (case msg - ((length) 0) - (else #f))))))) - -;;;; -;;; (make-fair-runq) -;;; -;;; Returns a runq procedure. -;;; Called with no arguments, the procedure processes one strip from the queue. -;;; Called with arguments, it uses runq-control. -;;; -;;; In a fair runq, if a strip returns a new strip X, X is added -;;; to the end of the queue, meaning it will be the last to execute -;;; of all the remaining procedures. -;;; -(define-public (make-fair-runq) - (letrec ((q (make-q)) - (self - (lambda ctl - (if ctl - (apply runq-control q ctl) - (and (not (q-empty? q)) - (let ((next-strip (deq! q))) - (cond - ((procedure? next-strip) (let ((k (run-strip next-strip))) - (and k (enq! q k)))) - ((pair? next-strip) (let ((k (run-strip (car next-strip)))) - (and k (enq! q k))) - (if (not (null? (cdr next-strip))) - (enq! q (cdr next-strip))))) - self)))))) - self)) - - -;;;; -;;; (make-exclusive-runq) -;;; -;;; Returns a runq procedure. -;;; Called with no arguments, the procedure processes one strip from the queue. -;;; Called with arguments, it uses runq-control. -;;; -;;; In an exclusive runq, if a strip W returns a new strip X, X is added -;;; to the front of the queue, meaning it will be the next to execute -;;; of all the remaining procedures. -;;; -;;; An exception to this occurs if W was the CAR of a list of strips. -;;; In that case, after the return value of W is pushed onto the front -;;; of the queue, the CDR of the list of strips is pushed in front -;;; of that (if the CDR is not nil). This way, the rest of the thunks -;;; in the list that contained W have priority over the return value of W. -;;; -(define-public (make-exclusive-runq) - (letrec ((q (make-q)) - (self - (lambda ctl - (if ctl - (apply runq-control q ctl) - (and (not (q-empty? q)) - (let ((next-strip (deq! q))) - (cond - ((procedure? next-strip) (let ((k (run-strip next-strip))) - (and k (q-push! q k)))) - ((pair? next-strip) (let ((k (run-strip (car next-strip)))) - (and k (q-push! q k))) - (if (not (null? (cdr next-strip))) - (q-push! q (cdr next-strip))))) - self)))))) - self)) - - -;;;; -;;; (make-subordinate-runq-to superior basic-inferior) -;;; -;;; Returns a runq proxy for the runq basic-inferior. -;;; -;;; The proxy watches for operations on the basic-inferior that cause -;;; a transition from a queue length of 0 to a non-zero length and -;;; vice versa. While the basic-inferior queue is not empty, -;;; the proxy installs a task on the superior runq. Each strip -;;; of that task processes N strips from the basic-inferior where -;;; N is the length of the basic-inferior queue when the proxy -;;; strip is entered. [Countless scheduling variations are possible.] -;;; -(define-public (make-subordinate-runq-to superior-runq basic-runq) - (let ((runq-task (cons #f #f))) - (set-car! runq-task - (lambda () - (if (basic-runq 'empty?) - (set-cdr! runq-task #f) - (do ((n (basic-runq 'length) (1- n))) - ((<= n 0) #f) - (basic-runq))))) - (letrec ((self - (lambda ctl - (if (not ctl) - (let ((answer (basic-runq))) - (self 'empty?) - answer) - (begin - (case (car ctl) - ((suspend) (set-cdr! runq-task #f)) - (else (let ((answer (apply basic-runq ctl))) - (if (and (not (cdr runq-task)) (not (basic-runq 'empty?))) - (begin - (set-cdr! runq-task runq-task) - (superior-runq 'add! runq-task))) - answer)))))))) - self))) - -;;;; -;;; (define fork-strips (lambda args args)) -;;; Return a strip that starts several strips in -;;; parallel. If this strip is enqueued on a fair -;;; runq, strips of the parallel subtasks will run -;;; round-robin style. -;;; -(define fork-strips (lambda args args)) - - -;;;; -;;; (strip-sequence . strips) -;;; -;;; Returns a new strip which is the concatenation of the argument strips. -;;; -(define-public ((strip-sequence . strips)) - (let loop ((st (let ((a strips)) (set! strips #f) a))) - (and (not (null? st)) - (let ((then ((car st)))) - (if then - (lambda () (loop (cons then (cdr st)))) - (lambda () (loop (cdr st)))))))) - - -;;;; -;;; (fair-strip-subtask . initial-strips) -;;; -;;; Returns a new strip which is the synchronos, fair, -;;; parallel execution of the argument strips. -;;; -;;; -;;; -(define-public (fair-strip-subtask . initial-strips) - (let ((st (make-fair-runq))) - (apply st 'add! initial-strips) - st)) - - - -;;; installed-scm-file - -(define-module (ice-9 string-fun)) - - -;;;; -;;; {String Fun} -;;; -;;; Various string funcitons, particularly those that take -;;; advantage of the "shared substring" capability. -;;; - -;;;; -;;; {Dividing Strings Into Fields} -;;; -;;; The names of these functions are very regular. -;;; Here is a grammar of a call to one of these: -;;; -;;; <string-function-invocation> -;;; := (<action>-<seperator-disposition>-<seperator-determination> <seperator-param> <str> <ret>) -;;; -;;; <str> = the string -;;; -;;; <ret> = The continuation. String functions generally return -;;; multiple values by passing them to this procedure. -;;; -;;; <action> = split -;;; | separate-fields -;;; -;;; "split" means to divide a string into two parts. -;;; <ret> will be called with two arguments. -;;; -;;; "separate-fields" means to divide a string into as many -;;; parts as possible. <ret> will be called with -;;; however many fields are found. -;;; -;;; <seperator-disposition> = before -;;; | after -;;; | discarding -;;; -;;; "before" means to leave the seperator attached to -;;; the beginning of the field to its right. -;;; "after" means to leave the seperator attached to -;;; the end of the field to its left. -;;; "discarding" means to discard seperators. -;;; -;;; Other dispositions might be handy. For example, "isolate" -;;; could mean to treat the separator as a field unto itself. -;;; -;;; <seperator-determination> = char -;;; | predicate -;;; -;;; "char" means to use a particular character as field seperator. -;;; "predicate" means to check each character using a particular predicate. -;;; -;;; Other determinations might be handy. For example, "character-set-member". -;;; -;;; <seperator-param> = A parameter that completes the meaning of the determinations. -;;; For example, if the determination is "char", then this parameter -;;; says which character. If it is "predicate", the parameter is the -;;; predicate. -;;; -;;; -;;; For example: -;;; -;;; (separate-fields-discarding-char #\, "foo, bar, baz, , bat" list) -;;; => ("foo" " bar" " baz" " " " bat") -;;; -;;; (split-after-char #\- 'an-example-of-split list) -;;; => ("an-" "example-of-split") -;;; -;;; As an alternative to using a determination "predicate", or to trying to do anything -;;; complicated with these functions, consider using regular expressions. -;;; - -(define-public (split-after-char char str ret) - (let ((end (cond - ((string-index str char) => 1+) - (else (string-length str))))) - (ret (make-shared-substring str 0 end) - (make-shared-substring str end)))) - -(define-public (split-before-char char str ret) - (let ((end (or (string-index str char) - (string-length str)))) - (ret (make-shared-substring str 0 end) - (make-shared-substring str end)))) - -(define-public (split-discarding-char char str ret) - (let ((end (string-index str char))) - (if (not end) - (ret str "") - (ret (make-shared-substring str 0 end) - (make-shared-substring str (1+ end)))))) - -(define-public (split-after-char-last char str ret) - (let ((end (cond - ((string-rindex str char) => 1+) - (else 0)))) - (ret (make-shared-substring str 0 end) - (make-shared-substring str end)))) - -(define-public (split-before-char-last char str ret) - (let ((end (or (string-rindex str char) 0))) - (ret (make-shared-substring str 0 end) - (make-shared-substring str end)))) - -(define-public (split-discarding-char-last char str ret) - (let ((end (string-rindex str char))) - (if (not end) - (ret str "") - (ret (make-shared-substring str 0 end) - (make-shared-substring str (1+ end)))))) - -(define (split-before-predicate pred str ret) - (let loop ((n 0)) - (cond - ((= n (length str)) (ret str "")) - ((not (pred (string-ref str n))) (loop (1+ n))) - (else (ret (make-shared-substring str 0 n) - (make-shared-substring str n)))))) -(define (split-after-predicate pred str ret) - (let loop ((n 0)) - (cond - ((= n (length str)) (ret str "")) - ((not (pred (string-ref str n))) (loop (1+ n))) - (else (ret (make-shared-substring str 0 (1+ n)) - (make-shared-substring str (1+ n))))))) - -(define (split-discarding-predicate pred str ret) - (let loop ((n 0)) - (cond - ((= n (length str)) (ret str "")) - ((not (pred (string-ref str n))) (loop (1+ n))) - (else (ret (make-shared-substring str 0 n) - (make-shared-substring str (1+ n))))))) - -(define-public (seperate-fields-discarding-char ch str ret) - (let loop ((fields '()) - (str str)) - (cond - ((string-rindex str ch) - => (lambda (pos) (loop (cons (make-shared-substring str (+ 1 w)) fields) - (make-shared-substring str 0 w)))) - (else (ret (cons str fields)))))) - -(define-public (seperate-fields-after-char ch str ret) - (let loop ((fields '()) - (str str)) - (cond - ((string-rindex str ch) - => (lambda (pos) (loop (cons (make-shared-substring str (+ 1 w)) fields) - (make-shared-substring str 0 (+ 1 w))))) - (else (ret (cons str fields)))))) - -(define-public (seperate-fields-before-char ch str ret) - (let loop ((fields '()) - (str str)) - (cond - ((string-rindex str ch) - => (lambda (pos) (loop (cons (make-shared-substring str w) fields) - (make-shared-substring str 0 w)))) - (else (ret (cons str fields)))))) - - -;;;; -;;; {String Prefix Predicates} -;;; -;;; Very simple: -;;; -:;; (define-public ((string-prefix-predicate pred?) prefix str) -;;; (and (<= (length prefix) (length str)) -;;; (pred? prefix (make-shared-substring str 0 (length prefix))))) -;;; -;;; (define-public string-prefix=? (string-prefix-predicate string=?)) -;;; - -(define-public ((string-prefix-predicate pred?) prefix str) - (and (<= (length prefix) (length str)) - (pred? prefix (make-shared-substring str 0 (length prefix))))) - -(define-public string-prefix=? (string-prefix-predicate string=?)) - - -;;;; -;;; {Strippers} -;;; -;;; <stripper> = sans-<removable-part> -;;; -;;; <removable-part> = surrounding-whitespace -;;; | trailing-whitespace -;;; | leading-whitespace -;;; | final-newline -;;; - -(define-public (sans-surrounding-whitespace s) - (let ((st 0) - (end (string-length s))) - (while (and (< st (string-length s)) - (char-whitespace? (string-ref s st))) - (set! st (1+ st))) - (while (and (< 0 end) - (char-whitespace? (string-ref s (1- end)))) - (set! end (1- end))) - (if (< end st) - "" - (make-shared-substring s st end)))) - -(define-public (sans-trailing-whitespace s) - (let ((st 0) - (end (string-length s))) - (while (and (< 0 end) - (char-whitespace? (string-ref s (1- end)))) - (set! end (1- end))) - (if (< end st) - "" - (make-shared-substring s st end)))) - -(define-public (sans-leading-whitespace s) - (let ((st 0) - (end (string-length s))) - (while (and (< st (string-length s)) - (char-whitespace? (string-ref s st))) - (set! st (1+ st))) - (if (< end st) - "" - (make-shared-substring s st end)))) - -(define-public (sans-final-newline str) - (cond - ((= 0 (string-length str)) - str) - - ((char=? #\nl (string-ref str (1- (string-length str)))) - (make-shared-substring str 0 (1- (string-length str)))) - - (else str))) - -;;;; -;;; {has-trailing-newline?} -;;; - -(define-public (has-trailing-newline? str) - (and (< 0 (string-length str)) - (char=? #\nl (string-ref str (1- (string-length str)))))) - - - - - -(define-public (with-regexp-parts regexp fields str return fail) - (let ((parts (regexec regexp str fields))) - (if (number? parts) - (fail parts) - (apply return parts)))) - - - -;;; {Load debug extension code if debug extensions present.} -;;; -;;; *fixme* This is a temporary solution. -;;; - -(if (memq 'debug-extensions *features*) - (define-module (guile) :use-module (ice-9 debug))) - - - -;;; {Load thread code if threads are present.} -;;; -;;; *fixme* This is a temporary solution. -;;; - -(if (memq 'threads *features*) - (define-module (guile) :use-module (ice-9 threads))) - -(define-module (guile)) - -(append! %load-path (cons "." ())) diff --git a/ice-9/configure b/ice-9/configure deleted file mode 100755 index f303c71e6..000000000 --- a/ice-9/configure +++ /dev/null @@ -1,716 +0,0 @@ -#! /bin/sh - -# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.10 -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. - -# Defaults: -ac_help= -ac_default_prefix=/usr/local -# Any additions from configure.in: - -# Initialize some variables set by options. -# The variables have the same names as the options, with -# dashes changed to underlines. -build=NONE -cache_file=./config.cache -exec_prefix=NONE -host=NONE -no_create= -nonopt=NONE -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -target=NONE -verbose= -x_includes=NONE -x_libraries=NONE -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= - -ac_prev= -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=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) ac_optarg= ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case "$ac_option" in - - -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 ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$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" ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir="$ac_optarg" ;; - - -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; - - -enable-* | --enable-*) - ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "enable_${ac_feature}='$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) - # 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 << EOF -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --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 -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -EOF - if test -n "$ac_help"; then - echo "--enable and --with options recognized:$ac_help" - fi - exit 0 ;; - - -host | --host | --hos | --ho) - ac_prev=host ;; - -host=* | --host=* | --hos=* | --ho=*) - host="$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" ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - 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) - 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" ;; - - -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 ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.10" - exit 0 ;; - - -with-* | --with-*) - ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "with_${ac_package}='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=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" ;; - - -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } - ;; - - *) - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then - echo "configure: warning: $ac_option: invalid host type" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" - ;; - - esac -done - -if test -n "$ac_prev"; then - { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } -fi - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -# 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 -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 -fi -exec 5>./config.log - -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&5 - -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg -do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; - esac -done - -# 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 "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LANG+set}" = set; then LANG=C; export LANG; fi - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h - -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=boot-9.scm - -# 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 its parent. - ac_prog=$0 - ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. - 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 - if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } - else - { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } - fi -fi -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` - -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file -else - echo "creating cache $cache_file" - > $cache_file -fi - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -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' - -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - 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 - - - -. $srcdir/../GUILE-VERSION - -. $srcdir/PLUGIN/this.configure - - - -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 -# 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 | - sed -n "s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=\${\1='\2'}/p" \ - >> 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 - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Any assignment to VPATH causes Sun make to only execute -# the first set of double-colon rules, so remove it if not needed. -# If there is a colon in the path, we need to keep it. -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' -fi - -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -cat > conftest.defs <<\EOF -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g -s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g -s%\[%\\&%g -s%\]%\\&%g -s%\$%$$%g -EOF -DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` -rm -f conftest.defs - - -# Without the "./", some shells look in PATH for config.status. -: ${CONFIG_STATUS=./config.status} - -echo creating $CONFIG_STATUS -rm -f $CONFIG_STATUS -cat > $CONFIG_STATUS <<EOF -#! /bin/sh -# Generated automatically by configure. -# Run this file to recreate the current configuration. -# This directory was configured as follows, -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# -# $0 $ac_configure_args -# -# Compiler output produced by configure, useful for debugging -# configure, is in ./config.log if it exists. - -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" -for ac_option -do - case "\$ac_option" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" - exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; - -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "$CONFIG_STATUS generated by autoconf version 2.10" - exit 0 ;; - -help | --help | --hel | --he | --h) - echo "\$ac_cs_usage"; exit 0 ;; - *) echo "\$ac_cs_usage"; exit 1 ;; - esac -done - -ac_given_srcdir=$srcdir - -trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 -EOF -cat >> $CONFIG_STATUS <<EOF - -# Protect against being on the right side of a sed subst in config.status. -sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; - s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF -$ac_vpsub -$extrasub -s%@CFLAGS@%$CFLAGS%g -s%@CPPFLAGS@%$CPPFLAGS%g -s%@CXXFLAGS@%$CXXFLAGS%g -s%@DEFS@%$DEFS%g -s%@LDFLAGS@%$LDFLAGS%g -s%@LIBS@%$LIBS%g -s%@exec_prefix@%$exec_prefix%g -s%@prefix@%$prefix%g -s%@program_transform_name@%$program_transform_name%g -s%@bindir@%$bindir%g -s%@sbindir@%$sbindir%g -s%@libexecdir@%$libexecdir%g -s%@datadir@%$datadir%g -s%@sysconfdir@%$sysconfdir%g -s%@sharedstatedir@%$sharedstatedir%g -s%@localstatedir@%$localstatedir%g -s%@libdir@%$libdir%g -s%@includedir@%$includedir%g -s%@oldincludedir@%$oldincludedir%g -s%@infodir@%$infodir%g -s%@mandir@%$mandir%g -s%@library_name@%$library_name%g -s%@info_files@%$info_files%g -s%@GUILE_VERSION@%$GUILE_VERSION%g - -CEOF -EOF -cat >> $CONFIG_STATUS <<EOF - -CONFIG_FILES=\${CONFIG_FILES-"Makefile"} -EOF -cat >> $CONFIG_STATUS <<\EOF -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then - # Support "outfile[:infile]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - # Adjust relative srcdir, etc. for subdirectories. - - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dir_suffix. - ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` - else - ac_dir_suffix= ac_dots= - fi - - case "$ac_given_srcdir" in - .) srcdir=. - if test -z "$ac_dots"; then top_srcdir=. - else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; - /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; - *) # Relative path. - srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" - top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - - echo creating "$ac_file" - rm -f "$ac_file" - configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." - case "$ac_file" in - *Makefile*) ac_comsub="1i\\ -# $configure_input" ;; - *) ac_comsub= ;; - esac - sed -e "$ac_comsub -s%@configure_input@%$configure_input%g -s%@srcdir@%$srcdir%g -s%@top_srcdir@%$top_srcdir%g -" -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file -fi; done -rm -f conftest.subs - - - -exit 0 -EOF -chmod +x $CONFIG_STATUS -rm -fr confdefs* $ac_clean_files -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 - diff --git a/ice-9/configure.in b/ice-9/configure.in deleted file mode 100644 index 7d7829c2f..000000000 --- a/ice-9/configure.in +++ /dev/null @@ -1,13 +0,0 @@ -# -# Process this file with autoconf to produce a configure script. -# - -AC_INIT(boot-9.scm) - -. $srcdir/../GUILE-VERSION - -. $srcdir/PLUGIN/this.configure -AC_SUBST(library_name) -AC_SUBST(info_files) -AC_SUBST(GUILE_VERSION) -AC_OUTPUT(Makefile) diff --git a/ice-9/debug.scm b/ice-9/debug.scm deleted file mode 100644 index 078669aca..000000000 --- a/ice-9/debug.scm +++ /dev/null @@ -1,114 +0,0 @@ -;;;; Copyright (C) 1996 Mikael Djurfeldt -;;;; -;;;; 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 software; see the file COPYING. If not, write to -;;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -;;;; -;;;; The author can be reached at djurfeldt@nada.kth.se -;;;; Mikael Djurfeldt, SANS/NADA KTH, 10044 STOCKHOLM, SWEDEN -;;;; - - -(define-module #/ice-9/debug) - - - -;;; {Run-time options} - -(define names '((debug-options-interface - (debug-options debug-enable debug-disable) - (debug-set!)) - - (evaluator-traps-interface - (traps trap-enable trap-disable) - (trap-set!)) - - (read-options-interface - (read-options read-enable read-disable) - (read-set!)) - - (print-options-interface - (print-options print-enable print-disable) - (print-set!)) - )) - -(define option-name car) -(define option-value cadr) -(define option-documentation caddr) - -(define (print-option option) - (display (option-name option)) - (if (< (string-length (symbol->string (option-name option))) 8) - (display #\tab)) - (display #\tab) - (display (option-value option)) - (display #\tab) - (display (option-documentation option)) - (newline)) - -;;; Below follows the macros defining the run-time option interfaces. -;;; *fixme* These should not be macros, but need to be until module -;;; system is improved. -;;; - -(define (make-options interface) - `(lambda args - (cond ((null? args) (,interface)) - ((pair? (car args)) (,interface (car args)) (,interface)) - (else (for-each print-option (,interface #t)))))) - -(define (make-enable interface) - `(lambda flags - (,interface (append (if (pair? flags) - flags - (list flags)) - (,interface))) - (,interface))) - -(define (make-disable interface) - `(lambda flags - (let ((options (,interface))) - (for-each (lambda (flag) - (set! options (delq! flag options))) - (if (pair? flags) flags (list flags))) - (,interface options) - (,interface)))) - -(define (make-set! interface) - `((name exp) - (,'quasiquote - (begin (,interface (append (,interface) - (list '(,'unquote name) - (,'unquote exp)))) - (,interface))))) - -(defmacro define-all () - (cons 'begin - (apply append - (map (lambda (group) - (let ((interface (car group))) - (append (map (lambda (name constructor) - `(define-public ,name - ,(constructor interface))) - (cadr group) - (list make-options - make-enable - make-disable)) - (map (lambda (name constructor) - `(defmacro-public ,name - ,@(constructor interface))) - (caddr group) - (list make-set!))))) - names)))) - -(define-all) diff --git a/ice-9/hcons.scm b/ice-9/hcons.scm deleted file mode 100644 index febd5e8c7..000000000 --- a/ice-9/hcons.scm +++ /dev/null @@ -1,76 +0,0 @@ -;;; installed-scm-file - -;;;; Copyright (C) 1995, 1996 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 software; see the file COPYING. If not, write to -;;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -;;;; - - -(define-module #/ice-9/hcons) - - -;;; {Eq? hash-consing} -;;; -;;; A hash conser maintains a private universe of pairs s.t. if -;;; two cons calls pass eq? arguments, the pairs returned are eq?. -;;; -;;; A hash conser does not contribute life to the pairs it returns. -;;; - -(define-public (hashq-cons-hash pair n) - (modulo (logxor (hashq (car pair) 4194303) - (hashq (cdr pair) 4194303)) - n)) - -(define-public (hashq-cons-assoc key l) - (and l (or (and (pair? l) - (pair? (car l)) - (pair? (caar l)) - (eq? (car key) (caaar l)) - (eq? (cdr key) (cdaar l)) - (car l)) - (hashq-cons-assoc key (cdr l))))) - -(define-public (hashq-cons-get-handle table key) - (hashx-get-handle hashq-cons-hash hashq-cons-assoc table key #f)) - -(define-public (hashq-cons-create-handle! table key init) - (hashx-create-handle! hashq-cons-hash hashq-cons-assoc table key init)) - -(define-public (hashq-cons-ref table key) - (hashx-ref hashq-cons-hash hashq-cons-assoc table key #f)) - -(define-public (hashq-cons-set! table key val) - (hashx-set! hashq-cons-hash hashq-cons-assoc table key val)) - -(define-public (hashq-cons table a d) - (car (hashq-cons-create-handle! table (cons a d) #f))) - -(define-public (hashq-conser hash-tab-or-size) - (let ((table (if (vector? hash-tab-or-size) - hash-tab-or-size - (make-doubly-weak-hash-table hash-tab-or-size)))) - (lambda (a d) (hashq-cons table a d)))) - - - - -(define-public (make-gc-buffer n) - (let ((ring (make-list n #f))) - (append! ring ring) - (lambda (next) - (set-car! ring next) - (set! ring (cdr ring)) - next))) diff --git a/ice-9/lineio.scm b/ice-9/lineio.scm deleted file mode 100644 index ffde88608..000000000 --- a/ice-9/lineio.scm +++ /dev/null @@ -1,112 +0,0 @@ -;;; installed-scm-file - -;;;; Copyright (C) 1996 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 software; see the file COPYING. If not, write to -;;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -;;;; - - - -(define-module #/ice-9/lineio) - - -;;; {Line Buffering Input Ports} -;;; -;;; [This is a work-around to get past certain deficiencies in the capabilities -;;; of ports. Eventually, ports should be fixed and this module nuked.] -;;; -;;; A line buffering input port supports: -;;; -;;; read-string which returns the next line of input -;;; unread-string which pushes a line back onto the stream -;;; -;;; Normally a "line" is all characters up to and including a newline. -;;; If lines are put back using unread-string, they can be broken arbitrarily -;;; -- that is, read-string returns strings passed to unread-string (or -;;; shared substrings of them). -;;; - -;; read-string port -;; unread-string port str -;; Read (or buffer) a line from PORT. -;; -;; Not all ports support these functions -- only those with -;; 'unread-string and 'read-string properties, bound to hooks -;; implementing these functions. -;; -(define-public (unread-string str line-buffering-input-port) - ((object-property line-buffering-input-port 'unread-string) str)) - -;; -(define-public (read-string line-buffering-input-port) - ((object-property line-buffering-input-port 'read-string))) - - -(define-public (lineio-port? port) - (not (not (object-property port 'read-string)))) - -;; make-line-buffering-input-port port -;; Return a wrapper for PORT. The wrapper handles read-string/unread-string. -;; -;; The port returned by this function reads newline terminated lines from PORT. -;; It buffers these characters internally, and parsels them out via calls -;; to read-char, read-string, and unread-string. -;; - -(define-public (make-line-buffering-input-port underlying-port) - (let* (;; buffers - a list of strings put back by unread-string or cached - ;; using read-line. - ;; - (buffers '()) - - ;; getc - return the next character from a buffer or from the underlying - ;; port. - ;; - (getc (lambda () - (if (not buffers) - (read-char underlying-port) - (let ((c (string-ref (car buffers)))) - (if (= 1 (string-length (car buffers))) - (set! buffers (cdr buffers)) - (set-car! buffers (make-shared-substring (car buffers) 1))) - c)))) - - (propogate-close (lambda () (close-port underlying-port))) - - (self (make-soft-port (vector #f #f #f getc propogate-close) "r")) - - (unread-string (lambda (str) - (and (< 0 (string-length str)) - (if (ungetc-char-ready? self) - (set! buffers (append! (list str (string (read-char self))) buffers)) - (set! buffers (cons str buffers)))))) - - (read-string (lambda () - (cond - (buffers (let ((answer (car buffers))) - (set! buffers (cdr buffers)) - answer)) - - ((ungetc-char-ready? self) (read-line self 'include-newline)) - - (else (read-line underlying-port 'include-newline))))) - - ) - - (set-object-property! self 'unread-string unread-string) - (set-object-property! self 'read-string read-string) - self)) - - diff --git a/ice-9/mapping.scm b/ice-9/mapping.scm deleted file mode 100644 index ceb3a1b38..000000000 --- a/ice-9/mapping.scm +++ /dev/null @@ -1,121 +0,0 @@ -;;; installed-scm-file - -;;;; Copyright (C) 1996 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 software; see the file COPYING. If not, write to -;;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -;;;; - - - -(define-module #/ice-9/mapping - :use-module #/ice-9/poe) - -(define-public mapping-hooks-type (make-record-type 'mapping-hooks '(get-handle - create-handle - remove))) - - -(define-public make-mapping-hooks (perfect-funcq 17 (record-constructor mapping-hooks-type))) -(define-public mapping-hooks? (record-predicate mapping-hooks-type)) -(define-public mapping-hooks-get-handle (record-accessor mapping-hooks-type 'get-handle)) -(define-public mapping-hooks-create-handle (record-accessor mapping-hooks-type 'create-handle)) -(define-public mapping-hooks-remove (record-accessor mapping-hooks-type 'remove)) - -(define-public mapping-type (make-record-type 'mapping '(hooks data))) -(define-public make-mapping (record-constructor mapping-type)) -(define-public mapping? (record-predicate mapping-type)) -(define-public mapping-hooks (record-accessor mapping-type 'hooks)) -(define-public mapping-data (record-accessor mapping-type 'data)) -(define-public set-mapping-hooks! (record-modifier mapping-type 'hooks)) -(define-public set-mapping-data! (record-modifier mapping-type 'data)) - -(define-public (mapping-get-handle map key) - ((mapping-hooks-get-handle (mapping-hooks map)) map key)) -(define-public (mapping-create-handle! map key . opts) - (apply (mapping-hooks-create-handle (mapping-hooks map)) map key opts)) -(define-public (mapping-remove! map key) - ((mapping-hooks-remove (mapping-hooks map)) map key)) - -(define-public (mapping-ref map key . dflt) - (cond - ((mapping-get-handle map key) => cdr) - (dflt => car) - (else #f))) - -(define-public (mapping-set! map key val) - (set-cdr! (mapping-create-handle! map key #f) val)) - - - -(define-public hash-table-mapping-hooks - (let ((wrap (lambda (proc) (lambda (1st . rest) (apply proc (mapping-data 1st) rest))))) - - (perfect-funcq 17 - (lambda (hash-proc assoc-proc delete-proc) - (let ((procs (list hash-proc assoc-proc delete-proc))) - (cond - ((equal? procs `(,hashq ,assq ,delq!)) - (make-mapping-hooks (wrap hashq-get-handle) - (wrap hashq-create-handle!) - (wrap hashq-remove!))) - ((equal? procs `(,hashv ,assv ,delv!)) - (make-mapping-hooks (wrap hashv-get-handle) - (wrap hashv-create-handle!) - (wrap hashv-remove!))) - ((equal? procs `(,hash ,assoc ,delete!)) - (make-mapping-hooks (wrap hash-get-handle) - (wrap hash-create-handle!) - (wrap hash-remove!))) - (else - (make-mapping-hooks (wrap - (lambda (table key) - (hashx-get-handle hash-proc assoc-proc table key))) - (wrap - (lambda (table key) - (hashx-create-handle hash-proc assoc-proc table key))) - (wrap - (lambda (table key) - (hashx-get-handle hash-proc assoc-proc delete-proc table key))))))))))) - -(define-public (make-hash-table-mapping table hash-proc assoc-proc delete-proc) - (make-mapping (hash-table-mapping-hooks hash-proc assoc-proc delete-proc) table)) - -(define-public (hash-table-mapping . options) - (let* ((size (or (and options (number? (car options)) (car options)) - 71)) - (hash-proc (or (kw-arg-ref options :hash-proc) hash)) - (assoc-proc (or (kw-arg-ref options :assoc-proc) - (cond - ((eq? hash-proc hash) assoc) - ((eq? hash-proc hashv) assv) - ((eq? hash-proc hashq) assq) - (else (error 'hash-table-mapping - "Hash-procedure specified with no known assoc function." - hash-proc))))) - (delete-proc (or (kw-arg-ref options :delete-proc) - (cond - ((eq? hash-proc hash) delete!) - ((eq? hash-proc hashv) delv!) - ((eq? hash-proc hashq) delq!) - (else (error 'hash-table-mapping - "Hash-procedure specified with no known delete function." - hash-proc))))) - (table-constructor (or (kw-arg-ref options :table-constructor) - (lambda (len) (make-vector len '()))))) - (make-hash-table-mapping (table-constructor size) - hash-proc - assoc-proc - delete-proc))) - diff --git a/ice-9/poe.scm b/ice-9/poe.scm deleted file mode 100644 index eb3a13fca..000000000 --- a/ice-9/poe.scm +++ /dev/null @@ -1,117 +0,0 @@ -;;; installed-scm-file - -;;;; Copyright (C) 1996 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 software; see the file COPYING. If not, write to -;;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -;;;; - - -(define-module #/ice-9/poe - :use-module #/ice-9/hcons) - - - - -;;; {Pure Functions} -;;; -;;; A pure function (of some sort) is characterized by two equality -;;; relations: one on argument lists and one on return values. -;;; A pure function is one that when applied to equal arguments lists -;;; yields equal results. -;;; -;;; If the equality relationship on return values can be eq?, it may make -;;; sense to cache values returned by the function. Choosing the right -;;; equality relation on arguments is tricky. -;;; - - -;;; {pure-funcq} -;;; -;;; The simplest case of pure functions are those in which results -;;; are only certainly eq? if all of the arguments are. These functions -;;; are called "pure-funcq", for obvious reasons. -;;; - - -(define funcq-memo (make-weak-key-hash-table 523)) ; !!! randomly selected values -(define funcq-buffer (make-gc-buffer 256)) - -(define (funcq-hash arg-list n) - (let ((it (let loop ((x 0) - (arg-list arg-list)) - (if (null? arg-list) - (modulo x n) - (loop (logior x (hashq (car arg-list) 4194303)) - (cdr arg-list)))))) - it)) - -(define (funcq-assoc arg-list alist) - (let ((it (and alist - (let and-map ((key arg-list) - (entry (caar alist))) - (or (and (and (not key) (not entry)) - (car alist)) - (and key entry - (eq? (car key) (car entry)) - (and-map (cdr key) (cdr entry)))))))) - it)) - - - -(define-public (pure-funcq base-func) - (lambda args - (let ((cached (hashx-get-handle funcq-hash funcq-assoc funcq-memo (cons base-func args)))) - (if cached - (begin - (funcq-buffer (car cached)) - (cdr cached)) - - (let ((val (apply base-func args)) - (key (cons base-func args))) - (funcq-buffer key) - (hashx-set! funcq-hash funcq-assoc funcq-memo key val) - val))))) - - - -;;; {Perfect funq} -;;; -;;; A pure funq may sometimes forget its past but a perfect -;;; funcq never does. -;;; - -(define-public (perfect-funcq size base-func) - (define funcq-memo (make-hash-table size)) - - (lambda args - (let ((cached (hashx-get-handle funcq-hash funcq-assoc funcq-memo (cons base-func args)))) - (if cached - (begin - (funcq-buffer (car cached)) - (cdr cached)) - - (let ((val (apply base-func args)) - (key (cons base-func args))) - (funcq-buffer key) - (hashx-set! funcq-hash funcq-assoc funcq-memo key val) - val))))) - - - - - - - - diff --git a/ice-9/slib.scm b/ice-9/slib.scm deleted file mode 100644 index 3178598fd..000000000 --- a/ice-9/slib.scm +++ /dev/null @@ -1,144 +0,0 @@ -;;; installed-scm-file -(define-module #/ice-9/slib) - - - -(define (eval-load <filename> evl) - (if (not (file-exists? <filename>)) - (set! <filename> (string-append <filename> (scheme-file-suffix)))) - (call-with-input-file <filename> - (lambda (port) - (let ((old-load-pathname *load-pathname*)) - (set! *load-pathname* <filename>) - (do ((o (read port #t read-sharp) (read port #t read-sharp))) - ((eof-object? o)) - (evl o)) - (set! *load-pathname* old-load-pathname))))) - - - -(define slib:exit quit) -(define slib:error error) -(define slib:eval eval) -(define defmacro:eval eval) -(define logical:logand logand) -(define logical:logior logior) -(define logical:logxor logxor) -(define logical:lognot lognot) -(define logical:ash ash) -(define logical:logcount logcount) -(define logical:integer-length integer-length) -(define logical:bit-extract bit-extract) -(define logical:integer-expt integer-expt) -(define logical:ipow-by-squaring ipow-by-squaring) -(define slib:eval-load eval-load) -(define slib:tab #\tab) -(define slib:form-feed #\page) - -(define slib:features - (append '(source - eval - abort - alist - defmacro - delay - dynamic-wind - full-continuation - hash - hash-table - line-i/o - logical - multiarg/and- - multiarg-apply - promise - rev2-procedures - rev4-optional-procedures - string-port - with-file) - - (if (defined? getenv) - '(getenv) - '()) - - (if (defined? current-time) - '(current-time) - '()) - - (if (defined? system) - '(system) - '()) - - (if (defined? array?) - '(array) - '()) - - (if (defined? char-ready?) - '(char-ready?) - '()) - - (if (defined? array-for-each) - '(array-for-each) - '()) - - (if (and (string->number "0.0") (inexact? (string->number "0.0"))) - '(inexact) - '()) - - (if (rational? (string->number "1/19")) - '(rational) - '()) - - (if (real? (string->number "0.0")) - '(real) - ()) - - (if (complex? (string->number "1+i")) - '(complex) - '()) - - (let ((n (string->number "9999999999999999999999999999999"))) - (if (and n (exact? n)) - '(bignum) - '())))) - - -(define slib-module (current-module)) - -(define (slib:load name) - (save-module-excursion - (lambda () - (set-current-module slib-module) - (load name)))) - -(define slib:load-source slib:load) -(define defmacro:load slib:load) - -(define (library-vicinity) (string-append (implementation-vicinity) "slib/")) -(define (scheme-implementation-type) 'guile) -(define (scheme-implementation-version) "") - -(define (output-port-width . arg) 80) -(define (output-port-height . arg) 24) - - -;;; {Time} -;;; - -(define difftime -) -(define offset-time +) - - -(define %system-define define) - -(define define - (procedure->memoizing-macro - (lambda (exp env) - (if (= (length env) 1) - `(define-public ,@(cdr exp)) - `(%system-define ,@(cdr exp)))))) - -(define (software-type) 'UNIX) - -(slib:load "require.scm") - -(define-public require require:require) diff --git a/ice-9/tags.scm b/ice-9/tags.scm deleted file mode 100644 index 58b7425b4..000000000 --- a/ice-9/tags.scm +++ /dev/null @@ -1,23 +0,0 @@ -;;; installed-scm-file - -;;;; Copyright (C) 1996 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 software; see the file COPYING. If not, write to -;;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -;;;; - - - -(define-module #/ice-9/tags) - diff --git a/ice-9/threads.scm b/ice-9/threads.scm deleted file mode 100644 index bec189009..000000000 --- a/ice-9/threads.scm +++ /dev/null @@ -1,53 +0,0 @@ -;;;; Copyright (C) 1996 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 software; see the file COPYING. If not, write to -;;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -;;;; -;;;; ---------------------------------------------------------------- -;;;; threads.scm -- User-level interface to Guile's thread system -;;;; 4 March 1996, Anthony Green <green@cygnus.com> -;;;; Modified 5 October 1996, MDJ <djurfeldt@nada.kth.se> -;;;; ---------------------------------------------------------------- -;;;; - - -(define-module #/ice-9/threads) - - - -; --- MACROS ------------------------------------------------------- - -(defmacro-public make-thread (fn . args) - `(call-with-new-thread - (lambda () - (,fn ,@args)) - (lambda args args))) - -(defmacro-public begin-thread (first . thunk) - `(call-with-new-thread - (lambda () - (begin - ,first ,@thunk)) - (lambda args args))) - -(defmacro-public with-mutex (m . thunk) - `(dynamic-wind - (lambda () (lock-mutex ,m)) - (lambda () (begin ,@thunk)) - (lambda () (unlock-mutex ,m)))) - -(defmacro-public monitor (first . thunk) - `(with-mutex ,(make-mutex) - (begin - ,first ,@thunk))) diff --git a/install-sh b/install-sh deleted file mode 100755 index ab74c882e..000000000 --- a/install-sh +++ /dev/null @@ -1,238 +0,0 @@ -#!/bin/sh -# -# install - install a program, script, or datafile -# This comes from X11R5. -# -# 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. -# - - -# 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}" - -tranformbasename="" -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=: - 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 diff --git a/mkinstalldirs b/mkinstalldirs deleted file mode 100755 index cc8783edc..000000000 --- a/mkinstalldirs +++ /dev/null @@ -1,36 +0,0 @@ -#! /bin/sh -# mkinstalldirs --- make directory hierarchy -# Author: Noah Friedman <friedman@prep.ai.mit.edu> -# Created: 1993-05-16 -# Last modified: 1994-03-25 -# Public domain - -errstatus=0 - -for file in ${1+"$@"} ; do - set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` - shift - - pathcomp= - for d in ${1+"$@"} ; do - pathcomp="$pathcomp$d" - case "$pathcomp" in - -* ) pathcomp=./$pathcomp ;; - esac - - if test ! -d "$pathcomp"; then - echo "mkdir $pathcomp" 1>&2 - mkdir "$pathcomp" > /dev/null 2>&1 || lasterr=$? - fi - - if test ! -d "$pathcomp"; then - errstatus=$lasterr - fi - - pathcomp="$pathcomp/" - done -done - -exit $errstatus - -# mkinstalldirs ends here diff --git a/qt/.cvsignore b/qt/.cvsignore deleted file mode 100644 index 5cc2dec44..000000000 --- a/qt/.cvsignore +++ /dev/null @@ -1,4 +0,0 @@ -Makefile -config.log -config.status -qt.h diff --git a/qt/CHANGES b/qt/CHANGES deleted file mode 100644 index 1b74921ee..000000000 --- a/qt/CHANGES +++ /dev/null @@ -1,15 +0,0 @@ -QuickThreads 002: Changes since QuickThreads 001. - - - Now can be used by C++ programs. - - Now *really* works with stacks that grow up. - - Supports AXP OSF 2.x cc's varargs. - - Supports HP Precision (HP-PA) on workstations and Convex. - - Supports assemblers for Intel iX86 ith only '//'-style comments. - - Supports Silicon Graphics Irix 5.x with dynamic linking. - - Supports System V and Solaris 2.x with no `_' on compiler-generated - identifiers; *some* platforms only. - -Note: not all "./config" arguments are compatible with QT 001. - - -QuickThreads 001: Base version. diff --git a/qt/ChangeLog b/qt/ChangeLog deleted file mode 100644 index e455fff0f..000000000 --- a/qt/ChangeLog +++ /dev/null @@ -1,28 +0,0 @@ -Wed Oct 9 19:40:13 1996 Jim Blandy <jimb@floss.cyclic.com> - - * configure.in: If we don't have a port to the current machine, - just arrange for 'make all' to do nothing. Don't abort - configuration. We need a fully configured directory tree in order - to make distributions and the like. - - * Makefile.in (distfiles): Update for the new directory structure. - (plugin_distfiles, md_distfiles, time_distfiles): New variables. - (dist-dir): New target; use all the above to build a subtree of a - distribution. - (manifest): Target deleted. - -Tue Oct 1 02:06:19 1996 Mikael Djurfeldt <mdj@woody.nada.kth.se> - - * configure.in: Solaris 2 should use sparc.s. - *Older* systems use _sparc.s - -Fri Mar 29 11:50:20 1996 Anthony Green <green@snuffle.cygnus.com> - - * configure: Rebuilt - * Makefile.in, configure.in: Fixed installation. - -Fri Mar 22 16:20:27 1996 Anthony Green (green@gerbil.cygnus.com) - - * all files: installed qt-002 package. Autoconfiscated. - - diff --git a/qt/INSTALL b/qt/INSTALL deleted file mode 100644 index 5b20f5d5e..000000000 --- a/qt/INSTALL +++ /dev/null @@ -1,81 +0,0 @@ -Installation of the `QuickThreads' threads-building toolkit. - -* Notice - -QuickThreads -- Threads-building toolkit. -Copyright (c) 1993 by David Keppel - -Permission to use, copy, modify and distribute this software and -its documentation for any purpose and without fee is hereby -granted, provided that the above copyright notice and this notice -appear in all copies. This software is provided as a -proof-of-concept and for demonstration purposes; there is no -representation about the suitability of this software for any -purpose. - - -* Configuration - -Configure with - - ./config *machtype* - -where "*machtype*" is one of the supported target machines. As of -October 1994, the supported machines (targets) are: - - axp -- All Digital Equipment Corporation AXP (DEC Alpha) - processors, compile with GNU CC - axp-osf1 -- AXP running OSF 1.x - axp-osf2 -- AXP running OSF 2.x - hppa -- HP's PA-RISC 1.1 processor - hppa-cnx-spp -- Convex SPP (PA-RISC 1.1 processor) - iX86 -- 80386, 80486, and 80586-compatible processors - See notes below for OS/2. - iX86-ss -- 'iX86 for assemblers that use slash-slash ('//') - comments. - ksr1 -- All KSR processors - m88k -- All members of the Motorola 88000 family - mips -- MIPS R2000 and R3000 processors - mips-irix5 -- Irix 5.xx (use `mips' for Irix 4.xx) - sparc-os1 -- V8-compliant SPARC processors using compilers - that prefix labels (e.g. "foo" appears as "_foo") - Includes Solaris 1 (SunOS 4.X). - sparc-os2 -- V8-compliant SPARC processors using compilers - that do not prefix labels. Includes Solaris 2. - vax -- All VAX processors - -In addition, the target `clean' will deconfigure QuickThreads. - -Note that a given machine target may not work on all instances of that -machine because e.g., the assembler syntax varies from machine to -machine. - -Note also that additions to a processor family may require a new -target. So, for example, the `vax' target might not work for all -future VAX processors if, say, new VAX processors are introduced and -they use separate floating-point registers. - -For OS/2, change `ranlib' to `ar -s', `configure' to `configure.cmd' -(or was that `config' to `config.cmd'?), and replace the soft links -(`ln -s') with plain copies. - - -* Build - -To build the QuickThreads library, first configure (see above) then -type `make libqt.a' in the top-level directory. - -To build the demonstration threads package, SimpleThreads, type -`make libstp.a' in the top-level directory. - -To build an executable ``stress-test'' and measurement program, type -`make run' in the top-level directory. Run `time/raw' to run the -stress tests. - - -* Installation - -Build the QuickThreads library (see above) and then copy `libqt.a' to -the installation library directory (e.g., /usr/local/lib) and `qt.h' -and `qtmd.h' to the installation include directory (e.g., -/usr/local/include). diff --git a/qt/Makefile.base b/qt/Makefile.base deleted file mode 100644 index 73a082f50..000000000 --- a/qt/Makefile.base +++ /dev/null @@ -1,112 +0,0 @@ -.SUFFIXES: .c .o .s .E - -# -# Need to include from the current directory because "qt.h" -# will include <qtmd.h>. -# -CFLAGS = -I. -g - -# -# Fix this to be something meaningful for your system. -# -DEST = /dev/null - -DOC = users.tout - -EXTHDRS = /usr/include/stdio.h - -HDRS = qt.h \ - qtmd.h \ - stp.h - -LDFLAGS = $(CFLAGS) - -EXTLIBS = - -LIBS = libstp.a libqt.a - -LINKER = $(CC) - -MAKEFILE = Makefile - -M = Makefile configuration - -OBJS = qtmdb.o \ - meas.o - -QTOBJS = qt.o qtmds.o qtmdc.o - -STPOBJS = stp.o - -PR = -Pps - -PRINT = pr - -PROGRAM = run - -SRCS = meas.c \ - qt.c \ - qtmdc.c \ - qtmds.s \ - qtmdb.s - -TMP_INIT = tmp.init -TMP_SWAP = tmp.swap - -.DEFAULT: - co -q $@ - -.c.E: force - $(CC) $(CFLAGS) -E $*.c > $*.E - -all: libqt.a libstp.a $(PROGRAM) $(M) - -libqt.a: $(QTOBJS) $(M) - ar crv libqt.a $(QTOBJS) - ranlib libqt.a - -libstp.a: $(STPOBJS) $(M) - ar crv libstp.a $(STPOBJS) - ranlib libstp.a - -$(PROGRAM): $(OBJS) $(LIBS) $(M) - @echo "Loading $(PROGRAM) ... " -# ld -o $(PROGRAM) /lib/crt0.o $(OBJS) -lc - $(LINKER) $(LDFLAGS) $(OBJS) $(LIBS) $(EXTLIBS) -o $(PROGRAM) - @echo "done" - -clean: - rm -f $(OBJS) $(PROGRAM) $(TMP_INIT) $(TMP_SWAP) $(DOC) - rm -f libqt.a libstp.a - rm -f $(QTOBJS) $(STPOBJS) - -depend:; @mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) DEST=$(DEST) - -doc: users.ms raw - time/assim < raw | grep "^init" | sed 's/^init //' > $(TMP_INIT) - time/assim < raw | grep "^swap" | sed 's/^swap //' > $(TMP_SWAP) - soelim users.ms | tbl $(PR) | troff -t $(PR) -ms > $(DOC) - -index:; @ctags -wx $(HDRS) $(SRCS) - -print:; @$(PRINT) $(HDRS) $(SRCS) - -program: $(PROGRAM) - -tags: $(HDRS) $(SRCS); @ctags $(HDRS) $(SRCS) - -update: $(DEST)/$(PROGRAM) - -$(DEST)/$(PROGRAM): $(SRCS) $(LIBS) $(HDRS) $(EXTHDRS) - @make -f $(MAKEFILE) DEST=$(DEST) install - -QT_H = qt.h $(QTMD_H) -QTMD_H = qtmd.h - -### -qtmdb.o: $(M) qtmdb.s b.h -meas.o: $(M) meas.c /usr/include/stdio.h $(QT_H) b.h stp.h -qt.o: $(M) qt.c $(QT_H) -stp.o: $(M) stp.c stp.h $(QT_H) -qtmds.o: $(M) qtmds.s -qtmdc.o: $(M) qtmdc.c $(QT_H) diff --git a/qt/Makefile.in b/qt/Makefile.in deleted file mode 100644 index d47b4a05b..000000000 --- a/qt/Makefile.in +++ /dev/null @@ -1,129 +0,0 @@ -# Makefile for libqt -# -# Copyright (C) 1996, Free Software Foundation, Inc. -# -# This file is part of GNU GUILE. -# -# GNU GUILE 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. -# -# GNU GUILE 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 GNU GUILE; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - -SHELL = /bin/sh -srcdir = @srcdir@ -VPATH = @srcdir@ - -prefix = @prefix@ -exec_prefix = $(prefix) -libdir = $(exec_prefix)/lib -includedir = $(prefix)/include/threads -infodir = $(prefix)/info - -CC = @CC@ -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ - -DEFS = @DEFS@ -LIBS = @LIBS@ - -AR_FLAGS = rc -RANLIB = @RANLIB@ - -CFLAGS = -g -XCFLAGS = $(CFLAGS) -I. -LDFLAGS = -g - -#### End of system configuration section. #### - -distfiles = .cvsignore CHANGES ChangeLog INSTALL Makefile.base \ - Makefile.in README README.MISC README.PORT b.h config configure \ - configure.in copyright.h meas.c qt.c qt.h.in stp.c stp.h -plugin_distfiles = OPT greet -md_distfiles = \ - default.Makefile null.README null.c \ - axp.1.Makefile axp.2.Makefile axp.Makefile axp.README axp.c \ - axp.h axp.s axp_b.s \ - hppa-cnx.Makefile hppa.Makefile hppa.h hppa.s hppa_b.s \ - i386.README i386.h i386.s i386_b.s \ - ksr1.Makefile ksr1.h ksr1.s ksr1_b.s \ - m88k.Makefile m88k.c m88k.h m88k.s m88k_b.s \ - mips-irix5.s mips.h mips.s mips_b.s \ - solaris.README sparc.h sparc.s sparc_b.s _sparc.s _sparc_b.s \ - vax.h vax.s vax_b.s -time_distfiles = README.time assim cswap go init prim raw - -all_objs= qt.o qtmds.o qtmdc.o - -all: @target_all@ - -libqt.a: $(all_objs) - $(AR) $(AR_FLAGS) libqt.a $(all_objs) - $(RANLIB) libqt.a - -# The `dist' target in the top-level Makefile uses this `dist-dir' -# target to select the appropriate files for distribution from the -# directory containing this Makefile. -.PHONY: dist-dir -dist-dir: - mkdir ${DISTDIR} - for f in ${distfiles}; do \ - ln ${srcdir}/$$f ${DISTDIR}; \ - done - mkdir ${DISTDIR}/PLUGIN - for f in ${plugin_distfiles}; do \ - ln ${srcdir}/PLUGIN/$$f ${DISTDIR}/PLUGIN; \ - done - mkdir ${DISTDIR}/md - for f in ${md_distfiles}; do \ - ln ${srcdir}/md/$$f ${DISTDIR}/md; \ - done - mkdir ${DISTDIR}/time - for f in ${time_distfiles}; do \ - ln ${srcdir}/time/$$f ${DISTDIR}/time; \ - done - - -install: all - test -d $(prefix) || mkdir $(prefix) - test -d $(libdir) || mkdir $(libdir) - $(INSTALL) libqt.a $(libdir)/libqt.a - $(RANLIB) $(libdir)/libqt.a - $(INSTALL) $(srcdir)/qt.h $(includedir); - -uninstall: - -rm -f $(libdir)/libqt.a - -rm -f $(includedir)/qt.h - -info: - -clean: - -rm -f guile - -rm -f $(all_objs) - -distclean: clean - -rm -f config.cache - -rm -f config.log - -rm -f config.status - -realclean: distclean - -### - -qt.o: $(srcdir)/qt.c @qtmd_h@ qt.h $(srcdir)/copyright.h - $(CC) -o qt.o -c $(CPPFLAGS) $(DEFS) $(XCFLAGS) -I$(srcdir) $(srcdir)/qt.c - -qtmds.o: @qtmds_s@ - $(CC) -o qtmds.o -c $(CPPFLAGS) $(DEFS) $(XCFLAGS) -I$(srcdir) @qtmds_s@ - -qtmdc.o: @qtmdc_c@ @qtmd_h@ - $(CC) -o qtmdc.o -c $(CPPFLAGS) $(DEFS) $(XCFLAGS) -I$(srcdir) @qtmdc_c@ - diff --git a/qt/README b/qt/README deleted file mode 100644 index b014b91bf..000000000 --- a/qt/README +++ /dev/null @@ -1,89 +0,0 @@ -This is a source code distribution for QuickThreads. QuickThreads is a -toolkit for building threads packages; it is described in detail in the -University of Washington CS&E Technical report #93-05-06, available via -anonymous ftp from `ftp.cs.washington.edu' (128.95.1.4, as of Oct. '94) -in `tr/1993/05/UW-CSE-93-05-06.PS.Z'. - -This distribution shows basic ideas in QuickThreads and elaborates with -example implementations for a gaggle of machines. As of October those -machines included: - - 80386 faimly - 88000 faimily - DEC AXP (Alpha) family - HP-PA family - KSR - MIPS family - SPARC V8 family - VAX family - -Configuration, build, and installation are described in INSTALL. - -Be aware: that there is no varargs code for the KSR. - -The HP-PA port was designed to work with both HP workstations -and Convex SPP computers. It was generously provided by Uwe Reder -<uereder@cip.informatik.uni-erlangen.de>. It is part of the ELiTE -(Erlangen Lightweight Thread Environment) project directed by -Frank Bellosa <bellosa@informatik.uni-erlangen.de> at the Operating -Systems Department of the University of Erlangen (Germany). - -Other contributors include: Weihaw Chuang, Richard O'Keefe, -Laurent Perron, John Polstra, Shinji Suzuki, Assar Westerlund, -thanks also to Peter Buhr and Dirk Grunwald. - - -Here is a brief summary: - -QuickThreads is a toolkit for building threads packages. It is my hope -that you'll find it easier to use QuickThreads normally than to take it -and modify the raw cswap code to fit your application. The idea behind -QuickThreads is that it should make it easy for you to write & retarget -threads packages. If you want the routine `t_create' to create threads -and `t_block' to suspend threads, you write them using the QuickThreads -`primitive' operations `QT_SP', `QT_INIT', and `QT_BLOCK', that perform -machine-dependent initialization and blocking, plus code you supply for -performing the portable operatons. For example, you might write: - - t_create (func, arg) - { - stk = malloc (STKSIZE); - stackbase = QT_SP (stk, STKSIZE); - sp = QT_INIT (stakcbase, func, arg); - qput (runq, sp); - } - -Threads block by doing something like: - - t_block() - { - sp_next = qget (runq); - QT_BLOCK (helper, runq, sp_next); - // wake up again here - } - - // called by QT_BLOCK after the old thread has blocked, - // puts the old thread on the queue `onq'. - helper (sp_old, onq) - { - qput (onq, sp_old); - } - -(Of course) it's actually a bit more complex than that, but the general -idea is that you write portable code to allocate stacks and enqueue and -dequeue threads. Than, to get your threads package up and running on a -different machine, you just reconfigure QuickThreads and recompile, and -that's it. - -The QuickThreads `distribution' includes a sample threads package (look -at stp.{c,h}) that is written in terms of QuickThreads operations. The -TR mentioned above explains the simple threads package in detail. - - - -If you do use QuickThreads, I'd like to hear both about what worked for -you and what didn't work, problems you had, insights gleaned, etc. - -Let me know what you think. - -David Keppel <pardo@cs.washington.edu> diff --git a/qt/README.MISC b/qt/README.MISC deleted file mode 100644 index d10e487cf..000000000 --- a/qt/README.MISC +++ /dev/null @@ -1,56 +0,0 @@ -Here's some machine-specific informatin for various systems: - -m88k on g88.sim - - .g88init: - echo (gdb) target sim\n - target sim - echo (gdb) ecatch all\n - ecatch all - echo (gdb) break exit\n - break exit - % vi Makefile // set CC and AS - % setenv MEERKAT /projects/cer/meerkat - % set path=($MEERKAT/bin $path) - % make run - % g88.sim run - (g88) run run N // where `N' is the test number - - -m88k on meerkats, cross compile as above (make run) - - Run w/ g88: - %g88 run - (g88) source /homes/rivers/robertb/.gdbinit - (g88) me - which does - (g88) set $firstchars=6 - (g88) set $resetonattach=1 - (g88) attach /dev/pp0 - then download - (g88) dl - and run with - (g88) continue - - Really the way to run it is: - (g88) source - (g88) me - (g88) win - (g88) dead 1 - (g88) dead 2 - (g88) dead 3 - (g88) dl - (g88) cont - - To rerun - (g88) init - (g88) dl - - To run simulated meerkat: - (g88) att sim - <<then use normal commands>> - - On 4.5 g88: - (g88) target sim memsize - instead of attatch - (g88) ecatch all # catch exception before becomes error diff --git a/qt/README.PORT b/qt/README.PORT deleted file mode 100644 index d56300923..000000000 --- a/qt/README.PORT +++ /dev/null @@ -1,112 +0,0 @@ -Date: Tue, 11 Jan 94 13:23:11 -0800 -From: "pardo@cs.washington.edu" <pardo@meitner.cs.washington.edu> - ->[What's needed to get `qt' on an i860-based machine?] - -Almost certainly "some assembly required" (pun accepted). - -To write a cswap port, you need to understand the context switching -model. Turn to figure 2 in the QT TR. Here's about what the assembly -code looks like to implement that: - - qt_cswap: - adjust stack pointer - save callee-save registers on to old's stack - argument register <- old sp - sp <- new sp - (*helper)(args...) - restore callee-save registers from new's stack - unadjust stack pointer - return - -Once more in slow motion: - - - `old' thread calls context switch routine (new, a0, a1, h) - - cswap routine saves registers that have useful values - - cswap routine switches to new stack - - cswap routine calls helper function (*h)(old, a0, a1) - - when helper returns, cswap routine restores registers - that were saved the last time `new' was suspended - - cswap routine returns to whatever `new' routine called the - context switch routine - -There's a few tricks here. First, how do you start a thread running -for the very first time? Answer is: fake some stuff on the stack -so it *looks* like it was called from the middle of some routine. -When the new thread is restarted, it is treated like any other -thread. It just so happens that it's never really run before, but -you can't tell that because the saved state makes it look like like -it's been run. The return pc is set to point at a little stub of -assembly code that loads up registers with the right values and -then calls `only'. - -Second, I advise you to forget about varargs routines (at least -until you get single-arg routines up and running). - -Third, on most machines `qt_abort' is the same as `qt_cswap' except -that it need not save any callee-save registers. - -Fourth, `qt_cswap' needs to save and restore any floating-point -registers that are callee-save (see your processor handbook). On -some machines, *no* floating-point registers are callee-save, so -`qt_cswap' is exactly the same as the integer-only cswap routine. - -I suggest staring at the MIPS code for a few minutes. It's "mostly" -generic RISC code, so it gets a lot of the flavor across without -getting too bogged down in little nitty details. - - - -Now for a bit more detail: The stack is laid out to hold callee-save -registers. On many machines, I implemented fp cswap as save fp -regs, call integer cswap, and when integer cswap returns (when the -thread wakes up again), restore fp regs. - -For thread startup, I figure out some callee-save registers that -I use to hold parameters to the startup routine (`only'). When -the thread is being started it doesn't have any saved registers -that need to be restored, but I go ahead and let the integer context -switch routine restore some registers then "return" to the stub -code. The stub code then copies the "callee save" registers to -argument registers and calls the startup routine. That keeps the -stub code pretty darn simple. - -For each machine I need to know the machine's procedure calling -convention before I write a port. I figure out how many callee-save -registers are there and allocate enough stack space for those -registers. I also figure out how parameters are passed, since I -will need to call the helper function. On most RISC machines, I -just need to put the old sp in the 0'th arg register and then call -indirect through the 3rd arg register; the 1st and 2nd arg registers -are already set up correctly. Likewise, I don't touch the return -value register between the helper's return and the context switch -routine's return. - -I have a bunch of macros set up to do the stack initialization. -The easiest way to debug this stuff is to go ahead and write a C -routine to do stack initialization. Once you're happy with it you -can turn it in to a macro. - -In general there's a lot of ugly macros, but most of them do simple -things like return constants, etc. Any time you're looking at it -and it looks confusing you just need to remember "this is actually -simple code, the only tricky thing is calling the helper between -the stack switch and the new thread's register restore." - - -You will almost certainly need to write the assembly code fragment -that starts a thread. You might be able to do a lot of the context -switch code with `setjmp' and `longjmp', if they *happen* to have -the "right" implementation. But getting all the details right (the -helper can return a value to the new thread's cswap routine caller) -is probaby trickier than writing code that does the minimum and -thus doesn't have any extra instructions (or generality) to cause -problems. - -I don't know of any ports besides those included with the source -code distribution. If you send me a port I will hapily add it to -the distribution. - -Let me know as you have questions and/or comments. - - ;-D on ( Now *that*'s a switch... ) Pardo diff --git a/qt/b.h b/qt/b.h deleted file mode 100644 index 862e78ba0..000000000 --- a/qt/b.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef B_H -#define B_H "$Header: /home/ludo/src/guile.cvs/gitification/guile-cvs/guile/guile-core/qt/b.h,v 1.1 1996-10-01 03:27:25 mdj Exp $" - -#include "copyright.h" - -extern void b_call_reg (int n); -extern void b_call_imm (int n); -extern void b_add (int n); -extern void b_load (int n); - -#endif /* ndef B_H */ diff --git a/qt/config b/qt/config deleted file mode 100755 index 010071ddd..000000000 --- a/qt/config +++ /dev/null @@ -1,308 +0,0 @@ -#! /bin/sh -x - -rm -f Makefile Makefile.md README.md qtmd.h qtmdb.s qtmdc.c qtmds.s configuration - -case $1 in - axp*) - : "DEC AXP" - case $1 in - axp-osf1*) - : "Compile using /bin/cc under OSF 1.x." - ln -s md/axp.1.Makefile Makefile.md - ;; - axp-osf2*) - : "Compile using /bin/cc under OSF 2.x." - ln -s md/axp.1.Makefile Makefile.md - ;; - *) - : "Compile using GNU CC." - ln -s md/axp.Makefile Makefile.md - ;; - esac - - ln -s md/axp.h qtmd.h - ln -s md/axp.c qtmdc.c - ln -s md/axp.s qtmds.s - ln -s md/axp_b.s qtmdb.s - ln -s md/axp.README README.md - iter_init=1000000000 - iter_runone=10000000 - iter_blockint=10000000 - iter_blockfloat=10000000 - iter_vainit0=10000000 - iter_vainit2=10000000 - iter_vainit4=10000000 - iter_vainit8=10000000 - iter_vastart0=10000000 - iter_vastart2=10000000 - iter_vastart4=10000000 - iter_vastart8=10000000 - iter_bench_call_reg=10000000 - iter_bench_call_imm=10000000 - iter_bench_add=100000000 - iter_bench_load=100000000 - ;; - - hppa*) - : "HP's PA-RISC 1.1 processors." - - case $1 in - hppa-cnx-spp*) - : "Convex SPP (PA-RISC 1.1 processors)." - ln -s md/hppa-cnx.Makefile Makefile.md - ;; - *) - ln -s md/hppa.Makefile Makefile.md - ;; - esac - - ln -s md/hppa.h qtmd.h - ln -s md/null.c qtmdc.c - ln -s md/hppa.s qtmds.s - ln -s md/hppa_b.s qtmdb.s - iter_init=10000000 - iter_runone=1000000 - iter_blockint=1000000 - iter_blockfloat=1000000 - iter_vainit0=1000000 - iter_vainit2=1000000 - iter_vainit4=1000000 - iter_vainit8=1000000 - iter_vastart0=1000000 - iter_vastart2=1000000 - iter_vastart4=1000000 - iter_vastart8=1000000 - iter_bench_call_reg=10000000 - iter_bench_call_imm=10000000 - iter_bench_add=100000000 - iter_bench_load=100000000 - ;; - - iX86*) - case $1 in - iX86-ss*) - : "Assemlber comments '//'" - sed 's/\/\*/\/\//' < md/i386.s > qtmds.s - sed 's/\/\*/\/\//' < md/i386_b.s > qtmdb.s - ;; - - *) - ln -s md/i386.s qtmds.s - ln -s md/i386_b.s qtmdb.s - ;; - esac - : "Intel 80386 and compatibles (not '286...)" - ln -s md/default.Makefile Makefile.md - ln -s md/i386.h qtmd.h - ln -s md/null.c qtmdc.c - ln -s md/i386.README README.md - iter_init=10000000 - iter_runone=1000000 - iter_blockint=1000000 - iter_blockfloat=1000000 - iter_vainit0=1000000 - iter_vainit2=1000000 - iter_vainit4=1000000 - iter_vainit8=1000000 - iter_vastart0=1000000 - iter_vastart2=1000000 - iter_vastart4=1000000 - iter_vastart8=1000000 - iter_bench_call_reg=1000000 - iter_bench_call_imm=1000000 - iter_bench_add=100000000 - iter_bench_load=10000000 - ;; - - m68k) - : "Motorola 68000 family -- incomplete!" - ln -s md/default.Makefile Makefile.md - ln -s md/m68k.h qtmd.h - ln -s md/null.c qtmdc.c - ln -s md/m68k.s qtmds.s - ln -s md/m68k_b.s qtmdb.s - ln -s md/null.README README.md - ;; - - m88k) - : "Motorola 88000 family" - ln -s md/m88k.Makefile Makefile.md - ln -s md/m88k.h qtmd.h - ln -s md/m88k.c qtmdc.c - ln -s md/m88k.s qtmds.s - ln -s md/m88k_b.s qtmdb.s - ln -s md/null.README README.md - iter_init=1000000 - iter_runone=100000 - iter_blockint=100000 - iter_blockfloat=100000 - iter_vainit0=100000 - iter_vainit2=100000 - iter_vainit4=100000 - iter_vainit8=100000 - iter_vastart0=100000 - iter_vastart2=100000 - iter_vastart4=100000 - iter_vastart8=100000 - iter_bench_call_reg=100000000 - iter_bench_call_imm=100000000 - iter_bench_add=1000000000 - iter_bench_load=100000000 - ;; - - mips*) - : "MIPS R2000 and R3000." - - case $1 in - mips-irix5*) - : "Silicon Graphics Irix with dynamic linking" - : "Use mips for irix4." - ln -s md/mips-irix5.s qtmds.s - ;; - *) - ln -s md/mips.s qtmds.s - ;; - esac - - ln -s md/default.Makefile Makefile.md - ln -s md/mips.h qtmd.h - ln -s md/null.c qtmdc.c - ln -s md/mips_b.s qtmdb.s - ln -s md/null.README README.md - iter_init=10000000 - iter_runone=10000000 - iter_blockint=10000000 - iter_blockfloat=10000000 - iter_vainit0=1000000 - iter_vainit2=1000000 - iter_vainit4=1000000 - iter_vainit8=1000000 - iter_vastart0=1000000 - iter_vastart2=1000000 - iter_vastart4=1000000 - iter_vastart8=1000000 - iter_bench_call_reg=100000000 - iter_bench_call_imm=100000000 - iter_bench_add=1000000000 - iter_bench_load=100000000 - ;; - - sparc*) - : "SPARC processors" - case $1 in - sparc-os2*) - sed 's/_qt_/qt_/' md/sparc.s > qtmds.s - sed 's/_b_/b_/' md/sparc_b.s > qtmdb.s - ln -s md/solaris.README README.md - ;; - *) - ln -s md/sparc.s qtmds.s - ln -s md/sparc_b.s qtmdb.s - ln -s md/null.README README.md - ;; - esac - - ln -s md/default.Makefile Makefile.md - ln -s md/sparc.h qtmd.h - ln -s md/null.c qtmdc.c - iter_init=10000000 - iter_runone=1000000 - iter_blockint=1000000 - iter_blockfloat=1000000 - iter_vainit0=1000000 - iter_vainit2=1000000 - iter_vainit4=1000000 - iter_vainit8=1000000 - iter_vastart0=1000000 - iter_vastart2=1000000 - iter_vastart4=1000000 - iter_vastart8=1000000 - iter_bench_call_reg=10000000 - iter_bench_call_imm=10000000 - iter_bench_add=100000000 - iter_bench_load=100000000 - ;; - - vax*) - : "DEC VAX processors." - ln -s md/default.Makefile Makefile.md - ln -s md/vax.h qtmd.h - ln -s md/null.c qtmdc.c - ln -s md/vax.s qtmds.s - ln -s md/vax_b.s qtmdb.s - ln -s md/null.README README.md - iter_init=1000000 - iter_runone=100000 - iter_blockint=100000 - iter_blockfloat=100000 - iter_vainit0=100000 - iter_vainit2=100000 - iter_vainit4=100000 - iter_vainit8=100000 - iter_vastart0=100000 - iter_vastart2=100000 - iter_vastart4=100000 - iter_vastart8=100000 - iter_bench_call_reg=10000000 - iter_bench_call_imm=10000000 - iter_bench_add=10000000 - iter_bench_load=1000000 - ;; - - ksr1) - : "Kendall Square Research model KSR-1." - : "Varargs is not currently supported." - ln -s md/ksr1.Makefile Makefile.md - ln -s md/ksr1.h qtmd.h - ln -s md/null.c qtmdc.c - ln -s md/ksr1.s qtmds.s - ln -s md/ksr1_b.s qtmdb.s - ln -s md/null.README README.md - iter_init=1000000 - iter_runone=100000 - iter_blockint=100000 - iter_blockfloat=100000 - iter_vainit0=100000 - iter_vainit2=100000 - iter_vainit4=100000 - iter_vainit8=100000 - iter_vastart0=100000 - iter_vastart2=100000 - iter_vastart4=100000 - iter_vastart8=100000 - iter_bench_call_reg=10000000 - iter_bench_call_imm=10000000 - iter_bench_add=10000000 - iter_bench_load=1000000 - ;; - - clean) - : Deconfigure - exit 0 - ;; - - *) - echo "Unknown configuration" - exit 1 - ;; -esac - -cat Makefile.md Makefile.base > Makefile - -echo set config_machine=$1 >> configuration -echo set config_init=$iter_init >> configuration -echo set config_runone=$iter_runone >> configuration -echo set config_blockint=$iter_blockint >> configuration -echo set config_blockfloat=$iter_blockfloat >> configuration -echo set config_vainit0=$iter_vainit0 >> configuration -echo set config_vainit2=$iter_vainit2 >> configuration -echo set config_vainit4=$iter_vainit4 >> configuration -echo set config_vainit8=$iter_vainit8 >> configuration -echo set config_vastart0=$iter_vastart0 >> configuration -echo set config_vastart2=$iter_vastart2 >> configuration -echo set config_vastart4=$iter_vastart4 >> configuration -echo set config_vastart8=$iter_vastart8 >> configuration -echo set config_bcall_reg=$iter_bench_call_reg >> configuration -echo set config_bcall_imm=$iter_bench_call_imm >> configuration -echo set config_b_add=$iter_bench_add >> configuration -echo set config_b_load=$iter_bench_load >> configuration diff --git a/qt/configure b/qt/configure deleted file mode 100755 index 46d9f5485..000000000 --- a/qt/configure +++ /dev/null @@ -1,1254 +0,0 @@ -#! /bin/sh - -# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.10 -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. - -# Defaults: -ac_help= -ac_default_prefix=/usr/local -# Any additions from configure.in: -ac_help="$ac_help - --with-threads thread interface" - -# Initialize some variables set by options. -# The variables have the same names as the options, with -# dashes changed to underlines. -build=NONE -cache_file=./config.cache -exec_prefix=NONE -host=NONE -no_create= -nonopt=NONE -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -target=NONE -verbose= -x_includes=NONE -x_libraries=NONE -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= - -ac_prev= -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=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) ac_optarg= ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case "$ac_option" in - - -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 ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$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" ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir="$ac_optarg" ;; - - -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; - - -enable-* | --enable-*) - ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "enable_${ac_feature}='$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) - # 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 << EOF -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --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 -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -EOF - if test -n "$ac_help"; then - echo "--enable and --with options recognized:$ac_help" - fi - exit 0 ;; - - -host | --host | --hos | --ho) - ac_prev=host ;; - -host=* | --host=* | --hos=* | --ho=*) - host="$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" ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - 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) - 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" ;; - - -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 ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.10" - exit 0 ;; - - -with-* | --with-*) - ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "with_${ac_package}='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=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" ;; - - -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } - ;; - - *) - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then - echo "configure: warning: $ac_option: invalid host type" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" - ;; - - esac -done - -if test -n "$ac_prev"; then - { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } -fi - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -# 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 -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 -fi -exec 5>./config.log - -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&5 - -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg -do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; - esac -done - -# 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 "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LANG+set}" = set; then LANG=C; export LANG; fi - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h - -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=qt.c - -# 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 its parent. - ac_prog=$0 - ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. - 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 - if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } - else - { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } - fi -fi -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` - -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file -else - echo "creating cache $cache_file" - > $cache_file -fi - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -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' - -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - 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 - - - -# Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="gcc" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -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 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - ac_prog_rejected=no - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - break - fi - done - IFS="$ac_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 $# -gt 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 - set dummy "$ac_dir/$ac_word" "$@" - shift - ac_cv_prog_CC="$@" - fi -fi -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } -fi - -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.c <<EOF -#ifdef __GNUC__ - yes; -#endif -EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:605: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gcc=yes -else - ac_cv_prog_gcc=no -fi -fi - -echo "$ac_t""$ac_cv_prog_gcc" 1>&6 -if test $ac_cv_prog_gcc = yes; then - GCC=yes - if test "${CFLAGS+set}" != set; then - echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_gcc_g'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - echo 'void f(){}' > conftest.c -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then - ac_cv_prog_gcc_g=yes -else - ac_cv_prog_gcc_g=no -fi -rm -f conftest* - -fi - -echo "$ac_t""$ac_cv_prog_gcc_g" 1>&6 - if test $ac_cv_prog_gcc_g = yes; then - CFLAGS="-g -O" - else - CFLAGS="-O" - fi - fi -else - GCC= - test "${CFLAGS+set}" = set || CFLAGS="-g" -fi - -echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then -if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - # This must be in double quotes, not single quotes, because CPP may get - # substituted into the Makefile and "${CC-cc}" will confuse make. - CPP="${CC-cc} -E" - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. - cat > conftest.$ac_ext <<EOF -#line 657 "configure" -#include "confdefs.h" -#include <assert.h> -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:663: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - rm -rf conftest* - CPP="${CC-cc} -E -traditional-cpp" - cat > conftest.$ac_ext <<EOF -#line 672 "configure" -#include "confdefs.h" -#include <assert.h> -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:678: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - rm -rf conftest* - CPP=/lib/cpp -fi -rm -f conftest* -fi -rm -f conftest* - ac_cv_prog_CPP="$CPP" -fi - CPP="$ac_cv_prog_CPP" -else - ac_cv_prog_CPP="$CPP" -fi -echo "$ac_t""$CPP" 1>&6 - -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 - fi -done -if test -z "$ac_aux_dir"; then - { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } -fi -ac_config_guess=$ac_aux_dir/config.guess -ac_config_sub=$ac_aux_dir/config.sub -ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. - -# 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 -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# ./install, which can be erroneously created by make from ./install.sh. -echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -if test -z "$INSTALL"; then -if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - # Account for people who put trailing slashes in PATH elements. - case "$ac_dir/" in - /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - for ac_prog in ginstall installbsd scoinst install; do - if test -f $ac_dir/$ac_prog; then - if test $ac_prog = install && - grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - # OSF/1 installbsd also uses dspmsg, but is usable. - : - else - ac_cv_path_install="$ac_dir/$ac_prog -c" - break 2 - fi - fi - done - ;; - esac - done - IFS="$ac_save_ifs" - -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. We don't cache a - # path for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the path is relative. - INSTALL="$ac_install_sh" - fi -fi -echo "$ac_t""$INSTALL" 1>&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_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -# Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_RANLIB="ranlib" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" -fi -fi -RANLIB="$ac_cv_prog_RANLIB" -if test -n "$RANLIB"; then - echo "$ac_t""$RANLIB" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - -# Tell configure where to find config.guess -ac_aux_dir= -for ac_dir in .. $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 - fi -done -if test -z "$ac_aux_dir"; then - { echo "configure: error: can not find install-sh or install.sh in .. $srcdir/.." 1>&2; exit 1; } -fi -ac_config_guess=$ac_aux_dir/config.guess -ac_config_sub=$ac_aux_dir/config.sub -ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. - #`cd $srcdir; pwd`/..) - - - - - -echo $ac_n "checking "threads package type"""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'cy_cv_threads_package'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - -if eval "test \"`echo '$''{'cy_cv_threads_cflags'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - -if eval "test \"`echo '$''{'cy_cv_threads_libs'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - -use_threads=no; -# Check whether --with-threads or --without-threads was given. -if test "${with_threads+set}" = set; then - withval="$with_threads" - use_threads=$withval -else - use_threads=no -fi - -test -n "$use_threads" || use_threads=qt -threads_package=unknown -if test "$use_threads" != no; then - if test "$use_threads" = yes || test "$use_threads" = qt; then - # Look for qt in source directory. This is a hack: we look in - # "./qt" because this check might be run at the top level. - if test -f $srcdir/../qt/qt.c || test -f $srcdir/qt/qt.c; then - threads_package=COOP - cy_cv_threads_cflags="-I$srcdir/../qt -I../qt" - cy_cv_threads_libs="../threads/libthreads.a ../qt/libqt.a" - fi - else - if test -f $use_threads/qt.c; then - # FIXME seems as though we should try to use an installed qt here. - threads_package=COOP - cy_cv_threads_cflags="-I$use_threads -I../qt" - cy_cv_threads_libs="../threads/libthreads.a ../qt/libqt.a" - fi - fi - if test "$use_threads" = pthreads; then - # Look for pthreads in srcdir. See above to understand why - # we always set threads_package. - if test -f $srcdir/../../pthreads/pthreads/queue.c \ - || test -f $srcdir/../pthreads/pthreads/queue.c; then - threads_package=MIT - cy_cv_threads_cflags="-I$srcdir/../../pthreads/include" - cy_cv_threads_libs="-L../../pthreads/lib -lpthread" - fi - fi - saved_CPP="$CPPFLAGS" - saved_LD="$LDFLAGS" - saved_LIBS="$LIBS" - if test "$threads_package" = unknown; then - CPPFLAGS="-I$use_threads/include" - LDFLAGS="-L$use_threads/lib" - LIBS="-lgthreads -lmalloc" - cat > conftest.$ac_ext <<EOF -#line 889 "configure" -#include "confdefs.h" -#include <pthread.h> -int main() { return 0; } -int t() { - -pthread_equal(NULL,NULL); - -; return 0; } -EOF -if { (eval echo configure:899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then - rm -rf conftest* - threads_package=FSU -fi -rm -f conftest* - - fi - if test "$threads_package" = unknown; then - LIBS="-lpthread" - cat > conftest.$ac_ext <<EOF -#line 909 "configure" -#include "confdefs.h" -#include <pthread.h> -int main() { return 0; } -int t() { - -pthread_equal(NULL,NULL); - -; return 0; } -EOF -if { (eval echo configure:919: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then - rm -rf conftest* - threads_package=MIT -fi -rm -f conftest* - - fi - if test "$threads_package" = unknown; then - LIBS="-lpthreads" - cat > conftest.$ac_ext <<EOF -#line 929 "configure" -#include "confdefs.h" -#include <pthread.h> -int main() { return 0; } -int t() { - -pthread_equal(NULL,NULL); - -; return 0; } -EOF -if { (eval echo configure:939: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then - rm -rf conftest* - threads_package=PCthreads -fi -rm -f conftest* - - fi - cy_cv_threads_cflags="$CPPFLAGS $cy_cv_threads_cflags" - cy_cv_threads_libs="$LDFLAGS $LIBS $cy_cv_threads_libs" - cy_cv_threads_package=$threads_package - CPPFLAGS="$saved_CPP" - LDFLAGS="$saved_LD" - LIBS="$saved_LIBS" - if test "$threads_package" = unknown; then - { echo "configure: error: "cannot find thread library installation"" 1>&2; exit 1; } - fi -fi - -fi - - -fi - - -fi - -echo "$ac_t""$cy_cv_threads_package" 1>&6 - - -target_all= -if test "$cy_cv_threads_package" = COOP; then - target_all=libqt.a -fi - -# Determine the host we are working on - -# Make sure we can run config.sub. -if $ac_config_sub sun4 >/dev/null 2>&1; then : -else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } -fi - -echo $ac_n "checking host system type""... $ac_c" 1>&6 - -host_alias=$host -case "$host_alias" in -NONE) - case $nonopt in - NONE) - if host_alias=`$ac_config_guess`; then : - else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } - fi ;; - *) host_alias=$nonopt ;; - esac ;; -esac - -host=`$ac_config_sub $host_alias` -host_cpu=`echo $host | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\1/'` -host_vendor=`echo $host | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'` -host_os=`echo $host | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'` -echo "$ac_t""$host" 1>&6 - - -case "$host" in -i386-*-*|i486-*-*|i586-*-*) - qtmds_s=$srcdir/md/i386.s - qtmd_h=$srcdir/md/i386.h - qtmdc_c=$srcdir/md/null.c - ;; -mips-sgi-irix5*) - qtmds_s=$srcdir/md/mips-irix5.s - qtmd_h=$srcdir/md/mips.h - qtmdc_c=$srcdir/md/null.c - qtdmdb_s=$srcdir/md/mips_b.s - ;; -mips-*-*) - qtmds_s=$srcdir/md/mips.s - qtmd_h=$srcdir/md/mips.h - qtmdc_c=$srcdir/md/null.c - qtdmdb_s=$srcdir/md/mips_b.s - ;; -sparc-sun-solaris2.*) - qtmd_h=$srcdir/md/sparc.h - qtmdc_c=$srcdir/md/null.c - qtmds_s=$srcdir/md/sparc.s - qtdmdb_s=$srcdir/md/sparc_b.s - ;; -sparc-*-*) - qtmd_h=$srcdir/md/sparc.h - qtmdc_c=$srcdir/md/null.c - qtmds_s=$srcdir/md/_sparc.s - qtdmdb_s=$srcdir/md/_sparc_b.s - ;; -*) - echo "Unknown configuration; threads package disabled" - target_all='' - ;; -esac - - - - - - - -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 -# 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 | - sed -n "s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=\${\1='\2'}/p" \ - >> 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 - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Any assignment to VPATH causes Sun make to only execute -# the first set of double-colon rules, so remove it if not needed. -# If there is a colon in the path, we need to keep it. -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' -fi - -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -cat > conftest.defs <<\EOF -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g -s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g -s%\[%\\&%g -s%\]%\\&%g -s%\$%$$%g -EOF -DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` -rm -f conftest.defs - - -# Without the "./", some shells look in PATH for config.status. -: ${CONFIG_STATUS=./config.status} - -echo creating $CONFIG_STATUS -rm -f $CONFIG_STATUS -cat > $CONFIG_STATUS <<EOF -#! /bin/sh -# Generated automatically by configure. -# Run this file to recreate the current configuration. -# This directory was configured as follows, -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# -# $0 $ac_configure_args -# -# Compiler output produced by configure, useful for debugging -# configure, is in ./config.log if it exists. - -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" -for ac_option -do - case "\$ac_option" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" - exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; - -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "$CONFIG_STATUS generated by autoconf version 2.10" - exit 0 ;; - -help | --help | --hel | --he | --h) - echo "\$ac_cs_usage"; exit 0 ;; - *) echo "\$ac_cs_usage"; exit 1 ;; - esac -done - -ac_given_srcdir=$srcdir -ac_given_INSTALL="$INSTALL" - -trap 'rm -fr `echo "Makefile qt.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 -EOF -cat >> $CONFIG_STATUS <<EOF - -# Protect against being on the right side of a sed subst in config.status. -sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; - s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF -$ac_vpsub -$extrasub -s%@CFLAGS@%$CFLAGS%g -s%@CPPFLAGS@%$CPPFLAGS%g -s%@CXXFLAGS@%$CXXFLAGS%g -s%@DEFS@%$DEFS%g -s%@LDFLAGS@%$LDFLAGS%g -s%@LIBS@%$LIBS%g -s%@exec_prefix@%$exec_prefix%g -s%@prefix@%$prefix%g -s%@program_transform_name@%$program_transform_name%g -s%@bindir@%$bindir%g -s%@sbindir@%$sbindir%g -s%@libexecdir@%$libexecdir%g -s%@datadir@%$datadir%g -s%@sysconfdir@%$sysconfdir%g -s%@sharedstatedir@%$sharedstatedir%g -s%@localstatedir@%$localstatedir%g -s%@libdir@%$libdir%g -s%@includedir@%$includedir%g -s%@oldincludedir@%$oldincludedir%g -s%@infodir@%$infodir%g -s%@mandir@%$mandir%g -s%@CC@%$CC%g -s%@CPP@%$CPP%g -s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g -s%@INSTALL_DATA@%$INSTALL_DATA%g -s%@RANLIB@%$RANLIB%g -s%@host@%$host%g -s%@host_alias@%$host_alias%g -s%@host_cpu@%$host_cpu%g -s%@host_vendor@%$host_vendor%g -s%@host_os@%$host_os%g -s%@target_all@%$target_all%g -s%@qtmd_h@%$qtmd_h%g -s%@qtmdc_c@%$qtmdc_c%g -s%@qtmds_s@%$qtmds_s%g -s%@qtmdb_s@%$qtmdb_s%g - -CEOF -EOF -cat >> $CONFIG_STATUS <<EOF - -CONFIG_FILES=\${CONFIG_FILES-"Makefile qt.h"} -EOF -cat >> $CONFIG_STATUS <<\EOF -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then - # Support "outfile[:infile]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - # Adjust relative srcdir, etc. for subdirectories. - - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dir_suffix. - ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` - else - ac_dir_suffix= ac_dots= - fi - - case "$ac_given_srcdir" in - .) srcdir=. - if test -z "$ac_dots"; then top_srcdir=. - else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; - /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; - *) # Relative path. - srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" - top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - - case "$ac_given_INSTALL" in - [/$]*) INSTALL="$ac_given_INSTALL" ;; - *) INSTALL="$ac_dots$ac_given_INSTALL" ;; - esac - echo creating "$ac_file" - rm -f "$ac_file" - configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." - case "$ac_file" in - *Makefile*) ac_comsub="1i\\ -# $configure_input" ;; - *) ac_comsub= ;; - esac - sed -e "$ac_comsub -s%@configure_input@%$configure_input%g -s%@srcdir@%$srcdir%g -s%@top_srcdir@%$top_srcdir%g -s%@INSTALL@%$INSTALL%g -" -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file -fi; done -rm -f conftest.subs - - - -exit 0 -EOF -chmod +x $CONFIG_STATUS -rm -fr confdefs* $ac_clean_files -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 - diff --git a/qt/configure.in b/qt/configure.in deleted file mode 100644 index ea764861b..000000000 --- a/qt/configure.in +++ /dev/null @@ -1,65 +0,0 @@ -AC_INIT(qt.c) - -dnl Checks for programs. -AC_PROG_CC -AC_PROG_CPP -AC_PROG_INSTALL -AC_PROG_RANLIB - -# Tell configure where to find config.guess -AC_CONFIG_AUX_DIR(..) #`cd $srcdir; pwd`/..) - -builtin(sinclude, ../aclocal.m4) -CY_AC_WITH_THREADS - -target_all= -if test "$cy_cv_threads_package" = COOP; then - target_all=libqt.a -fi - -# Determine the host we are working on -AC_CANONICAL_HOST - -case "$host" in -i386-*-*|i486-*-*|i586-*-*) - qtmds_s=$srcdir/md/i386.s - qtmd_h=$srcdir/md/i386.h - qtmdc_c=$srcdir/md/null.c - ;; -mips-sgi-irix5*) - qtmds_s=$srcdir/md/mips-irix5.s - qtmd_h=$srcdir/md/mips.h - qtmdc_c=$srcdir/md/null.c - qtdmdb_s=$srcdir/md/mips_b.s - ;; -mips-*-*) - qtmds_s=$srcdir/md/mips.s - qtmd_h=$srcdir/md/mips.h - qtmdc_c=$srcdir/md/null.c - qtdmdb_s=$srcdir/md/mips_b.s - ;; -sparc-sun-solaris2.*) - qtmd_h=$srcdir/md/sparc.h - qtmdc_c=$srcdir/md/null.c - qtmds_s=$srcdir/md/sparc.s - qtdmdb_s=$srcdir/md/sparc_b.s - ;; -sparc-*-*) - qtmd_h=$srcdir/md/sparc.h - qtmdc_c=$srcdir/md/null.c - qtmds_s=$srcdir/md/_sparc.s - qtdmdb_s=$srcdir/md/_sparc_b.s - ;; -*) - echo "Unknown configuration; threads package disabled" - target_all='' - ;; -esac - -AC_SUBST(target_all) -AC_SUBST(qtmd_h) -AC_SUBST(qtmdc_c) -AC_SUBST(qtmds_s) -AC_SUBST(qtmdb_s) - -AC_OUTPUT(Makefile qt.h) diff --git a/qt/copyright.h b/qt/copyright.h deleted file mode 100644 index 8a2361f9e..000000000 --- a/qt/copyright.h +++ /dev/null @@ -1,12 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ diff --git a/qt/md/_sparc.s b/qt/md/_sparc.s deleted file mode 100644 index 1d8adc77e..000000000 --- a/qt/md/_sparc.s +++ /dev/null @@ -1,142 +0,0 @@ -/* sparc.s -- assembly support for the `qt' thread building kit. */ - -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - -/* #include <machine/trap.h> */ - - .text - .align 4 - .global _qt_blocki - .global _qt_block - .global _qt_abort - .global _qt_start - .global _qt_vstart - -/* Register assignment: -// %o0: incoming `helper' function to call after cswap -// also used as outgoing sp of old thread (qt_t *) -// %o1, %o2: -// parameters to `helper' function called after cswap -// %o3: sp of new thread -// %o5: tmp used to save old thread sp, while using %o0 -// to call `helper' f() after cswap. -// -// -// Aborting a thread is easy if there are no cached register window -// frames: just switch to the new stack and away we go. If there are -// cached register window frames they must all be written back to the -// old stack before we move to the new stack. If we fail to do the -// writeback then the old stack memory can be written with register -// window contents e.g., after the stack memory has been freed and -// reused. -// -// If you don't believe this, try setting the frame pointer to zero -// once we're on the new stack. This will not affect correctnes -// otherwise because the frame pointer will eventually get reloaded w/ -// the new thread's frame pointer. But it will be zero briefly before -// the reload. You will eventually (100,000 cswaps later on a small -// SPARC machine that I tried) get an illegal instruction trap from -// the kernel trying to flush a cached window to location 0x0. -// -// Solution: flush windows before switching stacks, which invalidates -// all the other register windows. We could do the trap -// conditionally: if we're in the lowest frame of a thread, the fp is -// zero already so we know there's nothing cached. But we expect most -// aborts will be done from a first function that does a `save', so we -// will rarely save anything and always pay the cost of testing to see -// if we should flush. -// -// All floating-point registers are caller-save, so this routine -// doesn't need to do anything to save and restore them. -// -// `qt_block' and `qt_blocki' return the same value as the value -// returned by the helper function. We get this ``for free'' -// since we don't touch the return value register between the -// return from the helper function and return from qt_block{,i}. -*/ - -_qt_block: -_qt_blocki: - sub %sp, 8, %sp /* Allocate save area for return pc. */ - st %o7, [%sp+64] /* Save return pc. */ -_qt_abort: - ta 0x03 /* Save locals and ins. */ - mov %sp, %o5 /* Remember old sp w/o chng ins/locals. */ - sub %o3, 64, %sp /* Allocate kwsa, switch stacks. */ - call %o0, 0 /* Call `helper' routine. */ - mov %o5, %o0 /* Pass old thread to qt_after_t() */ - /* .. along w/ args in %o1 & %o2. */ - - /* Restore callee-save regs. The kwsa - // is on this stack, so offset all - // loads by sizeof(kwsa), 64 bytes. - */ - ldd [%sp+ 0+64], %l0 - ldd [%sp+ 8+64], %l2 - ldd [%sp+16+64], %l4 - ldd [%sp+24+64], %l6 - ldd [%sp+32+64], %i0 - ldd [%sp+40+64], %i2 - ldd [%sp+48+64], %i4 - ldd [%sp+56+64], %i6 - ld [%sp+64+64], %o7 /* Restore return pc. */ - - retl /* Return to address in %o7. */ - add %sp, 72, %sp /* Deallocate kwsa, ret pc area. */ - - -/* The function calling conventions say there has to be a 1-word area -// in the caller's stack to hold a pointer to space for aggregate -// return values. It also says there should be a 6-word area to hold -// %o0..%o5 if the callee wants to save them (why? I don't know...) -// Round up to 8 words to maintain alignment. -// -// Parameter values were stored in callee-save regs and are moved to -// the parameter registers. -*/ -_qt_start: - mov %i1, %o0 /* `pu': Set up args to `only'. */ - mov %i2, %o1 /* `pt'. */ - mov %i4, %o2 /* `userf'. */ - call %i5, 0 /* Call client function. */ - sub %sp, 32, %sp /* Allocate 6-word callee space. */ - - call _qt_error, 0 /* `only' erroniously returned. */ - nop - - -/* Same comments as `_qt_start' about allocating rounded-up 7-word -// save areas. */ - -_qt_vstart: - sub %sp, 32, %sp /* Allocate 7-word callee space. */ - call %i5, 0 /* call `startup'. */ - mov %i2, %o0 /* .. with argument `pt'. */ - - add %sp, 32, %sp /* Use 7-word space in varargs. */ - ld [%sp+ 4+64], %o0 /* Load arg0 ... */ - ld [%sp+ 8+64], %o1 - ld [%sp+12+64], %o2 - ld [%sp+16+64], %o3 - ld [%sp+20+64], %o4 - call %i4, 0 /* Call `userf'. */ - ld [%sp+24+64], %o5 - - /* Use 6-word space in varargs. */ - mov %o0, %o1 /* Pass return value from userf */ - call %i3, 0 /* .. when call `cleanup. */ - mov %i2, %o0 /* .. along with argument `pt'. */ - - call _qt_error, 0 /* `cleanup' erroniously returned. */ - nop diff --git a/qt/md/_sparc_b.s b/qt/md/_sparc_b.s deleted file mode 100644 index cd26672d7..000000000 --- a/qt/md/_sparc_b.s +++ /dev/null @@ -1,106 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - - .globl _b_call_reg - .globl _b_call_imm - .globl _b_add - .globl _b_load - -_b_null: - retl - nop - -_b_call_reg: - sethi %hi(_b_null),%o4 - or %o4,%lo(_b_null),%o4 - add %o7,%g0, %o3 -L0: - call %o4 - nop - call %o4 - nop - call %o4 - nop - call %o4 - nop - call %o4 - nop - - subcc %o0,1,%o0 - bg L0 - nop - add %o3,%g0, %o7 - retl - nop - -_b_call_imm: - sethi %hi(_b_null),%o4 - or %o4,%lo(_b_null),%o4 - add %o7,%g0, %o3 -L1: - call _b_null - call _b_null - call _b_null - call _b_null - call _b_null - - subcc %o0,1,%o0 - bg L0 - nop - add %o3,%g0, %o7 - retl - nop - - -_b_add: - add %o0,%g0,%o1 - add %o0,%g0,%o2 - add %o0,%g0,%o3 - add %o0,%g0,%o4 -L2: - sub %o0,5,%o0 - sub %o1,5,%o1 - sub %o2,5,%o2 - sub %o3,5,%o3 - sub %o4,5,%o4 - - subcc %o0,5,%o0 - sub %o1,5,%o1 - sub %o2,5,%o2 - sub %o3,5,%o3 - sub %o4,5,%o4 - - bg L2 - nop - retl - nop - - -_b_load: - ld [%sp+ 0], %g0 -L3: - ld [%sp+ 4],%g0 - ld [%sp+ 8],%g0 - ld [%sp+12],%g0 - ld [%sp+16],%g0 - ld [%sp+20],%g0 - ld [%sp+24],%g0 - ld [%sp+28],%g0 - ld [%sp+32],%g0 - ld [%sp+36],%g0 - - subcc %o0,10,%o0 - bg L3 - ld [%sp+ 0],%g0 - retl - nop diff --git a/qt/md/axp.1.Makefile b/qt/md/axp.1.Makefile deleted file mode 100644 index 86ccd8f42..000000000 --- a/qt/md/axp.1.Makefile +++ /dev/null @@ -1,5 +0,0 @@ - -# -# Compiling for the DEC AXP (alpha) with GNU CC or version 1.x of OSF. -# -CC = cc -std1 -D__AXP__ -D__OSF1__ diff --git a/qt/md/axp.2.Makefile b/qt/md/axp.2.Makefile deleted file mode 100644 index 268636fc9..000000000 --- a/qt/md/axp.2.Makefile +++ /dev/null @@ -1,5 +0,0 @@ - -# -# Compiling for the DEC AXP (alpha) with GNU CC or version 2.x of OSF. -# -CC = cc -std1 -D__AXP__ -D__OSF2__ diff --git a/qt/md/axp.Makefile b/qt/md/axp.Makefile deleted file mode 100644 index 4e6d74da4..000000000 --- a/qt/md/axp.Makefile +++ /dev/null @@ -1,5 +0,0 @@ - -# -# GNU CC -# -CC = gcc -D__AXP__ diff --git a/qt/md/axp.README b/qt/md/axp.README deleted file mode 100644 index b6a705c07..000000000 --- a/qt/md/axp.README +++ /dev/null @@ -1,10 +0,0 @@ -The handling of varargs is platform-dependent. Assar Westerlund -stared at the problem for a while and deduces the following table: - -vers / compiler cc gcc ----------------------------------------------------------------------- -1.3 a0, offset __base, __offset -2.0 _a0, _offset __base, __offset - -The current code should handle both cc and gcc versions, provided -you configure for the correct compiler. diff --git a/qt/md/axp.c b/qt/md/axp.c deleted file mode 100644 index 26c15c0ea..000000000 --- a/qt/md/axp.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - -#include <stdarg.h> -#include "qt.h" - - -/* Varargs is harder on the AXP. Parameters are saved on the stack as - something like (stack grows down to low memory; low at bottom of - picture): - - | : - | arg6 - +--- - | iarg5 - | : - | iarg3 <-- va_list._a0 + va_list._offset - | : - | iarg0 <-- va_list._a0 - +--- - | farg5 - | : - | farg0 - +--- - - When some of the arguments have known type, there is no need to - save all of them in the struct. So, for example, if the routine is - called - - zork (int a0, float a1, int a2, ...) - { - va_list ap; - va_start (ap, a2); - qt_vargs (... &ap ...); - } - - then offset is set to 3 * 8 (8 === sizeof machine word) = 24. - - What this means for us is that the user's routine needs to be - called with an arg list where some of the words in the `any type' - parameter list have to be split and moved up in to the int/fp - region. - - Ways in which this can fail: - - The user might not know the size of the pushed arguments anyway. - - Structures have funny promotion rules. - - Probably lots of other things. - - All in all, we never promised varargs would work reliably. */ - - - -#define QT_VADJ(sp) (((char *)sp) - QT_VSTKBASE) - -#define QT_VARGS_MD0(sp, vabytes) \ - ((qt_t *)(((char *)(sp)) - 6*2*8 - QT_STKROUNDUP(vabytes))) - -extern void qt_vstart(void); -#define QT_VARGS_MD1(sp) (QT_SPUT (sp, QT_R26, qt_vstart)) - - -/* Different machines use different implementations for varargs. - Unfortunately, the code below ``looks in to'' the varargs - structure, `va_list', and thus depends on the conventions. - The following #defines try to deal with it but don't catch - everything. */ - -#ifdef __GNUC__ -#define _a0 __base -#define _offset __offset -#else -#ifdef __OSF1__ -#define _a0 a0 -#define _offset offset -#endif -#endif /* def __GNUC__ */ - - - struct qt_t * -qt_vargs (struct qt_t *qsp, int nbytes, struct va_list *vargs, - void *pt, qt_function_t *startup, - qt_function_t *vuserf, qt_function_t *cleanup) -{ - va_list ap; - int i; - int max; /* Maximum *words* of args to copy. */ - int tmove; /* *Words* of args moved typed->typed. */ - qt_word_t *sp; - - ap = *(va_list *)vargs; - qsp = QT_VARGS_MD0 (qsp, nbytes); - sp = (qt_word_t *)qsp; - - tmove = 6 - ap._offset/sizeof(qt_word_t); - - /* Copy from one typed area to the other. */ - for (i=0; i<tmove; ++i) { - /* Integer args: */ - sp[i+6] = ((qt_word_t *)(ap._a0 + ap._offset))[i]; - /* Fp args: */ - sp[i] = ((qt_word_t *)(ap._a0 + ap._offset))[i-6]; - } - - max = nbytes/sizeof(qt_word_t); - - /* Copy from the untyped area to the typed area. Split each arg. - in to integer and floating-point save areas. */ - for (; i<6 && i<max; ++i) { - sp[i] = sp[i+6] = ((qt_word_t *)(ap._a0 + ap._offset))[i]; - } - - /* Copy from the untyped area to the other untyped area. */ - for (; i<max; ++i) { - sp[i+6] = ((qt_word_t *)(ap._a0 + ap._offset))[i]; - } - - QT_VARGS_MD1 (QT_VADJ(sp)); - QT_SPUT (QT_VADJ(sp), QT_VARGT_INDEX, pt); - QT_SPUT (QT_VADJ(sp), QT_VSTARTUP_INDEX, startup); - QT_SPUT (QT_VADJ(sp), QT_VUSERF_INDEX, vuserf); - QT_SPUT (QT_VADJ(sp), QT_VCLEANUP_INDEX, cleanup); - return ((qt_t *)QT_VADJ(sp)); -} diff --git a/qt/md/axp.h b/qt/md/axp.h deleted file mode 100644 index ff951a0d3..000000000 --- a/qt/md/axp.h +++ /dev/null @@ -1,160 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - -#ifndef QT_AXP_H -#define QT_AXP_H - -#define QT_GROW_DOWN - -typedef unsigned long qt_word_t; - - -/* Stack layout on the Alpha: - - Integer: - - Caller-save: r0..r8, r22..r25, r27..r29 - argument/caller-save: r16..r21 - callee-save: r9..r15 - return pc *callee-save*: r26 - stack pointer: r30 - zero: r31 - - Floating-point: - - Caller-save: f0..f1, f10..f15 - argument/caller-save: f16..f21, f22..f30 - callee-save: f2..f9 - zero: f31 - - Non-varargs: - - +--- - | padding - | f9 - | f8 - | f7 - | f6 - | f5 - | f4 - | f3 - | f2 - | r26 - +--- - | padding - | r29 - | r15 - | r14 - | r13 - | r12 on startup === `only' - | r11 on startup === `userf' - | r10 on startup === `qt' - | r9 on startup === `qu' - | r26 on startup === qt_start <--- qt.sp - +--- - - Conventions for varargs startup: - - | : - | arg6 - | iarg5 - | : - | iarg0 - | farg5 - | : - | farg0 - +--- - | padding - | r29 - | r15 - | r14 - | r13 - | r12 on startup === `startup' - | r11 on startup === `vuserf' - | r10 on startup === `cleanup' - | r9 on startup === `qt' - | r26 on startup === qt_vstart <--- qt.sp - +--- - - Note: this is a pretty cheap/sleazy way to get things going, - but ``there must be a better way.'' For instance, some varargs - parameters could be loaded in to integer registers, or the return - address could be stored on top of the stack. */ - - -/* Stack must be 16-byte aligned. */ -#define QT_STKALIGN (16) - -/* How much space is allocated to hold all the crud for - initialization: 7 registers times 8 bytes/register. */ - -#define QT_STKBASE (10 * 8) -#define QT_VSTKBASE QT_STKBASE - - -/* Offsets of various registers. */ -#define QT_R26 0 -#define QT_R9 1 -#define QT_R10 2 -#define QT_R11 3 -#define QT_R12 4 - - -/* When a never-before-run thread is restored, the return pc points - to a fragment of code that starts the thread running. For - non-vargs functions, it just calls the client's `only' function. - For varargs functions, it calls the startup, user, and cleanup - functions. - - The varargs startup routine always reads 12 8-byte arguments from - the stack. If fewer argumets were pushed, the startup routine - would read off the top of the stack. To prevent errors we always - allocate enough space. When there are fewer args, the preallocated - words are simply wasted. */ - -extern void qt_start(void); -#define QT_ARGS_MD(sp) (QT_SPUT (sp, QT_R26, qt_start)) - - -/* The AXP uses a struct for `va_list', so pass a pointer to the - struct. This may break some uses of `QT_VARGS', but then we never - claimed it was totally portable. */ - -typedef void (qt_function_t)(void); - -struct qt_t; -struct va_list; -extern struct qt_t *qt_vargs (struct qt_t *sp, int nbytes, - struct va_list *vargs, void *pt, - qt_function_t *startup, - qt_function_t *vuserf, - qt_function_t *cleanup); - -#define QT_VARGS(sp, nbytes, vargs, pt, startup, vuserf, cleanup) \ - (qt_vargs (sp, nbytes, (struct va_list *)(&(vargs)), pt, \ - (qt_function_t *) startup, (qt_function_t *)vuserf, \ - (qt_function_t *)cleanup)); - - -/* The *index* (positive offset) of where to put each value. */ -#define QT_ONLY_INDEX (QT_R12) -#define QT_USER_INDEX (QT_R11) -#define QT_ARGT_INDEX (QT_R10) -#define QT_ARGU_INDEX (QT_R9) - -#define QT_VCLEANUP_INDEX (QT_R10) -#define QT_VUSERF_INDEX (QT_R11) -#define QT_VSTARTUP_INDEX (QT_R12) -#define QT_VARGT_INDEX (QT_R9) - -#endif /* ndef QT_AXP_H */ diff --git a/qt/md/axp.s b/qt/md/axp.s deleted file mode 100644 index a84aab2cc..000000000 --- a/qt/md/axp.s +++ /dev/null @@ -1,160 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - -/* axp.s -- assembly support. */ - - .text - .align 4 - .file 2 "axp.s" - - .globl qt_block - .globl qt_blocki - .globl qt_abort - .globl qt_start - .globl qt_vstart - - /* - ** $16: ptr to function to call once curr is suspended - ** and control is on r19's stack. - ** $17: 1'th arg to (*$16)(...). - ** $18: 2'th arg to (*$16)(...). - ** $19: sp of thread to resume. - ** - ** The helper routine returns a value that is passed on as the - ** return value from the blocking routine. Since we don't - ** touch r0 between the helper's return and the end of - ** function, we get this behavior for free. - */ - - .ent qt_blocki -qt_blocki: - subq $30,80, $30 /* Allocate save area. */ - stq $26, 0($30) /* Save registers. */ - stq $9, 8($30) - stq $10,16($30) - stq $11,24($30) - stq $12,32($30) - stq $13,40($30) - stq $14,48($30) - stq $15,56($30) - stq $29,64($30) - .end qt_blocki - .ent qt_abort -qt_abort: - addq $16,$31, $27 /* Put argument function in PV. */ - addq $30,$31, $16 /* Save stack ptr in outgoing arg. */ - addq $19,$31, $30 /* Set new stack pointer. */ - jsr $26,($27),0 /* Call helper function. */ - - ldq $26, 0($30) /* Restore registers. */ - ldq $9, 8($30) - ldq $10,16($30) - ldq $11,24($30) - ldq $12,32($30) - ldq $13,40($30) - ldq $14,48($30) - ldq $15,56($30) - ldq $29,64($30) - - addq $30,80, $30 /* Deallocate save area. */ - ret $31,($26),1 /* Return, predict===RET. */ - .end qt_abort - - - /* - ** Non-varargs thread startup. - */ - .ent qt_start -qt_start: - addq $9,$31, $16 /* Load up `qu'. */ - addq $10,$31, $17 /* ... user function's `pt'. */ - addq $11,$31, $18 /* ... user function's `userf'. */ - addq $12,$31, $27 /* ... set procedure value to `only'. */ - jsr $26,($27),0 /* Call `only'. */ - - jsr $26,qt_error /* `only' erroniously returned. */ - .end qt_start - - - .ent qt_vstart: -qt_vstart: - /* Call startup function. */ - addq $9,$31, $16 /* Arg0 to `startup'. */ - addq $12,$31, $27 /* Set procedure value. */ - jsr $26,($27),0 /* Call `startup'. */ - - /* Call user function. */ - ldt $f16, 0($30) /* Load fp arg regs. */ - ldt $f17, 8($30) - ldt $f18,16($30) - ldt $f19,24($30) - ldt $f20,32($30) - ldt $f21,40($30) - ldq $16,48($30) /* And integer arg regs. */ - ldq $17,56($30) - ldq $18,64($30) - ldq $19,72($30) - ldq $20,80($30) - ldq $21,88($30) - addq $30,96 $30 /* Pop 6*2*8 saved arg regs. */ - addq $11,$31, $27 /* Set procedure value. */ - jsr $26,($27),0 /* Call `vuserf'. */ - - /* Call cleanup. */ - addq $9,$31, $16 /* Arg0 to `cleanup'. */ - addq $0,$31, $17 /* Users's return value is arg1. */ - addq $10,$31, $27 /* Set procedure value. */ - jsr $26,($27),0 /* Call `cleanup'. */ - - jsr $26,qt_error /* Cleanup erroniously returned. */ - .end qt_start - - - /* - ** Save calle-save floating-point regs $f2..$f9. - ** Also save return pc from whomever called us. - ** - ** Return value from `qt_block' is the same as the return from - ** `qt_blocki'. We get that for free since we don't touch $0 - ** between the return from `qt_blocki' and the return from - ** `qt_block'. - */ - .ent qt_block -qt_block: - subq $30,80, $30 /* Allocate a save space. */ - stq $26, 0($30) /* Save registers. */ - stt $f2, 8($30) - stt $f3,16($30) - stt $f4,24($30) - stt $f5,32($30) - stt $f6,40($30) - stt $f7,48($30) - stt $f8,56($30) - stt $f9,64($30) - - jsr $26,qt_blocki /* Call helper. */ - /* .. who will also restore $gp. */ - - ldq $26, 0($30) /* restore registers. */ - ldt $f2, 8($30) - ldt $f3,16($30) - ldt $f4,24($30) - ldt $f5,32($30) - ldt $f6,40($30) - ldt $f7,48($30) - ldt $f8,56($30) - ldt $f9,64($30) - - addq $30,80, $30 /* Deallcate save space. */ - ret $31,($26),1 /* Return, predict===RET. */ - .end qt_block diff --git a/qt/md/axp_b.s b/qt/md/axp_b.s deleted file mode 100644 index 60be726ff..000000000 --- a/qt/md/axp_b.s +++ /dev/null @@ -1,111 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - - .text - .globl b_call_reg - .globl b_call_imm - .globl b_add - .globl b_load - - .ent b_null -b_null: - ret $31,($18),1 - .end b_null - - .ent b_call_reg -b_call_reg: - lda $27,b_null -$L0: - jsr $18,($27) - jsr $18,($27) - jsr $18,($27) - jsr $18,($27) - jsr $18,($27) - - jsr $18,($27) - jsr $18,($27) - jsr $18,($27) - jsr $18,($27) - jsr $18,($27) - - subq $16,1,$16 - bgt $16,$L0 - - ret $31,($26),1 - .end - - - .ent b_call_imm -b_call_imm: -$L1: - jsr $18,b_null - jsr $18,b_null - jsr $18,b_null - jsr $18,b_null - jsr $18,b_null - - jsr $18,b_null - jsr $18,b_null - jsr $18,b_null - jsr $18,b_null - jsr $18,b_null - - subq $16,1,$16 - bgt $16,$L1 - - ret $31,($26),1 - .end - - - .ent b_add -b_add: -$L2: - addq $31,$31,$31 - addq $31,$31,$31 - addq $31,$31,$31 - addq $31,$31,$31 - addq $31,$31,$31 - - addq $31,$31,$31 - addq $31,$31,$31 - addq $31,$31,$31 - addq $31,$31,$31 - addq $31,$31,$31 - - subq $16,1,$16 - bgt $16,$L2 - - ret $31,($26),1 - .end - - - .ent b_load -b_load: -$L3: - ldq $31,0($30) - ldq $31,8($30) - ldq $31,16($30) - ldq $31,24($30) - ldq $31,32($30) - - ldq $31,0($30) - ldq $31,8($30) - ldq $31,16($30) - ldq $31,24($30) - ldq $31,32($30) - - subq $16,1,$16 - bgt $16,$L3 - - ret $31,($26),1 - .end diff --git a/qt/md/default.Makefile b/qt/md/default.Makefile deleted file mode 100644 index e240ca270..000000000 --- a/qt/md/default.Makefile +++ /dev/null @@ -1,6 +0,0 @@ - -# -# `Normal' configuration. -# -CC = gcc -ansi -Wall -pedantic - diff --git a/qt/md/hppa-cnx.Makefile b/qt/md/hppa-cnx.Makefile deleted file mode 100644 index bff257d9f..000000000 --- a/qt/md/hppa-cnx.Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# This file (cnx_spp.Makefile) is part of the port of QuickThreads for -# PA-RISC 1.1 architecture on a Convex SPP. This file is a machine dependent -# makefile for QuickThreads. It was written in 1994 by Uwe Reder -# (`uereder@cip.informatik.uni-erlangen.de') for the Operating Systems -# Department (IMMD4) at the University of Erlangen/Nuernberg Germany. - -# `Normal' configuration. - -CC = /usr/convex/bin/cc diff --git a/qt/md/hppa.Makefile b/qt/md/hppa.Makefile deleted file mode 100644 index a15e28c99..000000000 --- a/qt/md/hppa.Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# This file (pa-risc.Makefile) is part of the port of QuickThreads for -# PA-RISC 1.1 architecture. This file is a machine dependent makefile -# for QuickThreads. It was written in 1994 by Uwe Reder -# (`uereder@cip.informatik.uni-erlangen.de') for the Operating Systems -# Department (IMMD4) at the University of Erlangen/Nuernberg Germany. - -# `Normal' configuration. - -CC = cc -Aa diff --git a/qt/md/hppa.h b/qt/md/hppa.h deleted file mode 100644 index 0df98de88..000000000 --- a/qt/md/hppa.h +++ /dev/null @@ -1,194 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - -/* - * This file (pa-risc.h) is part of the port of QuickThreads for the - * PA-RISC 1.1 architecture. This file is a machine dependent header - * file. It was written in 1994 by Uwe Reder - * (`uereder@cip.informatik.uni-erlangen.de') for the Operating Systems - * Department (IMMD4) at the University of Erlangen/Nuernberg Germany. - */ - - -#ifndef QT_PA_RISC_H -#define QT_PA_RISC_H - -#include <qt.h> - -/* size of an integer-register (32 bit) */ -typedef unsigned long qt_word_t; - -/* PA-RISC's stack grows up */ -#define QT_GROW_UP - -/* Stack layout on PA-RISC according to PA-RISC Procedure Calling Conventions: - - Callee-save registers are: gr3-gr18, fr12-fr21. - Also save gr2, return pointer. - - +--- - | fr12 Each floating register is a double word (8 bytes). - | fr13 Floating registers are only saved if `qt_block' is - | fr14 called, in which case it saves the floating-point - | fr15 registers then calls `qt_blocki' to save the integer - | fr16 registers. - | fr17 - | fr18 - | fr19 - | fr20 - | fr21 - | <arg word 3> fixed arguments (must be allocated; may remain unused) - | <arg word 2> - | <arg word 1> - | <arg word 0> - | <LPT> frame marker - | <LPT'> - | <RP'> - | <Current RP> - | <Static Link> - | <Clean Up> - | <RP''> - | <Previous SP> - +--- - | gr3 word each (4 bytes) - | gr4 - | gr5 - | gr6 - | gr7 - | gr8 - | gr9 - | gr10 - | gr11 - | gr12 - | gr13 - | gr14 - | gr15 - | gr16 - | gr17 - | gr18 - | <16 bytes filled in (sp has to be 64-bytes aligned)> - | <arg word 3> fixed arguments (must be allocated; may remain unused) - | <arg word 2> - | <arg word 1> - | <arg word 0> - | <LPT> frame marker - | <LPT'> - | <RP'> - | <Current RP> - | <Static Link> - | <Clean Up> - | <RP''> - | <Previous SP> - +--- <--- sp -*/ - -/* When a never-before-run thread is restored, the return pc points - to a fragment of code that starts the thread running. For - non-vargs functions, it just calls the client's `only' function. - For varargs functions, it calls the startup, user, and cleanup - functions. */ - -/* Note: Procedue Labels on PA-RISC - - <--2--><-------28---------><1-><1-> - ----------------------------------- - | SID | Adress Part | L | X | - ----------------------------------- - - On HP-UX the L field is used to flag wheather the procedure - label (plabel) is a pointer to an LT entry or to the entry point - of the procedure (PA-RISC Procedure Calling Conventions Reference - Manual, 5.3.2 Procedure Labels and Dynamic Calls). */ - -#define QT_PA_RISC_READ_PLABEL(plabel) \ - ( (((int)plabel) & 2) ? \ - ( (*((int *)(((int)plabel) & 0xfffffffc)))) : ((int)plabel) ) - -/* Stack must be 64 bytes aligned. */ -#define QT_STKALIGN (64) - -/* Internal helper for putting stuff on stack (negative index!). */ -#define QT_SPUT(top, at, val) \ - (((qt_word_t *)(top))[-(at)] = (qt_word_t)(val)) - -/* Offsets of various registers which are modified on the stack. - rp (return-pointer) has to be stored in the frame-marker-area - of the "older" stack-segment. */ - -#define QT_crp (12+4+16+5) -#define QT_15 (12+4+4) -#define QT_16 (12+4+3) -#define QT_17 (12+4+2) -#define QT_18 (12+4+1) - - -/** This stuff is for NON-VARARGS. **/ - -/* Stack looks like this (2 stack frames): - - <--- 64-bytes aligned --><------- 64-bytes aligned ------------> - | || | - <--16--><------48-------><----16*4-----><--16-><------48-------> - || | || | | || - ||filler|arg|frame-marker||register-save|filler|arg|frame-marker|| - ------------------------------------------------------------------ - */ - -#define QT_STKBASE (16+48+(16*sizeof(qt_word_t))+16+48) - -/* The index, relative to sp, of where to put each value. */ -#define QT_ONLY_INDEX (QT_15) -#define QT_USER_INDEX (QT_16) -#define QT_ARGT_INDEX (QT_17) -#define QT_ARGU_INDEX (QT_18) - -extern void qt_start(void); -#define QT_ARGS_MD(sp) \ - (QT_SPUT (sp, QT_crp, QT_PA_RISC_READ_PLABEL(qt_start))) - - -/** This is for VARARGS. **/ - -#define QT_VARGS_DEFAULT - -/* Stack looks like this (2 stack frames): - - <------ 64-bytes aligned -------><--------- 64-bytes aligned ----------> - | || | - <---?--><--?---><16><----32-----><----16*4-----><-16--><16><----32-----> - || | | | || | | | || - ||filler|varargs|arg|frame-marker||register-save|filler|arg|frame-marker|| - -------------------------------------------------------------------------- - */ - -/* Sp is moved to the end of the first stack frame. */ -#define QT_VARGS_MD0(sp, vasize) \ - ((qt_t *)(((char *)sp) + QT_STKROUNDUP(vasize + 4*4 + 32))) - -/* To reach the arguments from the end of the first stack frame use 32 - as a negative adjustment. */ -#define QT_VARGS_ADJUST(sp) ((qt_t *)(((char *)sp) - 32)) - -/* Offset to reach the end of the second stack frame. */ -#define QT_VSTKBASE ((16*sizeof(qt_word_t)) + 16 + 4*4 + 32) - -extern void qt_vstart(void); -#define QT_VARGS_MD1(sp) \ - (QT_SPUT (sp, QT_crp, QT_PA_RISC_READ_PLABEL(qt_vstart))) - -#define QT_VARGT_INDEX (QT_15) -#define QT_VSTARTUP_INDEX (QT_16) -#define QT_VUSERF_INDEX (QT_17) -#define QT_VCLEANUP_INDEX (QT_18) - -#endif /* ndef QT_PA_RISC_H */ diff --git a/qt/md/hppa.s b/qt/md/hppa.s deleted file mode 100644 index 84d8e875b..000000000 --- a/qt/md/hppa.s +++ /dev/null @@ -1,237 +0,0 @@ -; pa-risc.s -- assembly support. - -; QuickThreads -- Threads-building toolkit. -; Copyright (c) 1993 by David Keppel -; -; Permission to use, copy, modify and distribute this software and -; its documentation for any purpose and without fee is hereby -; granted, provided that the above copyright notice and this notice -; appear in all copies. This software is provided as a -; proof-of-concept and for demonstration purposes; there is no -; representation about the suitability of this software for any -; purpose. - -; This file (pa-risc.s) is part of the port of QuickThreads for -; PA-RISC 1.1 architecture. This file implements context switches -; and thread startup. It was written in 1994 by Uwe Reder -; (`uereder@cip.informatik.uni-erlangen.de') for the Operating -; Systems Department (IMMD4) at the University of Erlangen/Nuernberg -; Germany. - - -; Callee saves general registers gr3..gr18, -; floating-point registers fr12..fr21. - - .CODE - - .IMPORT $$dyncall, MILLICODE - .IMPORT qt_error, CODE - - .EXPORT qt_blocki, ENTRY - .EXPORT qt_block, ENTRY - .EXPORT qt_abort, ENTRY - .EXPORT qt_start, ENTRY - .EXPORT qt_vstart, ENTRY - - -; arg0: ptr to function (helper) to call once curr is suspended -; and control is on arg3's stack. -; arg1: 1'th arg to *arg0. -; arg2: 2'th arg to *arg0. -; arg3: sp of new thread. - -qt_blocki - .PROC - .CALLINFO CALLER, FRAME=0, SAVE_RP, ENTRY_GR=18 - .ENTRY - - stw %rp,-20(%sp) ; save rp to old frame-marker - - stwm %r3,128(%sp) ; save callee-saves general registers - stw %r4,-124(%sp) - stw %r5,-120(%sp) - stw %r6,-116(%sp) - stw %r7,-112(%sp) - stw %r8,-108(%sp) - stw %r9,-104(%sp) - stw %r10,-100(%sp) - stw %r11,-96(%sp) - stw %r12,-92(%sp) - stw %r13,-88(%sp) - stw %r14,-84(%sp) - stw %r15,-80(%sp) - stw %r16,-76(%sp) - stw %r17,-72(%sp) - stw %r18,-68(%sp) - -qt_abort - copy %arg0,%r22 ; helper to be called by $$dyncall - copy %sp,%arg0 ; pass current sp as arg0 to helper - copy %arg3,%sp ; set new sp - - .CALL - bl $$dyncall,%mrp ; call helper - copy %mrp,%rp - - ldw -68(%sp),%r18 ; restore general registers - ldw -72(%sp),%r17 - ldw -76(%sp),%r16 - ldw -80(%sp),%r15 - ldw -84(%sp),%r14 - ldw -88(%sp),%r13 - ldw -92(%sp),%r12 - ldw -96(%sp),%r11 - ldw -100(%sp),%r10 - ldw -104(%sp),%r9 - ldw -108(%sp),%r8 - ldw -112(%sp),%r7 - ldw -116(%sp),%r6 - ldw -120(%sp),%r5 - ldw -124(%sp),%r4 - - ldw -148(%sp),%rp ; restore return-pointer - - bv %r0(%rp) ; return to caller - ldwm -128(%sp),%r3 - - .EXIT - .PROCEND - - -qt_block - .PROC - .CALLINFO CALLER, FRAME=0, SAVE_RP, ENTRY_FR=21 - .ENTRY - - stw %rp,-20(%sp) ; save rp to old frame-marker - - fstds,ma %fr12,8(%sp) ; save callee-saves float registers - fstds,ma %fr13,8(%sp) - fstds,ma %fr14,8(%sp) - fstds,ma %fr15,8(%sp) - fstds,ma %fr16,8(%sp) - fstds,ma %fr17,8(%sp) - fstds,ma %fr18,8(%sp) - fstds,ma %fr19,8(%sp) - fstds,ma %fr20,8(%sp) - fstds,ma %fr21,8(%sp) - - .CALL - bl qt_blocki,%rp - ldo 48(%sp),%sp - - ldo -48(%sp),%sp - - fldds,mb -8(%sp),%fr21 ; restore callee-saves float registers - fldds,mb -8(%sp),%fr20 - fldds,mb -8(%sp),%fr19 - fldds,mb -8(%sp),%fr18 - fldds,mb -8(%sp),%fr17 - fldds,mb -8(%sp),%fr16 - fldds,mb -8(%sp),%fr15 - fldds,mb -8(%sp),%fr14 - fldds,mb -8(%sp),%fr13 - - ldw -28(%sp),%rp ; restore return-pointer - - bv %r0(%rp) ; return to caller. - fldds,mb -8(%sp),%fr12 - - .EXIT - .PROCEND - - -qt_start - .PROC - .CALLINFO CALLER, FRAME=0 - .ENTRY - - copy %r18,%arg0 ; set user arg `pu'. - copy %r17,%arg1 ; ... user function pt. - copy %r16,%arg2 ; ... user function userf. - ; %r22 is a caller-saves register - copy %r15,%r22 ; function to be called by $$dyncall - - .CALL ; in=%r22 - bl $$dyncall,%mrp ; call `only'. - copy %mrp,%rp - - bl,n qt_error,%r0 ; `only' erroniously returned. - - .EXIT - .PROCEND - - -; Varargs -; -; First, call `startup' with the `pt' argument. -; -; Next, call the user's function with all arguments. -; We don't know whether arguments are integers, 32-bit floating-points or -; even 64-bit floating-points, so we reload all the registers, possibly -; with garbage arguments. The thread creator provided non-garbage for -; the arguments that the callee actually uses, so the callee never gets -; garbage. -; -; -48 -44 -40 -36 -32 -; | arg3 | arg2 | arg1 | arg0 | -; ----------------------------- -; integers: arg3 arg2 arg1 arg0 -; 32-bit fps: farg3 farg2 farg1 farg0 -; 64-bit fps: <---farg3--> <---farg1--> -; -; Finally, call `cleanup' with the `pt' argument and with the return value -; from the user's function. It is an error for `cleanup' to return. - -qt_vstart - .PROC - .CALLINFO CALLER, FRAME=0 - .ENTRY - - ; Because the startup function may damage the fixed arguments - ; on the stack (PA-RISC Procedure Calling Conventions Reference - ; Manual, 2.4 Fixed Arguments Area), we allocate a seperate - ; stack frame for it. - ldo 64(%sp),%sp - - ; call: void startup(void *pt) - - copy %r15,%arg0 ; `pt' is arg0 to `startup'. - copy %r16,%r22 - .CALL - bl $$dyncall,%mrp ; Call `startup'. - copy %mrp,%rp - - ldo -64(%sp),%sp - - ; call: void *qt_vuserf_t(...) - - ldw -36(%sp),%arg0 ; Load args to integer registers. - ldw -40(%sp),%arg1 - ldw -44(%sp),%arg2 - ldw -48(%sp),%arg3 - ; Index of fld[w|d]s only ranges from -16 to 15, so we - ; take r22 to be our new base register. - ldo -32(%sp),%r22 - fldws -4(%r22),%farg0 ; Load args to floating-point registers. - fldds -8(%r22),%farg1 - fldws -12(%r22),%farg2 - fldds -16(%r22),%farg3 - copy %r17,%r22 - .CALL - bl $$dyncall,%mrp ; Call `userf'. - copy %mrp,%rp - - ; call: void cleanup(void *pt, void *vuserf_return) - - copy %r15,%arg0 ; `pt' is arg0 to `cleanup'. - copy %ret0,%arg1 ; Return-value is arg1 to `cleanup'. - copy %r18,%r22 - .CALL - bl $$dyncall,%mrp ; Call `cleanup'. - copy %mrp,%rp - - bl,n qt_error,%r0 - - .EXIT - .PROCEND diff --git a/qt/md/hppa_b.s b/qt/md/hppa_b.s deleted file mode 100644 index 1b1e8264e..000000000 --- a/qt/md/hppa_b.s +++ /dev/null @@ -1,203 +0,0 @@ -; QuickThreads -- Threads-building toolkit. -; Copyright (c) 1993 by David Keppel - -; Permission to use, copy, modify and distribute this software and -; its documentation for any purpose and without fee is hereby -; granted, provided that the above copyright notice and this notice -; appear in all copies. This software is provided as a -; proof-of-concept and for demonstration purposes; there is no -; representation about the suitability of this software for any -; purpose. - -; This file (pa-risc_b.s) is part of the port of QuickThreads for -; PA-RISC 1.1 architecture. It contains assembly-level support for -; raw processor performance measurement. It was written in 1994 by -; Uwe Reder (`uereder@cip.informatik.uni-erlangen.de') -; for the Operating Systems Department (IMMD4) at the -; University of Erlangen/Nuernberg Germany. - - -; Note that the number of instructions in the measurement-loops, differ -; from implementation to implementation. I took eight instructions in a loop -; for every test (execute eight instructions and loop to the start). - - .CODE - - .IMPORT $global$,DATA - .IMPORT $$dyncall,MILLICODE - .EXPORT b_call_reg - .EXPORT b_call_imm - .EXPORT b_add - .EXPORT b_load - -; Just do nothing, only return to caller. This procedure is called by -; `b_call_reg' and `b_call_imm'. - -b_null - .PROC - .CALLINFO NO_CALLS, FRAME=0 - .ENTRY - - bv,n %r0(%rp) ; just return - - .EXIT - .PROCEND - -; Call the procedure `b_null' with function pointer in a register. - -b_call_reg - .PROC - .CALLINFO CALLER, FRAME=0 - .ENTRY - - stwm %r3,64(%sp) ; store r3 (may be used by caller) - stw %rp,-20(%sp) ; save return-pointer to frame-marker - - addil LR'to_call-$global$,%r27 - ldw RR'to_call-$global$(%r1),%r3 - -_loop0 - copy %r3,%r22 ; copy the procedure label to r22, ... - .CALL ; ...this is the input to $$dyncall - bl $$dyncall,%mrp ; call $$dyncall (millicode function) - copy %mrp,%rp ; remember the return-pointer - - copy %r3,%r22 - .CALL - bl $$dyncall,%mrp - copy %mrp,%rp - - copy %r3,%r22 - .CALL - bl $$dyncall,%mrp - copy %mrp,%rp - - copy %r3,%r22 - .CALL - bl $$dyncall,%mrp - copy %mrp,%rp - - copy %r3,%r22 - .CALL - bl $$dyncall,%mrp - copy %mrp,%rp - - copy %r3,%r22 - .CALL - bl $$dyncall,%mrp - copy %mrp,%rp - - copy %r3,%r22 - .CALL - bl $$dyncall,%mrp - copy %mrp,%rp - - copy %r3,%r22 - .CALL - bl $$dyncall,%mrp - copy %mrp,%rp - - addibf,<= -8,%arg0,_loop0 ; decrement counter by 8 and loop - nop - - ldw -20(%sp),%rp ; restore return-pointer - bv %r0(%rp) ; return to caller - ldwm -64(%sp),%r3 ; resore r3 and remove stack frame - - .EXIT - .PROCEND - -; Call the procedure `b_null' immediate. - -b_call_imm - .PROC - .CALLINFO CALLER, FRAME=0, SAVE_RP - .ENTRY - - ldo 64(%sp),%sp ; caller needs a stack-frame - stw %rp,-20(%sp) ; save return-pointer to frame-marker - -_loop1 - bl b_null,%rp ; call `b_null' immediate (8 times) - nop - bl b_null,%rp - nop - bl b_null,%rp - nop - bl b_null,%rp - nop - bl b_null,%rp - nop - bl b_null,%rp - nop - bl b_null,%rp - nop - bl b_null,%rp - nop - - addibf,<= -8,%arg0,_loop1 ; decrement counter by 8 and loop - nop - - ldw -20(%sp),%rp ; restore return-pointer - bv %r0(%rp) ; return to caller - ldo -64(%sp),%sp ; remove stack-frame - - .EXIT - .PROCEND - -; Copy register-to-register. -; On PA-RISC this is implemented with an `or'. -; The `or' is hidden by a pseudo-operation called `copy'. - -b_add - .PROC - .CALLINFO NO_CALLS, FRAME=0 - .ENTRY - -_loop2 - copy %r19,%r20 ; copy register-to-register - copy %r20,%r21 ; use caller-saves registers - copy %r21,%r22 - copy %r22,%r21 - copy %r21,%r20 - copy %r20,%r19 - copy %r19,%r20 - copy %r20,%r21 - - addibf,<= -8,%arg0,_loop2 ; decrement counter by 8 and loop - nop - - bv,n %r0(%rp) - - .EXIT - .PROCEND - -; Load memory to a register. - -b_load - .PROC - .CALLINFO NO_CALLS, FRAME=0 - .ENTRY - -_loop3 - ldw -4(%sp),%r22 ; load data from frame-marker - ldw -8(%sp),%r22 ; use a caller-saves register - ldw -12(%sp),%r22 - ldw -16(%sp),%r22 - ldw -20(%sp),%r22 - ldw -24(%sp),%r22 - ldw -28(%sp),%r22 - ldw -32(%sp),%r22 - - addibf,<= -8,%arg0,_loop3 ; decrement counter by 8 and loop - nop - - bv,n %r0(%rp) - - .EXIT - .PROCEND - - - .ALIGN 8 -to_call - .WORD b_null diff --git a/qt/md/i386.README b/qt/md/i386.README deleted file mode 100644 index 8ffb92198..000000000 --- a/qt/md/i386.README +++ /dev/null @@ -1,7 +0,0 @@ -Note that some machines want labels to have leading underscores, -while others (e.g. System V) do not. Thus, several labels appear -duplicated except for the leading underscore, e.g. - - _qt_cswap: - qt_cswap: - diff --git a/qt/md/i386.h b/qt/md/i386.h deleted file mode 100644 index 158fe2703..000000000 --- a/qt/md/i386.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - -#ifndef QT_386_H -#define QT_386_H - -typedef unsigned long qt_word_t; - -/* Thread's initial stack layout on the i386: - - non-varargs: - - +--- - | arg[2] === `userf' on startup - | arg[1] === `pt' on startup - | arg[0] === `pu' on startup - +--- - | ret pc === qt_error - +--- - | ret pc === `only' on startup - +--- - | %ebp - | %esi - | %edi - | %ebx <--- qt_t.sp - +--- - - When a non-varargs thread is started, it ``returns'' directly to - the client's `only' function. - - varargs: - - +--- - | arg[n-1] - | .. - | arg[0] - +--- - | ret pc === `qt_vstart' - +--- - | %ebp === `startup' - | %esi === `cleanup' - | %edi === `pt' - | %ebx === `vuserf' <--- qt_t.sp - +--- - - When a varargs thread is started, it ``returns'' to the `qt_vstart' - startup code. The startup code calls the appropriate functions. */ - - -/* What to do to start a varargs thread running. */ -extern void qt_vstart (void); - - -/* Hold 4 saved regs plus two return pcs (qt_error, qt_start) plus - three args. */ -#define QT_STKBASE (9 * 4) - -/* Hold 4 saved regs plus one return pc (qt_vstart). */ -#define QT_VSTKBASE (5 * 4) - - -/* Stack must be 4-byte aligned. */ -#define QT_STKALIGN (4) - - -/* Where to place various arguments. */ -#define QT_ONLY_INDEX (QT_PC) -#define QT_USER_INDEX (QT_ARG2) -#define QT_ARGT_INDEX (QT_ARG1) -#define QT_ARGU_INDEX (QT_ARG0) - -#define QT_VSTARTUP_INDEX (QT_EBP) -#define QT_VUSERF_INDEX (QT_EBX) -#define QT_VCLEANUP_INDEX (QT_ESI) -#define QT_VARGT_INDEX (QT_EDI) - - -#define QT_EBX 0 -#define QT_EDI 1 -#define QT_ESI 2 -#define QT_EBP 3 -#define QT_PC 4 -/* The following are defined only for non-varargs. */ -#define QT_RPC 5 -#define QT_ARG0 6 -#define QT_ARG1 7 -#define QT_ARG2 8 - - -/* Stack grows down. The top of the stack is the first thing to - pop off (preincrement, postdecrement). */ -#define QT_GROW_DOWN - -extern void qt_error (void); - -/* Push on the error return address. */ -#define QT_ARGS_MD(sto) \ - (QT_SPUT (sto, QT_RPC, qt_error)) - - -/* When varargs are pushed, allocate space for all the args. */ -#define QT_VARGS_MD0(sto, nbytes) \ - ((qt_t *)(((char *)(sto)) - QT_STKROUNDUP(nbytes))) - -#define QT_VARGS_MD1(sto) \ - (QT_SPUT (sto, QT_PC, qt_vstart)) - -#define QT_VARGS_DEFAULT - -#endif /* QT_386_H */ diff --git a/qt/md/i386.s b/qt/md/i386.s deleted file mode 100644 index ed2c533d1..000000000 --- a/qt/md/i386.s +++ /dev/null @@ -1,108 +0,0 @@ -/* i386.s -- assembly support. */ - -/* -// QuickThreads -- Threads-building toolkit. -// Copyright (c) 1993 by David Keppel -// -// Permission to use, copy, modify and distribute this software and -// its documentation for any purpose and without fee is hereby -// granted, provided that the above copyright notice and this notice -// appear in all copies. This software is provided as a -// proof-of-concept and for demonstration purposes; there is no -// representation about the suitability of this software for any -// purpose. */ - -/* NOTE: double-labeled `_name' and `name' for System V compatability. */ -/* NOTE: Comment lines start with '/*' and '//' ONLY. Sorry! */ - -/* Callee-save: %esi, %edi, %ebx, %ebp -// Caller-save: %eax, %ecx -// Can't tell: %edx (seems to work w/o saving it.) -// -// Assignment: -// -// See ``i386.h'' for the somewhat unconventional stack layout. */ - - - .text - .align 2 - - .globl _qt_abort - .globl qt_abort - .globl _qt_block - .globl qt_block - .globl _qt_blocki - .globl qt_blocki - -/* These all have the type signature -// -// void *blocking (helper, arg0, arg1, new) -// -// On procedure entry, the helper is at 4(sp), args at 8(sp) and -// 12(sp) and the new thread's sp at 16(sp). It *appears* that the -// calling convention for the 8X86 requires the caller to save all -// floating-point registers, this makes our life easy. */ - -/* Halt the currently-running thread. Save it's callee-save regs on -// to the stack, 32 bytes. Switch to the new stack (next == 16+32(sp)) -// and call the user function (f == 4+32(sp) with arguments: old sp -// arg1 (8+32(sp)) and arg2 (12+32(sp)). When the user function is -// done, restore the new thread's state and return. -// -// `qt_abort' is (currently) an alias for `qt_block' because most of -// the work is shared. We could save the insns up to `qt_common' by -// replicating, but w/o replicating we need an inital subtract (to -// offset the stack as if it had been a qt_block) and then a jump -// to qt_common. For the cost of a jump, we might as well just do -// all the work. -// -// The helper function (4(sp)) can return a void* that is returned -// by the call to `qt_blockk{,i}'. Since we don't touch %eax in -// between, we get that ``for free''. */ - -_qt_abort: -qt_abort: -_qt_block: -qt_block: -_qt_blocki: -qt_blocki: - pushl %ebp /* Save callee-save, sp-=4. */ - pushl %esi /* Save callee-save, sp-=4. */ - pushl %edi /* Save callee-save, sp-=4. */ - pushl %ebx /* Save callee-save, sp-=4. */ - movl %esp, %eax /* Remember old stack pointer. */ - -qt_common: - movl 32(%esp), %esp /* Move to new thread. */ - pushl 28(%eax) /* Push arg 2. */ - pushl 24(%eax) /* Push arg 1. */ - pushl %eax /* Push arg 0. */ - movl 20(%eax), %ebx /* Get function to call. */ - call *%ebx /* Call f. */ - addl $12, %esp /* Pop args. */ - - popl %ebx /* Restore callee-save, sp+=4. */ - popl %edi /* Restore callee-save, sp+=4. */ - popl %esi /* Restore callee-save, sp+=4. */ - popl %ebp /* Restore callee-save, sp+=4. */ - ret /* Resume the stopped function. */ - hlt - - -/* Start a varargs thread. */ - - .globl _qt_vstart - .globl qt_vstart -_qt_vstart: -qt_vstart: - pushl %edi /* Push `pt' arg to `startup'. */ - call *%ebp /* Call `startup'. */ - popl %eax /* Clean up the stack. */ - - call *%ebx /* Call the user's function. */ - - pushl %eax /* Push return from user's. */ - pushl %edi /* Push `pt' arg to `cleanup'. */ - call *%esi /* Call `cleanup'. */ - - hlt /* `cleanup' never returns. */ diff --git a/qt/md/i386_b.s b/qt/md/i386_b.s deleted file mode 100644 index 32129a5d1..000000000 --- a/qt/md/i386_b.s +++ /dev/null @@ -1,30 +0,0 @@ -/* -// QuickThreads -- Threads-building toolkit. -// Copyright (c) 1993 by David Keppel -// -// Permission to use, copy, modify and distribute this software and -// its documentation for any purpose and without fee is hereby -// granted, provided that the above copyright notice and this notice -// appear in all copies. This software is provided as a -// proof-of-concept and for demonstration purposes; there is no -// representation about the suitability of this software for any -// purpose. */ - - .globl _b_call_reg - .globl b_call_reg - .globl _b_call_imm - .globl b_call_imm - .globl _b_add - .globl b_add - .globl _b_load - .globl b_load - -_b_call_reg: -b_call_reg: -_b_call_imm: -b_call_imm: -_b_add: -b_add: -_b_load: -b_load: - hlt diff --git a/qt/md/ksr1.Makefile b/qt/md/ksr1.Makefile deleted file mode 100644 index aa195839a..000000000 --- a/qt/md/ksr1.Makefile +++ /dev/null @@ -1,6 +0,0 @@ - -# -# KSR1 configuration. -# -CC = cc -ansi - diff --git a/qt/md/ksr1.h b/qt/md/ksr1.h deleted file mode 100644 index 83537a3c2..000000000 --- a/qt/md/ksr1.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - -#ifndef QT_KSR1_H -#define QT_KSR1_H - -/* - Stack layout: - - Registers are saved in strictly low to high order, FPU regs first - (only if qt_block is called), CEU regs second, IPU regs next, with no - padding between the groups. - - Callee-save: f16..f63; c15..c30; i12..i30. - Args passed in i2..i5. - - Note: c31 is a private data pointer. It is not changed on thread - swaps with the assumption that it represents per-processor rather - than per-thread state. - - Note: i31 is an instruction count register that is updated by the - context switch routines. Like c31, it is not changed on context - switches. - - This is what we want on startup: - - - +------ <-- BOS: Bottom of stack (grows down) - | 80 (128 - 48) bytes of padding to a 128-byte boundary - +--- - | only - | userf - | t - | u - | qt_start$TXT - | (empty) <-- qt.sp - +------ <-- (BOS - 128) - - This is why we want this on startup: - - A thread begins running when the restore procedure switches thread stacks - and pops a return address off of the top of the new stack (see below - for the reason why we explicitly store qt_start$TXT). The - block procedure pushes two jump addresses on a thread's stack before - it switches stacks. The first is the return address for the block - procedure, and the second is a restore address. The return address - is used to jump back to the thread that has been switched to; the - restore address is a jump within the block code to restore the registers. - Normally, this is just a jump to the next address. However, on thread - startup, this is a jump to qt_start$TXT. (The block procedure stores - the restore address at an offset of 8 bytes from the top of the stack, - which is also the offset at which qt_start$TXT is stored on the stacks - of new threads. Hence, when the block procedure switches to a new - thread stack, it will initially jump to qt_start$TXT; thereafter, - it jumps to the restore code.) - - qt_start$TXT, after it has read the initial data on the new thread's - stack and placed it in registers, pops the initial stack frame - and gives the thread the entire stack to use for execution. - - The KSR runtime system has an unusual treatment of pointers to - functions. From C, taking the `name' of a function yields a - pointer to a _constant block_ and *not* the address of the - function. The zero'th entry in the constant block is a pointer to - the function. - - We have to be careful: the restore procedure expects a return - address on the top of the stack (pointed to by qt.sp). This is not - a problem when restoring a thread that has run before, since the - block routine would have stored the return address on top of the - stack. However, when ``faking up'' a thread start (bootstrapping a - thread stack frame), the top of the stack needs to contain a - pointer to the code that will start the thread running. - - The pointer to the startup code is *not* `qt_start'. It is the - word *pointed to* by `qt_start'. Thus, we dereference `qt_start', - see QT_ARGS_MD below. - - On varargs startup (still unimplemented): - - | padding to 128 byte boundary - | varargs <-- padded to a 128-byte-boundary - +--- - | caller's frame, 16 bytes - | 80 bytes of padding (frame padded to a 128-byte boundary) - +--- - | cleanup - | vuserf - | startup - | t - +--- - | qt_start <-- qt.sp - +--- - - Of a suspended thread: - - +--- - | caller's frame, 16 bytes - | fpu registers 47 regs * 8 bytes/reg 376 bytes - | ceu registers 16 regs * 8 bytes/reg 128 bytes - | ipu registers 19 regs * 8 bytes/reg 152 bytes - | : - | 80 bytes of padding - | : - | qt_restore <-- qt.sp - +--- - - */ - - -#define QT_STKALIGN 128 -#define QT_GROW_DOWN -typedef unsigned long qt_word_t; - -#define QT_STKBASE QT_STKALIGN -#define QT_VSTKBASE QT_STKBASE - -extern void qt_start(void); -/* - * See the discussion above for what indexing into a procedure ptr - * does for us (it's lovely, though, isn't it?). - * - * This assumes that the address of a procedure's code is the - * first word in a procedure's constant block. That's how the manual - * says it will be arranged. - */ -#define QT_ARGS_MD(sp) (QT_SPUT (sp, 1, ((qt_word_t *)qt_start)[0])) - -/* - * The *index* (positive offset) of where to put each value. - * See the picture of the stack above that explains the offsets. - */ -#define QT_ONLY_INDEX (5) -#define QT_USER_INDEX (4) -#define QT_ARGT_INDEX (3) -#define QT_ARGU_INDEX (2) - -#define QT_VARGS_DEFAULT -#define QT_VARGS(sp, nb, vargs, pt, startup, vuserf, cleanup) \ - (qt_vargs (sp, nbytes, &vargs, pt, startup, vuserf, cleanup)) - - -#define QT_VARGS_MD0(sp, vabytes) \ - ((qt_t *)(((char *)(sp)) - 4*8 - QT_STKROUNDUP(vabytes))) - -extern void qt_vstart(void); -#define QT_VARGS_MD1(sp) (QT_SPUT (sp, 0, ((qt_word_t *)qt_vstart)[0])) - -#define QT_VCLEANUP_INDEX (4) -#define QT_VUSERF_INDEX (3) -#define QT_VSTARTUP_INDEX (2) -#define QT_VARGT_INDEX (1) - -#endif /* def QT_KSR1_H */ diff --git a/qt/md/ksr1.s b/qt/md/ksr1.s deleted file mode 100644 index d4d51a0a6..000000000 --- a/qt/md/ksr1.s +++ /dev/null @@ -1,424 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - - .file "ksr1.s" - .def .debug; .endef - - .align 128 - .globl qt_blocki - .globl qt_blocki$TXT - .globl qt_block - .globl qt_block$TXT - .globl qt_start$TXT - .globl qt_start - .globl qt_abort$TXT - .globl qt_abort - .globl qt_vstart - .globl qt_vstart$TXT - -# -# KSR convention: on procedure calls, load both the procedure address -# and a pointer to a constant block. The address of function `f' is -# `f$TXT', and the constant block address is `f'. The constant block -# has several reserved values: -# -# 8 bytes fpu register save mask -# 4 bytes ipu register save mask -# 4 bytes ceu register save mask -# f: f$TXT -# ... whatever you want ... (not quite...read on) -# -# Note, by the way, that a pointer to a function is passed as a -# pointer to the constant area, and the constant area has the text -# address. -# - -# -# Procedures that do not return structures prefix their code with -# -# proc$TXT: -# finop; cxnop -# finop; cxnop -# <proc code> -# -# Calls to those procedures branch to a 16 byte offset (4 instrs) in -# to the procedure to skip those instructions. -# -# Procedures that return structures use a different code prefix: -# -# proc$TXT: -# finop; beq.qt %rc, %rc, 24 # return value entry -# finop; cxnop -# finop; movi8 0, %rc # no return value entry -# <proc code> -# -# Calls that want the returned structure branch directly to the -# procedure address. Callers that don't want (or aren't expecting) a -# return value branche 16 bytes in to the procedure, which will zero -# %rc, telling the called procedure not to return a structure. -# - -# -# On entry: -# %i2 -- control block of helper function to run -# (dereference to get helper) -# %i3 -- a1 -# %i4 -- a2 -# %i5 -- sp of new to run -# - - .data - .half 0x0, 0x0, 0x7ffff000, 0x7fff8000 -qt_blocki: -qt_abort: - .word qt_blocki$TXT - .word qt_restore$TXT - - .text -qt_abort$TXT: -qt_blocki$TXT: - finop ; cxnop # entry prefix - finop ; cxnop # entry prefix - add8.ntr 75,%i31,%i31 ; movi8 512,%c5 # ICR; stk adjust - finop ; ssub8.ntr 0,%sp,%c5,%sp - finop ; st8 %fp,504(%sp) # Save caller's fp - finop ; st8 %cp,496(%sp) # Save caller's cp - finop ; ld8 8(%c10),%c5 # ld qt_restore$TXT - finop ; st8 %c14,0(%sp) # Save special ret addr - finop ; mov8_8 %c10, %cp # Our cp - finop ; sadd8.ntr 0,%sp,%c5,%fp # Our frame ptr - finop ; st8 %c5,8(%sp) # st qt_restore$TXT -# -# CEU registers %c15-%c24, %c26-%c30 (%c14 we restore later) -# - finop ; st8 %c15,456(%sp) - finop ; st8 %c16,448(%sp) - finop ; st8 %c17,440(%sp) - finop ; st8 %c18,432(%sp) - finop ; st8 %c19,424(%sp) - finop ; st8 %c20,416(%sp) - finop ; st8 %c21,408(%sp) - finop ; st8 %c22,400(%sp) - finop ; st8 %c23,392(%sp) - finop ; st8 %c24,384(%sp) -# -# %c25 is the Enclosing Frame Pointer (EFP) -- since C doesn't -# use nested procedures, we ignore it (leaving a gap, though) -# - finop ; st8 %c26,368(%sp) - finop ; st8 %c27,360(%sp) - finop ; st8 %c28,352(%sp) - finop ; st8 %c29,344(%sp) - finop ; st8 %c30,336(%sp) -# -# IPU registers %i12-%i30 -# - finop ; st8 %i12,328(%sp) - finop ; st8 %i13,320(%sp) - finop ; st8 %i14,312(%sp) - finop ; st8 %i15,304(%sp) -# (gap to get alignment for st64) -# -- Doesn't work on version 1.1.3 of the OS -# finop ; st64 %i16,256(%sp) - - finop ; st8 %i16,256(%sp) - finop ; st8 %i17,248(%sp) - finop ; st8 %i18,240(%sp) - finop ; st8 %i19,232(%sp) - finop ; st8 %i20,224(%sp) - finop ; st8 %i21,216(%sp) - finop ; st8 %i22,208(%sp) - finop ; st8 %i23,200(%sp) - finop ; st8 %i24,192(%sp) - finop ; st8 %i25,184(%sp) - finop ; st8 %i26,176(%sp) - finop ; st8 %i27,168(%sp) - finop ; st8 %i28,160(%sp) - finop ; st8 %i29,152(%sp) - finop ; st8 %i30,144(%sp) -# -# FPU already saved, or saving not necessary -# - -# -# Switch to the stack passed in as fourth argument to the block -# routine (%i5) and call the helper routine passed in as the first -# argument (%i2). Note that the address of the helper's constant -# block is passed in, so we must derefence it to get the helper's text -# address. -# - finop ; movb8_8 %i2,%c10 # helper's ConstBlock - finop ; cxnop # Delay slot, fill w/ - finop ; cxnop # .. 2 st8 from above - finop ; ld8 0(%c10),%c4 # load addr of helper - finop ; movb8_8 %sp, %i2 # 1st arg to helper - # is this stack; other - # args remain in regs - finop ; movb8_8 %i5,%sp # switch stacks - finop ; jsr %c14,16(%c4) # call helper - movi8 3, %i0 ; movi8 0,%c8 # nargs brain dmg - finop ; cxnop - finop ; cxnop -# -# Here is where behavior differs for threads being restored and threads -# being started. Blocked threads have a pointer to qt_restore$TXT on -# the top of their stacks; manufactured stacks have a pointer to qt_start$TXT -# on the top of their stacks. With this setup, starting threads -# skip the (unecessary) restore operations. -# -# We jump to an offset of 16 to either (1) skip past the two noop pairs -# at the start of qt_start$TXT, or (2) skip past the two noop pairs -# after qt_restore$TXT. -# - finop ; ld8 8(%sp),%c4 - finop ; cxnop - finop ; cxnop - finop ; jmp 16(%c4) -qt_restore$TXT: - finop ; cxnop - finop ; cxnop -# -# Point of Restore: -# -# The helper funtion will return here. Any result it has placed in -# a return register (most likely %i0) will not get overwritten below -# and will consequently be the return value of the blocking routine. -# - -# -# CEU registers %c15-%c24, %c26-%c30 (%c14 we restore later) -# - finop ; ld8 456(%sp),%c15 - finop ; ld8 448(%sp),%c16 - finop ; ld8 440(%sp),%c17 - finop ; ld8 432(%sp),%c18 - finop ; ld8 424(%sp),%c19 - finop ; ld8 416(%sp),%c20 - finop ; ld8 408(%sp),%c21 - finop ; ld8 400(%sp),%c22 - finop ; ld8 392(%sp),%c23 - finop ; ld8 384(%sp),%c24 -# -# %c25 is the Enclosing Frame Pointer (EFP) -- since C doesn't -# use nested procedures, we ignore it (leaving a gap, though) -# - finop ; ld8 368(%sp),%c26 - finop ; ld8 360(%sp),%c27 - finop ; ld8 352(%sp),%c28 - finop ; ld8 344(%sp),%c29 - finop ; ld8 336(%sp),%c30 -# -# IPU registers %i12-%i30 -# - finop ; ld8 328(%sp),%i12 - finop ; ld8 320(%sp),%i13 - finop ; ld8 312(%sp),%i14 - finop ; ld8 304(%sp),%i15 -# (gap to get alignment for ld64) -# -- Doesn't work on version 1.1.3 of the OS -# finop ; ld64 256(%sp),%i16 - - finop ; ld8 256(%sp),%i16 - finop ; ld8 248(%sp),%i17 - finop ; ld8 240(%sp),%i18 - finop ; ld8 232(%sp),%i19 - finop ; ld8 224(%sp),%i20 - finop ; ld8 216(%sp),%i21 - finop ; ld8 208(%sp),%i22 - finop ; ld8 200(%sp),%i23 - finop ; ld8 192(%sp),%i24 - finop ; ld8 184(%sp),%i25 - finop ; ld8 176(%sp),%i26 - finop ; ld8 168(%sp),%i27 - finop ; ld8 160(%sp),%i28 - finop ; ld8 152(%sp),%i29 - finop ; ld8 144(%sp),%i30 - -# -# FPU registers don't need to be loaded, or will be loaded by an -# enclosing scope (e.g., if this is called by qt_block). -# - -# -# Load the special registers. We don't load the stack ptr because -# the new stack is passed in as an argument, we don't load the EFP -# because we don't use it, and we load the return address specially -# off the top of the stack. -# - finop ; ld8 0(%sp),%c14 # return addr - finop ; ld8 496(%sp),%cp - finop ; ld8 504(%sp),%fp - - finop ; jmp 32(%c14) # jump back to thread - finop ; movi8 512,%c5 # stack adjust - finop ; sadd8.ntr 0,%sp,%c5,%sp - - .data - .half 0x0, 0x0, 0x7ffff000, 0x7fff8000 -qt_block: - .word qt_block$TXT - .word qt_error - .word qt_error$TXT - .word qt_blocki -# -# Handle saving and restoring the FPU regs, relying on qt_blocki -# to save and restore the remaining registers. -# - .text -qt_block$TXT: - finop ; cxnop # entry prefix - finop ; cxnop # entry prefix - - add8.ntr 29,%i31,%i31 ; movi8 512,%c5 # ICR; stk adjust - finop ; ssub8.ntr 0,%sp,%c5,%sp - finop ; st8 %fp,504(%sp) # Save caller's fp - finop ; st8 %cp,496(%sp) # Save caller's cp - finop ; st8 %c14,488(%sp) # store ret addr - finop ; sadd8.ntr 0,%sp,%c5,%fp # Our frame ptr - finop ; mov8_8 %c10, %cp # Our cp - -# -# Store 8 registers at once...destination must be a multiple of 64 -# - finop ; st64 %f16,384(%sp) - finop ; st64 %f24,320(%sp) - finop ; st64 %f32,256(%sp) - finop ; st64 %f40,192(%sp) - finop ; st64 %f48,128(%sp) - finop ; st64 %f56,64(%sp) - -# -# Call the integer blocking routine, passing the arguments passed to us -# - finop ; ld8 24(%cp), %c10 - finop ; cxnop - finop ; jsr %c14, qt_blocki$TXT - finop ; cxnop - finop ; cxnop - movi8 4,%i0 ; movi8 0,%c8 # nargs brain dmg - -# -# Load 8 registers at once...source must be a multiple of 64 -# - finop ; ld64 64(%sp),%f56 - finop ; ld64 128(%sp),%f48 - finop ; ld64 192(%sp),%f40 - finop ; ld64 256(%sp),%f32 - finop ; ld64 320(%sp),%f24 - finop ; ld64 384(%sp),%f16 - - finop ; ld8 488(%sp),%c14 - finop ; ld8 496(%sp),%cp - finop ; ld8 504(%sp),%fp - finop ; jmp 32(%c14) # jump back to thread - finop ; movi8 512,%c5 # stack adjust - finop ; sadd8.ntr 0,%sp,%c5,%sp - - - .data - .half 0x0, 0x0, 0x7ffff000, 0x7fff8000 -qt_start: - .word qt_start$TXT -# -# A new thread is set up to "appear" as if it were executing code at -# the beginning of qt_start and then it called a blocking routine -# (qt_blocki). So when a new thread starts to run, it gets unblocked -# by the code above and "returns" to `qt_start$TXT' in the -# restore step of the switch. Blocked threads jump to 16(qt_restore$TXT), -# and starting threads jump to 16(qt_start$TXT). -# - .text -qt_start$TXT: - finop ; cxnop # - finop ; cxnop # - finop ; ld8 40(%sp),%c10 # `only' constant block - finop ; ld8 32(%sp),%i4 # `userf' arg. - finop ; ld8 24(%sp),%i3 # `t' arg. - finop ; ld8 0(%c10),%c4 # `only' text location - finop ; ld8 16(%sp),%i2 # `u' arg. - finop ; cxnop - finop ; jsr %c14,16(%c4) # call `only' -# -# Pop the frame used to store the thread's initial data -# - finop ; sadd8.ntr 0,%sp,128,%sp - finop ; cxnop - movi8 2,%i0 ; movi8 0,%c8 # nargs brain dmg -# -# If we ever return, it's an error. -# - finop ; jmp qt_error$TXT - finop ; cxnop - finop ; cxnop - movi8 0,%i0 ; movi8 0,%c8 # nargs brain dmg - - -# -# This stuff is broken -# - .data - .half 0x0, 0x0, 0x7ffff000, 0x7fff8000 -qt_vstart: - .word qt_vstart$TXT - - .text -qt_vstart$TXT: - finop ; cxnop # entry prefix - finop ; cxnop # entry prefix - finop ; cxnop - finop ; cxnop - add8.ntr 11,%i31,%i31 ; movi8 512,%c5 - finop ; ssub8.ntr 0,%sp,%c5,%sp # fix stack - finop ; ld8 8(%sp),%i2 # load `t' as arg to - finop ; cxnop # `startup' - finop ; cxnop - finop ; ld8 16(%sp),%c10 # `startup' const block - finop ; cxnop - finop ; cxnop - finop ; ld8 0(%c10),%c4 # `startup' text loc. - finop ; cxnop - finop ; cxnop - finop ; jsr %c14,16(%c4) # call `startup' - finop ; cxnop - finop ; cxnop - movi8 1, %i0 ; movi8 0,%c8 # nargs brain dmg -# -# finop ; sadd 0,%sp,128,%sp # alter stack -# - finop ; ld8 8(%sp),%i2 # load `t' as arg to - finop ; ld8 8(%sp),%i2 # load `t' as arg to - finop ; ld8 8(%sp),%i2 # load `t' as arg to - finop ; ld8 8(%sp),%i2 # load `t' as arg to - - finop ; ld8 32(%sp),%c10 # `only' constant block - finop ; ld8 8(%sp),%i2 # `u' arg. - finop ; ld8 16(%sp),%i3 # `t' arg. - finop ; ld8 0(%c10),%c4 # `only' text location - finop ; ld8 24(%sp),%i4 # `userf' arg. - finop ; cxnop - finop ; jsr %c4,16(%c4) # call `only' - finop ; cxnop - finop ; cxnop -# -# If the callee ever calls `nargs', the following instruction (pair) -# will be executed. However, we don't know when we compile this code -# how many args are being passed. So we give our best guess: 0. -# - movi8 0,%i0 ; movi8 0,%c8 # nargs brain dmg -# -# If we ever return, it's an error. -# - finop ; jmp qt_error$TXT - finop ; cxnop - finop ; cxnop - movi8 0,%i0 ; movi8 0,%c8 # nargs brain dmg diff --git a/qt/md/ksr1_b.s b/qt/md/ksr1_b.s deleted file mode 100644 index 80b0c59eb..000000000 --- a/qt/md/ksr1_b.s +++ /dev/null @@ -1,49 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - - .file "ksr1_b.s" - .def .debug; .endef - - .globl b_call_reg$TXT - .globl b_call_reg - .globl b_call_imm$TXT - .globl b_call_imm - .globl b_add$TXT - .globl b_add - .globl b_load$TXT - .globl b_load - - -b_call_reg: -b_call_imm: -b_add: -b_load: - .word b_call_reg$TXT - .word qt_error - .word qt_error$TXT - - -b_call_reg$TXT: -b_call_imm$TXT: -b_add$TXT: -b_load$TXT: - finop ; cxnop - finop ; cxnop - finop ; ld8 16(%cp),%c4 - finop ; ld8 8(%cp),%cp - finop ; cxnop - finop ; cxnop - finop ; jsr %c4,0(%c4) - finop ; cxnop - finop ; cxnop - diff --git a/qt/md/m88k.Makefile b/qt/md/m88k.Makefile deleted file mode 100644 index 608c70690..000000000 --- a/qt/md/m88k.Makefile +++ /dev/null @@ -1,6 +0,0 @@ - -# -# Hosted compilers for 88k for Meerkat. -# -CC = gcc88 -Dm88k -ansi -pedantic -Wall -fno-builtin -AS = as88 diff --git a/qt/md/m88k.c b/qt/md/m88k.c deleted file mode 100644 index 9e3ae8ba8..000000000 --- a/qt/md/m88k.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - -#include <stdarg.h> -#include "qt.h" - -/* Varargs is harder on the m88k. Parameters are saved on the stack as - something like (stack grows down to low memory; low at bottom of - picture): - - | : - | arg8 <-- va_list.__va_stk - +--- - | : - +--- - | arg7 - | : - | iarg0 <-- va_list.__va_reg - +--- - | : - | va_list { __va_arg, __va_stk, __va_reg } - | : - +--- - - Here, `va_list.__va_arg' is the number of word-size arguments - that have already been skipped. Doubles must be double-arligned. - - What this means for us is that the user's routine needs to be - called with an arg list where some of the words in the `__va_stk' - part of the parameter list have to be promoted to registers. - - BUG: doubleword register arguments must be double-aligned. If - something is passed as an even # arg and used as an odd # arg or - vice-versa, the code in the called routine (in the new thread) that - decides how to adjust the index will get it wrong, because it will - be expect it to be, say, doubleword aligned and it will really be - singleword aligned. - - I'm not sure you can solve this without knowing the types of all - the arguments. All in all, we never promised varargs would work - reliably. */ - - - -#define QT_VADJ(sp) (((char *)sp) - QT_VSTKBASE) - -/* Always allocate at least enough space for 8 args; waste some space - at the base of the stack to ensure the startup routine doesn't read - off the end of the stack. */ - -#define QT_VARGS_MD0(sp, vabytes) \ - ((qt_t *)(((char *)(sp)) - 8*4 - QT_STKROUNDUP(vabytes))) - -extern void qt_vstart(void); -#define QT_VARGS_MD1(sp) (QT_SPUT (sp, QT_1, qt_vstart)) - - - struct qt_t * -qt_vargs (struct qt_t *qsp, int nbytes, void *vargs, - void *pt, qt_function_t *startup, - qt_function_t *vuserf, qt_function_t *cleanup) -{ - va_list ap; - int i; - int n; /* Number of words into original arg list. */ - qt_word_t *sp; - int *reg; /* Where to read passed-in-reg args. */ - int *stk; /* Where to read passed-on-stk args. */ - - ap = *(va_list *)vargs; - qsp = QT_VARGS_MD0 (qsp, nbytes); - sp = (qt_word_t *)qsp; - - reg = (ap.__va_arg < 8) - ? &ap.__va_reg[ap.__va_arg] - : 0; - stk = &ap.__va_stk[8]; - n = ap.__va_arg; - for (i=0; i<nbytes/sizeof(qt_word_t) && n<8; ++i,++n) { - sp[i] = *reg++; - } - for (; i<nbytes/sizeof(qt_word_t); ++i) { - sp[i] = *stk++; - } - -#ifdef QT_NDEF - for (i=0; i<nbytes/sizeof(qt_word_t); ++i) { - sp[i] = (n < 8) - ? *reg++ - : *stk++; - ++n; - } -#endif - - QT_VARGS_MD1 (QT_VADJ(sp)); - QT_SPUT (QT_VADJ(sp), QT_VARGT_INDEX, pt); - QT_SPUT (QT_VADJ(sp), QT_VSTARTUP_INDEX, startup); - QT_SPUT (QT_VADJ(sp), QT_VUSERF_INDEX, vuserf); - QT_SPUT (QT_VADJ(sp), QT_VCLEANUP_INDEX, cleanup); - return ((qt_t *)QT_VADJ(sp)); -} diff --git a/qt/md/m88k.h b/qt/md/m88k.h deleted file mode 100644 index df7e07a85..000000000 --- a/qt/md/m88k.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - -#ifndef QT_M88K_H -#define QT_M88K_H - -typedef unsigned long qt_word_t; - -#define QT_GROW_DOWN - -/* Stack layout on the mips: - - Callee-save registers are: $16-$23, $30; $f20-$f30. - Also save $31, return pc. - - Non-varargs: - - +--- - | r30 (fp) on startup === 0 - | r25 - | r24 - | r23 - | r22 - | r21 - | r20 - | r19 - | r18 - | r17 on startup === `only' - | r16 on startup === `userf' - | r15 on startup === `pt' - | r14 on startup === `pu' - | r1 on startup === `qt_start' - | 0 - | 0 - +--- - | 0 - | ... (8 regs worth === 32 bytes of homing area) - | 0 <--- sp - +--- - - Conventions for varargs: - - | : - | arg8 - +--- - | r30 (fp) arg7 - | r25 arg6 - | r24 arg5 - | r23 arg4 - | r22 arg3 - | r21 arg2 - | r20 arg1 - | r19 arg0 - | r18 - | r17 on startup === `startup' - | r16 on startup === `vuserf' - | r15 on startup === `pt' - | r14 on startup === `cleanup' - | r1 on startup === `qt_vstart' - | 0 - | 0 - +--- - | 0 - | ... (8 regs worth === 32 bytes of homing area) - | 0 <--- sp - +--- - - */ - - -/* Stack must be doubleword aligned. */ -#define QT_STKALIGN (16) /* Doubleword aligned. */ - -/* How much space is allocated to hold all the crud for - initialization: saved registers plus padding to keep the stack - aligned plus 8 words of padding to use as a `homing area' (for - r2-r9) when calling helper functions on the stack of the (not yet - started) thread. The varargs save area is small because it gets - overlapped with the top of the parameter list. In case the - parameter list is less than 8 args, QT_ARGS_MD0 adds some dead - space at the top of the stack. */ - -#define QT_STKBASE (16*4 + 8*4) -#define QT_VSTKBASE (8*4 + 8*4) - - -/* Index of various registers. */ -#define QT_1 (8+2) -#define QT_14 (8+3) -#define QT_15 (8+4) -#define QT_16 (8+5) -#define QT_17 (8+6) -#define QT_30 (8+15) - - -/* When a never-before-run thread is restored, the return pc points - to a fragment of code that starts the thread running. For - non-vargs functions, it sets up arguments and calls the client's - `only' function. For varargs functions, the startup code calls the - startup, user, and cleanup functions. - - For non-varargs functions, we set the frame pointer to 0 to - null-terminate the call chain. - - For varargs functions, the frame pointer register is used to hold - one of the arguments, so that all arguments can be laid out in - memory by the conventional `qt_vargs' varargs initialization - routine. - - The varargs startup routine always reads 8 words of arguments from - the stack. If there are less than 8 words of arguments, then the - arg list could call off the top of the stack. To prevent fall-off, - always allocate 8 words. */ - -extern void qt_start(void); -#define QT_ARGS_MD(sp) \ - (QT_SPUT (sp, QT_1, qt_start), \ - QT_SPUT (sp, QT_30, 0)) - - -/* The m88k uses a struct for `va_list', so pass a pointer to the - struct. */ - -typedef void (qt_function_t)(void); - -struct qt_t; -extern struct qt_t *qt_vargs (struct qt_t *sp, int nbytes, - void *vargs, void *pt, - qt_function_t *startup, - qt_function_t *vuserf, - qt_function_t *cleanup); - -#define QT_VARGS(sp, nbytes, vargs, pt, startup, vuserf, cleanup) \ - (qt_vargs (sp, nbytes, &(vargs), pt, (qt_function_t *)startup, \ - (qt_function_t *)vuserf, (qt_function_t *)cleanup)) - - -/* The *index* (positive offset) of where to put each value. */ -#define QT_ONLY_INDEX (QT_17) -#define QT_USER_INDEX (QT_16) -#define QT_ARGT_INDEX (QT_15) -#define QT_ARGU_INDEX (QT_14) - -#define QT_VCLEANUP_INDEX (QT_14) -#define QT_VUSERF_INDEX (QT_16) -#define QT_VSTARTUP_INDEX (QT_17) -#define QT_VARGT_INDEX (QT_15) - -#endif /* ndef QT_M88K_H */ diff --git a/qt/md/m88k.s b/qt/md/m88k.s deleted file mode 100644 index 42467e8d5..000000000 --- a/qt/md/m88k.s +++ /dev/null @@ -1,132 +0,0 @@ -/* m88k.s -- assembly support. */ - -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - -/* Callee-save r14..r25, r31(sp), r30(fp). r1 === return pc. - * Argument registers r2..r9, return value r2..r3. - * - * On startup, restore regs so retpc === call to a function to start. - * - * We're going to call a function (r2) from within the context switch - * routine. Call it on the new thread's stack on behalf of the old - * thread. - */ - - .globl _qt_block - .globl _qt_blocki - .globl _qt_abort - .globl _qt_start - .globl _qt_vstart - - /* - ** r2: ptr to function to call once curr is suspended - ** and control is on r5's stack. - ** r3: 1'th arg to *r2. - ** r4: 2'th arg to *r2. - ** r5: sp of thread to suspend. - ** - ** The helper routine returns a value that is passed on as the - ** return value from the blocking routine. Since we don't - ** touch r2 between the helper's return and the end of - ** function, we get this behavior for free. - ** - ** Same entry for integer-only and floating-point, since there - ** are no separate integer and floating-point registers. - ** - ** Each procedure call sets aside a ``home region'' of 8 regs - ** for r2-r9 for varargs. For context switches we don't use - ** the ``home region'' for varargs so use it to save regs. - ** Allocate 64 bytes of save space -- use 32 bytes of register - ** save area passed in to us plus 32 bytes we allcated, use - ** the other 32 bytes for save area for a save area to call - ** the helper function. - */ -_qt_block: -_qt_blocki: - sub r31, r31,64 /* Allocate reg save space. */ - st r1, r31,8+32 /* Save callee-save registers. */ - st r14, r31,12+32 - st.d r15, r31,16+32 - st.d r17, r31,24+32 - st.d r19, r31,32+32 - st.d r21, r31,40+32 - st.d r23, r31,48+32 - st r25, r31,56+32 - st r30, r31,60+32 - -_qt_abort: - addu r14, r31,0 /* Remember old sp. */ - addu r31, r5,0 /* Set new sp. */ - jsr.n r2 /* Call helper. */ - addu r2, r14,0 /* Pass old sp as an arg0 to helper. */ - - ld r1, r31,8+32 /* Restore callee-save registers. */ - ld r14, r31,12+32 - ld.d r15, r31,16+32 - ld.d r17, r31,24+32 - ld.d r19, r31,32+32 - ld.d r21, r31,40+32 - ld.d r23, r31,48+32 - ld r25, r31,56+32 - ld r30, r31,60+32 - - jmp.n r1 /* Return to new thread's caller. */ - addu r31, r31,64 /* Free register save space. */ - - - /* - ** Non-varargs thread startup. - ** See `m88k.h' for register use conventions. - */ -_qt_start: - addu r2, r14,0 /* Set user arg `pu'. */ - addu r3, r15,0 /* ... user function pt. */ - jsr.n r17 /* Call `only'. */ - addu r4, r16,0 /* ... user function userf. */ - - bsr _qt_error /* `only' erroniously returned. */ - - - /* - ** Varargs thread startup. - ** See `m88k.h' for register use conventions. - ** - ** Call the `startup' function with just argument `pt'. - ** Then call `vuserf' with 8 register args plus any - ** stack args. - ** Then call `cleanup' with `pt' and the return value - ** from `vuserf'. - */ -_qt_vstart: - addu r18, r30,0 /* Remember arg7 to `vuserf'. */ - addu r30, r0,0 /* Null-terminate call chain. */ - - jsr.n r17 /* Call `startup'. */ - addu r2, r15,0 /* `pt' is arg0 to `startup'. */ - - addu r2, r19,0 /* Set arg0. */ - addu r3, r20,0 /* Set arg1. */ - addu r4, r21,0 /* Set arg2. */ - addu r5, r22,0 /* Set arg3. */ - addu r6, r23,0 /* Set arg4. */ - addu r7, r24,0 /* Set arg5. */ - addu r8, r25,0 /* Set arg6. */ - jsr.n r16 /* Call `vuserf'. */ - addu r9, r18,0 /* Set arg7. */ - - addu r3, r2,0 /* Ret. value is arg1 to `cleanup'. */ - jsr.n r14 /* Call `cleanup'. */ - addu r2, r15,0 /* `pt' is arg0 to `cleanup'. */ - - bsr _qt_error /* `cleanup' erroniously returned. */ diff --git a/qt/md/m88k_b.s b/qt/md/m88k_b.s deleted file mode 100644 index 1926e6ae8..000000000 --- a/qt/md/m88k_b.s +++ /dev/null @@ -1,117 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - - .text - .globl _b_call_reg - .globl _b_call_imm - .globl _b_add - .globl _b_load - -_b_null: - jmp r1 - -_b_call_reg: - subu r31, r31,8 /* Alloc ret pc save space. */ - st r1, r31,32 /* Save ret pc. */ - or.u r3, r0,hi16(_b_null) /* Put call addr in a reg. */ - or r3, r3,lo16(_b_null) - jsr r3 -L0: - jsr r3 - jsr r3 - jsr r3 - jsr.n r3 - subu r2, r2,5 /* Decrement #of iter to go. */ - bcnd.n gt0,r2,L0 - jsr r3 - - ld r1, r31,32 - jmp r1 - - -_b_call_imm: - subu r31, r31,8 /* Alloc ret pc save space. */ - st r1, r31,32 /* Save ret pc. */ - bsr _b_null -L1: - bsr _b_null - bsr _b_null - bsr _b_null - bsr.n _b_null - subu r2, r2,5 /* Decrement #of iter to go. */ - bcnd.n gt0,r2,L1 - bsr _b_null - - ld r1, r31,32 - jmp r1 - -_b_add: - add r0, r3,r4 -L2: - add r3, r4,r5 - add r4, r5,r6 - add r5, r6,r7 - add r8, r9,r0 - add r0, r3,r4 - add r3, r4,r5 - add r4, r5,r6 - add r5, r6,r7 - add r8, r9,r0 - - add r0, r3,r4 - add r3, r4,r5 - add r4, r5,r6 - add r5, r6,r7 - add r8, r9,r0 - add r0, r3,r4 - add r3, r4,r5 - add r4, r5,r6 - add r5, r6,r7 - add r8, r9,r0 - - subu r2, r2,20 /* Decrement #of iter to go. */ - bcnd.n gt0,r2,L2 - add r0, r3,r4 - - jmp r1 - - -_b_load: - ld r0, r31,0 -L3: - ld r3, r31,4 - ld r4, r31,8 - ld r5, r31,12 - ld r6, r31,16 - ld r0, r31,0 - ld r3, r31,4 - ld r4, r31,8 - ld r5, r31,12 - ld r6, r31,16 - - ld r0, r31,0 - ld r3, r31,4 - ld r4, r31,8 - ld r5, r31,12 - ld r6, r31,16 - ld r0, r31,0 - ld r3, r31,4 - ld r4, r31,8 - ld r5, r31,12 - ld r6, r31,16 - - subu r2, r2,20 /* Decrement #of iter to go. */ - bcnd.n gt0,r2,L3 - ld r0, r31,0 - - jmp r1 diff --git a/qt/md/mips-irix5.s b/qt/md/mips-irix5.s deleted file mode 100644 index 234a953ed..000000000 --- a/qt/md/mips-irix5.s +++ /dev/null @@ -1,182 +0,0 @@ -/* mips.s -- assembly support. */ - -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - -/* Callee-save $16-$23, $30-$31. - * - * $25 is used as a procedure value pointer, used to discover constants - * in a callee. Thus, each caller here sets $25 before the call. - * - * On startup, restore regs so retpc === call to a function to start. - * We're going to call a function ($4) from within this routine. - * We're passing 3 args, therefore need to allocate 12 extra bytes on - * the stack for a save area. The start routine needs a like 16-byte - * save area. Must be doubleword aligned (_mips r3000 risc - * architecture_, gerry kane, pg d-23). - */ - -/* - * Modified by Assar Westerlund <assar@sics.se> to support Irix 5.x - * calling conventions for dynamically-linked code. - */ - - /* Make this position-independent code. */ - .option pic2 - - .globl qt_block - .globl qt_blocki - .globl qt_abort - .globl qt_start - .globl qt_vstart - - /* - ** $4: ptr to function to call once curr is suspended - ** and control is on $7's stack. - ** $5: 1'th arg to $4. - ** $6: 2'th arg to $4 - ** $7: sp of thread to suspend. - ** - ** Totally gross hack: The MIPS calling convention reserves - ** 4 words on the stack for a0..a3. This routine "ought" to - ** allocate space for callee-save registers plus 4 words for - ** the helper function, but instead we use the 4 words - ** provided by the function that called us (we don't need to - ** save our argument registers). So what *appears* to be - ** allocating only 40 bytes is actually allocating 56, by - ** using the caller's 16 bytes. - ** - ** The helper routine returns a value that is passed on as the - ** return value from the blocking routine. Since we don't - ** touch $2 between the helper's return and the end of - ** function, we get this behavior for free. - */ -qt_blocki: - sub $sp,$sp,40 /* Allocate reg save space. */ - sw $16, 0+16($sp) - sw $17, 4+16($sp) - sw $18, 8+16($sp) - sw $19,12+16($sp) - sw $20,16+16($sp) - sw $21,20+16($sp) - sw $22,24+16($sp) - sw $23,28+16($sp) - sw $30,32+16($sp) - sw $31,36+16($sp) - add $2, $sp,$0 /* $2 <= old sp to pass to func@$4. */ -qt_abort: - add $sp, $7,$0 /* $sp <= new sp. */ - .set noreorder - add $25, $4,$0 /* Set helper function procedure value. */ - jal $31,$25 /* Call helper func@$4 . */ - add $4, $2,$0 /* $a0 <= pass old sp as a parameter. */ - .set reorder - lw $31,36+16($sp) /* Restore callee-save regs... */ - lw $30,32+16($sp) - lw $23,28+16($sp) - lw $22,24+16($sp) - lw $21,20+16($sp) - lw $20,16+16($sp) - lw $19,12+16($sp) - lw $18, 8+16($sp) - lw $17, 4+16($sp) - lw $16, 0+16($sp) /* Restore callee-save */ - - add $sp,$sp,40 /* Deallocate reg save space. */ - j $31 /* Return to caller. */ - - /* - ** Non-varargs thread startup. - ** Note: originally, 56 bytes were allocated on the stack. - ** The thread restore routine (_blocki/_abort) removed 40 - ** of them, which means there is still 16 bytes for the - ** argument area required by the MIPS calling convention. - */ -qt_start: - add $4, $16,$0 /* Load up user function pu. */ - add $5, $17,$0 /* ... user function pt. */ - add $6, $18,$0 /* ... user function userf. */ - add $25, $19,$0 /* Set `only' procedure value. */ - jal $31,$25 /* Call `only'. */ - la $25,qt_error /* Set `qt_error' procedure value. */ - j $25 - - - /* - ** Save calle-save floating-point regs $f20-$f30 - ** See comment in `qt_block' about calling conventinos and - ** reserved space. Use the same trick here, but here we - ** actually have to allocate all the bytes since we have to - ** leave 4 words leftover for `qt_blocki'. - ** - ** Return value from `qt_block' is the same as the return from - ** `qt_blocki'. We get that for free since we don't touch $2 - ** between the return from `qt_blocki' and the return from - ** `qt_block'. - */ -qt_block: - sub $sp, $sp,56 /* 6 8-byte regs, saved ret pc, aligned. */ - swc1 $f20, 0+16($sp) - swc1 $f22, 8+16($sp) - swc1 $f24, 16+16($sp) - swc1 $f26, 24+16($sp) - swc1 $f28, 32+16($sp) - swc1 $f30, 40+16($sp) - sw $31, 48+16($sp) - jal qt_blocki - lwc1 $f20, 0+16($sp) - lwc1 $f22, 8+16($sp) - lwc1 $f24, 16+16($sp) - lwc1 $f26, 24+16($sp) - lwc1 $f28, 32+16($sp) - lwc1 $f30, 40+16($sp) - lw $31, 48+16($sp) - add $sp, $sp,56 - j $31 - - - /* - ** First, call `startup' with the `pt' argument. - ** - ** Next, call the user's function with all arguments. - ** Note that we don't know whether args were passed in - ** integer regs, fp regs, or on the stack (See Gerry Kane - ** "MIPS R2000 RISC Architecture" pg D-22), so we reload - ** all the registers, possibly with garbage arguments. - ** - ** Finally, call `cleanup' with the `pt' argument and with - ** the return value from the user's function. It is an error - ** for `cleanup' to return. - */ -qt_vstart: - add $4, $17,$0 /* `pt' is arg0 to `startup'. */ - add $25, $18,$0 /* Set `startup' procedure value. */ - jal $31, $25 /* Call `startup'. */ - - add $sp, $sp,16 /* Free extra save space. */ - lw $4, 0($sp) /* Load up args. */ - lw $5, 4($sp) - lw $6, 8($sp) - lw $7, 12($sp) - lwc1 $f12, 0($sp) /* Load up fp args. */ - lwc1 $f14, 8($sp) - add $25, $19,$0 /* Set `userf' procedure value. */ - jal $31,$25 /* Call `userf'. */ - - add $4, $17,$0 /* `pt' is arg0 to `cleanup'. */ - add $5, $2,$0 /* Ret. val is arg1 to `cleanup'. */ - add $25, $16,$0 /* Set `cleanup' procedure value. */ - jal $31, $25 /* Call `cleanup'. */ - - la $25,qt_error /* Set `qt_error' procedure value. */ - j $25 diff --git a/qt/md/mips.h b/qt/md/mips.h deleted file mode 100644 index c584a681e..000000000 --- a/qt/md/mips.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - -#ifndef QT_MIPS_H -#define QT_MIPS_H - -typedef unsigned long qt_word_t; - -#define QT_GROW_DOWN - -/* Stack layout on the mips: - - Callee-save registers are: $16-$23, $30; $f20-$f30. - Also save $31, return pc. - - Non-varargs: - - +--- - | $f30 The first clump is only saved if `qt_block' - | $f28 is called, in which case it saves the fp regs - | $f26 then calls `qt_blocki' to save the int regs. - | $f24 - | $f22 - | $f20 - | $31 === return pc in `qt_block' - +--- - | $31 === return pc; on startup == qt_start - | $30 - | $23 - | $22 - | $21 - | $20 - | $19 on startup === only - | $18 on startup === $a2 === userf - | $17 on startup === $a1 === pt - | $16 on startup === $a0 === pu - | <a3> save area req'd by MIPS calling convention - | <a2> save area req'd by MIPS calling convention - | <a1> save area req'd by MIPS calling convention - | <a0> save area req'd by MIPS calling convention <--- sp - +--- - - Conventions for varargs: - - | args ... - +--- - | : - | : - | $21 - | $20 - | $19 on startup === `userf' - | $18 on startup === `startup' - | $17 on startup === `pt' - | $16 on startup === `cleanup' - | <a3> - | <a2> - | <a1> - | <a0> <--- sp - +--- - - Note: if we wanted to, we could muck about and try to get the 4 - argument registers loaded in to, e.g., $22, $23, $30, and $31, - and the return pc in, say, $20. Then, the first 4 args would - not need to be loaded from memory, they could just use - register-to-register copies. */ - - -/* Stack must be doubleword aligned. */ -#define QT_STKALIGN (8) /* Doubleword aligned. */ - -/* How much space is allocated to hold all the crud for - initialization: $16-$23, $30, $31. Just do an integer restore, - no need to restore floating-point. Four words are needed for the - argument save area for the helper function that will be called for - the old thread, just before the new thread starts to run. */ - -#define QT_STKBASE (14 * 4) -#define QT_VSTKBASE QT_STKBASE - - -/* Offsets of various registers. */ -#define QT_31 (9+4) -#define QT_19 (3+4) -#define QT_18 (2+4) -#define QT_17 (1+4) -#define QT_16 (0+4) - - -/* When a never-before-run thread is restored, the return pc points - to a fragment of code that starts the thread running. For - non-vargs functions, it just calls the client's `only' function. - For varargs functions, it calls the startup, user, and cleanup - functions. - - The varargs startup routine always reads 4 words of arguments from - the stack. If there are less than 4 words of arguments, then the - startup routine can read off the top of the stack. To prevent - errors we always allocate 4 words. If there are more than 3 words - of arguments, the 4 preallocated words are simply wasted. */ - -extern void qt_start(void); -#define QT_ARGS_MD(sp) (QT_SPUT (sp, QT_31, qt_start)) - -#define QT_VARGS_MD0(sp, vabytes) \ - ((qt_t *)(((char *)(sp)) - 4*4 - QT_STKROUNDUP(vabytes))) - -extern void qt_vstart(void); -#define QT_VARGS_MD1(sp) (QT_SPUT (sp, QT_31, qt_vstart)) - -#define QT_VARGS_DEFAULT - - -/* The *index* (positive offset) of where to put each value. */ -#define QT_ONLY_INDEX (QT_19) -#define QT_USER_INDEX (QT_18) -#define QT_ARGT_INDEX (QT_17) -#define QT_ARGU_INDEX (QT_16) - -#define QT_VCLEANUP_INDEX (QT_16) -#define QT_VUSERF_INDEX (QT_19) -#define QT_VSTARTUP_INDEX (QT_18) -#define QT_VARGT_INDEX (QT_17) - -#endif /* ndef QT_MIPS_H */ diff --git a/qt/md/mips.s b/qt/md/mips.s deleted file mode 100644 index b074b98dc..000000000 --- a/qt/md/mips.s +++ /dev/null @@ -1,164 +0,0 @@ -/* mips.s -- assembly support. */ - -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - -/* Callee-save $16-$23, $30-$31. - * - * On startup, restore regs so retpc === call to a function to start. - * We're going to call a function ($4) from within this routine. - * We're passing 3 args, therefore need to allocate 12 extra bytes on - * the stack for a save area. The start routine needs a like 16-byte - * save area. Must be doubleword aligned (_mips r3000 risc - * architecture_, gerry kane, pg d-23). - */ - - .globl qt_block - .globl qt_blocki - .globl qt_abort - .globl qt_start - .globl qt_vstart - - /* - ** $4: ptr to function to call once curr is suspended - ** and control is on $7's stack. - ** $5: 1'th arg to $4. - ** $6: 2'th arg to $4 - ** $7: sp of thread to suspend. - ** - ** Totally gross hack: The MIPS calling convention reserves - ** 4 words on the stack for a0..a3. This routine "ought" to - ** allocate space for callee-save registers plus 4 words for - ** the helper function, but instead we use the 4 words - ** provided by the function that called us (we don't need to - ** save our argument registers). So what *appears* to be - ** allocating only 40 bytes is actually allocating 56, by - ** using the caller's 16 bytes. - ** - ** The helper routine returns a value that is passed on as the - ** return value from the blocking routine. Since we don't - ** touch $2 between the helper's return and the end of - ** function, we get this behavior for free. - */ -qt_blocki: - sub $sp,$sp,40 /* Allocate reg save space. */ - sw $16, 0+16($sp) - sw $17, 4+16($sp) - sw $18, 8+16($sp) - sw $19,12+16($sp) - sw $20,16+16($sp) - sw $21,20+16($sp) - sw $22,24+16($sp) - sw $23,28+16($sp) - sw $30,32+16($sp) - sw $31,36+16($sp) - add $2, $sp,$0 /* $2 <= old sp to pass to func@$4. */ -qt_abort: - add $sp, $7,$0 /* $sp <= new sp. */ - .set noreorder - jal $31,$4 /* Call helper func@$4 . */ - add $4, $2,$0 /* $a0 <= pass old sp as a parameter. */ - .set reorder - lw $31,36+16($sp) /* Restore callee-save regs... */ - lw $30,32+16($sp) - lw $23,28+16($sp) - lw $22,24+16($sp) - lw $21,20+16($sp) - lw $20,16+16($sp) - lw $19,12+16($sp) - lw $18, 8+16($sp) - lw $17, 4+16($sp) - lw $16, 0+16($sp) /* Restore callee-save */ - - add $sp,$sp,40 /* Deallocate reg save space. */ - j $31 /* Return to caller. */ - - /* - ** Non-varargs thread startup. - ** Note: originally, 56 bytes were allocated on the stack. - ** The thread restore routine (_blocki/_abort) removed 40 - ** of them, which means there is still 16 bytes for the - ** argument area required by the MIPS calling convention. - */ -qt_start: - add $4, $16,$0 /* Load up user function pu. */ - add $5, $17,$0 /* ... user function pt. */ - add $6, $18,$0 /* ... user function userf. */ - jal $31,$19 /* Call `only'. */ - j qt_error - - - /* - ** Save calle-save floating-point regs $f20-$f30 - ** See comment in `qt_block' about calling conventinos and - ** reserved space. Use the same trick here, but here we - ** actually have to allocate all the bytes since we have to - ** leave 4 words leftover for `qt_blocki'. - ** - ** Return value from `qt_block' is the same as the return from - ** `qt_blocki'. We get that for free since we don't touch $2 - ** between the return from `qt_blocki' and the return from - ** `qt_block'. - */ -qt_block: - sub $sp, $sp,56 /* 6 8-byte regs, saved ret pc, aligned. */ - swc1 $f20, 0+16($sp) - swc1 $f22, 8+16($sp) - swc1 $f24, 16+16($sp) - swc1 $f26, 24+16($sp) - swc1 $f28, 32+16($sp) - swc1 $f30, 40+16($sp) - sw $31, 48+16($sp) - jal qt_blocki - lwc1 $f20, 0+16($sp) - lwc1 $f22, 8+16($sp) - lwc1 $f24, 16+16($sp) - lwc1 $f26, 24+16($sp) - lwc1 $f28, 32+16($sp) - lwc1 $f30, 40+16($sp) - lw $31, 48+16($sp) - add $sp, $sp,56 - j $31 - - - /* - ** First, call `startup' with the `pt' argument. - ** - ** Next, call the user's function with all arguments. - ** Note that we don't know whether args were passed in - ** integer regs, fp regs, or on the stack (See Gerry Kane - ** "MIPS R2000 RISC Architecture" pg D-22), so we reload - ** all the registers, possibly with garbage arguments. - ** - ** Finally, call `cleanup' with the `pt' argument and with - ** the return value from the user's function. It is an error - ** for `cleanup' to return. - */ -qt_vstart: - add $4, $17,$0 /* `pt' is arg0 to `startup'. */ - jal $31, $18 /* Call `startup'. */ - - add $sp, $sp,16 /* Free extra save space. */ - lw $4, 0($sp) /* Load up args. */ - lw $5, 4($sp) - lw $6, 8($sp) - lw $7, 12($sp) - lwc1 $f12, 0($sp) /* Load up fp args. */ - lwc1 $f14, 8($sp) - jal $31,$19 /* Call `userf'. */ - - add $4, $17,$0 /* `pt' is arg0 to `cleanup'. */ - add $5, $2,$0 /* Ret. val is arg1 to `cleanup'. */ - jal $31, $16 /* Call `cleanup'. */ - - j qt_error diff --git a/qt/md/mips_b.s b/qt/md/mips_b.s deleted file mode 100644 index 5b3740843..000000000 --- a/qt/md/mips_b.s +++ /dev/null @@ -1,99 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - - .globl b_call_reg - .globl b_call_imm - .globl b_add - .globl b_load - - .ent b_null -b_null: - j $31 - .end b_null - - .ent b_call_reg -b_call_reg: - la $5,b_null - add $6, $31,0 -$L0: - jal $5 - jal $5 - jal $5 - jal $5 - jal $5 - - sub $4, $4,5 - bgtz $4,$L0 - j $6 - .end - - - .ent b_call_imm -b_call_imm: - add $6, $31,0 -$L1: - jal b_null - jal b_null - jal b_null - jal b_null - jal b_null - - sub $4, $4,5 - bgtz $4,$L1 - j $6 - .end - - - .ent b_add -b_add: - add $5, $0,$4 - add $6, $0,$4 - add $7, $0,$4 - add $8, $0,$4 -$L2: - sub $4, $4,5 - sub $5, $5,5 - sub $6, $6,5 - sub $7, $7,5 - sub $8, $8,5 - - sub $4, $4,5 - sub $5, $5,5 - sub $6, $6,5 - sub $7, $7,5 - sub $8, $8,5 - - bgtz $4,$L2 - j $31 - .end - - - .ent b_load -b_load: -$L3: - ld $0, 0($sp) - ld $0, 4($sp) - ld $0, 8($sp) - ld $0, 12($sp) - ld $0, 16($sp) - - ld $0, 20($sp) - ld $0, 24($sp) - ld $0, 28($sp) - ld $0, 32($sp) - ld $0, 36($sp) - - sub $4, $4,10 - bgtz $4,$L3 - j $31 - .end diff --git a/qt/md/null.README b/qt/md/null.README deleted file mode 100644 index e69de29bb..000000000 --- a/qt/md/null.README +++ /dev/null diff --git a/qt/md/null.c b/qt/md/null.c deleted file mode 100644 index 775db62be..000000000 --- a/qt/md/null.c +++ /dev/null @@ -1,14 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - -char const qtmd_rcsid[] = "$Header: /home/ludo/src/guile.cvs/gitification/guile-cvs/guile/guile-core/qt/md/null.c,v 1.1 1996-10-01 03:34:16 mdj Exp $"; diff --git a/qt/md/solaris.README b/qt/md/solaris.README deleted file mode 100644 index 04f855c44..000000000 --- a/qt/md/solaris.README +++ /dev/null @@ -1,19 +0,0 @@ -Solaris 2.x is like System V (maybe it *is* System V?) and is different -from older versions in that it uses no leading underscore for variable -and function names. That is, the old convention was: - - foo(){} - -got compiled as - - .globl _foo - _foo: - -and is now compiled as - - .globl foo - foo: - -The `config' script should fix up the older (leading underscore) versions -of the machine-dependent files to use the newer (no leading underscore) -calling conventions. diff --git a/qt/md/sparc.h b/qt/md/sparc.h deleted file mode 100644 index e2ab281b4..000000000 --- a/qt/md/sparc.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - -#ifndef QT_SPARC_H -#define QT_SPARC_H - -typedef unsigned long qt_word_t; - -/* Stack layout on the sparc: - - non-varargs: - - +--- - | <blank space for alignment> - | %o7 == return address -> qt_start - | %i7 - | %i6 == frame pointer -> 0 (NULL-terminated stack frame chain) - | %i5 -> only - | %i4 -> userf - | %i3 - | %i2 -> pt - | %i1 -> pu - | %i0 - | %l7 - | %l6 - | %l5 - | %l4 - | %l3 - | %l2 - | %l1 - | %l0 <--- qt_t.sp - +--- - - varargs: - - | : - | : - | argument list - | one-word aggregate return pointer - +--- - | <blank space for alignment> - | %o7 == return address -> qt_vstart - | %i7 - | %i6 == frame pointer -> 0 (NULL-terminated stack frame chain) - | %i5 -> startup - | %i4 -> userf - | %i3 -> cleanup - | %i2 -> pt - | %i1 - | %i0 - | %l7 - | %l6 - | %l5 - | %l4 - | %l3 - | %l2 - | %l1 - | %l0 <--- qt_t.sp - +--- - - */ - - -/* What to do to start a thread running. */ -extern void qt_start (void); -extern void qt_vstart (void); - - -/* Hold 17 saved registers + 1 word for alignment. */ -#define QT_STKBASE (18 * 4) -#define QT_VSTKBASE QT_STKBASE - - -/* Stack must be doubleword aligned. */ -#define QT_STKALIGN (8) /* Doubleword aligned. */ - -#define QT_ONLY_INDEX (QT_I5) -#define QT_USER_INDEX (QT_I4) -#define QT_ARGT_INDEX (QT_I2) -#define QT_ARGU_INDEX (QT_I1) - -#define QT_VSTARTUP_INDEX (QT_I5) -#define QT_VUSERF_INDEX (QT_I4) -#define QT_VCLEANUP_INDEX (QT_I3) -#define QT_VARGT_INDEX (QT_I2) - -#define QT_O7 (16) -#define QT_I6 (14) -#define QT_I5 (13) -#define QT_I4 (12) -#define QT_I3 (11) -#define QT_I2 (10) -#define QT_I1 ( 9) - - -/* The thread will ``return'' to the `qt_start' routine to get things - going. The normal return sequence takes us to QT_O7+8, so we - pre-subtract 8. The frame pointer chain is 0-terminated to prevent - the trap handler from chasing off in to random memory when flushing - stack windows. */ - -#define QT_ARGS_MD(top) \ - (QT_SPUT ((top), QT_O7, ((void *)(((int)qt_start)-8))), \ - QT_SPUT ((top), QT_I6, 0)) - - -/* The varargs startup routine always reads 6 words of arguments - (6 argument registers) from the stack, offset by one word to - allow for an aggregate return area pointer. If the varargs - routine actually pushed fewer words than that, qt_vstart could read - off the top of the stack. To prevent errors, we always allocate 8 - words. The space is often just wasted. */ - -#define QT_VARGS_MD0(sp, vabytes) \ - ((qt_t *)(((char *)(sp)) - 8*4 - QT_STKROUNDUP(vabytes))) - -#define QT_VARGS_MD1(sp) \ - (QT_SPUT (sp, QT_O7, ((void *)(((int)qt_vstart)-8)))) - -/* The SPARC has wierdo calling conventions which stores a hidden - parameter for returning aggregate values, so the rest of the - parameters are shoved up the stack by one place. */ -#define QT_VARGS_ADJUST(sp) (((char *)sp)+4) - -#define QT_VARGS_DEFAULT - - -#define QT_GROW_DOWN - -#endif /* ndef QT_SPARC_H */ diff --git a/qt/md/sparc.s b/qt/md/sparc.s deleted file mode 100644 index d9bdf0c58..000000000 --- a/qt/md/sparc.s +++ /dev/null @@ -1,142 +0,0 @@ -/* sparc.s -- assembly support for the `qt' thread building kit. */ - -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - -/* #include <machine/trap.h> */ - - .text - .align 4 - .global qt_blocki - .global qt_block - .global qt_abort - .global qt_start - .global qt_vstart - -/* Register assignment: -// %o0: incoming `helper' function to call after cswap -// also used as outgoing sp of old thread (qt_t *) -// %o1, %o2: -// parameters to `helper' function called after cswap -// %o3: sp of new thread -// %o5: tmp used to save old thread sp, while using %o0 -// to call `helper' f() after cswap. -// -// -// Aborting a thread is easy if there are no cached register window -// frames: just switch to the new stack and away we go. If there are -// cached register window frames they must all be written back to the -// old stack before we move to the new stack. If we fail to do the -// writeback then the old stack memory can be written with register -// window contents e.g., after the stack memory has been freed and -// reused. -// -// If you don't believe this, try setting the frame pointer to zero -// once we're on the new stack. This will not affect correctnes -// otherwise because the frame pointer will eventually get reloaded w/ -// the new thread's frame pointer. But it will be zero briefly before -// the reload. You will eventually (100,000 cswaps later on a small -// SPARC machine that I tried) get an illegal instruction trap from -// the kernel trying to flush a cached window to location 0x0. -// -// Solution: flush windows before switching stacks, which invalidates -// all the other register windows. We could do the trap -// conditionally: if we're in the lowest frame of a thread, the fp is -// zero already so we know there's nothing cached. But we expect most -// aborts will be done from a first function that does a `save', so we -// will rarely save anything and always pay the cost of testing to see -// if we should flush. -// -// All floating-point registers are caller-save, so this routine -// doesn't need to do anything to save and restore them. -// -// `qt_block' and `qt_blocki' return the same value as the value -// returned by the helper function. We get this ``for free'' -// since we don't touch the return value register between the -// return from the helper function and return from qt_block{,i}. -*/ - -qt_block: -qt_blocki: - sub %sp, 8, %sp /* Allocate save area for return pc. */ - st %o7, [%sp+64] /* Save return pc. */ -qt_abort: - ta 0x03 /* Save locals and ins. */ - mov %sp, %o5 /* Remember old sp w/o chng ins/locals. */ - sub %o3, 64, %sp /* Allocate kwsa, switch stacks. */ - call %o0, 0 /* Call `helper' routine. */ - mov %o5, %o0 /* Pass old thread to qt_after_t() */ - /* .. along w/ args in %o1 & %o2. */ - - /* Restore callee-save regs. The kwsa - // is on this stack, so offset all - // loads by sizeof(kwsa), 64 bytes. - */ - ldd [%sp+ 0+64], %l0 - ldd [%sp+ 8+64], %l2 - ldd [%sp+16+64], %l4 - ldd [%sp+24+64], %l6 - ldd [%sp+32+64], %i0 - ldd [%sp+40+64], %i2 - ldd [%sp+48+64], %i4 - ldd [%sp+56+64], %i6 - ld [%sp+64+64], %o7 /* Restore return pc. */ - - retl /* Return to address in %o7. */ - add %sp, 72, %sp /* Deallocate kwsa, ret pc area. */ - - -/* The function calling conventions say there has to be a 1-word area -// in the caller's stack to hold a pointer to space for aggregate -// return values. It also says there should be a 6-word area to hold -// %o0..%o5 if the callee wants to save them (why? I don't know...) -// Round up to 8 words to maintain alignment. -// -// Parameter values were stored in callee-save regs and are moved to -// the parameter registers. -*/ -qt_start: - mov %i1, %o0 /* `pu': Set up args to `only'. */ - mov %i2, %o1 /* `pt'. */ - mov %i4, %o2 /* `userf'. */ - call %i5, 0 /* Call client function. */ - sub %sp, 32, %sp /* Allocate 6-word callee space. */ - - call qt_error, 0 /* `only' erroniously returned. */ - nop - - -/* Same comments as `qt_start' about allocating rounded-up 7-word -// save areas. */ - -qt_vstart: - sub %sp, 32, %sp /* Allocate 7-word callee space. */ - call %i5, 0 /* call `startup'. */ - mov %i2, %o0 /* .. with argument `pt'. */ - - add %sp, 32, %sp /* Use 7-word space in varargs. */ - ld [%sp+ 4+64], %o0 /* Load arg0 ... */ - ld [%sp+ 8+64], %o1 - ld [%sp+12+64], %o2 - ld [%sp+16+64], %o3 - ld [%sp+20+64], %o4 - call %i4, 0 /* Call `userf'. */ - ld [%sp+24+64], %o5 - - /* Use 6-word space in varargs. */ - mov %o0, %o1 /* Pass return value from userf */ - call %i3, 0 /* .. when call `cleanup. */ - mov %i2, %o0 /* .. along with argument `pt'. */ - - call qt_error, 0 /* `cleanup' erroniously returned. */ - nop diff --git a/qt/md/sparc_b.s b/qt/md/sparc_b.s deleted file mode 100644 index 08351d76d..000000000 --- a/qt/md/sparc_b.s +++ /dev/null @@ -1,106 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - - .globl b_call_reg - .globl b_call_imm - .globl b_add - .globl b_load - -b_null: - retl - nop - -b_call_reg: - sethi %hi(b_null),%o4 - or %o4,%lo(b_null),%o4 - add %o7,%g0, %o3 -L0: - call %o4 - nop - call %o4 - nop - call %o4 - nop - call %o4 - nop - call %o4 - nop - - subcc %o0,1,%o0 - bg L0 - nop - add %o3,%g0, %o7 - retl - nop - -b_call_imm: - sethi %hi(b_null),%o4 - or %o4,%lo(b_null),%o4 - add %o7,%g0, %o3 -L1: - call b_null - call b_null - call b_null - call b_null - call b_null - - subcc %o0,1,%o0 - bg L0 - nop - add %o3,%g0, %o7 - retl - nop - - -b_add: - add %o0,%g0,%o1 - add %o0,%g0,%o2 - add %o0,%g0,%o3 - add %o0,%g0,%o4 -L2: - sub %o0,5,%o0 - sub %o1,5,%o1 - sub %o2,5,%o2 - sub %o3,5,%o3 - sub %o4,5,%o4 - - subcc %o0,5,%o0 - sub %o1,5,%o1 - sub %o2,5,%o2 - sub %o3,5,%o3 - sub %o4,5,%o4 - - bg L2 - nop - retl - nop - - -b_load: - ld [%sp+ 0], %g0 -L3: - ld [%sp+ 4],%g0 - ld [%sp+ 8],%g0 - ld [%sp+12],%g0 - ld [%sp+16],%g0 - ld [%sp+20],%g0 - ld [%sp+24],%g0 - ld [%sp+28],%g0 - ld [%sp+32],%g0 - ld [%sp+36],%g0 - - subcc %o0,10,%o0 - bg L3 - ld [%sp+ 0],%g0 - retl - nop diff --git a/qt/md/vax.h b/qt/md/vax.h deleted file mode 100644 index 1a5af0f2b..000000000 --- a/qt/md/vax.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - -#ifndef QT_VAX_H -#define QT_VAX_H - -typedef unsigned long qt_word_t; - -/* Thread's initial stack layout on the VAX: - - non-varargs: - - +--- - | arg[2] === `userf' on startup - | arg[1] === `pt' on startup - | arg[0] === `pu' on startup - | ... === `only' on startup. - +--- - | ret pc === `qt_start' on startup - | fp === 0 on startup - | ap === 0 on startup - | <mask> - | 0 (handler) <--- qt_t.sp - +--- - - When a non-varargs thread is started, it ``returns'' to the start - routine, which calls the client's `only' function. - - The varargs case is clearly bad code. The various values should be - stored in a save area and snarfed in to callee-save registers on - startup. However, it's too painful to figure out the register - mask (right now), so do it the slow way. - - +--- - | arg[n-1] - | .. - | arg[0] - | nargs - +--- - | === `cleanup' - | === `vuserf' - | === `startup' - | === `pt' - +--- - | ret pc === `qt_start' on startup - | fp === 0 on startup - | ap === 0 on startup - | <mask> - | 0 (handler) <--- qt_t.sp - +--- - - When a varargs thread is started, it ``returns'' to the `qt_vstart' - startup code. The startup code pops all the extra arguments, then - calls the appropriate functions. */ - - -/* What to do to start a thread running. */ -extern void qt_start (void); -extern void qt_vstart (void); - - -/* Initial call frame for non-varargs and varargs cases. */ -#define QT_STKBASE (10 * 4) -#define QT_VSTKBASE (9 * 4) - - -/* Stack "must be" 4-byte aligned. (Actually, no, but it's - easiest and probably fastest to do so.) */ - -#define QT_STKALIGN (4) - - -/* Where to place various arguments. */ -#define QT_ONLY_INDEX (5) -#define QT_USER_INDEX (8) -#define QT_ARGT_INDEX (7) -#define QT_ARGU_INDEX (6) - -#define QT_VSTARTUP_INDEX (6) -#define QT_VUSERF_INDEX (7) -#define QT_VCLEANUP_INDEX (8) -#define QT_VARGT_INDEX (5) - - -/* Stack grows down. The top of the stack is the first thing to - pop off (predecrement, postincrement). */ -#define QT_GROW_DOWN - - -extern void qt_error (void); - -#define QT_VAX_GMASK_NOREGS (0) - -/* Push on the error return address, null termination to call chains, - number of arguments to `only', register save mask (save no - registers). */ - -#define QT_ARGS_MD(sto) \ - (QT_SPUT (sto, 0, 0), \ - QT_SPUT (sto, 1, QT_VAX_GMASK_NOREGS), \ - QT_SPUT (sto, 2, 0), \ - QT_SPUT (sto, 3, 0), \ - QT_SPUT (sto, 4, qt_start)) - -#define QT_VARGS_MD0(sto, nbytes) \ - (QT_SPUT (sto, (-(nbytes)/4)-1, (nbytes)/4), \ - ((char *)(((sto)-4) - QT_STKROUNDUP(nbytes)))) - -#define QT_VARGS_ADJUST(sp) ((char *)sp + 4) - -#define QT_VARGS_MD1(sto) \ - (QT_SPUT (sto, 0, 0), \ - QT_SPUT (sto, 1, QT_VAX_GMASK_NOREGS), \ - QT_SPUT (sto, 2, 0), \ - QT_SPUT (sto, 3, 0), \ - QT_SPUT (sto, 4, qt_vstart)) - -#define QT_VARGS_DEFAULT - -#endif /* QT_VAX_H */ diff --git a/qt/md/vax.s b/qt/md/vax.s deleted file mode 100644 index fed03f043..000000000 --- a/qt/md/vax.s +++ /dev/null @@ -1,69 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - - .text - - .globl _qt_abort - .globl _qt_block - .globl _qt_blocki - .globl _qt_start - .globl _qt_vstart - - -/* -// Calls to these routines have the signature -// -// void *block (func, arg1, arg2, newsp) -// -// Since the prologue saves 5 registers, nargs, pc, fp, ap, mask, and -// a condition handler (at sp+0), the first argument is 40=4*10 bytes -// offset from the stack pointer. -*/ -_qt_block: -_qt_blocki: -_qt_abort: - .word 0x7c0 /* Callee-save mask: 5 registers. */ - movl 56(sp),r1 /* Get stack pointer of new thread. */ - movl 52(sp),-(r1) /* Push arg2 */ - movl 48(sp),-(r1) /* Push arg1 */ - movl sp,-(r1) /* Push arg0 */ - - movl 44(sp),r0 /* Get helper to call. */ - movl r1,sp /* Move to new thread's stack. */ - addl3 sp,$12,fp /* .. including the frame pointer. */ - calls $3,(r0) /* Call helper. */ - - ret - -_qt_start: - movl (sp)+,r0 /* Get `only'. */ - calls $3,(r0) /* Call `only'. */ - calls $0,_qt_error /* `only' erroniously returned. */ - - -_qt_vstart: - movl (sp)+,r10 /* Get `pt'. */ - movl (sp)+,r9 /* Get `startup'. */ - movl (sp)+,r8 /* Get `vuserf'. */ - movl (sp)+,r7 /* Get `cleanup'. */ - - pushl r10 /* Push `qt'. */ - calls $1,(r9) /* Call `startup', pop `qt' on return. */ - - calls (sp)+,(r8) /* Call user's function. */ - - pushl r0 /* Push `vuserf_retval'. */ - pushl r10 /* Push `qt'. */ - calls $2,(r7) /* Call `cleanup', never return. */ - - calls $0,_qt_error /* `cleanup' erroniously returned. */ diff --git a/qt/md/vax_b.s b/qt/md/vax_b.s deleted file mode 100644 index 2db2d4fec..000000000 --- a/qt/md/vax_b.s +++ /dev/null @@ -1,92 +0,0 @@ -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - - .text - .globl _b_call_reg - .globl _b_call_imm - .globl _b_add - .globl _b_load - -_b_null: - .word 0x0 - ret - -_b_call_reg: - .word 0x0 - movl 4(ap),r0 - moval _b_null,r1 -L0: - calls $0,(r1) - calls $0,(r1) - calls $0,(r1) - calls $0,(r1) - calls $0,(r1) - - subl2 $5,r0 - bgtr L0 - ret - - -_b_call_imm: - .word 0x0 - movl 4(ap),r0 -L1: - calls $0,_b_null - calls $0,_b_null - calls $0,_b_null - calls $0,_b_null - calls $0,_b_null - - subl2 $5,r0 - bgtr L1 - ret - - -_b_add: - .word 0x0 - movl 4(ap),r0 -L2: - subl2 $1,r0 - subl2 $1,r0 - subl2 $1,r0 - subl2 $1,r0 - subl2 $1,r0 - - subl2 $1,r0 - subl2 $1,r0 - subl2 $1,r0 - subl2 $1,r0 - subl2 $1,r0 - - bgtr L2 - ret - - -_b_load: - .word 0x0 - movl 4(ap),r0 -L3: - movl 0(sp),r1 - movl 4(sp),r1 - movl 8(sp),r1 - movl 12(sp),r1 - movl 16(sp),r1 - movl 20(sp),r1 - movl 24(sp),r1 - movl 28(sp),r1 - movl 32(sp),r1 - movl 36(sp),r1 - - subl2 $1,r0 - bgtr L3 - ret diff --git a/qt/meas.c b/qt/meas.c deleted file mode 100644 index 3faab3c52..000000000 --- a/qt/meas.c +++ /dev/null @@ -1,1049 +0,0 @@ -/* meas.c -- measure qt stuff. */ - -#include "copyright.h" - -/* Need this to get assertions under Mach on the Sequent/i386: */ -#ifdef __i386__ -#define assert(ex) \ - do { \ - if (!(ex)) { \ - fprintf (stderr, "[%s:%d] Assertion " #ex " failed\n", __FILE__, __LINE__); \ - abort(); \ - } \ - } while (0) -#else -#include <assert.h> -#endif - -/* This really ought to be defined in some ANSI include file (*I* - think...), but it's defined here instead, which leads us to another - machine dependency. - - The `iaddr_t' type is an integer representation of a pointer, - suited for doing arithmetic on addresses, e.g. to round an address - to an alignment boundary. */ -typedef unsigned long iaddr_t; - -#include <stdarg.h> /* For varargs tryout. */ -#include <stdio.h> -#include "b.h" -#include "qt.h" -#include "stp.h" - -extern void exit (int status); -extern int atoi (char const *s); -extern int fprintf (FILE *out, char const *fmt, ...); -extern int fputs (char const *s, FILE *fp); -extern void free (void *sto); -extern void *malloc (unsigned nbytes); -extern void perror (char const *s); - -void usage (void); -void tracer(void); - -/* Round `v' to be `a'-aligned, assuming `a' is a power of two. */ -#define ROUND(v, a) (((v) + (a) - 1) & ~((a)-1)) - -typedef struct thread_t { - qt_t *qt; /* Pointer to thread of function... */ - void *stk; - void *top; /* Set top of stack if reuse. */ - struct thread_t *next; -} thread_t; - - - static thread_t * -t_alloc (void) -{ - thread_t *t; - int ssz = 0x1000; - - t = malloc (sizeof(thread_t)); - if (!t) { - perror ("malloc"); - exit (1); - } - assert (ssz > QT_STKBASE); - t->stk = malloc (ssz); - t->stk = (void *)ROUND (((iaddr_t)t->stk), QT_STKALIGN); - if (!t->stk) { - perror ("malloc"); - exit (1); - } - assert ((((iaddr_t)t->stk) & (QT_STKALIGN-1)) == 0); - t->top = QT_SP (t->stk, ssz - QT_STKBASE); - - return (t); -} - - - static thread_t * -t_create (qt_only_t *starter, void *p0, qt_userf_t *f) -{ - thread_t *t; - - t = t_alloc(); - t->qt = QT_ARGS (t->top, p0, t, f, starter); - return (t); -} - - - static void -t_free (thread_t *t) -{ - free (t->stk); - free (t); -} - - - static void * -t_null (qt_t *old, void *p1, void *p2) -{ - /* return (garbage); */ -} - - - static void * -t_splat (qt_t *old, void *oldp, void *null) -{ - *(qt_t **)oldp = old; - /* return (garbage); */ -} - - -static char const test01_msg[] = - "*QT_SP(sto,sz), QT_ARGS(top,p0,p1,userf,first)"; - -static char const *test01_descr[] = { - "Performs 1 QT_SP and one QT_ARGS per iteration.", - NULL -}; - -/* This test gives a guess on how long it takes to initalize - a thread. */ - - static void -test01 (int n) -{ - char stack[QT_STKBASE+QT_STKALIGN]; - char *stk; - qt_t *top; - - stk = (char *)ROUND (((iaddr_t)stack), QT_STKALIGN); - - { - int i; - - for (i=0; i<QT_STKBASE; ++i) { - stk[i] = 0; - } - } - - while (n>0) { - /* RETVALUSED */ - top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); -#ifdef NDEF - top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); - top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); - top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); - top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); - - top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); - top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); - top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); - top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); - top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); - - n -= 10; -#else - n -= 1; -#endif - } -} - - -static char const test02_msg[] = "QT_BLOCKI (0, 0, test02_aux, t->qt)"; -static qt_t *rootthread; - - static void -test02_aux1 (void *pu, void *pt, qt_userf_t *f) -{ - QT_ABORT (t_null, 0, 0, rootthread); -} - - static void * -test02_aux2 (qt_t *old, void *farg1, void *farg2) -{ - rootthread = old; - /* return (garbage); */ -} - - static void -test02 (int n) -{ - thread_t *t; - - while (n>0) { - t = t_create (test02_aux1, 0, 0); - QT_BLOCKI (test02_aux2, 0, 0, t->qt); - t_free (t); - t = t_create (test02_aux1, 0, 0); - QT_BLOCKI (test02_aux2, 0, 0, t->qt); - t_free (t); - t = t_create (test02_aux1, 0, 0); - QT_BLOCKI (test02_aux2, 0, 0, t->qt); - t_free (t); - t = t_create (test02_aux1, 0, 0); - QT_BLOCKI (test02_aux2, 0, 0, t->qt); - t_free (t); - t = t_create (test02_aux1, 0, 0); - QT_BLOCKI (test02_aux2, 0, 0, t->qt); - t_free (t); - - n -= 5; - } -} - - -static char const test03_msg[] = "QT_BLOCKI (...) test vals are right."; - - -/* Called by the thread function when it wants to shut down. - Return a value to the main thread. */ - - static void * -test03_aux0 (qt_t *old_is_garbage, void *farg1, void *farg2) -{ - assert (farg1 == (void *)5); - assert (farg2 == (void *)6); - return ((void *)15); /* Some unlikely value. */ -} - - -/* Called during new thread startup by main thread. Since the new - thread has never run before, return value is ignored. */ - - static void * -test03_aux1 (qt_t *old, void *farg1, void *farg2) -{ - assert (old != NULL); - assert (farg1 == (void *)5); - assert (farg2 == (void *)6); - rootthread = old; - return ((void *)16); /* Different than `15'. */ -} - - static void -test03_aux2 (void *pu, void *pt, qt_userf_t *f) -{ - assert (pu == (void *)1); - assert (f == (qt_userf_t *)4); - QT_ABORT (test03_aux0, (void *)5, (void *)6, rootthread); -} - - static void -test03 (int n) -{ - thread_t *t; - void *rv; - - while (n>0) { - t = t_create (test03_aux2, (void *)1, (qt_userf_t *)4); - rv = QT_BLOCKI (test03_aux1, (void *)5, (void *)6, t->qt); - assert (rv == (void *)15); - t_free (t); - - --n; - } -} - - -static char const test04_msg[] = "stp_start w/ no threads."; - - static void -test04 (int n) -{ - while (n>0) { - stp_init(); stp_start(); - stp_init(); stp_start(); - stp_init(); stp_start(); - stp_init(); stp_start(); - stp_init(); stp_start(); - - stp_init(); stp_start(); - stp_init(); stp_start(); - stp_init(); stp_start(); - stp_init(); stp_start(); - stp_init(); stp_start(); - - n -= 10; - } -} - - -static char const test05_msg[] = "stp w/ 2 yielding thread."; - - static void -test05_aux (void *null) -{ - stp_yield(); - stp_yield(); -} - - static void -test05 (int n) -{ - while (n>0) { - stp_init(); - stp_create (test05_aux, 0); - stp_create (test05_aux, 0); - stp_start(); - - --n; - } -} - - -static char const test06_msg[] = "*QT_ARGS(...), QT_BLOCKI one thread"; - -static char const *test06_descr[] = { - "Does a QT_ARGS, QT_BLOCKI to a helper function that saves the", - "stack pointer of the main thread, calls an `only' function that", - "saves aborts the thread, calling a null helper function.", - ":: start/stop = QT_ARGS + QT_BLOCKI + QT_ABORT + 3 procedure calls.", - NULL -}; - -/* This test initializes a thread, runs it, then returns to the main - program, which reinitializes the thread, runs it again, etc. Each - iteration corresponds to 1 init, 1 abort, 1 block. */ - -static qt_t *test06_sp; - - - static void -test06_aux2 (void *null0a, void *null1b, void *null2b, qt_userf_t *null) -{ - QT_ABORT (t_null, 0, 0, test06_sp); -} - - - static void * -test06_aux3 (qt_t *sp, void *null0c, void *null1c) -{ - test06_sp = sp; - /* return (garbage); */ -} - - - static void -test06 (int n) -{ - thread_t *t; - - t = t_create (0, 0, 0); - - while (n>0) { - /* RETVALUSED */ - QT_ARGS (t->top, 0, 0, 0, test06_aux2); - QT_BLOCKI (test06_aux3, 0, 0, t->qt); -#ifdef NDEF - /* RETVALUSED */ - QT_ARGS (t->top, 0, 0, 0, test06_aux2); - QT_BLOCKI (test06_aux3, 0, 0, t->qt); - - /* RETVALUSED */ - QT_ARGS (t->top, 0, 0, 0, test06_aux2); - QT_BLOCKI (test06_aux3, 0, 0, t->qt); - - /* RETVALUSED */ - QT_ARGS (t->top, 0, 0, 0, test06_aux2); - QT_BLOCKI (test06_aux3, 0, 0, t->qt); - - /* RETVALUSED */ - QT_ARGS (t->top, 0, 0, 0, test06_aux2); - QT_BLOCKI (test06_aux3, 0, 0, t->qt); - - n -= 5; -#else - --n; -#endif - } -} - -static char test07_msg[] = "*cswap between threads"; - -static char const *test07_descr[] = { - "Build a chain of threads where each thread has a fixed successor.", - "There is no scheduling performed. Each thread but one is a loop", - "that simply blocks with QT_BLOCKI, calling a helper that saves the", - "current stack pointer. The last thread decrements a count, and,", - "if zero, aborts back to the main thread. Else it continues with", - "the blocking chain. The count is divided by the number of threads", - "in the chain, so `n' is the number of integer block operations.", - ":: integer cswap = QT_BLOCKI + a procedure call.", - NULL -}; - -/* This test repeatedly blocks a bunch of threads. - Each iteration corresponds to one block operation. - - The threads are arranged so that there are TEST07_N-1 of them that - run `test07_aux2'. Each one of those blocks saving it's sp to - storage owned by the preceding thread; a pointer to that storage is - passed in via `mep'. Each thread has a handle on it's own storage - for the next thread, referenced by `nxtp', and it blocks by passing - control to `*nxtp', telling the helper function to save its state - in `*mep'. The last thread in the chain decrements a count and, if - it's gone below zero, returns to `test07'; otherwise, it invokes - the first thread in the chain. */ - -static qt_t *test07_heavy; - -#define TEST07_N (4) - - - static void -test07_aux2 (void *null0, void *mep, void *nxtp, qt_userf_t *null) -{ - qt_t *nxt; - - while (1) { - nxt = *(qt_t **)nxtp; -#ifdef NDEF - printf ("Helper 0x%p\n", nxtp); -#endif - QT_BLOCKI (t_splat, mep, 0, nxt); - } -} - - static void -test07_aux3 (void *np, void *mep, void *nxtp, qt_userf_t *null) -{ - int n; - - n = *(int *)np; - while (1) { - n -= TEST07_N; - if (n<0) { - QT_ABORT (t_splat, mep, 0, test07_heavy); - } - QT_BLOCKI (t_splat, mep, 0, *(qt_t **)nxtp); - } -} - - - static void -test07 (int n) -{ - int i; - thread_t *t[TEST07_N]; - - for (i=0; i<TEST07_N; ++i) { - t[i] = t_create (0, 0, 0); - } - for (i=0; i<TEST07_N-1; ++i) { - /* RETVALUSED */ - QT_ARGS (t[i]->top, 0, &t[i]->qt, &t[i+1]->qt, test07_aux2); - } - /* RETVALUSED */ - QT_ARGS (t[i]->top, &n, &t[TEST07_N-1]->qt, &t[0]->qt, test07_aux3); - QT_BLOCKI (t_splat, &test07_heavy, 0, t[0]->qt); -} - - -static char test08_msg[] = "Floating-point cswap between threads"; - -static char const *test08_descr[] = { - "Measure context switch times including floating-point, use QT_BLOCK.", - NULL -}; - -static qt_t *test08_heavy; - -#define TEST08_N (4) - - - static void -test08_aux2 (void *null0, void *mep, void *nxtp, qt_userf_t *null) -{ - qt_t *nxt; - - while (1) { - nxt = *(qt_t **)nxtp; - QT_BLOCK (t_splat, mep, 0, nxt); - } -} - - static void -test08_aux3 (void *np, void *mep, void *nxtp, qt_userf_t *null) -{ - int n; - - n = *(int *)np; - while (1) { - n -= TEST08_N; - if (n<0) { - QT_ABORT (t_splat, mep, 0, test08_heavy); - } - QT_BLOCK (t_splat, mep, 0, *(qt_t **)nxtp); - } -} - - - static void -test08 (int n) -{ - int i; - thread_t *t[TEST08_N]; - - for (i=0; i<TEST08_N; ++i) { - t[i] = t_create (0, 0, 0); - } - for (i=0; i<TEST08_N-1; ++i) { - /* RETVALUSED */ - QT_ARGS (t[i]->top, 0, &t[i]->qt, &t[i+1]->qt, test08_aux2); - } - /* RETVALUSED */ - QT_ARGS (t[i]->top, &n, &t[TEST08_N-1]->qt, &t[0]->qt, test08_aux3); - QT_BLOCK (t_splat, &test08_heavy, 0, t[0]->qt); -} - - -/* Test the varargs procedure calling. */ - -char const test09_msg[] = { "Start and run threads using varargs." }; - -thread_t *test09_t0, *test09_t1, *test09_t2, *test09_main; - - thread_t * -test09_create (qt_startup_t *start, qt_vuserf_t *f, - qt_cleanup_t *cleanup, int nbytes, ...) -{ - va_list ap; - thread_t *t; - - t = t_alloc(); - va_start (ap, nbytes); - t->qt = QT_VARGS (t->top, nbytes, ap, t, start, f, cleanup); - va_end (ap); - return (t); -} - - - static void -test09_cleanup (void *pt, void *vuserf_retval) -{ - assert (vuserf_retval == (void *)17); - QT_ABORT (t_splat, &((thread_t *)pt)->qt, 0, - ((thread_t *)pt)->next->qt); -} - - - static void -test09_start (void *pt) -{ -} - - - static void * -test09_user0 (void) -{ - QT_BLOCKI (t_splat, &test09_t0->qt, 0, test09_t1->qt); - return ((void *)17); -} - - static void * -test09_user2 (int one, int two) -{ - assert (one == 1); - assert (two == 2); - QT_BLOCKI (t_splat, &test09_t1->qt, 0, test09_t2->qt); - assert (one == 1); - assert (two == 2); - return ((void *)17); -} - - static void * -test09_user10 (int one, int two, int three, int four, int five, - int six, int seven, int eight, int nine, int ten) -{ - assert (one == 1); - assert (two == 2); - assert (three == 3); - assert (four == 4); - assert (five == 5); - assert (six == 6); - assert (seven == 7); - assert (eight == 8); - assert (nine == 9); - assert (ten == 10); - QT_BLOCKI (t_splat, &test09_t2->qt, 0, test09_main->qt); - assert (one == 1); - assert (two == 2); - assert (three == 3); - assert (four == 4); - assert (five == 5); - assert (six == 6); - assert (seven == 7); - assert (eight == 8); - assert (nine == 9); - assert (ten == 10); - return ((void *)17); -} - - - void -test09 (int n) -{ - thread_t main; - - test09_main = &main; - - while (--n >= 0) { - test09_t0 = test09_create (test09_start, (qt_vuserf_t*)test09_user0, - test09_cleanup, 0); - test09_t1 = test09_create (test09_start, (qt_vuserf_t*)test09_user2, - test09_cleanup, 2 * sizeof(qt_word_t), 1, 2); - test09_t2 = test09_create (test09_start, (qt_vuserf_t*)test09_user10, - test09_cleanup, 10 * sizeof(qt_word_t), - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - /* Chaining used by `test09_cleanup' to determine who is next. */ - test09_t0->next = test09_t1; - test09_t1->next = test09_t2; - test09_t2->next = test09_main; - - QT_BLOCKI (t_splat, &test09_main->qt, 0, test09_t0->qt); - QT_BLOCKI (t_splat, &test09_main->qt, 0, test09_t0->qt); - - t_free (test09_t0); - t_free (test09_t1); - t_free (test09_t2); - } -} - - -/* Test 10/11/12: time the cost of various number of args. */ - -char const test10_msg[] = { "*Test varargs init & startup w/ 0 args." }; - -char const *test10_descr[] = { - "Start and stop threads that use variant argument lists (varargs).", - "Each thread is initialized by calling a routine that calls", - "QT_VARARGS. Then runs the thread by calling QT_BLOCKI to hald the", - "main thread, a helper that saves the main thread's stack pointer,", - "a null startup function, a null user function, a cleanup function", - "that calls QT_ABORT and restarts the main thread. Copies no user", - "parameters.", - ":: varargs start/stop = QT_BLOCKI + QT_ABORT + 6 function calls.", - NULL -}; - -/* Helper function to send control back to main. - Don't save anything. */ - - -/* Helper function for starting the varargs thread. Save the stack - pointer of the main thread so we can get back there eventually. */ - - -/* Startup function for a varargs thread. */ - - static void -test10_startup (void *pt) -{ -} - - -/* User function for a varargs thread. */ - - static void * -test10_run (int arg0, ...) -{ - /* return (garbage); */ -} - - -/* Cleanup function for a varargs thread. Send control - back to the main thread. Don't save any state from the thread that - is halting. */ - - void -test10_cleanup (void *pt, void *vuserf_retval) -{ - QT_ABORT (t_null, 0, 0, ((thread_t *)pt)->qt); -} - - - void -test10_init (thread_t *new, thread_t *next, int nbytes, ...) -{ - va_list ap; - - va_start (ap, nbytes); - new->qt = QT_VARGS (new->top, nbytes, ap, next, test10_startup, - test10_run, test10_cleanup); - va_end (ap); -} - - - void -test10 (int n) -{ - thread_t main; - thread_t *t; - - t = t_alloc(); - t->next = &main; - - while (--n >= 0) { - test10_init (t, &main, 0); - QT_BLOCKI (t_splat, &main.qt, 0, t->qt); - } - t_free (t); -} - - -char const test11_msg[] = { "*Test varargs init & startup w/ 2 args." }; - -char const *test11_descr[] = { - "Varargs initialization/run. Copies 2 user arguments.", - ":: varargs 2 start/stop = QT_VARGS(2 args), QT_BLOCKI, QT_ABORT, 6 f() calls.", - NULL -}; - - - void -test11 (int n) -{ - thread_t main; - thread_t *t; - - t = t_alloc(); - t->next = &main; - - while (--n >= 0) { - test10_init (t, &main, 2 * sizeof(int), 2, 1); - QT_BLOCKI (t_splat, &main.qt, 0, t->qt); - } - t_free (t); -} - -char const test12_msg[] = { "*Test varargs init & startup w/ 4 args." }; - -char const *test12_descr[] = { - "Varargs initialization/run. Copies 4 user arguments.", - ":: varargs 4 start/stop = QT_VARGS(4 args), QT_BLOCKI, QT_ABORT, 6 f() calls.", - NULL -}; - - - void -test12 (int n) -{ - thread_t main; - thread_t *t; - - t = t_alloc(); - t->next = &main; - - while (--n >= 0) { - test10_init (t, &main, 4 * sizeof(int), 4, 3, 2, 1); - QT_BLOCKI (t_splat, &main.qt, 0, t->qt); - } - t_free (t); -} - - -char const test13_msg[] = { "*Test varargs init & startup w/ 8 args." }; - -char const *test13_descr[] = { - "Varargs initialization/run. Copies 8 user arguments.", - ":: varargs 8 start/stop = QT_VARGS(8 args), QT_BLOCKI, QT_ABORT, 6 f() calls.", - NULL -}; - - void -test13 (int n) -{ - thread_t main; - thread_t *t; - - t = t_alloc(); - t->next = &main; - - while (--n >= 0) { - test10_init (t, &main, 8 * sizeof(int), 8, 7, 6, 5, 4, 3, 2, 1); - QT_BLOCKI (t_splat, &main.qt, 0, t->qt); - } - t_free (t); -} - - -char const test14_msg[] = { "*Test varargs initialization w/ 0 args." }; - -char const *test14_descr[] = { - "Varargs initialization without running the thread. Just calls", - "QT_VARGS.", - ":: varargs 0 init = QT_VARGS()", - NULL -}; - - void -test14 (int n) -{ - thread_t main; - thread_t *t; - - t = t_alloc(); - t->next = &main; - - while (--n >= 0) { - test10_init (t, &main, 0 * sizeof(int)); - } - t_free (t); -} - - -char const test15_msg[] = { "*Test varargs initialization w/ 2 args." }; - -char const *test15_descr[] = { - "Varargs initialization without running the thread. Just calls", - "QT_VARGS.", - ":: varargs 2 init = QT_VARGS(2 args)", - NULL -}; - - void -test15 (int n) -{ - thread_t main; - thread_t *t; - - t = t_alloc(); - t->next = &main; - - while (--n >= 0) { - test10_init (t, &main, 2 * sizeof(int), 2, 1); - } - t_free (t); -} - -char const test16_msg[] = { "*Test varargs initialization w/ 4 args." }; - -char const *test16_descr[] = { - "Varargs initialization without running the thread. Just calls", - "QT_VARGS.", - ":: varargs 4 init = QT_VARGS(4 args)", - NULL -}; - - - void -test16 (int n) -{ - thread_t main; - thread_t *t; - - t = t_alloc(); - t->next = &main; - - while (--n >= 0) { - test10_init (t, &main, 4 * sizeof(int), 4, 3, 2, 1); - } - t_free (t); -} - - -char const test17_msg[] = { "*Test varargs initialization w/ 8 args." }; - -char const *test17_descr[] = { - "Varargs initialization without running the thread. Just calls", - "QT_VARGS.", - ":: varargs 8 init = QT_VARGS(8 args)", - NULL -}; - - - void -test17 (int n) -{ - thread_t main; - thread_t *t; - - t = t_alloc(); - t->next = &main; - - while (--n >= 0) { - test10_init (t, &main, 8 * sizeof(int), 8, 7, 6, 5, 4, 3, 2, 1); - } - t_free (t); -} - -/* Test times for basic machine operations. */ - -char const test18_msg[] = { "*Call register indirect." }; -char const *test18_descr[] = { NULL }; - - void -test18 (int n) -{ - b_call_reg (n); -} - - -char const test19_msg[] = { "*Call immediate." }; -char const *test19_descr[] = { NULL }; - - void -test19 (int n) -{ - b_call_imm (n); -} - - -char const test20_msg[] = { "*Add register-to-register." }; -char const *test20_descr[] = { NULL }; - - void -test20 (int n) -{ - b_add (n); -} - - -char const test21_msg[] = { "*Load memory to a register." }; -char const *test21_descr[] = { NULL }; - - void -test21 (int n) -{ - b_load (n); -} - -/* Driver. */ - -typedef struct foo_t { - char const *msg; /* Message to print for generic help. */ - char const **descr; /* A description of what is done by the test. */ - void (*f)(int n); -} foo_t; - - -static foo_t foo[] = { - { "Usage:\n", NULL, (void(*)(int n))usage }, - { test01_msg, test01_descr, test01 }, - { test02_msg, NULL, test02 }, - { test03_msg, NULL, test03 }, - { test04_msg, NULL, test04 }, - { test05_msg, NULL, test05 }, - { test06_msg, test06_descr, test06 }, - { test07_msg, test07_descr, test07 }, - { test08_msg, test08_descr, test08 }, - { test09_msg, NULL, test09 }, - { test10_msg, test10_descr, test10 }, - { test11_msg, test11_descr, test11 }, - { test12_msg, test12_descr, test12 }, - { test13_msg, test13_descr, test13 }, - { test14_msg, test14_descr, test14 }, - { test15_msg, test15_descr, test15 }, - { test16_msg, test16_descr, test16 }, - { test17_msg, test17_descr, test17 }, - { test18_msg, test18_descr, test18 }, - { test19_msg, test19_descr, test19 }, - { test20_msg, test20_descr, test20 }, - { test21_msg, test21_descr, test21 }, - { 0, 0 } -}; - -static int tv = 0; - - void -tracer () -{ - - fprintf (stderr, "tracer\t%d\n", tv++); - fflush (stderr); -} - - void -tracer2 (void *val) -{ - fprintf (stderr, "tracer2\t%d val=0x%p", tv++, val); - fflush (stderr); -} - - - void -describe() -{ - int i; - FILE *out = stdout; - - for (i=0; foo[i].msg; ++i) { - if (foo[i].descr) { - int j; - - putc ('\n', out); - fprintf (out, "[%d]\n", i); - for (j=0; foo[i].descr[j]; ++j) { - fputs (foo[i].descr[j], out); - putc ('\n', out); - } - } - } - exit (0); -} - - - void -usage() -{ - int i; - - fputs (foo[0].msg, stderr); - for (i=1; foo[i].msg; ++i) { - fprintf (stderr, "%2d\t%s\n", i, foo[i].msg); - } - exit (1); -} - - - void -args (int *which, int *n, int argc, char **argv) -{ - static int nfuncs = 0; - - if (argc == 2 && argv[1][0] == '-' && argv[1][1] == 'h') { - describe(); - } - - if (nfuncs == 0) { - for (nfuncs=0; foo[nfuncs].msg; ++nfuncs) - ; - } - - if (argc != 2 && argc != 3) { - usage(); - } - - *which = atoi (argv[1]); - if (*which < 0 || *which >= nfuncs) { - usage(); - } - *n = (argc == 3) - ? atoi (argv[2]) - : 1; -} - - - int -main (int argc, char **argv) -{ - int which, n; - args (&which, &n, argc, argv); - (*(foo[which].f))(n); - exit (0); - return (0); -} diff --git a/qt/qt.c b/qt/qt.c deleted file mode 100644 index 1e406d24c..000000000 --- a/qt/qt.c +++ /dev/null @@ -1,48 +0,0 @@ -#include "copyright.h" -#include "qt.h" - -#ifdef QT_VARGS_DEFAULT - -/* If the stack grows down, `vargs' is a pointer to the lowest - address in the block of arguments. If the stack grows up, it is a - pointer to the highest address in the block. */ - - qt_t * -qt_vargs (qt_t *sp, int nbytes, void *vargs, - void *pt, qt_startup_t *startup, - qt_vuserf_t *vuserf, qt_cleanup_t *cleanup) -{ - int i; - - sp = QT_VARGS_MD0 (sp, nbytes); -#ifdef QT_GROW_UP - for (i=nbytes/sizeof(qt_word_t); i>0; --i) { - QT_SPUT (QT_VARGS_ADJUST(sp), i, ((qt_word_t *)vargs)[-i]); - } -#else - for (i=nbytes/sizeof(qt_word_t); i>0; --i) { - QT_SPUT (QT_VARGS_ADJUST(sp), i-1, ((qt_word_t *)vargs)[i-1]); - } -#endif - - QT_VARGS_MD1 (QT_VADJ(sp)); - QT_SPUT (QT_VADJ(sp), QT_VARGT_INDEX, pt); - QT_SPUT (QT_VADJ(sp), QT_VSTARTUP_INDEX, startup); - QT_SPUT (QT_VADJ(sp), QT_VUSERF_INDEX, vuserf); - QT_SPUT (QT_VADJ(sp), QT_VCLEANUP_INDEX, cleanup); - return ((qt_t *)QT_VADJ(sp)); -} -#endif /* def QT_VARGS_DEFAULT */ - - void -qt_null (void) -{ -} - - void -qt_error (void) -{ - extern void abort(void); - - abort(); -} diff --git a/qt/qt.h.in b/qt/qt.h.in deleted file mode 100644 index 6e01fec0c..000000000 --- a/qt/qt.h.in +++ /dev/null @@ -1,176 +0,0 @@ -#ifndef QT_H -#define QT_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include <@qtmd_h@> - - -/* A QuickThreads thread is represented by it's current stack pointer. - To restart a thread, you merely need pass the current sp (qt_t*) to - a QuickThreads primitive. `qt_t*' is a location on the stack. To - improve type checking, represent it by a particular struct. */ - -typedef struct qt_t { - char dummy; -} qt_t; - - -/* Alignment is guaranteed to be a power of two. */ -#ifndef QT_STKALIGN - #error "Need to know the machine-dependent stack alignment." -#endif - -#define QT_STKROUNDUP(bytes) \ - (((bytes)+QT_STKALIGN) & ~(QT_STKALIGN-1)) - - -/* Find ``top'' of the stack, space on the stack. */ -#ifndef QT_SP -#ifdef QT_GROW_DOWN -#define QT_SP(sto, size) ((qt_t *)(&((char *)(sto))[(size)])) -#endif -#ifdef QT_GROW_UP -#define QT_SP(sto, size) ((void *)(sto)) -#endif -#if !defined(QT_SP) - #error "QT_H: Stack must grow up or down!" -#endif -#endif - - -/* The type of the user function: - For non-varargs, takes one void* function. - For varargs, takes some number of arguments. */ -typedef void *(qt_userf_t)(void *pu); -typedef void *(qt_vuserf_t)(int arg0, ...); - -/* For non-varargs, just call a client-supplied function, - it does all startup and cleanup, and also calls the user's - function. */ -typedef void (qt_only_t)(void *pu, void *pt, qt_userf_t *userf); - -/* For varargs, call `startup', then call the user's function, - then call `cleanup'. */ -typedef void (qt_startup_t)(void *pt); -typedef void (qt_cleanup_t)(void *pt, void *vuserf_return); - - -/* Internal helper for putting stuff on stack. */ -#ifndef QT_SPUT -#define QT_SPUT(top, at, val) \ - (((qt_word_t *)(top))[(at)] = (qt_word_t)(val)) -#endif - - -/* Push arguments for the non-varargs case. */ -#ifndef QT_ARGS - -#ifndef QT_ARGS_MD -#define QT_ARGS_MD (0) -#endif - -#ifndef QT_STKBASE - #error "Need to know the machine-dependent stack allocation." -#endif - -/* All things are put on the stack relative to the final value of - the stack pointer. */ -#ifdef QT_GROW_DOWN -#define QT_ADJ(sp) (((char *)sp) - QT_STKBASE) -#else -#define QT_ADJ(sp) (((char *)sp) + QT_STKBASE) -#endif - -#define QT_ARGS(sp, pu, pt, userf, only) \ - (QT_ARGS_MD (QT_ADJ(sp)), \ - QT_SPUT (QT_ADJ(sp), QT_ONLY_INDEX, only), \ - QT_SPUT (QT_ADJ(sp), QT_USER_INDEX, userf), \ - QT_SPUT (QT_ADJ(sp), QT_ARGT_INDEX, pt), \ - QT_SPUT (QT_ADJ(sp), QT_ARGU_INDEX, pu), \ - ((qt_t *)QT_ADJ(sp))) - -#endif - - -/* Push arguments for the varargs case. - Has to be a function call because initialization is an expression - and we need to loop to copy nbytes of stuff on to the stack. - But that's probably OK, it's not terribly cheap, anyway. */ - -#ifdef QT_VARGS_DEFAULT -#ifndef QT_VARGS_MD0 -#define QT_VARGS_MD0(sp, vasize) (sp) -#endif -#ifndef QT_VARGS_MD1 -#define QT_VARGS_MD1(sp) do { ; } while (0) -#endif - -#ifndef QT_VSTKBASE - #error "Need base stack size for varargs functions." -#endif - -/* Sometimes the stack pointer needs to munged a bit when storing - the list of arguments. */ -#ifndef QT_VARGS_ADJUST -#define QT_VARGS_ADJUST(sp) (sp) -#endif - -/* All things are put on the stack relative to the final value of - the stack pointer. */ -#ifdef QT_GROW_DOWN -#define QT_VADJ(sp) (((char *)sp) - QT_VSTKBASE) -#else -#define QT_VADJ(sp) (((char *)sp) + QT_VSTKBASE) -#endif - -extern qt_t *qt_vargs (qt_t *sp, int nbytes, void *vargs, - void *pt, qt_startup_t *startup, - qt_vuserf_t *vuserf, qt_cleanup_t *cleanup); - -#ifndef QT_VARGS -#define QT_VARGS(sp, nbytes, vargs, pt, startup, vuserf, cleanup) \ - (qt_vargs (sp, nbytes, vargs, pt, startup, vuserf, cleanup)) -#endif - -#endif - - -/* Save the state of the thread and call the helper function - using the stack of the new thread. */ -typedef void *(qt_helper_t)(qt_t *old, void *a0, void *a1); -typedef void *(qt_block_t)(qt_helper_t *helper, void *a0, void *a1, - qt_t *newthread); - -/* Rearrange the parameters so that things passed to the helper - function are already in the right argument registers. */ -#ifndef QT_ABORT -extern qt_abort (qt_helper_t *h, void *a0, void *a1, qt_t *newthread); -/* The following does, technically, `return' a value, but the - user had better not rely on it, since the function never - returns. */ -#define QT_ABORT(h, a0, a1, newthread) \ - do { qt_abort (h, a0, a1, newthread); } while (0) -#endif - -#ifndef QT_BLOCK -extern void *qt_block (qt_helper_t *h, void *a0, void *a1, - qt_t *newthread); -#define QT_BLOCK(h, a0, a1, newthread) \ - (qt_block (h, a0, a1, newthread)) -#endif - -#ifndef QT_BLOCKI -extern void *qt_blocki (qt_helper_t *h, void *a0, void *a1, - qt_t *newthread); -#define QT_BLOCKI(h, a0, a1, newthread) \ - (qt_blocki (h, a0, a1, newthread)) -#endif - -#ifdef __cplusplus -} /* Match `extern "C" {' at top. */ -#endif - -#endif /* ndef QT_H */ diff --git a/qt/stp.c b/qt/stp.c deleted file mode 100644 index bfacc893b..000000000 --- a/qt/stp.c +++ /dev/null @@ -1,199 +0,0 @@ -#include "copyright.h" -#include "qt.h" -#include "stp.h" - -#ifndef NULL -#define NULL 0 -#endif - -#define STP_STKSIZE (0x1000) - -/* `alignment' must be a power of 2. */ -#define STP_STKALIGN(sp, alignment) \ - ((void *)((((qt_word_t)(sp)) + (alignment) - 1) & ~((alignment)-1))) - - -/* The notion of a thread is merged with the notion of a queue. - Thread stuff: thread status (sp) and stuff to use during - (re)initialization. Queue stuff: next thread in the queue - (next). */ - -struct stp_t { - qt_t *sp; /* QuickThreads handle. */ - void *sto; /* `malloc'-allocated stack. */ - struct stp_t *next; /* Next thread in the queue. */ -}; - - -/* A queue is a circular list of threads. The queue head is a - designated list element. If this is a uniprocessor-only - implementation we can store the `main' thread in this, but in a - multiprocessor there are several `heavy' threads but only one run - queue. A fancier implementation might have private run queues, - which would lead to a simpler (trivial) implementation */ - -typedef struct stp_q_t { - stp_t t; - stp_t *tail; -} stp_q_t; - - -/* Helper functions. */ - -extern void *malloc (unsigned size); -extern void perror (char const *msg); -extern void free (void *sto); - - void * -xmalloc (unsigned size) -{ - void *sto; - - sto = malloc (size); - if (!sto) { - perror ("malloc"); - exit (1); - } - return (sto); -} - -/* Queue access functions. */ - - static void -stp_qinit (stp_q_t *q) -{ - q->t.next = q->tail = &q->t; -} - - - static stp_t * -stp_qget (stp_q_t *q) -{ - stp_t *t; - - t = q->t.next; - q->t.next = t->next; - if (t->next == &q->t) { - if (t == &q->t) { /* If it was already empty .. */ - return (NULL); /* .. say so. */ - } - q->tail = &q->t; /* Else now it is empty. */ - } - return (t); -} - - - static void -stp_qput (stp_q_t *q, stp_t *t) -{ - q->tail->next = t; - t->next = &q->t; - q->tail = t; -} - - -/* Thread routines. */ - -static stp_q_t stp_global_runq; /* A queue of runable threads. */ -static stp_t stp_global_main; /* Thread for the process. */ -static stp_t *stp_global_curr; /* Currently-executing thread. */ - -static void *stp_starthelp (qt_t *old, void *ignore0, void *ignore1); -static void stp_only (void *pu, void *pt, qt_userf_t *f); -static void *stp_aborthelp (qt_t *sp, void *old, void *null); -static void *stp_yieldhelp (qt_t *sp, void *old, void *blockq); - - - void -stp_init() -{ - stp_qinit (&stp_global_runq); -} - - - void -stp_start() -{ - stp_t *next; - - while ((next = stp_qget (&stp_global_runq)) != NULL) { - stp_global_curr = next; - QT_BLOCK (stp_starthelp, 0, 0, next->sp); - } -} - - - static void * -stp_starthelp (qt_t *old, void *ignore0, void *ignore1) -{ - stp_global_main.sp = old; - stp_qput (&stp_global_runq, &stp_global_main); - /* return (garbage); */ -} - - - void -stp_create (stp_userf_t *f, void *pu) -{ - stp_t *t; - void *sto; - - t = xmalloc (sizeof(stp_t)); - t->sto = xmalloc (STP_STKSIZE); - sto = STP_STKALIGN (t->sto, QT_STKALIGN); - t->sp = QT_SP (sto, STP_STKSIZE - QT_STKALIGN); - t->sp = QT_ARGS (t->sp, pu, t, (qt_userf_t *)f, stp_only); - stp_qput (&stp_global_runq, t); -} - - - static void -stp_only (void *pu, void *pt, qt_userf_t *f) -{ - stp_global_curr = (stp_t *)pt; - (*(stp_userf_t *)f)(pu); - stp_abort(); - /* NOTREACHED */ -} - - - void -stp_abort (void) -{ - stp_t *old, *newthread; - - newthread = stp_qget (&stp_global_runq); - old = stp_global_curr; - stp_global_curr = newthread; - QT_ABORT (stp_aborthelp, old, (void *)NULL, newthread->sp); -} - - - static void * -stp_aborthelp (qt_t *sp, void *old, void *null) -{ - free (((stp_t *)old)->sto); - free (old); - /* return (garbage); */ -} - - - void -stp_yield() -{ - stp_t *old, *newthread; - - newthread = stp_qget (&stp_global_runq); - old = stp_global_curr; - stp_global_curr = newthread; - QT_BLOCK (stp_yieldhelp, old, &stp_global_runq, newthread->sp); -} - - - static void * -stp_yieldhelp (qt_t *sp, void *old, void *blockq) -{ - ((stp_t *)old)->sp = sp; - stp_qput ((stp_q_t *)blockq, (stp_t *)old); - /* return (garbage); */ -} diff --git a/qt/stp.h b/qt/stp.h deleted file mode 100644 index 1220e47e2..000000000 --- a/qt/stp.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef STP_H -#define STP_H - -/* - * QuickThreads -- Threads-building toolkit. - * Copyright (c) 1993 by David Keppel - * - * Permission to use, copy, modify and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice and this notice - * appear in all copies. This software is provided as a - * proof-of-concept and for demonstration purposes; there is no - * representation about the suitability of this software for any - * purpose. - */ - -typedef struct stp_t stp_t; - -/* Each thread starts by calling a user-supplied function of this - type. */ - -typedef void (stp_userf_t)(void *p0); - -/* Call this before any other primitives. */ -extern void stp_init(); - -/* When one or more threads are created by the main thread, - the system goes multithread when this is called. It is done - (no more runable threads) when this returns. */ - -extern void stp_start (void); - -/* Create a thread and make it runable. When the thread starts - running it will call `f' with arguments `p0' and `p1'. */ - -extern void stp_create (stp_userf_t *f, void *p0); - -/* The current thread stops running but stays runable. - It is an error to call `stp_yield' before `stp_start' - is called or after `stp_start' returns. */ - -extern void stp_yield (void); - -/* Like `stp_yield' but the thread is discarded. Any intermediate - state is lost. The thread can also terminate by simply - returning. */ - -extern void stp_abort (void); - - -#endif /* ndef STP_H */ diff --git a/qt/time/README.time b/qt/time/README.time deleted file mode 100644 index 4bb190e18..000000000 --- a/qt/time/README.time +++ /dev/null @@ -1,17 +0,0 @@ -The program `raw', when run in `..' runs the program `run' produced -from `meas.c'. It produces a raw output file (see `../tmp/*.raw'). -`raw' will die with an error if run in the current directory. Note -that some versions of `time' produce output in an unexpected format; -edit them by hand. - -`prim', `init', `cswap' and `go' produce formatted table entries used -in the documentation (in `../doc'). For example, from `..', - - foreach i (tmp/*.raw) - time/prim $i - end - -See notes in the QuickThreads document about the applicability of -these microbenchmark measurements -- in general, you can expect all -QuickThreads operations to be a bit slower when used in a real -application. diff --git a/qt/time/assim b/qt/time/assim deleted file mode 100755 index 6c4c52183..000000000 --- a/qt/time/assim +++ /dev/null @@ -1,42 +0,0 @@ -#! /bin/awk -f - -BEGIN { - nmach = 0; - - init_test = "1"; - abort_test = "6"; - blocki_test = "7"; - block_test = "8"; -} - -{ - mach = $1 - test = $2 - iter = $3 - time = $6 + $8 - - if (machi[mach] == 0) { - machn[nmach] = mach; - machi[mach] = 1; - ++nmach; - } - - us_per_op = time / iter * 1000000 - times[mach "_" test] = us_per_op; -} - - -END { - for (i=0; i<nmach; ++i) { - m = machn[i]; - init = times[m "_" init_test]; - printf ("init %s | %f\n", m, init); - - init_abort_blocki = times[m "_" abort_test]; - abort_blocki = init_abort_blocki - init; - blocki = times[m "_" blocki_test]; - abort = abort_blocki - blocki; - blockf = times[m "_" block_test]; - printf ("swap %s | %f | %f | %f\n", m, abort, blocki, blockf); - } -} diff --git a/qt/time/cswap b/qt/time/cswap deleted file mode 100755 index 0ec811bcd..000000000 --- a/qt/time/cswap +++ /dev/null @@ -1,37 +0,0 @@ -#! /bin/awk -f - -BEGIN { - purpose = "report time used by int only and int+fp cswaps"; - - nmach = 0; - - test_int = "7"; - test_fp = "8"; -} - -{ - mach = $1 - test = $2 - iter = $3 - time = $6 + $8 - - if (machi[mach] == 0) { - machn[nmach] = mach; - machi[mach] = 1; - ++nmach; - } - - us_per_op = time / iter * 1000000 - times[mach "_" test] = us_per_op; -} - - -END { - for (i=0; i<nmach; ++i) { - m = machn[i]; - - integer = times[m "_" test_int]; - fp = times[m "_" test_fp]; - printf ("%s|%3.1f|%3.1f\n", m, integer, fp); - } -} diff --git a/qt/time/go b/qt/time/go deleted file mode 100755 index 489d53882..000000000 --- a/qt/time/go +++ /dev/null @@ -1,43 +0,0 @@ -#! /bin/awk -f - -BEGIN { - purpose = "report times used for init/start/stop"; - - nmach = 0; - - test_single = "6"; - test_v0 = "10"; - test_v2 = "11"; - test_v4 = "12"; - test_v8 = "13"; -} - -{ - mach = $1 - test = $2 - iter = $3 - time = $6 + $8 - - if (machi[mach] == 0) { - machn[nmach] = mach; - machi[mach] = 1; - ++nmach; - } - - us_per_op = time / iter * 1000000 - times[mach "_" test] = us_per_op; -} - - -END { - for (i=0; i<nmach; ++i) { - m = machn[i]; - - single = times[m "_" test_single]; - v0 = times[m "_" test_v0]; - v2 = times[m "_" test_v2]; - v4 = times[m "_" test_v4]; - v8 = times[m "_" test_v8]; - printf ("%s|%3.1f|%3.1f|%3.1f|%3.1f|%3.1f\n", m, single, v0, v2, v4, v8); - } -} diff --git a/qt/time/init b/qt/time/init deleted file mode 100755 index 8bcbf3428..000000000 --- a/qt/time/init +++ /dev/null @@ -1,42 +0,0 @@ -#! /bin/awk -f - -BEGIN { - purpose = "Report time used to initialize a thread." - nmach = 0; - - test_single = "1"; - test_v0 = "14"; - test_v2 = "15"; - test_v4 = "16"; - test_v8 = "17"; -} - -{ - mach = $1 - test = $2 - iter = $3 - time = $6 + $8 - - if (machi[mach] == 0) { - machn[nmach] = mach; - machi[mach] = 1; - ++nmach; - } - - us_per_op = time / iter * 1000000 - times[mach "_" test] = us_per_op; -} - - -END { - for (i=0; i<nmach; ++i) { - m = machn[i]; - - single = times[m "_" test_single]; - v0 = times[m "_" test_v0]; - v2 = times[m "_" test_v2]; - v4 = times[m "_" test_v4]; - v8 = times[m "_" test_v8]; - printf ("%s|%3.1f|%3.1f|%3.1f|%3.1f|%3.1f\n", m, single, v0, v2, v4, v8); - } -} diff --git a/qt/time/prim b/qt/time/prim deleted file mode 100755 index 22b323f6f..000000000 --- a/qt/time/prim +++ /dev/null @@ -1,41 +0,0 @@ -#! /bin/awk -f - -BEGIN { - purpose = "report times for microbenchmarks" - - nmach = 0; - - test_callind = "18"; - test_callimm = "18"; - test_addreg = "20"; - test_loadreg = "21"; -} - -{ - mach = $1 - test = $2 - iter = $3 - time = $6 + $8 - - if (machi[mach] == 0) { - machn[nmach] = mach; - machi[mach] = 1; - ++nmach; - } - - ns_per_op = time / iter * 1000000 - times[mach "_" test] = ns_per_op; -} - - -END { - for (i=0; i<nmach; ++i) { - m = machn[i]; - - ind = times[m "_" test_callind]; - imm = times[m "_" test_callimm]; - add = times[m "_" test_addreg]; - load = times[m "_" test_loadreg]; - printf ("%s|%1.3f|%1.3f|%1.3f|%1.3f\n", m, ind, imm, add, load); - } -} diff --git a/qt/time/raw b/qt/time/raw deleted file mode 100755 index 96ae10ad1..000000000 --- a/qt/time/raw +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/csh - -rm -f timed - -set init=1 -set runone=6 -set blockint=7 -set blockfloat=8 -set vainit0=14 -set vainit2=15 -set vainit4=16 -set vainit8=17 -set vastart0=10 -set vastart2=11 -set vastart4=12 -set vastart8=13 -set bench_regcall=18 -set bench_immcall=19 -set bench_add=20 -set bench_load=21 - -source configuration - -echo -n $config_machine $init $config_init -/bin/time run $init $config_init -echo -n $config_machine $runone $config_runone -/bin/time run $runone $config_runone -echo -n $config_machine $blockint $config_blockint -/bin/time run $blockint $config_blockint -echo -n $config_machine $blockfloat $config_blockfloat -/bin/time run $blockfloat $config_blockfloat - -echo -n $config_machine $vainit0 $config_vainit0 -/bin/time run $vainit0 $config_vainit0 -echo -n $config_machine $vainit2 $config_vainit2 -/bin/time run $vainit2 $config_vainit2 -echo -n $config_machine $vainit4 $config_vainit4 -/bin/time run $vainit4 $config_vainit4 -echo -n $config_machine $vainit8 $config_vainit8 -/bin/time run $vainit8 $config_vainit8 - -echo -n $config_machine $vastart0 $config_vastart0 -/bin/time run $vastart0 $config_vastart0 -echo -n $config_machine $vastart2 $config_vastart2 -/bin/time run $vastart2 $config_vastart2 -echo -n $config_machine $vastart4 $config_vastart4 -/bin/time run $vastart4 $config_vastart4 -echo -n $config_machine $vastart8 $config_vastart8 -/bin/time run $vastart8 $config_vastart8 - -echo -n $config_machine $bench_regcall $config_bcall_reg -/bin/time run $bench_regcall $config_bcall_reg -echo -n $config_machine $bench_immcall $config_bcall_imm -/bin/time run $bench_immcall $config_bcall_imm -echo -n $config_machine $bench_add $config_b_add -/bin/time run $bench_add $config_b_add -echo -n $config_machine $bench_load $config_b_load -/bin/time run $bench_load $config_b_load |