diff options
-rw-r--r-- | SCM/ANNOUNCE | 194 | ||||
-rw-r--r-- | SCM/COPYING | 674 | ||||
-rw-r--r-- | SCM/COPYING.LESSER | 165 | ||||
-rw-r--r-- | SCM/Makefile.orig | 736 | ||||
-rw-r--r-- | SCM/README | 381 | ||||
-rw-r--r-- | SCM/continue-ia64.S | 339 | ||||
-rw-r--r-- | SCM/continue.c | 242 | ||||
-rw-r--r-- | SCM/continue.h | 185 | ||||
-rw-r--r-- | SCM/scm.h | 1145 | ||||
-rw-r--r-- | SCM/scmfig.h | 870 | ||||
-rw-r--r-- | SCM/scmflags.h | 4 | ||||
-rw-r--r-- | SCM/setjump.h | 125 | ||||
-rw-r--r-- | SCM/setjump.mar | 39 | ||||
-rw-r--r-- | SCM/setjump.s | 40 | ||||
-rw-r--r-- | SCM/ugsetjump.s | 35 |
15 files changed, 0 insertions, 5174 deletions
diff --git a/SCM/ANNOUNCE b/SCM/ANNOUNCE deleted file mode 100644 index 422222e..0000000 --- a/SCM/ANNOUNCE +++ /dev/null @@ -1,194 +0,0 @@ -This message announces the availability of Scheme release scm-5e5. - -SCM conforms to Revised^5 Report on the Algorithmic Language Scheme -and the IEEE P1178 specification. SCM is written in C and runs under -Amiga, Atari-ST, MacOS, MS-DOS, OS/2, NOS/VE, Unicos, VMS, Windows, -Unix, and similar systems. - -SCM is free software and part of the GNU project. It is released -under the GNU Lesser General Public License (LGPL). - -Documentation and distributions in several formats are linked from -SCM's home page: - - http://swiss.csail.mit.edu/~jaffer/SCM - -Links to distributions of SCM and related softwares are at the end of -this message. - - -=-=- -scm-5e5 news: - -* SCM is now a GNU package. -* SCM license is now LGPLv3. -* Documentation changed to GNU Free Documentation License. -* scm-discuss email group - http://lists.gnu.org/mailman/listinfo/scm-discuss - - From Radey Shouman - - * repl.c (isymnames): Add name for IM_EVAL_VALUES. - Fix igc prototype, avert warning. - - * eval.c (scm_eval_values, ceval_1): Catch VALUES arity errors - in top-level repl evaluations. Eg (list (values 1 2)) now - throws an error even when typed to repl. - - * scm.h (IM_EVAL_VALUES): Add isym for use by scm_eval_values. - - From Bob Schumaker - - * macos-config.h, unexmacosx.c, lastfile.c: - Added from Emacs for MacOS (darwin). - - * build.scm (C-libraries): Added dump and dlll darwin entries. - (make-dll-archive, compile-dll-c-files): Added Darwin tagets. - (manifest): Added entries for "macos-config.h" and "lastfile.c". - - * Makefile (all): Make x.so only if /usr/X11R6/lib exists. - (install, installlib): test -d is not needed with mkdir -p. - - From Aubrey Jaffer - - * build, Makefile, scm.spec: Put "-" between "scm" and version. - - * unexelf.c, unexmacosx.c, unexsgi.c, unexsunos4.c, gmalloc.c, - lastfile.c, macos-config.h, r4rstest.scm, syntest2.scm, - unexalpha.c, unexec.c, !#.c, build, build.scm, ecrt0.c, - findexec.c, bench.scm: - Changed license to GPL version 3. - - * Transcen.scm, Tscript.scm, unif.c, unix.c, x.c, xgen.scm, - subr.c, sys.c, time.c, scm.texi, script.c, setjump.h, socket.c, - split.scm, scm.c, scm.h, scmfig.h, scmhob.h, scmhob.scm, - scmmain.c, repl.c, rgx.c, rope.c, sc2.c, scl.c, Macro.scm, - Makefile, mkimpcat.scm, pi.c, pi.scm, posix.c, ramap.c, - record.c, Iedline.scm, Init5e4.scm, Link.scm, Macexp.scm, - inc2scm, ioext.c, Idiffer.scm, gsubr.c, hobbit.scm, .gdbinit, - differ.c, disarm.scm, dynl.c, edline.c, eval.c, - get-contoffset-ia64.c, byte.c, bytenumb.c, compile.scm, - continue-ia64.S, continue.c, continue.h, crs.c, debug.c: - Changed license to LGPL version 3. - - * Tscript.scm: Handle EOF. - - * byte.c (bytes-append, bytes->string, string->bytes): Added. - - * scm.nsi: Create shortcuts at installation; removed SCM.lnk. - (MUI_ICON): Set to "SCM.ico". - - * scm.nsi (Uninstall): Delete tmp1, tmp2, and tmp3, - scmlit.exe, implcat, and slibcat when uninstalling. - - * Makefile ($(htmldir)Xlibscm_toc.html) - ($(htmldir)hobbit_toc.html): Add SCM.ico. - (all): Make differ.so. - (libscm.a, db.so, bytenumb.so, differ.so, myturtle, x.so): Depend - on scm.h and scmfig.h. - - * scm.h, repl.c: Made ints_disabled VOLATILE. - - * ANNOUNCE: Culled and reorganized URLs. - - * ioext.c (directory-for-each): Require 'filename, not 'glob. - - * Init5e4.scm (slib:features): Added srfi-96. - - * scm.c (init_scm): The streams when the program was dumped need - to be reset at initialization. - - * Makefile (Checklit, Check): Added case-sensitive checks. - - * repl.c (scm_lreadr): Made case-insensitive for character names. - - * keysymdef.scm, x11.scm: X Window System Version 7.1.1 - Release Date: 12 May 2006 - X Protocol Version 11, Revision 0, Release 7.1.1 - - -=-=- - -SCM source is available from: - http://swiss.csail.mit.edu/ftpdir/scm/scm-5e5.zip - swiss.csail.mit.edu:/pub/scm/scm-5e5.zip - http://swiss.csail.mit.edu/ftpdir/scm/scm-5e5-1.src.rpm - swiss.csail.mit.edu:/pub/scm/scm-5e5-1.src.rpm -Also available as i386 binary RPM: - http://swiss.csail.mit.edu/ftpdir/scm/scm-5e5-1.i386.rpm - swiss.csail.mit.edu:/pub/scm/scm-5e5-1.i386.rpm -Also available as i386 MS-Windows installer: - http://swiss.csail.mit.edu/ftpdir/scm/slib-3b1-1.exe - swiss.csail.mit.edu:/pub/scm/slib-3b1-1.exe - -SLIB is a portable Scheme library which SCM uses: - http://swiss.csail.mit.edu/ftpdir/scm/slib-3b1.zip - swiss.csail.mit.edu:/pub/scm/slib-3b1.zip -Also available as RPM: - http://swiss.csail.mit.edu/ftpdir/scm/slib-3b1-1.noarch.rpm - swiss.csail.mit.edu:/pub/scm/slib-3b1-1.noarch.rpm -Also available as MS-Windows installer: - http://swiss.csail.mit.edu/ftpdir/scm/slib-3b1-1.exe - swiss.csail.mit.edu:/pub/scm/slib-3b1-1.exe - -JACAL is a symbolic math system written in Scheme: - http://swiss.csail.mit.edu/ftpdir/scm/jacal-1b9.zip - swiss.csail.mit.edu:/pub/scm/jacal-1b9.zip -Also available as RPM: - http://swiss.csail.mit.edu/ftpdir/scm/jacal-1b9-1.noarch.rpm - swiss.csail.mit.edu:/pub/scm/jacal-1b9-1.noarch.rpm -Also available as MS-Windows installer: - http://swiss.csail.mit.edu/ftpdir/scm/jacal-1b9-1.exe - swiss.csail.mit.edu:/pub/scm/jacal-1b9-1.exe - -WB is a disk based, sorted associative array (B-tree) library for SCM. -Using WB, large databases can be created and managed from SCM. - http://swiss.csail.mit.edu/ftpdir/scm/wb-2a2.zip - swiss.csail.mit.edu:/pub/scm/wb-2a2.zip - http://swiss.csail.mit.edu/ftpdir/scm/wb-2a2-1.src.rpm - swiss.csail.mit.edu:/pub/scm/wb-2a2-1.src.rpm -Also available as i386 binary RPM: - http://swiss.csail.mit.edu/ftpdir/scm/wb-2a2-1.i386.rpm - swiss.csail.mit.edu:/pub/scm/wb-2a2-1.i386.rpm - -FreeSnell is a program to compute optical properties of multilayer -thin-film coatings: - http://swiss.csail.mit.edu/ftpdir/scm/FreeSnell-1b7.zip - swiss.csail.mit.edu:/pub/scm/FreeSnell-1b7.zip -Also available as MS-Windows installer: - http://swiss.csail.mit.edu/ftpdir/scm/FreeSnell-1b7-1.exe - swiss.csail.mit.edu:/pub/scm/FreeSnell-1b7-1.exe - -SIMSYNCH is a digital logic simulation system written in SCM. - http://swiss.csail.mit.edu/ftpdir/scm/synch-1c3.zip - swiss.csail.mit.edu:/pub/scm/synch-1c3.zip - -XSCM is a X windows interface package which works with SCM: - http://swiss.csail.mit.edu/ftpdir/scm/xscm-2.01.tar.gz - swiss.csail.mit.edu:/pub/scm/xscm-2.01.tar.gz - -TURTLSCM is a turtle graphics package which works with SCM on MS-DOS -or X11 machines: - http://swiss.csail.mit.edu/ftpdir/scm/turtlegr.tar.gz - swiss.csail.mit.edu:/pub/scm/turtlegr.tar.gz - -#! implements "#!" (POSIX) shell-scripts for MS-DOS batch files. - http://swiss.csail.mit.edu/ftpdir/scm/sharpbang.zip - swiss.csail.mit.edu:/pub/scm/sharpbang.zip - http://swiss.csail.mit.edu/ftpdir/scm/#!.zip - swiss.csail.mit.edu:/pub/scm/#!.zip - -SLIB-PSD is a portable debugger for Scheme (requires emacs editor): - http://swiss.csail.mit.edu/ftpdir/scm/slib-psd1-3.tar.gz - swiss.csail.mit.edu:/pub/scm/slib-psd1-3.tar.gz - -SMG-SCM is an SMG interface package which works with SCM on VMS. - http://swiss.csail.mit.edu/ftpdir/scm/smg-scm2a1.zip - swiss.csail.mit.edu:/pub/scm/smg-scm2a1.zip - -MacSCM is a Macintosh applications building package which works with -SCM (similar to XSCM). - http://swiss.csail.mit.edu/ftpdir/scm/macscm.tar.Z - swiss.csail.mit.edu:/pub/scm/macscm.tar.Z - -Programs for printing and viewing TexInfo documentation (which SCM -has) come with GNU Emacs or can be obtained via ftp from: - ftp://ftp.gnu.org/pub/gnu/texinfo/texinfo-4.8.tar.gz diff --git a/SCM/COPYING b/SCM/COPYING deleted file mode 100644 index 94a9ed0..0000000 --- a/SCM/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - <program> Copyright (C) <year> <name of author> - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -<http://www.gnu.org/licenses/>. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/SCM/COPYING.LESSER b/SCM/COPYING.LESSER deleted file mode 100644 index cd4ce53..0000000 --- a/SCM/COPYING.LESSER +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser 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 -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/SCM/Makefile.orig b/SCM/Makefile.orig deleted file mode 100644 index 1477c86..0000000 --- a/SCM/Makefile.orig +++ /dev/null @@ -1,736 +0,0 @@ -# "Makefile" for scm Scheme Interpreter -# Copyright (C) 1990-2008 Free Software Foundation, Inc. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this program. If not, see -# <http://www.gnu.org/licenses/>. - -# Author: Aubrey Jaffer - -SHELL = /bin/sh -#CC = gcc -#CFLAGS = -g -#LIBS = -#LD = $(CC) -g -LD = $(CC) -SCMLIT = ./scmlit -SCMEXE = ./scm -#SHOBJS = *.sl -SHOBJS = *.so - -#BUILD = ./build -hsystem -p svr4-gcc-sun-ld -BUILD = ./build -hsystem - -# Workaround for unexec on Fedora Core 1 GNU/Linux i386 -#SETARCH = setarch i386 - -# http://jamesthornton.com/writing/emacs-compile.html -# [For FC3] combreloc has become the default for recent GNU ld, which -# breaks the unexec/undump on all versions of both Emacs and -# XEmacs... -# -# Add the following to udscm5.opt: -#--linker-options="-z nocombreloc" - -# http://www.opensubscriber.com/message/emacs-devel@gnu.org/1007118.html -# Kernels later than 2.6.11 must do (as root) before dumping: -#echo 0 > /proc/sys/kernel/randomize_va_space - -#for RPMs -RELEASE = 1 - -intro: - @echo - @echo "This is the scm-$(VERSION) distribution. Read \"scm.info\"" - @echo "to learn how to build and install SCM. Or browse" - @echo " http://swiss.csail.mit.edu/~jaffer/SCM" - @echo - $(MAKE) scm - -srcdir.mk: Makefile - echo "CPROTO=`type cproto | sed 's%.* %%'`" > srcdir.mk - echo "srcdir=`pwd`/" >> srcdir.mk -#srcdir=$(HOME)/scm/ -#srcdir=/usr/local/src/scm/ -include srcdir.mk - -# directory where COPYING and InitXXX.scm reside. -#IMPLPATH = /usr/local/src/scm/ -#this one is good for bootstrapping -#IMPLPATH = `pwd`/ -IMPLPATH=$(srcdir) -include patchlvl.h -IMPLINIT = $(IMPLPATH)Init$(VERSION).scm - -# If pathname where InitXXX.scm resides is not known in advance then -# SCM_INIT_PATH is the environment variable whose value is the -# pathname where InitXXX.scm resides. - -hfiles = scm.h scmfig.h setjump.h patchlvl.h continue.h -cfiles = scmmain.c scm.c time.c repl.c ioext.c scl.c sys.c eval.c \ - subr.c sc2.c unif.c rgx.c crs.c dynl.c record.c posix.c socket.c\ - unix.c rope.c ramap.c gsubr.c edline.c continue.c \ - findexec.c script.c debug.c byte.c bytenumb.c differ.c -ufiles = pre-crt0.c ecrt0.c gmalloc.c unexec.c unexelf.c unexhp9k800.c \ - unexsunos4.c unexalpha.c unexsgi.c -# cxux-crt0.s ecrt0.c gmalloc.c pre-crt0.c unexaix.c unexalpha.c \ -# unexapollo.c unexconvex.c unexec.c unexelf.c unexelf1.c \ -# unexencap.c unexenix.c unexfx2800.c unexhp9k800.c unexmips.c \ -# unexnext.c unexnt.c unexsgi.c unexsni.c unexsunos4.c -ofiles = scm.o time.o repl.o scl.o sys.o eval.o subr.o unif.o rope.o \ - continue.o findexec.o script.o debug.o -# continue-ia64.o -ifiles = Init$(VERSION).scm Transcen.scm Link.scm Macro.scm Macexp.scm \ - Tscript.scm compile.scm Iedline.scm Idiffer.scm -hobfiles = hobbit.scm scmhob.scm scmhob.h -turfiles = turtlegr.c turtle grtest.scm -xafiles = xatoms.scm x11.scm xevent.scm keysymdef.scm -xfiles = x.c x.h xgen.scm xevent.h inc2scm $(xafiles) - -all: require.scm - $(MAKE) mydlls - $(MAKE) dscm5 - $(MAKE) differ.so - $(MAKE) db.so - if [ -d /usr/X11R6/lib ]; then $(MAKE) x.so; fi -require.scm: - cp -p requires.scm require.scm - -# SCMLIT -- try making this first! -scmlit: $(ofiles) scmmain.o require.scm Makefile - $(LD) -o scmlit $(ofiles) scmmain.o $(LIBS) - $(MAKE) checklit -scmflags.h: scmflags -scmflags: - echo "#ifndef IMPLINIT" > newflags.h - echo "#define IMPLINIT \"$(IMPLINIT)\"" >> newflags.h - echo "#endif" >> newflags.h - echo "#define CHEAP_CONTINUATIONS" >> newflags.h - echo "#define CAUTIOUS" >> newflags.h - -if (cmp -s newflags.h scmflags.h) then rm newflags.h; \ - else mv newflags.h scmflags.h; fi -.c.o: - $(CC) -c $(CFLAGS) $< -o $@ -scm.o: scm.c scm.h scmfig.h scmflags.h patchlvl.h -scmmain.o: scmmain.c scm.h scmfig.h scmflags.h patchlvl.h -scl.o: scl.c scm.h scmfig.h scmflags.h -eval.o: eval.c scm.h scmfig.h scmflags.h setjump.h -debug.o: debug.c scm.h scmfig.h scmflags.h setjump.h -unif.o: unif.c scm.h scmfig.h scmflags.h -#ramap.o: ramap.c scm.h scmfig.h scmflags.h -repl.o: repl.c scm.h scmfig.h scmflags.h setjump.h -sys.o: sys.c scm.h scmfig.h scmflags.h setjump.h -time.o: time.c scm.h scmfig.h scmflags.h -subr.o: subr.c scm.h scmfig.h scmflags.h -rope.o: rope.c scm.h scmfig.h scmflags.h -continue.o: continue.c continue.h setjump.h scm.h scmfig.h scmflags.h -continue-ia64.o: continue-ia64.S get-contoffset-ia64.c - gcc -o get-contoffset-ia64 get-contoffset-ia64.c - ./get-contoffset-ia64 contoffset-ia64.S - gcc -c -o continue-ia64.o continue-ia64.S - -# Simple build with bignums for running JACAL -scm: scmlit - $(BUILD) -s $(IMPLPATH) -F cautious bignums arrays # i/o-extensions - $(MAKE) check - -# R4RS interpreter (not dumpable) -scm4.opt: - echo "-F cautious bignums arrays inexact" >> scm4.opt - echo "-F engineering-notation dynamic-linking" >> scm4.opt -# if type gcc; then echo "--compiler-options=\"-fno-guess-branch-probability\"" >> scm4.opt; fi -scm4: $(cfiles) $(hfiles) build.scm build scm4.opt - $(BUILD) -f scm4.opt -o scm -s $(IMPLPATH) - -rm $(ofiles) scmmain.o - -$(MAKE) check - -# R5RS interpreter (not dumpable) -scm5.opt: - echo "-F cautious bignums arrays inexact" >> scm5.opt - echo "-F engineering-notation dynamic-linking" >> scm5.opt - echo "-F macro" >> scm5.opt -# if type gcc; then echo "--compiler-options=\"-fno-guess-branch-probability\"" >> scm5.opt; fi -scm5: $(cfiles) $(hfiles) build.scm build scm5.opt - $(BUILD) -f scm5.opt -o scm -s $(IMPLPATH) - -rm $(ofiles) scmmain.o - -$(MAKE) check - -$(MAKE) checkmacro - -# dumpable R4RS interpreter -udscm4.opt: - echo "-F cautious bignums arrays inexact" >> udscm4.opt - echo "-F engineering-notation dump dynamic-linking" >> udscm4.opt -# if type gcc; then echo "--compiler-options=\"-fno-guess-branch-probability\"" >> udscm4.opt; fi -udscm4: $(cfiles) $(hfiles) build.scm build udscm4.opt - $(BUILD) -f udscm4.opt -o udscm4 -s $(IMPLPATH) - -rm $(ofiles) scmmain.o -dscm4: udscm4 $(ifiles) require.scm - if [ -f /proc/sys/kernel/randomize_va_space -a\ - "`cat /proc/sys/kernel/randomize_va_space`" != "0" ]; then {\ - cat /proc/sys/kernel/randomize_va_space > randomize_va_space.tmp;\ - echo 0 > /proc/sys/kernel/randomize_va_space;\ - } fi - -rm -f slibcat implcat scm~ - -mv scm scm~ - echo "(quit)" | $(SETARCH) ./udscm4 -no-init-file -o scm - if [ -f randomize_va_space.tmp ]; then {\ - cat randomize_va_space.tmp > /proc/sys/kernel/randomize_va_space;\ - rm randomize_va_space.tmp;\ - } fi - -# dumpable R5RS interpreter -udscm5.opt: - $(MAKE) udscm4.opt - cat udscm4.opt >> udscm5.opt - echo "-F macro" >> udscm5.opt -udscm5: $(cfiles) $(ufiles) $(hfiles) build.scm build udscm5.opt - $(BUILD) -f udscm5.opt -o udscm5 -s $(IMPLPATH) - -rm $(ofiles) scmmain.o - strip udscm5 -dscm5: udscm5 $(ifiles) require.scm - if [ -f /proc/sys/kernel/randomize_va_space -a\ - "`cat /proc/sys/kernel/randomize_va_space`" != "0" ]; then {\ - cat /proc/sys/kernel/randomize_va_space > randomize_va_space.tmp;\ - echo 0 > /proc/sys/kernel/randomize_va_space;\ - } fi - -rm -f slibcat implcat scm~ - -mv scm scm~ - echo "(quit)" | $(SETARCH) ./udscm5 -no-init-file -r5 -o scm - if [ -f randomize_va_space.tmp ]; then {\ - cat randomize_va_space.tmp > /proc/sys/kernel/randomize_va_space;\ - rm randomize_va_space.tmp;\ - } fi - $(MAKE) check - $(MAKE) checkmacro - -# R5RS interpreter for debugging with GDB. -gdb.opt: udscm5.opt - cat udscm5.opt > gdb.opt - echo "-F debug" >> gdb.opt - echo "--compiler-options=-Wall" >> gdb.opt - echo "--linker-options=-Wall" >> gdb.opt - echo "-D NO_ENV_CACHE" >> gdb.opt -# echo "-DTEST_FARLOC -DTEST_SCM2PTR" >> gdb.opt -udgdbscm: gdb.opt $(cfiles) $(ufiles) $(hfiles) build.scm build - $(BUILD) -f gdb.opt -o udgdbscm -s $(IMPLPATH) -gdbscm: udgdbscm $(ifiles) require.scm - echo "(quit)" | $(SETARCH) ./udgdbscm -no-init-file -r5 -o gdbscm - -# R4RS interpreter for profiling -pg.opt: udscm4.opt - cat udscm4.opt >> pg.opt - echo "--compiler-options=-pg" >> pg.opt - echo "--linker-options=-pg" >> pg.opt - echo "-DLACK_SETITIMER" >> pg.opt -udpgscm: pg.opt - $(BUILD) -f pg.opt -o udpgscm -s $(IMPLPATH) -pgscm: udpgscm - echo "(quit)" | $(SETARCH) ./udpgscm -no-init-file -o pgscm - -# R4RS SCM library -libscm.opt: - echo "-F cautious bignums arrays inexact" >> libscm.opt - echo "-F engineering-notation" >> libscm.opt - echo "-F dynamic-linking" >> libscm.opt -mylib: libscm.a -libscm.a: libscm.opt scm.h scmfig.h - $(BUILD) -t lib -f libscm.opt -libtest: libscm.a libtest.c - $(LD) -o libtest libtest.c libscm.a -ldl -lm -lc - ./libtest - -# DLLs for dynamic linking -dlls.opt: - echo "--compiler-options=-Wall" >> dlls.opt - echo "--linker-options=-Wall" >> dlls.opt -mydlls: dlls.opt bytenumb.so - $(BUILD) -t dll -f dlls.opt -c ramap.c - $(BUILD) -t dll -f dlls.opt -c record.c - $(BUILD) -t dll -f dlls.opt -c gsubr.c - $(BUILD) -t dll -f dlls.opt -c byte.c - $(BUILD) -t dll -f dlls.opt -c sc2.c - $(BUILD) -t dll -f dlls.opt -c ioext.c - $(BUILD) -t dll -f dlls.opt -c posix.c - $(BUILD) -t dll -f dlls.opt -c socket.c - $(BUILD) -t dll -f dlls.opt -c unix.c - $(BUILD) -t dll -f dlls.opt -F curses - $(BUILD) -t dll -f dlls.opt -c rgx.c - if [ -f /usr/lib/libreadline.so ]; \ - then $(BUILD) -t dll -f dlls.opt -F edit-line; fi - -rwb-isam.scm wbtab.scm: ../wb/rwb-isam.scm ../wb/wbtab.scm - cp ../wb/rwb-isam.scm ../wb/wbtab.scm ./ -db.so: dlls.opt rwb-isam.scm wbtab.scm scm.h scmfig.h - if [ -f ../wb/blink.c ]; then \ - $(BUILD) -t dll -f dlls.opt -F wb; fi - -bytenumb.so: bytenumb.c scm.h scmfig.h - $(BUILD) -t dll -f dlls.opt -F byte-number inexact bignums -differ.so: differ.c scm.h scmfig.h - $(BUILD) -t dll -f dlls.opt -F differ -myturtle: dlls.opt scm.h scmfig.h - $(BUILD) -t dll -f dlls.opt -F turtlegr - -x.so: x.c x.h xevent.h dlls.opt scm.h scmfig.h - $(BUILD) -t dll -f dlls.opt -F x - -# Generate x11 include and Scheme files -incdir=/usr/include/ -x11.scm: inc2scm - rm -f x11.scm - $(SCMLIT) -l inc2scm x11.scm x: $(DESTDIR)$(incdir) X11/X.h X11/cursorfont.h X11/Xlib.h \ - X11/Xutil.h -keysymdef.scm: inc2scm - rm -f keysymdef.scm - $(SCMLIT) -l inc2scm keysymdef.scm x: $(DESTDIR)$(incdir) X11/keysym.h X11/keysymdef.h -xevent.h xevent.scm xatoms.scm: xgen.scm Makefile - $(SCMLIT) -l xgen.scm $(DESTDIR)$(incdir)X11/Xlib.h -x.h: x.c xevent.h - if [ -x "$(CPROTO)" ]; then $(CPROTO) x.c > x.h; fi - -# Check SCM; SCMLIT function. -checklit: - $(SCMLIT) -fr4rstest.scm -e'(test-sc4)(test-delay)(gc)' \ - -e '(or (null? errs) (quit 1))' -Checklit: - $(SCMLIT) --no-symbol-case-fold -fr4rstest.scm -e'(test-sc4)(test-delay)(gc)' \ - -e '(or (null? errs) (quit 1))' -check: r4rstest.scm - $(SCMEXE) -fr4rstest.scm -e'(test-sc4)(test-cont)(test-delay)(gc)' \ - -e '(or (null? errs) (quit 1))' -Check: r4rstest.scm - $(SCMEXE) --no-symbol-case-fold -fr4rstest.scm -e'(test-sc4)(test-cont)(test-delay)(gc)' \ - -e '(or (null? errs) (quit 1))' -checkmacro: syntest1.scm syntest2.scm r4rstest.scm - $(SCMEXE) -rmacro -fsyntest1.scm -fsyntest2.scm \ - -fr4rstest.scm -e'(test-sc4)(test-cont)(test-delay)' -fsyntest1 \ - -e '(or (null? errs) (quit 1))' - -# Measuare running speed of SCM; SCMLIT. Results are appended to file -# "BenchLog" -bench: - echo `whoami`@`hostname` testing scm \ - `$(SCMEXE) -e'(display *scm-version*)'` >> BenchLog - echo on `date` >> BenchLog - ls -l scm >> BenchLog - size scm >> BenchLog - uname -a >> BenchLog - $(SCMEXE) -lbench.scm - -cat prng.log >> BenchLog - echo >> BenchLog - -cat pi.log >> BenchLog - echo >> BenchLog - echo - tail -20 BenchLog - -rm -f pi.log prng.log -benchlit: - echo `whoami`@`hostname` testing scmlit \ - `$(SCMLIT) -e'(display *scm-version*)'` >> BenchLog - echo on `date` >> BenchLog - ls -l scmlit >> BenchLog - size scmlit >> BenchLog - uname -a >> BenchLog - $(SCMLIT) -lbench.scm - -cat prng.log >> BenchLog - echo >> BenchLog - -cat pi.log >> BenchLog - echo >> BenchLog - echo - tail -20 BenchLog - -rm -f pi.log prng.log -report: - $(SCMLIT) -e"(slib:report #t)" - $(SCMEXE) -e"(slib:report #t)" - -implcat: $(SHOBJS) mkimpcat.scm - $(SCMLIT) -lmkimpcat.scm - -htmldir=../public_html/ -dvi: scm.dvi Xlibscm.dvi hobbit.dvi -scm.dvi: $(texifiles) Makefile - texi2dvi -b -c scm.texi -Xlibscm.dvi: version.txi Xlibscm.texi Makefile - texi2dvi -b -c Xlibscm.texi -hobbit.dvi: version.txi hobbit.texi Makefile - texi2dvi -b -c hobbit.texi -xdvi: scm.dvi - xdvi scm.dvi -Xdvi: Xlibscm.dvi - xdvi Xlibscm.dvi -hobdvi: hobbit.dvi - xdvi hobbit.dvi - -pdf: $(htmldir)scm.pdf $(htmldir)Xlibscm.pdf $(htmldir)hobbit.pdf -$(htmldir)scm.pdf: $(texifiles) Makefile - texi2pdf -b -c scm.texi - mv scm.pdf $(htmldir) -$(htmldir)Xlibscm.pdf: version.txi Xlibscm.texi Makefile - texi2pdf -b -c Xlibscm.texi - mv Xlibscm.pdf $(htmldir) -$(htmldir)hobbit.pdf: version.txi hobbit.texi Makefile - texi2pdf -b -c hobbit.texi - mv hobbit.pdf $(htmldir) -xpdf: $(htmldir)scm.pdf - xpdf $(htmldir)scm.pdf -Xpdf: $(htmldir)Xlibscm.pdf - xpdf $(htmldir)Xlibscm.pdf -hobpdf: $(htmldir)hobbit.pdf - xpdf $(htmldir)hobbit.pdf - -PREVDOCS = prevdocs/ -html: $(htmldir)scm_toc.html $(htmldir)Xlibscm_toc.html $(htmldir)hobbit_toc.html - -TEXI2HTML = /usr/local/bin/texi2html -split -verbose - -$(htmldir)scm_toc.html: Makefile $(texifiles) - ${TEXI2HTML} scm.texi - -rm -f scm_stoc.html - if [ -f $(PREVDOCS)scm_toc.html ]; \ - then hitch $(PREVDOCS)scm_\*.html scm_\*.html $(htmldir); \ - else cp scm_*.html $(htmldir); fi -$(htmldir)Xlibscm_toc.html: Makefile version.txi Xlibscm.texi - ${TEXI2HTML} Xlibscm.texi - -rm -f Xlibscm_stoc.html - chpat '</HEAD>' '<LINK REL="icon" HREF="Logo/SCM.ico">\ -<LINK REL="shortcut icon" HREF="Logo/SCM.ico">\ -</HEAD>' Xlibscm_*.html - cp Xlibscm_*.html $(htmldir) -$(htmldir)hobbit_toc.html: Makefile version.txi hobbit.texi - ${TEXI2HTML} hobbit.texi - -rm -f hobbit_stoc.html - chpat '</HEAD>' '<LINK REL="icon" HREF="Logo/SCM.ico">\ -<LINK REL="shortcut icon" HREF="Logo/SCM.ico">\ -</HEAD>' hobbit_*.html - cp hobbit_*.html $(htmldir) - -prevdocs: $(PREVDOCS)scm_toc.html $(PREVDOCS)scm.info -$(PREVDOCS)scm_toc.html: -$(PREVDOCS)scm.info: Makefile - cd $(PREVDOCS); unzip -a $(dest)scm*.zip - rm $(PREVDOCS)scm/scm.info - cd $(PREVDOCS)scm; make scm.info; make scm_toc.html - cd $(PREVDOCS); mv -f scm/scm.info scm/*.html ./ - rm -rf $(PREVDOCS)scm - -rm -f scm-$(VERSION).info - -################ INSTALL DEFINITIONS ################ - -rpm_prefix=$(HOME)/rpmbuild/ - -prefix = /usr/local/ -exec_prefix = $(prefix) -# directory where `make install' will put executable. -bindir = $(exec_prefix)bin/ -libdir = $(exec_prefix)lib/ -libscmdir = $(libdir)scm/ -# directory where `make install' will put manual page. -man1dir = $(prefix)man/man1/ -infodir = $(prefix)info/ -includedir = $(prefix)include/ - -README: build build.scm scm.info - $(SCMEXE) -l build -e"(make-readme)" - -platform.txi: build.scm - $(SCMLIT) -r database-browse -l build.scm -e "(browse build 'platform)" \ - > platform.txi -features.txi: build build.scm - $(SCMLIT) -l build -e"(make-features-txi)" -scm.info: $(texifiles) - makeinfo scm.texi --no-split -o scm.info - mv scm.info scm-$(VERSION).info - if [ -f $(PREVDOCS)scm.info ]; \ - then infobar $(PREVDOCS)scm.info scm-$(VERSION).info scm.info; \ - else cp scm-$(VERSION).info scm.info; fi -$(DESTDIR)$(infodir)scm.info: scm.info - mkdir -p $(DESTDIR)$(infodir) - cp -p scm.info $(DESTDIR)$(infodir)scm.info - -install-info $(DESTDIR)$(infodir)scm.info $(DESTDIR)$(infodir)dir - -rm $(DESTDIR)$(infodir)scm.info.gz - -Xlibscm.info: version.txi Xlibscm.texi - makeinfo Xlibscm.texi --no-split -o Xlibscm.info -$(DESTDIR)$(infodir)Xlibscm.info: Xlibscm.info - mkdir -p $(DESTDIR)$(infodir) - cp Xlibscm.info $(DESTDIR)$(infodir)Xlibscm.info - -install-info $(DESTDIR)$(infodir)Xlibscm.info $(DESTDIR)$(infodir)dir - -rm $(DESTDIR)$(infodir)Xlibscm.info*.gz - -hobbit.info: version.txi hobbit.texi - makeinfo hobbit.texi --no-split -o hobbit.info -$(DESTDIR)$(infodir)hobbit.info: hobbit.info - mkdir -p $(DESTDIR)$(infodir) - cp hobbit.info $(DESTDIR)$(infodir)hobbit.info - -install-info $(DESTDIR)$(infodir)hobbit.info $(DESTDIR)$(infodir)dir - -rm $(DESTDIR)$(infodir)hobbit.info*.gz - -info: installinfo -installinfo: $(DESTDIR)$(infodir)scm.info $(DESTDIR)$(infodir)Xlibscm.info $(DESTDIR)$(infodir)hobbit.info - -infoz: installinfoz -installinfoz: $(DESTDIR)$(infodir)scm.info.gz $(DESTDIR)$(infodir)Xlibscm.info.gz $(DESTDIR)$(infodir)hobbit.info.gz -$(DESTDIR)$(infodir)scm.info.gz: $(DESTDIR)$(infodir)scm.info - gzip -f $(DESTDIR)$(infodir)scm.info -$(DESTDIR)$(infodir)Xlibscm.info.gz: $(DESTDIR)$(infodir)Xlibscm.info - gzip -f $(DESTDIR)$(infodir)Xlibscm.info -$(DESTDIR)$(infodir)hobbit.info.gz: $(DESTDIR)$(infodir)hobbit.info - gzip -f $(DESTDIR)$(infodir)hobbit.info - -lsdfiles = $(ifiles) $(hobfiles) COPYING COPYING.LESSER r4rstest.scm \ - build build.scm mkimpcat.scm $(SHOBJS) patchlvl.h \ - Iedline.scm $(xafiles) db.so wbtab.scm rwb-isam.scm - -install: scm.1 - mkdir -p $(DESTDIR)$(bindir) - mkdir -p $(DESTDIR)$(man1dir) - -cp scm scmlit $(DESTDIR)$(bindir) - -strip $(DESTDIR)$(bindir)scmlit - -cp scm.1 $(DESTDIR)$(man1dir) - mkdir -p $(DESTDIR)$(libscmdir) - test -f $(DESTDIR)$(libscmdir)require.scm || \ - cp requires.scm $(DESTDIR)$(libscmdir)require.scm - -cp $(lsdfiles) $(DESTDIR)$(libscmdir) - -installlib: - mkdir -p $(DESTDIR)$(includedir) - cp scm.h scmfig.h scmflags.h $(DESTDIR)$(includedir) - mkdir -p $(DESTDIR)$(libdir) - cp libscm.a $(DESTDIR)$(libdir)libscm.a - -uninstall: - -rm $(DESTDIR)$(bindir)scm $(DESTDIR)$(bindir)scmlit - -rm $(DESTDIR)$(man1dir)scm.1 - -rm $(DESTDIR)$(includedir)scm.h $(DESTDIR)$(includedir)scmfig.h $(DESTDIR)$(includedir)scmflags.h - -rm $(DESTDIR)$(libdir)libscm.a - -(cd $(DESTDIR)$(libscmdir); rm $(lsdfiles) require.scm) - -uninstallinfo: - -rm $(DESTDIR)$(infodir)scm.info.gz $(DESTDIR)$(infodir)Xlibscm.info.gz\ - $(DESTDIR)$(infodir)hobbit.info.gz - -scm.doc: scm.1 - nroff -man $< | ul -tunknown >$@ - -docs: $(DESTDIR)$(infodir)scm.info.gz $(htmldir)scm_toc.html scm.doc \ - scm.dvi Xlibscm.dvi hobbit.dvi \ - $(htmldir)scm.pdf $(htmldir)Xlibscm.pdf $(htmldir)hobbit.pdf - xdvi -s 4 scm.dvi - -winscm5.opt: - echo "-F arrays array-for-each byte i/o-extensions" >> winscm5.opt - echo "-F bignums inexact engineering-notation" >> winscm5.opt - echo "-F cautious rev2-procedures macro" >> winscm5.opt - echo "-F wb" >> winscm5.opt -gw32scmwb.sh: winscm5.opt build.scm Makefile version.txi scmlit - ./build -p gnu-win32 -f winscm5.opt -w gw32scmwb.sh -scm.exe: gw32scmwb.sh - ./gw32scmwb.sh - -hobbit.html: hobbit.texi - makeinfo --html --no-split --no-warn hobbit.texi -scm.html: $(texifiles) - makeinfo --html --no-split --no-warn --force scm.texi - -## to build a windows installer -## make sure makeinfo and NSIS are available on the commandline -w32install: scm.exe hobbit.html scm.html - makensis scm.nsi - -#### Stuff for maintaining SCM below #### - -ver = $(VERSION) -version.txi: patchlvl.h - echo @set SCMVERSION $(ver) > version.txi - echo @set SCMDATE `date +"%B %Y"` >> version.txi - -RM_R = rm -rf - -confiles = scmconfig.h.in mkinstalldirs acconfig-1.5.h install-sh \ - configure configure.in Makefile.in COPYING COPYING.LESSER \ - README.unix - -tfiles = r4rstest.scm example.scm pi.scm pi.c split.scm bench.scm \ - syntest2.scm syntest1.scm -texifiles = version.txi scm.texi fdl.texi indexes.texi platform.txi features.txi -dfiles = ANNOUNCE README COPYING COPYING.LESSER scm.1 scm.doc QUICKREF \ - $(texifiles) scm.info Xlibscm.info Xlibscm.texi \ - hobbit.info hobbit.texi ChangeLog -mfiles = Makefile build.scm build build.bat requires.scm \ - .gdbinit mkimpcat.scm disarm.scm scm.spec scm.nsi -sfiles = setjump.mar setjump.s ugsetjump.s continue-ia64.S \ - get-contoffset-ia64.c -wbfiles = wbtab.scm rwb-isam.scm -afiles = $(dfiles) $(cfiles) $(hfiles) $(ifiles) $(tfiles) $(mfiles) \ - $(hobfiles) $(sfiles) $(ufiles) $(xfiles) $(turfiles) $(wbfiles) - -makedev = make -f $(HOME)/makefile.dev -CHPAT=$(HOME)/bin/chpat -RSYNC=rsync -bav -UPLOADEE=swissnet_upload -dest = $(HOME)/dist/ -DOSCM = /c/Voluntocracy/dist/ - -temp/scm: $(afiles) - -$(RM_R) temp - mkdir -p temp/scm - ln $(afiles) temp/scm - -release: dist pdf # rpm - cvs tag -F scm-$(VERSION) - cp ANNOUNCE $(htmldir)SCM_ANNOUNCE.txt - $(RSYNC) $(htmldir)SCM.html $(htmldir)SCM_ANNOUNCE.txt $(UPLOADEE):public_html/ - $(RSYNC) $(dest)README $(dest)scm-$(VERSION).zip \ - $(dest)scm-$(VERSION)-$(RELEASE).src.rpm $(dest)scm-$(VERSION)-$(RELEASE).i386.rpm \ - $(htmldir)hobbit.pdf $(htmldir)Xlibscm.pdf $(UPLOADEE):dist/ -# upload $(dest)README $(dest)scm-$(VERSION).zip ftp.gnu.org:gnu/jacal/ - -upzip: $(HOME)/pub/scm.zip - $(RSYNC) $(HOME)/pub/scm.zip $(UPLOADEE):pub/ - $(RSYNC) r4rstest.scm $(HOME)/dist/ - $(RSYNC) r4rstest.scm $(UPLOADEE):dist/ - -dist: $(dest)scm-$(VERSION).zip -$(dest)scm-$(VERSION).zip: temp/scm - $(makedev) DEST=$(dest) PROD=scm ver=-$(VERSION) zip - -rpm: pubzip -# $(dest)scm-$(VERSION)-$(RELEASE).i386.rpm: $(dest)scm-$(VERSION).zip - cp -f $(HOME)/pub/scm.zip $(rpm_prefix)SOURCES/scm-$(VERSION).zip - rpmbuild -ba scm.spec # --clean - rm $(rpm_prefix)SOURCES/scm-$(VERSION).zip - mv $(rpm_prefix)RPMS/i386/scm-$(VERSION)-$(RELEASE).i386.rpm \ - $(rpm_prefix)SRPMS/scm-$(VERSION)-$(RELEASE).src.rpm $(dest) - -shar: scm.shar -scm.shar: temp/scm - $(makedev) PROD=scm shar -dclshar: scm.com -com: scm.com -scm.com: temp/scm - $(makedev) PROD=scm com -zip: scm.zip -scm.zip: temp/scm - $(makedev) PROD=scm zip -doszip: $(DOSCM)scm-$(VERSION).zip -$(DOSCM)scm-$(VERSION).zip: temp/scm turtle turtlegr.c grtest.scm SCM.ico scm.html hobbit.html - $(makedev) DEST=$(DOSCM) PROD=scm ver=-$(VERSION) zip - -cd ..; zip -9ur $(DOSCM)scm-$(VERSION).zip \ - scm/turtle scm/turtlegr.c scm/grtest.scm \ - scm/SCM.ico \ - scm/scm.html scm/hobbit.html - zip -d $(DOSCM)scm-$(VERSION).zip scm/scm.info scm/Xlibscm.info scm/hobbit.info -pubzip: $(HOME)/pub/scm.zip -$(HOME)/pub/scm.zip: temp/scm - $(makedev) DEST=$(HOME)/pub/ PROD=scm zip - -diffs: pubdiffs -pubdiffs: temp/scm - $(makedev) DEST=$(HOME)/pub/ PROD=scm pubdiffs -distdiffs: temp/scm - $(makedev) DEST=$(dest) PROD=scm ver=$(ver) distdiffs - -CITERS = ANNOUNCE hobbit.texi hobbit.scm \ - ../jacal/ANNOUNCE ../jacal/jacal.texi \ - ../wb/ANNOUNCE ../wb/README ../wb/wb.texi \ - ../synch/ANNOUNCE \ - ../dist/README \ - $(DOSCM)unzipall.bat $(DOSCM)buildall \ - $(htmldir)JACAL.html $(htmldir)README.html \ - $(htmldir)SIMSYNCH.html $(htmldir)SLIB.html \ - $(htmldir)FreeSnell/ANNOUNCE $(htmldir)FreeSnell/index.html -CITES = scm.spec scm.nsi ../wb/wb.spec $(htmldir)SCM.html - -updates: Init$(ver).scm - $(CHPAT) slib-$(VERSION) slib-$(ver) $(CITERS) - $(CHPAT) $(VERSION) $(ver) $(CITES) - make README - -Init$(ver).scm: - mv -f Init$(VERSION).scm Init$(ver).scm - $(CHPAT) $(VERSION) $(ver) patchlvl.h Init$(ver).scm - -new: updates - echo `date -I` \ Aubrey Jaffer \ \<`whoami`@`hostname`\>> change - echo>> change - echo \ \* patchlvl.h \(SCMVERSION\): Bumped from $(VERSION) to $(ver).>>change - echo>> change - cat ChangeLog >> change - mv -f change ChangeLog - cvs remove Init$(VERSION).scm - cvs add Init$(ver).scm - cvs commit -m 'Init$(VERSION).scm changed to Init$(ver).scm' \ - Init$(VERSION).scm Init$(ver).scm - cvs commit -m '(SCMVERSION): Bumped from $(VERSION) to $(ver).' - cvs tag -F scm-$(ver) - -configtemp/scm: $(confiles) - -$(RM_R) configtemp/scm - -mkdir -p configtemp/scm - ln $(confiles) configtemp/scm -confdist: scmconfig.tar.gz -scmconfig.tar.gz: configtemp/scm - cd configtemp; tar cohf ../scmconfig.tar scm - chmod 664 scmconfig.tar - -rm -f scmconfig.tar.*z - gzip scmconfig.tar - chmod 664 scmconfig.tar.*z - -lint: lints -lints: $(cfiles) $(hfiles) - lint $(CPPFLAGS) $(ALL_CFLAGS) $(cfiles) | tee lints -# lint $(CPPFLAGS) $(ALL_CFLAGS) $(cfiles) | tee lintes - -#seds to help find names not unique in first 8 characters (name8s) -# for BSD nm format -SED_TO_STRIP_NM=sed -e '/.*\.o$$/d' -e 's/.* _//' -e 's/.* T //' -#old, bad for T [^_] on suns: SED_TO_STRIP_NM=sed -e '/.*\.o$$/d' -e 's/.* _//' -# For a System V nm where plain C identifiers have _ prepended: -#SED_TO_STRIP_NM=sed -e '/^_[A-Za-z][A-za-z0-9_]*[ |].*|extern|!d' -e 's/|/ /g' -e 's/^_//' -# For a System V nm where plain C identifiers have nothing prepended: -#SED_TO_STRIP_NM=sed -e '/^[A-Za-z][A-za-z0-9_]*[ |].*|extern|!d' -e 's/|/ /g' - -name8: name8s -name8s: scmlit - nm scmlit |\ - $(SED_TO_STRIP_NM) |\ - sort -u|\ - awk '{ if (substr(l,1,8)==substr($$1,1,8)) {\ - if (p) print l;\ - print $$1;p=0;stat=1\ - }else p=1;\ - l=$$1\ - }END{exit stat}' - - -ctagfiles = $(hfiles) $(cfiles) $(xfiles) -ctags: $(ctagfiles) - etags $(ctagfiles) - -TAGFILES = $(hfiles) $(cfiles) $(ifiles) $(sfiles) $(xfiles) $(mfiles)\ - $(txifiles) Xlibscm.texi hobbit.texi build hobbit.scm -# # $(ufiles) ChangeLog -TAGS: $(TAGFILES) - etags $(TAGFILES) -tags: TAGS - -mostlyclean: -clean: - -rm -f core a.out ramap.o ramap.obj $(ofiles) scmmain.o lints - -$(RM_R) *temp -distclean: clean - -rm -f $(EXECFILES) *.o *.obj a.out TAGS implcat slibcat gdbscm -realclean: distclean - -rm -f scm.doc scm.html hobbit.html scm.exe scmlit.exe scm~ SCM-*.exe -realempty: temp/scm - -rm -f $(afiles) -myclean: clean - -rm -f *~ *.bak *.orig *.rej tmp* \#* *\# diff --git a/SCM/README b/SCM/README deleted file mode 100644 index e6d4e57..0000000 --- a/SCM/README +++ /dev/null @@ -1,381 +0,0 @@ -This directory contains the distribution of scm5e5. SCM conforms to -Revised^5 Report on the Algorithmic Language Scheme and the IEEE P1178 -specification. SCM runs under Amiga, Atari-ST, MacOS, MS-DOS, OS/2, -NOS/VE, Unicos, VMS, Unix and similar systems. SCM supports the SLIB -Scheme library; both SCM and SLIB are GNU packages. - - `http://swiss.csail.mit.edu/~jaffer/SCM' - -0.1 Manifest -============ - -`.gdbinit' provides commands for debugging SCM with GDB -`COPYING' GNU GENERAL PUBLIC LICENSE -`COPYING.LESSER' GNU LESSER GENERAL PUBLIC LICENSE -`ChangeLog' changes to SCM. -`Idiffer.scm' Linear-space O(PN) sequence comparison. -`Iedline.scm' Gnu readline input editing. -`Init.scm' Scheme initialization. -`Link.scm' Dynamic link/loading. -`Macro.scm' Supports Syntax-Rules Macros. -`Makefile' builds SCMLIT using the `make' program. -`QUICKREF' Quick Reference card for R4RS and IEEE Scheme. -`README' contains a MANIFEST, INSTALLATION INSTRUCTIONS, hints - for EDITING SCHEME CODE, and a TROUBLE SHOOTING GUIDE. -`Transcen.scm' inexact builtin procedures. -`bench.scm' computes and records performance statistics of pi.scm. -`build.bat' invokes build.scm for MS-DOS -`build.scm' database for compiling and linking new SCM programs. -`byte.c' strings as bytes. -`bytenumb.c' Byte-number conversions. -`compile.scm' Hobbit compilation to C. -`continue-ia64.S'replaces make_root_continuation(), make_continuation(), - and dynthrow() in continue.c -`continue.c' continuations. -`continue.h' continuations. -`crs.c' interactive terminal control. -`debug.c' debugging, printing code. -`differ.c' Linear-space O(PN) sequence comparison. -`dynl.c' dynamically load object files. -`ecrt0.c' discover the start of initialized data space - dynamically at runtime. -`edline.c' Gnu readline input editing (get - ftp.sys.toronto.edu:/pub/rc/editline.shar). -`eval.c' evaluator, apply, map, and foreach. -`example.scm' example from R4RS which uses inexact numbers. -`fdl.texi' GNU Free Documentation License. -`findexec.c' find the executable file function. -`get-contoffset-ia64.c'makes contoffset-ia64.S for inclusion by continue-ia64.S -`gmalloc.c' Gnu malloc(); used for unexec. -`gsubr.c' make_gsubr for arbitrary (< 11) arguments to C - functions. -`ioext.c' system calls in common between PC compilers and unix. -`lastfile.c' find the point in data space between data and libraries. -`macos-config.h' Included by unexmacosx.c and lastfile.c. -`mkimpcat.scm' build SCM-specific catalog for SLIB. -`patchlvl.h' patchlevel of this release. -`pi.c' computes digits of pi [cc -o pi pi.c;time pi 100 5]. -`pi.scm' computes digits of pi [type (pi 100 5)]. Test - performance against pi.c. -`posix.c' posix library interface. -`pre-crt0.c' loaded before crt0.o on machines which do not remap - part of the data space into text space in unexec. -`r4rstest.scm' tests conformance with Scheme specifications. -`ramap.c' array mapping -`record.c' proposed `Record' user definable datatypes. -`repl.c' error, read-eval-print loop, read, write and load. -`rgx.c' string regular expression match. -`rope.c' C interface functions. -`sc2.c' procedures from R2RS and R3RS not in R4RS. -`scl.c' inexact arithmetic -`scm.1' unix style man page. -`scm.c' initialization, interrupts, and non-IEEE utility - functions. -`scm.doc' man page generated from scm.1. -`scm.h' data type and external definitions of SCM. -`scm.texi' SCM installation and use. -`scmfig.h' contains system dependent definitions. -`scmmain.c' initialization, interrupts, and non-IEEE utility - functions. -`script.c' utilities for running as `#!' script. -`setjump.h' continuations, stacks, and memory allocation. -`setjump.mar' provides setjump and longjump which do not use $unwind - utility on VMS. -`setjump.s' provides setjump and longjump for the Cray YMP. -`socket.c' BSD socket interface. -`split.scm' example use of crs.c. Input, output, and diagnostic - output directed to separate windows. -`subr.c' the rest of IEEE functions. -`sys.c' call-with-current-continuation, opening and closing - files, storage allocation and garbage collection. -`time.c' functions dealing with time. -`ugsetjump.s' provides setjump and longjump which work on Ultrix VAX. -`unexalpha.c' Convert a running program into an Alpha executable file. -`unexec.c' Convert a running program into an executable file. -`unexelf.c' Convert a running ELF program into an executable file. -`unexhp9k800.c' Convert a running HP-UX program into an executable file. -`unexmacosx.c' Convert a running program into an executable file under - MacOS X. -`unexsgi.c' Convert a running program into an IRIX executable file. -`unexsunos4.c' Convert a running program into an executable file. -`unif.c' uniform vectors. -`unix.c' non-posix system calls on unix systems. - - - -File: scm.info, Node: SLIB, Next: Building SCM, Prev: Making SCM, Up: Installing SCM - -2.2 SLIB -======== - -[SLIB] is a portable Scheme library meant to provide compatibility and -utility functions for all standard Scheme implementations. Although -SLIB is not _neccessary_ to run SCM, I strongly suggest you obtain and -install it. Bug reports about running SCM without SLIB have very low -priority. SLIB is available from the same sites as SCM: - - * swiss.csail.mit.edu:/pub/scm/slib-3b1.tar.gz - - * ftp.gnu.org:/pub/gnu/jacal/slib-3b1.tar.gz - -Unpack SLIB (`tar xzf slib-3b1.tar.gz' or `unzip -ao slib-3b1.zip') in -an appropriate directory for your system; both `tar' and `unzip' will -create the directory `slib'. - -Then create a file `require.scm' in the SCM "implementation-vicinity" -(this is the same directory as where the file `Init5e5.scm' is -installed). `require.scm' should have the contents: - - (define (library-vicinity) "/usr/local/lib/slib/") - -where the pathname string `/usr/local/lib/slib/' is to be replaced by -the pathname into which you installed SLIB. Absolute pathnames are -recommended here; if you use a relative pathname, SLIB can get confused -when the working directory is changed (*note chmod: I/O-Extensions.). -The way to specify a relative pathname is to append it to the -implementation-vicinity, which is absolute: - - (define library-vicinity - (let ((lv (string-append (implementation-vicinity) "../slib/"))) - (lambda () lv))) - -Alternatively, you can set the (shell) environment variable -`SCHEME_LIBRARY_PATH' to the pathname of the SLIB directory (*note -SCHEME_LIBRARY_PATH: SCM Variables.). If set, the environment variable -overrides `require.scm'. Again, absolute pathnames are recommended. - - - -File: scm.info, Node: Making SCM, Next: SLIB, Prev: Installing SCM, Up: Installing SCM - -2.1 Making SCM -============== - -The SCM distribution has "Makefile" which contains rules for making -"scmlit", a "bare-bones" version of SCM sufficient for running `build'. -`build' is used to compile (or create scripts to compile) full -featured versions (*note Building SCM::). - -Makefiles are not portable to the majority of platforms. If `Makefile' -works for you, good; If not, I don't want to hear about it. If you -need to compile SCM without build, there are several ways to proceed: - - * Use the build (http://swiss.csail.mit.edu/~jaffer/buildscm.html) - web page to create custom batch scripts for compiling SCM. - - * Use SCM on a different platform to run `build' to create a script - to build SCM; - - * Use another implementation of Scheme to run `build' to create a - script to build SCM; - - * Create your own script or `Makefile'. - - - -File: scm.info, Node: Editing Scheme Code, Next: Debugging Scheme Code, Prev: SCM Session, Up: Operational Features - -3.7 Editing Scheme Code -======================= - - -- Function: ed arg1 ... - The value of the environment variable `EDITOR' (or just `ed' if it - isn't defined) is invoked as a command with arguments ARG1 .... - - -- Function: ed filename - If SCM is compiled under VMS `ed' will invoke the editor with a - single the single argument FILENAME. - -Gnu Emacs: - Editing of Scheme code is supported by emacs. Buffers holding - files ending in .scm are automatically put into scheme-mode. - - If your Emacs can run a process in a buffer you can use the Emacs - command `M-x run-scheme' with SCM. Otherwise, use the emacs - command `M-x suspend-emacs'; or see "other systems" below. - -Epsilon (MS-DOS): - There is lisp (and scheme) mode available by use of the package - `LISP.E'. It offers several different indentation formats. With - this package, buffers holding files ending in `.L', `.LSP', `.S', - and `.SCM' (my modification) are automatically put into lisp-mode. - - It is possible to run a process in a buffer under Epsilon. With - Epsilon 5.0 the command line options `-e512 -m0' are neccessary to - manage RAM properly. It has been reported that when compiling SCM - with Turbo C, you need to `#define NOSETBUF' for proper operation - in a process buffer with Epsilon 5.0. - - One can also call out to an editor from SCM if RAM is at a - premium; See "under other systems" below. - -other systems: - Define the environment variable `EDITOR' to be the name of the - editing program you use. The SCM procedure `(ed arg1 ...)' will - invoke your editor and return to SCM when you exit the editor. The - following definition is convenient: - - (define (e) (ed "work.scm") (load "work.scm")) - - Typing `(e)' will invoke the editor with the file of interest. - After editing, the modified file will be loaded. - - - -File: scm.info, Node: Problems Compiling, Next: Problems Linking, Prev: Automatic C Preprocessor Definitions, Up: Installing SCM - -2.8 Problems Compiling -====================== - -FILE PROBLEM / MESSAGE HOW TO FIX -*.c include file not found. Correct the status of - STDC_HEADERS in scmfig.h. - fix #include statement or add - #define for system type to - scmfig.h. -*.c Function should return a value. Ignore. - Parameter is never used. - Condition is always false. - Unreachable code in function. -scm.c assignment between incompatible Change SIGRETTYPE in scm.c. - types. -time.c CLK_TCK redefined. incompatablility between - <stdlib.h> and <sys/types.h>. - Remove STDC_HEADERS in scmfig.h. - Edit <sys/types.h> to remove - incompatability. -subr.c Possibly incorrect assignment Ignore. - in function lgcd. -sys.c statement not reached. Ignore. - constant in conditional - expression. -sys.c undeclared, outside of #undef STDC_HEADERS in scmfig.h. - functions. -scl.c syntax error. #define SYSTNAME to your system - type in scl.c (softtype). - - - -File: scm.info, Node: Problems Linking, Next: Problems Running, Prev: Problems Compiling, Up: Installing SCM - -2.9 Problems Linking -==================== - -PROBLEM HOW TO FIX -_sin etc. missing. Uncomment LIBS in makefile. - - - -File: scm.info, Node: Problems Running, Next: Testing, Prev: Problems Linking, Up: Installing SCM - -2.10 Problems Running -===================== - -PROBLEM HOW TO FIX -Opening message and then machine Change memory model option to C -crashes. compiler (or makefile). - Make sure sizet definition is - correct in scmfig.h. - Reduce the size of HEAP_SEG_SIZE in - setjump.h. -Input hangs. #define NOSETBUF -ERROR: heap: need larger initial. Increase initial heap allocation - using -a<kb> or INIT_HEAP_SIZE. -ERROR: Could not allocate. Check sizet definition. - Use 32 bit compiler mode. - Don't try to run as subproccess. -remove <FLAG> in scmfig.h and Do so and recompile files. -recompile scm. -add <FLAG> in scmfig.h and -recompile scm. -ERROR: Init5e5.scm not found. Assign correct IMPLINIT in makefile - or scmfig.h. - Define environment variable - SCM_INIT_PATH to be the full - pathname of Init5e5.scm. -WARNING: require.scm not found. Define environment variable - SCHEME_LIBRARY_PATH to be the full - pathname of the scheme library - [SLIB]. - Change library-vicinity in - Init5e5.scm to point to library or - remove. - Make sure the value of - (library-vicinity) has a trailing - file separator (like / or \). - - - -File: scm.info, Node: Testing, Next: Reporting Problems, Prev: Problems Running, Up: Installing SCM - -2.11 Testing -============ - -Loading `r4rstest.scm' in the distribution will run an [R4RS] -conformance test on `scm'. - - > (load "r4rstest.scm") - -| - ;loading "r4rstest.scm" - SECTION(2 1) - SECTION(3 4) - #<primitive-procedure boolean?> - #<primitive-procedure char?> - #<primitive-procedure null?> - #<primitive-procedure number?> - ... - -Loading `pi.scm' in the distribution will enable you to compute digits -of pi. - - > (load "pi") - ;loading "pi" - ;done loading "pi.scm" - ;Evaluation took 20 ms (0 in gc) 767 cells work, 233.B other - #<unspecified> - > (pi 100 5) - 00003 14159 26535 89793 23846 26433 83279 50288 41971 69399 - 37510 58209 74944 59230 78164 06286 20899 86280 34825 34211 - 70679 - ;Evaluation took 550 ms (60 in gc) 36976 cells work, 1548.B other - #<unspecified> - -Loading `bench.scm' will compute and display performance statistics of -SCM running `pi.scm'. `make bench' or `make benchlit' appends the -performance report to the file `BenchLog', facilitating tracking -effects of changes to SCM on performance. - -PROBLEM HOW TO FIX -Runs some and then machine crashes. See above under machine crashes. -Runs some and then ERROR: ... Remove optimization option to C -(after a GC has happened). compiler and recompile. - #define SHORT_ALIGN in `scmfig.h'. -Some symbol names print incorrectly. Change memory model option to C - compiler (or makefile). - Check that HEAP_SEG_SIZE fits - within sizet. - Increase size of HEAP_SEG_SIZE (or - INIT_HEAP_SIZE if it is smaller - than HEAP_SEG_SIZE). -ERROR: Rogue pointer in Heap. See above under machine crashes. -Newlines don't appear correctly in Check file mode (define OPEN_... in -output files. `Init5e5.scm'). -Spaces or control characters appear Check character defines in -in symbol names. `scmfig.h'. -Negative numbers turn positive. Check SRS in `scmfig.h'. -;ERROR: bignum: numerical overflow Increase NUMDIGS_MAX in `scmfig.h' - and recompile. -VMS: Couldn't unwind stack. #define CHEAP_CONTINUATIONS in - `scmfig.h'. -VAX: botched longjmp. - -Sparc(SUN-4) heap is growing out of control - You are experiencing a GC problem peculiar to the Sparc. The - problem is that SCM doesn't know how to clear register windows. - Every location which is not reused still gets marked at GC time. - This causes lots of stuff which should be collected to not be. - This will be a problem with any _conservative_ GC until we find - what instruction will clear the register windows. This problem is - exacerbated by using lots of call-with-current-continuations. A - possible fix for dynthrow() is commented out in `continue.c'. - diff --git a/SCM/continue-ia64.S b/SCM/continue-ia64.S deleted file mode 100644 index ba61e38..0000000 --- a/SCM/continue-ia64.S +++ /dev/null @@ -1,339 +0,0 @@ -/* "continue-ia64.S" continuation support for ia64. - * Copyright (C) 2006 Free Software Foundation, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/>. - */ - -/* Author: Richard E. Harke */ - -/* -struct Continuation {jump_buf jmpbuf; - long thrwval; - long length; - STACKITEM *stkbse; -#ifdef __ia64__ - long *bspbse; - long bsplength; - long rnat; -#endif - CONTINUATION_OTHER other; - struct Continuation *parent; - }; -*/ -/* Define offsets for elements of a Continuation structure */ -#include "contoffset-ia64.S" - - - .global must_malloc - .text - .align 32 - .global make_root_continuation - .proc make_root_continuation -make_root_continuation: - .prologue - .save ar.pfs,r33 - alloc r33 = ar.pfs,1,3,2,0 - .save rp,r34 - mov r34 = b0 - .body - addl r14 = @ltoffx(s_call_cc), r1 - mov out0 = cont_size - mov loc2 = gp - ;; - ld8.mov r14 = [r14], s_call_cc - ;; - adds out1 = 18, r14 - ;; - br.call.sptk.many b0=must_malloc - ;; - mov gp = r35 - cmp.eq p6,p0 = r8,r0 - adds r14 = stkbse_off,r8 - adds r15 = bspbse_off,r8 - (p6) br.cond.dpnt mrcexit - ;; - flushrs - st8 [r14] = r12 - ;; - mov r31 = ar.bsp - ;; - adds r14 = length_off,r8 - st8 [r15] = r31 - adds r16 = bsplength_off,r8 - ;; - st8 [r14] = r0 - st8 [r16] = r0 - adds r15 = parent_off,r8 - ;; - st8 [r15] = r8 -mrcexit: - mov ar.pfs = r33 - mov b0 = r34 - ;; - br.ret.sptk.many b0 - .endp make_root_continuation - - /* - register usage - r32 - r39 used in modulo loop (requires multiple of 8) - r40 save r32 from input - r41 save return - b0 - r42 ar.pfs - r43 save gp (r1) - r44 ar.bsp - r45 out0 - r46 out1 - */ - .global make_continuation - .proc make_continuation -make_continuation: - .prologue - .save ar.pfs, r42 - alloc r42 = ar.pfs, 1,12, 2, 8 - mov r43 = r1 - .save rp, r41 - mov r41 = b0 - mov r40 = r32 - ;; - .body - adds r14 = bspbse_off,r40 - adds r17 = stkbse_off,r40 - ;; - mov r44 = ar.bsp - ld8 r15 = [r14] // bspbse from parent - ld8 r18 = [r17] // stkbse from parent - ;; - sub r16 = r44,r15 // length of bsp to save - sub r19 = r18,r12 // length of stack to save - addl r15 = @ltoffx(s_call_cc), r1 - ;; - add r45 = r16,r19 // bsp len plus stack len - ld8.mov r14 = [r15], s_call_cc - ;; - adds r14 = 18, r14 - adds r45 = cont_size, r45 // add in length of continuation struct - ;; - mov r46 = r14 - br.call.sptk.many b0 = must_malloc - mov r1 = r43 - cmp.eq p6, p7 = 0, r8 - (p6) br.cond.dptk .L5 - ;; -.L1: - flushrs - adds r14 = bspbse_off,r40 - adds r17 = stkbse_off,r40 - ;; - mov r31 = ar.rsc - ld8 r15 = [r14] // bsp in parent - ld8 r18 = [r17] // stack base in parent - ;; - and r30 = ~0x3,r31 - sub r16 = r44,r15 // length of bsp to save - sub r19 = r18,r12 // length of stack to save - ;; - mov ar.rsc = r30 // set enforced idle - shr r16 = r16,3 // number of longs not bytes - adds r21 = length_off,r8 - adds r22 = bsplength_off,r8 - shr r19 = r19,3 // number of longs not bytes - ;; - mov r30 = ar.rnat - add r20 = r16,r19 // total length to save - st8 [r22] = r16 // store the bsp length - adds r14 = bspbse_off,r8 - adds r17 = stkbse_off,r8 - ;; - st8 [r14] = r44 // save current bsp - st8 [r17] = r18 // stkbse same as parent stkbse - adds r22 = parent_off,r8 - st8 [r21] = r20 // store the length - ;; - adds r21 = rnat_off,r8 - st8 [r22] = r40 // store parent continuation - mov r29 = ar.lc // need to preserve ar.lc - mov r28 = pr // need to preserve pr.rot - adds r16 = -1,r16 - ;; - st8 [r21] = r30 // store rnat's - mov ar.lc = r16 - mov ar.ec = 3 - mov pr.rot = 0x10000 - adds r27 = cont_size,r8 - adds r19 = -1,r19 - ;; -.L6: - (p16) ld8 r32 = [r15],8 - (p18) st8 [r27] = r34,8 - br.ctop.sptk.few .L6 - ;; - mov r26 = r12 - clrrrb - ;; - mov ar.ec = 3 - mov pr.rot = 0x10000 - mov ar.lc = r19 - ;; -.L7: - (p16) ld8 r32 = [r26],8 - (p18) st8 [r27] = r34,8 - br.ctop.sptk.few .L7 - ;; - mov ar.lc = r29 // restore ar.lc - mov pr = r28,0x1003e // restore pr - mov ar.rsc = r31 // restore ar.rsc - ;; -.L5: - mov ar.pfs = r42 - mov b0 = r41 - br.ret.sptk.many b0 - .endp make_continuation - - - .global thrown_value - .global longjmp - .global dynthrow - .proc dynthrow -dynthrow: - .prologue - .save ar.pfs, r42 - alloc r42 = ar.pfs, 1,12, 2, 8 - mov r43 = r1 - .save rp, r44 - mov r44 = b0 - ld8 r40 = [r32],8 - mov r31 = ar.rsc - movl r2 = ~0x3fff0003 - ;; -.L3: - flushrs - adds r14 = bspbse_off,r40 - adds r17 = stkbse_off,r40 - and r30 = r2,r31 - ;; - ld8 r41 = [r32] - ld8 r15 = [r14] // bsp - ld8 r18 = [r17] // stack base - mov ar.rsc = r30 // set enforced idle - ;; -.L2: - loadrs - adds r21 = length_off,r40 - adds r22 = bsplength_off,r40 - ;; - mov ar.bspstore = r15 - ld8 r16 = [r21] // get total length (number of longs) - ld8 r17 = [r22] // get bsp length (number of longs) - ;; - sub r20 = r16,r17 // compute stack length - shl r25 = r17,3 - ;; - mov r29 = ar.lc // need to preserve ar.lc - mov r28 = pr // need to preserve pr.rot - sub r15 = r15,r25 // adjust bsp beginning - shl r14 = r20,3 - adds r17 = -1,r17 - adds r21 = rnat_off,r40 - ;; - sub r18 = r18,r14 // adjust stack to lowest - mov ar.lc = r17 - mov ar.ec = 3 - mov pr.rot = 0x10000 - adds r27 = cont_size,r40 - adds r20 = -1,r20 - ;; -.L8: - (p16) ld8 r32 = [r27],8 - (p18) st8 [r15] = r34,8 - br.ctop.sptk.few .L8 - ;; - ld8 r14 = [r21] // get the rnat's - clrrrb - ;; - mov ar.ec = 3 - mov pr.rot = 0x10000 - mov ar.lc = r20 - ;; -.L9: - (p16) ld8 r32 = [r27],8 - (p18) st8 [r18] = r34,8 - br.ctop.sptk.few .L9 - ;; - mov ar.rnat = r14 - mov ar.lc = r29 // restore ar.lc - mov pr = r28,0x1003e // restore pr - addl r26 = @gprel(thrown_value),gp - ;; - mov ar.rsc = r31 // restore ar.rsc - st8 [r26] = r41 - mov r45 = r40 - mov r46 = 1 - ;; - br.call.sptk.many b0 = longjmp -// the following should not be executed - mov r1 = r43 - mov ar.pfs = r42 - mov b0 = r44 - br.ret.sptk.many b0 - .endp dynthrow - - .global mark_locations - .global mark_regs_ia64 - .proc mark_regs_ia64 -mark_regs_ia64: - .prologue - .save ar.pfs, r35 - alloc r35 = ar.pfs, 1, 4, 2, 0 - .save rp, r33 - mov r33 = b0 - mov r36 = r1 - mov r34 = r12 - adds r17 = stkbse_off, r32 - ;; - adds r12 = -32, r12 - ld8 r19 = [r17] - ;; - adds r18 = 16,r12 - ;; - sub r38 = r19, r18 - ;; - st8 [r18] = r4, 8 - shr r38 = r38, 3 - ;; - st8 [r18] = r5, 8 - ;; - st8 [r18] = r6, 8 - ;; - st8 [r18] = r7 - mov r37 = r12 - br.call.sptk.many b0 = mark_locations - flushrs - mov r1 = r36 - adds r17 = bspbse_off, r32 - ;; - mov r20 = ar.bsp - ;; - ld8 r37 = [r17] - ;; - sub r38 = r20, r37 - ;; - shr r38 = r38, 3 - br.call.sptk.many b0 = mark_locations - mov r1 = r36 - mov r12 = r34 - mov ar.pfs = r35 - mov b0 = r33 - br.ret.sptk.many b0 - .endp mark_regs_ia64 diff --git a/SCM/continue.c b/SCM/continue.c deleted file mode 100644 index 1f8c6de..0000000 --- a/SCM/continue.c +++ /dev/null @@ -1,242 +0,0 @@ -/* "continue.c" Scheme Continuations for C. - * Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1997 Free Software Foundation, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/>. - */ - -/* Author: Aubrey Jaffer */ - -/* "setjump.h" contains definitions for the `other' field (type - CONTINUATION_OTHER) the struct Continuation. "setjump.h" must - #include "continue.h". CONTINUATION_OTHER defaults to `long' */ - -#define IN_CONTINUE_C -#ifdef USE_CONTINUE_H -# include "continue.h" -#else -# include "setjump.h" -#endif - -/* For platforms with short integers, we use thrown_value instead of - the value returned from setjump so that any (long) value can be - returned. */ - -#ifdef SHORT_INT -long thrown_value; -#endif - -/* stack_size() returns the number of units of size STACKITEM which - fit between @var{start} and the current top of stack. No check is - done in this routine to ensure that @var{start} is actually in the - current stack segment. */ - -long stack_size(start) - STACKITEM *start; -{ - STACKITEM stack; -#ifdef STACK_GROWS_UP - return &stack - start; -#else - return start - &stack; -#endif /* def STACK_GROWS_UP */ -} - -/* make_root_continuation() allocates (malloc) storage for a - CONTINUATION near the current extent of stack. This newly - allocated CONTINUATION is returned if successful, 0 if not. After - make_root_continuation() returns, the calling routine still needs - to `setjump(new_continuation->jmpbuf)' in order to complete the - capture of this continuation. */ - -#ifndef __ia64__ -CONTINUATION *make_root_continuation(stack_base) - STACKITEM *stack_base; -{ - CONTINUATION *cont; - cont = (CONTINUATION *)malloc(sizeof(CONTINUATION)); - if (!cont) return 0; - cont->length = 0; - cont->stkbse = stack_base; - cont->parent = cont; - return cont; -} - -/* make_continuation() allocates storage for the current continuation, - copying (or encapsulating) the stack state from parent_cont->stkbse - to the current top of stack. The newly allocated CONTINUATION is - returned if successful, 0 if not. After make_continuation() - returns, the calling routine still needs to - `setjump(new_continuation->jmpbuf)' in order to complete the capture - of this continuation. */ - -/* Note: allocating local (stack) storage for the CONTINUATION would - not work; Think about it. */ - -CONTINUATION *make_continuation(parent_cont) - CONTINUATION *parent_cont; -{ - CONTINUATION *cont; -# ifdef CHEAP_CONTINUATIONS - cont = (CONTINUATION *)malloc(sizeof(CONTINUATION)); - if (!cont) return 0; - cont->length = 0; - cont->stkbse = parent_cont->stkbse; -# else - long j; - register STACKITEM *src, *dst; - FLUSH_REGISTER_WINDOWS; - j = stack_size(parent_cont->stkbse); - cont = (CONTINUATION *)malloc((sizeof(CONTINUATION) + j*sizeof(STACKITEM))); - if (!cont) return 0; - cont->length = j; - cont->stkbse = parent_cont->stkbse; - src = cont->stkbse; -# ifdef STACK_GROWS_UP - src += parent_cont->length; -# else - src -= parent_cont->length + cont->length; -# endif/* ndef STACK_GROWS_UP */ - dst = (STACKITEM *)(cont + 1); - for (j = cont->length; 0 <= --j; ) *dst++ = *src++; -# endif /* ndef CHEAP_CONTINUATIONS */ - cont->parent = parent_cont; - return cont; -} -#endif - -/* free_continuation() is trivial, but who knows what the future - holds. */ - -void free_continuation(cont) - CONTINUATION *cont; -{ - free(cont); -} - -/* Final routine involved in throw()ing to a continuation. After - ensuring that there is sufficient room on the stack for the saved - continuation, dynthrow() copies the continuation onto the stack and - longjump()s into it. The routine does not return. */ - -/* If you use conservative GC and your Sparc(SUN-4) heap is growing - out of control: - - You are experiencing a GC problem peculiar to the Sparc. The - problem is that SCM doesn't know how to clear register windows. - Every location which is not reused still gets marked at GC time. - This causes lots of stuff which should be collected to not be. - This will be a problem with any *conservative* GC until we find - what instruction will clear the register windows. This problem is - exacerbated by using lots of make-CONTINUATION. - - Possibly adding the following before the thrown_value = val; line - might help to clear out unused stack above the continuation (a - small part of the problem). - -#ifdef sparc - bzero((void *)&a, sizeof(STACKITEM) * - (((STACKITEM *)&a) - (dst - cont->length))) -#endif - - Let me know if you try it. */ - -/* SCM_GROWTH is how many `long's to grow the stack by when we need room. */ -#define SCM_GROWTH 100 - -#ifndef __ia64__ -void dynthrow(a) - long *a; -{ - register CONTINUATION *cont = (CONTINUATION *)(a[0]); - long val = a[1]; -# ifndef CHEAP_CONTINUATIONS - register long j; - register STACKITEM *src, *dst = cont->stkbse; -# ifdef STACK_GROWS_UP -# ifndef hpux - if (a[2] && (a - ((long *)a[3]) < SCM_GROWTH)) - puts("grow_throw: check if long growth[]; being optimized out"); -# endif - /* if (a[2]) fprintf(stderr, " ct = %ld, dist = %ld\n", a[2], (((long *)a[3]) - a)); */ - if (PTR_GE(dst + (cont->length), (STACKITEM *)&a)) grow_throw(a); -# else -# ifndef hpux - if (a[2] && (((long *)a[3]) - a < SCM_GROWTH)) - puts("grow_throw: check if long growth[]; being optimized out"); -# endif - /* if (a[2]) fprintf(stderr, " ct = %ld, dist = %ld\n", a[2], (((long *)a[3]) - a)); */ - dst -= cont->length; - if (PTR_LE(dst, (STACKITEM *)&a)) grow_throw(a); -# endif/* def STACK_GROWS_UP */ - FLUSH_REGISTER_WINDOWS; - src = (STACKITEM *)(cont + 1); - for (j = cont->length;0 <= --j;) *dst++ = *src++; -# endif /* ndef CHEAP_CONTINUATIONS */ -# ifdef SHORT_INT - thrown_value = val; - longjump(cont->jmpbuf, 1); -# else - longjump(cont->jmpbuf, val); -# endif -} - -/* grow_throw() grows the stack by SCM_GROWTH long words. If the - "sizeof growth" assignment is not sufficient to restrain your - overly optimistic compiler, the stack will grow by much less and - grow_throw() and dynthrow() will waste time calling each other. To - fix this you will have to compile grow_throw() in a separate file - so the compiler won't be able to guess that the growth array isn't - all used. */ - -# ifndef CHEAP_CONTINUATIONS -void grow_throw(a) /* Grow the stack so that there is room */ - long *a; /* to copy in the continuation. Then */ -{ /* retry the throw. */ - long growth[SCM_GROWTH]; - growth[0] = a[0]; - growth[1] = a[1]; - growth[2] = a[2] + 1; - growth[3] = (long) a; - growth[SCM_GROWTH-1] = sizeof growth; - dynthrow(growth); -} -# endif /* ndef CHEAP_CONTINUATIONS */ -#endif - -/* throw_to_continuation() restores the stack in effect when - @var{cont} was made and resumes @var{cont}'s processor state. If - the stack cannot be resotred because @var{cont} and @var{root_cont} - do not have the same stkbase, @code{throw_to_continuation() - returns. */ - -/* Note: If 2 or more @var{cont}s share a parent continuation and if - the values of stack allocated variables in that parent continuation - are changed, the results are unspecified. This is because the - parent continuation may or may not be reloaded, depending on what - other throws have intervened. */ - -void throw_to_continuation(cont, val, root_cont) - CONTINUATION *cont; - long val; - CONTINUATION *root_cont; -{ - long a[3]; - a[0] = (long)cont; - a[1] = val; - a[2] = 0; - if (cont->stkbse != root_cont->stkbse) - return; /* Stale continuation */ - dynthrow(a); -} diff --git a/SCM/continue.h b/SCM/continue.h deleted file mode 100644 index d901e01..0000000 --- a/SCM/continue.h +++ /dev/null @@ -1,185 +0,0 @@ -/* Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2006 Free Software Foundation, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/>. - */ - -/* "continue.h" Scheme Continuations for C. - Author: Aubrey Jaffer. */ - -#ifndef STDC_HEADERS -#define STDC_HEADERS 1 -#endif - -#include <stdlib.h> - -/* If stack is not longword aligned then */ - -/* #define SHORT_ALIGN */ -#ifdef THINK_C -# define SHORT_ALIGN -#endif -#ifdef __MWERKS__ -# ifdef __MC68K__ -# define SHORT_ALIGN -# endif -#endif -#ifdef MSDOS -# ifndef _M_ARM -/* arm processors need DWORD aligned data access */ -# define SHORT_ALIGN -# endif -#endif -#ifdef atarist -# define SHORT_ALIGN -#endif - -#ifdef SHORT_ALIGN -typedef short STACKITEM; -#else -typedef long STACKITEM; -#endif - -/* If stacks grow up then */ - -/* #define STACK_GROWS_UP */ -#ifdef hp9000s800 -# define STACK_GROWS_UP -#endif -#ifdef pyr -# define STACK_GROWS_UP -#endif -#ifdef nosve -# define STACK_GROWS_UP -#endif -#ifdef _UNICOS -# define STACK_GROWS_UP -#endif - -/* James Clark came up with this neat one instruction fix for - continuations on the SPARC. It flushes the register windows so - that all the state of the process is contained in the stack. */ - -#ifdef sparc -# define FLUSH_REGISTER_WINDOWS asm("ta 3") -#else -# define FLUSH_REGISTER_WINDOWS /* empty */ -#endif - -#ifdef vax -# ifndef CHEAP_CONTINUATIONS - -typedef int jump_buf[17]; -extern int setjump(jump_buf env); -extern int longjump(jump_buf env, int ret); - -# else -# include <setjmp.h> -# define jump_buf jmp_buf -# define setjump setjmp -# define longjump longjmp -# endif -#else /* ndef vax */ -# ifdef _CRAY1 - -typedef int jump_buf[112]; -extern int setjump(jump_buf env); -extern int longjump(jump_buf env, int ret); - -# else /* ndef _CRAY1 */ -# ifndef PLAN9 -# include <setjmp.h> -# include <signal.h> -# endif -# ifdef SIG_UNBLOCK -# define jump_buf sigjmp_buf -# define setjump(buf) sigsetjmp((buf), !0) -# define longjump siglongjmp -# else -# define jump_buf jmp_buf -# define setjump setjmp -# define longjump longjmp -# endif /* ndef SIG_UNBLOCK */ -# endif /* ndef _CRAY1 */ -#endif /* ndef vax */ - -/* `other' is a CONTINUATION slot for miscellaneous data of type - CONTINUATION_OTHER. */ - -#ifndef CONTINUATION_OTHER -# define CONTINUATION_OTHER int -#endif - -struct Continuation {jump_buf jmpbuf; - long thrwval; - long length; - STACKITEM *stkbse; -#ifdef __ia64__ - long *bspbse; - long bsplength; - long rnat; -#endif - CONTINUATION_OTHER other; - struct Continuation *parent; - }; -typedef struct Continuation CONTINUATION; - -#ifndef P -# ifdef USE_ANSI_PROTOTYPES -# define P(s) s -# else -# define P(s) () -# endif -#endif - -extern long thrown_value; -long stack_size P((STACKITEM *start)); -CONTINUATION *make_root_continuation P((STACKITEM *stack_base)); -CONTINUATION *make_continuation P((CONTINUATION *parent_cont)); -void free_continuation P((CONTINUATION *cont)); -void dynthrow P((long *a)); -void grow_throw P((long *a)); -void throw_to_continuation P((CONTINUATION *cont, long val, - CONTINUATION *root_cont)); - -/* how to get the local definition for malloc */ - -#ifndef STDC_HEADERS -# ifndef malloc - char *malloc P((sizet size)); -# endif - char *realloc P((char *ptr, sizet size)); -#endif - -/* PTR_LT defines how to compare two addresses (which may not be in - the same array). */ - -#if defined(__TURBOC__) && !defined(__TOS__) -# ifdef PROT386 -# define PTR_LT(x, y) (((long)(x)) < ((long)(y))) -# else -# define PTR_LT(x, y) ((x) < (y)) -# endif -#else /* not __TURBOC__ */ -# ifdef nosve -# define PTR_MASK 0xffffffffffff -# define PTR_LT(x, y) (((int)(x)&PTR_MASK) < ((int)(y)&PTR_MASK)) -# else -# define PTR_LT(x, y) ((x) < (y)) -# endif -#endif - -#define PTR_GT(x, y) PTR_LT(y, x) -#define PTR_LE(x, y) (!PTR_GT(x, y)) -#define PTR_GE(x, y) (!PTR_LT(x, y)) diff --git a/SCM/scm.h b/SCM/scm.h deleted file mode 100644 index 763f2b2..0000000 --- a/SCM/scm.h +++ /dev/null @@ -1,1145 +0,0 @@ -/* "scm.h" SCM data types and external functions. - * Copyright (C) 1990-2006 Free Software Foundation, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/>. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef _WIN32 -# include <windows.h> -#endif - -#ifdef _WIN32_WCE -# include <windows.h> -#endif - -#ifdef hpux -# ifndef __GNUC__ -# define const /**/ -# endif -#endif - -#ifdef PLAN9 -# include <u.h> -# include <libc.h> -/* Simple imitation of some Unix system calls */ -# define exit(val) exits("") -# define getcwd getwd -/* we have our own isatty */ -int isatty (int); -#endif - -typedef long SCM; -typedef struct {SCM car, cdr;} cell; -typedef struct {long sname;SCM (*cproc)();} subr; -typedef struct {long sname;double (*dproc)();} dsubr; -typedef struct {const char *string;SCM (*cproc)();} iproc; -typedef struct {const char *name;} subr_info; - -#include <stdio.h> -#include "scmfig.h" - -#ifdef _WIN32 -# ifdef SCM_WIN_DLL -# define SCM_DLL_EXPORT __declspec(dllexport) -# define SCM_EXPORT SCM_DLL_EXPORT -# else -# define SCM_DLL_EXPORT /**/ -# define SCM_EXPORT extern -# endif -#else -# define SCM_DLL_EXPORT /**/ -# define SCM_EXPORT extern -#endif - - -typedef struct { - sizet eltsize; - sizet len; - sizet alloclen; - sizet maxlen; - const char *what; - char *elts;} scm_gra; - -#ifdef USE_ANSI_PROTOTYPES -# define P(s) s -#else -# define P(s) () -#endif - -#ifndef STDC_HEADERS - int isatty P((int)); -#endif - -typedef struct { - SCM (*mark)P((SCM)); - sizet (*free)P((CELLPTR)); - int (*print)P((SCM exp, SCM port, int writing)); - SCM (*equalp)P((SCM, SCM)); -} smobfuns; - -typedef struct { - char *name; - SCM (*mark)P((SCM ptr)); - int (*free)P((FILE *p)); - int (*print)P((SCM exp, SCM port, int writing)); - SCM (*equalp)P((SCM, SCM)); - int (*fputc)P((int c, FILE *p)); -/* int (*fputs)P((char *s, FILE *p)); */ -/* sizet (*fwrite)P((char *s, sizet siz, sizet num, FILE *p)); */ - int (*fputs)P((const char *s, FILE *p)); - sizet (*fwrite)P((const void *s, sizet siz, sizet num, FILE *p)); - int (*fflush)P((FILE *stream)); - int (*fgetc)P((FILE *p)); - int (*fclose)P((FILE *p)); - int (*ungetc)P((int c, SCM p)); -} ptobfuns; - -typedef struct { - SCM data; - SCM port; - long flags; - long line; - int unread; - short col; - short colprev; -} port_info; - -typedef struct { - SCM v; - sizet base; -} array; -typedef struct { - long lbnd; - long ubnd; - long inc; -} array_dim; - -#ifdef FLOATS -typedef struct {char *string;double (*cproc)P((double));} dblproc; -# ifdef SINGLES -# ifdef CDR_DOUBLES -typedef struct {SCM type;double num;} flo; -# else -typedef struct {SCM type;float num;} flo; -# endif -# endif -typedef struct {SCM type;double *real;} dbl; -#endif - - /* Conditionals should always expect immediates */ - /* GCC __builtin_expect() is stubbed in scmfig.h */ -#define IMP(x) SCM_EXPECT_TRUE(6 & PTR2INT(x)) -#define NIMP(x) (!IMP(x)) - -#define INUMP(x) SCM_EXPECT_TRUE(2 & PTR2INT(x)) -#define NINUMP(x) (!INUMP(x)) -#define INUM0 ((SCM) 2) -#define ICHRP(x) ((0xff & PTR2INT(x))==0xf4) -#define ICHR(x) ((unsigned char)((x)>>8)) -#define MAKICHR(x) (((x)<<8)+0xf4L) - -#define ILOC00 (0x000000fcL) -#define ILOCP(n) ((0xff & PTR2INT(n))==PTR2INT(ILOC00)) -#define MAKILOC(if, id) (ILOC00 + (((long)id)<<8) + (((long)if)<<16)) -#define IDIST(n) ((PTR2INT(n)>>8) & 0x7f) -#define IFRAME(n) ((PTR2INT(n)>>16)) -#define ICDRP(n) (ICDR & (n)) -#define ICDR (1L<<15) - -/* ISYMP tests for ISPCSYM and ISYM */ -#define ISYMP(n) ((0x187 & PTR2INT(n))==4) -/* IFLAGP tests for ISPCSYM, ISYM and IFLAG */ -#define IFLAGP(n) ((0x87 & PTR2INT(n))==4) -#define ISYMNUM(n) ((PTR2INT((n)>>9)) & 0x7f) -#define ISYMVAL(n) (PTR2INT((n)>>16)) -#define MAKISYMVAL(isym, val) ((isym) | ((long)(val) <<16)) -#define ISYMCHARS(n) (isymnames[ISYMNUM(n)]) -#define MAKSPCSYM(n) (((n)<<9)+((n)<<3)+4L) -#define MAKISYM(n) (((n)<<9)+0x74L) -#define MAKIFLAG(n) (((n)<<9)+0x174L) -/* This is to make the print representation of some evaluated code, - as in backtraces, make a little more sense. */ -#define MAKSPCSYM2(work, look) ((127L & (work)) | ((127L<<9) & (look))) - -SCM_EXPORT char *isymnames[]; -#define NUM_ISPCSYM 14 -#define IM_AND MAKSPCSYM(0) -#define IM_BEGIN MAKSPCSYM(1) -#define IM_CASE MAKSPCSYM(2) -#define IM_COND MAKSPCSYM(3) -#define IM_DO MAKSPCSYM(4) -#define IM_IF MAKSPCSYM(5) -#define IM_LAMBDA MAKSPCSYM(6) -#define IM_LET MAKSPCSYM(7) -#define IM_LETSTAR MAKSPCSYM(8) -#define IM_LETREC MAKSPCSYM(9) -#define IM_OR MAKSPCSYM(10) -#define IM_QUOTE MAKSPCSYM(11) -#define IM_SET MAKSPCSYM(12) -#define IM_FUNCALL MAKSPCSYM(13) - -#define s_and (ISYMCHARS(IM_AND)+2) -#define s_begin (ISYMCHARS(IM_BEGIN)+2) -#define s_case (ISYMCHARS(IM_CASE)+2) -#define s_cond (ISYMCHARS(IM_COND)+2) -#define s_do (ISYMCHARS(IM_DO)+2) -#define s_if (ISYMCHARS(IM_IF)+2) -#define s_lambda (ISYMCHARS(IM_LAMBDA)+2) -#define s_let (ISYMCHARS(IM_LET)+2) -#define s_letstar (ISYMCHARS(IM_LETSTAR)+2) -#define s_letrec (ISYMCHARS(IM_LETREC)+2) -#define s_or (ISYMCHARS(IM_OR)+2) -#define s_quote (ISYMCHARS(IM_QUOTE)+2) -#define s_set (ISYMCHARS(IM_SET)+2) -#define s_define (ISYMCHARS(IM_DEFINE)+2) -#define s_delay (ISYMCHARS(IM_DELAY)+2) -#define s_quasiquote (ISYMCHARS(IM_QUASIQUOTE)+2) -#define s_let_syntax (ISYMCHARS(IM_LET_SYNTAX)+2) - -SCM_EXPORT SCM i_dot, i_quote, i_quasiquote, i_unquote, i_uq_splicing; -#define s_apply (ISYMCHARS(IM_APPLY)+2) - -/* each symbol defined here must have a unique number which - corresponds to it's position in isymnames[] in repl.c */ - /* These are used for dispatch in eval.c */ -#define IM_APPLY MAKISYM(14) -#define IM_FARLOC_CAR MAKISYM(15) -#define IM_FARLOC_CDR MAKISYM(16) -#define IM_DELAY MAKISYM(17) -#define IM_QUASIQUOTE MAKISYM(18) -#define IM_EVAL_FOR_APPLY MAKISYM(19) -#define IM_LET_SYNTAX MAKISYM(20) -#define IM_ACRO_CALL MAKISYM(21) -#define IM_LINUM MAKISYM(22) -#define IM_DEFINE MAKISYM(23) -#define IM_EVAL_VALUES MAKISYM(24) - - /* These are not used for dispatch. */ -#define IM_UNQUOTE MAKISYM(25) -#define IM_UQ_SPLICING MAKISYM(26) -#define IM_ELSE MAKISYM(27) -#define IM_ARROW MAKISYM(28) -#define IM_VALUES_TOKEN MAKISYM(29) -#define IM_KEYWORD MAKISYM(30) - -#define NUM_ISYMS 31 - -#define SCM_MAKE_LINUM(n) (IM_LINUM | ((unsigned long)(n))<<16) -#define SCM_LINUM(x) ((unsigned long)(x)>>16) -#define SCM_LINUMP(x) ((0xffffL & (x))==IM_LINUM) - -#define BOOL_F MAKIFLAG(NUM_ISYMS+0) -#define BOOL_T MAKIFLAG(NUM_ISYMS+1) -#define UNDEFINED MAKIFLAG(NUM_ISYMS+2) -#define EOF_VAL MAKIFLAG(NUM_ISYMS+3) -#ifdef SICP -# define EOL BOOL_F -#else -# define EOL MAKIFLAG(NUM_ISYMS+4) -#endif -#define UNSPECIFIED MAKIFLAG(NUM_ISYMS+5) -#define NUM_IFLAGS NUM_ISYMS+6 - -/* Now some unnamed flags used as magic cookies by scm_top_level. */ -/* Argument n can range from -4 to 16 */ -#ifdef SHORT_INT -# define COOKIE(n) (n) -# define UNCOOK(f) (f) -#else -# define COOKIE(n) MAKIFLAG(NUM_IFLAGS+4+n) -# define UNCOOK(f) (ISYMNUM(f)-(NUM_IFLAGS+4)) -#endif - -#define FALSEP(x) (BOOL_F==(x)) -#define NFALSEP(x) (BOOL_F != (x)) -/* BOOL_NOT returns the other boolean. The order of ^s here is - important for Borland C++. */ -#define BOOL_NOT(x) ((x) ^ (BOOL_T ^ BOOL_F)) -#define NULLP(x) (EOL==(x)) -#define NNULLP(x) (EOL != (x)) -#define UNBNDP(x) (UNDEFINED==(x)) -#define CELLP(x) (!NCELLP(x)) -#define NCELLP(x) ((sizeof(cell)-1) & PTR2INT(x)) - -#define GCMARKP(x) (1 & PTR2INT(CDR(x))) -#define GC8MARKP(x) (0x80 & PTR2INT(CAR(x))) -#define SETGCMARK(x) CDR(x) |= 1; -#define CLRGCMARK(x) CDR(x) &= ~1L; -#define SETGC8MARK(x) CAR(x) |= 0x80; -#define CLRGC8MARK(x) CAR(x) &= ~0x80L; -#define TYP3(x) (7 & PTR2INT(CAR(x))) -#define TYP7(x) (0x7f & PTR2INT(CAR(x))) -#define TYP7S(x) (0x7d & PTR2INT(CAR(x))) -#define TYP16(x) (0xffff & PTR2INT(CAR(x))) -#define TYP16S(x) (0xfeff & PTR2INT(CAR(x))) -#define GCTYP16(x) (0xff7f & PTR2INT(CAR(x))) - -#define NCONSP(x) (1 & PTR2INT(CAR(x))) -#define CONSP(x) (!NCONSP(x)) -#define ECONSP(x) (CONSP(x) || (1==TYP3(x))) -#define NECONSP(x) (NCONSP(x) && (1 != TYP3(x))) -#define SCM_GLOCP(x) (tc3_cons_gloc==(7 & PTR2INT(x))) - -#define CAR(x) (((cell *)(SCM2PTR(x)))->car) -#define CDR(x) (((cell *)(SCM2PTR(x)))->cdr) -#define GCCDR(x) (~1L & CDR(x)) -#define SETCDR(x, v) CDR(x) = (SCM)(v) - -#ifdef _M_ARM -/* MS CLARM compiler bug workaround. */ -volatile SCM MS_CLARM_dumy; -# define CODE(x) (MS_CLARM_dumy = (CAR(x)-tc3_closure)) -#else -# define CODE(x) (CAR(x)-tc3_closure) -#endif -#define CLOSUREP(x) (TYP3(x)==tc3_closure) -#define SETCODE(x, e) CAR(x) = (e)+tc3_closure -#define ENV(x) ((~7L & CDR(x)) ? (~7L & CDR(x)) : EOL) -#define GCENV ENV -#define ARGC(x) ((6L & CDR(x))>>1) -#ifdef CAUTIOUS -# define SCM_ESTK_FRLEN 4 -#else -# define SCM_ESTK_FRLEN 3 -#endif -#define SCM_ESTK_BASE 4 -#define SCM_ESTK_PARENT(v) (VELTS(v)[0]) -#define SCM_ESTK_PARENT_WRITABLEP(v) (VELTS(v)[1]) -#define SCM_ESTK_PARENT_INDEX(v) (VELTS(v)[2]) -SCM_EXPORT long tc16_env, tc16_ident; -#define ENVP(x) (tc16_env==TYP16(x)) -#define SCM_ENV_FORMALS CAR -#ifdef MACRO -# define M_IDENTP(x) (tc16_ident==TYP16(x)) -# define M_IDENT_LEXP(x) ((tc16_ident | (1L<<16))==CAR(x)) -# define IDENTP(x) (SYMBOLP(x) || M_IDENTP(x)) -# define IDENT_PARENT(x) (M_IDENT_LEXP(x) ? CAR(CDR(x)) : CDR(x)) -# define IDENT_ENV(x) (M_IDENT_LEXP(x) ? CDR(CDR(x)) : BOOL_F) -#else -# define IDENTP SYMBOLP -# define M_IDENTP(x) (0) -#endif - - /* markers for various static environment frame types */ - /* FIXME these need to be exported somehow to Scheme */ -#ifdef CAUTIOUS -# define SCM_ENV_FILENAME MAKINUM(1) -# define SCM_ENV_PROCNAME MAKINUM(2) -#endif -#define SCM_ENV_DOC MAKINUM(3) -#define SCM_ENV_ANNOTATION MAKINUM(4) -#define SCM_ENV_CONSTANT MAKINUM(5) -#define SCM_ENV_SYNTAX MAKINUM(6) -#define SCM_ENV_END MAKINUM(7) - -#define PORTP(x) (TYP7(x)==tc7_port) -#define OPPORTP(x) (((0x7f | OPN) & CAR(x))==(tc7_port | OPN)) -#define OPINPORTP(x) (((0x7f | OPN | RDNG) & CAR(x))==(tc7_port | OPN | RDNG)) -#define OPOUTPORTP(x) (((0x7f | OPN | WRTNG) & CAR(x))==(tc7_port | OPN | WRTNG)) -#define OPIOPORTP(x) (((0x7f | OPN | RDNG | WRTNG) & CAR(x))==(tc7_port | OPN | RDNG | WRTNG)) -#define FPORTP(x) (TYP16S(x)==tc7_port) -#define OPFPORTP(x) (((0xfeff | OPN) & CAR(x))==(tc7_port | OPN)) -#define OPINFPORTP(x) (((0xfeff | OPN | RDNG) & CAR(x))==(tc7_port | OPN | RDNG)) -#define OPOUTFPORTP(x) (((0xfeff | OPN | WRTNG) & CAR(x))==(tc7_port | OPN | WRTNG)) - -#define INPORTP(x) (((0x7f | RDNG) & CAR(x))==(tc7_port | RDNG)) -#define OUTPORTP(x) (((0x7f | WRTNG) & CAR(x))==(tc7_port | WRTNG)) -#define OPENP(x) (OPN & CAR(x)) -#define CLOSEDP(x) (!OPENP(x)) -#define STREAM(x) ((FILE *)(CDR(x))) -#define SETSTREAM SETCDR -#define CRDYP(port) ((CAR(port) & CRDY) && (EOF != CGETUN(port))) -#define CLRDY(port) (CAR(port) &= (SCM_PORTFLAGS(port) | (~0xf0000))) -#define CGETUN(port) (scm_port_table[SCM_PORTNUM(port)].unread) - -#define tc_socket (tc7_port | OPN) -#define SOCKP(x) (((0x7f | OPN | RDNG | WRTNG) & CAR(x))==(tc_socket)) -#define SOCKTYP(x) (INUM(SCM_PORTDATA(x))) - -#define DIRP(x) (NIMP(x) && (TYP16(x)==(tc16_dir))) -#define OPDIRP(x) (NIMP(x) && (CAR(x)==(tc16_dir | OPN))) - -#ifdef FLOATS -# define INEXP(x) (TYP16(x)==tc16_flo) -# define CPLXP(x) (CAR(x)==tc_dblc) -# define REAL(x) (*(((dbl *) (SCM2PTR(x)))->real)) -# define IMAG(x) (*((double *)(CHARS(x)+sizeof(double)))) -/* ((&REAL(x))[1]) */ -# ifdef SINGLES -# define REALP(x) ((~REAL_PART & CAR(x))==tc_flo) -# define SINGP(x) SCM_EXPECT_TRUE(CAR(x)==tc_flo) -# define FLO(x) (((flo *)(SCM2PTR(x)))->num) -# define REALPART(x) (SINGP(x)?0.0+FLO(x):REAL(x)) -# else /* SINGLES */ -# define REALP(x) (CAR(x)==tc_dblr) -# define REALPART REAL -# endif /* SINGLES */ -#endif - -#ifdef FLOATS -# define NUMBERP(x) (INUMP(x) || (NIMP(x) && NUMP(x))) -#else -# ifdef BIGDIG -# define NUMBERP(x) (INUMP(x) || (NIMP(x) && NUMP(x))) -# else -# define NUMBERP INUMP -# endif -#endif -#define NUMP(x) ((0xfcff & PTR2INT(CAR(x)))==tc7_smob) -#define BIGP(x) (TYP16S(x)==tc16_bigpos) -#define BIGSIGN(x) (0x0100 & PTR2INT(CAR(x))) -#define BDIGITS(x) ((BIGDIG *)(CDR(x))) -#define NUMDIGS(x) ((sizet)(((unsigned long)CAR(x))>>16)) -#define MAKE_NUMDIGS(v, t) ((((v)+0L)<<16)+(t)) -#define SETNUMDIGS(x, v, t) CAR(x) = MAKE_NUMDIGS(v, t) - -#define SNAME(x) ((char *)(subrs[NUMDIGS(x)].name)) -#define SUBRF(x) (((subr *)(SCM2PTR(x)))->cproc) -#define DSUBRF(x) (((dsubr *)(SCM2PTR(x)))->dproc) -#define CCLO_SUBR(x) (VELTS(x)[0]) -#define CCLO_LENGTH NUMDIGS -#define CXR_OP SMOBNUM - -#define SYMBOLP(x) (TYP7S(x)==tc7_ssymbol) -#define STRINGP(x) (TYP7(x)==tc7_string) -#define NSTRINGP(x) (!STRINGP(x)) -#define BYTESP(x) (TYP7(x)==tc7_VfixN8) -#define VECTORP(x) (TYP7(x)==tc7_vector) -#define NVECTORP(x) (!VECTORP(x)) -#define LENGTH(x) (((unsigned long)CAR(x))>>8) -#define LENGTH_MAX (((unsigned long)-1L)>>8) -#define MAKE_LENGTH(v, t) ((((v)+0L)<<8) + (t)) -#define SETLENGTH(x, v, t) CAR(x) = MAKE_LENGTH(v, t) -#define CHARS(x) ((char *)(CDR(x))) -#define UCHARS(x) ((unsigned char *)(CDR(x))) -#define VELTS(x) ((SCM *)CDR(x)) -#define SETCHARS SETCDR -#define SETVELTS SETCDR - -SCM_EXPORT long tc16_array; -#define ARRAYP(a) (tc16_array==TYP16(a)) -#define ARRAY_V(a) (((array *)CDR(a))->v) -/*#define ARRAY_NDIM(x) NUMDIGS(x)*/ -#define ARRAY_NDIM(x) ((sizet)(CAR(x)>>17)) -#define ARRAY_CONTIGUOUS 0x10000 -#define ARRAY_CONTP(x) (ARRAY_CONTIGUOUS & PTR2INT(CAR(x))) -#define ARRAY_BASE(a) (((array *)CDR(a))->base) -#define ARRAY_DIMS(a) ((array_dim *)(CHARS(a)+sizeof(array))) - -#define FREEP(x) (CAR(x)==tc_free_cell) -#define NFREEP(x) (!FREEP(x)) - -#define SMOBNUM(x) (0x0ff & (CAR(x)>>8)) -#define PTOBNUM(x) (0x0ff & (CAR(x)>>8)) -#define SCM_PORTNUM(x) ((int)(((unsigned long)CAR(x))>>20)) -#define SCM_PORTNUM_MAX ((int)((0x7fffUL<<20)>>20)) -#define SCM_PORTFLAGS(x) (scm_port_table[SCM_PORTNUM(x)].flags) -#define SCM_PORTDATA(x) (scm_port_table[SCM_PORTNUM(x)].data) -#define SCM_SETFLAGS(x, flags) (CAR(x) = (CAR(x) & ~0x0f0000L) | (flags)) -/* This is used (only) for closing ports. */ -#define SCM_SET_PTOBNUM(x, typ) (CAR(x)=(typ)|(CAR(x) & ~0x0ffffL)) - -#define DIGITS '0':case '1':case '2':case '3':case '4':\ - case '5':case '6':case '7':case '8':case '9' - -/* Aggregated types for dispatch in switch statements. */ - -#define tcs_cons_inum 2: case 6:case 10:case 14:\ - case 18:case 22:case 26:case 30:\ - case 34:case 38:case 42:case 46:\ - case 50:case 54:case 58:case 62:\ - case 66:case 70:case 74:case 78:\ - case 82:case 86:case 90:case 94:\ - case 98:case 102:case 106:case 110:\ - case 114:case 118:case 122:case 126 -#define tcs_cons_iloc 124 -#define tcs_cons_ispcsym 4:case 12:case 20:case 28:\ - case 36:case 44:case 52:case 60:\ - case 68:case 76:case 84:case 92:\ - case 100:case 108 -#define tcs_cons_chflag 116 /* char *or* flag */ -#define tcs_cons_imcar tcs_cons_inum:\ - case tcs_cons_iloc:\ - case tcs_cons_ispcsym:\ - case tcs_cons_chflag - -#define tcs_cons_nimcar 0:case 8:case 16:case 24:\ - case 32:case 40:case 48:case 56:\ - case 64:case 72:case 80:case 88:\ - case 96:case 104:case 112:case 120 -#define tcs_cons_gloc 1:case 9:case 17:case 25:\ - case 33:case 41:case 49:case 57:\ - case 65:case 73:case 81:case 89:\ - case 97:case 105:case 113:case 121 - -#define tcs_closures 3:case 11:case 19:case 27:\ - case 35:case 43:case 51:case 59:\ - case 67:case 75:case 83:case 91:\ - case 99:case 107:case 115:case 123 -#define tcs_subrs tc7_asubr:case tc7_subr_0:case tc7_subr_1:case tc7_cxr:\ - case tc7_subr_3:case tc7_subr_2:case tc7_rpsubr:case tc7_subr_1o:\ - case tc7_subr_2o:case tc7_lsubr_2:case tc7_lsubr -#define tcs_symbols tc7_ssymbol:case tc7_msymbol -#define tcs_bignums tc16_bigpos:case tc16_bigneg -#define tcs_uves tc7_string:case tc7_Vbool:case tc7_VfixN8:case tc7_VfixZ8:\ - case tc7_VfixN16:case tc7_VfixZ16:case tc7_VfixN32:case tc7_VfixZ32:\ - case tc7_VfloR32:case tc7_VfloC32:case tc7_VfloR64:case tc7_VfloC64 - -#define tc3_cons_nimcar 0 -#define tc3_cons_imcar 2:case 4:case 6 -#define tc3_cons_gloc 1 -#define tc3_closure 3 -#define tc3_tc7_types 5:case 7 - -#define tc7_ssymbol 5 -#define tc7_msymbol 7 -#define tc7_string 13 -#define tc7_vector 15 -#define tc7_Vbool 21 - -/* 23 */ - -#define tc7_VfixN8 29 -#define tc7_VfixZ8 31 -#define tc7_VfixN16 37 -#define tc7_VfixZ16 39 -#define tc7_VfixN32 45 -#define tc7_VfixZ32 47 - -#define tc7_VfloR32 53 -#define tc7_VfloC32 55 -#define tc7_VfloR64 61 -#define tc7_VfloC64 63 - -/* 69 */ - -#define tc7_port 71 -#define tc7_contin 77 -#define tc7_specfun 79 - -#define tc7_subr_0 85 -#define tc7_subr_1 87 -#define tc7_cxr 93 -#define tc7_subr_3 95 -#define tc7_subr_2 101 -#define tc7_asubr 103 -#define tc7_subr_1o 109 -#define tc7_subr_2o 111 -#define tc7_lsubr_2 117 -#define tc7_lsubr 119 -#define tc7_rpsubr 125 - -#define tc7_smob 127 -#define tc_free_cell 127 -#define tc_broken_heart (tc_free_cell+0x10000) - -#define tc16_apply (tc7_specfun | (0L<<8)) -#define tc16_call_cc (tc7_specfun | (1L<<8)) -#define tc16_cclo (tc7_specfun | (2L<<8)) -#define tc16_eval (tc7_specfun | (3L<<8)) -#define tc16_values (tc7_specfun | (4L<<8)) -#define tc16_call_wv (tc7_specfun | (5L<<8)) - -#define tc16_flo 0x017f -#define tc_flo 0x017fL - -#define REAL_PART (1L<<16) -#define IMAG_PART (2L<<16) -#define tc_dblr (tc16_flo|REAL_PART) -#define tc_dblc (tc16_flo|REAL_PART|IMAG_PART) - -#define tc16_bigpos 0x027f -#define tc16_bigneg 0x037f - - /* The first four flags fit in the car of a port cell, remaining - flags only in the port table */ -#define OPN (1L<<16) -#define RDNG (2L<<16) -#define WRTNG (4L<<16) -#define CRDY (8L<<16) - -#define TRACKED (16L<<16) -#define BINARY (32L<<16) -#define BUF0 (64L<<16) -#define EXCLUSIVE (128L<<16) - /* LSB is used for gc mark */ - -SCM_EXPORT scm_gra subrs_gra; -#define subrs ((subr_info *)(subrs_gra.elts)) -/* SCM_EXPORT sizet numsmob, numptob; - SCM_EXPORT smobfuns *smobs; - SCM_EXPORT ptobfuns *ptobs; - SCM_EXPORT ptobfuns pipob; */ -SCM_EXPORT scm_gra smobs_gra; -#define numsmob (smobs_gra.len) -#define smobs ((smobfuns *)(smobs_gra.elts)) -SCM_EXPORT scm_gra ptobs_gra; -#define numptob (ptobs_gra.len) -#define ptobs ((ptobfuns *)(ptobs_gra.elts)) -SCM_EXPORT port_info *scm_port_table; - -#define tc16_fport (tc7_port + 0*256L) -#define tc16_pipe (tc7_port + 1*256L) -#define tc16_strport (tc7_port + 2*256L) -#define tc16_sfport (tc7_port + 3*256L) -SCM_EXPORT long tc16_dir; -SCM_EXPORT long tc16_clport; - -SCM_EXPORT SCM sys_protects[]; -#define cur_inp sys_protects[0] -#define cur_outp sys_protects[1] -#define cur_errp sys_protects[2] -#define def_inp sys_protects[3] -#define def_outp sys_protects[4] -#define def_errp sys_protects[5] -#define sys_errp sys_protects[6] -#define sys_safep sys_protects[7] -#define listofnull sys_protects[8] -#define undefineds sys_protects[9] -#define nullvect sys_protects[10] -#define nullstr sys_protects[11] -#define progargs sys_protects[12] -#define loadports sys_protects[13] -#define rootcont sys_protects[14] -#define dynwinds sys_protects[15] -#define list_unspecified sys_protects[16] -#define f_evapply sys_protects[17] -#define eval_env sys_protects[18] -#define f_apply_closure sys_protects[19] -#define flo0 sys_protects[20] -#define scm_uprotects sys_protects[21] -#define scm_narn sys_protects[22] -#define NUM_PROTECTS 23 - -/* now for connects between source files */ - -/* SCM_EXPORT sizet num_finals; - SCM_EXPORT void (**finals)P((void)); - SCM_EXPORT sizet num_finals; */ -SCM_EXPORT scm_gra finals_gra; -#define num_finals (finals_gra.len) -#define finals ((void (**)())(finals_gra.elts)) - -SCM_EXPORT unsigned char upcase[], downcase[]; -SCM_EXPORT SCM symhash; -SCM_EXPORT int symhash_dim; -SCM_EXPORT long heap_cells; -SCM_EXPORT CELLPTR heap_org; -SCM_EXPORT VOLATILE SCM freelist; -SCM_EXPORT long gc_cells_collected, gc_malloc_collected, gc_ports_collected; -SCM_EXPORT long gc_syms_collected; -SCM_EXPORT long cells_allocated, lcells_allocated, mallocated, lmallocated; -SCM_EXPORT long mtrigger; -SCM_EXPORT SCM *loc_loadpath; -SCM_EXPORT SCM *loc_errobj; -SCM_EXPORT SCM loadport; -SCM_EXPORT char *errjmp_bad; -SCM_EXPORT VOLATILE int ints_disabled; -SCM_EXPORT int output_deferred, gc_hook_pending, gc_hook_active; -SCM_EXPORT unsigned long SIG_deferred; -SCM_EXPORT SCM exitval; -SCM_EXPORT int cursinit; -SCM_EXPORT unsigned int poll_count, tick_count; -SCM_EXPORT int dumped; -SCM_EXPORT char *execpath; -SCM_EXPORT char s_no_execpath[]; -SCM_EXPORT int scm_verbose; -#define verbose (scm_verbose+0) - -SCM_EXPORT const char dirsep[]; - -/* strings used in several source files */ - -SCM_EXPORT char s_write[], s_newline[], s_system[]; -SCM_EXPORT char s_make_string[], s_make_vector[], s_list[], s_op_pipe[]; -#define s_string (s_make_string+5) -#define s_vector (s_make_vector+5) -#define s_pipe (s_op_pipe+5) -SCM_EXPORT char s_make_sh_array[]; -SCM_EXPORT char s_array_fill[]; -#define s_array (s_make_sh_array+12) -SCM_EXPORT char s_ccl[]; -#define s_limit (s_ccl+10) -SCM_EXPORT char s_close_port[]; -#define s_port_type (s_close_port+6) -SCM_EXPORT char s_call_cc[]; -#define s_cont (s_call_cc+18) -SCM_EXPORT char s_try_create_file[]; -SCM_EXPORT char s_badenv[]; - -SCM_EXPORT void (*init_user_scm) P((void)); - -/* function prototypes */ - -SCM_EXPORT void (* deferred_proc) P((void)); -SCM_EXPORT void process_signals P((void)); -SCM_EXPORT int handle_it P((int i)); -SCM_EXPORT SCM must_malloc_cell P((long len, SCM c, const char *what)); -SCM_EXPORT void must_realloc_cell P((SCM z, long olen, long len, const char *what)); -SCM_EXPORT char *must_malloc P((long len, const char *what)); -SCM_EXPORT char *must_realloc P((char *where, long olen, long len, const char *what)); -SCM_EXPORT void must_free P((char *obj, sizet len)); -SCM_EXPORT void scm_protect_temp P((SCM *ptr)); -SCM_EXPORT long ilength P((SCM sx)); -SCM_EXPORT SCM hash P((SCM obj, SCM n)); -SCM_EXPORT SCM hashv P((SCM obj, SCM n)); -SCM_EXPORT SCM hashq P((SCM obj, SCM n)); -SCM_EXPORT SCM obhash P((SCM obj)); -SCM_EXPORT SCM obunhash P((SCM obj)); -SCM_EXPORT unsigned long strhash P((unsigned char *str, sizet len, unsigned long n)); -SCM_EXPORT unsigned long hasher P((SCM obj, unsigned long n, sizet d)); -SCM_EXPORT SCM lroom P((SCM args)); -SCM_EXPORT void lfflush P((SCM port)); -SCM_EXPORT SCM scm_force_output P((SCM port)); -SCM_EXPORT void scm_init_gra P((scm_gra *gra, sizet eltsize, sizet len, - sizet maxlen, const char *what)); -SCM_EXPORT int scm_grow_gra P((scm_gra *gra, char *elt)); -SCM_EXPORT void scm_trim_gra P((scm_gra *gra)); -SCM_EXPORT void scm_free_gra P((scm_gra *gra)); -SCM_EXPORT long newsmob P((smobfuns *smob)); -SCM_EXPORT long newptob P((ptobfuns *ptob)); -SCM_EXPORT SCM scm_port_entry P((FILE *stream, long ptype, long flags)); -SCM_EXPORT SCM scm_open_ports P((void)); -SCM_EXPORT void prinport P((SCM exp, SCM port, char *type)); -SCM_EXPORT SCM repl P((void)); -SCM_EXPORT void repl_report P((void)); -SCM_EXPORT void growth_mon P((char *obj, long size, char *units, int grewp)); -SCM_EXPORT void gc_start P((const char *what)); -SCM_EXPORT void gc_end P((void)); -SCM_EXPORT void gc_mark P((SCM p)); -SCM_EXPORT void scm_gc_hook P((void)); -SCM_EXPORT SCM scm_gc_protect P((SCM obj)); -SCM_EXPORT SCM scm_add_finalizer P((SCM value, SCM finalizer)); -SCM_EXPORT void scm_run_finalizers P((int exiting)); -SCM_EXPORT void scm_egc_start P((void)); -SCM_EXPORT void scm_egc_end P((void)); -SCM_EXPORT void heap_report P((void)); -SCM_EXPORT void gra_report P((void)); -SCM_EXPORT void exit_report P((void)); -SCM_EXPORT void stack_report P((void)); -SCM_EXPORT SCM scm_stack_trace P((SCM contin)); -SCM_EXPORT SCM scm_scope_trace P((SCM env)); -SCM_EXPORT SCM scm_frame_trace P((SCM contin, SCM nf)); -SCM_EXPORT SCM scm_frame2env P((SCM contin, SCM nf)); -SCM_EXPORT SCM scm_frame_eval P((SCM contin, SCM nf, SCM expr)); -SCM_EXPORT void scm_iprin1 P((SCM exp, SCM port, int writing)); -SCM_EXPORT void scm_intprint P((long n, int radix, SCM port)); -SCM_EXPORT void scm_iprlist P((char *hdr, SCM exp, int tlr, SCM port, int writing)); -SCM_EXPORT SCM scm_env_lookup P((SCM var, SCM stenv)); -SCM_EXPORT SCM scm_env_rlookup P((SCM addr, SCM stenv, const char *what)); -SCM_EXPORT SCM scm_env_getprop P((SCM prop, SCM env)); -SCM_EXPORT SCM scm_env_addprop P((SCM prop, SCM val, SCM env)); -SCM_EXPORT long num_frames P((SCM estk, int i)); -SCM_EXPORT SCM *estk_frame P((SCM estk, int i, int nf)); -SCM_EXPORT SCM *cont_frame P((SCM contin, int nf)); -SCM_EXPORT SCM stacktrace1 P((SCM estk, int i)); -SCM_EXPORT void scm_princode P((SCM code, SCM env, SCM port, int writing)); -SCM_EXPORT void scm_princlosure P((SCM proc, SCM port, int writing)); -SCM_EXPORT void lputc P((int c, SCM port)); -SCM_EXPORT void lputs P((const char *s, SCM port)); -SCM_EXPORT sizet lfwrite P((char *ptr, sizet size, sizet nitems, SCM port)); -SCM_EXPORT int lgetc P((SCM port)); -SCM_EXPORT void lungetc P((int c, SCM port)); -SCM_EXPORT char *grow_tok_buf P((SCM tok_buf)); -SCM_EXPORT long mode_bits P((char *modes, char *cmodes)); -SCM_EXPORT long time_in_msec P((long x)); -SCM_EXPORT SCM my_time P((void)); -SCM_EXPORT SCM your_time P((void)); -SCM_EXPORT void init_iprocs P((iproc *subra, int type)); - -SCM_EXPORT void final_scm P((int)); -SCM_EXPORT void init_sbrk P((void)); -SCM_EXPORT int init_buf0 P((FILE *inport)); -SCM_EXPORT void scm_init_from_argv P((int argc, const char * const *argv, char *script_arg, - int iverbose, int buf0stdin)); -SCM_EXPORT void init_signals P((void)); -SCM_EXPORT SCM scm_top_level P((char *initpath, SCM (*toplvl_fun)())); -SCM_EXPORT void restore_signals P((void)); -SCM_EXPORT void free_storage P((void)); -SCM_EXPORT char *dld_find_executable P((const char* command)); -SCM_EXPORT char *scm_find_execpath P((int argc, const char * const *argv, const char *script_arg)); -SCM_EXPORT void init_scm P((int iverbose, int buf0stdin, long init_heap_size)); -SCM_EXPORT void scm_init_INITS P((void)); -SCM_EXPORT SCM scm_init_extensions P((void)); -SCM_EXPORT void ignore_signals P((void)); -SCM_EXPORT void unignore_signals P((void)); - -SCM_EXPORT void add_feature P((char *str)); -SCM_EXPORT int raprin1 P((SCM exp, SCM port, int writing)); -SCM_EXPORT SCM markcdr P((SCM ptr)); -#define mark0 (0) /*SCM mark0 P((SCM ptr)); */ -SCM_EXPORT SCM equal0 P((SCM ptr1, SCM ptr2)); -SCM_EXPORT sizet free0 P((CELLPTR ptr)); -SCM_EXPORT void scm_warn P((char *str1, char *str2, SCM obj)); -SCM_EXPORT void everr P((SCM exp, SCM env, SCM arg, const char *pos, const char *s_subr, int codep)); -SCM_EXPORT void wta P((SCM arg, const char *pos, const char *s_subr)); -SCM_EXPORT void scm_experr P((SCM arg, const char *pos, const char *s_subr)); -SCM_EXPORT SCM intern P((char *name, sizet len)); -SCM_EXPORT SCM sysintern P((const char *name, SCM val)); -SCM_EXPORT SCM sym2vcell P((SCM sym)); -SCM_EXPORT SCM makstr P((long len)); -SCM_EXPORT SCM scm_maksubr P((const char *name, int type, SCM (*fcn)())); -SCM_EXPORT SCM make_subr P((const char *name, int type, SCM (*fcn)())); -SCM_EXPORT SCM make_synt P((const char *name, long flags, SCM (*fcn)())); -SCM_EXPORT SCM make_gsubr P((const char *name, int req, int opt, int rst, - SCM (*fcn)())); -SCM_EXPORT SCM closure P((SCM code, int nargs)); -SCM_EXPORT SCM makprom P((SCM code)); -SCM_EXPORT SCM force P((SCM x)); -SCM_EXPORT SCM makarb P((SCM name)); -SCM_EXPORT SCM tryarb P((SCM arb)); -SCM_EXPORT SCM relarb P((SCM arb)); -SCM_EXPORT SCM ceval P((SCM x, SCM static_env, SCM env)); -SCM_EXPORT SCM scm_wrapcode P((SCM code, SCM env)); -SCM_EXPORT SCM scm_current_env P((void)); -SCM_EXPORT SCM prolixity P((SCM arg)); -SCM_EXPORT SCM gc_for_newcell P((void)); -SCM_EXPORT void gc_for_open_files P((void)); -SCM_EXPORT SCM gc P((SCM arg)); -SCM_EXPORT SCM tryload P((SCM filename, SCM reader)); -SCM_EXPORT SCM acons P((SCM w, SCM x, SCM y)); -SCM_EXPORT SCM cons2 P((SCM w, SCM x, SCM y)); -SCM_EXPORT SCM resizuve P((SCM vect, SCM len)); -SCM_EXPORT SCM lnot P((SCM x)); -SCM_EXPORT SCM booleanp P((SCM obj)); -SCM_EXPORT SCM eq P((SCM x, SCM y)); -SCM_EXPORT SCM equal P((SCM x, SCM y)); -SCM_EXPORT SCM consp P((SCM x)); -SCM_EXPORT SCM cons P((SCM x, SCM y)); -SCM_EXPORT SCM nullp P((SCM x)); -SCM_EXPORT SCM setcar P((SCM pair, SCM value)); -SCM_EXPORT SCM setcdr P((SCM pair, SCM value)); -SCM_EXPORT SCM listp P((SCM x)); -SCM_EXPORT SCM list P((SCM objs)); -SCM_EXPORT SCM length P((SCM x)); -SCM_EXPORT SCM append P((SCM args)); -SCM_EXPORT SCM reverse P((SCM lst)); -SCM_EXPORT SCM list_ref P((SCM lst, SCM k)); -SCM_EXPORT SCM memq P((SCM x, SCM lst)); -SCM_EXPORT SCM member P((SCM x, SCM lst)); -SCM_EXPORT SCM memv P((SCM x, SCM lst)); -SCM_EXPORT SCM assq P((SCM x, SCM alist)); -SCM_EXPORT SCM assoc P((SCM x, SCM alist)); -SCM_EXPORT SCM symbolp P((SCM x)); -SCM_EXPORT SCM symbol2string P((SCM s)); -SCM_EXPORT SCM string2symbol P((SCM s)); -SCM_EXPORT SCM string_copy P((SCM s)); -SCM_EXPORT SCM numberp P((SCM x)); -SCM_EXPORT SCM exactp P((SCM x)); -SCM_EXPORT SCM inexactp P((SCM x)); -SCM_EXPORT SCM eqp P((SCM x, SCM y)); -SCM_EXPORT SCM lessp P((SCM x, SCM y)); -SCM_EXPORT SCM greaterp P((SCM x, SCM y)); -SCM_EXPORT SCM leqp P((SCM x, SCM y)); -SCM_EXPORT SCM greqp P((SCM x, SCM y)); -SCM_EXPORT SCM zerop P((SCM z)); -SCM_EXPORT SCM positivep P((SCM x)); -SCM_EXPORT SCM negativep P((SCM x)); -SCM_EXPORT SCM oddp P((SCM n)); -SCM_EXPORT SCM evenp P((SCM n)); -SCM_EXPORT SCM lmax P((SCM x, SCM y)); -SCM_EXPORT SCM lmin P((SCM x, SCM y)); -SCM_EXPORT SCM sum P((SCM x, SCM y)); -SCM_EXPORT SCM difference P((SCM x, SCM y)); -SCM_EXPORT SCM product P((SCM x, SCM y)); -SCM_EXPORT SCM divide P((SCM x, SCM y)); -SCM_EXPORT SCM lquotient P((SCM x, SCM y)); -SCM_EXPORT SCM scm_iabs P((SCM x)); -SCM_EXPORT SCM scm_abs P((SCM x)); -SCM_EXPORT SCM lremainder P((SCM x, SCM y)); -SCM_EXPORT SCM modulo P((SCM x, SCM y)); -SCM_EXPORT SCM lgcd P((SCM x, SCM y)); -SCM_EXPORT SCM llcm P((SCM n1, SCM n2)); -SCM_EXPORT SCM number2string P((SCM x, SCM radix)); -SCM_EXPORT SCM istring2number P((char *str, long len, long radix)); -SCM_EXPORT SCM string2number P((SCM str, SCM radix)); -SCM_EXPORT SCM istr2flo P((char *str, long len, long radix)); -SCM_EXPORT SCM mkbig P((sizet nlen, int sign)); -SCM_EXPORT SCM mkstrport P((SCM pos, SCM str, long modes, char *caller)); -SCM_EXPORT SCM mksafeport P((int maxlen, SCM port)); -SCM_EXPORT int reset_safeport P((SCM sfp, int maxlen, SCM port)); -SCM_EXPORT SCM long2big P((long n)); -SCM_EXPORT SCM ulong2big P((unsigned long n)); -SCM_EXPORT SCM big2inum P((SCM b, sizet l)); -SCM_EXPORT sizet iint2str P((long num, int rad, char *p)); -SCM_EXPORT SCM floequal P((SCM x, SCM y)); -SCM_EXPORT SCM uve_equal P((SCM u, SCM v)); -SCM_EXPORT SCM uve_read P((SCM v, SCM port)); -SCM_EXPORT SCM uve_write P((SCM v, SCM port)); -SCM_EXPORT SCM raequal P((SCM ra0, SCM ra1)); -SCM_EXPORT SCM array_equal P((SCM u, SCM v)); -SCM_EXPORT SCM array_rank P((SCM ra)); -SCM_EXPORT int rafill P((SCM ra, SCM fill, SCM ignore)); -SCM_EXPORT SCM uve_fill P((SCM uve, SCM fill)); -SCM_EXPORT SCM array_fill P((SCM ra, SCM fill)); -SCM_EXPORT SCM array_prot P((SCM ra)); -SCM_EXPORT SCM array_rank P((SCM ra)); -SCM_EXPORT SCM array_contents P((SCM ra, SCM strict)); -SCM_EXPORT int bigprint P((SCM exp, SCM port, int writing)); -SCM_EXPORT int floprint P((SCM sexp, SCM port, int writing)); -SCM_EXPORT SCM istr2int P((char *str, long len, long radix)); -SCM_EXPORT SCM istr2bve P((char *str, long len)); -SCM_EXPORT void scm_ipruk P((char *hdr, SCM ptr, SCM port)); -SCM_EXPORT SCM charp P((SCM x)); -SCM_EXPORT SCM char_lessp P((SCM x, SCM y)); -SCM_EXPORT SCM chci_eq P((SCM x, SCM y)); -SCM_EXPORT SCM chci_lessp P((SCM x, SCM y)); -SCM_EXPORT SCM char_alphap P((SCM chr)); -SCM_EXPORT SCM char_nump P((SCM chr)); -SCM_EXPORT SCM char_whitep P((SCM chr)); -SCM_EXPORT SCM char_upperp P((SCM chr)); -SCM_EXPORT SCM char_lowerp P((SCM chr)); -SCM_EXPORT SCM char2int P((SCM chr)); -SCM_EXPORT SCM int2char P((SCM n)); -SCM_EXPORT SCM char_upcase P((SCM chr)); -SCM_EXPORT SCM char_downcase P((SCM chr)); -SCM_EXPORT SCM stringp P((SCM x)); -SCM_EXPORT SCM string P((SCM chrs)); -SCM_EXPORT SCM make_string P((SCM k, SCM chr)); -SCM_EXPORT SCM string2list P((SCM str)); -SCM_EXPORT SCM st_length P((SCM str)); -SCM_EXPORT SCM st_ref P((SCM str, SCM k)); -SCM_EXPORT SCM st_set P((SCM str, SCM k, SCM chr)); -SCM_EXPORT SCM st_equal P((SCM s1, SCM s2)); -SCM_EXPORT SCM stci_equal P((SCM s1, SCM s2)); -SCM_EXPORT SCM st_lessp P((SCM s1, SCM s2)); -SCM_EXPORT SCM stci_lessp P((SCM s1, SCM s2)); -SCM_EXPORT SCM substring P((SCM str, SCM start, SCM end)); -SCM_EXPORT SCM st_append P((SCM args)); -SCM_EXPORT SCM vectorp P((SCM x)); -SCM_EXPORT SCM vector_length P((SCM v)); -SCM_EXPORT SCM vector P((SCM l)); -SCM_EXPORT SCM vector_ref P((SCM v, SCM k)); -SCM_EXPORT SCM vector_set P((SCM v, SCM k, SCM obj)); -SCM_EXPORT SCM make_vector P((SCM k, SCM fill)); -SCM_EXPORT SCM vector2list P((SCM v)); -SCM_EXPORT SCM for_each P((SCM proc, SCM arg1, SCM args)); -SCM_EXPORT SCM procedurep P((SCM obj)); -SCM_EXPORT SCM apply P((SCM proc, SCM arg1, SCM args)); -SCM_EXPORT SCM scm_cvapply P((SCM proc, long n, SCM *argv)); -SCM_EXPORT int scm_arity_check P((SCM proc, long argc, const char *what)); -SCM_EXPORT SCM map P((SCM proc, SCM arg1, SCM args)); -SCM_EXPORT SCM scm_make_cont P((void)); -SCM_EXPORT SCM copytree P((SCM obj)); -SCM_EXPORT SCM eval P((SCM obj)); -SCM_EXPORT SCM scm_values P((SCM arg1, SCM arg2, SCM rest, const char *what)); -SCM_EXPORT SCM scm_eval_values P((SCM x, SCM static_env, SCM env)); -SCM_EXPORT SCM identp P((SCM obj)); -SCM_EXPORT SCM ident2sym P((SCM id)); -SCM_EXPORT SCM ident_eqp P((SCM id1, SCM id2, SCM env)); -SCM_EXPORT int scm_nullenv_p P((SCM env)); -SCM_EXPORT SCM env2tree P((SCM env)); -SCM_EXPORT SCM renamed_ident P((SCM id, SCM env)); -SCM_EXPORT SCM scm_check_linum P((SCM x, SCM *linum)); -SCM_EXPORT SCM scm_add_linum P((SCM linum, SCM x)); -SCM_EXPORT SCM input_portp P((SCM x)); -SCM_EXPORT SCM output_portp P((SCM x)); -SCM_EXPORT SCM cur_input_port P((void)); -SCM_EXPORT SCM cur_output_port P((void)); -SCM_EXPORT SCM i_setbuf0 P((SCM port)); -SCM_EXPORT SCM try_open_file P((SCM filename, SCM modes)); -SCM_EXPORT SCM open_file P((SCM filename, SCM modes)); -SCM_EXPORT SCM open_pipe P((SCM pipestr, SCM modes)); -SCM_EXPORT SCM close_port P((SCM port)); -SCM_EXPORT SCM scm_file_position P((SCM port, SCM pos)); -#define file_position(port) scm_file_position(port, BOOL_F) -#define file_set_position scm_file_position -SCM_EXPORT SCM scm_read P((SCM port)); -SCM_EXPORT SCM scm_read_char P((SCM port)); -SCM_EXPORT SCM scm_peek_char P((SCM port)); -SCM_EXPORT SCM eof_objectp P((SCM x)); -SCM_EXPORT int scm_io_error P((SCM port, const char *what)); -SCM_EXPORT SCM scm_write P((SCM obj, SCM port)); -SCM_EXPORT SCM scm_display P((SCM obj, SCM port)); -SCM_EXPORT SCM scm_newline P((SCM port)); -SCM_EXPORT SCM scm_write_char P((SCM chr, SCM port)); -SCM_EXPORT SCM scm_port_line P((SCM port)); -SCM_EXPORT SCM scm_port_col P((SCM port)); -SCM_EXPORT void scm_line_msg P((SCM file, SCM linum, SCM port)); -SCM_EXPORT void scm_err_line P((const char *what, SCM file, SCM linum, SCM port)); -SCM_EXPORT SCM lgetenv P((SCM nam)); -SCM_EXPORT SCM prog_args P((void)); -SCM_EXPORT SCM makacro P((SCM code)); -SCM_EXPORT SCM makmacro P((SCM code)); -SCM_EXPORT SCM makmmacro P((SCM code)); -SCM_EXPORT SCM makidmacro P((SCM code)); -SCM_EXPORT void poll_routine P((void)); -SCM_EXPORT void tick_signal P((void)); -SCM_EXPORT void stack_check P((void)); -SCM_EXPORT SCM list2ura P((SCM ndim, SCM prot, SCM lst)); -SCM_EXPORT SCM make_ra P((int ndim)); -SCM_EXPORT SCM makflo P((float x)); -SCM_EXPORT SCM arrayp P((SCM v, SCM prot)); -SCM_EXPORT SCM aset P((SCM v, SCM obj, SCM args)); -SCM_EXPORT SCM aref P((SCM v, SCM args)); -SCM_EXPORT SCM scm_array_ref P((SCM args)); -SCM_EXPORT SCM cvref P((SCM v, sizet pos, SCM last)); -SCM_EXPORT SCM quit P((SCM n)); -#ifdef CAREFUL_INTS -SCM_EXPORT void ints_viol P((ints_infot *info, int sense)); -SCM_EXPORT void ints_warn P((char *s1, char* s2, char *fname, int linum)); -#endif -SCM_EXPORT void add_final P((void (*final)(void))); -SCM_EXPORT SCM makcclo P((SCM proc, long len)); -SCM_EXPORT SCM make_uve P((long k, SCM prot)); -SCM_EXPORT long scm_prot2type P((SCM prot)); -SCM_EXPORT long aind P((SCM ra, SCM args, const char *what)); -SCM_EXPORT SCM scm_eval_string P((SCM str)); -SCM_EXPORT SCM scm_load_string P((SCM str)); -SCM_EXPORT SCM scm_unexec P((const SCM pathname)); -SCM_EXPORT SCM scm_logbitp P((SCM index, SCM j1)); -SCM_EXPORT SCM scm_logtest P((SCM x, SCM y)); -SCM_EXPORT SCM scm_logxor P((SCM x, SCM y)); -SCM_EXPORT SCM scm_logand P((SCM x, SCM y)); -SCM_EXPORT SCM scm_logior P((SCM x, SCM y)); -SCM_EXPORT SCM scm_lognot P((SCM n)); -SCM_EXPORT SCM scm_intexpt P((SCM z1, SCM z2)); -SCM_EXPORT SCM scm_ash P((SCM n, SCM cnt)); -SCM_EXPORT SCM scm_bitfield P((SCM n, SCM start, SCM end)); -SCM_EXPORT SCM scm_logcount P((SCM n)); -SCM_EXPORT SCM scm_intlength P((SCM n)); -SCM_EXPORT SCM scm_copybit P((SCM index, SCM j1, SCM bit)); -SCM_EXPORT SCM scm_bitif P((SCM mask, SCM n0, SCM n1)); -SCM_EXPORT SCM scm_copybitfield P((SCM to, SCM start, SCM rest)); - - /* Defined in "rope.c" */ -SCM_EXPORT SCM long2num P((long n)); -SCM_EXPORT SCM ulong2num P((unsigned long n)); -SCM_EXPORT unsigned char num2uchar P((SCM num, char *pos, char *s_caller)); -SCM_EXPORT signed char num2char P((SCM num, char *pos, char *s_caller)); -SCM_EXPORT unsigned short num2ushort P((SCM num, char *pos, char *s_caller)); -SCM_EXPORT short num2short P((SCM num, char *pos, char *s_caller)); -SCM_EXPORT unsigned long num2ulong P((SCM num, char *pos, char *s_caller)); -SCM_EXPORT long num2long P((SCM num, char *pos, char *s_caller)); -SCM_EXPORT double num2dbl P((SCM num, char *pos, char *s_caller)); -SCM_EXPORT SCM makfromstr P((const char *src, sizet len)); -SCM_EXPORT SCM makfromstrs P((int argc, const char * const *argv)); -SCM_EXPORT SCM makfrom0str P((const char *scr)); -SCM_EXPORT char **makargvfrmstrs P((SCM args, const char *s_v)); -SCM_EXPORT void must_free_argv P((char **argv)); -SCM_EXPORT SCM scm_evstr P((char *str)); -SCM_EXPORT void scm_ldstr P((char *str)); -SCM_EXPORT int scm_ldfile P((char *path)); -SCM_EXPORT int scm_ldprog P((char *path)); -SCM_EXPORT unsigned long scm_addr P((SCM args, const char *name)); -SCM_EXPORT unsigned long scm_base_addr P((SCM v, const char *name)); -SCM_EXPORT int scm_cell_p P((SCM x)); - -#ifdef FLOATS -SCM_EXPORT SCM makdbl P((double x, double y)); -SCM_EXPORT SCM dbl2big P((double d)); -SCM_EXPORT double big2dbl P((SCM b)); -SCM_EXPORT double scm_truncate P((double x)); -SCM_EXPORT double scm_round P((double x)); -SCM_EXPORT double floident P((double x)); -#endif - -#ifdef BIGDIG -SCM_EXPORT void longdigs P((long x, BIGDIG digs[DIGSPERLONG])); -SCM_EXPORT SCM adjbig P((SCM b, sizet nlen)); -SCM_EXPORT SCM normbig P((SCM b)); -SCM_EXPORT SCM copybig P((SCM b, int sign)); -SCM_EXPORT SCM addbig P((BIGDIG *x, sizet nx, int xsgn, SCM bigy, int sgny)); -SCM_EXPORT SCM mulbig P((BIGDIG *x, sizet nx, BIGDIG *y, sizet ny, int sgn)); -SCM_EXPORT unsigned int divbigdig P((BIGDIG *ds, sizet h, BIGDIG div)); -SCM_EXPORT SCM divbigint P((SCM x, long z, int sgn, int mode)); -SCM_EXPORT SCM divbigbig P((BIGDIG *x, sizet nx, BIGDIG *y, sizet ny, int sgn, - int modes)); -SCM_EXPORT long pseudolong P((long x)); -#endif -SCM_EXPORT int bigcomp P((SCM x, SCM y)); -SCM_EXPORT SCM bigequal P((SCM x, SCM y)); -SCM_EXPORT int scm_bigdblcomp P((SCM b, double d)); - -/* "script.c" functions */ -SCM_EXPORT char * scm_cat_path P((char *str1, const char *str2, long n)); -SCM_EXPORT char * scm_try_path P((char *path)); -SCM_EXPORT char * script_find_executable P((const char *command)); -SCM_EXPORT char ** script_process_argv P((int argc, const char **argv)); -SCM_EXPORT int script_count_argv P((const char **argv)); -SCM_EXPORT char * find_impl_file P((const char *exec_path, const char *generic_name, - const char *initname, const char *sep)); - -/* environment cache functions */ -SCM_EXPORT void scm_ecache_report P((void)); -SCM_EXPORT void scm_estk_reset P((sizet size)); -SCM_EXPORT void scm_env_cons P((SCM x, SCM y)); -SCM_EXPORT void scm_env_cons2 P((SCM w, SCM x, SCM y)); -SCM_EXPORT void scm_env_cons3 P((SCM v, SCM w, SCM x, SCM y)); -SCM_EXPORT void scm_env_v2lst P((long argc, SCM *argv)); -SCM_EXPORT void scm_extend_env P((void)); -SCM_EXPORT void scm_egc P((void)); - -/* Global state for environment cache */ -SCM_EXPORT CELLPTR scm_ecache; -SCM_EXPORT VOLATILE long scm_ecache_index, scm_ecache_len; -SCM_EXPORT SCM scm_env, scm_env_tmp; -SCM_EXPORT SCM scm_egc_roots[]; -SCM_EXPORT VOLATILE long scm_egc_root_index; -SCM_EXPORT SCM scm_estk; -SCM_EXPORT SCM *scm_estk_v, *scm_estk_ptr; -SCM_EXPORT long scm_estk_size; -#ifndef RECKLESS -SCM_EXPORT SCM scm_trace, scm_trace_env; -#endif - -#ifdef RECKLESS -# define ASRTER(_cond, _arg, _pos, _subr) ; -# define ASRTGO(_cond, _label) ; -#else -# define ASRTER(_cond, _arg, _pos, _subr) if (SCM_EXPECT_FALSE(!(_cond))) wta(_arg, (char *)(_pos), _subr); -# define ASRTGO(_cond, _label) if (SCM_EXPECT_FALSE(!(_cond))) goto _label; -#endif - -#define ARGn 1 -#define ARG1 2 -#define ARG2 3 -#define ARG3 4 -#define ARG4 5 -#define ARG5 6 - /* following must match entry indexes in errmsgs[] */ -#define WNA 7 -#define OVFLOW 8 -#define OUTOFRANGE 9 -#define NALLOC 10 -#define THRASH 11 -#define EXIT 12 -#define HUP_SIGNAL 13 -#define INT_SIGNAL 14 -#define FPE_SIGNAL 15 -#define BUS_SIGNAL 16 -#define SEGV_SIGNAL 17 -#define ALRM_SIGNAL 18 -#define VTALRM_SIGNAL 19 -#define PROF_SIGNAL 20 - -#define EVAL(x, env, venv) (IMP(x)?(x):ceval((x), (SCM)(env), (SCM)(venv))) -#define SIDEVAL(x, env, venv) if (NIMP(x)) ceval((x), (SCM)(env), (SCM)(venv)) - -#define NEWCELL(_into) {if (IMP(freelist)) _into = gc_for_newcell();\ - else {_into = freelist;freelist = CDR(freelist);++cells_allocated;}} -/* -#define NEWCELL(_into) {DEFER_INTS;if (IMP(freelist)) _into = gc_for_newcell();\ - else {_into = freelist;freelist = CDR(freelist);++cells_allocated;}\ - ALLOW_INTS;} -*/ - -#ifdef __cplusplus -} -#endif diff --git a/SCM/scmfig.h b/SCM/scmfig.h deleted file mode 100644 index a8e8667..0000000 --- a/SCM/scmfig.h +++ /dev/null @@ -1,870 +0,0 @@ -/* "scmfig.h" system-dependent configuration. - * Copyright (C) 1990-2006 Free Software Foundation, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/>. - */ - -/* Author: Aubrey Jaffer */ - -#ifdef sequent -# include <strings.h> -# define strchr index -# define strrchr rindex -#else -# ifndef PLAN9 -# include <string.h> -# endif -#endif - -/* MS Windows signal handling hack added by Rainer Urian */ -/* - SCM crashes on WindowsNT after hitting control-c. - - This is because signal handling in windows console applications is - rather different from unix apps. If control-c is hit on a console - application Windows creates a new thread which executes the - control-c signal handler. Now, if the SCM handler does the longjmp - back to the repl loop it does it via the stack of the signal - handler thread which results always ever is an access violation. - - The solution to this problem is to let the signal handler thread - raise a software interrupt in the main thread. - - This is done with the following steps: - - 1. contol-c is hit - - 2. Windows creates the signal handler thread which in turn executes - the routine win32_sigint as its signal handler. - - 3. The handler suspends the main thread and gets the main threads - register context. - - 4. The handler simulates an interrupt call on the main thread by - pointing Eip to the sigintstub stub function and also simulates a - pushad , pushf of the main threads registers - - 5. The handler resumes the main thread which when scheduled will - execute sigintstub, which in turn calls the proper signal interupt - (scamble_signal) -*/ -#ifdef _WIN32 -/* POCKETCONSOLE has the signal handler implemented in the runtime */ -# ifndef POCKETCONSOLE -# define WINSIGNALS -# endif -#endif - - -#include "scmflags.h" /* user specified, system independent flags */ - -/* IMPLINIT is the full pathname (surrounded by double quotes) of - Init.scm, the Scheme initialization code. This is best defined in - the makefile. If available, SCM uses the value of environment - variable SCM_INIT_PATH instead of IMPLINIT. */ - -/* #define IMPLINIT "/usr/jaffer/scm/Init.scm" */ - -/* INITS is calls to initialization routines for any compiled - libraries being linked into scm. This is best done in the makefile. -File: INITS line: functions defined: - -sc2.c init_sc2(); substring-move-left!, substring-move-right!, - substring-fill!, append!, and last-pair -rgx.c init_rgx(); regcomp and regexec. */ - -/* #define INITS init_sc2(); */ - -/* #define SICP */ - -/* setbuf(0) needs to be done for tty ports in order for CHAR-READY? - to work. This can cause problems under MSDOS and other systems. */ - -/* #define NOSETBUF */ - -/* #define RECKLESS */ - -/* #define CAUTIOUS */ - -/* #define BIGNUMS */ - -/* #define ARRAYS */ - -/* #define FLOATS */ - -/* Define SINGLES if you want single precision floats and - (sizeof(float)==sizeof(long)) */ - -#ifdef FLOATS -# ifndef _MSC_VER -# define SINGLES -# endif -#endif - -/* #define SINGLESONLY */ - -/* Define CDR_DOUBLES if (sizeof(double)==sizeof(long)), i.e. - a `single' is really a double. */ -#ifdef FLOATS -# ifdef __alpha -# define CDR_DOUBLES -# endif - -# ifdef _UNICOS /* doubles are no better than singles on Cray. */ -# define SINGLESONLY -# endif - -# ifdef CDR_DOUBLES -# define SINGLES -# define SINGLESONLY -# endif -#endif - -/* #define ENGNOT */ - -/* Define SUN_DL to configure code in "dynl.c" so that dynamic linking - is done using the SUN dynamic linking library "dl". */ - -/* #define SUN_DL */ - -/* Define DLD to configure code in "dynl.c" so that dynamic linking is - done using the "dld" library. DLD is ported to Linux, VAX - (Ultrix), Sun 3 (SunOS 3.4 and 4.0), SPARCstation (SunOS 4.0), - Sequent Symmetry (Dynix), and Atari ST. See scm/README or - scm/ANNOUNCE for ftp sites offering dld. */ - -/* #define DLD */ - -/* Define HAVE_DYNL if dynamic linking is available */ - -#ifdef DLD -# define HAVE_DYNL -#endif -#ifdef SUN_DL -# define HAVE_DYNL -#endif -#ifdef HP_SHL -# define HAVE_DYNL -#endif - -#ifdef HAVE_DYNL -# define CCLO -#endif - -/* Define GC_FREE_SEGMENTS if you want segments of unused heap to - be freed up after garbage collection. Don't define it if you - never want the heap to shrink. */ -#ifndef DONT_GC_FREE_SEGMENTS -# define GC_FREE_SEGMENTS -#endif - -/* MEMOIZE_LOCALS means to convert references to local variables to ILOCs, - (relative lexical addresses into the environment). This memoization - makes evaluated Scheme code harder to read, so you may want to undefine - this flag for debugging -- but SCM will run 3 to 6 times slower */ -#ifndef DONT_MEMOIZE_LOCALS -# define MEMOIZE_LOCALS -#endif - -/* #define CHEAP_CONTINUATIONS */ - -/* #define TICKS */ - -/* PROT386 should be defined on the compilation command line if the - program is to be run on an intel 386 in protected mode. `Huge' - pointers common on MSDOS compilers do not work in protected mode. - PROT386 is required if scm is to run as part of a Microsoft Windows - application. Added by Stephen Adams 8 May 92 */ - -/* #define PROT386 */ - -/* #define NON_PREEMPTIVE if you are using an non-preemptive operating - system in which periodic polling for interrupts is necessary. - Provide your own main procedure (e.g., WinMain, in Windows) or - modify "scmmain.c". Define and initialize unsigned int poll_count, - and provide a procedure named poll_routine(), which POLL calls each - time poll_count reaches zero. poll_routine() must reinitialize - poll_count. It may also check for external actions, such as - Windows messages. The value assigned to poll_count can be quite - large, e.g., 1000, while still maintaining good response time. */ - -/* #define CAREFUL_INTS */ - -/* Define MACRO if you want C level support for hygienic and referentially - transparent macros. */ - -/* #define MACRO */ - -/* STDC_HEADERS indicates that the include file names are the same as - ANSI C. For most modern systems this is the case. */ - -/* added by Yasuaki Honda */ -#ifdef THINK_C -# define __STDC__ -# ifndef macintosh -# define macintosh -# endif -#endif - -/* added by Bob Schumaker, cobblers@netcom.com */ -#ifdef __MWERKS__ -# ifndef macintosh -# define macintosh -# endif -# define bzero(p, n) memset(p, 0, n) -# define bcopy memcpy -#endif -/* added by Denys Duchier */ -#ifndef SVR4 -# ifdef __SVR4 -# define SVR4 -# endif -#endif - -#ifdef __STDC__ -# ifndef __HIGHC__ /* overly fussy compiler */ -# define USE_ANSI_PROTOTYPES -# endif -# ifndef __GNUC__ -# define STDC_HEADERS -# else -# ifdef sparc -# ifdef SVR4 -# define STDC_HEADERS -# endif -# else -# ifndef tahoe -# ifndef sun -# define STDC_HEADERS -# endif -# endif -# endif -# endif -#endif -#ifdef __alpha -# define SHORT_INT -#endif -#ifdef __ia64__ -# define SHORT_INT -# define CDR_DOUBLES -#endif -#ifdef __x86_64 -# define SHORT_INT -# define CDR_DOUBLES -#endif -#ifdef MSDOS /* Microsoft C 5.10 and 6.00A */ -# ifndef GO32 -# define SHORT_INT -# define SHORT_SIZET -# endif -#endif -#ifdef _QC -# define SHORT_INT -# define SHORT_SIZET -#endif -#ifdef __TURBOC__ -# define SHORT_INT -# define SHORT_SIZET -# define LACK_SBRK -# ifndef __TOS__ -# define MSDOS -# endif -#endif -#ifdef __HIGHC__ -# define LACK_SBRK -#endif -#ifdef _WIN32 -# define MSDOS -# define LACK_SBRK -# define LACK_TIMES -#endif -#ifdef _MSDOS -# define MSDOS -#endif -#ifdef MSDOS -# define STDC_HEADERS -#endif - -#ifdef POCKETCONSOLE -# define NOSETBUF -# define LACK_FTIME -#endif - -#ifdef vms -# define STDC_HEADERS -#endif - -#ifdef nosve -# define STDC_HEADERS -#endif - -#ifdef linux -# define HAVE_SELECT -# define HAVE_SYS_TIME_H -# define STDC_HEADERS -#endif - -#ifdef _UNICOS -# define STDC_HEADERS -#endif - -#ifdef _AIX -# define _POSIX_SOURCE -# define LACK_FTIME -#endif - -#ifdef __sgi__ -# define LACK_FTIME -# define STDC_HEADERS -# define USE_ANSI_PROTOTYPES -# define HAVE_SYS_TIME_H -# define __SVR4 -#endif - -#ifdef __SVR4 -# define HAVE_SELECT -#endif - -#ifdef PLAN9 -# define STDC_HEADERS -#endif - -#ifdef hpux -# define LACK_E_IDs -#endif - -/* C-Set++ for OS/2 */ -#ifdef __IBMC__ -# define STDC_HEADERS -# define LACK_TIMES -# define LACK_SBRK -#endif - -#ifdef __CYGWIN__ -/* # define LACK_FTIME */ -# define HAVE_SELECT -# define HAVE_SYS_TIME_H -# undef MSDOS -#endif - -#ifdef __amigaos__ -# define HAVE_SELECT -# define HAVE_SYS_TIME_H -# define LACK_SBRK -#endif - -/* PROMPT is the prompt string printed at top level */ - -#ifndef PROMPT -# ifdef SICP -# define PROMPT "==> " -# else -# define PROMPT "> " -# endif -#endif - -/* #define BRACKETS_AS_PARENS to have [ and ] be read as ( and ) in forms. */ - -/* #define BRACKETS_AS_PARENS */ - -/* LINE_INCREMENTORS are the characters which cause the line count to - be incremented for the purposes of error reporting. This feature - is only used for scheme code loaded from files. - - WHITE_SPACES are other characters which should be treated like spaces - in programs. in both cases sparate characters with ":case " */ - -#define LINE_INCREMENTORS '\n' -#ifdef MSDOS -# define WHITE_SPACES ' ':case '\t':case '\r':case '\f':case 26 -#else -# define WHITE_SPACES ' ':case '\t':case '\r':case '\f' -#endif - -#ifdef __ia64__ -# define PTR2INT(x) ((long)(x)) -#else -# ifdef __x86_64 -# define PTR2INT(x) ((long)(x)) -# else -# define PTR2INT(x) ((int)(x)) -# endif -#endif - -/* Define BIGDIG to an integer type whose size is smaller than long if - you want bignums. BIGRAD is one greater than the biggest BIGDIG. */ -/* Define DIGSTOOBIG if the digits equivalent to a long won't fit in a long. */ -#ifdef BIGNUMS -# ifdef _UNICOS -# define DIGSTOOBIG -# if (1L << 31) <= USHRT_MAX -# define BIGDIG unsigned short -# else -# define BIGDIG unsigned int -# endif -# define BITSPERDIG 32 -# else -# define BIGDIG unsigned short -# define BITSPERDIG (sizeof(BIGDIG)*CHAR_BIT) -# endif -# define BIGRAD (1L << BITSPERDIG) -# define DIGSPERLONG ((sizet)((sizeof(long)*CHAR_BIT+BITSPERDIG-1)/BITSPERDIG)) -# define BIGUP(x) ((unsigned long)(x) << BITSPERDIG) -# define BIGDN(x) ((x) >> BITSPERDIG) -# define BIGLO(x) ((x) & (BIGRAD-1)) -/* NUMDIGS_MAX is the maximum number of digits for BIGNUMS */ -# ifndef NUMDIGS_MAX -# define NUMDIGS_MAX 1000 -# endif -#endif - -#ifndef BIGDIG -# ifndef FLOATS -# define INUMS_ONLY -# endif -#endif - -#ifndef __builtin_expect -# ifndef __GNUC__ -# define __builtin_expect(expr, expected) (expr) -# else -# if (__GNUC__ < 3) -# define __builtin_expect(expr, expected) (expr) -# endif -# endif -#endif - -#define SCM_EXPECT_TRUE(expr) (__builtin_expect(expr, !0)) -#define SCM_EXPECT_FALSE(expr) (__builtin_expect(expr, 0)) - -#ifdef __GNUC__ -# define FENCE asm volatile ("") -#else -# define FENCE /**/ -#endif - -#ifdef NON_PREEMPTIVE -# define VERIFY_INTS(s1, s2) /**/ -# define DEFER_INTS /**/ -# ifdef TICKS -# define POLL {if (0==poll_count--) poll_routine(); \ - if (0==tick_count--) tick_signal();} -# else -# define POLL {if (0==poll_count--) poll_routine();} -# endif -# define CHECK_INTS POLL -# define ALLOW_INTS POLL -# define DEFER_INTS_EGC /**/ -# define ALLOW_INTS_EGC /**/ -#else -# ifdef CAREFUL_INTS -typedef struct {char *fname; int linum;} ints_infot; -extern ints_infot *ints_info; -# define VERIFY_INTS(s1, s2) {if (!ints_disabled)\ - ints_warn(s1, s2, __FILE__, __LINE__); } -# define DEFER_INTS \ - {static ints_infot info = {__FILE__, __LINE__};\ - FENCE;if (1==ints_disabled) ints_viol(&info, 1);\ - else {ints_info = &info; ints_disabled = 1;FENCE;}} -# define ALLOW_INTS \ - {static ints_infot info = {__FILE__, __LINE__};\ - FENCE;if (1!=ints_disabled) ints_viol(&info, 0);\ - else {ints_info = &info; ints_disabled = 0;FENCE;CHECK_INTS}} -# define DEFER_INTS_EGC \ - {static ints_infot info = {__FILE__, __LINE__};\ - FENCE;if (1==ints_disabled) ints_viol(&info, 1);\ - else {ints_info = &info; ints_disabled = 2;FENCE;}} -# define ALLOW_INTS_EGC \ - {static ints_infot info = {__FILE__, __LINE__};\ - FENCE;if (1==ints_disabled) ints_viol(&info, 0);\ - else {ints_info = &info; ints_disabled = 0;FENCE;CHECK_INTS}} -# else -# define VERIFY_INTS(s1, s2) /**/ -# define DEFER_INTS {FENCE;ints_disabled = 1;FENCE;} -# define ALLOW_INTS {FENCE;ints_disabled = 0;FENCE;CHECK_INTS} -# define DEFER_INTS_EGC {FENCE;ints_disabled = 2;FENCE;} -# define ALLOW_INTS_EGC {FENCE;ints_disabled = 0;FENCE;CHECK_INTS} -# endif -# ifdef TICKS -# define CHECK_INTS {if (deferred_proc) (*deferred_proc)(); POLL;} -# define POLL {if (0==tick_count--) tick_signal();} -# else -# define CHECK_INTS {if (deferred_proc) (*deferred_proc)();} -# define POLL /**/ -# endif -#endif - -#ifndef STACK_LIMIT -# define STACK_LIMIT (HEAP_SEG_SIZE) -#endif - -#define CHECK_STACK {if (2 < scm_verbose) stack_check();} - -/* Cray machines have pointers that are incremented once for each word, - rather than each byte, the 3 most significant bits encode the byte - within the word. The following macros deal with this by storing the - native Cray pointers like the ones that looks like scm expects. This - is done for any pointers that might appear in the car of a cell, pointers - to vector elts, functions, &c are not munged. */ -#ifdef _UNICOS -# define SCM2PTR(x) ((int)(x) >> 3) -# define PTR2SCM(x) (((SCM)(x)) << 3) -# define POINTERS_MUNGED -#else -# ifdef TEST_SCM2PTR -# define SCM2PTR(x) ((x) ^ 0xf0L) -# define PTR2SCM(x) (((SCM)(x)) ^ 0xf0L) -# define POINTERS_MUNGED -# else -# define SCM2PTR(x) (x) -# define PTR2SCM(x) ((SCM)(x)) -# endif -#endif - -/* FIXABLE is non-null if its long argument can be encoded in an INUM. */ - -#define POSFIXABLE(n) SCM_EXPECT_TRUE((n) <= MOST_POSITIVE_FIXNUM) -#define NEGFIXABLE(n) SCM_EXPECT_TRUE((n) >= MOST_NEGATIVE_FIXNUM) -#define UNEGFIXABLE(n) SCM_EXPECT_TRUE((n) <= -MOST_NEGATIVE_FIXNUM) -#define FIXABLE(n) (POSFIXABLE(n) && NEGFIXABLE(n)) - -/* The following 8 definitions are defined automatically by the C - pre-processor. You will need to override these if you are - cross-compiling or if the C pre-processor has different properties - than the compiler. */ - -#if (((-1)%2==-1) && ((-1)%(-2)==-1) && (1%2==1) && (1%(-2)==1)) -#else -# define BADIVSGNS -#endif - -/* SRS is signed right shift */ -/*--- Turbo C++ v1.0 has a bug with right shifts of signed longs! - It is believed to be fixed in Turbo C++ v1.01 ---*/ -#if (-1==(((-1)<<2)+2)>>2) && (__TURBOC__ != 0x295) -# define SRS(x, y) ((x)>>y) -# ifdef __TURBOC__ -# define INUM(x) (((x)>>1)>>1) -# else -# define INUM(x) SRS(x, 2) -# endif -#else -# define SRS(x, y) (((x)<0) ? ~((~(x))>>y) : (x)>>y) -# define INUM(x) SRS(x, 2) -#endif - -#ifdef __TURBOC__ -/* shifts of more than one are done by a library call, single shifts are - performed in registers */ -# define MAKINUM(x) ((((x)<<1)<<1)+2L) -#else -# define MAKINUM(x) (((x)<<2)+2L) -#endif - -#ifdef _DCC -# define ASCII -#else -# if (('\n'=='\025') && (' '=='\100') && ('a'=='\201') && ('A'=='\301')) -# define EBCDIC -# endif -# if (('\n'=='\012') && (' '=='\040') && ('a'=='\141') && ('A'=='\101')) -# define ASCII -# endif -#endif - -/* CHAR_CODE_LIMIT is the number of distinct characters represented by - the unsigned char datatype. */ -/* MOST_POSITIVE_FIXNUM is the INUM closest to positive infinity. */ -/* MOST_NEGATIVE_FIXNUM is the INUM closest to negative infinity. */ - -#ifdef __STDC__ -# define HAVE_LIMITSH -#endif -#ifdef MWC -# define HAVE_LIMITSH -#endif - -#ifdef HAVE_LIMITSH -# include <limits.h> -# ifdef UCHAR_MAX -# define CHAR_CODE_LIMIT (UCHAR_MAX+1L) -# else -# define CHAR_CODE_LIMIT 256L -# endif -# define MOST_POSITIVE_FIXNUM (LONG_MAX>>2) -# ifdef _UNICOS /* Stupid cray bug */ -# define MOST_NEGATIVE_FIXNUM ((long)LONG_MIN/4) -# else -# define MOST_NEGATIVE_FIXNUM SRS((long)LONG_MIN, 2) -# endif /* UNICOS */ -#else -# define CHAR_CODE_LIMIT 256L -# define MOST_POSITIVE_FIXNUM ((long)((unsigned long)~0L>>3)) -# if (0 != ~0) -# define MOST_NEGATIVE_FIXNUM (-MOST_POSITIVE_FIXNUM-1) -# else -# define MOST_NEGATIVE_FIXNUM (-MOST_POSITIVE_FIXNUM) -# endif -#endif - -/* INTBUFLEN is the maximum number of characters neccessary for the - printed or string representation of an exact number. */ - -#ifndef CHAR_BIT -# define CHAR_BIT 8 -#endif -#ifndef LONG_BIT -# define LONG_BIT (CHAR_BIT*sizeof(long)/sizeof(char)) -#endif -#define INTBUFLEN (5+LONG_BIT) - -/* FLOBUFLEN is the maximum number of characters neccessary for the - printed or string representation of an inexact number. */ - -#ifdef FLOATS -# define FLOBUFLEN (10+2*(sizeof(double)/sizeof(char)*CHAR_BIT*3+9)/10) -#endif /* FLOATS */ - -/* MAXEXP is the maximum double precision exponent */ -/* FLTMAX is less than or equal the largest single precision float */ - -#ifdef FLOATS -# ifdef STDC_HEADERS -# ifndef macintosh -# ifndef PLAN9 -# include <float.h> -# endif -# endif -# endif -# ifdef DBL_MAX_10_EXP -# define MAXEXP DBL_MAX_10_EXP -# else -# define MAXEXP 308 /* IEEE doubles */ -# endif -# ifndef DBL_DIG -# define DBL_DIG 15 -# endif -# ifndef DBL_MAX_EXP -# define DBL_MAX_EXP 1024 -# endif -# ifdef FLT_MAX -# define FLTMAX FLT_MAX -# else -# define FLTMAX 1e+23 -# endif -#endif - -#ifdef FLOATS -# ifndef __MINGW32__ -/* Also asinh and acosh */ -# define HAVE_ATANH -# endif -#endif - -#ifdef unix -# define HAVE_UNIX -#endif -#ifdef __unix__ -# define HAVE_UNIX -#endif -#ifdef _IBMR2 -# define HAVE_UNIX -# define STDC_HEADERS -#endif - -/* Only some machines have pipes */ -#ifdef HAVE_UNIX - /* DJGPP (gcc for i386) defines unix! */ -# define HAVE_PIPE -#endif - -#ifndef macintosh -# ifndef _M_ARM -# ifndef _M_ARMT -# ifdef __WINDOWS__ /* there should be a better flag for this. */ -# define PROT386 -# endif -# endif -# endif -#endif - -/* PTR_LT defines how to compare two CELLPTRs (which may not be in the - same array). CELLPTR is a pointer to a cons cell which may be - compared or differenced. SCMPTR is used for stack bounds. */ - -#if defined(__TURBOC__) && !defined(__TOS__) -# ifdef PROT386 -typedef cell *CELLPTR; -typedef SCM *SCMPTR; -# define PTR_LT(x, y) (((long)(x)) < ((long)(y))) -# else -typedef cell huge *CELLPTR; -typedef SCM huge *SCMPTR; -# define PTR_LT(x, y) ((x) < (y)) -# endif -#else /* not __TURBOC__ */ -typedef cell *CELLPTR; -typedef SCM *SCMPTR; -# ifdef nosve -# define PTR_MASK 0xffffffffffff -# define PTR_LT(x, y) (((int)(x)&PTR_MASK) < ((int)(y)&PTR_MASK)) -# else -# define PTR_LT(x, y) ((x) < (y)) -# endif -#endif - -#define PTR_GT(x, y) PTR_LT(y, x) -#define PTR_LE(x, y) (!PTR_GT(x, y)) -#define PTR_GE(x, y) (!PTR_LT(x, y)) - -#ifdef STDC_HEADERS -# ifdef PLAN9 -# define sizet long -# else -# include <stdlib.h> -# ifdef AMIGA -# include <stddef.h> -# endif -# define sizet size_t -# endif -#else -# ifdef _SIZE_T -# define sizet size_t -# else -# define sizet unsigned int -# endif -#endif - -#ifdef macintosh -# include <unistd.h> -#endif - -#ifdef __FreeBSD__ -# include <unistd.h> -#endif - -#ifdef linux -# include <unistd.h> -#endif - -/* On VMS, GNU C's errno.h contains a special hack to get link attributes - for errno correct for linking with libc. */ - -#ifndef PLAN9 -# include <errno.h> -#endif - -/* SYSCALL retries system calls that have been interrupted (EINTR) */ -#ifdef vms -# ifndef __GNUC__ -# include <ssdef.h> -# define SCM_INTERRUPTED(errno) (EVMSERR==errno && \ - (vaxc$errno>>3)==(SS$_CONTROLC>>3)) -# endif -#endif - -#ifndef SCM_INTERRUPTED -# ifdef EINTR -# if (EINTR > 0) -# define SCM_INTERRUPTED(errno) (EINTR==errno) -# endif -# endif -#endif - -#ifndef SCM_INTERRUPTED -# define SCM_INTERRUPTED(errno) (0) -#endif - -#ifdef _WIN32 -// Windows doesn't set errno = EINTR -# define SYSCALL(line) do{line;while(GetLastError() == ERROR_OPERATION_ABORTED){SetLastError(0);Sleep(10);line};}while(0) -#else -# define SYSCALL(line) do{errno = 0;line}while(SCM_INTERRUPTED(errno)) -#endif - -#ifdef EMFILE -# ifdef ENFILE -# define SCM_NEED_FDS(errno) (EMFILE==errno || ENFILE==errno) -# else -# define SCM_NEED_FDS(errno) (EMFILE==errno) -# endif -#else -# define SCM_NEED_FDS(errno) (0) -#endif - -#define SCM_OPENCALL(line) {int gcs = 0;\ - while (!0) {errno = 0; if (line) break;\ - if (0==gcs++ && SCM_NEED_FDS(errno)) \ - gc_for_open_files();\ - else if (!SCM_INTERRUPTED(errno)) break;}} - -#ifndef MSDOS -# ifdef ARM_ULIB - extern volatile int errno; -# else - extern int errno; -# endif -#endif -#ifdef __TURBOC__ -# if (__TURBOC__==1) - /* Needed for TURBOC V1.0 */ - extern int errno; -# endif -#endif - -/* EXIT_SUCCESS is the default code to return from SCM if no errors - were encountered. EXIT_FAILURE is the default code to return from - SCM if errors were encountered. The return code can be explicitly - specified in a SCM program with (quit <n>). */ - -#ifndef EXIT_SUCCESS -# ifdef vms -# define EXIT_SUCCESS 1 -# else -# define EXIT_SUCCESS 0 -# endif -#endif -#ifndef EXIT_FAILURE -# ifdef vms -# define EXIT_FAILURE 2 -# else -# define EXIT_FAILURE 1 -# endif -#endif - -/* Yasuaki Honda, Bob Schumaker */ -/* Think C and Metrowerks lack isascii macro */ -#ifdef macintosh -# define isascii(c) ((unsigned)(c) <= 0x7f) -#endif -#ifdef _DCC -# define isascii(c) ((unsigned)(c) <= 0x7f) -#endif - -#ifdef __STDC__ -# define VOLATILE volatile -#else -# define VOLATILE /**/ -#endif - -#ifdef _MSC_VER - // Disable annoying warnings for: -# pragma warning (disable: 4102) // unreferenced label -# pragma warning (disable: 4018) // signed/unsigned mismatch -# pragma warning (disable: 4101) // unreferenced variables -# pragma warning (disable: 4244) // conversion from unsigned long to unsigned short -#endif - -/* end of automatic C pre-processor definitions */ diff --git a/SCM/scmflags.h b/SCM/scmflags.h deleted file mode 100644 index a3c5ea6..0000000 --- a/SCM/scmflags.h +++ /dev/null @@ -1,4 +0,0 @@ -//#undef SHORT_ALIGN -//#define CHEAP_CONTINUATIONS -//#undef STACK_GROWS_UP -//#define CONTINUATION_OTHER diff --git a/SCM/setjump.h b/SCM/setjump.h deleted file mode 100644 index e63423e..0000000 --- a/SCM/setjump.h +++ /dev/null @@ -1,125 +0,0 @@ -/* "setjump.h" memory and stack parameters. - * Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1997 Free Software Foundation, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/>. - */ - -/* Author: Aubrey Jaffer */ - -/* CELL_UP and CELL_DN are used by init_heap_seg to find cell aligned inner - bounds for allocated storage */ - -#ifdef PROT386 -/*in 386 protected mode we must only adjust the offset */ -# define CELL_UP(p) MK_FP(FP_SEG(p), ~7&(FP_OFF(p)+7)) -# define CELL_DN(p) MK_FP(FP_SEG(p), ~7&FP_OFF(p)) -#else -# ifdef _UNICOS -# define CELL_UP(p) (CELLPTR)(~1L & ((long)(p)+1L)) -# define CELL_DN(p) (CELLPTR)(~1L & (long)(p)) -# else -# define CELL_UP(p) (CELLPTR)(~(sizeof(cell)-1L) & ((long)(p)+sizeof(cell)-1L)) -# define CELL_DN(p) (CELLPTR)(~(sizeof(cell)-1L) & (long)(p)) -# endif /* UNICOS */ -#endif /* PROT386 */ - -/* These are parameters for controlling memory allocation. The heap - is the area out of which cons and object headers is allocated. - Each heap object is 8 bytes on a 32 bit machine and 16 bytes on a - 64 bit machine. The units of the _SIZE parameters are bytes. - - INIT_HEAP_SIZE is the initial size of heap. If this much heap is - allocated initially the heap will grow by half its current size - each subsequent time more heap is needed. - - If INIT_HEAP_SIZE heap cannot be allocated initially, HEAP_SEG_SIZE - will be used, and the heap will grow by HEAP_SEG_SIZE when more - heap is needed. HEAP_SEG_SIZE must fit into type sizet. This code - is in init_storage() and alloc_some_heap() in sys.c - - If INIT_HEAP_SIZE can be allocated initially, the heap will grow by - EXPHEAP(heap_cells) when more heap is needed. - - MIN_HEAP_SEG_SIZE is minimum size of heap to accept when more heap - is needed. - - INIT_MALLOC_LIMIT is the initial amount of malloc usage which will - trigger a GC. */ - -#define INIT_HEAP_SIZE (25000L*sizeof(cell)) -#define MIN_HEAP_SEG_SIZE (2000L*sizeof(cell)) -#ifdef _QC -# define HEAP_SEG_SIZE 32400L -#else -# ifdef sequent -# define HEAP_SEG_SIZE (7000L*sizeof(cell)) -# else -# define HEAP_SEG_SIZE (8100L*sizeof(cell)) -# endif -#endif -#define EXPHEAP(heap_cells) (heap_cells*2) -#define INIT_MALLOC_LIMIT 100000 - -/* ECACHE_SIZE is the number of cells in the copy-collected environment - cache used for environment frames */ -#define ECACHE_SIZE 2000 - -/* If fewer than MIN_GC_YIELD cells are recovered during a - cell-requested garbage collection (GC), then another heap segment - is allocated. */ - -#define MIN_GC_YIELD (heap_cells / 4) - -/* If fewer than MIN_MALLOC_YIELD cells are free after a - malloc-requested garbage collection (GC), then the mtrigger limit - is raised. */ - -#define MIN_MALLOC_YIELD (mtrigger / 8) - -/* NUM_HASH_BUCKETS is the number of symbol hash table buckets. */ - -#define NUM_HASH_BUCKETS 137 - -#ifdef IN_CONTINUE_C -# include "scm.h" -# define malloc(size) must_malloc((long)(size), s_cont) -# define free(obj) must_free((char *)(obj), 0) -#endif - -/* other.dynenv and other.parent get GCed just by being there. */ -struct scm_other {SCM dynenv; - SCM parent; -#ifdef RECKLESS - SCM stkframe[2]; -#else - SCM stkframe[4]; -#endif - SCM estk; - SCM *estk_ptr; - }; -#define CONTINUATION_OTHER struct scm_other -#define CONT(x) ((CONTINUATION *)CDR(x)) -#define SETCONT SETCDR -void dowinds P((SCM to)); - -#include "continue.h" - -typedef struct safeport { - SCM port; - jmp_buf jmpbuf; /* The usual C jmp_buf, not SCM's jump_buf */ - int ccnt; -} safeport; - -#define SAFEP_JMPBUF(sfp) (((safeport *)STREAM(sfp))->jmpbuf) diff --git a/SCM/setjump.mar b/SCM/setjump.mar deleted file mode 100644 index 3fc223c..0000000 --- a/SCM/setjump.mar +++ /dev/null @@ -1,39 +0,0 @@ - .title setjump and longjump - -; The VAX C runtime library uses the $unwind utility for -; implementing longjmp. That fails if your program does not -; follow normal stack decipline. This is a dirty implementation -; of setjmp and longjmp that does not have that problem. The -; names longjmp and setjmp are avoided so that the code can be -; linked with the vax c runtime library without name clashes. - -; This code was contributed by an anonymous reviewer from -; comp.sources.reviewed. - - .entry setjump,^M<IV> - movl 4(ap),r0 - movq r2,(r0)+ - movq r4,(r0)+ - movq r6,(r0)+ - movq r8,(r0)+ - movq r10,(r0)+ - movl fp,(r0)+ - movo 4(fp),(r0)+ - movq 20(fp),(r0) - clrl r0 - ret - - .entry longjump,^M<IV> - movl 4(ap),r0 - movq (r0)+,r2 - movq (r0)+,r4 - movq (r0)+,r6 - movq (r0)+,r8 - movq (r0)+,r10 - movl (r0)+,r1 - movo (r0)+,4(r1) - movq (r0),20(r1) - movl 8(ap),r0 - movl r1,fp - ret - .end diff --git a/SCM/setjump.s b/SCM/setjump.s deleted file mode 100644 index b96fb05..0000000 --- a/SCM/setjump.s +++ /dev/null @@ -1,40 +0,0 @@ -* setjmp on the Cray YMP does not save all registers. Although this -* conforms to the ANSI standard, it is not sufficient for SCM garbage -* collection and continuations. -* -* This is a version of setjump for the Cray YMP that does save all non- -* temporary registers. It might work for the XMP. It definitely will -* not work on the Cray 2. I do not know if the setjmp on the Cray 2 will -* work with SCM or not. -* -* This has been tested under Unicos 6.1. -* -* --Radey Shouman <rshouman@chpc.utexas.edu> -* - IDENT SETJUMP - ENTRY setjump -setjump = * - A1 1,A6 - A2 56 - A0 A1 - ,A0 T00,A2 - A0 A1+A2 - ,A0 B00,A2 - S1 0 - J B00 -* - ENTRY longjump -longjump = * - A1 1,A6 - A0 A1 - A2 56 - T00,A2 ,A0 - A0 A1+A2 - B00,A2 ,A0 - S1 2,A6 - J B00 - END -** Local Variables: -** tab-stop-list: (12 28 45) -** indent-tabs-mode: nil -** End: diff --git a/SCM/ugsetjump.s b/SCM/ugsetjump.s deleted file mode 100644 index e9e29f4..0000000 --- a/SCM/ugsetjump.s +++ /dev/null @@ -1,35 +0,0 @@ -#NO_APP -.text - .align 1 -.globl _setjump -_setjump: - .word 0x0 - movl 4(ap),r0 - movq r2,(r0)+ - movq r4,(r0)+ - movq r6,(r0)+ - movq r8,(r0)+ - movq r10,(r0)+ - movl fp,(r0)+ - movo 4(fp),(r0)+ - movq 20(fp),(r0) - clrl r0 - ret - ret - .align 1 -.globl _longjump -_longjump: - .word 0x0 - movl 4(ap),r0 - movq (r0)+,r2 - movq (r0)+,r4 - movq (r0)+,r6 - movq (r0)+,r8 - movq (r0)+,r10 - movl (r0)+,r1 - movo (r0)+,4(r1) - movq (r0),20(r1) - movl 8(ap),r0 - movl r1,fp - ret - ret |