commit 606245fc41918819dcb9c9278a61bf62373b8f19 Author: marting Date: Tue Sep 14 12:45:02 1999 +0000 *** empty log message *** diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..da8168b --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +# CVS default ignores begin +tags +TAGS +.make.state +.nse_depinfo +*~ +\#* +.#* +,* +_$* +*$ +*.old +*.bak +*.BAK +*.orig +*.rej +.del-* +*.a +*.olb +*.o +*.obj +*.so +*.exe +*.Z +*.elc +*.ln +core +# CVS default ignores end diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..704f0ba --- /dev/null +++ b/COPYING @@ -0,0 +1,46 @@ +Copyright (c) 1993-1999 Richard Kelsey and Jonathan Rees +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Distributing Autoconf Output +**************************** + +[excerpt from autoconf documentation] + + The configuration scripts that Autoconf produces are covered by the +GNU General Public License. This is because they consist almost +entirely of parts of Autoconf itself, rearranged somewhat, and Autoconf +is distributed under the terms of the GPL. As applied to Autoconf, the +GPL just means that you need to distribute `configure.in' along with +`configure'. + + Programs that use Autoconf scripts to configure themselves do not +automatically come under the GPL. Distributing an Autoconf +configuration script as part of a program is considered to be *mere +aggregation* of that work with the Autoconf script. Such programs are +not derivative works based on Autoconf; only their configuration scripts +are. We still encourage software authors to distribute their work under +terms like those of the GPL, but doing so is not required to use +Autoconf. diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..a85fdbb --- /dev/null +++ b/INSTALL @@ -0,0 +1,120 @@ + This is a generic INSTALL file for utilities distributions. +If this package does not come with, e.g., installable documentation or +data files, please ignore the references to them below. + + [For information specific to Scheme 48, see doc/install.txt.] + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation, and +creates the Makefile(s) (one in each subdirectory of the source +directory). In some packages it creates a C header file containing +system-dependent definitions. It also creates a file `config.status' +that you can run in the future to recreate the current configuration. + +To compile this package: + +1. Configure the package for your system. + + Normally, you just `cd' to the directory containing the package's +source code and type `./configure'. If you're using `csh' on an old +version of System V, you might need to type `sh configure' instead to +prevent `csh' from trying to execute `configure' itself. + + Running `configure' takes a minute or two. While it is running, it +prints some messages that tell what it is doing. If you don't want to +see the messages, run `configure' with its standard output redirected +to `/dev/null'; for example, `./configure >/dev/null'. + + To compile the package in a different directory from the one +containing the source code, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. If +for some reason `configure' is not in the source code directory that +you are configuring, then it will report that it can't find the source +code. In that case, run `configure' with the option `--srcdir=DIR', +where DIR is the directory that contains the source code. + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. Alternately, you can do so by consistently +giving a value for the `prefix' variable when you run `make', e.g., + make prefix=/usr/gnu + make prefix=/usr/gnu install + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH' or set the `make' +variable `exec_prefix' to PATH, the package will use PATH as the prefix +for installing programs and libraries. Data files and documentation +will still use the regular prefix. Normally, all files are installed +using the same prefix. + + Some packages pay attention to `--with-PACKAGE' options to +`configure', where PACKAGE is something like `gnu-as' or `x' (for the X +Window System). The README should mention any `--with-' options that +the package recognizes. + + `configure' ignores any other arguments that you give it. + + On systems that require unusual options for compilation or linking +that the package's `configure' script does not know about, you can give +`configure' initial values for variables by setting them in the +environment. In Bourne-compatible shells, you can do that on the +command line like this: + + CC='gcc -traditional' LIBS=-lposix ./configure + + Here are the `make' variables that you might want to override with +environment variables when running `configure'. + + For these variables, any value given in the environment overrides the +value that `configure' would choose: + + - Variable: CC + C compiler program. The default is `cc'. + + - Variable: INSTALL + Program to use to install files. The default is `install' if you + have it, `cp' otherwise. + + For these variables, any value given in the environment is added to +the value that `configure' chooses: + + - Variable: DEFS + Configuration options, in the form `-Dfoo -Dbar...'. Do not use + this variable in packages that create a configuration header file. + + - Variable: LIBS + Libraries to link with, in the form `-lfoo -lbar...'. + + If you need to do unusual things to compile the package, we encourage +you to figure out how `configure' could check whether to do them, and +mail diffs or instructions to the address given in the README so we +can include them in the next release. + +2. Type `make' to compile the package. If you want, you can override +the `make' variables CFLAGS and LDFLAGS like this: + + make CFLAGS=-O2 LDFLAGS=-s + +3. If the package comes with self-tests and you want to run them, +type `make check'. If you're not sure whether there are any, try it; +if `make' responds with something like + make: *** No way to make target `check'. Stop. +then the package does not come with self-tests. + +4. Type `make install' to install programs, data files, and +documentation. + +5. You can remove the program binaries and object files from the +source directory by typing `make clean'. To also remove the +Makefile(s), the header file containing system-dependent definitions +(if the package uses one), and `config.status' (all the files that +`configure' created), type `make distclean'. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need it if you want to regenerate +`configure' using a newer version of `autoconf'. diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..bfdd82c --- /dev/null +++ b/Makefile.in @@ -0,0 +1,535 @@ +# Scheme 48 Makefile +# Documentation in files INSTALL and doc/install.txt + +SHELL = /bin/sh + +### Filled in by `configure' ### +srcdir = @srcdir@ +VPATH = @srcdir@ +CC = @CC@ +DEFS = @DEFS@ +LIBS = @LIBS@ +CFLAGS = @CFLAGS@ +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ + +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +### End of `configure' section### + +bindir = $(exec_prefix)/bin +libdir = $(exec_prefix)/lib +incdir = $(exec_prefix)/include +manext = 1 +mandir = $(prefix)/man/man$(manext) + +# HP 9000 series, if you don't have gcc +# CC = cc +# CFLAGS = -Aa -O +Obb1800 +# DEFS = -D_HPUX_SOURCE -Dhpux + +# Ultrix +# LDFLAGS = -N + +.c.o: + $(CC) -c $(CPPFLAGS) $(DEFS) -I$(srcdir)/c $(CFLAGS) -o $@ $< + +# You might want to change RUNNABLE to "s48" +RUNNABLE = scheme48 +MANPAGE = $(RUNNABLE).$(manext) +LIB = $(libdir)/$(RUNNABLE) + +distdir = /tmp + +# If make barfs on this include line, just comment it out. It's only +# really needed if you want to build the linker or rebuild initial.image. +include $(srcdir)/build/filenames.make +# +#NetBSD make wants to see this instead: +#.include "$(srcdir)/build/filenames.make" + + +# Static linker: +# +# You only need the linker if you're going to make changes to the +# things that go into the initial.image, which in general means the +# files in rts/. If you decide you need to use the linker, then you +# gots your choice; it can run in just about any version of Scheme 48 +# or Pseudoscheme. (It has also been made to run in Scheme->C.) It +# doesn't matter a whole lot which Scheme you use as long as it's not +# broken or unavailable. The two best choices are: +# 1. As below: build the linker on the scheme48vm and scheme48.image +# that are in the current directory. +# 2. LINKER_VM = $(RUNNABLE) $(BIG_HEAP) +# LINKER_RUNNABLE = $(RUNNABLE) +# These settings requires you to already have a $(RUNNABLE) +# command. This is desirable if you are making changes to the +# system that might break scheme48vm and/or scheme48.image. But it +# requires you to have squirreled away a previous working version +# of scheme48. + +BIG_HEAP = -h 5000000 +LINKER_VM = ./$(VM) $(BIG_HEAP) +LINKER_RUNNABLE = $(LINKER_VM) -i $(IMAGE) +LINKER_IMAGE = build/linker.image +LINKER = $(LINKER_VM) -i $(LINKER_IMAGE) +START_LINKER = echo ',batch' && echo ',bench on' + +# -------------------- +# You shouldn't have to change anything below this point, except for possibly +# the external code rules. + +# Targets: + +IMAGE = scheme48.image +INITIAL = build/initial.image +VM = scheme48vm +UNIX_OBJS = c/unix/misc.o c/unix/io.o c/unix/fd-io.o c/unix/event.o +OBJS = c/scheme48vm.o c/scheme48heap.o c/extension.o c/external.o +FAKEHS = c/fake/dlfcn.h c/fake/sigact.h c/fake/strerror.h \ + c/fake/sys-select.h + +# Sources: + +CONFIG_FILES = scheme/interfaces.scm scheme/low-packages.scm \ + scheme/rts-packages.scm scheme/comp-packages.scm + +# Rules: + +# The following is the first rule and therefore the "make" command's +# default target. +enough: $(VM) $(IMAGE) go .notify + +# -------------------- +# External code to include in the VM +# After changing any of these you should delete `scheme48vm' and remake it. + +EXTERNAL_OBJECTS = $(SOCKET_OBJECTS) $(LOOKUP_OBJECTS) +EXTERNAL_FLAGS = $(SOCKET_FLAGS) +EXTERNAL_INITIALIZERS = $(SOCKET_INITIALIZERS) $(LOOKUP_INITIALIZERS) + +# Rules for any external code. + +# Socket rules + +c/unix/socket.o: c/scheme48.h c/fd-io.h c/event.h + +SOCKET_OBJECTS = c/unix/socket.o +SOCKET_LD_FLAGS = +SOCKET_INITIALIZERS = s48_init_socket + +# End of socket rules + +# Lookup rules (this is just for compatibility with old code) + +c/unix/dynamo.o: c/scheme48.h + +LOOKUP_OBJECTS = c/unix/dynamo.o +LOOKUP_INITIALIZERS = s48_init_external_lookup + +# End of lookup rules +# End of external rules +# -------------------- + +# The developers are curious to know. Don't be concerned if this fails. +.notify: build/minor-version-number + touch .notify + -echo Another 0.`cat $(srcdir)/build/minor-version-number` \ + installation. \ + | mail scheme-48-notifications@martigny.ai.mit.edu + +$(VM): c/main.o $(OBJS) $(UNIX_OBJS) $(LIBOBJS) $(EXTERNAL_OBJECTS) + rm -f /tmp/s48_external_$$$$.c && \ + build/build-external-modules /tmp/s48_external_$$$$.c \ + $(EXTERNAL_INITIALIZERS) && \ + $(CC) $(LDFLAGS) $(CFLAGS) -o $@ c/main.o $(OBJS) $(UNIX_OBJS) \ + /tmp/s48_external_$$$$.c \ + $(LIBOBJS) $(LIBS) \ + $(EXTERNAL_OBJECTS) $(EXTERNAL_LD_FLAGS) && \ + rm -f /tmp/s48_external_$$$$.c + +c/main.o: c/main.c c/scheme48vm.h c/scheme48heap.h + $(CC) -c $(CFLAGS) -o $@ \ + -DDEFAULT_IMAGE_NAME=\"$(LIB)/$(IMAGE)\" \ + $(CPPFLAGS) $(DEFS) c/main.c + +c/scheme48vm.o: c/prescheme.h c/scheme48vm.h c/scheme48heap.h c/event.h \ + c/io.h c/fd-io.h c/scheme48vm-prelude.h +c/scheme48heap.o: c/prescheme.h c/scheme48vm.h c/scheme48heap.h c/event.h \ + c/io.h c/fd-io.h +c/extension.o: c/sysdep.h $(FAKEHS) c/scheme48.h c/scheme48vm.h +c/external.o: c/sysdep.h $(FAKEHS) c/scheme48.h +c/unix/event.o: c/sysdep.h $(FAKEHS) c/scheme48vm.h c/scheme48heap.h \ + c/event.h c/fd-io.h +c/unix/fd-io.o: c/sysdep.h $(FAKEHS) c/scheme48vm.h c/scheme48heap.h \ + c/event.h c/fd-io.h +c/unix/misc.o: c/sysdep.h $(FAKEHS) +c/unix/io.o: c/io.h +c/fake/libdl1.o: c/fake/dlfcn.h +c/fake/libdl2.o: c/fake/dlfcn.h +c/fake/strerror.o: c/fake/strerror.h + +# -------------------- +# Make scheme48.image from initial.image and library .scm files. +# +# For bootstrap reasons, initial.image is *not* listed as a source, +# even though it really is. + +$(IMAGE): $(VM) scheme/env/init-defpackage.scm scheme/more-interfaces.scm \ + scheme/link-packages.scm scheme/more-packages.scm \ + $(usual-files) build/initial.debug build/build-usual-image + build/build-usual-image . "`pwd`/scheme" '$(IMAGE)' './$(VM)' \ + '$(INITIAL)' + +### Fake targets: all clean install man dist + +install: enough dirs inst-script inst-vm inst-misc inst-man inst-inc inst-image + +inst-vm: + $(INSTALL_PROGRAM) $(VM) $(LIB) + +inst-image: + rm -f '/tmp/$(IMAGE)' && \ + build/build-usual-image . '$(LIB)' '/tmp/$(IMAGE)' './$(VM)' \ + '$(INITIAL)' && \ + $(INSTALL_DATA) /tmp/$(IMAGE) $(LIB) && \ + rm /tmp/$(IMAGE) + +inst-man: + if [ -d $(mandir) -a -w $(mandir) ]; then \ + sed 's=LBIN=$(bindir)=g' doc/scheme48.man | \ + sed 's=LLIB=$(LIB)=g' | \ + sed 's=LS48=$(RUNNABLE)=g' >$(MANPAGE) && \ + $(INSTALL_DATA) $(MANPAGE) $(mandir) && \ + rm $(MANPAGE); \ + else \ + echo "$(mandir) not writable dir, not installing man page" \ + >&2; \ + fi + +inst-inc: + $(INSTALL_DATA) c/scheme48.h $(incdir) + +inst-misc: + for stub in env big opt misc link; do \ + for f in scheme/$$stub/*.scm; do \ + $(INSTALL_DATA) $$f $(LIB)/$$stub || exit 1; \ + done; \ + done && \ + for f in scheme/rts/*num.scm scheme/rts/jar-defrecord.scm; do \ + $(INSTALL_DATA) $$f $(LIB)/rts || exit 1; \ + done + +inst-script: + script=$(bindir)/$(RUNNABLE) && \ + echo '#!/bin/sh' >$$script && \ + echo >>$$script && \ + echo 'lib=$(LIB)' >>$$script && \ + echo 'exec $$lib/$(VM) -o $$lib/$(VM) -i $$lib/$(IMAGE) "$$@"' \ + >>$$script && \ + chmod +x $$script + +# Script to run scheme48 in this directory. +go: + echo '#!/bin/sh' >$@ && \ + echo >>$@ && \ + echo "lib=`pwd`" >>$@ && \ + echo 'exec $$lib/$(VM) -o $$lib/$(VM) -i $$lib/$(IMAGE) "$$@"' \ + >>$@ && \ + chmod +x $@ + +dirs: + for dir in $(libdir) $(bindir) $(incdir); do \ + [ -d $$dir -a -w $$dir ] || { \ + echo "$$dir not a writable directory" >&2; \ + exit 1; \ + }; \ + done + { mkdir -p $(LIB) && [ -w $(LIB) ]; } || { \ + echo "$(LIB) not a writable directory" >&2; \ + exit 1; \ + } + for dir in rts env big opt misc link; do \ + { mkdir -p $(LIB)/$$dir && [ -w $(LIB)/$$dir ]; } || { \ + echo "$(LIB)/$$dir not a writable directory" >&2; \ + exit 1; \ + }; \ + done + +configure: configure.in + autoheader && autoconf + +clean: + -rm -f $(VM) *.o c/unix/*.o c/*.o c/fake/*.o \ + TAGS $(IMAGE) \ + build/*.tmp $(MANPAGE) build/linker.image \ + scheme/debug/*.image scheme/debug/*.debug config.cache \ + scheme/vm/scheme48vm.c scheme/vm/scheme48heap.c \ + go $(distname) + +distclean: clean + rm -f Makefile config.log config.status c/sysdep.h + +check: $(VM) $(IMAGE) scheme/debug/check.scm + ( \ + echo ',batch'; \ + echo ',translate =scheme48 scheme'; \ + echo ',config ,load scheme/debug/test.scm'; \ + echo ',exec ,load scheme/debug/check.scm'; \ + echo ',exec (done)' \ + ) | ./$(VM) -i $(IMAGE) + +# -------------------- +# Rules from here on down are not essential for the basic installation +# procedure, and are not expected to work when srcdir is not the +# distribution directory. + +all: vm linker + $(MAKE) image +vm: $(VM) +linker: $(LINKER_IMAGE) +image: $(INITIAL) + $(MAKE) $(IMAGE) + +tags: + etags scheme/vm/arch.scm scheme/rts/*.scm scheme/bcomp/*.scm \ + scheme/*.scm scheme/env/*.scm scheme/big/*.scm scheme/link/*.scm \ + scheme/opt/*.scm scheme/debug/*.scm scheme/misc/*.scm + +# -------------------- +# Distribution... + +# DISTFILES should include all sources. +DISTFILES = README COPYING INSTALL configure \ + acconfig.h configure.in Makefile.in install-sh \ + doc/*.ps doc/*.txt doc/html/*.html doc/scheme48.man \ + doc/src/*.tex doc/src/*.sty \ + emacs/README build/*-version-number build/*.exec \ + build/*.lisp build/build-usual-image build/filenames.make \ + build/filenames.scm build/initial.debug \ + build/initial.image build/initial.scm \ + build/build-external-modules \ + c/*.[ch] c/*/*.[ch] c/scheme48.h.in \ + emacs/*.el gdbinit \ + scheme/*.scm scheme/*/*.scm \ + ps-compiler \ + c/sysdep.h.in + +distname = $(RUNNABLE)-0.`cat build/minor-version-number` + +dist: build/initial.image + distname=$(distname) && \ + distfile=$(distdir)/$$distname.tgz && \ + if [ -d $(distdir) ] && \ + [ -w $$distfile -o -w $(distdir) ]; then \ + rm -f $$distname && \ + ln -s . $$distname && \ + files='' && \ + for i in $(DISTFILES); do \ + if [ "$$i" != "c/sysdep.h" ]; then \ + files="$$files $$distname/$$i"; \ + fi \ + done && \ + tar -cf - $$files | \ + gzip --best >$$distfile && \ + rm $$distname; \ + else \ + echo "Can't write $$distfile" >&2; \ + exit 1; \ + fi + +# Increment the minor version number +inc: + f=build/minor-version-number && \ + expr `cat $$f` + 1 >$$f.tmp && \ + mv $$f.tmp $$f && \ + echo '(define version-info "0.'`cat $$f`'")' \ + >scheme/env/version-info.scm + + +# -------------------- +# Generate build/filenames.make from *packages.scm +# +# This hack traces the module dependencies described in the +# various configuration files and converts them into dependency lists +# that "make" can use for its purposes. +# +# Since the distribution comes with a filenames.make, this rule +# shouldn't be invoked for simple installations. But it will be used +# if you change any of the *-packages.scm files. +# +# You can actually run the forms in filenames.scm in any Scheme +# implementation that has syntax-rules and explicit-renaming low-level +# macros (e.g., most versions of Scheme 48 and Pseudoscheme). +# If there are errors running this script, and you need to debug, +# don't use the initial.image, use something that has a reasonable +# environment. +# +# If this fails and you don't feel like debugging or fixing the problem, +# try "touch filenames.make" and hope for the best. + +PACKAGES=scheme/packages.scm scheme/rts-packages.scm scheme/alt-packages.scm \ + scheme/comp-packages.scm scheme/initial-packages.scm \ + scheme/link-packages.scm scheme/more-packages.scm \ + build/filenames.scm + +build/filenames.make: $(PACKAGES) + $(MAKE) $(VM) PACKAGES= + ./$(VM) -i $(srcdir)/$(INITIAL) -a batch C compiler + c/ c source files + sysdep.h.in input to configure + scheme48vm.c most of the VM (generated by Pre-Scheme compiler) + scheme48vm.h extern declarations for scheme48vm.c + scheme48heap.c storage management (generated by Pre-Scheme compiler) + scheme48heap.h extern declarations for scheme48heap.c + main.c entry point for the VM + prescheme.h part of the VM + extension.c default definition of vm_extension() + scheme48.h C declarations and macros for Scheme 48 data structures + old-scheme48.h old version, included for compatibility + c-mods.h minor additions to the C language + event.h header file for OS interface + io.h ditto + fd-io.h ditto + socket.c socket support + dynamo.c dynamic loading support + unix/ Unix-specific source files + posix/ C half of an unfinished interface to POSIX system calls + fake/ C files for insufficiently POSIX-compliant systems + build/ code for building the system + filenames.make included by Makefile, generated automatically + filenames.scm code for generating filenames.make + initial.image an image file containing a minimal Scheme system + initial.debug debugging database for same + initial.scm script for creating initial.image + build-usual-image script for creating scheme48.image + build-external-modules script for creating external-module initializer + emacs/ gnu emacs support diff --git a/acconfig.h b/acconfig.h new file mode 100644 index 0000000..ece5e70 --- /dev/null +++ b/acconfig.h @@ -0,0 +1,32 @@ +/* + * HAVE_SIGACTION is defined iff sigaction() is available. + */ +#undef HAVE_SIGACTION + +/* + * HAVE_STRERROR is defined iff the standard libraries provide strerror(). + */ +#undef HAVE_STRERROR + +/* + * NLIST_HAS_N_NAME is defined iff a struct nlist has an n_name member. + * If it doesn't then we assume it has an n_un member which, in turn, + * has an n_name member. + */ +#undef NLIST_HAS_N_NAME + +/* + * HAVE_SYS_SELECT_H is defined iff we have the include file sys/select.h. + */ +#undef HAVE_SYS_SELECT_H + +/* + * USCORE is defined iff C externals are prepended with an underscore. + */ +#undef USCORE + +@BOTTOM@ + +#include "fake/sigact.h" +#include "fake/strerror.h" +#include "fake/sys-select.h" diff --git a/build/build-external-modules b/build/build-external-modules new file mode 100755 index 0000000..aad9f2f --- /dev/null +++ b/build/build-external-modules @@ -0,0 +1,28 @@ +#!/bin/sh +# Build external-modules.c. + +target="$1" +shift + +( + cat <"$target" diff --git a/build/build-usual-image b/build/build-usual-image new file mode 100755 index 0000000..ea3f23e --- /dev/null +++ b/build/build-usual-image @@ -0,0 +1,33 @@ +#!/bin/sh +# Build the usual development environment image. + +date=`date` +srcdir=$1 +lib=$2 +image=$3 +vm=$4 +initial=$5 +USER=${USER-`logname 2>/dev/null || echo '*GOK*'`} + +$vm -i $initial -a batch < name +(0 low-structures) +(1 debug-low-structures) +(2 alt-features-structures) +(3 cheat-features-structures) +(4 the-interfaces) +(5 meta-module-system) +(6 run-time-structures) +(7 compiler-structures) +(8 initial-structures) +(9 debug-structures) +(10 usual-structures) +(11 alt-low-structures) +(12 compiler-structures) +(13 linker-structures) +(14 scheme-level-0) +(15 scheme-level-1) +(16 records) +(17 export-the-record-type) +(18 define-record-types) +(19 methods) +(20 number-i/o) +(21 fluids) +(22 wind) +(23 session-data) +(24 i/o) +(25 channels) +(26 channel-i/o) +(27 conditions) +(28 writing) +(29 reading) +(30 scheme-level-2) +(31 features) +(32 templates) +(33 continuations) +(34 more-types) +(35 enumerated) +(36 architecture) +(37 exceptions) +(38 interrupts) +(39 threads) +(40 scheduler) +(41 root-scheduler) +(42 enum-case) +(43 queues) +(44 locks) +(45 usual-resumer) +(46 weak) +(47 display-conditions) +(48 meta-types) +(49 bindings) +(50 names) +(51 thingies) +(52 nodes) +(53 compiler-envs) +(54 syntactic) +(55 usual-macros) +(56 var-utilities) +(57 debug-data) +(58 stack-check) +(59 segments) +(60 primops) +(61 reconstruction) +(62 compiler) +(63 reading-forms) +(64 flat-environments) +(65 interfaces) +(66 packages) +(67 scan-package) +(68 optimizer) +(69 compile-packages) +(70 defpackage) +(71 types) +(72 module-system) +(73 usages) +(74 analysis) +(75 inline) +(76 strong) +(77 tables) +(78 filenames) +(79 environments) +(80 evaluation) +(81 ensures-loaded) +(82 for-reification) +(83 scheme) +(84 mini-command) +(85 initial-system) +- +; Location uid -> (name . package-uid) +(0 (and . 14)) +(1 (cond . 14)) +(2 (do . 14)) +(3 (let . 14)) +(4 (let* . 14)) +(5 (or . 14)) +(6 (code-quote . 14)) +(7 (quote . 14)) +(8 (unspecific . 14)) +(9 (define-syntax . 14)) +(10 (lambda . 14)) +(11 (begin . 14)) +(12 (unassigned . 14)) +(13 (flat-lambda . 14)) +(14 (define . 14)) +(15 (primitive-procedure . 14)) +(16 (if . 14)) +(17 (letrec-syntax . 14)) +(18 (%file-name% . 14)) +(19 (let-syntax . 14)) +(20 (structure-ref . 14)) +(21 (loophole . 14)) +(22 (letrec . 14)) +(23 (lap . 14)) +(24 (set! . 14)) +(25 (call . 14)) +(26 (atan . 14)) +(27 (set-location-defined?! . 14)) +(28 (acos . 14)) +(29 (vm-extension . 14)) +(30 (asin . 14)) +(31 (location-defined? . 14)) +(32 (time . 14)) +(33 (template-set! . 14)) +(34 (cons . 14)) +(35 (wait . 14)) +(36 (trap . 14)) +(37 (assq . 14)) +(38 (make-weak-pointer . 14)) +(39 (lookup-shared-binding . 14)) +(40 (push . 14)) +(41 (set-contents! . 14)) +(42 (read-char . 14)) +(43 (make-cell . 14)) +(44 (sqrt . 14)) +(45 (* . 14)) +(46 (contents . 14)) +(47 (+ . 14)) +(48 (peek-char . 14)) +(49 (- . 14)) +(50 (continuation-set! . 14)) +(51 (/ . 14)) +(52 (weak-pointer? . 14)) +(53 (quotient . 14)) +(54 (close-channel . 14)) +(55 (channel-abort . 14)) +(56 (char? . 14)) +(57 (< . 14)) +(58 (= . 14)) +(59 (> . 14)) +(60 (make-location . 14)) +(61 (imag-part . 14)) +(62 (set-port-data! . 14)) +(63 (make-template . 14)) +(64 (real? . 14)) +(65 (real-part . 14)) +(66 (get-cont-from-heap . 14)) +(67 (record-length . 14)) +(68 (port-data . 14)) +(69 (pair? . 14)) +(70 (make-port . 14)) +(71 (set-port-lock! . 14)) +(72 (return-from-exception . 14)) +(73 (location? . 14)) +(74 (channel-maybe-read . 14)) +(75 (checked-record-ref . 14)) +(76 (add-finalizer! . 14)) +(77 (rational? . 14)) +(78 (template? . 14)) +(79 (port-lock . 14)) +(80 (vector-length . 14)) +(81 (make-continuation . 14)) +(82 (string-length . 14)) +(83 (shared-binding-ref . 14)) +(84 (port? . 14)) +(85 (angle . 14)) +(86 (false . 14)) +(87 (remainder . 14)) +(88 (continuation? . 14)) +(89 (binary-reduce1 . 14)) +(90 (binary-reduce2 . 14)) +(91 (char= . 14)) +(96 (with-continuation . 14)) +(97 (floor . 14)) +(98 (apply . 14)) +(99 (memory-status . 14)) +(100 (checked-record-set! . 14)) +(101 (inexact->exact . 14)) +(102 (exact->inexact . 14)) +(103 (error . 14)) +(104 (extended-number-length . 14)) +(105 (open-channels-list . 14)) +(106 (channel-id . 14)) +(107 (shared-binding-set! . 14)) +(108 (numerator . 14)) +(109 (eof-object . 14)) +(110 (byte-vector-length . 14)) +(111 (record-ref . 14)) +(112 (make-polar . 14)) +(113 (write-char . 14)) +(114 (symbol->string . 14)) +(115 (exact? . 14)) +(116 (vector-ref . 14)) +(117 (set-current-thread! . 14)) +(118 (immutable? . 14)) +(119 (set-exception-handlers! . 14)) +(120 (string-ref . 14)) +(121 (set-port-index! . 14)) +(122 (make-shared-binding . 14)) +(123 (current-thread . 14)) +(124 (channel-status . 14)) +(125 (set-port-limit! . 14)) +(126 (shared-binding-name . 14)) +(127 (port-index . 14)) +(128 (make-immutable! . 14)) +(129 (set-enabled-interrupts! . 14)) +(130 (port-limit . 14)) +(131 (ascii->char . 14)) +(132 (char->ascii . 14)) +(133 (undefine-shared-binding . 14)) +(134 (record-set! . 14)) +(135 (shared-binding? . 14)) +(136 (eof-object? . 14)) +(137 (set-interrupt-handlers! . 14)) +(138 (record . 14)) +(139 (schedule-interrupt . 14)) +(140 (channel-maybe-write . 14)) +(141 (extended-number-ref . 14)) +(142 (vector-set! . 14)) +(143 (copy-bytes! . 14)) +(144 (string-set! . 14)) +(145 (call-external-value . 14)) +(146 (values . 14)) +(147 (intern . 14)) +(148 (vector . 14)) +(149 (byte-vector-ref . 14)) +(150 (make-double . 14)) +(151 (make-record . 14)) +(152 (set-location-id! . 14)) +(153 (location-id . 14)) +(154 (bitwise-and . 14)) +(155 (eq? . 14)) +(156 (write-image . 14)) +(157 (double? . 14)) +(158 (extended-number-set! . 14)) +(159 (make-vector . 14)) +(160 (record? . 14)) +(161 (make-string . 14)) +(162 (set-port-buffer! . 14)) +(163 (primitive-catch . 14)) +(164 (string-hash . 14)) +(165 (template-length . 14)) +(166 (number? . 14)) +(167 (port-buffer . 14)) +(168 (byte-vector-set! . 14)) +(169 (bitwise-ior . 14)) +(170 (set-car! . 14)) +(171 (closure-env . 14)) +(172 (vector? . 14)) +(173 (bitwise-not . 14)) +(174 (set-cdr! . 14)) +(175 (symbol? . 14)) +(176 (string? . 14)) +(177 (car . 14)) +(178 (bitwise-xor . 14)) +(179 (cdr . 14)) +(180 (find-all-records . 14)) +(181 (continuation-length . 14)) +(182 (log . 14)) +(183 (message . 14)) +(184 (tan . 14)) +(185 (collect . 14)) +(186 (cos . 14)) +(187 (channel-os-index . 14)) +(188 (make-extended-number . 14)) +(189 (set-port-status! . 14)) +(190 (sin . 14)) +(191 (exp . 14)) +(192 (pop . 14)) +(193 (port-status . 14)) +(194 (return-from-callback . 14)) +(195 (set-port-locked?! . 14)) +(196 (make-byte-vector . 14)) +(197 (weak-pointer-ref . 14)) +(198 (call-with-values . 14)) +(199 (denominator . 14)) +(200 (reverse-list->string . 14)) +(201 (port-locked? . 14)) +(202 (extended-number? . 14)) +(203 (shared-binding-is-import? . 14)) +(204 (find-all . 14)) +(205 (cell-ref . 14)) +(206 (byte-vector? . 14)) +(207 (string=? . 14)) +(208 (open-channel . 14)) +(209 (channel? . 14)) +(210 (make-rectangular . 14)) +(211 (set-session-data! . 14)) +(212 (template-ref . 14)) +(213 (make-closure . 14)) +(214 (session-data . 14)) +(215 (integer? . 14)) +(216 (signal-condition . 14)) +(217 (port-handler . 14)) +(218 (set-port-pending-eof?! . 14)) +(219 (define-shared-binding . 14)) +(220 (arithmetic-shift . 14)) +(221 (complex? . 14)) +(222 (port-pending-eof? . 14)) +(223 (cell-set! . 14)) +(224 (binary-comparison-reduce2 . 14)) +(225 (closure? . 14)) +(226 (continuation-ref . 14)) +(227 (closure-template . 14)) +(228 (current-cont . 14)) +(229 (char->integer . 14)) +(230 (integer->char . 14)) +(231 (ascii-limit . 14)) +(232 (ascii-whitespaces . 14)) +(233 (procedure? . 14)) +(234 (invoke-closure . 14)) +(235 (primitive-cwcc . 14)) +(236 (make-undefined-location . 14)) +(237 (location-assigned? . 14)) +(238 (vector-unassigned? . 14)) +(239 (string-copy . 14)) +(240 (string->symbol . 14)) +(241 (input-port? . 14)) +(242 (output-port? . 14)) +(243 (make-code-vector . 14)) +(244 (code-vector? . 14)) +(245 (code-vector-length . 14)) +(246 (code-vector-ref . 14)) +(247 (code-vector-set! . 14)) +(248 (channel-read . 14)) +(249 (buffer-length . 14)) +(250 (channel-write . 14)) +(251 (lookup-imported-binding . 14)) +(252 (lookup-exported-binding . 14)) +(253 (define-imported-binding . 14)) +(254 (define-exported-binding . 14)) +(255 (undefine-imported-binding . 14)) +(256 (undefine-exported-binding . 14)) +(257 (debug-message . 14)) +(258 (make-condition . 14)) +(259 (signal . 14)) +(260 (warn . 14)) +(261 (syntax-error . 14)) +(262 (call-error . 14)) +(263 (case . 15)) +(264 (quasiquote . 15)) +(265 (syntax-rules . 15)) +(266 (not . 15)) +(267 (boolean? . 15)) +(268 (eqv? . 15)) +(269 (equal? . 15)) +(270 (max . 15)) +(271 (min . 15)) +(272 (max-or-min . 15)) +(273 (abs . 15)) +(274 (zero? . 15)) +(275 (positive? . 15)) +(276 (negative? . 15)) +(277 (even? . 15)) +(278 (odd? . 15)) +(279 (caar . 15)) +(280 (cadr . 15)) +(281 (cdar . 15)) +(282 (cddr . 15)) +(283 (caaar . 15)) +(284 (caadr . 15)) +(285 (cadar . 15)) +(286 (caddr . 15)) +(287 (cdaar . 15)) +(288 (cdadr . 15)) +(289 (cddar . 15)) +(290 (cdddr . 15)) +(291 (caaaar . 15)) +(292 (caaadr . 15)) +(293 (caadar . 15)) +(294 (caaddr . 15)) +(295 (cadaar . 15)) +(296 (cadadr . 15)) +(297 (caddar . 15)) +(298 (cadddr . 15)) +(299 (cdaaar . 15)) +(300 (cdaadr . 15)) +(301 (cdadar . 15)) +(302 (cdaddr . 15)) +(303 (cddaar . 15)) +(304 (cddadr . 15)) +(305 (cdddar . 15)) +(306 (cddddr . 15)) +(307 (null? . 15)) +(308 (list . 15)) +(309 (length . 15)) +(310 (real-length . 15)) +(311 (append . 15)) +(312 (reverse . 15)) +(313 (append-reverse . 15)) +(314 (list-tail . 15)) +(315 (list-ref . 15)) +(316 (mem . 15)) +(317 (memq . 15)) +(318 (memv . 15)) +(319 (member . 15)) +(320 (ass . 15)) +(321 (assv . 15)) +(322 (assoc . 15)) +(323 (list? . 15)) +(324 (char>? . 15)) +(325 (char>=? . 15)) +(326 (char<=? . 15)) +(327 (char-whitespace? . 15)) +(328 (char-lower-case? . 15)) +(329 (char-upper-case? . 15)) +(330 (char-numeric? . 15)) +(331 (char-alphabetic? . 15)) +(332 (char-case-delta . 15)) +(333 (make-character-map . 15)) +(334 (upcase-map . 15)) +(335 (char-upcase . 15)) +(336 (downcase-map . 15)) +(337 (char-downcase . 15)) +(338 (char-ci-compare . 15)) +(339 (char-ci=? . 15)) +(340 (char-ci? . 15)) +(343 (char-ci>=? . 15)) +(344 (string . 15)) +(345 (substring . 15)) +(346 (string-append . 15)) +(347 (string->list . 15)) +(348 (list->string . 15)) +(349 (string-fill! . 15)) +(350 (make-string=? . 15)) +(351 (string-ci=? . 15)) +(352 (make-string? . 15)) +(356 (string<=? . 15)) +(357 (string>=? . 15)) +(358 (string-ci>? . 15)) +(359 (string-ci<=? . 15)) +(360 (string-ci>=? . 15)) +(361 (vector->list . 15)) +(362 (list->vector . 15)) +(363 (vector-fill! . 15)) +(364 (map . 15)) +(365 (map1 . 15)) +(366 (map2+ . 15)) +(367 (for-each . 15)) +(368 (for-each1 . 15)) +(369 (for-each2+ . 15)) +(370 (delay . 15)) +(371 (make-promise . 15)) +(372 (force . 15)) +(373 (unspecific . 15)) +(374 (reduce . 15)) +(375 (filter . 15)) +(376 (pos . 15)) +(377 (posq . 15)) +(378 (posv . 15)) +(379 (position . 15)) +(380 (any . 15)) +(381 (every . 15)) +(382 (sublist . 15)) +(383 (last . 15)) +(384 (insert . 15)) +(385 (fold . 15)) +(386 (fold->2 . 15)) +(387 (fold->3 . 15)) +(388 (inexact? . 15)) +(389 (modulo . 15)) +(390 (ceiling . 15)) +(391 (truncate . 15)) +(392 (round . 15)) +(393 (gcd . 15)) +(394 (euclid . 15)) +(395 (lcm . 15)) +(396 (expt . 15)) +(397 (raise-to-integer-power . 15)) +(398 (rationalize . 15)) +(399 (simplest-rational . 15)) +(400 (record-type . 16)) +(401 (*record-type-uid* . 16)) +(402 (*record-type* . 16)) +(403 (make-record-type . 16)) +(404 (record-type? . 16)) +(405 (record-type-resumer . 16)) +(406 (set-record-type-resumer! . 16)) +(407 (record-type-uid . 16)) +(408 (record-type-name . 16)) +(409 (record-type-field-names . 16)) +(410 (record-type-number-of-fields . 16)) +(411 (record-type-discloser . 16)) +(412 (set-record-type-discloser! . 16)) +(413 (record-type-fields . 16)) +(414 (record-field-index . 16)) +(415 (record-constructor . 16)) +(416 (record-accessor . 16)) +(417 (record-modifier . 16)) +(418 (record-predicate . 16)) +(419 (define-record-discloser . 16)) +(420 (make-default-record-discloser . 16)) +(421 (disclose-record . 16)) +(422 (define-record-resumer . 16)) +(423 (default-record-resumer . 16)) +(424 (initialize-records! . 16)) +(425 (resume-record . 16)) +(426 (:record-type . 16)) +(427 (define-record-type . 18)) +(428 (define-constructor . 18)) +(429 (define-accessors . 18)) +(430 (define-accessor . 18)) +(431 (:simple-type . 19)) +(432 (really-make-simple-type . 19)) +(433 (simple-type-id . 19)) +(434 (simple-type-priority . 19)) +(435 (simple-type-predicate . 19)) +(436 (simple-type-superiors . 19)) +(437 (simple-type? . 19)) +(438 (make-simple-type . 19)) +(439 (compute-priority . 19)) +(440 (*increment* . 19)) +(441 (%type-priority . 19)) +(442 (%type-predicate . 19)) +(443 (%same-type? . 19)) +(444 (define-simple-type . 19)) +(445 (:syntax . 19)) +(446 (:values . 19)) +(447 (value? . 19)) +(448 (:value . 19)) +(449 (:zero . 19)) +(450 (:number . 19)) +(451 (:complex . 19)) +(452 (:real . 19)) +(453 (:rational . 19)) +(454 (:integer . 19)) +(455 (:exact-integer . 19)) +(456 (:boolean . 19)) +(457 (:symbol . 19)) +(458 (:char . 19)) +(459 (:null . 19)) +(460 (:pair . 19)) +(461 (:vector . 19)) +(462 (:string . 19)) +(463 (:procedure . 19)) +(464 (:input-port . 19)) +(465 (:output-port . 19)) +(466 (:eof-object . 19)) +(467 (:record . 19)) +(468 (record-type-priority . 19)) +(469 (:method-info . 19)) +(470 (really-make-method-info . 19)) +(471 (method-info-proc . 19)) +(472 (method-info-n-ary? . 19)) +(473 (method-info-types . 19)) +(474 (method-info? . 19)) +(475 (make-method-info . 19)) +(476 (empty-method-list . 19)) +(477 (insert-method . 19)) +(478 (same-applicability? . 19)) +(479 (every2 . 19)) +(480 (more-specific? . 19)) +(481 (more-specific-type? . 19)) +(482 (:method-table . 19)) +(483 (really-make-method-table . 19)) +(484 (method-table-id . 19)) +(485 (method-table-set-perform! . 19)) +(486 (method-table-get-perform . 19)) +(487 (make-generic . 19)) +(488 (method-table-prototype . 19)) +(489 (method-table-methods . 19)) +(490 (set-method-table-methods! . 19)) +(491 (method-table? . 19)) +(492 (make-method-table . 19)) +(493 (make-cell-for-generic . 19)) +(494 (add-to-method-table! . 19)) +(495 (set-final-method! . 19)) +(496 (apply-generic . 19)) +(497 (define-generic . 19)) +(498 (methods->perform . 19)) +(499 (last-action . 19)) +(500 (one-action . 19)) +(501 (argument-sequence-predicate . 19)) +(502 (check-for-next . 19)) +(503 (check-next . 19)) +(504 (method-info . 19)) +(505 (method-internal . 19)) +(506 (with-next-method . 19)) +(507 (define-method . 19)) +(508 (&add-method! . 19)) +(509 (add-method! . 19)) +(510 (&type-predicate . 19)) +(511 (type-predicate . 19)) +(512 (&type-priority . 19)) +(513 (type-priority . 19)) +(514 (&type-superiors . 19)) +(515 (type-superiors . 19)) +(516 (&same-type? . 19)) +(517 (same-type? . 19)) +(518 (:singleton . 19)) +(519 (singleton . 19)) +(520 (singleton-value . 19)) +(521 (compare-to . 19)) +(522 (&disclose . 19)) +(523 (disclose . 19)) +(524 (proc->discloser . 19)) +(525 (&number->string . 20)) +(526 (real-number->string . 20)) +(527 (number->string . 20)) +(528 (integer->string . 20)) +(529 (string->number . 20)) +(530 (&really-string->number . 20)) +(531 (really-string->number . 20)) +(532 (:integer-string . 20)) +(533 (set-exactness . 20)) +(534 (string->integer . 20)) +(535 (:thread . 21)) +(536 (make-thread . 21)) +(537 (thread-dynamic-point . 21)) +(538 (thread-dynamic-env . 21)) +(539 (get-dynamic-env . 21)) +(540 (set-dynamic-env! . 21)) +(541 (get-dynamic-point . 21)) +(542 (set-dynamic-point! . 21)) +(543 (initialize-dynamic-state! . 21)) +(544 (with-dynamic-env . 21)) +(545 (empty-dynamic-env . 21)) +(546 (:fluid . 21)) +(547 (make-fluid . 21)) +(548 (fluid-top-level-value . 21)) +(549 (set-fluid-top-level-value! . 21)) +(550 (fluid . 21)) +(551 (set-fluid! . 21)) +(552 (let-fluid . 21)) +(553 (let-fluids . 21)) +(554 (define-enumeration . 35)) +(555 (components . 35)) +(556 (enum . 35)) +(557 (enumerand->name . 35)) +(558 (name->enumerand . 35)) +(559 (lookup-enumerand . 35)) +(560 (architecture-version . 36)) +(561 (bits-used-per-byte . 36)) +(562 (byte-limit . 36)) +(563 (define-instruction-set . 36)) +(564 (op . 36)) +(565 (op-enumeration . 36)) +(566 (op-count . 36)) +(567 (opcode-arg-specs . 36)) +(568 (interrupt . 36)) +(569 (interrupt-enumeration . 36)) +(570 (interrupt-count . 36)) +(571 (exception . 36)) +(572 (exception-enumeration . 36)) +(573 (exception-count . 36)) +(574 (current-port-marker . 36)) +(575 (current-port-marker-enumeration . 36)) +(576 (current-port-marker-count . 36)) +(577 (maximum-stack-args . 36)) +(578 (*last-protocol* . 36)) +(579 (next-protocol . 36)) +(580 (two-byte-nargs-protocol . 36)) +(581 (two-byte-nargs+list-protocol . 36)) +(582 (big-stack-protocol . 36)) +(583 (args+nargs-protocol . 36)) +(584 (nary-dispatch-protocol . 36)) +(585 (maximum-external-call-args . 36)) +(586 (default-stack-space . 36)) +(587 (environment-stack-size . 36)) +(588 (continuation-stack-size . 36)) +(589 (available-stack-space . 36)) +(590 (time-option . 36)) +(591 (time-option-enumeration . 36)) +(592 (time-option-count . 36)) +(593 (memory-status-option . 36)) +(594 (memory-status-option-enumeration . 36)) +(595 (memory-status-option-count . 36)) +(596 (channel-status-option . 36)) +(597 (channel-status-option-enumeration . 36)) +(598 (channel-status-option-count . 36)) +(599 (port-status-options . 36)) +(600 (port-status-options-enumeration . 36)) +(601 (port-status-options-count . 36)) +(602 (stob . 36)) +(603 (stob-enumeration . 36)) +(604 (stob-count . 36)) +(605 (least-b-vector-type . 36)) +(606 (stob-data . 36)) +(607 (:queue . 43)) +(608 (really-make-queue . 43)) +(609 (queue-tail . 43)) +(610 (set-queue-tail! . 43)) +(611 (queue-head . 43)) +(612 (set-queue-head! . 43)) +(613 (queue-uid . 43)) +(614 (queue? . 43)) +(615 (*queue-uid* . 43)) +(616 (make-queue . 43)) +(617 (queue-empty? . 43)) +(618 (enqueue! . 43)) +(619 (queue-front . 43)) +(620 (dequeue! . 43)) +(621 (on-queue? . 43)) +(622 (delete-from-queue! . 43)) +(623 (delete-from-queue-if! . 43)) +(624 (queue->list . 43)) +(625 (queue-length . 43)) +(626 (*condition-types* . 27)) +(627 (condition-supertypes . 27)) +(628 (define-condition-type . 27)) +(629 (condition-predicate . 27)) +(630 (condition? . 27)) +(631 (condition-type . 27)) +(632 (condition-stuff . 27)) +(633 (error? . 27)) +(634 (call-error? . 27)) +(635 (read-error? . 27)) +(636 (exception? . 27)) +(637 (exception-opcode . 27)) +(638 (exception-reason . 27)) +(639 (exception-arguments . 27)) +(640 (make-exception . 27)) +(641 (warning? . 27)) +(642 (syntax-error? . 27)) +(643 (interrupt? . 27)) +(644 (*session-data-initializers* . 23)) +(645 (make-session-data-slot! . 23)) +(646 (session-data-ref . 23)) +(647 (session-data-set! . 23)) +(648 (initialize-session-data! . 23)) +(649 (initialize-interrupts! . 38)) +(650 (interrupt-handlers . 38)) +(651 (set-interrupt-handler! . 38)) +(652 (no-interrupts . 38)) +(653 (all-interrupts . 38)) +(654 (with-interrupts-inhibited . 38)) +(655 (with-interrupts-allowed . 38)) +(656 (disable-interrupts! . 38)) +(657 (enable-interrupts! . 38)) +(658 (with-interrupts . 38)) +(659 (enabled-interrupts . 38)) +(660 (*post-gc-procedures* . 38)) +(661 (call-after-gc! . 38)) +(662 (post-gc-handler . 38)) +(663 (required-post-gc-space . 38)) +(664 (space-shortage-handler . 38)) +(665 (call-before-heap-overflow! . 38)) +(666 (dynamic-wind . 22)) +(667 (call-with-current-continuation . 22)) +(668 (continuation->procedure . 22)) +(669 (:point . 22)) +(670 (make-point . 22)) +(671 (point-parent . 22)) +(672 (point-dynamic-env . 22)) +(673 (point-out . 22)) +(674 (point-in . 22)) +(675 (point-depth . 22)) +(676 (travel-to-point! . 22)) +(677 (template-overhead . 32)) +(678 (template-code . 32)) +(679 (template-info . 32)) +(680 (set-template-code! . 32)) +(681 (set-template-info! . 32)) +(682 (:closure . 34)) +(683 (:code-vector . 34)) +(684 (:location . 34)) +(685 (:template . 34)) +(686 (:channel . 34)) +(687 (:port . 34)) +(688 (:double . 34)) +(689 (:weak-pointer . 34)) +(690 (:shared-binding . 34)) +(691 (continuation-cont . 33)) +(692 (real-continuation-pc . 33)) +(693 (real-continuation-template . 33)) +(694 (continuation-env . 33)) +(695 (exception-continuation-pc . 33)) +(696 (exception-continuation-template . 33)) +(697 (exception-continuation-exception . 33)) +(698 (exception-continuation? . 33)) +(699 (continuation-pc . 33)) +(700 (continuation-template . 33)) +(701 (normal-continuation-overhead . 33)) +(702 (exception-continuation-overhead . 33)) +(703 (continuation-arg . 33)) +(704 (continuation-arg-count . 33)) +(705 (:continuation . 33)) +(706 (continuation-parent . 33)) +(707 (define-exception-handler . 37)) +(708 (signal-exception . 37)) +(709 (exception-handlers . 37)) +(710 (extend-opcode! . 37)) +(711 (really-signal-condition . 37)) +(712 (with-handler . 37)) +(713 ($condition-handlers . 37)) +(714 (initialize-exceptions! . 37)) +(715 (last-resort-condition-handler . 37)) +(716 (report-utter-lossage . 37)) +(717 (continuation-preview . 37)) +(718 (ignore-errors . 37)) +(719 (report-errors-as-warnings . 37)) +(720 (:thread . 39)) +(721 (really-make-thread . 39)) +(722 (thread-name . 39)) +(723 (thread-uid . 39)) +(724 (thread-current-task . 39)) +(725 (set-thread-current-task! . 39)) +(726 (thread-events . 39)) +(727 (set-thread-events! . 39)) +(728 (thread-data . 39)) +(729 (set-thread-data! . 39)) +(730 (thread-scheduler . 39)) +(731 (set-thread-scheduler! . 39)) +(732 (thread-time . 39)) +(733 (set-thread-time! . 39)) +(734 (thread-arguments . 39)) +(735 (set-thread-arguments! . 39)) +(736 (thread-queue . 39)) +(737 (set-thread-queue! . 39)) +(738 (thread-continuation . 39)) +(739 (set-thread-continuation! . 39)) +(740 (thread-dynamic-point . 39)) +(741 (set-thread-dynamic-point! . 39)) +(742 (thread-dynamic-env . 39)) +(743 (thread? . 39)) +(744 (*thread-uid* . 39)) +(745 (make-thread . 39)) +(746 (thread-top-level . 39)) +(747 (thread-uid->thread . 39)) +(748 (all-threads . 39)) +(749 (add-event! . 39)) +(750 (thunk->continuation . 39)) +(751 (compose-continuation . 39)) +(752 (make-thread-queue . 39)) +(753 (thread-queue-empty? . 39)) +(754 (enqueue-thread! . 39)) +(755 (dequeue-thread! . 39)) +(756 (remove-thread-from-queue! . 39)) +(757 (current-thread . 39)) +(758 (set-current-thread! . 39)) +(759 (event-type . 39)) +(760 (event-type-enumeration . 39)) +(761 (event-type-count . 39)) +(762 (run . 39)) +(763 (find-and-run-next-thread . 39)) +(764 (debit-thread-times-and-run! . 39)) +(765 (handle-timer-interrupt . 39)) +(766 (run-next-thread . 39)) +(767 (min . 39)) +(768 (switch-to-thread . 39)) +(769 (run-thread . 39)) +(770 (suspend . 39)) +(771 (suspend-to . 39)) +(772 (debit-down! . 39)) +(773 (exit . 39)) +(774 (wait . 39)) +(775 (waiting? . 39)) +(776 (block . 39)) +(777 (relinquish-timeslice . 39)) +(778 (upcall . 39)) +(779 (propogate-upcall . 39)) +(780 (kill-thread! . 39)) +(781 (interrupt-thread . 39)) +(782 (get-next-event! . 39)) +(783 (event-pending? . 39)) +(784 (schedule-event . 39)) +(785 (schedule-wakeup . 39)) +(786 (show-running . 39)) +(787 (running? . 39)) +(788 (spawn . 39)) +(789 (spawn-on-root . 39)) +(790 (spawn-on-scheduler . 39)) +(791 (make-ready . 39)) +(792 (schedule-interrupt! . 39)) +(793 (cancel-timer-interrupt! . 39)) +(794 (interrupt-timer-time . 39)) +(795 (real-time . 39)) +(796 (with-threads . 39)) +(797 (start-multitasking . 39)) +(798 (deadlock? . 39)) +(799 (terminate? . 39)) +(800 (terminate-current-thread . 39)) +(801 (root-scheduler-slot . 39)) +(802 (root-scheduler . 39)) +(803 (sleep . 39)) +(804 (*dozers* . 39)) +(805 (insert . 39)) +(806 (wake-some-threads . 39)) +(807 (:lock . 44)) +(808 (really-make-lock . 44)) +(809 (lock-uid . 44)) +(810 (lock-queue . 44)) +(811 (lock-owner-uid . 44)) +(812 (set-lock-owner-uid! . 44)) +(813 (lock? . 44)) +(814 (*lock-uid* . 44)) +(815 (make-lock . 44)) +(816 (obtain-lock . 44)) +(817 (maybe-obtain-lock . 44)) +(818 (release-lock . 44)) +(819 (:port-handler . 24)) +(820 (make-port-handler . 24)) +(821 (port-handler-buffer-proc . 24)) +(822 (port-handler-close . 24)) +(823 (port-handler-discloser . 24)) +(824 (port-handler? . 24)) +(825 (disclose-port . 24)) +(826 (obtain-port-lock . 24)) +(827 (maybe-obtain-port-lock . 24)) +(828 (release-port-lock . 24)) +(829 (initialize-i/o-handlers! . 24)) +(830 (one-arg-proc->handler . 24)) +(831 (two-arg-proc->handler . 24)) +(832 (read-char-handler . 24)) +(833 (fill-port-buffer! . 24)) +(834 (write-char-handler . 24)) +(835 (empty-port-buffer! . 24)) +(836 (port-flushed? . 24)) +(837 (set-port-flushed?! . 24)) +(838 (close-input-port . 24)) +(839 (close-output-port . 24)) +(840 (define-port-op . 24)) +(841 (real-char-ready? . 24)) +(842 (read-block . 24)) +(843 (really-read-block . 24)) +(844 (buffer-length . 24)) +(845 (read-more . 24)) +(846 (okay-limits? . 24)) +(847 (write-block . 24)) +(848 (write-string . 24)) +(849 (write-buffered-block . 24)) +(850 (write-unbuffered-block . 24)) +(851 (force-output . 24)) +(852 (really-force-output . 24)) +(853 (force-output-if-open . 24)) +(854 (default-buffer-size . 24)) +(855 (open-port? . 24)) +(856 (open-port-mask . 24)) +(857 (input-port-mask . 24)) +(858 (open-input-port-mask . 24)) +(859 (open-input-port-status . 24)) +(860 (open-input-port? . 24)) +(861 (make-input-port-closed! . 24)) +(862 (make-input-port . 24)) +(863 (okay-buffer? . 24)) +(864 (output-port-mask . 24)) +(865 (open-output-port-mask . 24)) +(866 (open-output-port-status . 24)) +(867 (open-output-port? . 24)) +(868 (make-output-port-closed! . 24)) +(869 (make-output-port . 24)) +(870 (make-unbuffered-output-port . 24)) +(871 (null-output-port-handler . 24)) +(872 (make-null-output-port . 24)) +(873 (*flush-these-ports* . 24)) +(874 (initialize-output-port-list! . 24)) +(875 (periodically-force-output! . 24)) +(876 (output-port-forcers . 24)) +(877 (periodically-flushed-ports . 24)) +(878 (make-forcing-thunk . 24)) +(879 ($current-input-port . 24)) +(880 ($current-output-port . 24)) +(881 ($current-error-port . 24)) +(882 ($current-noise-port . 24)) +(883 (current-input-port . 24)) +(884 (current-output-port . 24)) +(885 (current-error-port . 24)) +(886 (current-noise-port . 24)) +(887 (initialize-i/o . 24)) +(888 (with-current-ports . 24)) +(889 (call-with-current-input-port . 24)) +(890 (call-with-current-output-port . 24)) +(891 (call-with-current-noise-port . 24)) +(892 (silently . 24)) +(893 (newline . 24)) +(894 (char-ready? . 24)) +(895 (output-port-option . 24)) +(896 (input-port-option . 24)) +(897 (write . 28)) +(898 (recurring-write . 28)) +(899 (write-boolean . 28)) +(900 (write-number . 28)) +(901 (write-char-literal . 28)) +(902 (character-name . 28)) +(903 (write-string-literal . 28)) +(904 (write-list . 28)) +(905 (quotation? . 28)) +(906 (write-vector . 28)) +(907 (write-other . 28)) +(908 (display-type-name . 28)) +(909 (display . 28)) +(910 (read . 29)) +(911 (sub-read-carefully . 29)) +(912 (reader-token-marker . 29)) +(913 (make-reader-token . 29)) +(914 (reader-token? . 29)) +(915 (close-paren . 29)) +(916 (dot . 29)) +(917 (sub-read . 29)) +(918 (read-dispatch-vector . 29)) +(919 (read-terminating?-vector . 29)) +(920 (set-standard-syntax! . 29)) +(921 (set-standard-read-macro! . 29)) +(922 (sub-read-list . 29)) +(923 (gobble-line . 29)) +(924 (*sharp-macros* . 29)) +(925 (define-sharp-macro . 29)) +(926 (sub-read-token . 29)) +(927 (parse-token . 29)) +(928 (strange-symbol-names . 29)) +(929 (p-c-v . 29)) +(930 (preferred-case . 29)) +(931 (reading-error . 29)) +(932 (input-channel? . 25)) +(933 (output-channel? . 25)) +(934 (open-input-channel . 25)) +(935 (open-output-channel . 25)) +(936 (close-input-channel . 25)) +(937 (close-output-channel . 25)) +(938 (input-channel-handler . 26)) +(939 (input-channel->port . 26)) +(940 (input-channel+closer->port . 26)) +(941 (real-input-channel->port . 26)) +(942 (output-channel-handler . 26)) +(943 (make-unbuffered-output-channel-handler . 26)) +(944 (output-channel->port . 26)) +(945 (output-channel+closer->port . 26)) +(946 (real-output-channel->port . 26)) +(947 (maybe-force-output . 26)) +(948 (:channel-cell . 26)) +(949 (make-channel-cell . 26)) +(950 (channel-cell-closer . 26)) +(951 (channel-cell-ref . 26)) +(952 (channel-cell? . 26)) +(953 (port->channel . 26)) +(954 (open-input-file . 26)) +(955 (open-output-file . 26)) +(956 (call-with-input-file . 26)) +(957 (call-with-output-file . 26)) +(958 (with-input-from-file . 26)) +(959 (with-output-to-file . 26)) +(960 (force-channel-output-ports! . 26)) +(961 (steal-channel-port! . 26)) +(962 (really-steal-channel-port! . 26)) +(963 (initialize-channel-i/o! . 26)) +(964 (i/o-completion-handler . 26)) +(965 (waiting-for-i/o? . 26)) +(966 (wait-for-channel . 26)) +(967 (nothing . 26)) +(968 (steal-channel! . 26)) +(969 (channel-wait-count-slot . 26)) +(970 (channel-wait-count . 26)) +(971 (increment-channel-wait-count! . 26)) +(972 (decrement-channel-wait-count! . 26)) +(973 (channel-wait-queues-slot . 26)) +(974 (add-channel-wait-queue! . 26)) +(975 (fetch-channel-wait-queue! . 26)) +(976 (:table . 77)) +(977 (really-make-table . 77)) +(978 (table-set!-procedure . 77)) +(979 (set-table-set!-procedure! . 77)) +(980 (table-ref-procedure . 77)) +(981 (set-table-ref-procedure! . 77)) +(982 (table-data . 77)) +(983 (set-table-data! . 77)) +(984 (table-size . 77)) +(985 (set-table-size! . 77)) +(986 (table? . 77)) +(987 (table-ref . 77)) +(988 (table-set! . 77)) +(989 (linear-table-size-limit . 77)) +(990 (next-table-size . 77)) +(991 (make-table-maker . 77)) +(992 (assoc->table-maker . 77)) +(993 (null-entry . 77)) +(994 (new-entry . 77)) +(995 (entry-value . 77)) +(996 (entry-key . 77)) +(997 (set-entry-value! . 77)) +(998 (delete-entry! . 77)) +(999 (make-assoc . 77)) +(1000 (make-linear-table-ref . 77)) +(1001 (make-linear-table-set! . 77)) +(1002 (make->hash-table . 77)) +(1003 (make-hash-table-ref . 77)) +(1004 (make-hash-table-set! . 77)) +(1005 (expand-hash-table! . 77)) +(1006 (table-enter-alist! . 77)) +(1007 (table-expand-table! . 77)) +(1008 (table-walk . 77)) +(1009 (really-table-walk . 77)) +(1010 (alist-walk . 77)) +(1011 (make-table-immutable! . 77)) +(1012 (table->entry-list . 77)) +(1013 (default-table-hash-function . 77)) +(1014 (eqv?-assoc . 77)) +(1015 (default-table-assoc . 77)) +(1016 (symbol-hash . 77)) +(1017 (make-table . 77)) +(1018 (make-string-table . 77)) +(1019 (make-symbol-table . 77)) +(1020 (make-integer-table . 77)) +(1021 (make-population . 46)) +(1022 (add-to-population! . 46)) +(1023 (weak-memq . 46)) +(1024 (population-reduce . 46)) +(1025 (population->list . 46)) +(1026 (walk-population . 46)) +(1027 (:meta-type . 48)) +(1028 (really-make-type . 48)) +(1029 (type-info . 48)) +(1030 (type-more . 48)) +(1031 (type-mask . 48)) +(1032 (meta-type? . 48)) +(1033 (make-type . 48)) +(1034 (name->type-table . 48)) +(1035 (mask->name-table . 48)) +(1036 (name->type . 48)) +(1037 (set-type-name! . 48)) +(1038 (*mask* . 48)) +(1039 (new-type-bit . 48)) +(1040 (mask->type . 48)) +(1041 (bottom-type . 48)) +(1042 (error-type . 48)) +(1043 (bottom-type? . 48)) +(1044 (new-atomic-type . 48)) +(1045 (named-atomic-type . 48)) +(1046 (syntax-type . 48)) +(1047 (other-static-type . 48)) +(1048 (empty-rail-type . 48)) +(1049 (rail-type . 48)) +(1050 (make-optional-type . 48)) +(1051 (make-rest-type . 48)) +(1052 (head-type . 48)) +(1053 (head-type-really . 48)) +(1054 (tail-type . 48)) +(1055 (empty-rail-type? . 48)) +(1056 (rest-type? . 48)) +(1057 (optional-type? . 48)) +(1058 (mask/no-values . 48)) +(1059 (mask/two-or-more . 48)) +(1060 (mask/&rest . 48)) +(1061 (value-type . 48)) +(1062 (mask/value . 48)) +(1063 (value-type? . 48)) +(1064 (any-values-type . 48)) +(1065 (any-arguments-type . 48)) +(1066 (mask/one-or-more . 48)) +(1067 (same-type? . 48)) +(1068 (subtype? . 48)) +(1069 (meet-type . 48)) +(1070 (other-type-info . 48)) +(1071 (meet-rail . 48)) +(1072 (meet-procedure . 48)) +(1073 (meet? . 48)) +(1074 (meet-procedure? . 48)) +(1075 (join-type . 48)) +(1076 (join-rail . 48)) +(1077 (join-procedure . 48)) +(1078 (number-hierarchy . 48)) +(1079 (integer-type . 48)) +(1080 (rational-type . 48)) +(1081 (real-type . 48)) +(1082 (complex-type . 48)) +(1083 (number-type . 48)) +(1084 (exact-type . 48)) +(1085 (inexact-type . 48)) +(1086 (exact-integer-type . 48)) +(1087 (inexact-real-type . 48)) +(1088 (boolean-type . 48)) +(1089 (pair-type . 48)) +(1090 (null-type . 48)) +(1091 (record-type . 48)) +(1092 (any-procedure-type . 48)) +(1093 (other-value-type . 48)) +(1094 (mask/other . 48)) +(1095 (make-other-type . 48)) +(1096 (char-type . 48)) +(1097 (unspecific-type . 48)) +(1098 (string-type . 48)) +(1099 (symbol-type . 48)) +(1100 (vector-type . 48)) +(1101 (escape-type . 48)) +(1102 (structure-type . 48)) +(1103 (mask/procedure . 48)) +(1104 (procedure-type . 48)) +(1105 (make-procedure-type . 48)) +(1106 (procedure-type-domain . 48)) +(1107 (procedure-type-codomain . 48)) +(1108 (restrictive? . 48)) +(1109 (sexp->type . 48)) +(1110 (sexp->values-type . 48)) +(1111 (type->sexp . 48)) +(1112 (atomic-type->sexp . 48)) +(1113 (rail-type->sexp . 48)) +(1114 (disjoin-type . 48)) +(1115 (disjoin-rest . 48)) +(1116 (mask/number . 48)) +(1117 (make-some-values-type . 48)) +(1118 (proc . 48)) +(1119 (some-values . 48)) +(1120 (procedure-type? . 48)) +(1121 (fixed-arity-procedure-type? . 48)) +(1122 (procedure-type-arity . 48)) +(1123 (procedure-type-argument-types . 48)) +(1124 (variable-type . 48)) +(1125 (variable-type? . 48)) +(1126 (variable-value-type . 48)) +(1127 (usual-variable-type . 48)) +(1128 (undeclared-type . 48)) +(1129 (compatible-types? . 48)) +(1130 (:interface . 65)) +(1131 (really-make-interface . 65)) +(1132 (interface-name . 65)) +(1133 (set-interface-name! . 65)) +(1134 (interface-clients . 65)) +(1135 (walk-method . 65)) +(1136 (ref-method . 65)) +(1137 (interface? . 65)) +(1138 (interface-ref . 65)) +(1139 (for-each-declaration . 65)) +(1140 (note-reference-to-interface! . 65)) +(1141 (make-interface . 65)) +(1142 (make-simple-interface . 65)) +(1143 (really-make-simple-interface . 65)) +(1144 (make-compound-interface . 65)) +(1145 (note-interface-name! . 65)) +(1146 (binding? . 49)) +(1147 (binding-type . 49)) +(1148 (binding-place . 49)) +(1149 (binding-static . 49)) +(1150 (binding-path . 49)) +(1151 (set-binding-place! . 49)) +(1152 (make-binding . 49)) +(1153 (add-path . 49)) +(1154 (clobber-binding! . 49)) +(1155 (impose-type . 49)) +(1156 (forget-integration . 49)) +(1157 (same-denotation? . 49)) +(1158 (maybe-fix-place! . 49)) +(1159 (follow-forwarding-pointers . 49)) +(1160 (name? . 50)) +(1161 (:generated . 50)) +(1162 (make-generated . 50)) +(1163 (generated-parent-name . 50)) +(1164 (generated-env . 50)) +(1165 (generated-token . 50)) +(1166 (generated-symbol . 50)) +(1167 (generated? . 50)) +(1168 (generate-name . 50)) +(1169 (generated-uid . 50)) +(1170 (*generated-uid* . 50)) +(1171 (name->symbol . 50)) +(1172 (name-hash . 50)) +(1173 (make-name-table . 50)) +(1174 (desyntaxify . 50)) +(1175 (make-qualified . 50)) +(1176 (qualified? . 50)) +(1177 (qualified-parent-name . 50)) +(1178 (qualified-symbol . 50)) +(1179 (name->qualified . 50)) +(1180 (qualify-parent . 50)) +(1181 (:transform . 50)) +(1182 (really-make-transform . 50)) +(1183 (transform-id . 50)) +(1184 (transform-source . 50)) +(1185 (transform-aux-names . 50)) +(1186 (transform-type . 50)) +(1187 (transform-env . 50)) +(1188 (transform-procedure . 50)) +(1189 (transform? . 50)) +(1190 (make-transform . 50)) +(1191 (maybe-apply-macro-transform . 50)) +(1192 (apply-inline-transform . 50)) +(1193 (make-keyword-comparator . 50)) +(1194 (name->source-name . 50)) +(1195 (bind-aliases . 50)) +(1196 (make-name-generator . 50)) +(1197 (lookup . 50)) +(1198 (lookup . 53)) +(1199 (bind1 . 53)) +(1200 (bind . 53)) +(1201 (bindrec . 53)) +(1202 (make-compiler-env . 53)) +(1203 (funny-name/macro-eval . 53)) +(1204 (environment-macro-eval . 53)) +(1205 (funny-name/define! . 53)) +(1206 (environment-define! . 53)) +(1207 (funny-name/package . 53)) +(1208 (extract-package-from-environment . 53)) +(1209 (funny-name/source-file-name . 53)) +(1210 (bind-source-file-name . 53)) +(1211 (source-file-name . 53)) +(1212 (:thingie . 51)) +(1213 (make-thingie . 51)) +(1214 (thingie-want-type . 51)) +(1215 (thingie-name . 51)) +(1216 (thingie-binding . 51)) +(1217 (thingie? . 51)) +(1218 (:structure . 66)) +(1219 (really-make-structure . 66)) +(1220 (structure-name . 66)) +(1221 (set-structure-name! . 66)) +(1222 (structure-clients . 66)) +(1223 (structure-package . 66)) +(1224 (structure-interface-really . 66)) +(1225 (set-structure-interface! . 66)) +(1226 (structure-interface-thunk . 66)) +(1227 (structure? . 66)) +(1228 (structure-interface . 66)) +(1229 (initialize-structure! . 66)) +(1230 (make-structure . 66)) +(1231 (note-structure-name! . 66)) +(1232 (structure-unstable? . 66)) +(1233 (for-each-export . 66)) +(1234 (:package . 66)) +(1235 (really-make-package . 66)) +(1236 (package-cached . 66)) +(1237 (package-clients . 66)) +(1238 (package-real-undefined-but-assigneds . 66)) +(1239 (set-package-undefined-but-assigneds! . 66)) +(1240 (package-real-undefineds . 66)) +(1241 (set-package-undefineds! . 66)) +(1242 (package-accesses-thunk . 66)) +(1243 (package-opens-thunk . 66)) +(1244 (set-package-opens-thunk! . 66)) +(1245 (package->environment . 66)) +(1246 (set-package->environment! . 66)) +(1247 (package-loaded? . 66)) +(1248 (set-package-loaded?! . 66)) +(1249 (package-clauses . 66)) +(1250 (package-file-name . 66)) +(1251 (package-get-location . 66)) +(1252 (set-package-get-location! . 66)) +(1253 (package-integrate? . 66)) +(1254 (set-package-integrate?! . 66)) +(1255 (package-unstable? . 66)) +(1256 (package-definitions . 66)) +(1257 (package-opens-really . 66)) +(1258 (set-package-opens! . 66)) +(1259 (package-uid . 66)) +(1260 (package? . 66)) +(1261 (make-package . 66)) +(1262 (really-package->environment . 66)) +(1263 (lazy-table-accessor . 66)) +(1264 (package-undefineds . 66)) +(1265 (package-undefined-but-assigneds . 66)) +(1266 (new-package-uid . 66)) +(1267 (*package-uid* . 66)) +(1268 (package-name-table . 66)) +(1269 (package-name . 66)) +(1270 (note-package-name! . 66)) +(1271 (package-opens . 66)) +(1272 (initialize-package-if-necessary! . 66)) +(1273 (package-accesses . 66)) +(1274 (make-simple-package . 66)) +(1275 (package-definition . 66)) +(1276 (package-define! . 66)) +(1277 (package-add-static! . 66)) +(1278 (package-refine-type! . 66)) +(1279 (package-lookup . 66)) +(1280 (really-package-lookup . 66)) +(1281 (search-opens . 66)) +(1282 (structure-lookup . 66)) +(1283 (real-structure-lookup . 66)) +(1284 (generic-lookup . 66)) +(1285 (initialize-package! . 66)) +(1286 (for-each-definition . 66)) +(1287 (get-new-location . 66)) +(1288 (make-new-location . 66)) +(1289 ($get-location . 66)) +(1290 (*location-uid* . 66)) +(1291 (location-info-table . 66)) +(1292 (flush-location-names . 66)) +(1293 (link! . 66)) +(1294 (really-link! . 66)) +(1295 (get-location . 66)) +(1296 (location-on-demand . 66)) +(1297 (get-undefined . 66)) +(1298 (location-for-assignment . 66)) +(1299 (package-note-caching! . 66)) +(1300 (note-caching! . 66)) +(1301 (get-location-for-unassignable . 66)) +(1302 (get-location-for-undefined . 66)) +(1303 ($note-undefined . 66)) +(1304 (cenv->package . 66)) +(1305 (location-for-reference . 66)) +(1306 (noting-undefined-variables . 66)) +(1307 (print-undefined-names . 66)) +(1308 (environment-ref . 79)) +(1309 (environment-set! . 79)) +(1310 (environment-define! . 79)) +(1311 (*structure-ref . 79)) +(1312 (carefully . 79)) +(1313 ($interaction-environment . 79)) +(1314 (interaction-environment . 79)) +(1315 (set-interaction-environment! . 79)) +(1316 (with-interaction-environment . 79)) +(1317 (scheme-report-environment . 79)) +(1318 (*scheme-report-environment* . 79)) +(1319 (*null-environment* . 79)) +(1320 (*scheme-report-number* . 79)) +(1321 (set-scheme-report-environment! . 79)) +(1322 (null-environment . 79)) +(1323 (make-reflective-tower . 79)) +(1324 (set-reflective-tower-maker! . 79)) +(1325 (namestring . 78)) +(1326 (directory-component-separator . 78)) +(1327 (type-component-separator . 78)) +(1328 (namestring-component . 78)) +(1329 (file-name-preferred-case . 78)) +(1330 (*scheme-file-type* . 78)) +(1331 (*load-file-type* . 78)) +(1332 (file-name-directory . 78)) +(1333 (file-name-nondirectory . 78)) +(1334 (file-nondirectory-position . 78)) +(1335 (string-posq . 78)) +(1336 (*translations* . 78)) +(1337 (translations . 78)) +(1338 (set-translation! . 78)) +(1339 (translate . 78)) +(1340 ($note-file-package . 63)) +(1341 (read-forms . 63)) +(1342 (really-read-forms . 63)) +(1343 (:operator . 52)) +(1344 (make-operator . 52)) +(1345 (operator-name . 52)) +(1346 (operator-uid . 52)) +(1347 (operator-nargs . 52)) +(1348 (operator-type . 52)) +(1349 (set-operator-type! . 52)) +(1350 (operator? . 52)) +(1351 (usual-operator-type . 52)) +(1352 (get-operator . 52)) +(1353 (*operator-uid* . 52)) +(1354 (operators-table . 52)) +(1355 (number-of-operators . 52)) +(1356 (the-operators . 52)) +(1357 (make-operator-table . 52)) +(1358 (operator-table-ref . 52)) +(1359 (operator-lookup . 52)) +(1360 (operator-define! . 52)) +(1361 (:node . 52)) +(1362 (really-make-node . 52)) +(1363 (node-plist . 52)) +(1364 (set-node-plist! . 52)) +(1365 (node-form . 52)) +(1366 (node-operator-id . 52)) +(1367 (node? . 52)) +(1368 (make-node . 52)) +(1369 (node-ref . 52)) +(1370 (node-set! . 52)) +(1371 (node-operator . 52)) +(1372 (node-predicate . 52)) +(1373 (make-similar-node . 52)) +(1374 (force-node . 52)) +(1375 (schemify . 52)) +(1376 (schemifiers . 52)) +(1377 (schemify-node . 52)) +(1378 (schemify-nodes . 52)) +(1379 (define-schemifier . 52)) +(1380 (schemify-lambda . 52)) +(1381 (schemify-formals . 52)) +(1382 (schemify-sexp . 52)) +(1383 (number-of-required-args . 56)) +(1384 (n-ary? . 56)) +(1385 (normalize-formals . 56)) +(1386 (scan-forms . 54)) +(1387 (expand-scanned-form . 54)) +(1388 (scan-define . 54)) +(1389 (expand-define . 54)) +(1390 (scan-define-syntax . 54)) +(1391 (expand-form . 54)) +(1392 (expand-head . 54)) +(1393 (destructure-define . 54)) +(1394 (make-operator-predicate . 54)) +(1395 (define? . 54)) +(1396 (begin? . 54)) +(1397 (define-syntax? . 54)) +(1398 (static-value . 54)) +(1399 (expand-body . 54)) +(1400 (scan-body-forms . 54)) +(1401 (body-lossage . 54)) +(1402 (expand . 54)) +(1403 (expand-list . 54)) +(1404 (expand-literal . 54)) +(1405 (expand-call . 54)) +(1406 (expand-name . 54)) +(1407 (expand-macro-application . 54)) +(1408 (expand-operator-form . 54)) +(1409 (expanders . 54)) +(1410 (define-expander . 54)) +(1411 (unspecific-node . 54)) +(1412 (expand-structure-ref . 54)) +(1413 (expand-lambda . 54)) +(1414 (bind-names . 54)) +(1415 (names? . 54)) +(1416 (expand-letrec . 54)) +(1417 (process-syntax . 54)) +(1418 (this-long? . 54)) +(1419 (at-least-this-long? . 54)) +(1420 (specs? . 54)) +(1421 (literal? . 54)) +(1422 (syntax? . 54)) +(1423 (begin-node? . 54)) +(1424 (call-node? . 54)) +(1425 (name-node? . 54)) +(1426 (operator/literal . 54)) +(1427 (operator/quote . 54)) +(1428 (operator/call . 54)) +(1429 (operator/name . 54)) +(1430 (operator/unspecific . 54)) +(1431 (operator/unassigned . 54)) +(1432 (operator/lambda . 54)) +(1433 (operator/begin . 54)) +(1434 (operator/letrec . 54)) +(1435 (operator/define . 54)) +(1436 (operator/define-syntax . 54)) +(1437 (operator/primitive-procedure . 54)) +(1438 (operator/structure-ref . 54)) +(1439 (:primop . 60)) +(1440 (make-primop . 60)) +(1441 (primop-compilator . 60)) +(1442 (primop-closed . 60)) +(1443 (primop-type . 60)) +(1444 (primop-name . 60)) +(1445 (primop? . 60)) +(1446 (primop-table . 60)) +(1447 (walk-primops . 60)) +(1448 (define-compiler-primitive . 60)) +(1449 (get-primop . 60)) +(1450 (:debug-data . 57)) +(1451 (make-debug-data . 57)) +(1452 (debug-data-source . 57)) +(1453 (set-debug-data-source! . 57)) +(1454 (debug-data-env-maps . 57)) +(1455 (set-debug-data-env-maps! . 57)) +(1456 (debug-data-pc-in-parent . 57)) +(1457 (debug-data-parent . 57)) +(1458 (debug-data-name . 57)) +(1459 (debug-data-uid . 57)) +(1460 (debug-data? . 57)) +(1461 (maximum-stack-use . 58)) +(1462 (protocol-skip . 58)) +(1463 (stack-delta . 58)) +(1464 (define-delta . 58)) +(1465 (stack-max . 58)) +(1466 (nothing . 58)) +(1467 (popper . 58)) +(1468 (pusher . 58)) +(1469 (continue . 58)) +(1470 (continuer . 58)) +(1471 (do-make-cont . 58)) +(1472 (stack-function . 58)) +(1473 (arg-spec-size . 58)) +(1474 (imax . 58)) +(1475 (get-offset . 58)) +(1476 (new-template-uid . 59)) +(1477 (*template-uid* . 59)) +(1478 (template-uid . 59)) +(1479 (set-template-uid! . 59)) +(1480 (debug-flag-names . 59)) +(1481 (type/debug-flags . 59)) +(1482 (make-debug-flags . 59)) +(1483 ($debug-flags . 59)) +(1484 (debug-flag-accessor . 59)) +(1485 (debug-flag-modifier . 59)) +(1486 (keep-source-code? . 59)) +(1487 (keep-environment-maps? . 59)) +(1488 (keep-procedure-names? . 59)) +(1489 (keep-file-names? . 59)) +(1490 (tabulate-debug-data? . 59)) +(1491 (debug-data-table . 59)) +(1492 (with-fresh-compiler-state . 59)) +(1493 (saving-and-restoring . 59)) +(1494 (debug-data->info . 59)) +(1495 (get-debug-data . 59)) +(1496 (note-debug-data! . 59)) +(1497 (new-debug-data . 59)) +(1498 (make-segment . 59)) +(1499 (segment-size . 59)) +(1500 (segment-emitter . 59)) +(1501 (segment->template . 59)) +(1502 (segment-data->template . 59)) +(1503 (check-stack-use . 59)) +(1504 (:assembly-state . 59)) +(1505 (make-assembly-state . 59)) +(1506 (astate-literals . 59)) +(1507 (set-astate-literals! . 59)) +(1508 (astate-count . 59)) +(1509 (set-astate-count! . 59)) +(1510 (astate-pc . 59)) +(1511 (set-astate-pc! . 59)) +(1512 (astate-code-vector . 59)) +(1513 (make-astate . 59)) +(1514 (emit-byte! . 59)) +(1515 (literal->index . 59)) +(1516 (literal-position . 59)) +(1517 (position . 59)) +(1518 (emit-literal! . 59)) +(1519 (emit-segment! . 59)) +(1520 (empty-segment . 59)) +(1521 (instruction . 59)) +(1522 (sequentially . 59)) +(1523 (sequentially-2 . 59)) +(1524 (instruction-with-literal . 59)) +(1525 (instruction-with-location . 59)) +(1526 (template . 59)) +(1527 (make-label . 59)) +(1528 (instruction-using-label . 59)) +(1529 (computed-goto-label-size . 59)) +(1530 (computed-goto-instruction . 59)) +(1531 (attach-label . 59)) +(1532 (insert-label! . 59)) +(1533 (code-vector-set2! . 59)) +(1534 (two-byte-limit . 59)) +(1535 (high-byte . 59)) +(1536 (low-byte . 59)) +(1537 ($debug-data . 59)) +(1538 (note-source-code . 59)) +(1539 (note-environment . 59)) +(1540 (emit-with-environment-maps! . 59)) +(1541 ($environment-maps . 59)) +(1542 (node-type . 61)) +(1543 (reconstruct-type . 61)) +(1544 (reconstruct . 61)) +(1545 (examine . 61)) +(1546 (reconstructors . 61)) +(1547 (define-reconstructor . 61)) +(1548 (reconstruct-lambda . 61)) +(1549 (careful-codomain . 61)) +(1550 (reconstruct-name . 61)) +(1551 (proc->reconstructor . 61)) +(1552 (reconstruct-call . 61)) +(1553 (fork-constraints . 61)) +(1554 (node->type . 61)) +(1555 (name-node? . 61)) +(1556 (lambda-node? . 61)) +(1557 (literal-node? . 61)) +(1558 (primop-reconstructors . 61)) +(1559 (define-primop-reconstructor . 61)) +(1560 (reconstruct-apply . 61)) +(1561 (constant-type . 61)) +(1562 (compile-expression . 62)) +(1563 (compile . 62)) +(1564 (compilators . 62)) +(1565 (define-compilator . 62)) +(1566 (compile-constant . 62)) +(1567 (compile-call . 62)) +(1568 (compile-name-call . 62)) +(1569 (compile-redex . 62)) +(1570 (compile-unknown-call . 62)) +(1571 (maybe-push-continuation . 62)) +(1572 (fixup-source . 62)) +(1573 (push-arguments . 62)) +(1574 (push-all-with-names . 62)) +(1575 (compile-lambda . 62)) +(1576 (compile-lambda-code . 62)) +(1577 (name-node->symbol . 62)) +(1578 (set-lexical-offsets! . 62)) +(1579 (compile-flat-lambda . 62)) +(1580 (get-variables-offsets . 62)) +(1581 (variable-env-data . 62)) +(1582 (sort-list . 62)) +(1583 (make-cont . 62)) +(1584 (cont-segment . 62)) +(1585 (cont-source-info . 62)) +(1586 (return-cont-segment . 62)) +(1587 (return-cont . 62)) +(1588 (return-cont? . 62)) +(1589 (fall-through-cont . 62)) +(1590 (fall-through-cont? . 62)) +(1591 (ignore-values-segment . 62)) +(1592 (ignore-values-cont . 62)) +(1593 (ignore-values-cont? . 62)) +(1594 (deliver-value . 62)) +(1595 (named-cont . 62)) +(1596 (cont-name . 62)) +(1597 (name-node-binding . 62)) +(1598 (generate-trap . 62)) +(1599 (type-check . 62)) +(1600 (set-type-check?! . 62)) +(1601 (*type-check?* . 62)) +(1602 (diagnose-call-error . 62)) +(1603 (lambda-node? . 62)) +(1604 (name-node? . 62)) +(1605 (literal-node? . 62)) +(1606 (operator/lambda . 62)) +(1607 (operator/set! . 62)) +(1608 (operator/call . 62)) +(1609 (operator/begin . 62)) +(1610 (direct-compilator . 62)) +(1611 (direct-closed-compilator . 62)) +(1612 (nargs->domain . 62)) +(1613 (get-primop-type . 62)) +(1614 (primop-types . 62)) +(1615 (define-simple-primitive . 62)) +(1616 (simple-compilator . 62)) +(1617 (simple-closed-compilator . 62)) +(1618 (symbol-append . 62)) +(1619 (define-stob-predicate . 62)) +(1620 (define-data-struct-primitives . 62)) +(1621 (define-vector-primitives . 62)) +(1622 (define-n-ary-compiler-primitive . 62)) +(1623 (n-ary-primitive-compilator . 62)) +(1624 (call-on-arg-and-id . 62)) +(1625 (call-on-args . 62)) +(1626 (op/unspecific . 62)) +(1627 (op/literal . 62)) +(1628 (push-all-but-last . 62)) +(1629 (dispatch-protocol-size . 62)) +(1630 (make-dispatch-protocol . 62)) +(1631 (compile-forms . 62)) +(1632 (compile-forms-loop . 62)) +(1633 (compile-form . 62)) +(1634 (define-node? . 62)) +(1635 (compile-definition . 62)) +(1636 (location-contents-offset . 62)) +(1637 (make-startup-procedure . 62)) +(1638 (append-templates . 62)) +(1639 (an-ignore-values-cont . 62)) +(1640 (eval . 80)) +(1641 (load-into . 80)) +(1642 (eval-from-file . 80)) +(1643 (load . 80)) +(1644 (really-load-into . 80)) +(1645 (compile-and-run . 80)) +(1646 (display-condition . 47)) +(1647 (really-display-condition . 47)) +(1648 (*depth* . 47)) +(1649 (*length* . 47)) +(1650 (&disclose-condition . 47)) +(1651 (disclose-condition . 47)) +(1652 (limited-write . 47)) +(1653 (command-processor . 84)) +(1654 (mini-load . 84)) +(1655 (read-string . 84)) +(1656 (enum-case . 42)) +(1657 (run-threads . 40)) +(1658 (run-threads-with-housekeeper . 40)) +(1659 (round-robin-event-handler . 40)) +(1660 (make-counter . 40)) +(1661 (counter-value . 40)) +(1662 (increment-counter! . 40)) +(1663 (decrement-counter! . 40)) +(1664 (root-scheduler . 41)) +(1665 (make-root-event-handler . 41)) +(1666 (root-handler . 41)) +(1667 (cheap-display-condition . 41)) +(1668 (abort-token . 41)) +(1669 (scheme-exit-now . 41)) +(1670 (root-wait . 41)) +(1671 (one-day-of-milliseconds . 41)) +(1672 (do-some-waiting . 41)) +(1673 (deadlock-handler . 41)) +(1674 (call-when-deadlocked! . 41)) +(1675 (spawn-output-forcers . 41)) +(1676 (unspecific . 41)) +(1677 (usual-resumer . 45)) +(1678 (initialize-rts . 45)) +(1679 (start . 85)) +(1680 (make-built-in-structures . 85)) +(1681 (initialize-interaction-environment! . 85)) +(1682 (make-initial-package . 85)) +(1683 (make-tower . 85)) +(1684 (the-usual-transforms . 55)) +(1685 (define-usual-macro . 55)) +(1686 (usual-transform . 55)) +(1687 (do-spec? . 55)) +(1688 (specs? . 55)) +(1689 (case-clause? . 55)) +(1690 (process-rules . 55)) +(1691 (segment-pattern? . 55)) +(1692 (segment-template? . 55)) +(1693 (segment-depth . 55)) +(1694 (segment-tail . 55)) +(1695 (indicators-for-zero-or-more . 55)) +(1696 (find-free-names-in-syntax-rules . 55)) +(1697 (strongly-connected-components . 76)) +(1698 (find-next-vertex . 76)) +(1699 (:vertex . 76)) +(1700 (really-make-vertex . 76)) +(1701 (vertex-lowpoint . 76)) +(1702 (set-vertex-lowpoint! . 76)) +(1703 (vertex-parent . 76)) +(1704 (set-vertex-parent! . 76)) +(1705 (vertex-index . 76)) +(1706 (set-vertex-index! . 76)) +(1707 (vertex-stack . 76)) +(1708 (set-vertex-stack! . 76)) +(1709 (vertex-edges . 76)) +(1710 (set-vertex-edges! . 76)) +(1711 (vertex-data . 76)) +(1712 (vertex? . 76)) +(1713 (make-vertex . 76)) +(1714 (make-vertices . 76)) +(1715 (do-vertex . 76)) +(1716 (get-strong . 76)) +(1717 (end-vertex . 76)) +(1718 (unwind-stack . 76)) +(1719 (follow-edge . 76)) +(1720 (pop-vertex-edge! . 76)) +(1721 (find-usages . 73)) +(1722 (maybe-update-known-type . 73)) +(1723 (find-node-usages . 73)) +(1724 (analyze . 73)) +(1725 (analyze-nodes . 73)) +(1726 (usage-analyzers . 73)) +(1727 (define-usage-analyzer . 73)) +(1728 (nothing . 73)) +(1729 (add-if-free . 73)) +(1730 (:usage . 73)) +(1731 (really-make-usage . 73)) +(1732 (usage-assignment-count . 73)) +(1733 (set-assignment! . 73)) +(1734 (usage-operator-count . 73)) +(1735 (set-operator! . 73)) +(1736 (usage-reference-count . 73)) +(1737 (set-reference! . 73)) +(1738 (usage-name-node . 73)) +(1739 (usage? . 73)) +(1740 (make-usage . 73)) +(1741 (make-package-usage . 73)) +(1742 (package-usage? . 73)) +(1743 (usage-incrementator . 73)) +(1744 (note-reference! . 73)) +(1745 (note-operator! . 73)) +(1746 (note-assignment! . 73)) +(1747 (lambda-node? . 73)) +(1748 (quote-node? . 73)) +(1749 (literal-node? . 73)) +(1750 (call-node? . 73)) +(1751 (name-node? . 73)) +(1752 (define-node? . 73)) +(1753 (sort-forms . 73)) +(1754 (stuff-count . 73)) +(1755 (maybe-make-aliased . 73)) +(1756 (topologically-sort . 73)) +(1757 (:form . 73)) +(1758 (really-make-form . 73)) +(1759 (form-temp . 73)) +(1760 (set-form-temp! . 73)) +(1761 (form-free . 73)) +(1762 (set-form-free! . 73)) +(1763 (form-unaliased? . 73)) +(1764 (set-form-unaliased?! . 73)) +(1765 (form-aliases . 73)) +(1766 (set-form-aliases! . 73)) +(1767 (form-node . 73)) +(1768 (form? . 73)) +(1769 (make-form . 73)) +(1770 (insert-aliases . 73)) +(1771 (make-inline-transform . 75)) +(1772 (clean-node . 75)) +(1773 (clean-lambda . 75)) +(1774 (clean-lookup . 75)) +(1775 (unused-name . 75)) +(1776 (inline-transform . 75)) +(1777 (make-substitution . 75)) +(1778 (reconstitute . 75)) +(1779 (reconstitute-name . 75)) +(1780 (operator/name . 75)) +(1781 (operator/literal . 75)) +(1782 (qualified->name . 75)) +(1783 (get-qualified-env . 75)) +(1784 (quote-node? . 75)) +(1785 (call-node? . 75)) +(1786 (lambda-node? . 75)) +(1787 (name-node? . 75)) +(1788 (loophole-node? . 75)) +(1789 (operator . 82)) +(1790 (primop . 82)) +(1791 (simple-interface . 82)) +(1792 (package . 82)) +(1793 (transform . 82)) +(1794 (package-define-static! . 82)) +(1795 (:syntax . 71)) +(1796 (:values . 71)) +(1797 (:arguments . 71)) +(1798 (:value . 71)) +(1799 (procedure . 71)) +(1800 (:boolean . 71)) +(1801 (:char . 71)) +(1802 (:null . 71)) +(1803 (:unspecific . 71)) +(1804 (:number . 71)) +(1805 (:complex . 71)) +(1806 (:real . 71)) +(1807 (:rational . 71)) +(1808 (:integer . 71)) +(1809 (:exact-integer . 71)) +(1810 (:pair . 71)) +(1811 (:string . 71)) +(1812 (:symbol . 71)) +(1813 (:vector . 71)) +(1814 (:procedure . 71)) +(1815 (:input-port . 71)) +(1816 (:output-port . 71)) +(1817 (:error . 71)) +(1818 (:escape . 71)) +(1819 (:structure . 71)) +(1820 (:type . 71)) +(1821 (def . 70)) +(1822 (really-def . 70)) +(1823 (define-multiple . 70)) +(1824 (define-interface . 70)) +(1825 (compound-interface . 70)) +(1826 (export . 70)) +(1827 (define-structure . 70)) +(1828 (define-structures . 70)) +(1829 (structure . 70)) +(1830 (structures . 70)) +(1831 (a-package . 70)) +(1832 (receive . 70)) +(1833 (define-reflective-tower-maker . 70)) +(1834 (export-reflective-tower-maker . 70)) +(1835 (define-module . 70)) +(1836 (make-a-package . 70)) +(1837 (loser . 70)) +(1838 (interface-of . 70)) +(1839 (*verify-later!* . 70)) +(1840 (verify-later! . 70)) +(1841 (set-verify-later! . 70)) +(1842 (note-name! . 70)) +(1843 (optimizers-table . 68)) +(1844 (set-optimizer! . 68)) +(1845 (get-optimizer . 68)) +(1846 (apply-optimizers . 68)) +(1847 (collect-packages . 67)) +(1848 (package-source . 67)) +(1849 (read-files . 67)) +(1850 (package-optimizer-names . 67)) +(1851 (check-structure . 67)) +(1852 (compile-package . 69)) +(1853 (expand-package . 69)) +(1854 (define-usual-transform . 69)) +(1855 (define-primitives . 69)) +(1856 (make-define-primitive-node . 69)) +(1857 (operator/define . 69)) +(1858 (operator/primitive-procedure . 69)) +(1859 (analyze-forms . 74)) +(1860 (analyze-form . 74)) +(1861 (inlinable-rhs? . 74)) +(1862 (simple-lambda? . 74)) +(1863 (operator/name . 74)) +(1864 (simple? . 74)) +(1865 (simple-list? . 74)) +(1866 (analyzers . 74)) +(1867 (define-analyzer . 74)) +(1868 (static-value . 74)) +(1869 (really-simple-call? . 74)) +(1870 (lexical-node? . 74)) +(1871 (no-ret . 74)) +(1872 (ret . 74)) +(1873 (simple-literal? . 74)) +(1874 (require . 74)) +(1875 (*debug?* . 74)) +(1876 (package-lookup-type . 74)) +(1877 (lambda-node? . 74)) +(1878 (name-node? . 74)) +(1879 (loophole-node? . 74)) +(1880 (define-node? . 74)) +(1881 (flatten-form . 64)) +(1882 (flatten-node . 64)) +(1883 (flatteners . 64)) +(1884 (define-flattener . 64)) +(1885 (flatten-list . 64)) +(1886 (no-free-vars . 64)) +(1887 (flatten-lambda . 64)) +(1888 (convert-lambda-body . 64)) +(1889 (add-cells . 64)) +(1890 (assigned? . 64)) +(1891 (mark-set-variables! . 64)) +(1892 (mark-sets . 64)) +(1893 (define-set-marker . 64)) +(1894 (no-sets . 64)) +(1895 (make-cell . 64)) +(1896 (make-unassigned-cell . 64)) +(1897 (make-cell-ref . 64)) +(1898 (make-cell-set! . 64)) +(1899 (make-primop-call . 64)) +(1900 (operator/flat-lambda . 64)) +(1901 (operator/lambda . 64)) +(1902 (operator/begin . 64)) +(1903 (operator/literal . 64)) +(1904 (operator/call . 64)) +(1905 (operator/unassigned . 64)) +(1906 (operator/set! . 64)) +(1907 (define-node? . 64)) +(1908 (lambda-node? . 64)) +(1909 (define-primop . 64)) +(1910 (temp0 . 64)) +(1911 (make-cell-primop . 64)) +(1912 (temp1 . 64)) +(1913 (cell-ref-primop . 64)) +(1914 (temp2 . 64)) +(1915 (cell-set!-primop . 64)) +(1916 (union . 64)) +(1917 (set-difference . 64)) +(1918 (ensure-loaded . 81)) +- +; Template uid -> name, parent, pc in parent, env maps +(0 scheme-level-0 #f #f ()) +(1 atan 0 7 ()) +(2 scheme-level-0 #f #f ()) +(3 set-location-defined?! 2 7 ()) +(4 scheme-level-0 #f #f ()) +(5 acos 4 7 ()) +(6 scheme-level-0 #f #f ()) +(7 vm-extension 6 7 ()) +(8 scheme-level-0 #f #f ()) +(9 asin 8 7 ()) +(10 scheme-level-0 #f #f ()) +(11 location-defined? 10 7 ()) +(12 scheme-level-0 #f #f ()) +(13 time 12 7 ()) +(14 scheme-level-0 #f #f ()) +(15 template-set! 14 7 ()) +(16 scheme-level-0 #f #f ()) +(17 scheme-level-0 #f #f ()) +(18 cons 17 7 ()) +(19 scheme-level-0 #f #f ()) +(20 wait 19 7 ()) +(21 scheme-level-0 #f #f ()) +(22 trap 21 7 ()) +(23 scheme-level-0 #f #f ()) +(24 assq 23 7 ()) +(25 scheme-level-0 #f #f ()) +(26 make-weak-pointer 25 7 ()) +(27 scheme-level-0 #f #f ()) +(28 lookup-shared-binding 27 7 ()) +(29 scheme-level-0 #f #f ()) +(30 push 29 7 ()) +(31 scheme-level-0 #f #f ()) +(32 set-contents! 31 7 ()) +(33 scheme-level-0 #f #f ()) +(34 read-char 33 7 ()) +(35 scheme-level-0 #f #f ()) +(36 make-cell 35 7 ()) +(37 scheme-level-0 #f #f ()) +(38 sqrt 37 7 ()) +(39 scheme-level-0 #f #f ()) +(40 * 39 7 ()) +(41 scheme-level-0 #f #f ()) +(42 contents 41 7 ()) +(43 scheme-level-0 #f #f ()) +(44 + 43 7 ()) +(45 scheme-level-0 #f #f ()) +(46 peek-char 45 7 ()) +(47 scheme-level-0 #f #f ()) +(48 - 47 7 ()) +(49 scheme-level-0 #f #f ()) +(50 continuation-set! 49 7 ()) +(51 scheme-level-0 #f #f ()) +(52 / 51 7 ()) +(53 scheme-level-0 #f #f ()) +(54 weak-pointer? 53 7 ()) +(55 scheme-level-0 #f #f ()) +(56 quotient 55 7 ()) +(57 scheme-level-0 #f #f ()) +(58 close-channel 57 7 ()) +(59 scheme-level-0 #f #f ()) +(60 channel-abort 59 7 ()) +(61 scheme-level-0 #f #f ()) +(62 char? 61 7 ()) +(63 scheme-level-0 #f #f ()) +(64 < 63 7 ()) +(65 scheme-level-0 #f #f ()) +(66 = 65 7 ()) +(67 scheme-level-0 #f #f ()) +(68 > 67 7 ()) +(69 scheme-level-0 #f #f ()) +(70 make-location 69 7 ()) +(71 scheme-level-0 #f #f ()) +(72 imag-part 71 7 ()) +(73 scheme-level-0 #f #f ()) +(74 set-port-data! 73 7 ()) +(75 scheme-level-0 #f #f ()) +(76 make-template 75 7 ()) +(77 scheme-level-0 #f #f ()) +(78 real? 77 7 ()) +(79 scheme-level-0 #f #f ()) +(80 real-part 79 7 ()) +(81 scheme-level-0 #f #f ()) +(82 get-cont-from-heap 81 7 ()) +(83 scheme-level-0 #f #f ()) +(84 record-length 83 7 ()) +(85 scheme-level-0 #f #f ()) +(86 port-data 85 7 ()) +(87 scheme-level-0 #f #f ()) +(88 pair? 87 7 ()) +(89 scheme-level-0 #f #f ()) +(90 make-port 89 7 ()) +(91 scheme-level-0 #f #f ()) +(92 set-port-lock! 91 7 ()) +(93 scheme-level-0 #f #f ()) +(94 return-from-exception 93 7 ()) +(95 scheme-level-0 #f #f ()) +(96 location? 95 7 ()) +(97 scheme-level-0 #f #f ()) +(98 channel-maybe-read 97 7 ()) +(99 scheme-level-0 #f #f ()) +(100 checked-record-ref 99 7 ()) +(101 scheme-level-0 #f #f ()) +(102 add-finalizer! 101 7 ()) +(103 scheme-level-0 #f #f ()) +(104 rational? 103 7 ()) +(105 scheme-level-0 #f #f ()) +(106 template? 105 7 ()) +(107 scheme-level-0 #f #f ()) +(108 port-lock 107 7 ()) +(109 scheme-level-0 #f #f ()) +(110 vector-length 109 7 ()) +(111 scheme-level-0 #f #f ()) +(112 make-continuation 111 7 ()) +(113 scheme-level-0 #f #f ()) +(114 string-length 113 7 ()) +(115 scheme-level-0 #f #f ()) +(116 shared-binding-ref 115 7 ()) +(117 scheme-level-0 #f #f ()) +(118 port? 117 7 ()) +(119 scheme-level-0 #f #f ()) +(120 angle 119 7 ()) +(121 scheme-level-0 #f #f ()) +(122 false 121 7 ()) +(123 scheme-level-0 #f #f ()) +(124 remainder 123 7 ()) +(125 scheme-level-0 #f #f ()) +(126 continuation? 125 7 ()) +(127 scheme-level-0 #f #f ()) +(128 binary-reduce1 127 7 ()) +(129 scheme-level-0 #f #f ()) +(130 binary-reduce2 129 7 ()) +(131 scheme-level-0 #f #f ()) +(132 char= 139 7 ()) +(141 scheme-level-0 #f #f ()) +(142 with-continuation 141 7 ()) +(143 scheme-level-0 #f #f ()) +(144 floor 143 7 ()) +(145 scheme-level-0 #f #f ()) +(146 apply 145 7 ()) +(147 scheme-level-0 #f #f ()) +(148 memory-status 147 7 ()) +(149 scheme-level-0 #f #f ()) +(150 checked-record-set! 149 7 ()) +(151 scheme-level-0 #f #f ()) +(152 inexact->exact 151 7 ()) +(153 scheme-level-0 #f #f ()) +(154 exact->inexact 153 7 ()) +(155 scheme-level-0 #f #f ()) +(156 error 155 7 ()) +(157 scheme-level-0 #f #f ()) +(158 extended-number-length 157 7 ()) +(159 scheme-level-0 #f #f ()) +(160 open-channels-list 159 7 ()) +(161 scheme-level-0 #f #f ()) +(162 channel-id 161 7 ()) +(163 scheme-level-0 #f #f ()) +(164 shared-binding-set! 163 7 ()) +(165 scheme-level-0 #f #f ()) +(166 numerator 165 7 ()) +(167 scheme-level-0 #f #f ()) +(168 eof-object 167 7 ()) +(169 scheme-level-0 #f #f ()) +(170 byte-vector-length 169 7 ()) +(171 scheme-level-0 #f #f ()) +(172 record-ref 171 7 ()) +(173 scheme-level-0 #f #f ()) +(174 make-polar 173 7 ()) +(175 scheme-level-0 #f #f ()) +(176 write-char 175 7 ()) +(177 scheme-level-0 #f #f ()) +(178 symbol->string 177 7 ()) +(179 scheme-level-0 #f #f ()) +(180 exact? 179 7 ()) +(181 scheme-level-0 #f #f ()) +(182 vector-ref 181 7 ()) +(183 scheme-level-0 #f #f ()) +(184 set-current-thread! 183 7 ()) +(185 scheme-level-0 #f #f ()) +(186 immutable? 185 7 ()) +(187 scheme-level-0 #f #f ()) +(188 set-exception-handlers! 187 7 ()) +(189 scheme-level-0 #f #f ()) +(190 string-ref 189 7 ()) +(191 scheme-level-0 #f #f ()) +(192 set-port-index! 191 7 ()) +(193 scheme-level-0 #f #f ()) +(194 make-shared-binding 193 7 ()) +(195 scheme-level-0 #f #f ()) +(196 current-thread 195 7 ()) +(197 scheme-level-0 #f #f ()) +(198 channel-status 197 7 ()) +(199 scheme-level-0 #f #f ()) +(200 set-port-limit! 199 7 ()) +(201 scheme-level-0 #f #f ()) +(202 shared-binding-name 201 7 ()) +(203 scheme-level-0 #f #f ()) +(204 port-index 203 7 ()) +(205 scheme-level-0 #f #f ()) +(206 make-immutable! 205 7 ()) +(207 scheme-level-0 #f #f ()) +(208 set-enabled-interrupts! 207 7 ()) +(209 scheme-level-0 #f #f ()) +(210 port-limit 209 7 ()) +(211 scheme-level-0 #f #f ()) +(212 ascii->char 211 7 ()) +(213 scheme-level-0 #f #f ()) +(214 char->ascii 213 7 ()) +(215 scheme-level-0 #f #f ()) +(216 undefine-shared-binding 215 7 ()) +(217 scheme-level-0 #f #f ()) +(218 record-set! 217 7 ()) +(219 scheme-level-0 #f #f ()) +(220 shared-binding? 219 7 ()) +(221 scheme-level-0 #f #f ()) +(222 eof-object? 221 7 ()) +(223 scheme-level-0 #f #f ()) +(224 set-interrupt-handlers! 223 7 ()) +(225 scheme-level-0 #f #f ()) +(226 record 225 7 ()) +(227 scheme-level-0 #f #f ()) +(228 schedule-interrupt 227 7 ()) +(229 scheme-level-0 #f #f ()) +(230 channel-maybe-write 229 7 ()) +(231 scheme-level-0 #f #f ()) +(232 unspecific 231 7 ()) +(233 scheme-level-0 #f #f ()) +(234 extended-number-ref 233 7 ()) +(235 scheme-level-0 #f #f ()) +(236 vector-set! 235 7 ()) +(237 scheme-level-0 #f #f ()) +(238 copy-bytes! 237 7 ()) +(239 scheme-level-0 #f #f ()) +(240 string-set! 239 7 ()) +(241 scheme-level-0 #f #f ()) +(242 unassigned 241 7 ()) +(243 scheme-level-0 #f #f ()) +(244 call-external-value 243 7 ()) +(245 scheme-level-0 #f #f ()) +(246 values 245 7 ()) +(247 scheme-level-0 #f #f ()) +(248 intern 247 7 ()) +(249 scheme-level-0 #f #f ()) +(250 vector 249 7 ()) +(251 scheme-level-0 #f #f ()) +(252 byte-vector-ref 251 7 ()) +(253 scheme-level-0 #f #f ()) +(254 make-double 253 7 ()) +(255 scheme-level-0 #f #f ()) +(256 make-record 255 7 ()) +(257 scheme-level-0 #f #f ()) +(258 set-location-id! 257 7 ()) +(259 scheme-level-0 #f #f ()) +(260 location-id 259 7 ()) +(261 scheme-level-0 #f #f ()) +(262 bitwise-and 261 7 ()) +(263 scheme-level-0 #f #f ()) +(264 eq? 263 7 ()) +(265 scheme-level-0 #f #f ()) +(266 write-image 265 7 ()) +(267 scheme-level-0 #f #f ()) +(268 double? 267 7 ()) +(269 scheme-level-0 #f #f ()) +(270 extended-number-set! 269 7 ()) +(271 scheme-level-0 #f #f ()) +(272 make-vector 271 7 ()) +(273 scheme-level-0 #f #f ()) +(274 record? 273 7 ()) +(275 scheme-level-0 #f #f ()) +(276 make-string 275 7 ()) +(277 scheme-level-0 #f #f ()) +(278 set-port-buffer! 277 7 ()) +(279 scheme-level-0 #f #f ()) +(280 primitive-catch 279 7 ()) +(281 scheme-level-0 #f #f ()) +(282 string-hash 281 7 ()) +(283 scheme-level-0 #f #f ()) +(284 template-length 283 7 ()) +(285 scheme-level-0 #f #f ()) +(286 number? 285 7 ()) +(287 scheme-level-0 #f #f ()) +(288 port-buffer 287 7 ()) +(289 scheme-level-0 #f #f ()) +(290 byte-vector-set! 289 7 ()) +(291 scheme-level-0 #f #f ()) +(292 bitwise-ior 291 7 ()) +(293 scheme-level-0 #f #f ()) +(294 set-car! 293 7 ()) +(295 scheme-level-0 #f #f ()) +(296 closure-env 295 7 ()) +(297 scheme-level-0 #f #f ()) +(298 vector? 297 7 ()) +(299 scheme-level-0 #f #f ()) +(300 bitwise-not 299 7 ()) +(301 scheme-level-0 #f #f ()) +(302 set-cdr! 301 7 ()) +(303 scheme-level-0 #f #f ()) +(304 symbol? 303 7 ()) +(305 scheme-level-0 #f #f ()) +(306 string? 305 7 ()) +(307 scheme-level-0 #f #f ()) +(308 car 307 7 ()) +(309 scheme-level-0 #f #f ()) +(310 bitwise-xor 309 7 ()) +(311 scheme-level-0 #f #f ()) +(312 cdr 311 7 ()) +(313 scheme-level-0 #f #f ()) +(314 find-all-records 313 7 ()) +(315 scheme-level-0 #f #f ()) +(316 continuation-length 315 7 ()) +(317 scheme-level-0 #f #f ()) +(318 log 317 7 ()) +(319 scheme-level-0 #f #f ()) +(320 message 319 7 ()) +(321 scheme-level-0 #f #f ()) +(322 tan 321 7 ()) +(323 scheme-level-0 #f #f ()) +(324 collect 323 7 ()) +(325 scheme-level-0 #f #f ()) +(326 cos 325 7 ()) +(327 scheme-level-0 #f #f ()) +(328 channel-os-index 327 7 ()) +(329 scheme-level-0 #f #f ()) +(330 make-extended-number 329 7 ()) +(331 scheme-level-0 #f #f ()) +(332 set-port-status! 331 7 ()) +(333 scheme-level-0 #f #f ()) +(334 sin 333 7 ()) +(335 scheme-level-0 #f #f ()) +(336 exp 335 7 ()) +(337 scheme-level-0 #f #f ()) +(338 pop 337 7 ()) +(339 scheme-level-0 #f #f ()) +(340 port-status 339 7 ()) +(341 scheme-level-0 #f #f ()) +(342 return-from-callback 341 7 ()) +(343 scheme-level-0 #f #f ()) +(344 set-port-locked?! 343 7 ()) +(345 scheme-level-0 #f #f ()) +(346 make-byte-vector 345 7 ()) +(347 scheme-level-0 #f #f ()) +(348 weak-pointer-ref 347 7 ()) +(349 scheme-level-0 #f #f ()) +(350 call-with-values 349 7 ()) +(351 scheme-level-0 #f #f ()) +(352 denominator 351 7 ()) +(353 scheme-level-0 #f #f ()) +(354 reverse-list->string 353 7 ()) +(355 scheme-level-0 #f #f ()) +(356 port-locked? 355 7 ()) +(357 scheme-level-0 #f #f ()) +(358 extended-number? 357 7 ()) +(359 scheme-level-0 #f #f ()) +(360 shared-binding-is-import? 359 7 ()) +(361 scheme-level-0 #f #f ()) +(362 find-all 361 7 ()) +(363 scheme-level-0 #f #f ()) +(364 cell-ref 363 7 ()) +(365 scheme-level-0 #f #f ()) +(366 byte-vector? 365 7 ()) +(367 scheme-level-0 #f #f ()) +(368 string=? 367 7 ()) +(369 scheme-level-0 #f #f ()) +(370 open-channel 369 7 ()) +(371 scheme-level-0 #f #f ()) +(372 channel? 371 7 ()) +(373 scheme-level-0 #f #f ()) +(374 make-rectangular 373 7 ()) +(375 scheme-level-0 #f #f ()) +(376 set-session-data! 375 7 ()) +(377 scheme-level-0 #f #f ()) +(378 template-ref 377 7 ()) +(379 scheme-level-0 #f #f ()) +(380 make-closure 379 7 ()) +(381 scheme-level-0 #f #f ()) +(382 session-data 381 7 ()) +(383 scheme-level-0 #f #f ()) +(384 integer? 383 7 ()) +(385 scheme-level-0 #f #f ()) +(386 signal-condition 385 7 ()) +(387 scheme-level-0 #f #f ()) +(388 port-handler 387 7 ()) +(389 scheme-level-0 #f #f ()) +(390 set-port-pending-eof?! 389 7 ()) +(391 scheme-level-0 #f #f ()) +(392 define-shared-binding 391 7 ()) +(393 scheme-level-0 #f #f ()) +(394 arithmetic-shift 393 7 ()) +(395 scheme-level-0 #f #f ()) +(396 complex? 395 7 ()) +(397 scheme-level-0 #f #f ()) +(398 port-pending-eof? 397 7 ()) +(399 scheme-level-0 #f #f ()) +(400 cell-set! 399 7 ()) +(401 scheme-level-0 #f #f ()) +(402 binary-comparison-reduce2 401 7 ()) +(403 scheme-level-0 #f #f ()) +(404 scheme-level-0 #f #f ()) +(405 closure? 404 7 ()) +(406 scheme-level-0 #f #f ()) +(407 continuation-ref 406 7 ()) +(408 scheme-level-0 #f #f ()) +(409 closure-template 408 7 ()) +(410 scheme-level-0 #f #f ()) +(411 current-cont 410 7 ()) +(412 scheme-level-0 #f #f ()) +(413 char->integer 412 7 ()) +(414 scheme-level-0 #f #f ()) +(415 integer->char 414 7 ()) +(416 scheme-level-0 #f #f ()) +(417 invoke-closure 416 7 ()) +(418 scheme-level-0 #f #f ()) +(419 primitive-cwcc 418 7 ()) +(420 #f 419 8 ()) +(421 scheme-level-0 #f #f ()) +(422 make-undefined-location 421 7 ()) +(423 scheme-level-0 #f #f ()) +(424 location-assigned? 423 7 ()) +(425 scheme-level-0 #f #f ()) +(426 vector-unassigned? 425 7 ()) +(427 scheme-level-0 #f #f ()) +(428 string-copy 427 7 ()) +(429 scheme-level-0 #f #f ()) +(430 string->symbol 429 7 ()) +(431 scheme-level-0 #f #f ()) +(432 input-port? 431 7 ()) +(433 scheme-level-0 #f #f ()) +(434 output-port? 433 7 ()) +(435 scheme-level-0 #f #f ()) +(436 make-code-vector 435 7 ()) +(437 scheme-level-0 #f #f ()) +(438 code-vector? 437 7 ()) +(439 scheme-level-0 #f #f ()) +(440 code-vector-length 439 7 ()) +(441 scheme-level-0 #f #f ()) +(442 code-vector-ref 441 7 ()) +(443 scheme-level-0 #f #f ()) +(444 code-vector-set! 443 7 ()) +(445 scheme-level-0 #f #f ()) +(446 buffer-length 445 7 ()) +(447 scheme-level-0 #f #f ()) +(448 channel-read 447 7 ()) +(449 #f 448 6 ()) +(450 loop 449 19 ()) +(451 scheme-level-0 #f #f ()) +(452 channel-write 451 7 ()) +(453 loop 452 19 ()) +(454 scheme-level-0 #f #f ()) +(455 lookup-imported-binding 454 7 ()) +(456 scheme-level-0 #f #f ()) +(457 lookup-exported-binding 456 7 ()) +(458 scheme-level-0 #f #f ()) +(459 define-imported-binding 458 7 ()) +(460 scheme-level-0 #f #f ()) +(461 define-exported-binding 460 7 ()) +(462 scheme-level-0 #f #f ()) +(463 undefine-imported-binding 462 7 ()) +(464 scheme-level-0 #f #f ()) +(465 undefine-exported-binding 464 7 ()) +(466 scheme-level-0 #f #f ()) +(467 debug-message 466 7 ()) +(468 scheme-level-0 #f #f ()) +(469 signal 468 7 ()) +(470 scheme-level-0 #f #f ()) +(471 warn 470 7 ()) +(472 scheme-level-0 #f #f ()) +(473 syntax-error 472 7 ()) +(474 scheme-level-0 #f #f ()) +(475 call-error 474 7 ()) +(476 scheme-level-0 #f #f ()) +(477 scheme-level-0 #f #f ()) +(478 scheme-level-1 #f #f ()) +(479 scheme-level-1 #f #f ()) +(480 scheme-level-1 #f #f ()) +(481 scheme-level-1 #f #f ()) +(482 scheme-level-1 #f #f ()) +(483 scheme-level-1 #f #f ()) +(484 scheme-level-1 #f #f ()) +(485 scheme-level-1 #f #f ()) +(486 scheme-level-1 #f #f ()) +(487 scheme-level-1 #f #f ()) +(488 scheme-level-1 #f #f ()) +(489 scheme-level-1 #f #f ()) +(490 #f 489 11 ()) +(491 scheme-level-1 #f #f ()) +(492 #f 491 11 ()) +(493 scheme-level-1 #f #f ()) +(494 scheme-level-1 #f #f ()) +(495 scheme-level-1 #f #f ()) +(496 scheme-level-1 #f #f ()) +(497 scheme-level-1 #f #f ()) +(498 scheme-level-1 #f #f ()) +(499 scheme-level-1 #f #f ()) +(500 not 499 7 ()) +(501 scheme-level-1 #f #f ()) +(502 boolean? 501 7 ()) +(503 scheme-level-1 #f #f ()) +(504 eqv? 503 7 ()) +(505 scheme-level-1 #f #f ()) +(506 equal? 505 7 ()) +(507 loop 506 156 ()) +(508 scheme-level-1 #f #f ()) +(509 null? 508 7 ()) +(510 scheme-level-1 #f #f ()) +(511 inexact? 510 7 ()) +(512 scheme-level-1 #f #f ()) +(513 max-or-min 512 7 ()) +(514 loop 513 34 ()) +(515 scheme-level-1 #f #f ()) +(516 max 515 7 ()) +(517 scheme-level-1 #f #f ()) +(518 min 517 7 ()) +(519 scheme-level-1 #f #f ()) +(520 abs 519 7 ()) +(521 scheme-level-1 #f #f ()) +(522 zero? 521 7 ()) +(523 scheme-level-1 #f #f ()) +(524 positive? 523 7 ()) +(525 scheme-level-1 #f #f ()) +(526 negative? 525 7 ()) +(527 scheme-level-1 #f #f ()) +(528 even? 527 7 ()) +(529 scheme-level-1 #f #f ()) +(530 odd? 529 7 ()) +(531 scheme-level-1 #f #f ()) +(532 caar 531 7 ()) +(533 scheme-level-1 #f #f ()) +(534 cadr 533 7 ()) +(535 scheme-level-1 #f #f ()) +(536 cdar 535 7 ()) +(537 scheme-level-1 #f #f ()) +(538 cddr 537 7 ()) +(539 scheme-level-1 #f #f ()) +(540 caaar 539 7 ()) +(541 scheme-level-1 #f #f ()) +(542 caadr 541 7 ()) +(543 scheme-level-1 #f #f ()) +(544 cadar 543 7 ()) +(545 scheme-level-1 #f #f ()) +(546 caddr 545 7 ()) +(547 scheme-level-1 #f #f ()) +(548 cdaar 547 7 ()) +(549 scheme-level-1 #f #f ()) +(550 cdadr 549 7 ()) +(551 scheme-level-1 #f #f ()) +(552 cddar 551 7 ()) +(553 scheme-level-1 #f #f ()) +(554 cdddr 553 7 ()) +(555 scheme-level-1 #f #f ()) +(556 caaaar 555 7 ()) +(557 scheme-level-1 #f #f ()) +(558 caaadr 557 7 ()) +(559 scheme-level-1 #f #f ()) +(560 caadar 559 7 ()) +(561 scheme-level-1 #f #f ()) +(562 caaddr 561 7 ()) +(563 scheme-level-1 #f #f ()) +(564 cadaar 563 7 ()) +(565 scheme-level-1 #f #f ()) +(566 cadadr 565 7 ()) +(567 scheme-level-1 #f #f ()) +(568 caddar 567 7 ()) +(569 scheme-level-1 #f #f ()) +(570 cadddr 569 7 ()) +(571 scheme-level-1 #f #f ()) +(572 cdaaar 571 7 ()) +(573 scheme-level-1 #f #f ()) +(574 cdaadr 573 7 ()) +(575 scheme-level-1 #f #f ()) +(576 cdadar 575 7 ()) +(577 scheme-level-1 #f #f ()) +(578 cdaddr 577 7 ()) +(579 scheme-level-1 #f #f ()) +(580 cddaar 579 7 ()) +(581 scheme-level-1 #f #f ()) +(582 cddadr 581 7 ()) +(583 scheme-level-1 #f #f ()) +(584 cdddar 583 7 ()) +(585 scheme-level-1 #f #f ()) +(586 cddddr 585 7 ()) +(587 scheme-level-1 #f #f ()) +(588 list 587 7 ()) +(589 scheme-level-1 #f #f ()) +(590 real-length 589 7 ()) +(591 scheme-level-1 #f #f ()) +(592 length 591 7 ()) +(593 scheme-level-1 #f #f ()) +(594 reduce 593 7 ()) +(595 scheme-level-1 #f #f ()) +(596 append 595 7 ()) +(597 recur 596 34 ()) +(598 scheme-level-1 #f #f ()) +(599 append-reverse 598 7 ()) +(600 scheme-level-1 #f #f ()) +(601 reverse 600 7 ()) +(602 scheme-level-1 #f #f ()) +(603 list-tail 602 7 ()) +(604 scheme-level-1 #f #f ()) +(605 list-ref 604 7 ()) +(606 scheme-level-1 #f #f ()) +(607 mem 606 7 ()) +(608 #f 607 6 ()) +(609 loop 608 18 ()) +(610 scheme-level-1 #f #f ()) +(611 ass 610 7 ()) +(612 #f 611 6 ()) +(613 loop 612 18 ()) +(614 scheme-level-1 #f #f ()) +(615 list? 614 7 ()) +(616 recur 615 21 ()) +(617 scheme-level-1 #f #f ()) +(618 char>? 617 7 ()) +(619 scheme-level-1 #f #f ()) +(620 char>=? 619 7 ()) +(621 scheme-level-1 #f #f ()) +(622 char<=? 621 7 ()) +(623 scheme-level-1 #f #f ()) +(624 char-whitespace? 623 7 ()) +(625 scheme-level-1 #f #f ()) +(626 char-lower-case? 625 7 ()) +(627 scheme-level-1 #f #f ()) +(628 char-upper-case? 627 7 ()) +(629 scheme-level-1 #f #f ()) +(630 char-numeric? 629 7 ()) +(631 scheme-level-1 #f #f ()) +(632 char-alphabetic? 631 7 ()) +(633 scheme-level-1 #f #f ()) +(634 make-character-map 633 7 ()) +(635 loop##6 634 27 ()) +(636 scheme-level-1 #f #f ()) +(637 char-upcase 636 7 ()) +(638 scheme-level-1 #f #f ()) +(639 char-downcase 638 7 ()) +(640 scheme-level-1 #f #f ()) +(641 char-ci-compare 640 7 ()) +(642 #f 641 6 ()) +(643 scheme-level-1 #f #f ()) +(644 list->string 643 7 ()) +(645 loop##8 644 36 ()) +(646 scheme-level-1 #f #f ()) +(647 string 646 7 ()) +(648 scheme-level-1 #f #f ()) +(649 substring 648 7 ()) +(650 loop##9 649 26 ()) +(651 scheme-level-1 #f #f ()) +(652 string-append 651 7 ()) +(653 #f 652 12 ()) +(654 loop 652 60 ()) +(655 loop##10 654 40 ()) +(656 scheme-level-1 #f #f ()) +(657 string->list 656 7 ()) +(658 loop##11 657 18 ()) +(659 scheme-level-1 #f #f ()) +(660 unspecific 659 7 ()) +(661 scheme-level-1 #f #f ()) +(662 string-fill! 661 7 ()) +(663 loop##12 662 18 ()) +(664 scheme-level-1 #f #f ()) +(665 make-string=? 664 7 ()) +(666 #f 665 6 ()) +(667 loop 666 36 ()) +(668 scheme-level-1 #f #f ()) +(669 make-string? 672 7 ()) +(674 scheme-level-1 #f #f ()) +(675 string<=? 674 7 ()) +(676 scheme-level-1 #f #f ()) +(677 string>=? 676 7 ()) +(678 scheme-level-1 #f #f ()) +(679 string-ci>? 678 7 ()) +(680 scheme-level-1 #f #f ()) +(681 string-ci<=? 680 7 ()) +(682 scheme-level-1 #f #f ()) +(683 string-ci>=? 682 7 ()) +(684 scheme-level-1 #f #f ()) +(685 vector->list 684 7 ()) +(686 loop##14 685 11 ()) +(687 scheme-level-1 #f #f ()) +(688 list->vector 687 7 ()) +(689 loop##15 688 35 ()) +(690 scheme-level-1 #f #f ()) +(691 vector-fill! 690 7 ()) +(692 loop##16 691 19 ()) +(693 scheme-level-1 #f #f ()) +(694 map1 693 7 ()) +(695 scheme-level-1 #f #f ()) +(696 any 695 7 ()) +(697 scheme-level-1 #f #f ()) +(698 map2+ 697 7 ()) +(699 scheme-level-1 #f #f ()) +(700 map 699 7 ()) +(701 scheme-level-1 #f #f ()) +(702 for-each1 701 7 ()) +(703 loop 702 18 ()) +(704 scheme-level-1 #f #f ()) +(705 for-each2+ 704 7 ()) +(706 loop 705 21 ()) +(707 scheme-level-1 #f #f ()) +(708 for-each 707 7 ()) +(709 scheme-level-1 #f #f ()) +(710 make-promise 709 7 ()) +(711 #f 710 11 ()) +(712 scheme-level-1 #f #f ()) +(713 force 712 7 ()) +(714 scheme-level-1 #f #f ()) +(715 filter 714 7 ()) +(716 #f 715 6 ()) +(717 scheme-level-1 #f #f ()) +(718 pos 717 7 ()) +(719 #f 718 6 ()) +(720 loop 719 22 ()) +(721 scheme-level-1 #f #f ()) +(722 every 721 7 ()) +(723 scheme-level-1 #f #f ()) +(724 sublist 723 7 ()) +(725 recur 724 58 ()) +(726 scheme-level-1 #f #f ()) +(727 last 726 7 ()) +(728 scheme-level-1 #f #f ()) +(729 insert 728 7 ()) +(730 scheme-level-1 #f #f ()) +(731 fold 730 7 ()) +(732 loop##20 731 11 ()) +(733 scheme-level-1 #f #f ()) +(734 fold->2 733 7 ()) +(735 loop 734 24 ()) +(736 #f 735 25 ()) +(737 scheme-level-1 #f #f ()) +(738 fold->3 737 7 ()) +(739 loop 738 27 ()) +(740 #f 739 28 ()) +(741 scheme-level-1 #f #f ()) +(742 modulo 741 7 ()) +(743 scheme-level-1 #f #f ()) +(744 ceiling 743 7 ()) +(745 scheme-level-1 #f #f ()) +(746 truncate 745 7 ()) +(747 scheme-level-1 #f #f ()) +(748 round 747 7 ()) +(749 scheme-level-1 #f #f ()) +(750 euclid 749 7 ()) +(751 scheme-level-1 #f #f ()) +(752 gcd 751 7 ()) +(753 #f 752 8 ()) +(754 scheme-level-1 #f #f ()) +(755 lcm 754 7 ()) +(756 #f 755 8 ()) +(757 scheme-level-1 #f #f ()) +(758 raise-to-integer-power 757 7 ()) +(759 loop 758 39 ()) +(760 scheme-level-1 #f #f ()) +(761 expt 760 7 ()) +(762 scheme-level-1 #f #f ()) +(763 simplest-rational 762 7 ()) +(764 simplest-rational-internal 763 11 ()) +(765 scheme-level-1 #f #f ()) +(766 rationalize 765 7 ()) +(767 records #f #f ()) +(768 #f 767 7 ()) +(769 records #f #f ()) +(770 records #f #f ()) +(771 records #f #f ()) +(772 records #f #f ()) +(773 record-type 772 7 ()) +(774 records #f #f ()) +(775 record-type-name 774 7 ()) +(776 records #f #f ()) +(777 make-default-record-discloser 776 7 ()) +(778 #f 777 6 ()) +(779 records #f #f ()) +(780 make-record-type 779 7 ()) +(781 records #f #f ()) +(782 record-type? 781 7 ()) +(783 records #f #f ()) +(784 record-type-resumer 783 7 ()) +(785 records #f #f ()) +(786 set-record-type-resumer! 785 7 ()) +(787 records #f #f ()) +(788 record-type-uid 787 7 ()) +(789 records #f #f ()) +(790 record-type-field-names 789 7 ()) +(791 records #f #f ()) +(792 record-type-number-of-fields 791 7 ()) +(793 records #f #f ()) +(794 record-type-discloser 793 7 ()) +(795 records #f #f ()) +(796 set-record-type-discloser! 795 7 ()) +(797 records #f #f ()) +(798 record-field-index 797 7 ()) +(799 loop 798 28 ()) +(800 records #f #f ()) +(801 record-constructor 800 7 ()) +(802 #f 801 10 ()) +(803 #f 801 41 ()) +(804 loop 803 45 ()) +(805 records #f #f ()) +(806 record-accessor 805 7 ()) +(807 #f 806 62 ()) +(808 records #f #f ()) +(809 record-modifier 808 7 ()) +(810 #f 809 62 ()) +(811 records #f #f ()) +(812 record-predicate 811 7 ()) +(813 #f 812 6 ()) +(814 records #f #f ()) +(815 define-record-discloser 814 7 ()) +(816 records #f #f ()) +(817 disclose-record 816 7 ()) +(818 records #f #f ()) +(819 define-record-resumer 818 7 ()) +(820 records #f #f ()) +(821 resume-record 820 7 ()) +(822 records #f #f ()) +(823 initialize-records! 822 7 ()) +(824 loop##23 823 18 ()) +(825 records #f #f ()) +(826 records #f #f ()) +(827 records #f #f ()) +(828 records #f #f ()) +(829 define-record-types #f #f ()) +(830 methods #f #f ()) +(831 &add-method! 830 59 ()) +(832 methods #f #f ()) +(833 &disclose 832 52 ()) +(834 methods #f #f ()) +(835 &disclose 834 52 ()) +(836 methods #f #f ()) +(837 methods #f #f ()) +(838 disclose 837 56 ()) +(839 methods #f #f ()) +(840 &same-type? 839 56 ()) +(841 methods #f #f ()) +(842 &type-priority 841 52 ()) +(843 methods #f #f ()) +(844 &type-predicate 843 52 ()) +(845 methods #f #f ()) +(846 #f 845 11 ()) +(847 methods #f #f ()) +(848 singleton-value 847 7 ()) +(849 methods #f #f ()) +(850 singleton 849 7 ()) +(851 methods #f #f ()) +(852 methods #f #f ()) +(853 &same-type? 852 56 ()) +(854 methods #f #f ()) +(855 &same-type? 854 56 ()) +(856 methods #f #f ()) +(857 methods #f #f ()) +(858 same-type? 857 60 ()) +(859 methods #f #f ()) +(860 &type-superiors 859 52 ()) +(861 methods #f #f ()) +(862 &type-superiors 861 52 ()) +(863 methods #f #f ()) +(864 methods #f #f ()) +(865 type-superiors 864 56 ()) +(866 methods #f #f ()) +(867 &type-priority 866 52 ()) +(868 methods #f #f ()) +(869 &type-priority 868 52 ()) +(870 methods #f #f ()) +(871 methods #f #f ()) +(872 type-priority 871 56 ()) +(873 methods #f #f ()) +(874 &type-predicate 873 52 ()) +(875 methods #f #f ()) +(876 &type-predicate 875 52 ()) +(877 methods #f #f ()) +(878 methods #f #f ()) +(879 type-predicate 878 56 ()) +(880 methods #f #f ()) +(881 add-method! 880 52 ()) +(882 methods #f #f ()) +(883 methods #f #f ()) +(884 add-method! 883 60 ()) +(885 methods #f #f ()) +(886 #f 885 11 ()) +(887 methods #f #f ()) +(888 set-method-table-methods! 887 7 ()) +(889 methods #f #f ()) +(890 method-table-methods 889 7 ()) +(891 methods #f #f ()) +(892 method-table-prototype 891 7 ()) +(893 methods #f #f ()) +(894 make-generic 893 7 ()) +(895 methods #f #f ()) +(896 method-table-get-perform 895 7 ()) +(897 methods #f #f ()) +(898 method-table-set-perform! 897 7 ()) +(899 methods #f #f ()) +(900 method-table-id 899 7 ()) +(901 methods #f #f ()) +(902 really-make-method-table 901 7 ()) +(903 methods #f #f ()) +(904 methods #f #f ()) +(905 #f 904 11 ()) +(906 methods #f #f ()) +(907 method-info-types 906 7 ()) +(908 methods #f #f ()) +(909 method-info-n-ary? 908 7 ()) +(910 methods #f #f ()) +(911 method-info-proc 910 7 ()) +(912 methods #f #f ()) +(913 really-make-method-info 912 7 ()) +(914 methods #f #f ()) +(915 methods #f #f ()) +(916 record-type-priority 915 51 ()) +(917 methods #f #f ()) +(918 methods #f #f ()) +(919 methods #f #f ()) +(920 methods #f #f ()) +(921 methods #f #f ()) +(922 methods #f #f ()) +(923 methods #f #f ()) +(924 methods #f #f ()) +(925 methods #f #f ()) +(926 methods #f #f ()) +(927 methods #f #f ()) +(928 methods #f #f ()) +(929 methods #f #f ()) +(930 #f 929 25 ()) +(931 methods #f #f ()) +(932 methods #f #f ()) +(933 methods #f #f ()) +(934 methods #f #f ()) +(935 methods #f #f ()) +(936 methods #f #f ()) +(937 #f 936 25 ()) +(938 methods #f #f ()) +(939 methods #f #f ()) +(940 methods #f #f ()) +(941 methods #f #f ()) +(942 #f 941 11 ()) +(943 methods #f #f ()) +(944 simple-type-superiors 943 7 ()) +(945 methods #f #f ()) +(946 simple-type-predicate 945 7 ()) +(947 methods #f #f ()) +(948 simple-type-priority 947 7 ()) +(949 methods #f #f ()) +(950 simple-type-id 949 7 ()) +(951 methods #f #f ()) +(952 really-make-simple-type 951 7 ()) +(953 methods #f #f ()) +(954 methods #f #f ()) +(955 simple-type? 954 7 ()) +(956 methods #f #f ()) +(957 %type-priority 956 7 ()) +(958 methods #f #f ()) +(959 compute-priority 958 7 ()) +(960 methods #f #f ()) +(961 make-simple-type 960 7 ()) +(962 methods #f #f ()) +(963 %type-predicate 962 7 ()) +(964 methods #f #f ()) +(965 %same-type? 964 7 ()) +(966 methods #f #f ()) +(967 value? 966 7 ()) +(968 methods #f #f ()) +(969 method-info? 968 7 ()) +(970 methods #f #f ()) +(971 make-method-info 970 7 ()) +(972 methods #f #f ()) +(973 empty-method-list 972 7 ()) +(974 methods #f #f ()) +(975 more-specific-type? 974 7 ()) +(976 methods #f #f ()) +(977 more-specific? 976 7 ()) +(978 loop 977 148 ()) +(979 methods #f #f ()) +(980 every2 979 7 ()) +(981 methods #f #f ()) +(982 same-applicability? 981 7 ()) +(983 methods #f #f ()) +(984 insert-method 983 7 ()) +(985 recur 984 18 ()) +(986 methods #f #f ()) +(987 method-table? 986 7 ()) +(988 methods #f #f ()) +(989 last-action 988 7 ()) +(990 #f 989 6 ()) +(991 methods #f #f ()) +(992 one-action 991 7 ()) +(993 #f 992 6 ()) +(994 #f 993 20 ()) +(995 methods #f #f ()) +(996 check-for-next 995 7 ()) +(997 #f 996 6 ()) +(998 methods #f #f ()) +(999 check-next 998 7 ()) +(1000 #f 999 6 ()) +(1001 methods #f #f ()) +(1002 argument-sequence-predicate 1001 7 ()) +(1003 recur 1002 27 ()) +(1004 methods #f #f ()) +(1005 methods->perform 1004 7 ()) +(1006 recur 1005 18 ()) +(1007 methods #f #f ()) +(1008 add-to-method-table! 1007 7 ()) +(1009 methods #f #f ()) +(1010 set-final-method! 1009 7 ()) +(1011 methods #f #f ()) +(1012 make-cell-for-generic 1011 7 ()) +(1013 #f 1012 8 ()) +(1014 #f 1012 13 ()) +(1015 #f 1012 18 ()) +(1016 methods #f #f ()) +(1017 make-method-table 1016 7 ()) +(1018 #f 1017 53 ()) +(1019 #f 1017 79 ()) +(1020 methods #f #f ()) +(1021 apply-generic 1020 7 ()) +(1022 methods #f #f ()) +(1023 compare-to 1022 7 ()) +(1024 #f 1023 6 ()) +(1025 methods #f #f ()) +(1026 proc->discloser 1025 7 ()) +(1027 #f 1026 6 ()) +(1028 #f 1027 6 ()) +(1029 methods #f #f ()) +(1030 number-i/o #f #f ()) +(1031 string->integer 1030 24 ()) +(1032 do-it 1030 33 ()) +(1033 loop 1032 40 ()) +(1034 digit->integer 1030 42 ()) +(1035 number-i/o #f #f ()) +(1036 set-exactness 1035 7 ()) +(1037 number-i/o #f #f ()) +(1038 &really-string->number 1037 60 ()) +(1039 number-i/o #f #f ()) +(1040 #f 1039 25 ()) +(1041 loop 1040 31 ()) +(1042 number-i/o #f #f ()) +(1043 &really-string->number 1042 60 ()) +(1044 number-i/o #f #f ()) +(1045 number-i/o #f #f ()) +(1046 number-i/o #f #f ()) +(1047 string->number 1046 7 ()) +(1048 loop 1047 285 ()) +(1049 radix-is 1048 55 ()) +(1050 exactness-is 1048 60 ()) +(1051 loop 1048 300 ()) +(1052 number-i/o #f #f ()) +(1053 integer->string 1052 22 ()) +(1054 recur 1053 52 ()) +(1055 integer->digit 1052 31 ()) +(1056 number-i/o #f #f ()) +(1057 &number->string 1056 56 ()) +(1058 number-i/o #f #f ()) +(1059 &number->string 1058 56 ()) +(1060 number-i/o #f #f ()) +(1061 number->string 1060 7 ()) +(1062 number-i/o #f #f ()) +(1063 number-i/o #f #f ()) +(1064 fluids #f #f ()) +(1065 fluids #f #f ()) +(1066 set-fluid-top-level-value! 1065 7 ()) +(1067 fluids #f #f ()) +(1068 fluid-top-level-value 1067 7 ()) +(1069 fluids #f #f ()) +(1070 make-fluid 1069 7 ()) +(1071 fluids #f #f ()) +(1072 fluids #f #f ()) +(1073 thread-dynamic-env 1072 7 ()) +(1074 fluids #f #f ()) +(1075 thread-dynamic-point 1074 7 ()) +(1076 fluids #f #f ()) +(1077 make-thread 1076 7 ()) +(1078 fluids #f #f ()) +(1079 fluids #f #f ()) +(1080 get-dynamic-env 1079 7 ()) +(1081 fluids #f #f ()) +(1082 set-dynamic-env! 1081 7 ()) +(1083 fluids #f #f ()) +(1084 get-dynamic-point 1083 7 ()) +(1085 fluids #f #f ()) +(1086 set-dynamic-point! 1085 7 ()) +(1087 fluids #f #f ()) +(1088 empty-dynamic-env 1087 7 ()) +(1089 fluids #f #f ()) +(1090 initialize-dynamic-state! 1089 7 ()) +(1091 fluids #f #f ()) +(1092 with-dynamic-env 1091 7 ()) +(1093 #f 1092 38 ()) +(1094 fluids #f #f ()) +(1095 fluid 1094 7 ()) +(1096 fluids #f #f ()) +(1097 set-fluid! 1096 7 ()) +(1098 fluids #f #f ()) +(1099 let-fluid 1098 7 ()) +(1100 fluids #f #f ()) +(1101 let-fluids 1100 7 ()) +(1102 loop 1101 30 ()) +(1103 enumerated #f #f ()) +(1104 lookup-enumerand 1103 7 ()) +(1105 loop 1104 27 ()) +(1106 architecture #f #f ()) +(1107 architecture #f #f ()) +(1108 architecture #f #f ()) +(1109 architecture #f #f ()) +(1110 architecture #f #f ()) +(1111 architecture #f #f ()) +(1112 architecture #f #f ()) +(1113 architecture #f #f ()) +(1114 architecture #f #f ()) +(1115 architecture #f #f ()) +(1116 architecture #f #f ()) +(1117 architecture #f #f ()) +(1118 architecture #f #f ()) +(1119 architecture #f #f ()) +(1120 architecture #f #f ()) +(1121 architecture #f #f ()) +(1122 architecture #f #f ()) +(1123 architecture #f #f ()) +(1124 architecture #f #f ()) +(1125 architecture #f #f ()) +(1126 architecture #f #f ()) +(1127 architecture #f #f ()) +(1128 architecture #f #f ()) +(1129 next-protocol 1128 7 ()) +(1130 architecture #f #f ()) +(1131 architecture #f #f ()) +(1132 architecture #f #f ()) +(1133 architecture #f #f ()) +(1134 architecture #f #f ()) +(1135 architecture #f #f ()) +(1136 architecture #f #f ()) +(1137 architecture #f #f ()) +(1138 architecture #f #f ()) +(1139 architecture #f #f ()) +(1140 architecture #f #f ()) +(1141 architecture #f #f ()) +(1142 architecture #f #f ()) +(1143 architecture #f #f ()) +(1144 queues #f #f ()) +(1145 queue-uid 1144 7 ()) +(1146 queues #f #f ()) +(1147 set-queue-head! 1146 7 ()) +(1148 queues #f #f ()) +(1149 queue-head 1148 7 ()) +(1150 queues #f #f ()) +(1151 set-queue-tail! 1150 7 ()) +(1152 queues #f #f ()) +(1153 queue-tail 1152 7 ()) +(1154 queues #f #f ()) +(1155 really-make-queue 1154 7 ()) +(1156 queues #f #f ()) +(1157 queues #f #f ()) +(1158 queue? 1157 7 ()) +(1159 queues #f #f ()) +(1160 make-queue 1159 7 ()) +(1161 queues #f #f ()) +(1162 queue-empty? 1161 7 ()) +(1163 queues #f #f ()) +(1164 enqueue! 1163 7 ()) +(1165 queues #f #f ()) +(1166 queue-front 1165 7 ()) +(1167 queues #f #f ()) +(1168 dequeue! 1167 7 ()) +(1169 queues #f #f ()) +(1170 on-queue? 1169 7 ()) +(1171 queues #f #f ()) +(1172 delete-from-queue-if! 1171 7 ()) +(1173 loop 1172 130 ()) +(1174 queues #f #f ()) +(1175 delete-from-queue! 1174 7 ()) +(1176 #f 1175 9 ()) +(1177 queues #f #f ()) +(1178 queue->list 1177 7 ()) +(1179 #f 1178 6 ()) +(1180 queues #f #f ()) +(1181 queue-length 1180 7 ()) +(1182 queues #f #f ()) +(1183 conditions #f #f ()) +(1184 conditions #f #f ()) +(1185 conditions #f #f ()) +(1186 conditions #f #f ()) +(1187 conditions #f #f ()) +(1188 conditions #f #f ()) +(1189 conditions #f #f ()) +(1190 make-exception 1189 7 ()) +(1191 conditions #f #f ()) +(1192 conditions #f #f ()) +(1193 conditions #f #f ()) +(1194 conditions #f #f ()) +(1195 conditions #f #f ()) +(1196 conditions #f #f ()) +(1197 conditions #f #f ()) +(1198 conditions #f #f ()) +(1199 conditions #f #f ()) +(1200 conditions #f #f ()) +(1201 conditions #f #f ()) +(1202 conditions #f #f ()) +(1203 conditions #f #f ()) +(1204 conditions #f #f ()) +(1205 condition? 1204 7 ()) +(1206 conditions #f #f ()) +(1207 condition-predicate 1206 7 ()) +(1208 #f 1207 6 ()) +(1209 conditions #f #f ()) +(1210 define-condition-type 1209 7 ()) +(1211 #f 1210 17 ()) +(1212 conditions #f #f ()) +(1213 condition-supertypes 1212 7 ()) +(1214 conditions #f #f ()) +(1215 session-data #f #f ()) +(1216 make-session-data-slot! 1215 7 ()) +(1217 session-data #f #f ()) +(1218 session-data-ref 1217 7 ()) +(1219 session-data #f #f ()) +(1220 session-data-set! 1219 7 ()) +(1221 session-data #f #f ()) +(1222 initialize-session-data! 1221 7 ()) +(1223 session-data #f #f ()) +(1224 interrupts #f #f ()) +(1225 #f 1224 11 ()) +(1226 interrupts #f #f ()) +(1227 interrupts #f #f ()) +(1228 interrupts #f #f ()) +(1229 interrupts #f #f ()) +(1230 enabled-interrupts 1229 7 ()) +(1231 interrupts #f #f ()) +(1232 post-gc-handler 1231 7 ()) +(1233 #f 1232 6 ()) +(1234 #f 1233 42 ()) +(1235 #f 1233 58 ()) +(1236 #f 1235 7 ()) +(1237 #f 1235 21 ()) +(1238 interrupts #f #f ()) +(1239 initialize-interrupts! 1238 7 ()) +(1240 #f 1239 6 ()) +(1241 loop##72 1240 32 ()) +(1242 #f 1241 32 ()) +(1243 #f 1240 78 ()) +(1244 #f 1243 11 ()) +(1245 interrupts #f #f ()) +(1246 set-interrupt-handler! 1245 7 ()) +(1247 interrupts #f #f ()) +(1248 with-interrupts 1247 7 ()) +(1249 #f 1248 13 ()) +(1250 interrupts #f #f ()) +(1251 with-interrupts-inhibited 1250 7 ()) +(1252 interrupts #f #f ()) +(1253 with-interrupts-allowed 1252 7 ()) +(1254 interrupts #f #f ()) +(1255 disable-interrupts! 1254 7 ()) +(1256 interrupts #f #f ()) +(1257 enable-interrupts! 1256 7 ()) +(1258 interrupts #f #f ()) +(1259 call-after-gc! 1258 7 ()) +(1260 interrupts #f #f ()) +(1261 call-before-heap-overflow! 1260 7 ()) +(1262 interrupts #f #f ()) +(1263 interrupts #f #f ()) +(1264 wind #f #f ()) +(1265 point-depth 1264 7 ()) +(1266 wind #f #f ()) +(1267 point-in 1266 7 ()) +(1268 wind #f #f ()) +(1269 point-out 1268 7 ()) +(1270 wind #f #f ()) +(1271 point-dynamic-env 1270 7 ()) +(1272 wind #f #f ()) +(1273 point-parent 1272 7 ()) +(1274 wind #f #f ()) +(1275 make-point 1274 7 ()) +(1276 wind #f #f ()) +(1277 wind #f #f ()) +(1278 dynamic-wind 1277 7 ()) +(1279 wind #f #f ()) +(1280 travel-to-point! 1279 7 ()) +(1281 wind #f #f ()) +(1282 continuation->procedure 1281 7 ()) +(1283 #f 1282 6 ()) +(1284 #f 1283 60 ()) +(1285 wind #f #f ()) +(1286 call-with-current-continuation 1285 7 ()) +(1287 #f 1286 6 ()) +(1288 templates #f #f ()) +(1289 template-code 1288 7 ()) +(1290 templates #f #f ()) +(1291 template-info 1290 7 ()) +(1292 templates #f #f ()) +(1293 set-template-code! 1292 7 ()) +(1294 templates #f #f ()) +(1295 set-template-info! 1294 7 ()) +(1296 templates #f #f ()) +(1297 more-types #f #f ()) +(1298 &disclose 1297 48 ()) +(1299 more-types #f #f ()) +(1300 more-types #f #f ()) +(1301 &disclose 1300 52 ()) +(1302 more-types #f #f ()) +(1303 more-types #f #f ()) +(1304 more-types #f #f ()) +(1305 more-types #f #f ()) +(1306 more-types #f #f ()) +(1307 more-types #f #f ()) +(1308 more-types #f #f ()) +(1309 more-types #f #f ()) +(1310 continuations #f #f ()) +(1311 &disclose 1310 48 ()) +(1312 continuations #f #f ()) +(1313 continuations #f #f ()) +(1314 continuations #f #f ()) +(1315 continuation-cont 1314 7 ()) +(1316 continuations #f #f ()) +(1317 real-continuation-pc 1316 7 ()) +(1318 continuations #f #f ()) +(1319 real-continuation-template 1318 7 ()) +(1320 continuations #f #f ()) +(1321 continuation-env 1320 7 ()) +(1322 continuations #f #f ()) +(1323 exception-continuation-pc 1322 7 ()) +(1324 continuations #f #f ()) +(1325 exception-continuation-template 1324 7 ()) +(1326 continuations #f #f ()) +(1327 exception-continuation-exception 1326 7 ()) +(1328 continuations #f #f ()) +(1329 exception-continuation? 1328 7 ()) +(1330 continuations #f #f ()) +(1331 continuation-pc 1330 7 ()) +(1332 continuations #f #f ()) +(1333 continuation-template 1332 7 ()) +(1334 continuations #f #f ()) +(1335 continuation-arg 1334 7 ()) +(1336 continuations #f #f ()) +(1337 continuation-arg-count 1336 7 ()) +(1338 continuations #f #f ()) +(1339 continuation-parent 1338 7 ()) +(1340 loop 1339 105 ()) +(1341 continuations #f #f ()) +(1342 exceptions #f #f ()) +(1343 &disclose 1342 48 ()) +(1344 exceptions #f #f ()) +(1345 &disclose 1344 52 ()) +(1346 exceptions #f #f ()) +(1347 report-errors-as-warnings 1346 7 ()) +(1348 #f 1347 12 ()) +(1349 exceptions #f #f ()) +(1350 ignore-errors 1349 7 ()) +(1351 #f 1350 6 ()) +(1352 #f 1351 6 ()) +(1353 exceptions #f #f ()) +(1354 continuation-preview 1353 7 ()) +(1355 exceptions #f #f ()) +(1356 report-utter-lossage 1355 7 ()) +(1357 #f 1356 183 ()) +(1358 exceptions #f #f ()) +(1359 last-resort-condition-handler 1358 7 ()) +(1360 #f 1359 15 ()) +(1361 #f 1360 23 ()) +(1362 exceptions #f #f ()) +(1363 initialize-exceptions! 1362 7 ()) +(1364 #f 1363 6 ()) +(1365 exceptions #f #f ()) +(1366 exceptions #f #f ()) +(1367 with-handler 1366 7 ()) +(1368 exceptions #f #f ()) +(1369 really-signal-condition 1368 7 ()) +(1370 loop 1369 29 ()) +(1371 #f 1370 9 ()) +(1372 exceptions #f #f ()) +(1373 extend-opcode! 1372 7 ()) +(1374 except 1373 6 ()) +(1375 #f 1373 32 ()) +(1376 exceptions #f #f ()) +(1377 #f 1376 11 ()) +(1378 exceptions #f #f ()) +(1379 exceptions #f #f ()) +(1380 signal-exception 1379 7 ()) +(1381 exceptions #f #f ()) +(1382 define-exception-handler 1381 7 ()) +(1383 threads #f #f ()) +(1384 threads #f #f ()) +(1385 threads #f #f ()) +(1386 threads #f #f ()) +(1387 threads #f #f ()) +(1388 threads #f #f ()) +(1389 threads #f #f ()) +(1390 threads #f #f ()) +(1391 threads #f #f ()) +(1392 threads #f #f ()) +(1393 #f 1392 11 ()) +(1394 threads #f #f ()) +(1395 thread-dynamic-env 1394 7 ()) +(1396 threads #f #f ()) +(1397 set-thread-dynamic-point! 1396 7 ()) +(1398 threads #f #f ()) +(1399 thread-dynamic-point 1398 7 ()) +(1400 threads #f #f ()) +(1401 set-thread-continuation! 1400 7 ()) +(1402 threads #f #f ()) +(1403 thread-continuation 1402 7 ()) +(1404 threads #f #f ()) +(1405 set-thread-queue! 1404 7 ()) +(1406 threads #f #f ()) +(1407 thread-queue 1406 7 ()) +(1408 threads #f #f ()) +(1409 set-thread-arguments! 1408 7 ()) +(1410 threads #f #f ()) +(1411 thread-arguments 1410 7 ()) +(1412 threads #f #f ()) +(1413 set-thread-time! 1412 7 ()) +(1414 threads #f #f ()) +(1415 thread-time 1414 7 ()) +(1416 threads #f #f ()) +(1417 set-thread-scheduler! 1416 7 ()) +(1418 threads #f #f ()) +(1419 thread-scheduler 1418 7 ()) +(1420 threads #f #f ()) +(1421 set-thread-data! 1420 7 ()) +(1422 threads #f #f ()) +(1423 thread-data 1422 7 ()) +(1424 threads #f #f ()) +(1425 set-thread-events! 1424 7 ()) +(1426 threads #f #f ()) +(1427 thread-events 1426 7 ()) +(1428 threads #f #f ()) +(1429 set-thread-current-task! 1428 7 ()) +(1430 threads #f #f ()) +(1431 thread-current-task 1430 7 ()) +(1432 threads #f #f ()) +(1433 thread-uid 1432 7 ()) +(1434 threads #f #f ()) +(1435 thread-name 1434 7 ()) +(1436 threads #f #f ()) +(1437 really-make-thread 1436 7 ()) +(1438 threads #f #f ()) +(1439 threads #f #f ()) +(1440 thread? 1439 7 ()) +(1441 threads #f #f ()) +(1442 compose-continuation 1441 7 ()) +(1443 #f 1442 6 ()) +(1444 #f 1443 27 ()) +(1445 #f 1444 10 ()) +(1446 #f 1445 9 ()) +(1447 threads #f #f ()) +(1448 thunk->continuation 1447 7 ()) +(1449 threads #f #f ()) +(1450 interrupt-timer-time 1449 7 ()) +(1451 threads #f #f ()) +(1452 debit-down! 1451 7 ()) +(1453 loop 1452 28 ()) +(1454 threads #f #f ()) +(1455 run-thread 1454 7 ()) +(1456 #f 1455 44 ()) +(1457 threads #f #f ()) +(1458 switch-to-thread 1457 7 ()) +(1459 #f 1458 6 ()) +(1460 threads #f #f ()) +(1461 suspend-to 1460 7 ()) +(1462 threads #f #f ()) +(1463 suspend 1462 7 ()) +(1464 threads #f #f ()) +(1465 thread-top-level 1464 7 ()) +(1466 thread-start 1465 6 ()) +(1467 #f 1466 3 ()) +(1468 threads #f #f ()) +(1469 make-thread 1468 7 ()) +(1470 threads #f #f ()) +(1471 all-threads 1470 7 ()) +(1472 threads #f #f ()) +(1473 thread-uid->thread 1472 7 ()) +(1474 loop 1473 27 ()) +(1475 threads #f #f ()) +(1476 add-event! 1475 7 ()) +(1477 threads #f #f ()) +(1478 enqueue-thread! 1477 7 ()) +(1479 threads #f #f ()) +(1480 dequeue-thread! 1479 7 ()) +(1481 threads #f #f ()) +(1482 remove-thread-from-queue! 1481 7 ()) +(1483 threads #f #f ()) +(1484 event-pending? 1483 7 ()) +(1485 threads #f #f ()) +(1486 min 1485 7 ()) +(1487 threads #f #f ()) +(1488 schedule-interrupt! 1487 7 ()) +(1489 threads #f #f ()) +(1490 run-next-thread 1489 7 ()) +(1491 threads #f #f ()) +(1492 debit-thread-times-and-run! 1491 7 ()) +(1493 loop 1492 41 ()) +(1494 threads #f #f ()) +(1495 find-and-run-next-thread 1494 7 ()) +(1496 loop 1495 35 ()) +(1497 threads #f #f ()) +(1498 run 1497 7 ()) +(1499 threads #f #f ()) +(1500 handle-timer-interrupt 1499 7 ()) +(1501 threads #f #f ()) +(1502 exit 1501 7 ()) +(1503 threads #f #f ()) +(1504 wait 1503 7 ()) +(1505 threads #f #f ()) +(1506 waiting? 1505 7 ()) +(1507 threads #f #f ()) +(1508 block 1507 7 ()) +(1509 threads #f #f ()) +(1510 relinquish-timeslice 1509 7 ()) +(1511 threads #f #f ()) +(1512 running? 1511 7 ()) +(1513 loop 1512 25 ()) +(1514 threads #f #f ()) +(1515 interrupt-thread 1514 7 ()) +(1516 threads #f #f ()) +(1517 propogate-upcall 1516 7 ()) +(1518 #f 1517 62 ()) +(1519 threads #f #f ()) +(1520 upcall 1519 7 ()) +(1521 threads #f #f ()) +(1522 kill-thread! 1521 7 ()) +(1523 #f 1522 9 ()) +(1524 threads #f #f ()) +(1525 get-next-event! 1524 7 ()) +(1526 threads #f #f ()) +(1527 schedule-wakeup 1526 7 ()) +(1528 threads #f #f ()) +(1529 schedule-event 1528 7 ()) +(1530 threads #f #f ()) +(1531 show-running 1530 7 ()) +(1532 loop##111 1531 16 ()) +(1533 threads #f #f ()) +(1534 spawn-on-scheduler 1533 7 ()) +(1535 threads #f #f ()) +(1536 spawn 1535 7 ()) +(1537 threads #f #f ()) +(1538 root-scheduler 1537 7 ()) +(1539 threads #f #f ()) +(1540 spawn-on-root 1539 7 ()) +(1541 threads #f #f ()) +(1542 make-ready 1541 7 ()) +(1543 threads #f #f ()) +(1544 cancel-timer-interrupt! 1543 7 ()) +(1545 threads #f #f ()) +(1546 real-time 1545 7 ()) +(1547 threads #f #f ()) +(1548 start-multitasking 1547 7 ()) +(1549 #f 1548 6 ()) +(1550 #f 1549 6 ()) +(1551 #f 1549 11 ()) +(1552 #f 1551 7 ()) +(1553 #f 1552 6 ()) +(1554 #f 1552 11 ()) +(1555 threads #f #f ()) +(1556 with-threads 1555 7 ()) +(1557 #f 1556 10 ()) +(1558 #f 1557 3 ()) +(1559 #f 1557 8 ()) +(1560 #f 1557 13 ()) +(1561 threads #f #f ()) +(1562 terminate-current-thread 1561 7 ()) +(1563 threads #f #f ()) +(1564 insert 1563 7 ()) +(1565 threads #f #f ()) +(1566 sleep 1565 7 ()) +(1567 #f 1566 71 ()) +(1568 threads #f #f ()) +(1569 wake-some-threads 1568 7 ()) +(1570 loop 1569 46 ()) +(1571 threads #f #f ()) +(1572 threads #f #f ()) +(1573 threads #f #f ()) +(1574 threads #f #f ()) +(1575 locks #f #f ()) +(1576 set-lock-owner-uid! 1575 7 ()) +(1577 locks #f #f ()) +(1578 lock-owner-uid 1577 7 ()) +(1579 locks #f #f ()) +(1580 lock-queue 1579 7 ()) +(1581 locks #f #f ()) +(1582 lock-uid 1581 7 ()) +(1583 locks #f #f ()) +(1584 really-make-lock 1583 7 ()) +(1585 locks #f #f ()) +(1586 locks #f #f ()) +(1587 lock? 1586 7 ()) +(1588 locks #f #f ()) +(1589 make-lock 1588 7 ()) +(1590 locks #f #f ()) +(1591 obtain-lock 1590 7 ()) +(1592 #f 1591 10 ()) +(1593 locks #f #f ()) +(1594 maybe-obtain-lock 1593 7 ()) +(1595 #f 1594 10 ()) +(1596 locks #f #f ()) +(1597 release-lock 1596 7 ()) +(1598 #f 1597 10 ()) +(1599 locks #f #f ()) +(1600 i/o #f #f ()) +(1601 i/o #f #f ()) +(1602 i/o #f #f ()) +(1603 i/o #f #f ()) +(1604 #f 1603 11 ()) +(1605 #f 1603 16 ()) +(1606 #f 1603 21 ()) +(1607 i/o #f #f ()) +(1608 i/o #f #f ()) +(1609 i/o #f #f ()) +(1610 i/o #f #f ()) +(1611 i/o #f #f ()) +(1612 i/o #f #f ()) +(1613 i/o #f #f ()) +(1614 i/o #f #f ()) +(1615 i/o #f #f ()) +(1616 i/o #f #f ()) +(1617 &disclose 1616 52 ()) +(1618 i/o #f #f ()) +(1619 &disclose 1618 52 ()) +(1620 i/o #f #f ()) +(1621 port-handler-discloser 1620 7 ()) +(1622 i/o #f #f ()) +(1623 port-handler-close 1622 7 ()) +(1624 i/o #f #f ()) +(1625 port-handler-buffer-proc 1624 7 ()) +(1626 i/o #f #f ()) +(1627 make-port-handler 1626 7 ()) +(1628 i/o #f #f ()) +(1629 i/o #f #f ()) +(1630 port-handler? 1629 7 ()) +(1631 i/o #f #f ()) +(1632 disclose-port 1631 7 ()) +(1633 i/o #f #f ()) +(1634 obtain-port-lock 1633 7 ()) +(1635 i/o #f #f ()) +(1636 maybe-obtain-port-lock 1635 7 ()) +(1637 i/o #f #f ()) +(1638 release-port-lock 1637 7 ()) +(1639 i/o #f #f ()) +(1640 one-arg-proc->handler 1639 7 ()) +(1641 #f 1640 6 ()) +(1642 i/o #f #f ()) +(1643 fill-port-buffer! 1642 7 ()) +(1644 i/o #f #f ()) +(1645 read-char-handler 1644 7 ()) +(1646 #f 1645 6 ()) +(1647 i/o #f #f ()) +(1648 two-arg-proc->handler 1647 7 ()) +(1649 #f 1648 6 ()) +(1650 i/o #f #f ()) +(1651 empty-port-buffer! 1650 7 ()) +(1652 i/o #f #f ()) +(1653 write-char-handler 1652 7 ()) +(1654 i/o #f #f ()) +(1655 initialize-i/o-handlers! 1654 7 ()) +(1656 i/o #f #f ()) +(1657 open-input-port? 1656 7 ()) +(1658 i/o #f #f ()) +(1659 make-input-port-closed! 1658 7 ()) +(1660 i/o #f #f ()) +(1661 close-input-port 1660 7 ()) +(1662 i/o #f #f ()) +(1663 open-output-port? 1662 7 ()) +(1664 i/o #f #f ()) +(1665 really-force-output 1664 7 ()) +(1666 i/o #f #f ()) +(1667 make-output-port-closed! 1666 7 ()) +(1668 i/o #f #f ()) +(1669 close-output-port 1668 7 ()) +(1670 i/o #f #f ()) +(1671 open-port? 1670 7 ()) +(1672 i/o #f #f ()) +(1673 current-input-port 1672 7 ()) +(1674 i/o #f #f ()) +(1675 input-port-option 1674 7 ()) +(1676 i/o #f #f ()) +(1677 char-ready? 1676 7 ()) +(1678 i/o #f #f ()) +(1679 real-char-ready? 1678 7 ()) +(1680 i/o #f #f ()) +(1681 okay-limits? 1680 7 ()) +(1682 i/o #f #f ()) +(1683 read-more 1682 7 ()) +(1684 i/o #f #f ()) +(1685 buffer-length 1684 7 ()) +(1686 i/o #f #f ()) +(1687 really-read-block 1686 7 ()) +(1688 i/o #f #f ()) +(1689 read-block 1688 7 ()) +(1690 i/o #f #f ()) +(1691 write-unbuffered-block 1690 7 ()) +(1692 loop##127 1691 40 ()) +(1693 i/o #f #f ()) +(1694 write-buffered-block 1693 7 ()) +(1695 i/o #f #f ()) +(1696 write-block 1695 7 ()) +(1697 i/o #f #f ()) +(1698 write-string 1697 7 ()) +(1699 i/o #f #f ()) +(1700 force-output 1699 7 ()) +(1701 i/o #f #f ()) +(1702 force-output-if-open 1701 7 ()) +(1703 i/o #f #f ()) +(1704 okay-buffer? 1703 7 ()) +(1705 i/o #f #f ()) +(1706 make-input-port 1705 7 ()) +(1707 i/o #f #f ()) +(1708 make-output-port 1707 7 ()) +(1709 i/o #f #f ()) +(1710 make-unbuffered-output-port 1709 7 ()) +(1711 i/o #f #f ()) +(1712 make-null-output-port 1711 7 ()) +(1713 i/o #f #f ()) +(1714 initialize-output-port-list! 1713 7 ()) +(1715 i/o #f #f ()) +(1716 periodically-force-output! 1715 7 ()) +(1717 i/o #f #f ()) +(1718 make-forcing-thunk 1717 7 ()) +(1719 #f 1718 6 ()) +(1720 #f 1719 7 ()) +(1721 #f 1719 46 ()) +(1722 i/o #f #f ()) +(1723 output-port-forcers 1722 7 ()) +(1724 loop 1723 30 ()) +(1725 i/o #f #f ()) +(1726 periodically-flushed-ports 1725 7 ()) +(1727 loop 1726 35 ()) +(1728 i/o #f #f ()) +(1729 current-output-port 1728 7 ()) +(1730 i/o #f #f ()) +(1731 current-error-port 1730 7 ()) +(1732 i/o #f #f ()) +(1733 current-noise-port 1732 7 ()) +(1734 i/o #f #f ()) +(1735 with-current-ports 1734 7 ()) +(1736 i/o #f #f ()) +(1737 initialize-i/o 1736 7 ()) +(1738 i/o #f #f ()) +(1739 call-with-current-input-port 1738 7 ()) +(1740 i/o #f #f ()) +(1741 call-with-current-output-port 1740 7 ()) +(1742 i/o #f #f ()) +(1743 call-with-current-noise-port 1742 7 ()) +(1744 i/o #f #f ()) +(1745 silently 1744 7 ()) +(1746 i/o #f #f ()) +(1747 output-port-option 1746 7 ()) +(1748 i/o #f #f ()) +(1749 newline 1748 7 ()) +(1750 i/o #f #f ()) +(1751 i/o #f #f ()) +(1752 i/o #f #f ()) +(1753 writing #f #f ()) +(1754 display 1753 7 ()) +(1755 recur 1754 36 ()) +(1756 writing #f #f ()) +(1757 display-type-name 1756 7 ()) +(1758 loop##133 1757 90 ()) +(1759 writing #f #f ()) +(1760 write-other 1759 7 ()) +(1761 #f 1760 73 ()) +(1762 writing #f #f ()) +(1763 write-vector 1762 7 ()) +(1764 loop 1763 76 ()) +(1765 writing #f #f ()) +(1766 quotation? 1765 7 ()) +(1767 writing #f #f ()) +(1768 write-list 1767 7 ()) +(1769 loop 1768 92 ()) +(1770 writing #f #f ()) +(1771 write-string-literal 1770 7 ()) +(1772 loop##137 1771 26 ()) +(1773 writing #f #f ()) +(1774 character-name 1773 7 ()) +(1775 writing #f #f ()) +(1776 write-char-literal 1775 7 ()) +(1777 writing #f #f ()) +(1778 write-number 1777 7 ()) +(1779 writing #f #f ()) +(1780 write-boolean 1779 7 ()) +(1781 writing #f #f ()) +(1782 recurring-write 1781 7 ()) +(1783 writing #f #f ()) +(1784 write 1783 7 ()) +(1785 recur 1784 36 ()) +(1786 reading #f #f ()) +(1787 loop##139 1786 40 ()) +(1788 reading #f #f ()) +(1789 reading #f #f ()) +(1790 number-sharp-macro 1789 7 ()) +(1791 #f 1789 15 ()) +(1792 reading #f #f ()) +(1793 #f 1792 11 ()) +(1794 reading #f #f ()) +(1795 #f 1794 11 ()) +(1796 reading #f #f ()) +(1797 #f 1796 11 ()) +(1798 reading #f #f ()) +(1799 #f 1798 11 ()) +(1800 reading #f #f ()) +(1801 #f 1800 13 ()) +(1802 reading #f #f ()) +(1803 #f 1802 15 ()) +(1804 reading #f #f ()) +(1805 #f 1804 15 ()) +(1806 loop 1805 25 ()) +(1807 reading #f #f ()) +(1808 #f 1807 15 ()) +(1809 reading #f #f ()) +(1810 #f 1809 15 ()) +(1811 reading #f #f ()) +(1812 #f 1811 15 ()) +(1813 reading #f #f ()) +(1814 #f 1813 15 ()) +(1815 reading #f #f ()) +(1816 reading #f #f ()) +(1817 sub-read-constituent 1816 7 ()) +(1818 #f 1816 15 ()) +(1819 reading #f #f ()) +(1820 sub-read-whitespace 1819 7 ()) +(1821 #f 1819 15 ()) +(1822 reading #f #f ()) +(1823 reading #f #f ()) +(1824 #f 1823 11 ()) +(1825 reading #f #f ()) +(1826 reading #f #f ()) +(1827 reading #f #f ()) +(1828 reading #f #f ()) +(1829 reader-token? 1828 7 ()) +(1830 reading #f #f ()) +(1831 reading-error 1830 7 ()) +(1832 reading #f #f ()) +(1833 sub-read 1832 7 ()) +(1834 reading #f #f ()) +(1835 read 1834 7 ()) +(1836 loop 1835 33 ()) +(1837 reading #f #f ()) +(1838 sub-read-carefully 1837 7 ()) +(1839 reading #f #f ()) +(1840 make-reader-token 1839 7 ()) +(1841 reading #f #f ()) +(1842 set-standard-syntax! 1841 7 ()) +(1843 reading #f #f ()) +(1844 set-standard-read-macro! 1843 7 ()) +(1845 reading #f #f ()) +(1846 sub-read-list 1845 7 ()) +(1847 recur 1846 56 ()) +(1848 reading #f #f ()) +(1849 gobble-line 1848 7 ()) +(1850 loop 1849 15 ()) +(1851 reading #f #f ()) +(1852 define-sharp-macro 1851 7 ()) +(1853 reading #f #f ()) +(1854 preferred-case 1853 7 ()) +(1855 reading #f #f ()) +(1856 sub-read-token 1855 7 ()) +(1857 loop 1856 42 ()) +(1858 reading #f #f ()) +(1859 parse-token 1858 7 ()) +(1860 reading #f #f ()) +(1861 reading #f #f ()) +(1862 channels #f #f ()) +(1863 close-output-channel 1862 7 ()) +(1864 channels #f #f ()) +(1865 close-input-channel 1864 7 ()) +(1866 channels #f #f ()) +(1867 open-output-channel 1866 7 ()) +(1868 channels #f #f ()) +(1869 open-input-channel 1868 7 ()) +(1870 channels #f #f ()) +(1871 output-channel? 1870 7 ()) +(1872 channels #f #f ()) +(1873 input-channel? 1872 7 ()) +(1874 channel-i/o #f #f ()) +(1875 fetch-channel-wait-queue! 1874 7 ()) +(1876 loop 1875 113 ()) +(1877 channel-i/o #f #f ()) +(1878 add-channel-wait-queue! 1877 7 ()) +(1879 channel-i/o #f #f ()) +(1880 channel-i/o #f #f ()) +(1881 decrement-channel-wait-count! 1880 7 ()) +(1882 channel-i/o #f #f ()) +(1883 increment-channel-wait-count! 1882 7 ()) +(1884 channel-i/o #f #f ()) +(1885 channel-wait-count 1884 7 ()) +(1886 channel-i/o #f #f ()) +(1887 channel-i/o #f #f ()) +(1888 #f 1887 11 ()) +(1889 channel-i/o #f #f ()) +(1890 #f 1889 11 ()) +(1891 channel-i/o #f #f ()) +(1892 steal-channel! 1891 7 ()) +(1893 channel-i/o #f #f ()) +(1894 nothing 1893 7 ()) +(1895 channel-i/o #f #f ()) +(1896 wait-for-channel 1895 7 ()) +(1897 #f 1896 135 ()) +(1898 channel-i/o #f #f ()) +(1899 waiting-for-i/o? 1898 7 ()) +(1900 channel-i/o #f #f ()) +(1901 i/o-completion-handler 1900 7 ()) +(1902 channel-i/o #f #f ()) +(1903 initialize-channel-i/o! 1902 7 ()) +(1904 channel-i/o #f #f ()) +(1905 really-steal-channel-port! 1904 7 ()) +(1906 #f 1905 154 ()) +(1907 channel-i/o #f #f ()) +(1908 steal-channel-port! 1907 7 ()) +(1909 channel-i/o #f #f ()) +(1910 force-channel-output-ports! 1909 7 ()) +(1911 #f 1910 3 ()) +(1912 channel-i/o #f #f ()) +(1913 with-output-to-file 1912 7 ()) +(1914 #f 1913 9 ()) +(1915 channel-i/o #f #f ()) +(1916 with-input-from-file 1915 7 ()) +(1917 #f 1916 9 ()) +(1918 channel-i/o #f #f ()) +(1919 call-with-output-file 1918 7 ()) +(1920 channel-i/o #f #f ()) +(1921 call-with-input-file 1920 7 ()) +(1922 channel-i/o #f #f ()) +(1923 open-output-file 1922 7 ()) +(1924 channel-i/o #f #f ()) +(1925 open-input-file 1924 7 ()) +(1926 channel-i/o #f #f ()) +(1927 port->channel 1926 7 ()) +(1928 channel-i/o #f #f ()) +(1929 channel-cell? 1928 7 ()) +(1930 channel-i/o #f #f ()) +(1931 channel-cell-ref 1930 7 ()) +(1932 channel-i/o #f #f ()) +(1933 channel-cell-closer 1932 7 ()) +(1934 channel-i/o #f #f ()) +(1935 make-channel-cell 1934 7 ()) +(1936 channel-i/o #f #f ()) +(1937 channel-i/o #f #f ()) +(1938 maybe-force-output 1937 7 ()) +(1939 #f 1938 28 ()) +(1940 channel-i/o #f #f ()) +(1941 real-output-channel->port 1940 7 ()) +(1942 channel-i/o #f #f ()) +(1943 output-channel+closer->port 1942 7 ()) +(1944 channel-i/o #f #f ()) +(1945 output-channel->port 1944 7 ()) +(1946 channel-i/o #f #f ()) +(1947 make-unbuffered-output-channel-handler 1946 7 ()) +(1948 #f 1947 19 ()) +(1949 #f 1947 24 ()) +(1950 #f 1947 29 ()) +(1951 channel-i/o #f #f ()) +(1952 #f 1951 11 ()) +(1953 #f 1951 16 ()) +(1954 #f 1951 21 ()) +(1955 channel-i/o #f #f ()) +(1956 real-input-channel->port 1955 7 ()) +(1957 channel-i/o #f #f ()) +(1958 input-channel+closer->port 1957 7 ()) +(1959 channel-i/o #f #f ()) +(1960 input-channel->port 1959 7 ()) +(1961 channel-i/o #f #f ()) +(1962 #f 1961 11 ()) +(1963 #f 1961 16 ()) +(1964 #f 1961 21 ()) +(1965 scheme-level-2 #f #f ()) +(1966 features #f #f ()) +(1967 tables #f #f ()) +(1968 tables #f #f ()) +(1969 tables #f #f ()) +(1970 tables #f #f ()) +(1971 make-table 1970 32 ()) +(1972 tables #f #f ()) +(1973 tables #f #f ()) +(1974 tables #f #f ()) +(1975 tables #f #f ()) +(1976 tables #f #f ()) +(1977 set-table-size! 1976 7 ()) +(1978 tables #f #f ()) +(1979 table-size 1978 7 ()) +(1980 tables #f #f ()) +(1981 set-table-data! 1980 7 ()) +(1982 tables #f #f ()) +(1983 table-data 1982 7 ()) +(1984 tables #f #f ()) +(1985 set-table-ref-procedure! 1984 7 ()) +(1986 tables #f #f ()) +(1987 table-ref-procedure 1986 7 ()) +(1988 tables #f #f ()) +(1989 set-table-set!-procedure! 1988 7 ()) +(1990 tables #f #f ()) +(1991 table-set!-procedure 1990 7 ()) +(1992 tables #f #f ()) +(1993 really-make-table 1992 7 ()) +(1994 tables #f #f ()) +(1995 tables #f #f ()) +(1996 table? 1995 7 ()) +(1997 tables #f #f ()) +(1998 table-ref 1997 7 ()) +(1999 tables #f #f ()) +(2000 table-set! 1999 7 ()) +(2001 tables #f #f ()) +(2002 next-table-size 2001 7 ()) +(2003 tables #f #f ()) +(2004 delete-entry! 2003 7 ()) +(2005 loop 2004 40 ()) +(2006 tables #f #f ()) +(2007 new-entry 2006 7 ()) +(2008 tables #f #f ()) +(2009 make-linear-table-set! 2008 7 ()) +(2010 #f 2009 6 ()) +(2011 tables #f #f ()) +(2012 table-expand-table! 2011 7 ()) +(2013 tables #f #f ()) +(2014 table-enter-alist! 2013 7 ()) +(2015 loop##166 2014 26 ()) +(2016 tables #f #f ()) +(2017 make-hash-table-ref 2016 7 ()) +(2018 #f 2017 6 ()) +(2019 tables #f #f ()) +(2020 expand-hash-table! 2019 7 ()) +(2021 loop##168 2020 52 ()) +(2022 tables #f #f ()) +(2023 make-hash-table-set! 2022 7 ()) +(2024 #f 2023 6 ()) +(2025 tables #f #f ()) +(2026 make->hash-table 2025 7 ()) +(2027 #f 2026 41 ()) +(2028 tables #f #f ()) +(2029 make-linear-table-ref 2028 7 ()) +(2030 #f 2029 6 ()) +(2031 tables #f #f ()) +(2032 assoc->table-maker 2031 7 ()) +(2033 #f 2032 60 ()) +(2034 tables #f #f ()) +(2035 make-assoc 2034 7 ()) +(2036 #f 2035 20 ()) +(2037 loop 2036 18 ()) +(2038 tables #f #f ()) +(2039 make-table-maker 2038 7 ()) +(2040 tables #f #f ()) +(2041 alist-walk 2040 7 ()) +(2042 loop##170 2041 11 ()) +(2043 tables #f #f ()) +(2044 really-table-walk 2043 7 ()) +(2045 loop##173 2044 63 ()) +(2046 tables #f #f ()) +(2047 table-walk 2046 7 ()) +(2048 #f 2047 6 ()) +(2049 tables #f #f ()) +(2050 make-table-immutable! 2049 7 ()) +(2051 tables #f #f ()) +(2052 table->entry-list 2051 7 ()) +(2053 #f 2052 17 ()) +(2054 tables #f #f ()) +(2055 default-table-hash-function 2054 7 ()) +(2056 tables #f #f ()) +(2057 default-table-assoc 2056 7 ()) +(2058 tables #f #f ()) +(2059 symbol-hash 2058 7 ()) +(2060 tables #f #f ()) +(2061 tables #f #f ()) +(2062 weak #f #f ()) +(2063 walk-population 2062 7 ()) +(2064 #f 2063 6 ()) +(2065 weak #f #f ()) +(2066 population->list 2065 7 ()) +(2067 weak #f #f ()) +(2068 population-reduce 2067 7 ()) +(2069 loop##175 2068 11 ()) +(2070 weak #f #f ()) +(2071 weak-memq 2070 7 ()) +(2072 weak #f #f ()) +(2073 add-to-population! 2072 7 ()) +(2074 weak #f #f ()) +(2075 make-population 2074 7 ()) +(2076 meta-types #f #f ()) +(2077 meta-types #f #f ()) +(2078 meta-types #f #f ()) +(2079 meta-types #f #f ()) +(2080 meta-types #f #f ()) +(2081 meta-types #f #f ()) +(2082 meta-types #f #f ()) +(2083 meta-types #f #f ()) +(2084 meta-types #f #f ()) +(2085 meta-types #f #f ()) +(2086 meta-types #f #f ()) +(2087 meta-types #f #f ()) +(2088 meta-types #f #f ()) +(2089 meta-types #f #f ()) +(2090 meta-types #f #f ()) +(2091 meta-types #f #f ()) +(2092 meta-types #f #f ()) +(2093 meta-types #f #f ()) +(2094 meta-types #f #f ()) +(2095 meta-types #f #f ()) +(2096 meta-types #f #f ()) +(2097 meta-types #f #f ()) +(2098 meta-types #f #f ()) +(2099 meta-types #f #f ()) +(2100 meta-types #f #f ()) +(2101 meta-types #f #f ()) +(2102 meta-types #f #f ()) +(2103 meta-types #f #f ()) +(2104 meta-types #f #f ()) +(2105 meta-types #f #f ()) +(2106 loop 2105 28 ()) +(2107 meta-types #f #f ()) +(2108 meta-types #f #f ()) +(2109 meta-types #f #f ()) +(2110 meta-types #f #f ()) +(2111 meta-types #f #f ()) +(2112 meta-types #f #f ()) +(2113 meta-types #f #f ()) +(2114 meta-types #f #f ()) +(2115 meta-types #f #f ()) +(2116 meta-types #f #f ()) +(2117 meta-types #f #f ()) +(2118 meta-types #f #f ()) +(2119 meta-types #f #f ()) +(2120 meta-types #f #f ()) +(2121 meta-types #f #f ()) +(2122 meta-types #f #f ()) +(2123 meta-types #f #f ()) +(2124 meta-types #f #f ()) +(2125 meta-types #f #f ()) +(2126 meta-types #f #f ()) +(2127 #f 2126 11 ()) +(2128 meta-types #f #f ()) +(2129 type-mask 2128 7 ()) +(2130 meta-types #f #f ()) +(2131 type-more 2130 7 ()) +(2132 meta-types #f #f ()) +(2133 type-info 2132 7 ()) +(2134 meta-types #f #f ()) +(2135 really-make-type 2134 7 ()) +(2136 meta-types #f #f ()) +(2137 meta-types #f #f ()) +(2138 meta-type? 2137 7 ()) +(2139 meta-types #f #f ()) +(2140 make-type 2139 7 ()) +(2141 meta-types #f #f ()) +(2142 set-type-name! 2141 7 ()) +(2143 meta-types #f #f ()) +(2144 make-other-type 2143 7 ()) +(2145 meta-types #f #f ()) +(2146 name->type 2145 7 ()) +(2147 meta-types #f #f ()) +(2148 new-type-bit 2147 7 ()) +(2149 meta-types #f #f ()) +(2150 mask->type 2149 7 ()) +(2151 meta-types #f #f ()) +(2152 bottom-type? 2151 7 ()) +(2153 meta-types #f #f ()) +(2154 new-atomic-type 2153 7 ()) +(2155 meta-types #f #f ()) +(2156 named-atomic-type 2155 7 ()) +(2157 meta-types #f #f ()) +(2158 empty-rail-type? 2157 7 ()) +(2159 meta-types #f #f ()) +(2160 rest-type? 2159 7 ()) +(2161 meta-types #f #f ()) +(2162 same-type? 2161 7 ()) +(2163 meta-types #f #f ()) +(2164 head-type 2163 7 ()) +(2165 meta-types #f #f ()) +(2166 optional-type? 2165 7 ()) +(2167 meta-types #f #f ()) +(2168 rail-type 2167 7 ()) +(2169 meta-types #f #f ()) +(2170 make-optional-type 2169 7 ()) +(2171 meta-types #f #f ()) +(2172 make-rest-type 2171 7 ()) +(2173 meta-types #f #f ()) +(2174 head-type-really 2173 7 ()) +(2175 meta-types #f #f ()) +(2176 tail-type 2175 7 ()) +(2177 meta-types #f #f ()) +(2178 value-type? 2177 7 ()) +(2179 meta-types #f #f ()) +(2180 other-type-info 2179 7 ()) +(2181 meta-types #f #f ()) +(2182 restrictive? 2181 7 ()) +(2183 meta-types #f #f ()) +(2184 make-procedure-type 2183 7 ()) +(2185 meta-types #f #f ()) +(2186 procedure-type-domain 2185 7 ()) +(2187 meta-types #f #f ()) +(2188 procedure-type-codomain 2187 7 ()) +(2189 meta-types #f #f ()) +(2190 meet-procedure 2189 7 ()) +(2191 meta-types #f #f ()) +(2192 meet-rail 2191 7 ()) +(2193 meta-types #f #f ()) +(2194 meet-type 2193 7 ()) +(2195 meta-types #f #f ()) +(2196 subtype? 2195 7 ()) +(2197 meta-types #f #f ()) +(2198 meet-procedure? 2197 7 ()) +(2199 meta-types #f #f ()) +(2200 meet? 2199 7 ()) +(2201 meta-types #f #f ()) +(2202 procedure-type? 2201 7 ()) +(2203 meta-types #f #f ()) +(2204 join-procedure 2203 7 ()) +(2205 meta-types #f #f ()) +(2206 join-rail 2205 7 ()) +(2207 meta-types #f #f ()) +(2208 join-type 2207 7 ()) +(2209 meta-types #f #f ()) +(2210 procedure-type 2209 7 ()) +(2211 meta-types #f #f ()) +(2212 sexp->values-type 2211 7 ()) +(2213 meta-types #f #f ()) +(2214 sexp->type 2213 7 ()) +(2215 #f 2214 285 ()) +(2216 #f 2214 349 ()) +(2217 meta-types #f #f ()) +(2218 disjoin-rest 2217 7 ()) +(2219 meta-types #f #f ()) +(2220 disjoin-type 2219 7 ()) +(2221 loop##194 2220 262 ()) +(2222 meta-types #f #f ()) +(2223 atomic-type->sexp 2222 7 ()) +(2224 meta-types #f #f ()) +(2225 rail-type->sexp 2224 7 ()) +(2226 recur 2225 25 ()) +(2227 meta-types #f #f ()) +(2228 type->sexp 2227 7 ()) +(2229 #f 2228 141 ()) +(2230 meta-types #f #f ()) +(2231 make-some-values-type 2230 7 ()) +(2232 meta-types #f #f ()) +(2233 fixed-arity-procedure-type? 2232 7 ()) +(2234 loop 2233 43 ()) +(2235 meta-types #f #f ()) +(2236 procedure-type-arity 2235 7 ()) +(2237 loop##197 2236 11 ()) +(2238 meta-types #f #f ()) +(2239 procedure-type-argument-types 2238 7 ()) +(2240 recur 2239 28 ()) +(2241 meta-types #f #f ()) +(2242 variable-type 2241 7 ()) +(2243 meta-types #f #f ()) +(2244 variable-type? 2243 7 ()) +(2245 meta-types #f #f ()) +(2246 compatible-types? 2245 7 ()) +(2247 meta-types #f #f ()) +(2248 meta-types #f #f ()) +(2249 meta-types #f #f ()) +(2250 interfaces #f #f ()) +(2251 #f 2250 7 ()) +(2252 interfaces #f #f ()) +(2253 ref-method 2252 7 ()) +(2254 interfaces #f #f ()) +(2255 walk-method 2254 7 ()) +(2256 interfaces #f #f ()) +(2257 interface-clients 2256 7 ()) +(2258 interfaces #f #f ()) +(2259 set-interface-name! 2258 7 ()) +(2260 interfaces #f #f ()) +(2261 interface-name 2260 7 ()) +(2262 interfaces #f #f ()) +(2263 really-make-interface 2262 7 ()) +(2264 interfaces #f #f ()) +(2265 interfaces #f #f ()) +(2266 interface? 2265 7 ()) +(2267 interfaces #f #f ()) +(2268 interface-ref 2267 7 ()) +(2269 interfaces #f #f ()) +(2270 for-each-declaration 2269 7 ()) +(2271 interfaces #f #f ()) +(2272 note-reference-to-interface! 2271 7 ()) +(2273 interfaces #f #f ()) +(2274 make-interface 2273 7 ()) +(2275 interfaces #f #f ()) +(2276 really-make-simple-interface 2275 7 ()) +(2277 #f 2276 6 ()) +(2278 #f 2276 11 ()) +(2279 interfaces #f #f ()) +(2280 make-simple-interface 2279 7 ()) +(2281 #f 2280 23 ()) +(2282 #f 2281 66 ()) +(2283 interfaces #f #f ()) +(2284 make-compound-interface 2283 7 ()) +(2285 #f 2284 12 ()) +(2286 loop 2285 18 ()) +(2287 #f 2284 17 ()) +(2288 #f 2287 6 ()) +(2289 #f 2284 38 ()) +(2290 interfaces #f #f ()) +(2291 note-interface-name! 2290 7 ()) +(2292 bindings #f #f ()) +(2293 bindings #f #f ()) +(2294 binding-type 2293 7 ()) +(2295 bindings #f #f ()) +(2296 binding-place 2295 7 ()) +(2297 bindings #f #f ()) +(2298 binding-static 2297 7 ()) +(2299 bindings #f #f ()) +(2300 binding-path 2299 7 ()) +(2301 bindings #f #f ()) +(2302 set-binding-place! 2301 7 ()) +(2303 bindings #f #f ()) +(2304 make-binding 2303 7 ()) +(2305 bindings #f #f ()) +(2306 add-path 2305 7 ()) +(2307 bindings #f #f ()) +(2308 clobber-binding! 2307 7 ()) +(2309 bindings #f #f ()) +(2310 impose-type 2309 7 ()) +(2311 bindings #f #f ()) +(2312 forget-integration 2311 7 ()) +(2313 bindings #f #f ()) +(2314 same-denotation? 2313 7 ()) +(2315 bindings #f #f ()) +(2316 follow-forwarding-pointers 2315 7 ()) +(2317 bindings #f #f ()) +(2318 maybe-fix-place! 2317 7 ()) +(2319 names #f #f ()) +(2320 #f 2319 7 ()) +(2321 names #f #f ()) +(2322 transform-procedure 2321 7 ()) +(2323 names #f #f ()) +(2324 transform-env 2323 7 ()) +(2325 names #f #f ()) +(2326 transform-type 2325 7 ()) +(2327 names #f #f ()) +(2328 transform-aux-names 2327 7 ()) +(2329 names #f #f ()) +(2330 transform-source 2329 7 ()) +(2331 names #f #f ()) +(2332 transform-id 2331 7 ()) +(2333 names #f #f ()) +(2334 really-make-transform 2333 7 ()) +(2335 names #f #f ()) +(2336 names #f #f ()) +(2337 names #f #f ()) +(2338 #f 2337 11 ()) +(2339 names #f #f ()) +(2340 generated-symbol 2339 7 ()) +(2341 names #f #f ()) +(2342 generated-token 2341 7 ()) +(2343 names #f #f ()) +(2344 generated-env 2343 7 ()) +(2345 names #f #f ()) +(2346 generated-parent-name 2345 7 ()) +(2347 names #f #f ()) +(2348 make-generated 2347 7 ()) +(2349 names #f #f ()) +(2350 names #f #f ()) +(2351 generated? 2350 7 ()) +(2352 names #f #f ()) +(2353 name? 2352 7 ()) +(2354 names #f #f ()) +(2355 generate-name 2354 7 ()) +(2356 names #f #f ()) +(2357 generated-uid 2356 7 ()) +(2358 names #f #f ()) +(2359 name->symbol 2358 7 ()) +(2360 names #f #f ()) +(2361 name-hash 2360 7 ()) +(2362 names #f #f ()) +(2363 desyntaxify 2362 7 ()) +(2364 loop 2363 267 ()) +(2365 names #f #f ()) +(2366 make-qualified 2365 7 ()) +(2367 names #f #f ()) +(2368 qualified? 2367 7 ()) +(2369 names #f #f ()) +(2370 qualified-parent-name 2369 7 ()) +(2371 names #f #f ()) +(2372 qualified-symbol 2371 7 ()) +(2373 names #f #f ()) +(2374 lookup 2373 7 ()) +(2375 names #f #f ()) +(2376 transform? 2375 7 ()) +(2377 names #f #f ()) +(2378 qualify-parent 2377 7 ()) +(2379 recur 2378 18 ()) +(2380 names #f #f ()) +(2381 name->qualified 2380 7 ()) +(2382 names #f #f ()) +(2383 make-transform 2382 7 ()) +(2384 names #f #f ()) +(2385 name->source-name 2384 7 ()) +(2386 names #f #f ()) +(2387 make-keyword-comparator 2386 7 ()) +(2388 #f 2387 6 ()) +(2389 names #f #f ()) +(2390 make-name-generator 2389 7 ()) +(2391 #f 2390 13 ()) +(2392 names #f #f ()) +(2393 bind-aliases 2392 7 ()) +(2394 #f 2393 36 ()) +(2395 names #f #f ()) +(2396 maybe-apply-macro-transform 2395 7 ()) +(2397 names #f #f ()) +(2398 apply-inline-transform 2397 7 ()) +(2399 names #f #f ()) +(2400 compiler-envs #f #f ()) +(2401 compiler-envs #f #f ()) +(2402 compiler-envs #f #f ()) +(2403 compiler-envs #f #f ()) +(2404 compiler-envs #f #f ()) +(2405 lookup 2404 7 ()) +(2406 compiler-envs #f #f ()) +(2407 bind1 2406 7 ()) +(2408 #f 2407 6 ()) +(2409 compiler-envs #f #f ()) +(2410 bind 2409 7 ()) +(2411 compiler-envs #f #f ()) +(2412 bindrec 2411 7 ()) +(2413 #f 2412 17 ()) +(2414 compiler-envs #f #f ()) +(2415 make-compiler-env 2414 7 ()) +(2416 #f 2415 6 ()) +(2417 compiler-envs #f #f ()) +(2418 environment-macro-eval 2417 7 ()) +(2419 compiler-envs #f #f ()) +(2420 environment-define! 2419 7 ()) +(2421 compiler-envs #f #f ()) +(2422 extract-package-from-environment 2421 7 ()) +(2423 compiler-envs #f #f ()) +(2424 bind-source-file-name 2423 7 ()) +(2425 compiler-envs #f #f ()) +(2426 source-file-name 2425 7 ()) +(2427 thingies #f #f ()) +(2428 thingie-binding 2427 7 ()) +(2429 thingies #f #f ()) +(2430 thingie-name 2429 7 ()) +(2431 thingies #f #f ()) +(2432 thingie-want-type 2431 7 ()) +(2433 thingies #f #f ()) +(2434 make-thingie 2433 7 ()) +(2435 thingies #f #f ()) +(2436 thingies #f #f ()) +(2437 thingie? 2436 7 ()) +(2438 packages #f #f ()) +(2439 #f 2438 11 ()) +(2440 packages #f #f ()) +(2441 packages #f #f ()) +(2442 packages #f #f ()) +(2443 packages #f #f ()) +(2444 packages #f #f ()) +(2445 packages #f #f ()) +(2446 packages #f #f ()) +(2447 packages #f #f ()) +(2448 #f 2447 11 ()) +(2449 packages #f #f ()) +(2450 package-uid 2449 7 ()) +(2451 packages #f #f ()) +(2452 set-package-opens! 2451 7 ()) +(2453 packages #f #f ()) +(2454 package-opens-really 2453 7 ()) +(2455 packages #f #f ()) +(2456 package-definitions 2455 7 ()) +(2457 packages #f #f ()) +(2458 package-unstable? 2457 7 ()) +(2459 packages #f #f ()) +(2460 set-package-integrate?! 2459 7 ()) +(2461 packages #f #f ()) +(2462 package-integrate? 2461 7 ()) +(2463 packages #f #f ()) +(2464 set-package-get-location! 2463 7 ()) +(2465 packages #f #f ()) +(2466 package-get-location 2465 7 ()) +(2467 packages #f #f ()) +(2468 package-file-name 2467 7 ()) +(2469 packages #f #f ()) +(2470 package-clauses 2469 7 ()) +(2471 packages #f #f ()) +(2472 set-package-loaded?! 2471 7 ()) +(2473 packages #f #f ()) +(2474 package-loaded? 2473 7 ()) +(2475 packages #f #f ()) +(2476 set-package->environment! 2475 7 ()) +(2477 packages #f #f ()) +(2478 package->environment 2477 7 ()) +(2479 packages #f #f ()) +(2480 set-package-opens-thunk! 2479 7 ()) +(2481 packages #f #f ()) +(2482 package-opens-thunk 2481 7 ()) +(2483 packages #f #f ()) +(2484 package-accesses-thunk 2483 7 ()) +(2485 packages #f #f ()) +(2486 set-package-undefineds! 2485 7 ()) +(2487 packages #f #f ()) +(2488 package-real-undefineds 2487 7 ()) +(2489 packages #f #f ()) +(2490 set-package-undefined-but-assigneds! 2489 7 ()) +(2491 packages #f #f ()) +(2492 package-real-undefined-but-assigneds 2491 7 ()) +(2493 packages #f #f ()) +(2494 package-clients 2493 7 ()) +(2495 packages #f #f ()) +(2496 package-cached 2495 7 ()) +(2497 packages #f #f ()) +(2498 really-make-package 2497 7 ()) +(2499 packages #f #f ()) +(2500 packages #f #f ()) +(2501 #f 2500 11 ()) +(2502 packages #f #f ()) +(2503 structure-interface-thunk 2502 7 ()) +(2504 packages #f #f ()) +(2505 set-structure-interface! 2504 7 ()) +(2506 packages #f #f ()) +(2507 structure-interface-really 2506 7 ()) +(2508 packages #f #f ()) +(2509 structure-package 2508 7 ()) +(2510 packages #f #f ()) +(2511 structure-clients 2510 7 ()) +(2512 packages #f #f ()) +(2513 set-structure-name! 2512 7 ()) +(2514 packages #f #f ()) +(2515 structure-name 2514 7 ()) +(2516 packages #f #f ()) +(2517 really-make-structure 2516 7 ()) +(2518 packages #f #f ()) +(2519 packages #f #f ()) +(2520 structure? 2519 7 ()) +(2521 packages #f #f ()) +(2522 initialize-structure! 2521 7 ()) +(2523 packages #f #f ()) +(2524 structure-interface 2523 7 ()) +(2525 packages #f #f ()) +(2526 package? 2525 7 ()) +(2527 packages #f #f ()) +(2528 note-package-name! 2527 7 ()) +(2529 packages #f #f ()) +(2530 note-structure-name! 2529 7 ()) +(2531 packages #f #f ()) +(2532 make-structure 2531 7 ()) +(2533 #f 2532 85 ()) +(2534 packages #f #f ()) +(2535 structure-unstable? 2534 7 ()) +(2536 packages #f #f ()) +(2537 get-new-location 2536 7 ()) +(2538 packages #f #f ()) +(2539 package-define! 2538 7 ()) +(2540 packages #f #f ()) +(2541 package-accesses 2540 7 ()) +(2542 packages #f #f ()) +(2543 initialize-package! 2542 7 ()) +(2544 #f 2543 45 ()) +(2545 #f 2543 59 ()) +(2546 packages #f #f ()) +(2547 initialize-package-if-necessary! 2546 7 ()) +(2548 packages #f #f ()) +(2549 package-definition 2548 7 ()) +(2550 packages #f #f ()) +(2551 search-opens 2550 7 ()) +(2552 loop 2551 18 ()) +(2553 packages #f #f ()) +(2554 structure-lookup 2553 7 ()) +(2555 packages #f #f ()) +(2556 package-lookup 2555 7 ()) +(2557 packages #f #f ()) +(2558 generic-lookup 2557 7 ()) +(2559 packages #f #f ()) +(2560 really-package-lookup 2559 7 ()) +(2561 packages #f #f ()) +(2562 real-structure-lookup 2561 7 ()) +(2563 packages #f #f ()) +(2564 for-each-export 2563 7 ()) +(2565 #f 2564 22 ()) +(2566 packages #f #f ()) +(2567 really-package->environment 2566 7 ()) +(2568 #f 2567 6 ()) +(2569 #f 2567 11 ()) +(2570 packages #f #f ()) +(2571 new-package-uid 2570 7 ()) +(2572 packages #f #f ()) +(2573 make-package 2572 7 ()) +(2574 packages #f #f ()) +(2575 lazy-table-accessor 2574 7 ()) +(2576 #f 2575 6 ()) +(2577 packages #f #f ()) +(2578 package-name 2577 7 ()) +(2579 packages #f #f ()) +(2580 package-opens 2579 7 ()) +(2581 packages #f #f ()) +(2582 make-simple-package 2581 7 ()) +(2583 #f 2582 65 ()) +(2584 #f 2582 70 ()) +(2585 packages #f #f ()) +(2586 package-add-static! 2585 7 ()) +(2587 packages #f #f ()) +(2588 package-refine-type! 2587 7 ()) +(2589 packages #f #f ()) +(2590 for-each-definition 2589 7 ()) +(2591 #f 2590 6 ()) +(2592 packages #f #f ()) +(2593 make-new-location 2592 7 ()) +(2594 packages #f #f ()) +(2595 flush-location-names 2594 7 ()) +(2596 packages #f #f ()) +(2597 print-undefined-names 2596 7 ()) +(2598 #f 2597 10 ()) +(2599 #f 2597 184 ()) +(2600 packages #f #f ()) +(2601 noting-undefined-variables 2600 7 ()) +(2602 add-name 2601 13 ()) +(2603 #f 2601 25 ()) +(2604 #f 2601 30 ()) +(2605 #f 2604 3 ()) +(2606 #f 2604 11 ()) +(2607 #f 2606 3 ()) +(2608 packages #f #f ()) +(2609 cenv->package 2608 7 ()) +(2610 packages #f #f ()) +(2611 get-location-for-unassignable 2610 7 ()) +(2612 #f 2611 98 ()) +(2613 #f 2611 103 ()) +(2614 packages #f #f ()) +(2615 package-note-caching! 2614 7 ()) +(2616 loop 2615 79 ()) +(2617 packages #f #f ()) +(2618 note-caching! 2617 7 ()) +(2619 packages #f #f ()) +(2620 location-for-reference 2619 7 ()) +(2621 loop 2620 28 ()) +(2622 packages #f #f ()) +(2623 get-location-for-undefined 2622 7 ()) +(2624 #f 2623 105 ()) +(2625 packages #f #f ()) +(2626 get-location 2625 7 ()) +(2627 packages #f #f ()) +(2628 really-link! 2627 7 ()) +(2629 loop##277 2628 11 ()) +(2630 packages #f #f ()) +(2631 link! 2630 7 ()) +(2632 #f 2631 14 ()) +(2633 packages #f #f ()) +(2634 location-on-demand 2633 7 ()) +(2635 #f 2634 6 ()) +(2636 packages #f #f ()) +(2637 packages #f #f ()) +(2638 environments #f #f ()) +(2639 set-reflective-tower-maker! 2638 28 ()) +(2640 environments #f #f ()) +(2641 make-reflective-tower 2640 7 ()) +(2642 recur 2641 19 ()) +(2643 #f 2642 6 ()) +(2644 environments #f #f ()) +(2645 null-environment 2644 7 ()) +(2646 environments #f #f ()) +(2647 set-scheme-report-environment! 2646 7 ()) +(2648 environments #f #f ()) +(2649 environments #f #f ()) +(2650 environments #f #f ()) +(2651 environments #f #f ()) +(2652 scheme-report-environment 2651 7 ()) +(2653 environments #f #f ()) +(2654 with-interaction-environment 2653 7 ()) +(2655 environments #f #f ()) +(2656 set-interaction-environment! 2655 7 ()) +(2657 environments #f #f ()) +(2658 interaction-environment 2657 7 ()) +(2659 environments #f #f ()) +(2660 environments #f #f ()) +(2661 carefully 2660 7 ()) +(2662 environments #f #f ()) +(2663 *structure-ref 2662 7 ()) +(2664 environments #f #f ()) +(2665 environment-define! 2664 7 ()) +(2666 environments #f #f ()) +(2667 environment-set! 2666 7 ()) +(2668 #f 2667 115 ()) +(2669 environments #f #f ()) +(2670 environment-ref 2669 7 ()) +(2671 #f 2670 22 ()) +(2672 filenames #f #f ()) +(2673 translate 2672 7 ()) +(2674 loop 2673 26 ()) +(2675 filenames #f #f ()) +(2676 set-translation! 2675 7 ()) +(2677 filenames #f #f ()) +(2678 translations 2677 7 ()) +(2679 filenames #f #f ()) +(2680 filenames #f #f ()) +(2681 string-posq 2680 7 ()) +(2682 loop 2681 19 ()) +(2683 filenames #f #f ()) +(2684 file-nondirectory-position 2683 7 ()) +(2685 loop 2684 24 ()) +(2686 filenames #f #f ()) +(2687 file-name-nondirectory 2686 7 ()) +(2688 filenames #f #f ()) +(2689 file-name-directory 2688 7 ()) +(2690 filenames #f #f ()) +(2691 filenames #f #f ()) +(2692 filenames #f #f ()) +(2693 filenames #f #f ()) +(2694 namestring-component 2693 7 ()) +(2695 filenames #f #f ()) +(2696 filenames #f #f ()) +(2697 filenames #f #f ()) +(2698 namestring 2697 7 ()) +(2699 #f 2698 192 ()) +(2700 reading-forms #f #f ()) +(2701 really-read-forms 2700 7 ()) +(2702 loop 2701 19 ()) +(2703 reading-forms #f #f ()) +(2704 read-forms 2703 7 ()) +(2705 #f 2704 47 ()) +(2706 reading-forms #f #f ()) +(2707 #f 2706 11 ()) +(2708 nodes #f #f ()) +(2709 #f 2708 15 ()) +(2710 nodes #f #f ()) +(2711 #f 2710 19 ()) +(2712 nodes #f #f ()) +(2713 #f 2712 19 ()) +(2714 #f 2713 29 ()) +(2715 #f 2713 57 ()) +(2716 nodes #f #f ()) +(2717 nodes #f #f ()) +(2718 nodes #f #f ()) +(2719 #f 2718 19 ()) +(2720 #f 2719 6 ()) +(2721 nodes #f #f ()) +(2722 #f 2721 19 ()) +(2723 nodes #f #f ()) +(2724 #f 2723 19 ()) +(2725 nodes #f #f ()) +(2726 #f 2725 11 ()) +(2727 nodes #f #f ()) +(2728 #f 2727 11 ()) +(2729 nodes #f #f ()) +(2730 node-operator-id 2729 7 ()) +(2731 nodes #f #f ()) +(2732 node-form 2731 7 ()) +(2733 nodes #f #f ()) +(2734 set-node-plist! 2733 7 ()) +(2735 nodes #f #f ()) +(2736 node-plist 2735 7 ()) +(2737 nodes #f #f ()) +(2738 really-make-node 2737 7 ()) +(2739 nodes #f #f ()) +(2740 nodes #f #f ()) +(2741 nodes #f #f ()) +(2742 nodes #f #f ()) +(2743 nodes #f #f ()) +(2744 nodes #f #f ()) +(2745 #f 2744 11 ()) +(2746 nodes #f #f ()) +(2747 set-operator-type! 2746 7 ()) +(2748 nodes #f #f ()) +(2749 operator-type 2748 7 ()) +(2750 nodes #f #f ()) +(2751 operator-nargs 2750 7 ()) +(2752 nodes #f #f ()) +(2753 operator-uid 2752 7 ()) +(2754 nodes #f #f ()) +(2755 operator-name 2754 7 ()) +(2756 nodes #f #f ()) +(2757 make-operator 2756 7 ()) +(2758 nodes #f #f ()) +(2759 nodes #f #f ()) +(2760 operator? 2759 7 ()) +(2761 nodes #f #f ()) +(2762 get-operator 2761 7 ()) +(2763 nodes #f #f ()) +(2764 make-operator-table 2763 7 ()) +(2765 nodes #f #f ()) +(2766 operator-lookup 2765 7 ()) +(2767 nodes #f #f ()) +(2768 operator-define! 2767 7 ()) +(2769 nodes #f #f ()) +(2770 node? 2769 7 ()) +(2771 nodes #f #f ()) +(2772 make-node 2771 7 ()) +(2773 nodes #f #f ()) +(2774 node-ref 2773 7 ()) +(2775 nodes #f #f ()) +(2776 node-set! 2775 7 ()) +(2777 loop 2776 103 ()) +(2778 nodes #f #f ()) +(2779 node-operator 2778 7 ()) +(2780 nodes #f #f ()) +(2781 node-predicate 2780 7 ()) +(2782 #f 2781 37 ()) +(2783 nodes #f #f ()) +(2784 make-similar-node 2783 7 ()) +(2785 nodes #f #f ()) +(2786 force-node 2785 7 ()) +(2787 nodes #f #f ()) +(2788 schemify-node 2787 7 ()) +(2789 nodes #f #f ()) +(2790 schemify-sexp 2789 7 ()) +(2791 loop 2790 147 ()) +(2792 nodes #f #f ()) +(2793 schemify 2792 7 ()) +(2794 nodes #f #f ()) +(2795 schemify-nodes 2794 7 ()) +(2796 #f 2795 6 ()) +(2797 nodes #f #f ()) +(2798 define-schemifier 2797 7 ()) +(2799 nodes #f #f ()) +(2800 schemify-formals 2799 7 ()) +(2801 nodes #f #f ()) +(2802 schemify-lambda 2801 7 ()) +(2803 nodes #f #f ()) +(2804 nodes #f #f ()) +(2805 var-utilities #f #f ()) +(2806 normalize-formals 2805 7 ()) +(2807 var-utilities #f #f ()) +(2808 n-ary? 2807 7 ()) +(2809 var-utilities #f #f ()) +(2810 number-of-required-args 2809 7 ()) +(2811 loop##296 2810 11 ()) +(2812 syntactic #f #f ()) +(2813 syntactic #f #f ()) +(2814 syntactic #f #f ()) +(2815 syntactic #f #f ()) +(2816 syntactic #f #f ()) +(2817 syntactic #f #f ()) +(2818 syntactic #f #f ()) +(2819 syntactic #f #f ()) +(2820 syntactic #f #f ()) +(2821 syntactic #f #f ()) +(2822 syntactic #f #f ()) +(2823 syntactic #f #f ()) +(2824 syntactic #f #f ()) +(2825 syntactic #f #f ()) +(2826 syntactic #f #f ()) +(2827 syntactic #f #f ()) +(2828 syntactic #f #f ()) +(2829 #f 2828 19 ()) +(2830 #f 2829 113 ()) +(2831 syntactic #f #f ()) +(2832 #f 2831 19 ()) +(2833 #f 2832 104 ()) +(2834 #f 2833 6 ()) +(2835 syntactic #f #f ()) +(2836 #f 2835 19 ()) +(2837 #f 2836 108 ()) +(2838 syntactic #f #f ()) +(2839 #f 2838 19 ()) +(2840 syntactic #f #f ()) +(2841 #f 2840 19 ()) +(2842 #f 2841 87 ()) +(2843 syntactic #f #f ()) +(2844 #f 2843 19 ()) +(2845 syntactic #f #f ()) +(2846 #f 2845 19 ()) +(2847 syntactic #f #f ()) +(2848 #f 2847 19 ()) +(2849 syntactic #f #f ()) +(2850 #f 2849 19 ()) +(2851 syntactic #f #f ()) +(2852 #f 2851 19 ()) +(2853 syntactic #f #f ()) +(2854 #f 2853 19 ()) +(2855 syntactic #f #f ()) +(2856 #f 2855 19 ()) +(2857 syntactic #f #f ()) +(2858 #f 2857 19 ()) +(2859 syntactic #f #f ()) +(2860 #f 2859 11 ()) +(2861 syntactic #f #f ()) +(2862 syntactic #f #f ()) +(2863 syntactic #f #f ()) +(2864 syntactic #f #f ()) +(2865 at-least-this-long? 2864 7 ()) +(2866 syntactic #f #f ()) +(2867 names? 2866 7 ()) +(2868 syntactic #f #f ()) +(2869 destructure-define 2868 7 ()) +(2870 syntactic #f #f ()) +(2871 scan-define 2870 7 ()) +(2872 syntactic #f #f ()) +(2873 this-long? 2872 7 ()) +(2874 syntactic #f #f ()) +(2875 process-syntax 2874 7 ()) +(2876 syntactic #f #f ()) +(2877 scan-define-syntax 2876 7 ()) +(2878 syntactic #f #f ()) +(2879 expand-name 2878 7 ()) +(2880 syntactic #f #f ()) +(2881 expand-operator-form 2880 7 ()) +(2882 syntactic #f #f ()) +(2883 literal? 2882 7 ()) +(2884 syntactic #f #f ()) +(2885 expand-literal 2884 7 ()) +(2886 syntactic #f #f ()) +(2887 expand-list 2886 7 ()) +(2888 #f 2887 6 ()) +(2889 syntactic #f #f ()) +(2890 expand-call 2889 7 ()) +(2891 syntactic #f #f ()) +(2892 expand 2891 7 ()) +(2893 syntactic #f #f ()) +(2894 expand-macro-application 2893 7 ()) +(2895 #f 2894 6 ()) +(2896 syntactic #f #f ()) +(2897 expand-structure-ref 2896 7 ()) +(2898 lose 2897 32 ()) +(2899 syntactic #f #f ()) +(2900 expand-head 2899 7 ()) +(2901 syntactic #f #f ()) +(2902 scan-forms 2901 7 ()) +(2903 loop 2902 22 ()) +(2904 syntactic #f #f ()) +(2905 expand-define 2904 7 ()) +(2906 syntactic #f #f ()) +(2907 expand-scanned-form 2906 7 ()) +(2908 syntactic #f #f ()) +(2909 expand-form 2908 7 ()) +(2910 loop 2909 32 ()) +(2911 syntactic #f #f ()) +(2912 static-value 2911 7 ()) +(2913 syntactic #f #f ()) +(2914 make-operator-predicate 2913 7 ()) +(2915 #f 2914 26 ()) +(2916 syntactic #f #f ()) +(2917 body-lossage 2916 7 ()) +(2918 syntactic #f #f ()) +(2919 scan-body-forms 2918 7 ()) +(2920 #f 2919 231 ()) +(2921 syntactic #f #f ()) +(2922 expand-letrec 2921 7 ()) +(2923 #f 2922 10 ()) +(2924 syntactic #f #f ()) +(2925 expand-body 2924 7 ()) +(2926 #f 2925 33 ()) +(2927 syntactic #f #f ()) +(2928 define-expander 2927 7 ()) +(2929 syntactic #f #f ()) +(2930 unspecific-node 2929 7 ()) +(2931 syntactic #f #f ()) +(2932 bind-names 2931 7 ()) +(2933 loop 2932 26 ()) +(2934 syntactic #f #f ()) +(2935 expand-lambda 2934 7 ()) +(2936 #f 2935 6 ()) +(2937 syntactic #f #f ()) +(2938 specs? 2937 7 ()) +(2939 syntactic #f #f ()) +(2940 syntax? 2939 7 ()) +(2941 primops #f #f ()) +(2942 primops #f #f ()) +(2943 #f 2942 11 ()) +(2944 primops #f #f ()) +(2945 primop-name 2944 7 ()) +(2946 primops #f #f ()) +(2947 primop-type 2946 7 ()) +(2948 primops #f #f ()) +(2949 primop-closed 2948 7 ()) +(2950 primops #f #f ()) +(2951 primop-compilator 2950 7 ()) +(2952 primops #f #f ()) +(2953 make-primop 2952 7 ()) +(2954 primops #f #f ()) +(2955 primops #f #f ()) +(2956 primop? 2955 7 ()) +(2957 primops #f #f ()) +(2958 walk-primops 2957 7 ()) +(2959 #f 2958 6 ()) +(2960 primops #f #f ()) +(2961 define-compiler-primitive 2960 7 ()) +(2962 primops #f #f ()) +(2963 get-primop 2962 7 ()) +(2964 debug-data #f #f ()) +(2965 #f 2964 7 ()) +(2966 debug-data #f #f ()) +(2967 debug-data-uid 2966 7 ()) +(2968 debug-data #f #f ()) +(2969 debug-data-name 2968 7 ()) +(2970 debug-data #f #f ()) +(2971 debug-data-parent 2970 7 ()) +(2972 debug-data #f #f ()) +(2973 debug-data-pc-in-parent 2972 7 ()) +(2974 debug-data #f #f ()) +(2975 set-debug-data-env-maps! 2974 7 ()) +(2976 debug-data #f #f ()) +(2977 debug-data-env-maps 2976 7 ()) +(2978 debug-data #f #f ()) +(2979 set-debug-data-source! 2978 7 ()) +(2980 debug-data #f #f ()) +(2981 debug-data-source 2980 7 ()) +(2982 debug-data #f #f ()) +(2983 make-debug-data 2982 7 ()) +(2984 debug-data #f #f ()) +(2985 debug-data #f #f ()) +(2986 debug-data? 2985 7 ()) +(2987 stack-check #f #f ()) +(2988 loop##324 2987 8 ()) +(2989 stack-check #f #f ()) +(2990 #f 2989 11 ()) +(2991 loop 2990 48 ()) +(2992 stack-check #f #f ()) +(2993 #f 2992 11 ()) +(2994 stack-check #f #f ()) +(2995 #f 2994 11 ()) +(2996 stack-check #f #f ()) +(2997 stack-check #f #f ()) +(2998 stack-check #f #f ()) +(2999 #f 2998 11 ()) +(3000 loop 2999 68 ()) +(3001 stack-check #f #f ()) +(3002 #f 3001 11 ()) +(3003 stack-check #f #f ()) +(3004 #f 3003 11 ()) +(3005 stack-check #f #f ()) +(3006 #f 3005 11 ()) +(3007 stack-check #f #f ()) +(3008 #f 3007 11 ()) +(3009 stack-check #f #f ()) +(3010 stack-check #f #f ()) +(3011 stack-check #f #f ()) +(3012 stack-check #f #f ()) +(3013 stack-check #f #f ()) +(3014 stack-check #f #f ()) +(3015 stack-check #f #f ()) +(3016 stack-check #f #f ()) +(3017 stack-check #f #f ()) +(3018 stack-check #f #f ()) +(3019 stack-check #f #f ()) +(3020 stack-check #f #f ()) +(3021 stack-check #f #f ()) +(3022 stack-check #f #f ()) +(3023 stack-check #f #f ()) +(3024 stack-check #f #f ()) +(3025 stack-check #f #f ()) +(3026 stack-max 3025 7 ()) +(3027 stack-check #f #f ()) +(3028 protocol-skip 3027 7 ()) +(3029 stack-check #f #f ()) +(3030 maximum-stack-use 3029 7 ()) +(3031 loop##327 3030 74 ()) +(3032 stack-check #f #f ()) +(3033 nothing 3032 7 ()) +(3034 #f 3033 6 ()) +(3035 stack-check #f #f ()) +(3036 popper 3035 7 ()) +(3037 #f 3036 6 ()) +(3038 stack-check #f #f ()) +(3039 imax 3038 7 ()) +(3040 stack-check #f #f ()) +(3041 pusher 3040 7 ()) +(3042 #f 3041 6 ()) +(3043 stack-check #f #f ()) +(3044 continue 3043 7 ()) +(3045 stack-check #f #f ()) +(3046 continuer 3045 7 ()) +(3047 #f 3046 6 ()) +(3048 stack-check #f #f ()) +(3049 get-offset 3048 7 ()) +(3050 stack-check #f #f ()) +(3051 do-make-cont 3050 7 ()) +(3052 #f 3051 6 ()) +(3053 stack-check #f #f ()) +(3054 arg-spec-size 3053 7 ()) +(3055 stack-check #f #f ()) +(3056 stack-function 3055 7 ()) +(3057 loop 3056 22 ()) +(3058 segments #f #f ()) +(3059 segments #f #f ()) +(3060 segments #f #f ()) +(3061 segments #f #f ()) +(3062 #f 3061 15 ()) +(3063 segments #f #f ()) +(3064 astate-code-vector 3063 7 ()) +(3065 segments #f #f ()) +(3066 set-astate-pc! 3065 7 ()) +(3067 segments #f #f ()) +(3068 astate-pc 3067 7 ()) +(3069 segments #f #f ()) +(3070 set-astate-count! 3069 7 ()) +(3071 segments #f #f ()) +(3072 astate-count 3071 7 ()) +(3073 segments #f #f ()) +(3074 set-astate-literals! 3073 7 ()) +(3075 segments #f #f ()) +(3076 astate-literals 3075 7 ()) +(3077 segments #f #f ()) +(3078 make-assembly-state 3077 7 ()) +(3079 segments #f #f ()) +(3080 segments #f #f ()) +(3081 segments #f #f ()) +(3082 segments #f #f ()) +(3083 segments #f #f ()) +(3084 segments #f #f ()) +(3085 segments #f #f ()) +(3086 segments #f #f ()) +(3087 segments #f #f ()) +(3088 segments #f #f ()) +(3089 segments #f #f ()) +(3090 segments #f #f ()) +(3091 segments #f #f ()) +(3092 segments #f #f ()) +(3093 new-template-uid 3092 7 ()) +(3094 segments #f #f ()) +(3095 template-uid 3094 7 ()) +(3096 segments #f #f ()) +(3097 set-template-uid! 3096 7 ()) +(3098 segments #f #f ()) +(3099 debug-flag-accessor 3098 7 ()) +(3100 #f 3099 26 ()) +(3101 segments #f #f ()) +(3102 debug-flag-modifier 3101 7 ()) +(3103 #f 3102 26 ()) +(3104 segments #f #f ()) +(3105 saving-and-restoring 3104 7 ()) +(3106 swap 3105 6 ()) +(3107 segments #f #f ()) +(3108 with-fresh-compiler-state 3107 7 ()) +(3109 #f 3108 44 ()) +(3110 #f 3109 3 ()) +(3111 #f 3109 8 ()) +(3112 segments #f #f ()) +(3113 note-debug-data! 3112 7 ()) +(3114 segments #f #f ()) +(3115 debug-data->info 3114 7 ()) +(3116 segments #f #f ()) +(3117 get-debug-data 3116 7 ()) +(3118 segments #f #f ()) +(3119 new-debug-data 3118 7 ()) +(3120 segments #f #f ()) +(3121 high-byte 3120 7 ()) +(3122 segments #f #f ()) +(3123 emit-byte! 3122 7 ()) +(3124 segments #f #f ()) +(3125 low-byte 3124 7 ()) +(3126 segments #f #f ()) +(3127 position 3126 7 ()) +(3128 loop 3127 22 ()) +(3129 segments #f #f ()) +(3130 literal-position 3129 7 ()) +(3131 #f 3130 21 ()) +(3132 segments #f #f ()) +(3133 literal->index 3132 7 ()) +(3134 segments #f #f ()) +(3135 emit-literal! 3134 7 ()) +(3136 segments #f #f ()) +(3137 code-vector-set2! 3136 7 ()) +(3138 segments #f #f ()) +(3139 check-stack-use 3138 7 ()) +(3140 loop##338 3139 77 ()) +(3141 segments #f #f ()) +(3142 emit-segment! 3141 7 ()) +(3143 segments #f #f ()) +(3144 emit-with-environment-maps! 3143 7 ()) +(3145 #f 3144 14 ()) +(3146 segments #f #f ()) +(3147 make-astate 3146 7 ()) +(3148 segments #f #f ()) +(3149 template 3148 7 ()) +(3150 #f 3149 10 ()) +(3151 segments #f #f ()) +(3152 segment-data->template 3151 7 ()) +(3153 loop##340 3152 68 ()) +(3154 segments #f #f ()) +(3155 segment->template 3154 7 ()) +(3156 #f 3155 124 ()) +(3157 segments #f #f ()) +(3158 instruction 3157 7 ()) +(3159 #f 3158 30 ()) +(3160 #f 3159 22 ()) +(3161 segments #f #f ()) +(3162 sequentially-2 3161 7 ()) +(3163 #f 3162 59 ()) +(3164 segments #f #f ()) +(3165 sequentially 3164 7 ()) +(3166 loop 3165 105 ()) +(3167 #f 3165 120 ()) +(3168 loop 3167 18 ()) +(3169 segments #f #f ()) +(3170 instruction-with-literal 3169 7 ()) +(3171 #f 3170 30 ()) +(3172 #f 3171 160 ()) +(3173 segments #f #f ()) +(3174 instruction-with-location 3173 7 ()) +(3175 #f 3174 10 ()) +(3176 segments #f #f ()) +(3177 make-label 3176 7 ()) +(3178 segments #f #f ()) +(3179 insert-label! 3178 7 ()) +(3180 segments #f #f ()) +(3181 instruction-using-label 3180 7 ()) +(3182 #f 3181 49 ()) +(3183 segments #f #f ()) +(3184 computed-goto-instruction 3183 7 ()) +(3185 #f 3184 68 ()) +(3186 loop##341 3185 75 ()) +(3187 segments #f #f ()) +(3188 attach-label 3187 7 ()) +(3189 #f 3188 19 ()) +(3190 #f 3189 37 ()) +(3191 segments #f #f ()) +(3192 note-source-code 3191 7 ()) +(3193 #f 3192 19 ()) +(3194 segments #f #f ()) +(3195 note-environment 3194 7 ()) +(3196 #f 3195 31 ()) +(3197 segments #f #f ()) +(3198 segments #f #f ()) +(3199 segments #f #f ()) +(3200 reconstruction #f #f ()) +(3201 constant-type 3200 7 ()) +(3202 reconstruction #f #f ()) +(3203 reconstruction #f #f ()) +(3204 reconstruction #f #f ()) +(3205 reconstruct-apply 3204 7 ()) +(3206 #f 3205 56 ()) +(3207 reconstruction #f #f ()) +(3208 #f 3207 11 ()) +(3209 reconstruction #f #f ()) +(3210 #f 3209 11 ()) +(3211 #f 3210 10 ()) +(3212 reconstruction #f #f ()) +(3213 #f 3212 15 ()) +(3214 reconstruction #f #f ()) +(3215 define-primop-reconstructor 3214 7 ()) +(3216 reconstruction #f #f ()) +(3217 reconstruction #f #f ()) +(3218 reconstruction #f #f ()) +(3219 reconstruction #f #f ()) +(3220 reconstruction #f #f ()) +(3221 #f 3220 15 ()) +(3222 reconstruction #f #f ()) +(3223 #f 3222 15 ()) +(3224 reconstruction #f #f ()) +(3225 node->type 3224 7 ()) +(3226 reconstruction #f #f ()) +(3227 #f 3226 15 ()) +(3228 reconstruction #f #f ()) +(3229 #f 3228 15 ()) +(3230 #f 3229 60 ()) +(3231 reconstruction #f #f ()) +(3232 #f 3231 15 ()) +(3233 reconstruction #f #f ()) +(3234 #f 3233 15 ()) +(3235 loop##343 3234 11 ()) +(3236 reconstruction #f #f ()) +(3237 reconstruction #f #f ()) +(3238 fork-constraints 3237 7 ()) +(3239 #f 3238 13 ()) +(3240 reconstruction #f #f ()) +(3241 #f 3240 15 ()) +(3242 #f 3241 153 ()) +(3243 reconstruction #f #f ()) +(3244 #f 3243 13 ()) +(3245 reconstruction #f #f ()) +(3246 #f 3245 13 ()) +(3247 reconstruction #f #f ()) +(3248 #f 3247 15 ()) +(3249 reconstruction #f #f ()) +(3250 #f 3249 15 ()) +(3251 reconstruction #f #f ()) +(3252 reconstruct-call 3251 7 ()) +(3253 lose 3252 112 ()) +(3254 #f 3253 3 ()) +(3255 loop 3252 179 ()) +(3256 reconstruction #f #f ()) +(3257 proc->reconstructor 3256 7 ()) +(3258 reconstruction #f #f ()) +(3259 #f 3258 15 ()) +(3260 reconstruction #f #f ()) +(3261 reconstruct-name 3260 7 ()) +(3262 reconstruction #f #f ()) +(3263 #f 3262 15 ()) +(3264 reconstruction #f #f ()) +(3265 careful-codomain 3264 7 ()) +(3266 reconstruction #f #f ()) +(3267 reconstruct-lambda 3266 7 ()) +(3268 #f 3267 71 ()) +(3269 reconstruction #f #f ()) +(3270 #f 3269 15 ()) +(3271 reconstruction #f #f ()) +(3272 #f 3271 15 ()) +(3273 reconstruction #f #f ()) +(3274 define-reconstructor 3273 7 ()) +(3275 reconstruction #f #f ()) +(3276 #f 3275 11 ()) +(3277 reconstruction #f #f ()) +(3278 examine 3277 7 ()) +(3279 reconstruction #f #f ()) +(3280 reconstruct 3279 7 ()) +(3281 reconstruction #f #f ()) +(3282 reconstruct-type 3281 7 ()) +(3283 reconstruction #f #f ()) +(3284 node-type 3283 7 ()) +(3285 compiler #f #f ()) +(3286 compiler #f #f ()) +(3287 loop 3286 60 ()) +(3288 compiler #f #f ()) +(3289 compiler #f #f ()) +(3290 compiler #f #f ()) +(3291 define-one-or-two 3290 7 ()) +(3292 #f 3291 12 ()) +(3293 #f 3291 17 ()) +(3294 compiler #f #f ()) +(3295 define-one-or-two 3294 7 ()) +(3296 #f 3295 73 ()) +(3297 #f 3295 78 ()) +(3298 compiler #f #f ()) +(3299 compiler #f #f ()) +(3300 compiler #f #f ()) +(3301 define=< 3300 7 ()) +(3302 #f 3301 73 ()) +(3303 #f 3301 78 ()) +(3304 compiler #f #f ()) +(3305 define+* 3304 7 ()) +(3306 #f 3305 43 ()) +(3307 #f 3305 48 ()) +(3308 compiler #f #f ()) +(3309 define-char-io 3308 7 ()) +(3310 #f 3309 12 ()) +(3311 #f 3309 17 ()) +(3312 compiler #f #f ()) +(3313 define-char-io 3312 7 ()) +(3314 #f 3313 12 ()) +(3315 #f 3313 17 ()) +(3316 compiler #f #f ()) +(3317 n-ary-constructor 3316 7 ()) +(3318 #f 3317 16 ()) +(3319 #f 3317 21 ()) +(3320 compiler #f #f ()) +(3321 #f 3320 21 ()) +(3322 compiler #f #f ()) +(3323 #f 3322 44 ()) +(3324 #f 3323 112 ()) +(3325 #f 3322 49 ()) +(3326 compiler #f #f ()) +(3327 #f 3326 17 ()) +(3328 #f 3326 22 ()) +(3329 compiler #f #f ()) +(3330 #f 3329 73 ()) +(3331 #f 3329 84 ()) +(3332 compiler #f #f ()) +(3333 #f 3332 71 ()) +(3334 #f 3332 76 ()) +(3335 compiler #f #f ()) +(3336 #f 3335 57 ()) +(3337 #f 3335 62 ()) +(3338 compiler #f #f ()) +(3339 compiler #f #f ()) +(3340 #f 3339 7 ()) +(3341 compiler #f #f ()) +(3342 compiler #f #f ()) +(3343 #f 3342 7 ()) +(3344 compiler #f #f ()) +(3345 compiler #f #f ()) +(3346 compiler #f #f ()) +(3347 compiler #f #f ()) +(3348 compiler #f #f ()) +(3349 loop##347 3348 12 ()) +(3350 compiler #f #f ()) +(3351 compiler #f #f ()) +(3352 #f 3351 19 ()) +(3353 compiler #f #f ()) +(3354 compiler #f #f ()) +(3355 compiler #f #f ()) +(3356 compiler #f #f ()) +(3357 compiler #f #f ()) +(3358 compiler #f #f ()) +(3359 compiler #f #f ()) +(3360 compiler #f #f ()) +(3361 #f 3360 19 ()) +(3362 compiler #f #f ()) +(3363 compiler #f #f ()) +(3364 compiler #f #f ()) +(3365 compiler #f #f ()) +(3366 compiler #f #f ()) +(3367 #f 3366 19 ()) +(3368 #f 3367 73 ()) +(3369 #f 3367 157 ()) +(3370 compiler #f #f ()) +(3371 #f 3370 19 ()) +(3372 compiler #f #f ()) +(3373 #f 3372 19 ()) +(3374 compiler #f #f ()) +(3375 compiler #f #f ()) +(3376 #f 3375 19 ()) +(3377 loop 3376 89 ()) +(3378 compiler #f #f ()) +(3379 #f 3378 19 ()) +(3380 compiler #f #f ()) +(3381 #f 3380 19 ()) +(3382 compiler #f #f ()) +(3383 #f 3382 19 ()) +(3384 compiler #f #f ()) +(3385 #f 3384 19 ()) +(3386 compiler #f #f ()) +(3387 #f 3386 41 ()) +(3388 compiler #f #f ()) +(3389 #f 3388 41 ()) +(3390 compiler #f #f ()) +(3391 #f 3390 19 ()) +(3392 compiler #f #f ()) +(3393 #f 3392 11 ()) +(3394 compiler #f #f ()) +(3395 diagnose-call-error 3394 7 ()) +(3396 #f 3395 173 ()) +(3397 compiler #f #f ()) +(3398 type-check 3397 7 ()) +(3399 #f 3398 121 ()) +(3400 compiler #f #f ()) +(3401 compile 3400 7 ()) +(3402 compiler #f #f ()) +(3403 compile-expression 3402 7 ()) +(3404 compiler #f #f ()) +(3405 define-compilator 3404 7 ()) +(3406 compiler #f #f ()) +(3407 ignore-values-cont? 3406 7 ()) +(3408 compiler #f #f ()) +(3409 deliver-value 3408 7 ()) +(3410 compiler #f #f ()) +(3411 compile-constant 3410 7 ()) +(3412 compiler #f #f ()) +(3413 return-cont? 3412 7 ()) +(3414 compiler #f #f ()) +(3415 fixup-source 3414 7 ()) +(3416 compiler #f #f ()) +(3417 maybe-push-continuation 3416 7 ()) +(3418 compiler #f #f ()) +(3419 make-cont 3418 7 ()) +(3420 compiler #f #f ()) +(3421 fall-through-cont 3420 7 ()) +(3422 compiler #f #f ()) +(3423 push-arguments 3422 7 ()) +(3424 recur 3423 37 ()) +(3425 compiler #f #f ()) +(3426 compile-unknown-call 3425 7 ()) +(3427 compiler #f #f ()) +(3428 name-node-binding 3427 7 ()) +(3429 compiler #f #f ()) +(3430 compile-name-call 3429 7 ()) +(3431 compiler #f #f ()) +(3432 generate-trap 3431 7 ()) +(3433 compiler #f #f ()) +(3434 named-cont 3433 7 ()) +(3435 compiler #f #f ()) +(3436 push-all-with-names 3435 7 ()) +(3437 compiler #f #f ()) +(3438 set-lexical-offsets! 3437 7 ()) +(3439 loop 3438 22 ()) +(3440 compiler #f #f ()) +(3441 name-node->symbol 3440 7 ()) +(3442 compiler #f #f ()) +(3443 return-cont 3442 7 ()) +(3444 compiler #f #f ()) +(3445 compile-lambda-code 3444 7 ()) +(3446 compiler #f #f ()) +(3447 cont-name 3446 7 ()) +(3448 compiler #f #f ()) +(3449 compile-redex 3448 7 ()) +(3450 compiler #f #f ()) +(3451 compile-call 3450 7 ()) +(3452 compiler #f #f ()) +(3453 compile-lambda 3452 7 ()) +(3454 compiler #f #f ()) +(3455 variable-env-data 3454 7 ()) +(3456 level-loop 3455 26 ()) +(3457 loop 3456 60 ()) +(3458 loop 3457 123 ()) +(3459 compiler #f #f ()) +(3460 sort-list 3459 7 ()) +(3461 insert 3460 11 ()) +(3462 sort 3460 32 ()) +(3463 compiler #f #f ()) +(3464 get-variables-offsets 3463 7 ()) +(3465 loop 3464 22 ()) +(3466 compiler #f #f ()) +(3467 compile-flat-lambda 3466 7 ()) +(3468 #f 3467 26 ()) +(3469 #f 3467 366 ()) +(3470 compiler #f #f ()) +(3471 fall-through-cont? 3470 7 ()) +(3472 compiler #f #f ()) +(3473 ignore-values-cont 3472 7 ()) +(3474 compiler #f #f ()) +(3475 set-type-check?! 3474 7 ()) +(3476 compiler #f #f ()) +(3477 push-all-but-last 3476 7 ()) +(3478 recur 3477 25 ()) +(3479 compiler #f #f ()) +(3480 direct-compilator 3479 7 ()) +(3481 #f 3480 6 ()) +(3482 compiler #f #f ()) +(3483 direct-closed-compilator 3482 7 ()) +(3484 #f 3483 6 ()) +(3485 compiler #f #f ()) +(3486 nargs->domain 3485 7 ()) +(3487 loop##356 3486 11 ()) +(3488 compiler #f #f ()) +(3489 get-primop-type 3488 7 ()) +(3490 #f 3489 10 ()) +(3491 compiler #f #f ()) +(3492 simple-compilator 3491 7 ()) +(3493 #f 3492 6 ()) +(3494 compiler #f #f ()) +(3495 simple-closed-compilator 3494 7 ()) +(3496 #f 3495 6 ()) +(3497 compiler #f #f ()) +(3498 define-simple-primitive 3497 7 ()) +(3499 compiler #f #f ()) +(3500 symbol-append 3499 7 ()) +(3501 compiler #f #f ()) +(3502 define-stob-predicate 3501 7 ()) +(3503 compiler #f #f ()) +(3504 define-data-struct-primitives 3503 7 ()) +(3505 def-prim 3504 8 ()) +(3506 loop##358 3504 190 ()) +(3507 compiler #f #f ()) +(3508 define-vector-primitives 3507 7 ()) +(3509 def-prim 3508 26 ()) +(3510 compiler #f #f ()) +(3511 n-ary-primitive-compilator 3510 7 ()) +(3512 #f 3511 6 ()) +(3513 compiler #f #f ()) +(3514 define-n-ary-compiler-primitive 3513 7 ()) +(3515 compiler #f #f ()) +(3516 call-on-arg-and-id 3515 7 ()) +(3517 compiler #f #f ()) +(3518 call-on-args 3517 7 ()) +(3519 do-arg 3518 6 ()) +(3520 loop 3518 52 ()) +(3521 compiler #f #f ()) +(3522 make-dispatch-protocol 3521 7 ()) +(3523 compiler #f #f ()) +(3524 compile-definition 3523 7 ()) +(3525 compiler #f #f ()) +(3526 compile-form 3525 7 ()) +(3527 compiler #f #f ()) +(3528 compile-forms-loop 3527 7 ()) +(3529 compiler #f #f ()) +(3530 compile-forms 3529 7 ()) +(3531 compiler #f #f ()) +(3532 append-templates 3531 7 ()) +(3533 #f 3532 31 ()) +(3534 compiler #f #f ()) +(3535 make-startup-procedure 3534 7 ()) +(3536 compiler #f #f ()) +(3537 evaluation #f #f ()) +(3538 compile-and-run 3537 7 ()) +(3539 #f 3538 61 ()) +(3540 #f 3539 6 ()) +(3541 evaluation #f #f ()) +(3542 really-load-into 3541 7 ()) +(3543 evaluation #f #f ()) +(3544 load 3543 7 ()) +(3545 evaluation #f #f ()) +(3546 eval-from-file 3545 7 ()) +(3547 evaluation #f #f ()) +(3548 load-into 3547 7 ()) +(3549 evaluation #f #f ()) +(3550 eval 3549 7 ()) +(3551 scheme #f #f ()) +(3552 display-conditions #f #f ()) +(3553 limited-write 3552 7 ()) +(3554 recur 3553 22 ()) +(3555 #f 3554 145 ()) +(3556 #f 3555 24 ()) +(3557 display-conditions #f #f ()) +(3558 &disclose-condition 3557 52 ()) +(3559 display-conditions #f #f ()) +(3560 display-conditions #f #f ()) +(3561 display-conditions #f #f ()) +(3562 display-conditions #f #f ()) +(3563 display-conditions #f #f ()) +(3564 really-display-condition 3563 7 ()) +(3565 #f 3564 246 ()) +(3566 display-conditions #f #f ()) +(3567 display-condition 3566 22 ()) +(3568 #f 3567 10 ()) +(3569 mini-command #f #f ()) +(3570 read-string 3569 7 ()) +(3571 loop 3570 23 ()) +(3572 mini-command #f #f ()) +(3573 mini-load 3572 7 ()) +(3574 mini-command #f #f ()) +(3575 command-processor 3574 7 ()) +(3576 loop 3575 77 ()) +(3577 #f 3576 7 ()) +(3578 #f 3577 6 ()) +(3579 #f 3578 68 ()) +(3580 #f 3577 11 ()) +(3581 #f 3580 75 ()) +(3582 #f 3580 201 ()) +(3583 #f 3580 246 ()) +(3584 #f 3583 12 ()) +(3585 export-the-record-type #f #f ()) +(3586 enum-case #f #f ()) +(3587 scheduler #f #f ()) +(3588 decrement-counter! 3587 7 ()) +(3589 scheduler #f #f ()) +(3590 increment-counter! 3589 7 ()) +(3591 scheduler #f #f ()) +(3592 scheduler #f #f ()) +(3593 make-counter 3592 7 ()) +(3594 scheduler #f #f ()) +(3595 round-robin-event-handler 3594 7 ()) +(3596 thread-event-handler 3595 15 ()) +(3597 #f 3596 111 ()) +(3598 asynchronous-event-handler 3595 24 ()) +(3599 next-thread 3595 33 ()) +(3600 #f 3599 18 ()) +(3601 scheduler #f #f ()) +(3602 run-threads-with-housekeeper 3601 7 ()) +(3603 #f 3602 6 ()) +(3604 loop 3603 29 ()) +(3605 #f 3604 6 ()) +(3606 #f 3605 57 ()) +(3607 scheduler #f #f ()) +(3608 run-threads 3607 7 ()) +(3609 #f 3608 6 ()) +(3610 loop 3609 26 ()) +(3611 #f 3610 6 ()) +(3612 #f 3611 8 ()) +(3613 root-scheduler #f #f ()) +(3614 root-scheduler #f #f ()) +(3615 spawn-output-forcers 3614 7 ()) +(3616 root-scheduler #f #f ()) +(3617 call-when-deadlocked! 3616 7 ()) +(3618 root-scheduler #f #f ()) +(3619 root-scheduler #f #f ()) +(3620 do-some-waiting 3619 7 ()) +(3621 root-scheduler #f #f ()) +(3622 root-scheduler #f #f ()) +(3623 root-wait 3622 7 ()) +(3624 #f 3623 22 ()) +(3625 root-scheduler #f #f ()) +(3626 scheme-exit-now 3625 7 ()) +(3627 root-scheduler #f #f ()) +(3628 root-scheduler #f #f ()) +(3629 cheap-display-condition 3628 7 ()) +(3630 #f 3629 164 ()) +(3631 root-scheduler #f #f ()) +(3632 root-handler 3631 7 ()) +(3633 root-scheduler #f #f ()) +(3634 make-root-event-handler 3633 7 ()) +(3635 #f 3634 115 ()) +(3636 #f 3634 120 ()) +(3637 root-scheduler #f #f ()) +(3638 root-scheduler 3637 7 ()) +(3639 #f 3638 13 ()) +(3640 #f 3639 24 ()) +(3641 #f 3639 41 ()) +(3642 usual-resumer #f #f ()) +(3643 usual-resumer #f #f ()) +(3644 initialize-rts 3643 7 ()) +(3645 #f 3644 44 ()) +(3646 #f 3645 7 ()) +(3647 #f 3646 46 ()) +(3648 #f 3647 3 ()) +(3649 usual-resumer #f #f ()) +(3650 usual-resumer 3649 7 ()) +(3651 #f 3650 6 ()) +(3652 #f 3651 15 ()) +(3653 initial-system #f #f ()) +(3654 make-tower 3653 7 ()) +(3655 initial-system #f #f ()) +(3656 make-initial-package 3655 7 ()) +(3657 #f 3656 17 ()) +(3658 initial-system #f #f ()) +(3659 initialize-interaction-environment! 3658 7 ()) +(3660 initial-system #f #f ()) +(3661 make-built-in-structures 3660 7 ()) +(3662 #f 3661 38 ()) +(3663 #f 3661 60 ()) +(3664 initial-system #f #f ()) +(3665 start 3664 7 ()) +(3666 #f 3665 6 ()) +(3667 #f 3666 6 ()) +(3668 #f 3667 64 ()) +(3669 usual-macros #f #f ()) +(3670 find-free-names-in-syntax-rules 3669 7 ()) +(3671 meta-variables 3670 13 ()) +(3672 free-names 3670 22 ()) +(3673 loop##378 3670 36 ()) +(3674 usual-macros #f #f ()) +(3675 usual-macros #f #f ()) +(3676 segment-tail 3675 7 ()) +(3677 loop 3676 21 ()) +(3678 usual-macros #f #f ()) +(3679 segment-depth 3678 7 ()) +(3680 usual-macros #f #f ()) +(3681 segment-template? 3680 7 ()) +(3682 usual-macros #f #f ()) +(3683 segment-pattern? 3682 7 ()) +(3684 usual-macros #f #f ()) +(3685 process-rules 3684 7 ()) +(3686 make-transformer 3685 424 ()) +(3687 process-rule 3685 433 ()) +(3688 #f 3687 114 ()) +(3689 process-match 3685 442 ()) +(3690 process-segment-match 3685 451 ()) +(3691 process-pattern 3685 460 ()) +(3692 #f 3691 97 ()) +(3693 process-template 3685 469 ()) +(3694 loop##382 3693 294 ()) +(3695 meta-variables 3685 478 ()) +(3696 free-meta-variables 3685 487 ()) +(3697 usual-macros #f #f ()) +(3698 #f 3697 11 ()) +(3699 usual-macros #f #f ()) +(3700 #f 3699 11 ()) +(3701 expand-quasiquote 3700 154 ()) +(3702 finalize-quasiquote 3700 163 ()) +(3703 descend-quasiquote 3700 172 ()) +(3704 descend-quasiquote-pair 3700 181 ()) +(3705 #f 3704 15 ()) +(3706 #f 3705 15 ()) +(3707 descend-quasiquote-vector 3700 190 ()) +(3708 #f 3707 22 ()) +(3709 interesting-to-quasiquote? 3700 199 ()) +(3710 usual-macros #f #f ()) +(3711 case-clause? 3710 7 ()) +(3712 usual-macros #f #f ()) +(3713 #f 3712 11 ()) +(3714 #f 3713 28 ()) +(3715 #f 3713 218 ()) +(3716 usual-macros #f #f ()) +(3717 #f 3716 11 ()) +(3718 usual-macros #f #f ()) +(3719 specs? 3718 7 ()) +(3720 usual-macros #f #f ()) +(3721 #f 3720 11 ()) +(3722 usual-macros #f #f ()) +(3723 #f 3722 11 ()) +(3724 usual-macros #f #f ()) +(3725 do-spec? 3724 7 ()) +(3726 usual-macros #f #f ()) +(3727 #f 3726 11 ()) +(3728 #f 3727 238 ()) +(3729 usual-macros #f #f ()) +(3730 #f 3729 11 ()) +(3731 recur 3730 85 ()) +(3732 usual-macros #f #f ()) +(3733 #f 3732 11 ()) +(3734 usual-macros #f #f ()) +(3735 usual-transform 3734 7 ()) +(3736 usual-macros #f #f ()) +(3737 define-usual-macro 3736 7 ()) +(3738 usual-macros #f #f ()) +(3739 strong #f #f ()) +(3740 pop-vertex-edge! 3739 7 ()) +(3741 strong #f #f ()) +(3742 follow-edge 3741 7 ()) +(3743 strong #f #f ()) +(3744 unwind-stack 3743 7 ()) +(3745 loop 3744 22 ()) +(3746 strong #f #f ()) +(3747 end-vertex 3746 7 ()) +(3748 #f 3747 6 ()) +(3749 strong #f #f ()) +(3750 get-strong 3749 7 ()) +(3751 strong #f #f ()) +(3752 do-vertex 3751 7 ()) +(3753 strong #f #f ()) +(3754 make-vertices 3753 7 ()) +(3755 maybe-slot 3754 6 ()) +(3756 #f 3754 18 ()) +(3757 #f 3754 36 ()) +(3758 strong #f #f ()) +(3759 make-vertex 3758 7 ()) +(3760 strong #f #f ()) +(3761 vertex? 3760 7 ()) +(3762 strong #f #f ()) +(3763 vertex-data 3762 7 ()) +(3764 strong #f #f ()) +(3765 set-vertex-edges! 3764 7 ()) +(3766 strong #f #f ()) +(3767 vertex-edges 3766 7 ()) +(3768 strong #f #f ()) +(3769 set-vertex-stack! 3768 7 ()) +(3770 strong #f #f ()) +(3771 vertex-stack 3770 7 ()) +(3772 strong #f #f ()) +(3773 set-vertex-index! 3772 7 ()) +(3774 strong #f #f ()) +(3775 vertex-index 3774 7 ()) +(3776 strong #f #f ()) +(3777 set-vertex-parent! 3776 7 ()) +(3778 strong #f #f ()) +(3779 vertex-parent 3778 7 ()) +(3780 strong #f #f ()) +(3781 set-vertex-lowpoint! 3780 7 ()) +(3782 strong #f #f ()) +(3783 vertex-lowpoint 3782 7 ()) +(3784 strong #f #f ()) +(3785 really-make-vertex 3784 7 ()) +(3786 strong #f #f ()) +(3787 strong #f #f ()) +(3788 find-next-vertex 3787 7 ()) +(3789 loop##404 3788 11 ()) +(3790 strong #f #f ()) +(3791 strongly-connected-components 3790 7 ()) +(3792 loop 3791 52 ()) +(3793 #f 3792 39 ()) +(3794 #f 3792 57 ()) +(3795 usages #f #f ()) +(3796 insert-aliases 3795 7 ()) +(3797 loop 3796 22 ()) +(3798 usages #f #f ()) +(3799 make-form 3798 7 ()) +(3800 usages #f #f ()) +(3801 #f 3800 11 ()) +(3802 usages #f #f ()) +(3803 form? 3802 7 ()) +(3804 usages #f #f ()) +(3805 form-node 3804 7 ()) +(3806 usages #f #f ()) +(3807 set-form-aliases! 3806 7 ()) +(3808 usages #f #f ()) +(3809 form-aliases 3808 7 ()) +(3810 usages #f #f ()) +(3811 set-form-unaliased?! 3810 7 ()) +(3812 usages #f #f ()) +(3813 form-unaliased? 3812 7 ()) +(3814 usages #f #f ()) +(3815 set-form-free! 3814 7 ()) +(3816 usages #f #f ()) +(3817 form-free 3816 7 ()) +(3818 usages #f #f ()) +(3819 set-form-temp! 3818 7 ()) +(3820 usages #f #f ()) +(3821 form-temp 3820 7 ()) +(3822 usages #f #f ()) +(3823 really-make-form 3822 7 ()) +(3824 usages #f #f ()) +(3825 usages #f #f ()) +(3826 topologically-sort 3825 7 ()) +(3827 #f 3826 13 ()) +(3828 #f 3827 6 ()) +(3829 #f 3827 15 ()) +(3830 usages #f #f ()) +(3831 maybe-make-aliased 3830 7 ()) +(3832 usages #f #f ()) +(3833 stuff-count 3832 7 ()) +(3834 #f 3833 10 ()) +(3835 usages #f #f ()) +(3836 sort-forms 3835 7 ()) +(3837 #f 3836 39 ()) +(3838 #f 3836 71 ()) +(3839 usages #f #f ()) +(3840 usages #f #f ()) +(3841 usages #f #f ()) +(3842 usages #f #f ()) +(3843 usages #f #f ()) +(3844 usages #f #f ()) +(3845 usages #f #f ()) +(3846 usages #f #f ()) +(3847 usages #f #f ()) +(3848 usages #f #f ()) +(3849 usage-incrementator 3848 7 ()) +(3850 #f 3849 6 ()) +(3851 usages #f #f ()) +(3852 package-usage? 3851 7 ()) +(3853 usages #f #f ()) +(3854 make-package-usage 3853 7 ()) +(3855 usages #f #f ()) +(3856 make-usage 3855 7 ()) +(3857 usages #f #f ()) +(3858 usage? 3857 7 ()) +(3859 usages #f #f ()) +(3860 usage-name-node 3859 7 ()) +(3861 usages #f #f ()) +(3862 set-reference! 3861 7 ()) +(3863 usages #f #f ()) +(3864 usage-reference-count 3863 7 ()) +(3865 usages #f #f ()) +(3866 set-operator! 3865 7 ()) +(3867 usages #f #f ()) +(3868 usage-operator-count 3867 7 ()) +(3869 usages #f #f ()) +(3870 set-assignment! 3869 7 ()) +(3871 usages #f #f ()) +(3872 usage-assignment-count 3871 7 ()) +(3873 usages #f #f ()) +(3874 really-make-usage 3873 7 ()) +(3875 usages #f #f ()) +(3876 usages #f #f ()) +(3877 #f 3876 15 ()) +(3878 usages #f #f ()) +(3879 #f 3878 15 ()) +(3880 usages #f #f ()) +(3881 #f 3880 15 ()) +(3882 usages #f #f ()) +(3883 #f 3882 15 ()) +(3884 usages #f #f ()) +(3885 #f 3884 15 ()) +(3886 usages #f #f ()) +(3887 #f 3886 15 ()) +(3888 usages #f #f ()) +(3889 #f 3888 15 ()) +(3890 #f 3889 57 ()) +(3891 usages #f #f ()) +(3892 #f 3891 15 ()) +(3893 #f 3892 41 ()) +(3894 usages #f #f ()) +(3895 #f 3894 13 ()) +(3896 usages #f #f ()) +(3897 add-if-free 3896 7 ()) +(3898 usages #f #f ()) +(3899 #f 3898 13 ()) +(3900 usages #f #f ()) +(3901 usages #f #f ()) +(3902 usages #f #f ()) +(3903 usages #f #f ()) +(3904 usages #f #f ()) +(3905 usages #f #f ()) +(3906 nothing 3905 7 ()) +(3907 usages #f #f ()) +(3908 define-usage-analyzer 3907 7 ()) +(3909 usages #f #f ()) +(3910 #f 3909 11 ()) +(3911 usages #f #f ()) +(3912 analyze-nodes 3911 7 ()) +(3913 #f 3912 6 ()) +(3914 usages #f #f ()) +(3915 analyze 3914 7 ()) +(3916 usages #f #f ()) +(3917 find-node-usages 3916 7 ()) +(3918 #f 3917 30 ()) +(3919 #f 3917 44 ()) +(3920 usages #f #f ()) +(3921 maybe-update-known-type 3920 7 ()) +(3922 usages #f #f ()) +(3923 find-usages 3922 7 ()) +(3924 #f 3923 23 ()) +(3925 #f 3923 41 ()) +(3926 #f 3925 24 ()) +(3927 #f 3923 59 ()) +(3928 inline #f #f ()) +(3929 inline #f #f ()) +(3930 inline #f #f ()) +(3931 inline #f #f ()) +(3932 inline #f #f ()) +(3933 inline #f #f ()) +(3934 get-qualified-env 3933 7 ()) +(3935 inline #f #f ()) +(3936 qualified->name 3935 7 ()) +(3937 recur 3936 18 ()) +(3938 inline #f #f ()) +(3939 inline #f #f ()) +(3940 inline #f #f ()) +(3941 reconstitute-name 3940 7 ()) +(3942 inline #f #f ()) +(3943 reconstitute 3942 7 ()) +(3944 label 3943 18 ()) +(3945 inline #f #f ()) +(3946 make-substitution 3945 7 ()) +(3947 #f 3946 29 ()) +(3948 inline #f #f ()) +(3949 inline-transform 3948 7 ()) +(3950 #f 3949 63 ()) +(3951 #f 3949 71 ()) +(3952 inline #f #f ()) +(3953 unused-name 3952 7 ()) +(3954 loop##428 3953 46 ()) +(3955 #f 3954 10 ()) +(3956 inline #f #f ()) +(3957 clean-lookup 3956 7 ()) +(3958 inline #f #f ()) +(3959 clean-lambda 3958 7 ()) +(3960 #f 3959 41 ()) +(3961 recur 3959 91 ()) +(3962 inline #f #f ()) +(3963 clean-node 3962 7 ()) +(3964 #f 3963 132 ()) +(3965 #f 3963 296 ()) +(3966 inline #f #f ()) +(3967 make-inline-transform 3966 7 ()) +(3968 #f 3967 41 ()) +(3969 #f 3967 96 ()) +(3970 loop##429 3969 11 ()) +(3971 for-reification #f #f ()) +(3972 package-define-static! 3971 7 ()) +(3973 for-reification #f #f ()) +(3974 transform 3973 7 ()) +(3975 for-reification #f #f ()) +(3976 package 3975 7 ()) +(3977 loop##430 3976 73 ()) +(3978 for-reification #f #f ()) +(3979 simple-interface 3978 7 ()) +(3980 #f 3979 12 ()) +(3981 for-reification #f #f ()) +(3982 primop 3981 7 ()) +(3983 for-reification #f #f ()) +(3984 operator 3983 7 ()) +(3985 types #f #f ()) +(3986 types #f #f ()) +(3987 types #f #f ()) +(3988 types #f #f ()) +(3989 types #f #f ()) +(3990 types #f #f ()) +(3991 types #f #f ()) +(3992 types #f #f ()) +(3993 types #f #f ()) +(3994 types #f #f ()) +(3995 types #f #f ()) +(3996 types #f #f ()) +(3997 types #f #f ()) +(3998 types #f #f ()) +(3999 types #f #f ()) +(4000 types #f #f ()) +(4001 types #f #f ()) +(4002 types #f #f ()) +(4003 types #f #f ()) +(4004 types #f #f ()) +(4005 types #f #f ()) +(4006 types #f #f ()) +(4007 procedure 4006 7 ()) +(4008 types #f #f ()) +(4009 types #f #f ()) +(4010 types #f #f ()) +(4011 types #f #f ()) +(4012 defpackage #f #f ()) +(4013 note-name! 4012 7 ()) +(4014 defpackage #f #f ()) +(4015 set-verify-later! 4014 7 ()) +(4016 defpackage #f #f ()) +(4017 verify-later! 4016 7 ()) +(4018 defpackage #f #f ()) +(4019 *verify-later!* 4018 7 ()) +(4020 defpackage #f #f ()) +(4021 defpackage #f #f ()) +(4022 loser 4021 7 ()) +(4023 defpackage #f #f ()) +(4024 make-a-package 4023 7 ()) +(4025 optimizer #f #f ()) +(4026 apply-optimizers 4025 7 ()) +(4027 #f 4026 6 ()) +(4028 optimizer #f #f ()) +(4029 get-optimizer 4028 7 ()) +(4030 #f 4029 6 ()) +(4031 #f 4030 10 ()) +(4032 #f 4031 55 ()) +(4033 optimizer #f #f ()) +(4034 set-optimizer! 4033 7 ()) +(4035 optimizer #f #f ()) +(4036 scan-package #f #f ()) +(4037 check-structure 4036 7 ()) +(4038 #f 4037 17 ()) +(4039 scan-package #f #f ()) +(4040 package-optimizer-names 4039 7 ()) +(4041 #f 4040 36 ()) +(4042 #f 4040 75 ()) +(4043 scan-package #f #f ()) +(4044 read-files 4043 7 ()) +(4045 #f 4044 30 ()) +(4046 scan-package #f #f ()) +(4047 package-source 4046 7 ()) +(4048 #f 4047 46 ()) +(4049 scan-package #f #f ()) +(4050 collect-packages 4049 7 ()) +(4051 recur 4050 26 ()) +(4052 #f 4051 150 ()) +(4053 compile-packages #f #f ()) +(4054 compile-packages #f #f ()) +(4055 compile-packages #f #f ()) +(4056 make-define-primitive-node 4055 7 ()) +(4057 compile-packages #f #f ()) +(4058 define-primitives 4057 7 ()) +(4059 #f 4058 17 ()) +(4060 #f 4058 36 ()) +(4061 compile-packages #f #f ()) +(4062 define-usual-transform 4061 7 ()) +(4063 compile-packages #f #f ()) +(4064 expand-package 4063 7 ()) +(4065 #f 4064 21 ()) +(4066 #f 4065 10 ()) +(4067 #f 4065 28 ()) +(4068 #f 4065 82 ()) +(4069 #f 4068 15 ()) +(4070 #f 4069 10 ()) +(4071 compile-packages #f #f ()) +(4072 compile-package 4071 7 ()) +(4073 module-system #f #f ()) +(4074 analysis #f #f ()) +(4075 analysis #f #f ()) +(4076 analysis #f #f ()) +(4077 analysis #f #f ()) +(4078 analysis #f #f ()) +(4079 package-lookup-type 4078 7 ()) +(4080 analysis #f #f ()) +(4081 analysis #f #f ()) +(4082 require 4081 7 ()) +(4083 analysis #f #f ()) +(4084 simple-literal? 4083 7 ()) +(4085 analysis #f #f ()) +(4086 analysis #f #f ()) +(4087 analysis #f #f ()) +(4088 lexical-node? 4087 7 ()) +(4089 analysis #f #f ()) +(4090 really-simple-call? 4089 7 ()) +(4091 analysis #f #f ()) +(4092 static-value 4091 7 ()) +(4093 analysis #f #f ()) +(4094 #f 4093 11 ()) +(4095 analysis #f #f ()) +(4096 #f 4095 11 ()) +(4097 loop 4096 21 ()) +(4098 analysis #f #f ()) +(4099 #f 4098 11 ()) +(4100 analysis #f #f ()) +(4101 #f 4100 11 ()) +(4102 analysis #f #f ()) +(4103 #f 4102 11 ()) +(4104 analysis #f #f ()) +(4105 #f 4104 11 ()) +(4106 analysis #f #f ()) +(4107 #f 4106 11 ()) +(4108 analysis #f #f ()) +(4109 #f 4108 11 ()) +(4110 analysis #f #f ()) +(4111 #f 4110 11 ()) +(4112 analysis #f #f ()) +(4113 #f 4112 11 ()) +(4114 analysis #f #f ()) +(4115 #f 4114 11 ()) +(4116 analysis #f #f ()) +(4117 #f 4116 11 ()) +(4118 analysis #f #f ()) +(4119 define-analyzer 4118 7 ()) +(4120 analysis #f #f ()) +(4121 #f 4120 11 ()) +(4122 analysis #f #f ()) +(4123 simple-list? 4122 7 ()) +(4124 analysis #f #f ()) +(4125 simple? 4124 7 ()) +(4126 analysis #f #f ()) +(4127 analysis #f #f ()) +(4128 simple-lambda? 4127 7 ()) +(4129 #f 4128 128 ()) +(4130 analysis #f #f ()) +(4131 inlinable-rhs? 4130 7 ()) +(4132 analysis #f #f ()) +(4133 analyze-form 4132 7 ()) +(4134 analysis #f #f ()) +(4135 analyze-forms 4134 7 ()) +(4136 #f 4135 17 ()) +(4137 analysis #f #f ()) +(4138 #f 4137 11 ()) +(4139 flat-environments #f #f ()) +(4140 set-difference 4139 7 ()) +(4141 recur 4140 18 ()) +(4142 flat-environments #f #f ()) +(4143 union 4142 7 ()) +(4144 recur 4143 31 ()) +(4145 flat-environments #f #f ()) +(4146 cell-set!-primop 4145 7 ()) +(4147 flat-environments #f #f ()) +(4148 flat-environments #f #f ()) +(4149 cell-ref-primop 4148 7 ()) +(4150 flat-environments #f #f ()) +(4151 flat-environments #f #f ()) +(4152 make-cell-primop 4151 7 ()) +(4153 flat-environments #f #f ()) +(4154 flat-environments #f #f ()) +(4155 flat-environments #f #f ()) +(4156 flat-environments #f #f ()) +(4157 flat-environments #f #f ()) +(4158 flat-environments #f #f ()) +(4159 flat-environments #f #f ()) +(4160 flat-environments #f #f ()) +(4161 flat-environments #f #f ()) +(4162 flat-environments #f #f ()) +(4163 flat-environments #f #f ()) +(4164 make-primop-call 4163 7 ()) +(4165 flat-environments #f #f ()) +(4166 make-cell-set! 4165 7 ()) +(4167 flat-environments #f #f ()) +(4168 make-cell-ref 4167 7 ()) +(4169 flat-environments #f #f ()) +(4170 make-unassigned-cell 4169 7 ()) +(4171 flat-environments #f #f ()) +(4172 make-cell 4171 7 ()) +(4173 flat-environments #f #f ()) +(4174 #f 4173 11 ()) +(4175 #f 4174 25 ()) +(4176 flat-environments #f #f ()) +(4177 #f 4176 11 ()) +(4178 flat-environments #f #f ()) +(4179 #f 4178 11 ()) +(4180 flat-environments #f #f ()) +(4181 #f 4180 11 ()) +(4182 flat-environments #f #f ()) +(4183 #f 4182 11 ()) +(4184 flat-environments #f #f ()) +(4185 flat-environments #f #f ()) +(4186 flat-environments #f #f ()) +(4187 flat-environments #f #f ()) +(4188 flat-environments #f #f ()) +(4189 flat-environments #f #f ()) +(4190 no-sets 4189 7 ()) +(4191 flat-environments #f #f ()) +(4192 define-set-marker 4191 7 ()) +(4193 flat-environments #f #f ()) +(4194 #f 4193 11 ()) +(4195 flat-environments #f #f ()) +(4196 mark-set-variables! 4195 7 ()) +(4197 flat-environments #f #f ()) +(4198 assigned? 4197 7 ()) +(4199 flat-environments #f #f ()) +(4200 #f 4199 11 ()) +(4201 flat-environments #f #f ()) +(4202 #f 4201 11 ()) +(4203 #f 4202 85 ()) +(4204 #f 4202 99 ()) +(4205 #f 4204 119 ()) +(4206 flat-environments #f #f ()) +(4207 #f 4206 11 ()) +(4208 #f 4207 21 ()) +(4209 flat-environments #f #f ()) +(4210 #f 4209 11 ()) +(4211 #f 4210 21 ()) +(4212 #f 4211 6 ()) +(4213 flat-environments #f #f ()) +(4214 #f 4213 11 ()) +(4215 #f 4214 37 ()) +(4216 flat-environments #f #f ()) +(4217 #f 4216 11 ()) +(4218 flat-environments #f #f ()) +(4219 add-cells 4218 7 ()) +(4220 loop##443 4219 11 ()) +(4221 flat-environments #f #f ()) +(4222 convert-lambda-body 4221 7 ()) +(4223 #f 4222 47 ()) +(4224 flat-environments #f #f ()) +(4225 flatten-lambda 4224 7 ()) +(4226 #f 4225 21 ()) +(4227 flat-environments #f #f ()) +(4228 #f 4227 11 ()) +(4229 flat-environments #f #f ()) +(4230 flat-environments #f #f ()) +(4231 flat-environments #f #f ()) +(4232 flat-environments #f #f ()) +(4233 flat-environments #f #f ()) +(4234 no-free-vars 4233 7 ()) +(4235 flat-environments #f #f ()) +(4236 flatten-list 4235 7 ()) +(4237 loop 4236 26 ()) +(4238 #f 4237 39 ()) +(4239 flat-environments #f #f ()) +(4240 define-flattener 4239 7 ()) +(4241 flat-environments #f #f ()) +(4242 #f 4241 11 ()) +(4243 #f 4242 6 ()) +(4244 flat-environments #f #f ()) +(4245 flatten-node 4244 7 ()) +(4246 flat-environments #f #f ()) +(4247 flatten-form 4246 7 ()) +(4248 #f 4247 73 ()) +(4249 #f 4247 120 ()) +(4250 flat-environments #f #f ()) +(4251 #f 4250 11 ()) +(4252 #f 4251 6 ()) +(4253 ensures-loaded #f #f ()) +(4254 ensure-loaded 4253 7 ()) +(4255 #f 4254 49 ()) +(4256 #f 4255 56 ()) +(4257 #f 4254 61 ()) +(4258 #f #f #f ()) +(4259 #f 4258 3 ()) +(4260 get-location 4259 3 ()) +(4261 #f 4259 10490 ()) +(4262 #f 4259 10539 ()) +(4263 #f 4259 10652 ()) +(4264 #f 4259 10770 ()) +(4265 #f 4259 10851 ()) +(4266 conc 4265 42 ()) +(4267 #f 4266 16 ()) +(4268 #f 4259 12161 ()) +(4269 loop 4268 115 ()) +(4270 #f 4268 202 ()) +(4271 #f 4268 233 ()) +(4272 #f 4268 413 ()) +(4273 #f 4268 471 ()) +(4274 #f 4259 12549 ()) +(4275 mem? 4274 197 ()) +(4276 every? 4274 206 ()) +(4277 #f 4274 219 ()) +(4278 #f 4274 282 ()) +(4279 #f 4259 12745 ()) +(4280 loop##448 4279 66 ()) +(4281 #f 4259 12794 ()) +(4282 #f 4259 14536 ()) +(4283 #f 4259 21629 ()) +(4284 #f 4283 456 ()) +(4285 #f 4259 22563 ()) +(4286 loop 4285 95 ()) +(4287 #f 4259 22720 ()) +(4288 loop 4287 95 ()) +(4289 #f 4259 22845 ()) +(4290 loop 4289 95 ()) +(4291 #f 4259 22938 ()) +(4292 loop 4291 95 ()) +(4293 #f 4259 23031 ()) +(4294 loop 4293 95 ()) +(4295 #f 4259 23124 ()) +(4296 loop 4295 95 ()) +(4297 #f 4259 23217 ()) +(4298 loop 4297 95 ()) +(4299 #f 4259 23310 ()) +(4300 loop 4299 95 ()) +(4301 #f 4259 23403 ()) +(4302 loop 4301 95 ()) +(4303 #f 4259 24099 ()) +(4304 loop 4303 95 ()) +(4305 #f 4259 26351 ()) +(4306 #f 4259 26514 ()) +(4307 #f 4259 26563 ()) +(4308 #f 4259 26612 ()) +(4309 #f 4259 26757 ()) +(4310 #f 4259 26975 ()) +(4311 #f 4259 29898 ()) +(4312 #f 4259 30098 ()) +(4313 #f 4259 30147 ()) +(4314 #f 4259 30196 ()) +(4315 #f 4314 146 ()) +(4316 #f 4259 30245 ()) +(4317 #f 4316 329 ()) +(4318 #f 4316 403 ()) +(4319 #f 4259 30624 ()) +(4320 #f 4259 30673 ()) +(4321 #f 4320 176 ()) +(4322 parse-package-clauses 4259 30731 ()) +(4323 loop 4322 76 ()) +(4324 #f 4259 30740 ()) +(4325 #f 4324 35 ()) +(4326 #f 4325 146 ()) +(4327 #f 4259 30996 ()) +(4328 #f 4259 31045 ()) +(4329 loop 4328 35 ()) +(4330 #f 4259 31158 ()) +(4331 #f 4259 31239 ()) +(4332 #f 4259 31320 ()) +(4333 loop 4332 51 ()) +(4334 #f 4332 90 ()) +(4335 #f 4332 114 ()) +(4336 #f 4259 31401 ()) +(4337 #f 4259 32658 ()) +(4338 #f 4259 32794 ()) +(4339 #f #f #f ()) +- diff --git a/build/initial.image b/build/initial.image new file mode 100644 index 0000000..4d5a55f Binary files /dev/null and b/build/initial.image differ diff --git a/build/initial.scm b/build/initial.scm new file mode 100644 index 0000000..db9b7f5 --- /dev/null +++ b/build/initial.scm @@ -0,0 +1,58 @@ +; Copyright (c) 1993-1999 by Richard Kelsey and Jonathan Rees. See file COPYING. + +; Link script. + +(define (link-initial-system) + (let ((structures-to-open ;Structures to open for the initial + (struct-list scheme ;system's read-eval-print loop. + environments + module-system + ensures-loaded + packages + packages-internal))) ; package-for-syntax + (link-reified-system (append (desirable-structures) + structures-to-open) + '(build initial) + ;; The expression that evaluates to the + ;; procedure that maps the reified-structure alist + ;; to the startup procedure: + `(start ',(map car structures-to-open)) + ;; Structures to open for evaluating that + ;; expression and the expression that + ;; evaluates to the reified-structure alist: + initial-system + for-reification + ;; scheme-level-1 + ))) + +(define (desirable-structures) + (let ((env (interaction-environment)) + (l '())) + (for-each (lambda (int) + (for-each-declaration + (lambda (name type) + (if (not (assq name l)) + (let ((s (eval name env))) + (if (structure? s) + (set! l (cons (cons name s) l)))))) + int)) + (list low-structures-interface + run-time-structures-interface + features-structures-interface + run-time-internals-structures-interface + compiler-structures-interface + initial-structures-interface)) + (reverse l))) + + +; Your choice of evaluators: + +(define scheme (make-scheme environments evaluation)) +; (define scheme (make-scheme mini-environments mini-eval)) +; (define scheme (make-scheme environments run)) +; etc. + +; Your choice of command processors. + +(define initial-system + (make-initial-system scheme (make-mini-command scheme))) diff --git a/build/load-linker.exec b/build/load-linker.exec new file mode 100644 index 0000000..953ea60 --- /dev/null +++ b/build/load-linker.exec @@ -0,0 +1,90 @@ +; Copyright (c) 1993-1999 by Richard Kelsey and Jonathan Rees. See file COPYING. + +; Load the linker. -*- Mode: Scheme; -*- + +; Run this script with ,exec ,load l.exec. +; After the script is loaded, you can, in principle, do whatever +; you might do in the usual linker image. For example, you might do +; (this is from the Makefile) +; +; ,in link-config +; (load-configuration "interfaces.scm") +; (load-configuration "packages.scm") +; (flatload initial-structures) +; (load "initial.scm") +; (link-initial-system) +; +; This is intended to be used to debug new versions of the compiler or +; static linker. + +(config '(run (define :arguments :values))) ;temporary hack + +(translate "=scheme48/" "./") + +(load-package 'flatloading) +(open 'flatloading) + +(define (r x) (config `(run ,x))) + +(r '(define-structure source-file-names (export (%file-name% :syntax)) + (open scheme-level-1 + syntactic + fluids) + (begin (define-syntax %file-name% + (syntax-rules () + ((%file-name%) (fluid $source-file-name))))))) + +(r '(define-structure enumerated enumerated-interface + (open scheme-level-1 signals) + (files (rts defenum scm)))) + +(r '(define-structure architecture architecture-interface + (open scheme-level-1 signals enumerated) + (files (rts arch)))) + +(config '(structure reflective-tower-maker + (export-reflective-tower-maker))) + +; Make the new linker obtain its table, record, etc. structures from +; the currently running Scheme. + +(config '(load "packages.scm")) +(config '(structure %run-time-structures run-time-structures-interface)) +(config '(structure %features-structures features-structures-interface)) + +(r + '(define-structure %linker-structures + (make-linker-structures %run-time-structures + %features-structures + (make-compiler-structures %run-time-structures + %features-structures)))) + +; Load the linker's interface and structure definitions. +(config '(load "interfaces.scm" "more-interfaces.scm")) +(let ((z (config '(run %linker-structures))) + (env (config interaction-environment))) + (config (lambda () (flatload z env)))) + +; Load the linker. +(load-package 'link-config) + +; Initialize +(in 'link-config + '(open scheme packages packages-internal + reflective-tower-maker)) + +(in 'linker '(run (set! *debug-linker?* #t))) +(in 'link-config '(open flatloading)) ; A different one. + +; ,open debuginfo packages-internal compiler scan syntactic meta-types + +; (in 'link-config '(dump "l.image")) + +; ,exec (usual-stuff) + +(define (usual-stuff) + (in 'link-config) + (run '(begin (load-configuration "interfaces.scm") + (load-configuration "packages.scm") + (flatload initial-structures))) + (load "initial.scm")) diff --git a/build/lucid-script.lisp b/build/lucid-script.lisp new file mode 100644 index 0000000..0f142cf --- /dev/null +++ b/build/lucid-script.lisp @@ -0,0 +1,82 @@ + +; Script to load the Scheme 48 linker into Common Lisp. +; Requires Pseudoscheme 2.11. + +(defvar pseudoscheme-directory "../pseudo/") +(load (concatenate 'string pseudoscheme-directory "loadit.lisp")) +; or perhaps (load (merge-pathnames "loadit.lisp" pseudoscheme-directory)) +(load-pseudoscheme pseudoscheme-directory) + +(progn (revised^4-scheme::define-sharp-macro #\. + #'(lambda (c port) + (read-char port) + (eval (let ((*readtable* ps::scheme-readtable)) + (read port))))) + (values)) + +(ps:scheme) +;-------------------- +; Scheme forms + +(benchmark-mode) + +(define config-env ; (interaction-environment) would also work here. + (#.'scheme-translator:make-program-env + '%config + (list #.'scheme-translator:revised^4-scheme-structure))) + +(load "bcomp/module-language" config-env) +(load "alt/config" config-env) +(load "env/flatload" config-env) +(eval '(set! *load-file-type* #f) config-env) + +(define load-config + (let ((load-config (eval 'load-configuration config-env))) + (lambda (filename) + (load-config filename config-env)))) + +(load-config "packages") + +(define flatload-package (eval 'flatload config-env)) + +(flatload-package (eval 'linker-structures config-env) config-env) + +(let ((#.'clever-load:*compile-if-necessary-p* #t)) + (let ((#.'ps:*scheme-read* #.'#'ps::scheme-read-using-commonlisp-reader)) + (load "alt/pseudoscheme-record") + (load "alt/pseudoscheme-features"))) + +(let ((#.'clever-load:*compile-if-necessary-p* #t)) + (flatload-package (eval 'link-config config-env))) + +(load "alt/init-defpackage.scm") + +(define-syntax struct-list ;not in link.sbin + (syntax-rules () + ((struct-list ?name ...) (list (cons '?name ?name) ...)))) + +;-------------------- +(quit) + +#+Lucid +(defun disksave-restart-function () + (format t "~&Scheme 48 linker.~2%") + ;; (hax:init-interrupt-delivery) - for threads + (ps:scheme) + (terpri)) +#+Lucid +(defun dump-linker () + (lcl:disksave "link/linker-in-lucid" :gc t :full-gc t :verbose t + :restart-function #'disksave-restart-function)) +;(dump-linker) +;(lcl:quit) + + +; Debugging hacks +;(defun enable-lisp-packages () +; (setq *readtable* ps:scheme-readtable) +; (values)) +;(defun disable-lisp-packages () +; (setq *readtable* ps::roadblock-readtable) +; (values)) + diff --git a/build/minor-version-number b/build/minor-version-number new file mode 100644 index 0000000..59343b0 --- /dev/null +++ b/build/minor-version-number @@ -0,0 +1 @@ +53 diff --git a/c/c-mods.h b/c/c-mods.h new file mode 100644 index 0000000..84130cb --- /dev/null +++ b/c/c-mods.h @@ -0,0 +1,4 @@ + +#define TRUE (0 == 0) +#define FALSE (0 == 1) +#define bool char /* boolean type */ diff --git a/c/event.h b/c/event.h new file mode 100644 index 0000000..96874e5 --- /dev/null +++ b/c/event.h @@ -0,0 +1,33 @@ +enum event_enum { KEYBOARD_INTERRUPT_EVENT, IO_COMPLETION_EVENT, ALARM_EVENT, + OS_SIGNAL_EVENT, ERROR_EVENT, NO_EVENT }; + +extern bool s48_add_pending_fd(int fd, bool is_input); +extern bool s48_remove_fd(int fd); + +extern long s48_schedule_alarm_interrupt(long delta); +extern void s48_start_alarm_interrupts(void); +extern void s48_stop_alarm_interrupts(void); + +extern long s48_run_time(long *mseconds); +extern long s48_real_time(long *mseconds); +extern int s48_wait_for_event(long max_wait, bool is_minutes); +extern int s48_get_next_event(long *ready_fd, long *status); + +/* these are here only for the CHEAP_TIME() macro */ +#define TICKS_PER_SECOND 1000 /* clock resolution */ +#define POLLS_PER_SECOND 20 /* how often we poll */ +#define TICKS_PER_POLL (TICKS_PER_SECOND / POLLS_PER_SECOND) + +extern long s48_current_time; +#define CHEAP_TIME() (s48_current_time * TICKS_PER_POLL) + +/* + * Fix (HCC) NOTE_EVENT so that it will act like a single + * statement. + */ +#define NOTE_EVENT \ + do { \ + s48_Spending_eventsPS = 1; \ + s48_Spending_interruptPS = 1; \ + } while (0) + diff --git a/c/extension.c b/c/extension.c new file mode 100644 index 0000000..ba54548 --- /dev/null +++ b/c/extension.c @@ -0,0 +1,236 @@ +/* Copyright (c) 1993-1999 by Richard Kelsey and Jonathan Rees. + See file COPYING. */ + +/* Implementation of the vm-extension opcode. This is completely + optional; nothing in the standard system uses these features. + If you have ANSI C but not POSIX support, try compiling with -DPOSIX=0. + + The vm-extension opcode is being phased out. New code should use the + external-call opcode to call C procedures. + + floating point: POSIX.1, ANSI C (should we be linking with -lM or -lm?) + sprintf: POSIX.1, ANSI C + atof: POSIX.1, ANSI C + + */ + +#ifndef POSIX +# define POSIX 2 +#endif + +#include +#include "sysdep.h" +#include "scheme48.h" + +#include +#include +#include +#include +#include /* setuid & setgid */ +#include +#include /* gethostbyname */ /* Kali code */ + +#include +#include + + +#define GREATEST_FIXNUM_VALUE ((1 << 29) - 1) +#define LEAST_FIXNUM_VALUE (-1 << 29) +#define CHANNEL_INDEX(x) EXTRACT_FIXNUM(STOB_REF(x, 1)) +#define FOR_INPUT 1 +#define FOR_OUTPUT 2 + +typedef struct { + char b[sizeof(double)]; +} unaligned_double; + +typedef union { + double f; + unaligned_double b; +} float_or_bytes; + +extern long s48_Sextension_valueS; /* how values are returned */ + +/* return status values */ +#define EXT_ST_OKAY 0 +#define EXT_ST_EXCEPTION 1 + +#define EXT_RETURN(value) {s48_Sextension_valueS = (value); return EXT_ST_OKAY; } +#define EXT_EXCEPTION return EXT_ST_EXCEPTION + +/******************************************/ + +s48_value +s48_extended_vm (long key, s48_value value) +{ + double x, y; + + switch (key) { + + /* Cases 0 through 19 are reserved for the mobot system. */ + + case 0: /* read jumpers on 68000 board */ + EXT_RETURN(S48_UNSAFE_ENTER_FIXNUM(0)); + + /* Floating point */ + +#define FLOP 100 +#define FLOP2(i) case FLOP+(i): \ + if (!S48_STOB_P(value) || S48_STOB_DESCRIPTOR_LENGTH(value) != 2) \ + EXT_EXCEPTION; +#define FLOP3(i) case FLOP+(i): \ + if (!S48_STOB_P(value) || S48_STOB_DESCRIPTOR_LENGTH(value) != 3) \ + EXT_EXCEPTION; + +#define get_arg(args,i) S48_STOB_REF(args,(i)) +#define get_string_arg(args,i) (S48_UNSAFE_EXTRACT_STRING(get_arg(args,i))) + +#define get_float_arg(args, i, var) EXTRACT_FLOAT(get_arg(args, i), var) +#define set_float_arg(args, i, val) SET_FLOAT(get_arg(args, i), val) + +#define EXTRACT_FLOAT(stob, var) \ + { s48_value temp_ = (stob); \ + float_or_bytes loser_; \ + if (!S48_STOB_P(temp_)) EXT_EXCEPTION; \ + loser_.b = *(unaligned_double*)(&S48_STOB_REF(temp_, 0)); \ + (var) = loser_.f; } + +#define SET_FLOAT(stob, val) \ + { s48_value temp_ = (stob); \ + float_or_bytes loser_; \ + if (!S48_STOB_P(temp_)) EXT_EXCEPTION; \ + loser_.f = (double)(val); \ + *(unaligned_double*)(&S48_STOB_REF(temp_, 0)) = loser_.b; } + + FLOP3(0) { + get_float_arg(value, 0, x); + get_float_arg(value, 1, y); + set_float_arg(value, 2, x + y); + EXT_RETURN(S48_UNSPECIFIC);} + FLOP3(1) { + get_float_arg(value, 0, x); + get_float_arg(value, 1, y); + set_float_arg(value, 2, x - y); + EXT_RETURN(S48_UNSPECIFIC);} + FLOP3(2) { + get_float_arg(value, 0, x); + get_float_arg(value, 1, y); + set_float_arg(value, 2, x * y); + EXT_RETURN(S48_UNSPECIFIC);} + FLOP3(3) { + get_float_arg(value, 0, x); + get_float_arg(value, 1, y); + if (y == 0.0) EXT_EXCEPTION; + set_float_arg(value, 2, x / y); + EXT_RETURN(S48_UNSPECIFIC);} + FLOP2(4) { + get_float_arg(value, 0, x); + get_float_arg(value, 1, y); + EXT_RETURN(S48_ENTER_BOOLEAN(x == y));} + FLOP2(5) { + get_float_arg(value, 0, x); + get_float_arg(value, 1, y); + EXT_RETURN(S48_ENTER_BOOLEAN(x < y));} + FLOP2(6) { /* fixnum->float */ + s48_value arg = get_arg(value, 0); + if (!S48_FIXNUM_P(arg)) EXT_RETURN(S48_FALSE); + set_float_arg(value, 1, S48_UNSAFE_EXTRACT_FIXNUM(arg)); + EXT_RETURN(S48_TRUE);} + FLOP2(7) { /* string->float */ + char *str = get_string_arg(value, 0); + set_float_arg(value, 1, atof(str)); + EXT_RETURN(S48_UNSPECIFIC);} + FLOP2(8) { /* float->string */ + size_t len; + char *str = get_string_arg(value,1); + get_float_arg(value, 0, x); + sprintf(str, "%g", x); + len = strlen(str); + if (len > S48_UNSAFE_STRING_LENGTH(get_arg(value,1))) + /* unlikely but catastrophic */ + fprintf(stderr, "printing float: output too long: %s\n", + str); + EXT_RETURN(S48_UNSAFE_ENTER_FIXNUM(len));} + + /* exp log sin cos tan asin acos atan sqrt */ + + FLOP2(9) { + get_float_arg(value, 0, x); + set_float_arg(value, 1, exp(x)); + EXT_RETURN(S48_UNSPECIFIC);} + FLOP2(10) { + get_float_arg(value, 0, x); + set_float_arg(value, 1, log(x)); + EXT_RETURN(S48_UNSPECIFIC);} + FLOP2(11) { + get_float_arg(value, 0, x); + set_float_arg(value, 1, sin(x)); + EXT_RETURN(S48_UNSPECIFIC);} + FLOP2(12) { + get_float_arg(value, 0, x); + set_float_arg(value, 1, cos(x)); + EXT_RETURN(S48_UNSPECIFIC);} + FLOP2(13) { + get_float_arg(value, 0, x); + set_float_arg(value, 1, tan(x)); + EXT_RETURN(S48_UNSPECIFIC);} + FLOP2(14) { + get_float_arg(value, 0, x); + set_float_arg(value, 1, asin(x)); + EXT_RETURN(S48_UNSPECIFIC);} + FLOP2(15) { + get_float_arg(value, 0, x); + set_float_arg(value, 1, acos(x)); + EXT_RETURN(S48_UNSPECIFIC);} + FLOP3(16) { /* atan */ + get_float_arg(value, 0, y); + get_float_arg(value, 1, x); + set_float_arg(value, 2, atan2(y, x)); + EXT_RETURN(S48_UNSPECIFIC);} + FLOP2(17) { + get_float_arg(value, 0, x); + set_float_arg(value, 1, sqrt(x)); + EXT_RETURN(S48_UNSPECIFIC);} + + FLOP2(18) { /* floor */ + get_float_arg(value, 0, x); + set_float_arg(value, 1, floor(x)); + EXT_RETURN(S48_UNSPECIFIC);} + case FLOP+19: { /* integer? */ + EXTRACT_FLOAT(value, x); + EXT_RETURN(S48_ENTER_BOOLEAN(fmod(x, 1.0) == 0.0)); } + case FLOP+20: { /* float->fixnum */ + EXTRACT_FLOAT(value, x); + if (x <= (double)GREATEST_FIXNUM_VALUE + && x >= (double)LEAST_FIXNUM_VALUE) + { + EXT_RETURN(S48_UNSAFE_ENTER_FIXNUM((long)x)); } + else + EXT_RETURN(S48_FALSE);} + FLOP3(21) { /* quotient */ + double z; + get_float_arg(value, 0, x); + get_float_arg(value, 1, y); + if (fmod(x, 1.0) != 0.0 || fmod(y, 1.0) != 0.0) EXT_EXCEPTION; + if (y == 0.0) EXT_EXCEPTION; + z = x / y; + set_float_arg(value, 2, z < 0.0 ? ceil(z) : floor(z)); + EXT_RETURN(S48_UNSPECIFIC);} + FLOP3(22) { /* remainder */ + get_float_arg(value, 0, x); + get_float_arg(value, 1, y); + if (fmod(x, 1.0) != 0.0 || fmod(y, 1.0) != 0.0) EXT_EXCEPTION; + if (y == 0.0) EXT_EXCEPTION; + + /* "fmod(double x, double y) returns the floating-point remainder + (f) of the division of x by y, where f has the same sign as x, + such that x=iy+f for some integer i, and |f| < |y|." */ + + set_float_arg(value, 2, fmod(x, y)); + EXT_RETURN(S48_UNSPECIFIC);} + + default: + EXT_EXCEPTION; + } +} + diff --git a/c/external.c b/c/external.c new file mode 100644 index 0000000..ffc0037 --- /dev/null +++ b/c/external.c @@ -0,0 +1,947 @@ +/* Copyright (c) 1993-1999 by Richard Kelsey and Jonathan Rees. + See file COPYING. */ + +#include +#include +#include +#include +#include + +#include "c-mods.h" +#include "scheme48.h" +#include "scheme48vm.h" + +/* + * The Joy of C + * I don't understand why we need this, but we do. + */ + +struct s_jmp_buf { + jmp_buf buf; +}; + +/* + * Longjump target set up by the most recent call into C. + */ +static struct s_jmp_buf current_return_point; + +/* + * The name of the procedure we are currently executing; used for error messages. + */ +static s48_value current_procedure; + +/* + * Stack of Scheme stack-block records which represent portions of the process + * stack. + */ +static s48_value current_stack_block = S48_FALSE; + +/* + * These need to agree with the record definition in callback.scm. + */ +#define STACK_BLOCK_FREE(stack_block) S48_UNSAFE_RECORD_REF(stack_block, 0) +#define STACK_BLOCK_UNWIND(stack_block) S48_UNSAFE_RECORD_REF(stack_block, 1) +#define STACK_BLOCK_PROC(stack_block) S48_UNSAFE_RECORD_REF(stack_block, 2) +#define STACK_BLOCK_THREAD(stack_block) S48_UNSAFE_RECORD_REF(stack_block, 3) +#define STACK_BLOCK_NEXT(stack_block) S48_UNSAFE_RECORD_REF(stack_block, 4) + +/* + * For debugging. + */ +/* +static int callback_depth() +{ + int depth = 0; + s48_value stack = current_stack_block; + + for(; stack != S48_FALSE; depth++, stack = STACK_BLOCK_NEXT(stack)); + + return depth; +} +*/ +/* + * The value being returned from an external call. The returns may be preceded + * by a longjmp(), so we stash the value here. + */ +static s48_value external_return_value; + +/* Exports to Scheme */ +static s48_value s48_clear_stack_top(void); +static s48_value s48_trampoline(s48_value proc, s48_value nargs); + +/* Imports from Scheme */ +static s48_value the_record_type_binding = S48_FALSE; +static s48_value stack_block_type_binding = S48_FALSE; +static s48_value callback_binding = S48_FALSE; +static s48_value delay_callback_return_binding = S48_FALSE; +static s48_value bignum_to_long_binding = S48_FALSE; +static s48_value long_to_bignum_binding = S48_FALSE; + +void +s48_initialize_external() +{ + S48_GC_PROTECT_GLOBAL(the_record_type_binding); + the_record_type_binding = s48_get_imported_binding("s48-the-record-type"); + + S48_GC_PROTECT_GLOBAL(stack_block_type_binding); + stack_block_type_binding = s48_get_imported_binding("s48-stack-block-type"); + + S48_GC_PROTECT_GLOBAL(callback_binding); + callback_binding = s48_get_imported_binding("s48-callback"); + + S48_GC_PROTECT_GLOBAL(delay_callback_return_binding); + delay_callback_return_binding = + s48_get_imported_binding("s48-delay-callback-return"); + + S48_GC_PROTECT_GLOBAL(bignum_to_long_binding); + bignum_to_long_binding = s48_get_imported_binding("s48-bignum-to-long"); + + S48_GC_PROTECT_GLOBAL(long_to_bignum_binding); + long_to_bignum_binding = s48_get_imported_binding("s48-long-to-bignum"); + + S48_GC_PROTECT_GLOBAL(current_stack_block); + S48_GC_PROTECT_GLOBAL(current_procedure); + + S48_EXPORT_FUNCTION(s48_clear_stack_top); + S48_EXPORT_FUNCTION(s48_trampoline); + +} + +/* The three reasons for an extern-call longjump. */ + +#define NO_THROW 0 +#define EXCEPTION_THROW 1 +#define CLEANUP_THROW 2 + +/* + * Used to call `proc' from Scheme code. `nargs' the number of arguments in + * vector `argv'. If `spread_p' is true the procedure is applied to the + * arguments, otherwise `proc' is just called on `nargs' and `argv'. + * + * We do a setjmp() to get a return point for clearing off this portion of + * the process stack. This is used when `proc' calls back to Scheme and + * then a throw transfers control up past the call to `proc'. + */ + +s48_value +s48_external_call(s48_value sch_proc, s48_value proc_name, + long nargs, char *char_argv) +{ + volatile char *gc_roots_marker; /* volatile to survive longjumps */ + volatile s48_value name = proc_name; /* volatile to survive longjumps */ + + /* int depth = callback_depth(); */ /* debugging */ + + long *argv = (long *) char_argv; + + s48_value (*proc)() = (s48_value (*)()) + *S48_EXTRACT_VALUE_POINTER(sch_proc, long); + + int throw_reason; + + current_procedure = name; + + S48_CHECK_VALUE(sch_proc); + S48_CHECK_STRING(name); + + gc_roots_marker = s48_set_gc_roots_baseB(); + + /* fprintf(stderr, "[external_call at depth %d]\n", depth); */ + + throw_reason = setjmp(current_return_point.buf); + + if (throw_reason == NO_THROW) { /* initial entry */ + switch (nargs) { + case 0: + external_return_value = proc(); + break; + case 1: + external_return_value = proc(argv[0]); + break; + case 2: + external_return_value = proc(argv[1], argv[0]); + break; + case 3: + external_return_value = proc(argv[2], argv[1], argv[0]); + break; + case 4: + external_return_value = proc(argv[3], argv[2], argv[1], argv[0]); + break; + case 5: + external_return_value = proc(argv[4], + argv[3], argv[2], argv[1], argv[0]); + break; + case 6: + external_return_value = proc(argv[5], argv[4], + argv[3], argv[2], argv[1], argv[0]); + break; + case 7: + external_return_value = proc(argv[6], argv[5], argv[4], + argv[3], argv[2], argv[1], argv[0]); + break; + case 8: + external_return_value = proc(argv[7], argv[6], argv[5], argv[4], + argv[3], argv[2], argv[1], argv[0]); + break; + case 9: + external_return_value = proc(argv[8], + argv[7], argv[6], argv[5], argv[4], + argv[3], argv[2], argv[1], argv[0]); + break; + case 10: + external_return_value = proc(argv[9], argv[8], + argv[7], argv[6], argv[5], argv[4], + argv[3], argv[2], argv[1], argv[0]); + break; + case 11: + external_return_value = proc(argv[10], argv[9], argv[8], + argv[7], argv[6], argv[5], argv[4], + argv[3], argv[2], argv[1], argv[0]); + break; + case 12: + external_return_value = proc(argv[11], argv[10], argv[9], argv[8], + argv[7], argv[6], argv[5], argv[4], + argv[3], argv[2], argv[1], argv[0]); + break; + default: + fprintf(stderr, "external-apply called with too many arguments"); + exit(-1); } + + /* Raise an exception if the user neglected to pop off some gc roots. */ + + if (! s48_release_gc_roots_baseB((char *)gc_roots_marker)) { + s48_raise_scheme_exception(S48_EXCEPTION_GC_PROTECTION_MISMATCH, 0); + } + + /* Clear any free stack-blocks off of the top of the stack-block stack and + then longjmp past the corresponding portions of the process stack. */ + + if (current_stack_block != S48_FALSE && + STACK_BLOCK_FREE(current_stack_block) == S48_TRUE) { + + s48_value bottom_free_block; + + do { + bottom_free_block = current_stack_block; + current_stack_block = STACK_BLOCK_NEXT(current_stack_block); + } + while (current_stack_block != S48_FALSE && + STACK_BLOCK_FREE(current_stack_block) == S48_TRUE); + + /* fprintf(stderr, "[Freeing stack blocks from %d to %d]\n", + depth, + callback_depth()); */ + + longjmp(S48_EXTRACT_VALUE_POINTER(STACK_BLOCK_UNWIND(bottom_free_block), + struct s_jmp_buf)->buf, + CLEANUP_THROW); + } + } + else { /* throwing an exception or uwinding the stack */ + /* fprintf(stderr, "[external_call throw; was %d and now %d]\n", + depth, + callback_depth()); + fprintf(stderr, "[throw unrolling to %ld]\n", gc_roots_marker); */ + s48_release_gc_roots_baseB((char *)gc_roots_marker); + } + + /* Check to see if a thread is waiting to return to the next block down. */ + + if (current_stack_block != S48_FALSE && + STACK_BLOCK_THREAD(current_stack_block) != S48_FALSE) { + /* fprintf(stderr, "[releasing return at %d]\n", callback_depth()); */ + + if (throw_reason == EXCEPTION_THROW) { + /* We are in the midst of raising an exception, so we need to piggyback + our exception on that one. */ + s48_value old_exception + = s48_resetup_external_exception(S48_EXCEPTION_CALLBACK_RETURN_UNCOVERED, + 2); + s48_push(old_exception); + s48_push(current_stack_block); + external_return_value = S48_UNSPECIFIC; + } + else { + s48_setup_external_exception(S48_EXCEPTION_CALLBACK_RETURN_UNCOVERED, 2); + s48_push(current_stack_block); + s48_push(external_return_value); + external_return_value = S48_UNSPECIFIC; + } + } + + return external_return_value; +} + +/* + * Call Scheme function `proc' from C. We push the call-back depth, `proc', + * and the arguments on the Scheme stack and then restart the VM. The restarted + * VM calls the Scheme procedure `callback' which wraps the call to `proc' with + * a dynamic-wind. This prevents downward throws back into the call to `proc', + * which C can't handle, and allows the C stack to be cleaned up if an upward + * throw occurs. + * + * The maximum number of arguments is determined by the amount of space reserved + * on the Scheme stack for exceptions. See the definition of stack-slack in + * scheme/vm/stack.scm. + */ +s48_value +s48_call_scheme(s48_value proc, long nargs, ...) +{ + int i; + va_list arguments; + s48_value value; + s48_value unwind, stack_block; + S48_DECLARE_GC_PROTECT(2); + + S48_GC_PROTECT_2(unwind, proc); + + va_start(arguments, nargs); + + S48_SHARED_BINDING_CHECK(callback_binding); + + /* It would be nice to push a list of the arguments, but we have no way + of preserving them across a cons. */ + if (nargs < 0 || 10 < nargs) { /* DO NOT INCREASE THIS NUMBER */ + s48_value sch_nargs = s48_enter_integer(nargs); /* `proc' is protected */ + s48_raise_scheme_exception(S48_EXCEPTION_TOO_MANY_ARGUMENTS_IN_CALLBACK, + 2, proc, sch_nargs); + } + + /* fprintf(stderr, "[s48_call, %ld args, depth %d]\n", + nargs, callback_depth()); */ + + s48_push(S48_UNSPECIFIC); /* placeholder */ + s48_push(proc); + for (i = 0; i < nargs; i++) + s48_push(va_arg(arguments, s48_value)); + + va_end(arguments); + + /* With everything safely on the stack we can do the necessary allocation. */ + + unwind = S48_MAKE_VALUE(struct s_jmp_buf); + S48_EXTRACT_VALUE(unwind, struct s_jmp_buf) = current_return_point; + + stack_block = s48_make_record(stack_block_type_binding); + STACK_BLOCK_UNWIND(stack_block) = unwind; + STACK_BLOCK_PROC(stack_block) = current_procedure; + STACK_BLOCK_NEXT(stack_block) = current_stack_block; + STACK_BLOCK_FREE(stack_block) = S48_FALSE; + STACK_BLOCK_THREAD(stack_block) = S48_FALSE; + + S48_GC_UNPROTECT(); /* no more references to `unwind' or `proc'. */ + + current_stack_block = stack_block; + + /* if(s48_stack_ref(nargs + 1) != S48_UNSPECIFIC) + fprintf(stderr, "[stack_block set missed]\n"); */ + + s48_stack_setB(nargs + 1, stack_block); + + /* fprintf(stderr, "[s48_call, %ld args, depth %d, off we go]\n", + nargs, callback_depth()); */ + + value = s48_restart(S48_UNSAFE_SHARED_BINDING_REF(callback_binding), + nargs + 2); + + for (;s48_Scallback_return_stack_blockS != current_stack_block;) { + if (s48_Scallback_return_stack_blockS == S48_FALSE) { + + /* fprintf(stderr, "[s48_call returning from VM %ld]\n", callback_depth()); */ + + exit(value); + } + else { + + /* Someone has returned (because of threads) to the wrong section of the + C stack. We call back to a Scheme procedure that will suspend until + out block is at the top of the stack. */ + + s48_push(s48_Scallback_return_stack_blockS); + s48_push(S48_UNSAFE_SHARED_BINDING_REF(delay_callback_return_binding)); + s48_push(s48_Scallback_return_stack_blockS); + s48_push(value); + + /* fprintf(stderr, "[Premature return, %ld args, depth %d, back we go]\n", + nargs, callback_depth()); */ + + s48_disable_interruptsB(); + value = s48_restart(S48_UNSAFE_SHARED_BINDING_REF(callback_binding), 4); + } + } + + /* Restore the state of the current stack block. */ + + unwind = STACK_BLOCK_UNWIND(current_stack_block); + current_return_point = S48_EXTRACT_VALUE(unwind, struct s_jmp_buf); + current_procedure = STACK_BLOCK_PROC(current_stack_block); + current_stack_block = STACK_BLOCK_NEXT(current_stack_block); + + /* fprintf(stderr, "[s48_call returns from depth %d]\n", callback_depth()); */ + + return value; +} + +/* + * Because the top of the stack is cleared on the return from every external + * call, this doesn't have to do anything but exist. + */ +static s48_value +s48_clear_stack_top() +{ + /* fprintf(stderr, "[Clearing stack top]\n"); */ + return S48_UNSPECIFIC; +} + +/* + * For testing callbacks. This just calls its argument on the specified number + * of values. + */ +static s48_value +s48_trampoline(s48_value proc, s48_value nargs) +{ + + fprintf(stderr, "[C trampoline, %ld args]\n", S48_UNSAFE_EXTRACT_FIXNUM(nargs)); + + switch (s48_extract_fixnum(nargs)) { + case -2: { + S48_DECLARE_GC_PROTECT(1); + + S48_GC_PROTECT_1(proc); + + return S48_FALSE; + } + case -1: { + long n = - s48_extract_integer(proc); + fprintf(stderr, "[extract magnitude is %ld (%lx)]\n", n, n); + return s48_enter_integer(n); + } + case 0: { + s48_value value = s48_call_scheme(proc, 0); + if (value == S48_FALSE) + s48_raise_string_os_error("trampoline bouncing"); + return value; + } + case 1: + return s48_call_scheme(proc, 1, s48_enter_fixnum(100)); + case 2: + return s48_call_scheme(proc, 2, s48_enter_fixnum(100), s48_enter_fixnum(200)); + case 3: + return s48_call_scheme(proc, 3, s48_enter_fixnum(100), s48_enter_fixnum(200), + s48_enter_fixnum(300)); + default: + s48_raise_range_error(nargs, s48_enter_fixnum(0), s48_enter_fixnum(3)); + return S48_UNDEFINED; /* not that we ever get here */ + } +} + +/********************************/ +/* + * Raising exceptions. We push the arguments on the stack end then throw out + * of the most recent call from Scheme. + * + * The maximum number of arguments is determined by the amount of space reserved + * on the Scheme stack for exceptions. See the definition of stack-slack in + * scheme/vm/stack.scm. + */ +void +s48_raise_scheme_exception(long why, long nargs, ...) +{ + int i; + va_list irritants; + + va_start(irritants, nargs); + + s48_setup_external_exception(why, nargs + 1); + + if (10 < nargs) { /* DO NOT INCREASE THIS NUMBER */ + fprintf(stderr, "s48_raise_scheme_exception() called with more than 10 arguments, discarding surplus\n"); + nargs = 10; + } + + s48_push(current_procedure); + + for (i = 0; i < nargs; i++) + s48_push(va_arg(irritants, s48_value)); + + va_end(irritants); + + external_return_value = S48_UNSPECIFIC; + longjmp(current_return_point.buf, EXCEPTION_THROW); +} + +/* Specific exceptions */ + +void +s48_raise_argtype_error(s48_value value) { + s48_raise_scheme_exception(S48_EXCEPTION_WRONG_TYPE_ARGUMENT, 1, value); +} + +void +s48_raise_argnumber_error(s48_value value, s48_value min, s48_value max) { + s48_raise_scheme_exception(S48_EXCEPTION_WRONG_NUMBER_OF_ARGUMENTS, + 3, value, min, max); +} + +void +s48_raise_range_error(s48_value value, s48_value min, s48_value max) { + s48_raise_scheme_exception(S48_EXCEPTION_INDEX_OUT_OF_RANGE, + 3, value, min, max); +} + +void +s48_raise_closed_channel_error() { + s48_raise_scheme_exception(S48_EXCEPTION_CLOSED_CHANNEL, 0); +} + +void +s48_raise_os_error(int the_errno) { + s48_raise_scheme_exception(S48_EXCEPTION_OS_ERROR, 2, + s48_enter_fixnum(the_errno), + s48_enter_string(strerror(the_errno))); +} + +void +s48_raise_string_os_error(char *reason) { + s48_raise_scheme_exception(S48_EXCEPTION_OS_ERROR, 1, + s48_enter_string(reason)); +} + +void +s48_raise_out_of_memory_error() { + s48_raise_scheme_exception(S48_EXCEPTION_OUT_OF_MEMORY, 0); +} + +/********************************/ +/* Support routines for external code */ + +/* + * Type-safe procedures for checking types and dereferencing and setting slots. + */ + +int +s48_stob_has_type(s48_value thing, int type) +{ + return S48_STOB_P(thing) && (S48_STOB_TYPE(thing) == type); +} + +long +s48_stob_length(s48_value thing, int type) +{ + if (!(S48_STOB_P(thing) && (S48_STOB_TYPE(thing) == type))) + s48_raise_argtype_error(thing); + + return S48_STOB_DESCRIPTOR_LENGTH(thing); +} + +long +s48_stob_byte_length(s48_value thing, int type) +{ + if (!(S48_STOB_P(thing) && (S48_STOB_TYPE(thing) == type))) + s48_raise_argtype_error(thing); + + if (type == S48_STOBTYPE_STRING) + return S48_STOB_BYTE_LENGTH(thing) - 1; + else + return S48_STOB_BYTE_LENGTH(thing); +} + +s48_value +s48_stob_ref(s48_value thing, int type, long offset) +{ + long length; + + if (!(S48_STOB_P(thing) && (S48_STOB_TYPE(thing) == type))) + s48_raise_argtype_error(thing); + + length = S48_STOB_DESCRIPTOR_LENGTH(thing); + + if (offset < 0 || length <= offset) + s48_raise_range_error(s48_enter_integer(offset), + S48_UNSAFE_ENTER_FIXNUM(0), + S48_UNSAFE_ENTER_FIXNUM(length - 1)); + + return S48_STOB_REF(thing, offset); +} + +void +s48_stob_set(s48_value thing, int type, long offset, s48_value value) +{ + long length; + + if (!(S48_STOB_P(thing) && + (S48_STOB_TYPE(thing) == type) && + !S48_STOB_IMMUTABLEP(thing))) + s48_raise_argtype_error(thing); + + length = S48_STOB_DESCRIPTOR_LENGTH(thing); + + if (offset < 0 || length <= offset) + s48_raise_range_error(s48_enter_integer(offset), + S48_UNSAFE_ENTER_FIXNUM(0), + S48_UNSAFE_ENTER_FIXNUM(length - 1)); + + S48_STOB_SET(thing, offset, value); +} + +char +s48_byte_ref(s48_value thing, int type, long offset) +{ + long length; + + if (!(S48_STOB_P(thing) && (S48_STOB_TYPE(thing) == type))) + s48_raise_argtype_error(thing); + + length = (type == S48_STOBTYPE_STRING) ? + S48_STOB_BYTE_LENGTH(thing) - 1 : + S48_STOB_BYTE_LENGTH(thing); + + if (offset < 0 || length <= offset) + s48_raise_range_error(s48_enter_integer(offset), + S48_UNSAFE_ENTER_FIXNUM(0), + S48_UNSAFE_ENTER_FIXNUM(length - 1)); + + return S48_STOB_BYTE_REF(thing, offset); +} + +void +s48_byte_set(s48_value thing, int type, long offset, char value) +{ + long length; + + if (!(S48_STOB_P(thing) && (S48_STOB_TYPE(thing) == type))) + s48_raise_argtype_error(thing); + + length = (type == S48_STOBTYPE_STRING) ? + S48_STOB_BYTE_LENGTH(thing) - 1 : + S48_STOB_BYTE_LENGTH(thing); + + if (offset < 0 || length <= offset) + s48_raise_range_error(s48_enter_integer(offset), + S48_UNSAFE_ENTER_FIXNUM(0), + S48_UNSAFE_ENTER_FIXNUM(length - 1)); + + S48_STOB_BYTE_SET(thing, offset, value); +} + +void * +s48_value_pointer(s48_value value) +{ + S48_CHECK_VALUE(value); + + return S48_ADDRESS_AFTER_HEADER(value, void *); +} + +/********************************/ +/* Numbers, characters, and pointers. */ + +/* + * These two functions have the same range as the unsafe macros, but they signal + * an error if things go wrong, instead of silently producing garbage. Unlike + * the integer versions they cannot cause a GC. + */ + +s48_value +s48_enter_fixnum(long value) +{ + if (value < S48_MIN_FIXNUM_VALUE || S48_MAX_FIXNUM_VALUE < value) + s48_raise_argtype_error(s48_enter_integer(value)); + + return S48_UNSAFE_ENTER_FIXNUM(value); +} + +long +s48_extract_fixnum(s48_value value) +{ + if (! S48_FIXNUM_P(value)) + s48_raise_argtype_error(value); + + return S48_UNSAFE_EXTRACT_FIXNUM(value); +} + +/* + * If `value' fits in a fixnum we put it there. Larger values are passed to the + * Scheme procedure LONG-TO-BIGNUM as the sign and the two sixteen-bit halves of + * the negative magnitude. Using the negative magnitude avoids problems with + * two's complement's asymmetry. + */ + +s48_value +s48_enter_integer(long value) +{ + if (S48_MIN_FIXNUM_VALUE <= value && value <= S48_MAX_FIXNUM_VALUE) + return S48_UNSAFE_ENTER_FIXNUM(value); + else { + S48_SHARED_BINDING_CHECK(long_to_bignum_binding); + + if (value < 0) + return s48_call_scheme(S48_SHARED_BINDING_REF(long_to_bignum_binding), + 3, + S48_FALSE, + S48_UNSAFE_ENTER_FIXNUM(value >> 16), + S48_UNSAFE_ENTER_FIXNUM(value & 0xFFFF)); + else + return s48_call_scheme(S48_SHARED_BINDING_REF(long_to_bignum_binding), + 3, + S48_TRUE, + S48_UNSAFE_ENTER_FIXNUM((- value) >> 16), + S48_UNSAFE_ENTER_FIXNUM((- value) & 0xFFFF)); + } +} + +/* + * If we have a fixnum we just extract it. Bignums require a call back into + * Scheme 48. (BIGNUM-TO-LONG n) returns a vector containing the sign and the + * high and low sixteen-bit halves of N. If N is not an integer we get #f back. + * Again, we use negative numbers to stay out of trouble. + */ + +long +s48_extract_integer(s48_value value) +{ + if (S48_FIXNUM_P(value)) + return S48_UNSAFE_EXTRACT_FIXNUM(value); + + else { + s48_value stuff; + S48_DECLARE_GC_PROTECT(1); + + S48_GC_PROTECT_1(value); + + S48_SHARED_BINDING_CHECK(bignum_to_long_binding); + + stuff = s48_call_scheme(S48_SHARED_BINDING_REF(bignum_to_long_binding), + 1, + value); + + S48_GC_UNPROTECT(); + + if (stuff == S48_FALSE) + s48_raise_argtype_error(value); + + /* The first VECTOR_REF does the type checking for the rest. */ + { + long low = S48_UNSAFE_EXTRACT_FIXNUM(S48_VECTOR_REF(stuff, 2)); + s48_value boxed_high = S48_UNSAFE_VECTOR_REF(stuff, 1); + long high = S48_UNSAFE_EXTRACT_FIXNUM(boxed_high); + int pos_p = S48_EXTRACT_BOOLEAN(S48_UNSAFE_VECTOR_REF(stuff, 0)); + + if ((! S48_FIXNUM_P(boxed_high)) || + high > (pos_p ? 0x7FFF : 0x8000)) + s48_raise_argtype_error(value); + + { + long magnitude = ((- high) << 16) - low; + return pos_p ? - magnitude : magnitude; + } + } + } +} + +/* + * Doubles and characters are straightforward. + */ + +s48_value +s48_enter_double(double value) +{ + s48_value obj; + + obj = s48_allocate_stob(S48_STOBTYPE_DOUBLE, sizeof(double)); + S48_UNSAFE_EXTRACT_DOUBLE(obj) = value; + + return obj; +} + +double +s48_extract_double(s48_value s48_double) +{ + if (! S48_DOUBLE_P(s48_double)) + s48_raise_argtype_error(s48_double); + + return S48_UNSAFE_EXTRACT_DOUBLE(s48_double); +} + +s48_value +s48_enter_char(unsigned char a_char) +{ + if (a_char > 255) + s48_raise_range_error(s48_enter_fixnum(a_char), + s48_enter_fixnum(0), + s48_enter_fixnum(255)); + + return S48_UNSAFE_ENTER_CHAR(a_char); +} + +unsigned char +s48_extract_char(s48_value a_char) +{ + if (! S48_CHAR_P(a_char)) + s48_raise_argtype_error(a_char); + + return S48_UNSAFE_EXTRACT_CHAR(a_char); +} + +/********************************/ +/* Allocation */ + +s48_value +s48_enter_pointer(void *pointer) +{ + s48_value obj; + + obj = s48_allocate_stob(S48_STOBTYPE_BYTE_VECTOR, sizeof(void *)); + *(S48_ADDRESS_AFTER_HEADER(obj, void **)) = pointer; + + return obj; +} + +s48_value +s48_cons(s48_value v1, s48_value v2) +{ + s48_value obj; + S48_DECLARE_GC_PROTECT(2); + + S48_GC_PROTECT_2(v1, v2); + + obj = s48_allocate_stob(S48_STOBTYPE_PAIR, 2 * sizeof(s48_value)); + S48_UNSAFE_SET_CAR(obj, v1); + S48_UNSAFE_SET_CDR(obj, v2); + + S48_GC_UNPROTECT(); + return obj; +} + +s48_value +s48_make_weak_pointer(s48_value value) +{ + s48_value obj; + S48_DECLARE_GC_PROTECT(1); + + S48_GC_PROTECT_1(value); + + obj = s48_allocate_stob(S48_STOBTYPE_WEAK_POINTER, sizeof(s48_value)); + S48_STOB_SET(obj, 0, value); + + S48_GC_UNPROTECT(); + return obj; +} + +s48_value +s48_enter_substring(char *str, int length) +{ + s48_value obj = s48_allocate_stob(S48_STOBTYPE_STRING, length + 1); + strncpy(S48_UNSAFE_EXTRACT_STRING(obj), str, length); + *(S48_UNSAFE_EXTRACT_STRING(obj) + length) = '\0'; + return obj; +} + +s48_value +s48_enter_string(char *str) +{ + return s48_enter_substring(str, strlen(str)); +} + +char * +s48_extract_string(s48_value string) +{ + S48_CHECK_STRING(string); + + return S48_UNSAFE_EXTRACT_STRING(string); +} + +s48_value +s48_make_string(int length, char init) +{ + s48_value obj = s48_allocate_stob(S48_STOBTYPE_STRING, length+1); + memset(S48_UNSAFE_EXTRACT_STRING(obj), init, length); + S48_UNSAFE_EXTRACT_STRING(obj)[length] = '\0'; + return obj; +} + +s48_value +s48_make_vector(int length, s48_value init) +{ + int i; + s48_value obj; + S48_DECLARE_GC_PROTECT(1); + + S48_GC_PROTECT_1(init); + + obj = s48_allocate_stob(S48_STOBTYPE_VECTOR, length * sizeof(s48_value)); + for (i = 0; i < length; ++i) + S48_UNSAFE_VECTOR_SET(obj, i, init); + + S48_GC_UNPROTECT(); + + return obj; +} + +s48_value +s48_make_byte_vector(int length) +{ + return s48_allocate_stob(S48_STOBTYPE_BYTE_VECTOR, length); +} + +s48_value +s48_make_record(s48_value type_shared_binding) +{ + int i, number_of_fields; + s48_value record = S48_FALSE; + s48_value record_type = S48_FALSE; + S48_DECLARE_GC_PROTECT(1); + + S48_GC_PROTECT_1(record_type); + + S48_SHARED_BINDING_CHECK(type_shared_binding); + S48_SHARED_BINDING_CHECK(the_record_type_binding); + + record_type = S48_SHARED_BINDING_REF(type_shared_binding); + + s48_check_record_type(record_type, the_record_type_binding); + + number_of_fields = + S48_UNSAFE_EXTRACT_FIXNUM(S48_RECORD_TYPE_NUMBER_OF_FIELDS(record_type)); + + record = s48_allocate_stob(S48_STOBTYPE_RECORD, + (number_of_fields + 1) * sizeof(s48_value)); + + S48_UNSAFE_RECORD_SET(record, -1, record_type); + for (i = 0; i < number_of_fields; ++i) + S48_UNSAFE_RECORD_SET(record, i, S48_UNSPECIFIC); + + S48_GC_UNPROTECT(); + + return record; +} + +/* + * Raise an exception if `record' is not a record whose type is the one + * found in `type_binding'. + */ +void +s48_check_record_type(s48_value record, s48_value type_binding) +{ + if (! S48_RECORD_P(S48_SHARED_BINDING_REF(type_binding))) + s48_raise_scheme_exception(S48_EXCEPTION_UNBOUND_EXTERNAL_NAME, 1, + S48_SHARED_BINDING_NAME(type_binding)); + + if ((! S48_RECORD_P(record)) || + (S48_UNSAFE_SHARED_BINDING_REF(type_binding) != + S48_UNSAFE_RECORD_REF(record, -1))) + s48_raise_argtype_error(record); +} + +long +s48_length(s48_value list) +{ + long i = 0; + + while (!(S48_EQ(list, S48_NULL))) + { + list = S48_CDR(list); + ++i; + } + return S48_UNSAFE_ENTER_FIXNUM(i); +} + diff --git a/c/fake/dlfcn.h b/c/fake/dlfcn.h new file mode 100644 index 0000000..2c29be7 --- /dev/null +++ b/c/fake/dlfcn.h @@ -0,0 +1,11 @@ +/* + * This include file is for systems which do not have dynamic loading. + */ +#if ! defined(HAVE_DLOPEN) + +extern void *dlopen(char *filename, int flags); +extern char *dlerror(void); +extern void *dlsym(void *lib, char *name); +extern int dlclose(void *lib); + +#endif diff --git a/c/fake/libdl1.c b/c/fake/libdl1.c new file mode 100644 index 0000000..753ef06 --- /dev/null +++ b/c/fake/libdl1.c @@ -0,0 +1,101 @@ +/* + * This is a fake version of the dynamic loading library for machines + * which don't have it, but which have nlist. We fake the stuff so that + * looking up in a NULL open library returns symbols in the current executable + * (whose name is pointed to by object_file). + */ +#include "sysdep.h" +#include + +#ifdef USCORE +#include +#endif + +#if ! defined(NLIST_HAS_N_NAME) +#define n_name n_un.n_name +#endif + + +static char self[] = "I am the wallrus", + *lasterror; + + +char * +dlerror(void) +{ + char *res; + + res = lasterror; + lasterror = NULL; + return (res); +} + + +void * +dlopen(char *name, int flags) +{ + if (name == NULL) + return ((void *)self); + lasterror = "Dynamic loading not supported on this machine"; + return (NULL); +} + + +int +dlclose(void *lib) +{ + return (0); +} + + +void * +dlsym(void *lib, char *name) +{ + struct nlist names[2]; + int status; + extern char *s48_object_file; +#ifdef USCORE + int len; + char *tmp, + buff[40]; +#endif + + if (lib != self) { + lasterror = "Bad library pointer passed to dlsym()"; + return (NULL); + } + if (object_file == NULL) { + lasterror = "I don't know the name of my executable"; + return (NULL); + } +#ifdef USCORE + len = 1 + strlen(name) + 1; + if (len <= sizeof(buff)) + tmp = buff; + else { + tmp = (char *)malloc(len); + if (tmp == NULL) { + lasterror = "Out of space"; + return (NULL); + } + } + tmp[0] = '_'; + strcpy(tmp + 1, name); + name = tmp; +#endif + names[0].n_name = name; + names[0].n_value = 0; /* for Linux */ + names[0].n_type = 0; /* for Linux */ + names[1].n_name = NULL; + status = nlist(object_file, names); +#ifdef USCORE + if (tmp != buff) + free((void *)tmp); +#endif + if ((status != 0) + || (names[0].n_value == 0 && names[0].n_type == 0)) { + lasterror = "Symbol not found"; + return (NULL); + } + return (names[0].n_value); +} diff --git a/c/fake/libdl2.c b/c/fake/libdl2.c new file mode 100644 index 0000000..376ea24 --- /dev/null +++ b/c/fake/libdl2.c @@ -0,0 +1,43 @@ +/* + * This is a fake version of the dynamic loading library for machines + * which don't have it, and don't even have an nlist. + * We fake it so that everything fails. + */ +#include "sysdep.h" + + +static char *lasterror; + + +char * +dlerror(void) +{ + char *res; + + res = lasterror; + lasterror = NULL; + return (res); +} + + +void * +dlopen(char *name, int flags) +{ + lasterror = "Dynamic loading not supported on this machine"; + return (NULL); +} + + +int +dlclose(void *lib) +{ + return (0); +} + + +void * +dlsym(void *lib, char *name) +{ + lasterror = "Dynamic loading not supported on this machine"; + return (NULL); +} diff --git a/c/fake/sigact.h b/c/fake/sigact.h new file mode 100644 index 0000000..e12edcb --- /dev/null +++ b/c/fake/sigact.h @@ -0,0 +1,15 @@ +/* + * If we don't have sigaction, we fake it using signal. + */ +#if ! defined(HAVE_SIGACTION) + +struct sigaction { + void (*sa_handler)(); + int sa_mask; + int sa_flags; +}; + +#define sigaction(sig, act, oact) signal((sig), (act)->sa_handler) +#define sigemptyset(ign) 0 + +#endif diff --git a/c/fake/strerror.c b/c/fake/strerror.c new file mode 100644 index 0000000..fe1ec7e --- /dev/null +++ b/c/fake/strerror.c @@ -0,0 +1,22 @@ +/* + * If the system doesn't have a strerror procedure, we provide our own. + * Note, this depends on sys_nerr and sys_errlist being provided. + * If your system doesn't provide that either, you can replace this + * procedure with one that always returns "Unknown error". + */ +#include "sysdep.h" + + +extern int sys_nerr; +extern char *sys_errlist[]; + + +char * +strerror(int errnum) +{ + if ((0 <= errnum) + && (errnum < sys_nerr)) + return (sys_errlist[errnum]); + else + return ("Unknown error"); +} diff --git a/c/fake/strerror.h b/c/fake/strerror.h new file mode 100644 index 0000000..670e683 --- /dev/null +++ b/c/fake/strerror.h @@ -0,0 +1,8 @@ +/* + * If we don't have strerror(), we fake it using sys_nerr and sys_errlist. + */ +#if ! defined(HAVE_STRERROR) + +extern char *strerror(int errnum); + +#endif diff --git a/c/fake/sys-select.h b/c/fake/sys-select.h new file mode 100644 index 0000000..d5dc08c --- /dev/null +++ b/c/fake/sys-select.h @@ -0,0 +1,9 @@ +/* + * If we have a sys/select.h, then include it. + */ +#if defined(HAVE_SYS_SELECT_H) + +#include +#include + +#endif diff --git a/c/fd-io.h b/c/fd-io.h new file mode 100644 index 0000000..19255c0 --- /dev/null +++ b/c/fd-io.h @@ -0,0 +1,16 @@ + +#define STDIN_FD() 0 +#define STDOUT_FD() 1 +#define STDERR_FD() 2 + +extern int ps_open_fd(char *in_filename, bool is_input, long *status); + +extern int ps_close_fd(long fd_as_long); + +extern long ps_read_fd(long fd_as_long, char *buf_as_long, long max, bool waitp, + bool *eofp, bool *pending, long *status); + +extern long ps_write_fd(long fd_as_long, char *buf_as_long, long max, + bool *pending, long *status); + +extern long ps_abort_fd_op(long fd_as_long); diff --git a/c/io.h b/c/io.h new file mode 100644 index 0000000..8357210 --- /dev/null +++ b/c/io.h @@ -0,0 +1,12 @@ +extern FILE *ps_open_input_file(char *, long *); +extern FILE *ps_open_output_file(char *, long *); +extern long ps_close(FILE *); +extern char ps_read_char(FILE *, char *, long *, char); +extern long ps_read_integer(FILE *, char *, long *); +extern long ps_write_char(char, FILE *); +extern long ps_write_integer(long, FILE *); +extern long ps_write_string(char *, FILE *); +extern long ps_read_block(FILE *, char *, long, char *, long *); +extern long ps_write_block(FILE *, char *, long); +extern char *ps_error_string(long); +extern void ps_error(char *, long count, ...); diff --git a/c/main.c b/c/main.c new file mode 100644 index 0000000..1267c24 --- /dev/null +++ b/c/main.c @@ -0,0 +1,181 @@ +/* Copyright (c) 1993-1999 by Richard Kelsey and Jonathan Rees. + See file COPYING. */ + +#include +#include +#include +#include "scheme48vm.h" +#include "scheme48heap.h" + +#if !defined(DEFAULT_HEAP_SIZE) +/* 1.5 megacell = 6 megabytes (3 meg per semispace) */ +#define DEFAULT_HEAP_SIZE 1500000L +#endif + +#if !defined(DEFAULT_STACK_SIZE) +/* 2500 cells = 10000 bytes */ +#define DEFAULT_STACK_SIZE 2500L +#endif + +#if defined(STATIC_AREAS) +#define DEFAULT_IMAGE_NAME NULL +#else + +/* DEFAULT_IMAGE_NAME should be defined using the -D switch to cc. */ +#if !defined(DEFAULT_IMAGE_NAME) +#define DEFAULT_IMAGE_NAME "scheme48.image" +#endif + +#endif /* STATIC_AREAS */ + +extern void s48_sysdep_init(void); +extern void s48_initialize_external_modules(void); + +char *s48_object_file; /* specified via a command line argument */ +char *s48_reloc_file; /* dynamic loading will set this */ + +int +main(argc, argv) + int argc; char **argv; +{ + char *image_name = DEFAULT_IMAGE_NAME; + long heap_size = DEFAULT_HEAP_SIZE; /* in numbers of cells */ + long stack_size = DEFAULT_STACK_SIZE; /* in numbers of cells */ + int errors = 0; + long return_value; + void *heap, *stack; + long required_heap_size; + int warn_undefined_imported_bindings_p = 1; + +#if defined(STATIC_AREAS) + extern long static_entry; + extern long static_symbol_table; + extern long static_imported_binding_table, static_exported_binding_table; + extern long p_count, *p_areas[], p_sizes[]; + extern long i_count, *i_areas[], i_sizes[]; +#endif + + long vm_argc = 0; + char *me = *argv; /* Save program name. */ + + s48_object_file = s48_reloc_file = NULL; + + argv++; argc--; /* Skip program name. */ + + for (; argc > 0; argc--, argv++) + if (argv[0][0] == '-') + switch (argv[0][1]) { + case 'h': + argc--; argv++; + if (argc == 0) { errors++; break; } + heap_size = atoi(*argv); + if (heap_size <= 0) errors++; + break; + case 's': + argc--; argv++; + if (argc == 0) { errors++; break; } + stack_size = atoi(*argv); + if (stack_size <= 0) errors++; + break; + case 'i': + argc--; argv++; + if (argc == 0) { errors++; break; } + image_name = *argv; + break; + case 'a': + argc--; + vm_argc = argc; /* remaining args are passed to the VM */ + argc = 0; + break; + case 'o': + argc--; argv++; + if (argc == 0) { errors++; break; } + s48_object_file = *argv; + break; + case 'u': + argc--; argv++; + warn_undefined_imported_bindings_p = 0; + break; + default: + fprintf(stderr, "Invalid argument: %s\n", *argv); + errors++; + } + else + if (argv[0][0] != '\0') { + fprintf(stderr, "Invalid argument: %s\n", *argv); + errors++; } + if (errors != 0) { + fprintf(stderr, +"Usage: %s [options] [-a arguments]\n\ +Options: -h \n\ + -s \n\ + -i \n\ + -o \n\ + -u [don't warn on unbound external identifiers]", + me); + return 1; + } + + s48_sysdep_init(); + s48_heap_init(); + s48_init(); + + if (image_name == NULL) + required_heap_size = 0; + else { + /* check_image_header returns number of bytes; required_heap_size + is number of cells. */ + required_heap_size = + s48_check_image_header((unsigned char *)image_name) >> 2; + if (-1 == required_heap_size) { + fprintf(stderr, "Image file \"%s\" is unusable.\n", image_name); + return 1; } + } + + /* two semi-spaces, plus we want some room to maneuver */ + if (heap_size < 4 * required_heap_size) { + fprintf(stderr, "heap size %ld is too small, using %ld\n", + heap_size, 4 * required_heap_size); + heap_size = 4 * required_heap_size; } + + heap = (void *) malloc(heap_size * sizeof(long)); + stack = (void *) malloc(stack_size * sizeof(long)); + + if (!heap || !stack) { + fprintf(stderr, "system is out of memory\n"); + return 1; } + + s48_initialize_heap((long)heap, heap_size); + +#if defined(STATIC_AREAS) + if (image_name == NULL) { + s48_register_static_areas(p_count, p_areas, p_sizes, + i_count, i_areas, i_sizes); + s48_set_image_valuesB(static_entry, + static_symbol_table, + static_imported_binding_table, + static_exported_binding_table); + } else if (s48_read_image() == -1) { + fprintf(stderr, "Image file \"%s\" is unusable.\n", image_name); + return 1; } +#else + if (s48_read_image() == -1) { + fprintf(stderr, "Image file \"%s\" is unusable.\n", image_name); + return 1; } +#endif + + s48_initialize_vm(stack, stack_size); + + s48_initialize_external_modules(); + + if (warn_undefined_imported_bindings_p) + s48_warn_about_undefined_imported_bindings(); + + return_value = s48_call_startup_procedure(argv, vm_argc); + + if (s48_reloc_file != NULL) + if (0 != unlink(s48_reloc_file)) + fprintf(stderr, "unable to delete file %s\n", s48_reloc_file); + + return(return_value); +} diff --git a/c/old-scheme48.h b/c/old-scheme48.h new file mode 100644 index 0000000..03f5d10 --- /dev/null +++ b/c/old-scheme48.h @@ -0,0 +1,110 @@ +typedef long scheme_value; + +#define FIXNUM_TAG 0 +#define FIXNUMP(x) (((long)(x) & 3L) == FIXNUM_TAG) +#define IMMEDIATE_TAG 1 +#define IMMEDIATEP(x) (((long)(x) & 3L) == IMMEDIATE_TAG) +#define HEADER_TAG 2 +#define HEADERP(x) (((long)(x) & 3L) == HEADER_TAG) +#define STOB_TAG 3 +#define STOBP(x) (((long)(x) & 3L) == STOB_TAG) + +#define ENTER_FIXNUM(n) ((scheme_value)((n) << 2)) +#define EXTRACT_FIXNUM(x) ((long)(x) >> 2) + +#define MISC_IMMEDIATE(n) (scheme_value)(IMMEDIATE_TAG | ((n) << 2)) +#define SCHFALSE MISC_IMMEDIATE(0) +#define SCHTRUE MISC_IMMEDIATE(1) +#define SCHCHAR MISC_IMMEDIATE(2) +#define SCHUNSPECIFIC MISC_IMMEDIATE(3) +#define SCHUNDEFINED MISC_IMMEDIATE(4) +#define SCHEOF MISC_IMMEDIATE(5) +#define SCHNULL MISC_IMMEDIATE(6) +#define UNDEFINED SCHUNDEFINED +#define UNSPECIFIC SCHUNSPECIFIC + +#define ENTER_BOOLEAN(n) ((n) ? SCHTRUE : SCHFALSE) +#define EXTRACT_BOOLEAN(x) ((x) != SCHFALSE) + +#define ENTER_CHAR(c) (SCHCHAR | ((c) << 8)) +#define EXTRACT_CHAR(x) ((x) >> 8) +#define CHARP(x) ((((long) (x)) & 0xff) == SCHCHAR) + +#define ADDRESS_AFTER_HEADER(x, type) ((type *)((x) - STOB_TAG)) +#define STOB_REF(x, i) ((ADDRESS_AFTER_HEADER(x, long))[i]) +#define STOB_TYPE(x) ((STOB_HEADER(x)>>2)&31) +#define STOB_HEADER(x) (STOB_REF((x),-1)) +#define STOB_BLENGTH(x) (STOB_HEADER(x) >> 8) +#define STOB_LLENGTH(x) (STOB_HEADER(x) >> 10) + +#define STOBTYPE_PAIR 0 +#define PAIRP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_PAIR)) +#define STOBTYPE_SYMBOL 1 +#define SYMBOLP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_SYMBOL)) +#define STOBTYPE_VECTOR 2 +#define VECTORP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_VECTOR)) +#define STOBTYPE_CLOSURE 3 +#define CLOSUREP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_CLOSURE)) +#define STOBTYPE_LOCATION 4 +#define LOCATIONP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_LOCATION)) +#define STOBTYPE_CHANNEL 5 +#define CHANNELP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_CHANNEL)) +#define STOBTYPE_PORT 6 +#define PORTP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_PORT)) +#define STOBTYPE_RATNUM 7 +#define RATNUMP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_RATNUM)) +#define STOBTYPE_RECORD 8 +#define RECORDP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_RECORD)) +#define STOBTYPE_CONTINUATION 9 +#define CONTINUATIONP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_CONTINUATION)) +#define STOBTYPE_EXTENDED_NUMBER 10 +#define EXTENDED_NUMBERP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_EXTENDED_NUMBER)) +#define STOBTYPE_TEMPLATE 11 +#define TEMPLATEP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_TEMPLATE)) +#define STOBTYPE_WEAK_POINTER 12 +#define WEAK_POINTERP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_WEAK_POINTER)) +#define STOBTYPE_SHARED_BINDING 13 +#define SHARED_BINDINGP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_SHARED_BINDING)) +#define STOBTYPE_UNUSED_D_HEADER1 14 +#define UNUSED_D_HEADER1P(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_UNUSED_D_HEADER1)) +#define STOBTYPE_UNUSED_D_HEADER2 15 +#define UNUSED_D_HEADER2P(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_UNUSED_D_HEADER2)) +#define STOBTYPE_STRING 16 +#define STRINGP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_STRING)) +#define STOBTYPE_CODE_VECTOR 17 +#define CODE_VECTORP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_CODE_VECTOR)) +#define STOBTYPE_DOUBLE 18 +#define DOUBLEP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_DOUBLE)) +#define STOBTYPE_BIGNUM 19 +#define BIGNUMP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_BIGNUM)) + +#define CAR(x) STOB_REF(x, 0) +#define CDR(x) STOB_REF(x, 1) +#define SYMBOL_TO_STRING(x) STOB_REF(x, 0) +#define LOCATION_ID(x) STOB_REF(x, 0) +#define CONTENTS(x) STOB_REF(x, 1) +#define CLOSURE_TEMPLATE(x) STOB_REF(x, 0) +#define CLOSURE_ENV(x) STOB_REF(x, 1) +#define WEAK_POINTER_REF(x) STOB_REF(x, 0) +#define SHARED_BINDING_NAME(x) STOB_REF(x, 0) +#define SHARED_BINDING_IS_IMPORTP(x) STOB_REF(x, 1) +#define SHARED_BINDING_REF(x) STOB_REF(x, 2) +#define PORT_HANDLER(x) STOB_REF(x, 0) +#define PORT_STATUS(x) STOB_REF(x, 1) +#define PORT_LOCK(x) STOB_REF(x, 2) +#define PORT_LOCKEDP(x) STOB_REF(x, 3) +#define PORT_DATA(x) STOB_REF(x, 4) +#define PORT_BUFFER(x) STOB_REF(x, 5) +#define PORT_INDEX(x) STOB_REF(x, 6) +#define PORT_LIMIT(x) STOB_REF(x, 7) +#define PORT_PENDING_EOFP(x) STOB_REF(x, 8) +#define CHANNEL_STATUS(x) STOB_REF(x, 0) +#define CHANNEL_ID(x) STOB_REF(x, 1) +#define CHANNEL_OS_INDEX(x) STOB_REF(x, 2) + +#define VECTOR_LENGTH(x) STOB_LLENGTH(x) +#define VECTOR_REF(x, i) STOB_REF(x, i) +#define CODE_VECTOR_LENGTH(x) STOB_BLENGTH(x) +#define CODE_VECTOR_REF(x, i) (ADDRESS_AFTER_HEADER(x, unsigned char)[i]) +#define STRING_LENGTH(x) (STOB_BLENGTH(x)-1) +#define STRING_REF(x, i) (ADDRESS_AFTER_HEADER(x, char)[i]) diff --git a/c/prescheme.h b/c/prescheme.h new file mode 100644 index 0000000..b95d022 --- /dev/null +++ b/c/prescheme.h @@ -0,0 +1,59 @@ +#include +#include "io.h" + +#define PS_READ_CHAR(PORT,RESULT,EOFP,STATUS) \ +{ \ + FILE * TTport = PORT; \ + int TTchar; \ + if (EOF == (TTchar = getc(TTport))) \ + RESULT = ps_read_char(TTport, &EOFP, &STATUS, 0==1);\ + else { \ + RESULT = TTchar; \ + EOFP = 0; \ + STATUS = 0; } \ +} + +#define PS_PEEK_CHAR(PORT,RESULT,EOFP,STATUS) \ +{ \ + FILE * TTport = PORT; \ + int TTchar; \ + if (EOF == (TTchar = getc(TTport))) \ + RESULT = ps_read_char(TTport, &EOFP, &STATUS, 0==0);\ + else { \ + RESULT = TTchar; \ + ungetc(RESULT, TTport); \ + EOFP = 0; \ + STATUS = 0; } \ +} + +#define PS_READ_INTEGER(PORT,RESULT,EOFP,STATUS) \ +RESULT = ps_read_integer(PORT,&EOFP,&STATUS); + +#define PS_WRITE_CHAR(CHAR,PORT,STATUS) \ +{ \ + FILE * TTport = PORT; \ + char TTchar = CHAR; \ + if (EOF == putc(TTchar,TTport)) \ + STATUS = ps_write_char(TTchar,TTport); \ + else { \ + STATUS = 0; } \ +} + + +/* C shifts may not work if the amount is greater than the machine word size */ +/* Patched by JAR 6/6/93 */ + +#define PS_SHIFT_RIGHT(X,Y,RESULT) \ +{ \ + long TTx = X, TTy = Y; \ + RESULT = TTy >= 32 ? (TTx < 0 ? -1 : 0) : TTx >> TTy; \ +} + +#define PS_SHIFT_LEFT(X,Y,RESULT) \ +{ \ + long TTy = Y; \ + RESULT = TTy >= 32 ? 0 : X << TTy; \ +} + +extern long s48_return_value, s48_run_machine(); + diff --git a/c/scheme48.h b/c/scheme48.h new file mode 100644 index 0000000..55b843a --- /dev/null +++ b/c/scheme48.h @@ -0,0 +1,459 @@ +/* This file was generated automatically. + It's probably not a good idea to change it. */ + +#ifndef _H_SCHEME48 +#define _H_SCHEME48 + +/* Copyright (c) 1993-1999 by Richard Kelsey and Jonathan Rees. + See file COPYING. */ + +#include "write-barrier.h" + +typedef long s48_value; + +#define NO_ERRORS 0 /* errno value */ + +/* Misc stuff */ + +#define S48_EQ(v1, v2) ((v1) == (v2)) + +#define S48_MAX_FIXNUM_VALUE ((1 << 29) - 1) +#define S48_MIN_FIXNUM_VALUE (-1 << 29) + +extern int s48_stob_has_type(s48_value, int); +extern long s48_stob_length(s48_value, int); +extern long s48_stob_byte_length(s48_value, int); +extern s48_value s48_stob_ref(s48_value, int, long); +extern void s48_stob_set(s48_value, int, long, s48_value); +extern char s48_stob_byte_ref(s48_value, int, long); +extern void s48_stob_byte_set(s48_value, int, long, char); + +extern void s48_register_gc_rootB(char *); +extern void s48_push_gc_rootsB(char *, long); +extern char s48_pop_gc_rootsB(void); +extern char s48_pop_gc_roots_up_to_markerB(char *); + +extern s48_value s48_enter_char(unsigned char); +extern unsigned char s48_extract_char(s48_value); +extern s48_value s48_enter_fixnum(long); +extern long s48_extract_fixnum(s48_value); +extern s48_value s48_enter_integer(long); +extern long s48_extract_integer(s48_value); +extern s48_value s48_enter_double(double); +extern double s48_extract_double(s48_value); +extern s48_value s48_cons(s48_value, s48_value); +extern s48_value s48_enter_string(char *); +extern char * s48_extract_string(s48_value); +extern s48_value s48_enter_substring(char *, int); +extern s48_value s48_make_string(int, char); +extern s48_value s48_make_vector(int, s48_value); +extern s48_value s48_make_byte_vector(int); +extern s48_value s48_make_record(s48_value); +extern s48_value s48_make_weak_pointer(s48_value); +extern void s48_check_record_type(s48_value, s48_value); +extern long s48_length(s48_value); +extern s48_value s48_enter_pointer(void *); +extern s48_value s48_get_imported_binding(char *); +extern void s48_define_exported_binding(char *, s48_value); + +extern s48_value s48_set_channel_os_index(s48_value, long); +extern s48_value s48_add_channel(s48_value, s48_value, long); +extern void s48_close_channel(long); + +extern s48_value s48_call_scheme(s48_value proc, long nargs, ...); + +#define S48_EXPORT_FUNCTION(p) (s48_define_exported_binding(#p, s48_enter_pointer(p))) + +#define S48_MAKE_VALUE(type) (s48_make_byte_vector(sizeof(type))) +extern void * s48_value_pointer(s48_value); + +#define S48_EXTRACT_VALUE_POINTER(x, type) ((type *) s48_value_pointer(x)) +#define S48_EXTRACT_VALUE(x, type) (*(S48_EXTRACT_VALUE_POINTER((x), type))) +#define S48_SET_VALUE(x, type, v) (S48_EXTRACT_VALUE((x), type) = (v)) + +#define S48_UNSAFE_EXTRACT_VALUE_POINTER(x, type) \ + (S48_ADDRESS_AFTER_HEADER((x), type)) +#define S48_UNSAFE_EXTRACT_VALUE(x, type) \ + (*(S48_UNSAFE_EXTRACT_VALUE_POINTER((x), type))) +#define S48_UNSAFE_SET_VALUE(x, type, v) \ + (S48_UNSAFE_EXTRACT_VALUE((x), type) = (v)) + +#define S48_UNSAFE_EXTRACT_DOUBLE(x) \ + (*(S48_ADDRESS_AFTER_HEADER((x), double))) + +#define S48_DECLARE_GC_PROTECT(n) long ___gc_buffer[(n)+2] + +#define S48_GC_PROTECT_1(v) \ + (___gc_buffer[2]=(long)&(v), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 1)) + +#define S48_GC_PROTECT_2(v1, v2) \ + (___gc_buffer[2]=(long)&(v1), ___gc_buffer[3]=(long)&(v2), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 2)) + +#define S48_GC_PROTECT_3(v1, v2, v3) \ + (___gc_buffer[2]=(long)&(v1), \ + ___gc_buffer[3]=(long)&(v2), \ + ___gc_buffer[4]=(long)&(v3), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 3)) + +#define S48_GC_PROTECT_4(v1, v2, v3, v4) \ + (___gc_buffer[2]=(long)&(v1), \ + ___gc_buffer[3]=(long)&(v2), \ + ___gc_buffer[4]=(long)&(v3), \ + ___gc_buffer[5]=(long)&(v4), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 4)) + +#define S48_GC_PROTECT_5(v1, v2, v3, v4, v5) \ + (___gc_buffer[2]=(long)&(v1), \ + ___gc_buffer[3]=(long)&(v2), \ + ___gc_buffer[4]=(long)&(v3), \ + ___gc_buffer[5]=(long)&(v4), \ + ___gc_buffer[6]=(long)&(v5), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 5)) + +#define S48_GC_PROTECT_6(v1, v2, v3, v4, v5, v6) \ + (___gc_buffer[2]=(long)&(v1), \ + ___gc_buffer[3]=(long)&(v2), \ + ___gc_buffer[4]=(long)&(v3), \ + ___gc_buffer[5]=(long)&(v4), \ + ___gc_buffer[6]=(long)&(v5), \ + ___gc_buffer[7]=(long)&(v6), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 6)) + +#define S48_GC_PROTECT_7(v1, v2, v3, v4, v5, v6, v7) \ + (___gc_buffer[2]=(long)&(v1), \ + ___gc_buffer[3]=(long)&(v2), \ + ___gc_buffer[4]=(long)&(v3), \ + ___gc_buffer[5]=(long)&(v4), \ + ___gc_buffer[6]=(long)&(v5), \ + ___gc_buffer[7]=(long)&(v6), \ + ___gc_buffer[8]=(long)&(v7), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 7)) + +#define S48_GC_PROTECT_8(v1, v2, v3, v4, v5, v6, v7, v8) \ + (___gc_buffer[2]=(long)&(v1), \ + ___gc_buffer[3]=(long)&(v2), \ + ___gc_buffer[4]=(long)&(v3), \ + ___gc_buffer[5]=(long)&(v4), \ + ___gc_buffer[6]=(long)&(v5), \ + ___gc_buffer[7]=(long)&(v6), \ + ___gc_buffer[8]=(long)&(v7), \ + ___gc_buffer[9]=(long)&(v8), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 8)) + +#define S48_GC_PROTECT_9(v1, v2, v3, v4, v5, v6, v7, v8, v9) \ + (___gc_buffer[2]=(long)&(v1), \ + ___gc_buffer[3]=(long)&(v2), \ + ___gc_buffer[4]=(long)&(v3), \ + ___gc_buffer[5]=(long)&(v4), \ + ___gc_buffer[6]=(long)&(v5), \ + ___gc_buffer[7]=(long)&(v6), \ + ___gc_buffer[8]=(long)&(v7), \ + ___gc_buffer[9]=(long)&(v8), \ + ___gc_buffer[10]=(long)&(v9), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 9)) + +#define S48_GC_PROTECT_10(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \ + (___gc_buffer[2]=(long)&(v1), \ + ___gc_buffer[3]=(long)&(v2), \ + ___gc_buffer[4]=(long)&(v3), \ + ___gc_buffer[5]=(long)&(v4), \ + ___gc_buffer[6]=(long)&(v5), \ + ___gc_buffer[7]=(long)&(v6), \ + ___gc_buffer[8]=(long)&(v7), \ + ___gc_buffer[9]=(long)&(v8), \ + ___gc_buffer[10]=(long)&(v9), \ + ___gc_buffer[11]=(long)&(v10), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 10)) + +#define S48_GC_UNPROTECT() \ + do { if (! s48_pop_gc_rootsB()) \ + s48_raise_scheme_exception( S48_EXCEPTION_GC_PROTECTION_MISMATCH, 0); \ + } while(0) + +#define S48_GC_PROTECT_GLOBAL(v) (s48_register_gc_rootB((char *)&(v))) + +/* Exceptions */ + +extern void s48_raise_scheme_exception(long type, long nargs, ...); +extern void s48_raise_argtype_error(s48_value value); +extern void s48_raise_argnumber_error(s48_value value, + s48_value min, s48_value max); +extern void s48_raise_range_error(s48_value value, + s48_value min, s48_value max); +extern void s48_raise_closed_channel_error(); +extern void s48_raise_os_error(int the_errno); +extern void s48_raise_string_os_error(char *reason); +extern void s48_raise_out_of_memory_error(); + +/* Type checking */ + +#define S48_CHECK_PAIR(v) do { if (!S48_PAIR_P(v)) s48_raise_argtype_error(v); } while (0) +#define S48_CHECK_FIXNUM(v) do { if (!S48_FIXNUM_P(v)) s48_raise_argtype_error(v); } while (0) +#define S48_CHECK_STRING(v) do { if (!S48_STRING_P(v)) s48_raise_argtype_error(v); } while (0) +#define S48_CHECK_CHANNEL(v) do { if (!S48_CHANNEL_P(v)) s48_raise_argtype_error(v); } while (0) +#define S48_CHECK_RECORD(v) do { if (!S48_RECORD_P(v)) s48_raise_argtype_error(v); } while (0) +#define S48_CHECK_VALUE(v) do { if (!S48_BYTE_VECTOR_P(v)) s48_raise_argtype_error(v); } while (0) +#define S48_CHECK_EXPORT_BINDING(v) do { if (!S48_EXPORT_BINDING_P(v)) s48_raise_argtype_error(v); } while (0) + +#define S48_VALUE_P(v) (S48_BYTE_VECTOR_P(v)) + +extern void s48_check_record_type(s48_value record, s48_value type_binding); + +#define S48_SHARED_BINDING_CHECK(binding) \ + do { if (S48_UNSPECIFIC == S48_SHARED_BINDING_REF(binding)) \ + s48_raise_scheme_exception(S48_EXCEPTION_UNBOUND_EXTERNAL_NAME, 1, \ + S48_SHARED_BINDING_NAME(binding)); \ + } while(0) + +#define S48_FIXNUM_TAG 0 +#define S48_FIXNUM_P(x) (((long)(x) & 3L) == S48_FIXNUM_TAG) +#define S48_IMMEDIATE_TAG 1 +#define S48_IMMEDIATE_P(x) (((long)(x) & 3L) == S48_IMMEDIATE_TAG) +#define S48_HEADER_TAG 2 +#define S48_HEADER_P(x) (((long)(x) & 3L) == S48_HEADER_TAG) +#define S48_STOB_TAG 3 +#define S48_STOB_P(x) (((long)(x) & 3L) == S48_STOB_TAG) + +#define S48_UNSAFE_ENTER_FIXNUM(n) ((s48_value)((n) << 2)) +#define S48_UNSAFE_EXTRACT_FIXNUM(x) ((long)(x) >> 2) + +#define S48_MISC_IMMEDIATE(n) ((s48_value)(S48_IMMEDIATE_TAG | ((n) << 2))) +#define S48_FALSE (S48_MISC_IMMEDIATE(0)) +#define S48_TRUE (S48_MISC_IMMEDIATE(1)) +#define S48_CHAR (S48_MISC_IMMEDIATE(2)) +#define S48_UNSPECIFIC (S48_MISC_IMMEDIATE(3)) +#define S48_UNDEFINED (S48_MISC_IMMEDIATE(4)) +#define S48_EOF (S48_MISC_IMMEDIATE(5)) +#define S48_NULL (S48_MISC_IMMEDIATE(6)) + +#define S48_ENTER_BOOLEAN(n) ((n) ? S48_TRUE : S48_FALSE) +#define S48_EXTRACT_BOOLEAN(x) ((x) != S48_FALSE) + +#define S48_UNSAFE_ENTER_CHAR(c) (S48_CHAR | ((c) << 8)) +#define S48_UNSAFE_EXTRACT_CHAR(x) ((x) >> 8) +#define S48_CHAR_P(x) ((((long) (x)) & 0xff) == S48_CHAR) + +#define S48_ADDRESS_AFTER_HEADER(x, type) ((type *)((x) - S48_STOB_TAG)) +#define S48_STOB_REF(x, i) (S48_ADDRESS_AFTER_HEADER(x, s48_value)[i]) +#define S48_STOB_BYTE_REF(x, i) (((char *)S48_ADDRESS_AFTER_HEADER(x, s48_value))[i]) +#define S48_STOB_SET(x, i, v) do { s48_value __stob_set_x = (x); long __stob_set_i = (i); s48_value __stob_set_v = (v); if (S48_STOB_IMMUTABLEP(__stob_set_x)) s48_raise_argtype_error(__stob_set_x); else { S48_WRITE_BARRIER((__stob_set_x), (char *) (&S48_STOB_REF((__stob_set_x), (__stob_set_i))),(__stob_set_v)); *(&S48_STOB_REF((__stob_set_x), (__stob_set_i))) = (__stob_set_v); } } while (0) +#define S48_STOB_BYTE_SET(x, i, v) do { char __stob_set_x = (x); long __stob_set_i = (i); s48_value __stob_set_v = (v); if (S48_STOB_IMMUTABLEP(__stob_set_x)) s48_raise_argtype_error(__stob_set_x); else *(&S48_STOB_BYTE_REF((__stob_set_x), (__stob_set_i))) = (__stob_set_v); } while (0) +#define S48_STOB_TYPE(x) ((S48_STOB_HEADER(x)>>2)&31) +#define S48_STOB_HEADER(x) (S48_STOB_REF((x),-1)) +#define S48_STOB_ADDRESS(x) (&(S48_STOB_HEADER(x))) +#define S48_STOB_BYTE_LENGTH(x) (S48_STOB_HEADER(x) >> 8) +#define S48_STOB_DESCRIPTOR_LENGTH(x) (S48_STOB_HEADER(x) >> 10) +#define S48_STOB_IMMUTABLEP(x) ((S48_STOB_HEADER(x)>>7) & 1) +#define S48_STOB_MAKE_IMMUTABLE(x) ((S48_STOB_HEADER(x)) |= (1<<7)) + +#define S48_STOBTYPE_PAIR 0 +#define S48_PAIR_P(x) (s48_stob_has_type(x, 0)) +#define S48_STOBTYPE_SYMBOL 1 +#define S48_SYMBOL_P(x) (s48_stob_has_type(x, 1)) +#define S48_STOBTYPE_VECTOR 2 +#define S48_VECTOR_P(x) (s48_stob_has_type(x, 2)) +#define S48_STOBTYPE_CLOSURE 3 +#define S48_CLOSURE_P(x) (s48_stob_has_type(x, 3)) +#define S48_STOBTYPE_LOCATION 4 +#define S48_LOCATION_P(x) (s48_stob_has_type(x, 4)) +#define S48_STOBTYPE_CHANNEL 5 +#define S48_CHANNEL_P(x) (s48_stob_has_type(x, 5)) +#define S48_STOBTYPE_PORT 6 +#define S48_PORT_P(x) (s48_stob_has_type(x, 6)) +#define S48_STOBTYPE_RATNUM 7 +#define S48_RATNUM_P(x) (s48_stob_has_type(x, 7)) +#define S48_STOBTYPE_RECORD 8 +#define S48_RECORD_P(x) (s48_stob_has_type(x, 8)) +#define S48_STOBTYPE_CONTINUATION 9 +#define S48_CONTINUATION_P(x) (s48_stob_has_type(x, 9)) +#define S48_STOBTYPE_EXTENDED_NUMBER 10 +#define S48_EXTENDED_NUMBER_P(x) (s48_stob_has_type(x, 10)) +#define S48_STOBTYPE_TEMPLATE 11 +#define S48_TEMPLATE_P(x) (s48_stob_has_type(x, 11)) +#define S48_STOBTYPE_WEAK_POINTER 12 +#define S48_WEAK_POINTER_P(x) (s48_stob_has_type(x, 12)) +#define S48_STOBTYPE_SHARED_BINDING 13 +#define S48_SHARED_BINDING_P(x) (s48_stob_has_type(x, 13)) +#define S48_STOBTYPE_UNUSED_D_HEADER1 14 +#define S48_UNUSED_D_HEADER1_P(x) (s48_stob_has_type(x, 14)) +#define S48_STOBTYPE_UNUSED_D_HEADER2 15 +#define S48_UNUSED_D_HEADER2_P(x) (s48_stob_has_type(x, 15)) +#define S48_STOBTYPE_STRING 16 +#define S48_STRING_P(x) (s48_stob_has_type(x, 16)) +#define S48_STOBTYPE_BYTE_VECTOR 17 +#define S48_BYTE_VECTOR_P(x) (s48_stob_has_type(x, 17)) +#define S48_STOBTYPE_DOUBLE 18 +#define S48_DOUBLE_P(x) (s48_stob_has_type(x, 18)) +#define S48_STOBTYPE_BIGNUM 19 +#define S48_BIGNUM_P(x) (s48_stob_has_type(x, 19)) + +#define S48_CAR_OFFSET 0 +#define S48_CAR(x) (s48_stob_ref((x), S48_STOBTYPE_PAIR, 0)) +#define S48_UNSAFE_CAR(x) (S48_STOB_REF((x), 0)) +#define S48_SET_CAR(x, v) (s48_stob_ref((x), S48_STOBTYPE_PAIR, 0, (v))) +#define S48_UNSAFE_SET_CAR(x, v) S48_STOB_SET((x), 0, (v)) +#define S48_CDR_OFFSET 1 +#define S48_CDR(x) (s48_stob_ref((x), S48_STOBTYPE_PAIR, 1)) +#define S48_UNSAFE_CDR(x) (S48_STOB_REF((x), 1)) +#define S48_SET_CDR(x, v) (s48_stob_ref((x), S48_STOBTYPE_PAIR, 1, (v))) +#define S48_UNSAFE_SET_CDR(x, v) S48_STOB_SET((x), 1, (v)) +#define S48_SYMBOL_TO_STRING_OFFSET 0 +#define S48_SYMBOL_TO_STRING(x) (s48_stob_ref((x), S48_STOBTYPE_SYMBOL, 0)) +#define S48_UNSAFE_SYMBOL_TO_STRING(x) (S48_STOB_REF((x), 0)) +#define S48_LOCATION_ID_OFFSET 0 +#define S48_LOCATION_ID(x) (s48_stob_ref((x), S48_STOBTYPE_LOCATION, 0)) +#define S48_UNSAFE_LOCATION_ID(x) (S48_STOB_REF((x), 0)) +#define S48_SET_LOCATION_ID(x, v) (s48_stob_ref((x), S48_STOBTYPE_LOCATION, 0, (v))) +#define S48_UNSAFE_SET_LOCATION_ID(x, v) S48_STOB_SET((x), 0, (v)) +#define S48_CONTENTS_OFFSET 1 +#define S48_CONTENTS(x) (s48_stob_ref((x), S48_STOBTYPE_LOCATION, 1)) +#define S48_UNSAFE_CONTENTS(x) (S48_STOB_REF((x), 1)) +#define S48_SET_CONTENTS(x, v) (s48_stob_ref((x), S48_STOBTYPE_LOCATION, 1, (v))) +#define S48_UNSAFE_SET_CONTENTS(x, v) S48_STOB_SET((x), 1, (v)) +#define S48_CLOSURE_TEMPLATE_OFFSET 0 +#define S48_CLOSURE_TEMPLATE(x) (s48_stob_ref((x), S48_STOBTYPE_CLOSURE, 0)) +#define S48_UNSAFE_CLOSURE_TEMPLATE(x) (S48_STOB_REF((x), 0)) +#define S48_CLOSURE_ENV_OFFSET 1 +#define S48_CLOSURE_ENV(x) (s48_stob_ref((x), S48_STOBTYPE_CLOSURE, 1)) +#define S48_UNSAFE_CLOSURE_ENV(x) (S48_STOB_REF((x), 1)) +#define S48_WEAK_POINTER_REF_OFFSET 0 +#define S48_WEAK_POINTER_REF(x) (s48_stob_ref((x), S48_STOBTYPE_WEAK_POINTER, 0)) +#define S48_UNSAFE_WEAK_POINTER_REF(x) (S48_STOB_REF((x), 0)) +#define S48_SHARED_BINDING_NAME_OFFSET 0 +#define S48_SHARED_BINDING_NAME(x) (s48_stob_ref((x), S48_STOBTYPE_SHARED_BINDING, 0)) +#define S48_UNSAFE_SHARED_BINDING_NAME(x) (S48_STOB_REF((x), 0)) +#define S48_SHARED_BINDING_IS_IMPORTP_OFFSET 1 +#define S48_SHARED_BINDING_IS_IMPORTP(x) (s48_stob_ref((x), S48_STOBTYPE_SHARED_BINDING, 1)) +#define S48_UNSAFE_SHARED_BINDING_IS_IMPORTP(x) (S48_STOB_REF((x), 1)) +#define S48_SHARED_BINDING_REF_OFFSET 2 +#define S48_SHARED_BINDING_REF(x) (s48_stob_ref((x), S48_STOBTYPE_SHARED_BINDING, 2)) +#define S48_UNSAFE_SHARED_BINDING_REF(x) (S48_STOB_REF((x), 2)) +#define S48_SHARED_BINDING_SET(x, v) (s48_stob_ref((x), S48_STOBTYPE_SHARED_BINDING, 2, (v))) +#define S48_UNSAFE_SHARED_BINDING_SET(x, v) S48_STOB_SET((x), 2, (v)) +#define S48_PORT_HANDLER_OFFSET 0 +#define S48_PORT_HANDLER(x) (s48_stob_ref((x), S48_STOBTYPE_PORT, 0)) +#define S48_UNSAFE_PORT_HANDLER(x) (S48_STOB_REF((x), 0)) +#define S48_PORT_STATUS_OFFSET 1 +#define S48_PORT_STATUS(x) (s48_stob_ref((x), S48_STOBTYPE_PORT, 1)) +#define S48_UNSAFE_PORT_STATUS(x) (S48_STOB_REF((x), 1)) +#define S48_SET_PORT_STATUS(x, v) (s48_stob_ref((x), S48_STOBTYPE_PORT, 1, (v))) +#define S48_UNSAFE_SET_PORT_STATUS(x, v) S48_STOB_SET((x), 1, (v)) +#define S48_PORT_LOCK_OFFSET 2 +#define S48_PORT_LOCK(x) (s48_stob_ref((x), S48_STOBTYPE_PORT, 2)) +#define S48_UNSAFE_PORT_LOCK(x) (S48_STOB_REF((x), 2)) +#define S48_SET_PORT_LOCK(x, v) (s48_stob_ref((x), S48_STOBTYPE_PORT, 2, (v))) +#define S48_UNSAFE_SET_PORT_LOCK(x, v) S48_STOB_SET((x), 2, (v)) +#define S48_PORT_LOCKEDP_OFFSET 3 +#define S48_PORT_LOCKEDP(x) (s48_stob_ref((x), S48_STOBTYPE_PORT, 3)) +#define S48_UNSAFE_PORT_LOCKEDP(x) (S48_STOB_REF((x), 3)) +#define S48_SET_PORT_LOCKEDP(x, v) (s48_stob_ref((x), S48_STOBTYPE_PORT, 3, (v))) +#define S48_UNSAFE_SET_PORT_LOCKEDP(x, v) S48_STOB_SET((x), 3, (v)) +#define S48_PORT_DATA_OFFSET 4 +#define S48_PORT_DATA(x) (s48_stob_ref((x), S48_STOBTYPE_PORT, 4)) +#define S48_UNSAFE_PORT_DATA(x) (S48_STOB_REF((x), 4)) +#define S48_SET_PORT_DATA(x, v) (s48_stob_ref((x), S48_STOBTYPE_PORT, 4, (v))) +#define S48_UNSAFE_SET_PORT_DATA(x, v) S48_STOB_SET((x), 4, (v)) +#define S48_PORT_BUFFER_OFFSET 5 +#define S48_PORT_BUFFER(x) (s48_stob_ref((x), S48_STOBTYPE_PORT, 5)) +#define S48_UNSAFE_PORT_BUFFER(x) (S48_STOB_REF((x), 5)) +#define S48_SET_PORT_BUFFER(x, v) (s48_stob_ref((x), S48_STOBTYPE_PORT, 5, (v))) +#define S48_UNSAFE_SET_PORT_BUFFER(x, v) S48_STOB_SET((x), 5, (v)) +#define S48_PORT_INDEX_OFFSET 6 +#define S48_PORT_INDEX(x) (s48_stob_ref((x), S48_STOBTYPE_PORT, 6)) +#define S48_UNSAFE_PORT_INDEX(x) (S48_STOB_REF((x), 6)) +#define S48_SET_PORT_INDEX(x, v) (s48_stob_ref((x), S48_STOBTYPE_PORT, 6, (v))) +#define S48_UNSAFE_SET_PORT_INDEX(x, v) S48_STOB_SET((x), 6, (v)) +#define S48_PORT_LIMIT_OFFSET 7 +#define S48_PORT_LIMIT(x) (s48_stob_ref((x), S48_STOBTYPE_PORT, 7)) +#define S48_UNSAFE_PORT_LIMIT(x) (S48_STOB_REF((x), 7)) +#define S48_SET_PORT_LIMIT(x, v) (s48_stob_ref((x), S48_STOBTYPE_PORT, 7, (v))) +#define S48_UNSAFE_SET_PORT_LIMIT(x, v) S48_STOB_SET((x), 7, (v)) +#define S48_PORT_PENDING_EOFP_OFFSET 8 +#define S48_PORT_PENDING_EOFP(x) (s48_stob_ref((x), S48_STOBTYPE_PORT, 8)) +#define S48_UNSAFE_PORT_PENDING_EOFP(x) (S48_STOB_REF((x), 8)) +#define S48_SET_PORT_PENDING_EOFP(x, v) (s48_stob_ref((x), S48_STOBTYPE_PORT, 8, (v))) +#define S48_UNSAFE_SET_PORT_PENDING_EOFP(x, v) S48_STOB_SET((x), 8, (v)) +#define S48_CHANNEL_STATUS_OFFSET 0 +#define S48_CHANNEL_STATUS(x) (s48_stob_ref((x), S48_STOBTYPE_CHANNEL, 0)) +#define S48_UNSAFE_CHANNEL_STATUS(x) (S48_STOB_REF((x), 0)) +#define S48_CHANNEL_ID_OFFSET 1 +#define S48_CHANNEL_ID(x) (s48_stob_ref((x), S48_STOBTYPE_CHANNEL, 1)) +#define S48_UNSAFE_CHANNEL_ID(x) (S48_STOB_REF((x), 1)) +#define S48_CHANNEL_OS_INDEX_OFFSET 2 +#define S48_CHANNEL_OS_INDEX(x) (s48_stob_ref((x), S48_STOBTYPE_CHANNEL, 2)) +#define S48_UNSAFE_CHANNEL_OS_INDEX(x) (S48_STOB_REF((x), 2)) + +#define S48_VECTOR_LENGTH(x) (s48_stob_length((x), S48_STOBTYPE_VECTOR)) +#define S48_UNSAFE_VECTOR_LENGTH(x) (STOB_DESCRIPTOR_LENGTH(x)) +#define S48_VECTOR_REF(x, i) (s48_stob_ref((x), S48_STOBTYPE_VECTOR, (i))) +#define S48_VECTOR_SET(x, i, v) (s48_stob_set((x), S48_STOBTYPE_VECTOR, (i), (v))) +#define S48_UNSAFE_VECTOR_REF(x, i) (S48_STOB_REF((x), (i))) +#define S48_UNSAFE_VECTOR_SET(x, i, v) S48_STOB_SET((x), (i), (v)) +#define S48_RECORD_LENGTH(x) (s48_stob_length((x), S48_STOBTYPE_RECORD)) +#define S48_UNSAFE_RECORD_LENGTH(x) (STOB_DESCRIPTOR_LENGTH(x)) +#define S48_RECORD_REF(x, i) (s48_stob_ref((x), S48_STOBTYPE_RECORD, (i) + 1)) +#define S48_RECORD_SET(x, i, v) (s48_stob_set((x), S48_STOBTYPE_RECORD, (i) + 1, (v))) +#define S48_UNSAFE_RECORD_REF(x, i) (S48_STOB_REF((x), (i) + 1)) +#define S48_UNSAFE_RECORD_SET(x, i, v) S48_STOB_SET((x), (i) + 1, (v)) +#define S48_RECORD_TYPE(x) (s48_stob_ref((x), S48_STOBTYPE_RECORD)) +#define S48_UNSAFE_RECORD_TYPE(x) (STOB_REF((x), 0)) +#define S48_BYTE_VECTOR_LENGTH(x) (s48_stob_byte_length((x), S48_STOBTYPE_BYTE_VECTOR)) +#define S48_BYTE_VECTOR_REF(x, i) (s48_stob_byte_ref((x), S48_STOBTYPE_BYTE_VECTOR, (i))) +#define S48_BYTE_VECTOR_SET(x, i, v) (s48_stob_byte_set((x), S48_STOBTYPE_BYTE_VECTOR, (i), (v))) +#define S48_UNSAFE_BYTE_VECTOR_REF(x, i) (S48_STOB_BYTE_REF((x), (i))) +#define S48_UNSAFE_BYTE_VECTOR_SET(x, i, v) S48_BYTE_STOB_SET((x), (i), (v)) +#define S48_STRING_LENGTH(x) (s48_stob_byte_length((x), S48_STOBTYPE_STRING)) +#define S48_STRING_REF(x, i) (s48_stob_byte_ref((x), S48_STOBTYPE_STRING, (i))) +#define S48_STRING_SET(x, i, v) (s48_stob_byte_set((x), S48_STOBTYPE_STRING, (i), (v))) +#define S48_UNSAFE_STRING_REF(x, i) (S48_STOB_BYTE_REF((x), (i))) +#define S48_UNSAFE_STRING_SET(x, i, v) S48_BYTE_STOB_SET((x), (i), (v)) +#define S48_UNSAFE_BYTE_VECTOR_LENGTH(x) (S48_STOB_BYTE_LENGTH(x)) +#define S48_UNSAFE_STRING_LENGTH(x) (S48_STOB_BYTE_LENGTH(x) - 1) +#define S48_UNSAFE_EXTRACT_STRING(x) (S48_ADDRESS_AFTER_HEADER((x), char)) +#define S48_EXTRACT_EXTERNAL_OBJECT(x, type) ((type *)(S48_ADDRESS_AFTER_HEADER(x, long)+1)) + +#define S48_RECORD_TYPE_RESUMER(x) S48_RECORD_REF((x), 0) +#define S48_RECORD_TYPE_UID(x) S48_RECORD_REF((x), 1) +#define S48_RECORD_TYPE_NAME(x) S48_RECORD_REF((x), 2) +#define S48_RECORD_TYPE_FIELD_NAMES(x) S48_RECORD_REF((x), 3) +#define S48_RECORD_TYPE_NUMBER_OF_FIELDS(x) S48_RECORD_REF((x), 4) +#define S48_RECORD_TYPE_DISCLOSER(x) S48_RECORD_REF((x), 5) + +#define S48_EXCEPTION_UNASSIGNED_LOCAL 0 +#define S48_EXCEPTION_UNDEFINED_GLOBAL 1 +#define S48_EXCEPTION_UNBOUND_GLOBAL 2 +#define S48_EXCEPTION_BAD_PROCEDURE 3 +#define S48_EXCEPTION_WRONG_NUMBER_OF_ARGUMENTS 4 +#define S48_EXCEPTION_WRONG_TYPE_ARGUMENT 5 +#define S48_EXCEPTION_ARITHMETIC_OVERFLOW 6 +#define S48_EXCEPTION_INDEX_OUT_OF_RANGE 7 +#define S48_EXCEPTION_HEAP_OVERFLOW 8 +#define S48_EXCEPTION_OUT_OF_MEMORY 9 +#define S48_EXCEPTION_CANNOT_OPEN_CHANNEL 10 +#define S48_EXCEPTION_CHANNEL_OS_INDEX_ALREADY_IN_USE 11 +#define S48_EXCEPTION_CLOSED_CHANNEL 12 +#define S48_EXCEPTION_PENDING_CHANNEL_IO 13 +#define S48_EXCEPTION_BUFFER_FULLEMPTY 14 +#define S48_EXCEPTION_UNIMPLEMENTED_INSTRUCTION 15 +#define S48_EXCEPTION_TRAP 16 +#define S48_EXCEPTION_PROCEEDING_AFTER_EXCEPTION 17 +#define S48_EXCEPTION_BAD_OPTION 18 +#define S48_EXCEPTION_UNBOUND_EXTERNAL_NAME 19 +#define S48_EXCEPTION_TOO_MANY_ARGUMENTS_TO_EXTERNAL_PROCEDURE 20 +#define S48_EXCEPTION_TOO_MANY_ARGUMENTS_IN_CALLBACK 21 +#define S48_EXCEPTION_CALLBACK_RETURN_UNCOVERED 22 +#define S48_EXCEPTION_EXTENSION_EXCEPTION 23 +#define S48_EXCEPTION_EXTENSION_RETURN_ERROR 24 +#define S48_EXCEPTION_OS_ERROR 25 +#define S48_EXCEPTION_UNRESUMABLE_RECORDS_IN_IMAGE 26 +#define S48_EXCEPTION_GC_PROTECTION_MISMATCH 27 + +#define S48_CHANNEL_STATUS_CLOSED S48_UNSAFE_ENTER_FIXNUM(0) +#define S48_CHANNEL_STATUS_INPUT S48_UNSAFE_ENTER_FIXNUM(1) +#define S48_CHANNEL_STATUS_OUTPUT S48_UNSAFE_ENTER_FIXNUM(2) +#define S48_CHANNEL_STATUS_SPECIAL_INPUT S48_UNSAFE_ENTER_FIXNUM(3) +#define S48_CHANNEL_STATUS_SPECIAL_OUTPUT S48_UNSAFE_ENTER_FIXNUM(4) + +#endif /* _H_SCHEME48 */ diff --git a/c/scheme48.h.in b/c/scheme48.h.in new file mode 100644 index 0000000..2d3e533 --- /dev/null +++ b/c/scheme48.h.in @@ -0,0 +1,202 @@ +/* Copyright (c) 1993-1999 by Richard Kelsey and Jonathan Rees. + See file COPYING. */ + +#include "write-barrier.h" + +typedef long s48_value; + +#define NO_ERRORS 0 /* errno value */ + +/* Misc stuff */ + +#define S48_EQ(v1, v2) ((v1) == (v2)) + +#define S48_MAX_FIXNUM_VALUE ((1 << 29) - 1) +#define S48_MIN_FIXNUM_VALUE (-1 << 29) + +extern int s48_stob_has_type(s48_value, int); +extern long s48_stob_length(s48_value, int); +extern long s48_stob_byte_length(s48_value, int); +extern s48_value s48_stob_ref(s48_value, int, long); +extern void s48_stob_set(s48_value, int, long, s48_value); +extern char s48_stob_byte_ref(s48_value, int, long); +extern void s48_stob_byte_set(s48_value, int, long, char); + +extern void s48_register_gc_rootB(char *); +extern void s48_push_gc_rootsB(char *, long); +extern char s48_pop_gc_rootsB(void); +extern char s48_pop_gc_roots_up_to_markerB(char *); + +extern s48_value s48_enter_char(unsigned char); +extern unsigned char s48_extract_char(s48_value); +extern s48_value s48_enter_fixnum(long); +extern long s48_extract_fixnum(s48_value); +extern s48_value s48_enter_integer(long); +extern long s48_extract_integer(s48_value); +extern s48_value s48_enter_double(double); +extern double s48_extract_double(s48_value); +extern s48_value s48_cons(s48_value, s48_value); +extern s48_value s48_enter_string(char *); +extern char * s48_extract_string(s48_value); +extern s48_value s48_enter_substring(char *, int); +extern s48_value s48_make_string(int, char); +extern s48_value s48_make_vector(int, s48_value); +extern s48_value s48_make_byte_vector(int); +extern s48_value s48_make_record(s48_value); +extern s48_value s48_make_weak_pointer(s48_value); +extern void s48_check_record_type(s48_value, s48_value); +extern long s48_length(s48_value); +extern s48_value s48_enter_pointer(void *); +extern s48_value s48_get_imported_binding(char *); +extern void s48_define_exported_binding(char *, s48_value); + +extern s48_value s48_set_channel_os_index(s48_value, long); +extern s48_value s48_add_channel(s48_value, s48_value, long); +extern void s48_close_channel(long); + +extern s48_value s48_call_scheme(s48_value proc, long nargs, ...); + +#define S48_EXPORT_FUNCTION(p) (s48_define_exported_binding(#p, s48_enter_pointer(p))) + +#define S48_MAKE_VALUE(type) (s48_make_byte_vector(sizeof(type))) +extern void * s48_value_pointer(s48_value); + +#define S48_EXTRACT_VALUE_POINTER(x, type) ((type *) s48_value_pointer(x)) +#define S48_EXTRACT_VALUE(x, type) (*(S48_EXTRACT_VALUE_POINTER((x), type))) +#define S48_SET_VALUE(x, type, v) (S48_EXTRACT_VALUE((x), type) = (v)) + +#define S48_UNSAFE_EXTRACT_VALUE_POINTER(x, type) \ + (S48_ADDRESS_AFTER_HEADER((x), type)) +#define S48_UNSAFE_EXTRACT_VALUE(x, type) \ + (*(S48_UNSAFE_EXTRACT_VALUE_POINTER((x), type))) +#define S48_UNSAFE_SET_VALUE(x, type, v) \ + (S48_UNSAFE_EXTRACT_VALUE((x), type) = (v)) + +#define S48_UNSAFE_EXTRACT_DOUBLE(x) \ + (*(S48_ADDRESS_AFTER_HEADER((x), double))) + +#define S48_DECLARE_GC_PROTECT(n) long ___gc_buffer[(n)+2] + +#define S48_GC_PROTECT_1(v) \ + (___gc_buffer[2]=(long)&(v), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 1)) + +#define S48_GC_PROTECT_2(v1, v2) \ + (___gc_buffer[2]=(long)&(v1), ___gc_buffer[3]=(long)&(v2), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 2)) + +#define S48_GC_PROTECT_3(v1, v2, v3) \ + (___gc_buffer[2]=(long)&(v1), \ + ___gc_buffer[3]=(long)&(v2), \ + ___gc_buffer[4]=(long)&(v3), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 3)) + +#define S48_GC_PROTECT_4(v1, v2, v3, v4) \ + (___gc_buffer[2]=(long)&(v1), \ + ___gc_buffer[3]=(long)&(v2), \ + ___gc_buffer[4]=(long)&(v3), \ + ___gc_buffer[5]=(long)&(v4), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 4)) + +#define S48_GC_PROTECT_5(v1, v2, v3, v4, v5) \ + (___gc_buffer[2]=(long)&(v1), \ + ___gc_buffer[3]=(long)&(v2), \ + ___gc_buffer[4]=(long)&(v3), \ + ___gc_buffer[5]=(long)&(v4), \ + ___gc_buffer[6]=(long)&(v5), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 5)) + +#define S48_GC_PROTECT_6(v1, v2, v3, v4, v5, v6) \ + (___gc_buffer[2]=(long)&(v1), \ + ___gc_buffer[3]=(long)&(v2), \ + ___gc_buffer[4]=(long)&(v3), \ + ___gc_buffer[5]=(long)&(v4), \ + ___gc_buffer[6]=(long)&(v5), \ + ___gc_buffer[7]=(long)&(v6), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 6)) + +#define S48_GC_PROTECT_7(v1, v2, v3, v4, v5, v6, v7) \ + (___gc_buffer[2]=(long)&(v1), \ + ___gc_buffer[3]=(long)&(v2), \ + ___gc_buffer[4]=(long)&(v3), \ + ___gc_buffer[5]=(long)&(v4), \ + ___gc_buffer[6]=(long)&(v5), \ + ___gc_buffer[7]=(long)&(v6), \ + ___gc_buffer[8]=(long)&(v7), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 7)) + +#define S48_GC_PROTECT_8(v1, v2, v3, v4, v5, v6, v7, v8) \ + (___gc_buffer[2]=(long)&(v1), \ + ___gc_buffer[3]=(long)&(v2), \ + ___gc_buffer[4]=(long)&(v3), \ + ___gc_buffer[5]=(long)&(v4), \ + ___gc_buffer[6]=(long)&(v5), \ + ___gc_buffer[7]=(long)&(v6), \ + ___gc_buffer[8]=(long)&(v7), \ + ___gc_buffer[9]=(long)&(v8), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 8)) + +#define S48_GC_PROTECT_9(v1, v2, v3, v4, v5, v6, v7, v8, v9) \ + (___gc_buffer[2]=(long)&(v1), \ + ___gc_buffer[3]=(long)&(v2), \ + ___gc_buffer[4]=(long)&(v3), \ + ___gc_buffer[5]=(long)&(v4), \ + ___gc_buffer[6]=(long)&(v5), \ + ___gc_buffer[7]=(long)&(v6), \ + ___gc_buffer[8]=(long)&(v7), \ + ___gc_buffer[9]=(long)&(v8), \ + ___gc_buffer[10]=(long)&(v9), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 9)) + +#define S48_GC_PROTECT_10(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \ + (___gc_buffer[2]=(long)&(v1), \ + ___gc_buffer[3]=(long)&(v2), \ + ___gc_buffer[4]=(long)&(v3), \ + ___gc_buffer[5]=(long)&(v4), \ + ___gc_buffer[6]=(long)&(v5), \ + ___gc_buffer[7]=(long)&(v6), \ + ___gc_buffer[8]=(long)&(v7), \ + ___gc_buffer[9]=(long)&(v8), \ + ___gc_buffer[10]=(long)&(v9), \ + ___gc_buffer[11]=(long)&(v10), \ + s48_push_gc_rootsB((char *) ___gc_buffer, 10)) + +#define S48_GC_UNPROTECT() \ + do { if (! s48_pop_gc_rootsB()) \ + s48_raise_scheme_exception( S48_EXCEPTION_GC_PROTECTION_MISMATCH, 0); \ + } while(0) + +#define S48_GC_PROTECT_GLOBAL(v) (s48_register_gc_rootB((char *)&(v))) + +/* Exceptions */ + +extern void s48_raise_scheme_exception(long type, long nargs, ...); +extern void s48_raise_argtype_error(s48_value value); +extern void s48_raise_argnumber_error(s48_value value, + s48_value min, s48_value max); +extern void s48_raise_range_error(s48_value value, + s48_value min, s48_value max); +extern void s48_raise_closed_channel_error(); +extern void s48_raise_os_error(int the_errno); +extern void s48_raise_string_os_error(char *reason); +extern void s48_raise_out_of_memory_error(); + +/* Type checking */ + +#define S48_CHECK_PAIR(v) do { if (!S48_PAIR_P(v)) s48_raise_argtype_error(v); } while (0) +#define S48_CHECK_FIXNUM(v) do { if (!S48_FIXNUM_P(v)) s48_raise_argtype_error(v); } while (0) +#define S48_CHECK_STRING(v) do { if (!S48_STRING_P(v)) s48_raise_argtype_error(v); } while (0) +#define S48_CHECK_CHANNEL(v) do { if (!S48_CHANNEL_P(v)) s48_raise_argtype_error(v); } while (0) +#define S48_CHECK_RECORD(v) do { if (!S48_RECORD_P(v)) s48_raise_argtype_error(v); } while (0) +#define S48_CHECK_VALUE(v) do { if (!S48_BYTE_VECTOR_P(v)) s48_raise_argtype_error(v); } while (0) +#define S48_CHECK_EXPORT_BINDING(v) do { if (!S48_EXPORT_BINDING_P(v)) s48_raise_argtype_error(v); } while (0) + +#define S48_VALUE_P(v) (S48_BYTE_VECTOR_P(v)) + +extern void s48_check_record_type(s48_value record, s48_value type_binding); + +#define S48_SHARED_BINDING_CHECK(binding) \ + do { if (S48_UNSPECIFIC == S48_SHARED_BINDING_REF(binding)) \ + s48_raise_scheme_exception(S48_EXCEPTION_UNBOUND_EXTERNAL_NAME, 1, \ + S48_SHARED_BINDING_NAME(binding)); \ + } while(0) diff --git a/c/scheme48heap.c b/c/scheme48heap.c new file mode 100644 index 0000000..9870e16 --- /dev/null +++ b/c/scheme48heap.c @@ -0,0 +1,2357 @@ +#include +#include "prescheme.h" +#include "scheme48vm.h" + +static long copy_weak_pointer(long, char *, char **); +static void clean_weak_pointers(void); +static char gc_recordP(long); +static void note_undumpableB(long); +void s48_write_barrier(long, char *, long); +long s48_heap_size(void); +long s48_preallocate_space(long); +void s48_register_static_areas(long, char **, long*, long, char **, long*); +long s48_gc_count(void); +void s48_end_collection(void); +long s48_undumpable_records(long*); +long s48_startup_procedure(void); +long s48_initial_symbols(void); +long s48_initial_imported_bindings(void); +long s48_initial_exported_bindings(void); +long s48_resumer_records(void); +void s48_set_image_valuesB(long, long, long, long, long); +void s48_initialization_completeB(void); +void s48_initialize_heap(char *, long); +char s48_availableP(long); +char s48_image_writing_okayP(void); +char * s48_allocate_space(long, long, long); +long s48_available(void); +char s48_extantP(long); +long s48_check_image_header(char*); +long s48_find_all(long); +long s48_read_image(void); +long s48_find_all_records(long); +long s48_trace_locationsB(char *, char *); +void s48_do_gc(void); +long s48_trace_stob_contentsB(long); +void s48_begin_collection(void); +long s48_trace_value(long); +long s48_write_image(long, FILE *); +void s48_initializing_gc_root(void); +static char * Soldspace_hpS; +static char * Soldspace_limitS; +static char * Snewspace_beginS; +static char * Snewspace_endS; +static char * Soldspace_beginS; +static char * Soldspace_endS; +static char * *Spure_areasS; +static char * *Simpure_areasS; +static long *Spure_sizesS; +static long *Simpure_sizesS; +static long Spure_area_countS; +static long Simpure_area_countS; +static long Sfinding_typeS; +static long Sgc_countS; +static char Swriting_imagePS; +static long Sundumpable_recordsS; +static long Sundumpable_countS; +static char * Sfrom_beginS; +static char * Sfrom_endS; +static char * Sweak_pointer_hpS; +static char * Sweak_pointer_limitS; +static long SstatusS; +static char SeofPS; +static FILE * Simage_portS; +static char * Sold_beginS; +static char * Sold_hpS; +static long Sstartup_procedureS; +static long SsymbolsS; +static long Simported_bindingsS; +static long Sexported_bindingsS; +static long Sresumer_recordsS; +static char SinitializingPS; +static long Hthe_record_type9260; +char * s48_ShpS; +char * s48_SlimitS; + +static long copy_weak_pointer(long weak_1X, char * frontier_2X, char * *TT0) +{ + char * arg0K0; + long new_7X; + char * frontier_6X; + char * new_frontier_5X; + char * old_4X; + char * x_3X; + { x_3X = Sweak_pointer_hpS; + if ((x_3X == NULL)) { + goto L2423;} + else { + if (((Sweak_pointer_hpS) < (Sweak_pointer_limitS))) { + arg0K0 = frontier_2X; + goto L2428;} + else { + goto L2423;}}} + L2423: { + old_4X = Sweak_pointer_hpS; + new_frontier_5X = frontier_2X + 1024; + Sweak_pointer_hpS = frontier_2X; + Sweak_pointer_limitS = new_frontier_5X; + *((long *) (Sweak_pointer_hpS)) = 261190; + *((long *) ((Sweak_pointer_hpS) + 8)) = (((long) old_4X)); + arg0K0 = new_frontier_5X; + goto L2428;} + L2428: { + frontier_6X = arg0K0; + new_7X = 3 + (((long) ((Sweak_pointer_hpS) + 4))); + *((long *) ((Sweak_pointer_hpS) + 4)) = (*((long *) (((char *) (-3 + weak_1X))))); + Sweak_pointer_hpS = ((Sweak_pointer_hpS) + 8); + *((long *) ((((char *) (-3 + weak_1X))) + -4)) = new_7X; + *TT0 = frontier_6X; + return new_7X;} +} +static void clean_weak_pointers(void) +{ + char * arg0K1; + char * arg0K0; + long arg1K0; + long x2_17X; + long h_16X; + char * a_15X; + long value_14X; + char * scan_13X; + char * next_12X; + char * end_11X; + char * start_10X; + char * end_9X; + char * x_8X; + { if (((Sweak_pointer_hpS) == NULL)) { + return;} + else { + x_8X = Sweak_pointer_limitS; + end_9X = Sweak_pointer_hpS; + arg0K0 = (x_8X + -1024); + arg0K1 = end_9X; + goto L3994;}} + L3994: { + start_10X = arg0K0; + end_11X = arg0K1; + next_12X = ((char *) (*((long *) (start_10X + 8)))); + arg0K0 = start_10X; + goto L2635;} + L2635: { + scan_13X = arg0K0; + if ((scan_13X < end_11X)) { + *((long *) scan_13X) = 1074; + value_14X = *((long *) (scan_13X + 4)); + if ((3 == (3 & value_14X))) { + a_15X = ((char *) (-3 + value_14X)); + if ((a_15X < (Sfrom_beginS))) { + goto L2681;} + else { + if ((a_15X < (Sfrom_endS))) { + if ((3 == (3 & value_14X))) { + h_16X = *((long *) ((((char *) (-3 + value_14X))) + -4)); + if ((3 == (3 & h_16X))) { + arg1K0 = h_16X; + goto L2676;} + else { + arg1K0 = 1; + goto L2676;}} + else { + goto L2681;}} + else { + goto L2681;}}} + else { + goto L2681;}} + else { + if ((next_12X == NULL)) { + if ((end_9X < (Sweak_pointer_limitS))) { + *((long *) end_9X) = (70 + ((((-4 & ((Sweak_pointer_limitS) - (end_9X + 4))))<<8))); + return;} + else { + return;}} + else { + arg0K0 = (next_12X + -1024); + arg0K1 = next_12X; + goto L3994;}}} + L2681: { + arg0K0 = (scan_13X + 8); + goto L2635;} + L2676: { + x2_17X = arg1K0; + *((long *) (scan_13X + 4)) = x2_17X; + goto L2681;} +} +static char gc_recordP(long x_18X) +{ + long header_19X; + { if ((3 == (3 & x_18X))) { + header_19X = *((long *) ((((char *) (-3 + x_18X))) + -4)); + if ((3 == (3 & header_19X))) { + if ((3 == (3 & header_19X))) { + return (8 == (31 & ((((*((long *) ((((char *) (-3 + header_19X))) + -4))))>>2))));} + else { + return 0;}} + else { + if ((3 == (3 & x_18X))) { + return (8 == (31 & ((((*((long *) ((((char *) (-3 + x_18X))) + -4))))>>2))));} + else { + return 0;}}} + else { + return 0;}} +} +static void note_undumpableB(long thing_20X) +{ + long arg1K0; + char * temp_34X; + char * temp_33X; + char * temp_32X; + char * temp_31X; + long x_30X; + char * new_29X; + long b_28X; + char v_27X; + char * temp_26X; + char * temp_25X; + char * temp_24X; + char * temp_23X; + long list_22X; + long list_21X; + { if ((1000 < (Sundumpable_countS))) { + return;} + else { + list_21X = Sundumpable_recordsS; + arg1K0 = list_21X; + goto L6367;}} + L6367: { + list_22X = arg1K0; + if ((25 == list_22X)) { + Sundumpable_countS = (1 + (Sundumpable_countS)); + temp_23X = s48_SlimitS; + s48_SlimitS = (Soldspace_limitS); + Soldspace_limitS = temp_23X; + temp_24X = s48_ShpS; + s48_ShpS = (Soldspace_hpS); + Soldspace_hpS = temp_24X; + temp_25X = Snewspace_beginS; + Snewspace_beginS = (Soldspace_beginS); + Soldspace_beginS = temp_25X; + temp_26X = Snewspace_endS; + Snewspace_endS = (Soldspace_endS); + Soldspace_endS = temp_26X; + v_27X = ((s48_ShpS) + 12) < (s48_SlimitS); + if (v_27X) { + b_28X = Sundumpable_recordsS; + new_29X = s48_ShpS; + s48_ShpS = ((s48_ShpS) + 12); + *((long *) new_29X) = 2050; + x_30X = 3 + (((long) (new_29X + 4))); + *((long *) (((char *) (-3 + x_30X)))) = thing_20X; + *((long *) ((((char *) (-3 + x_30X))) + 4)) = b_28X; + Sundumpable_recordsS = x_30X; + goto L6289;} + else { + goto L6289;}} + else { + if (((*((long *) (((char *) (-3 + list_22X))))) == thing_20X)) { + return;} + else { + arg1K0 = (*((long *) ((((char *) (-3 + list_22X))) + 4))); + goto L6367;}}} + L6289: { + temp_31X = s48_SlimitS; + s48_SlimitS = (Soldspace_limitS); + Soldspace_limitS = temp_31X; + temp_32X = s48_ShpS; + s48_ShpS = (Soldspace_hpS); + Soldspace_hpS = temp_32X; + temp_33X = Snewspace_beginS; + Snewspace_beginS = (Soldspace_beginS); + Soldspace_beginS = temp_33X; + temp_34X = Snewspace_endS; + Snewspace_endS = (Soldspace_endS); + Soldspace_endS = temp_34X; + return;} +} +void s48_write_barrier(long stob_35X, char * address_36X, long value_37X) +{ + + { return;} +} +long s48_heap_size(void) +{ + + { return ((Snewspace_endS) - (Snewspace_beginS));} +} +long s48_preallocate_space(long cells_38X) +{ + + { return 0;} +} +void s48_register_static_areas(long pure_count_39X, char * *pure_areas_40X, long *pure_sizes_41X, long impure_count_42X, char * *impure_areas_43X, long *impure_sizes_44X) +{ + + { Spure_area_countS = pure_count_39X; + Spure_areasS = pure_areas_40X; + Spure_sizesS = pure_sizes_41X; + Simpure_area_countS = impure_count_42X; + Simpure_areasS = impure_areas_43X; + Simpure_sizesS = impure_sizes_44X; + return;} +} +long s48_gc_count(void) +{ + + { return (Sgc_countS);} +} +void s48_end_collection(void) +{ + + { Sgc_countS = (1 + (Sgc_countS)); + return;} +} +long s48_undumpable_records(long *TT0) +{ + + { *TT0 = (Sundumpable_countS); + return (Sundumpable_recordsS);} +} +long s48_startup_procedure(void) +{ + + { return (Sstartup_procedureS);} +} +long s48_initial_symbols(void) +{ + + { return (SsymbolsS);} +} +long s48_initial_imported_bindings(void) +{ + + { return (Simported_bindingsS);} +} +long s48_initial_exported_bindings(void) +{ + + { return (Sexported_bindingsS);} +} +long s48_resumer_records(void) +{ + + { return (Sresumer_recordsS);} +} +void s48_set_image_valuesB(long startup_proc_45X, long symbols_46X, long imports_47X, long exports_48X, long records_49X) +{ + + { Sstartup_procedureS = startup_proc_45X; + SsymbolsS = symbols_46X; + Simported_bindingsS = imports_47X; + Sexported_bindingsS = exports_48X; + Sresumer_recordsS = records_49X; + return;} +} +void s48_initialization_completeB(void) +{ + + { SinitializingPS = 0; + return;} +} +void s48_initialize_heap(char * start_50X, long size_51X) +{ + long semisize_53X; + long cells_52X; + { cells_52X = size_51X / 2; + semisize_53X = ((cells_52X)<<2); + Snewspace_beginS = start_50X; + Snewspace_endS = ((Snewspace_beginS) + semisize_53X); + s48_ShpS = (Snewspace_beginS); + s48_SlimitS = (Snewspace_endS); + Soldspace_beginS = (Snewspace_endS); + Soldspace_endS = ((Soldspace_beginS) + semisize_53X); + Soldspace_hpS = (Soldspace_beginS); + Soldspace_limitS = (Soldspace_endS); + return;} +} +char s48_availableP(long cells_54X) +{ + + { return (((s48_ShpS) + (((cells_54X)<<2))) < (s48_SlimitS));} +} +char s48_image_writing_okayP(void) +{ + + { if ((0 < (Simpure_area_countS))) { + return 0;} + else { + if ((0 < (Spure_area_countS))) { + return 0;} + else { + return 1;}}} +} +char * s48_allocate_space(long type_55X, long len_56X, long key_57X) +{ + char * new_58X; + { new_58X = s48_ShpS; + s48_ShpS = ((s48_ShpS) + (-4 & (3 + len_56X))); + return new_58X;} +} +long s48_available(void) +{ + + { return (((((s48_SlimitS) - (s48_ShpS)))>>2));} +} +char s48_extantP(long thing_59X) +{ + char * a_60X; + { if ((3 == (3 & thing_59X))) { + if ((3 == (3 & thing_59X))) { + a_60X = ((char *) (-3 + thing_59X)); + if ((a_60X < (Sfrom_beginS))) { + return 1;} + else { + if ((a_60X < (Sfrom_endS))) { + return (3 == (3 & (*((long *) ((((char *) (-3 + thing_59X))) + -4)))));} + else { + return 1;}}} + else { + return 1;}} + else { + return 1;}} +} +long s48_check_image_header(char *filename_61X) +{ + long arg1K0; + long arg1K2; + long arg1K1; + char arg2K1; + char arg2K0; + long status_122X; + char eofP_121X; + long status_120X; + long status_119X; + long status_118X; + long status_117X; + long status_116X; + char eofP_115X; + char ch_114X; + long v_113X; + long status_112X; + char eofP_111X; + long thing_110X; + long v_109X; + long status_108X; + char eofP_107X; + long thing_106X; + long v_105X; + long status_104X; + char eofP_103X; + long thing_102X; + long v_101X; + long status_100X; + char eofP_99X; + long thing_98X; + long v_97X; + long status_96X; + char eofP_95X; + long thing_94X; + long cells_93X; + long status_92X; + char eofP_91X; + long thing_90X; + long cells_89X; + long status_88X; + char eofP_87X; + char thing_86X; + long status_85X; + char eofP_84X; + long thing_83X; + long old_bytes_per_cell_82X; + long status_81X; + char eofP_80X; + long status_79X; + char eofP_78X; + char ch_77X; + long i_76X; + long status_75X; + char eofP_74X; + long thing_73X; + char same_versionP_72X; + long status_71X; + char eofP_70X; + long status_69X; + char eofP_68X; + char ch_67X; + long status_66X; + char eofP_65X; + char ch_64X; + long status_63X; + FILE * port_62X; + { port_62X = ps_open_input_file(filename_61X, &status_63X); + if ((status_63X == NO_ERRORS)) { + SstatusS = NO_ERRORS; + SeofPS = 0; + if ((SeofPS)) { + goto L2893;} + else { + goto L3626;}} + else { + ps_write_string("Can't open heap image file", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + ps_write_string((ps_error_string(status_63X)), (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + return -1;}} + L2893: { + if ((SeofPS)) { + goto L2926;} + else { + goto L3590;}} + L3626: { + PS_READ_CHAR(port_62X, ch_64X, eofP_65X, status_66X) + if (eofP_65X) { + arg2K0 = eofP_65X; + arg1K1 = status_66X; + goto L2871;} + else { + if ((status_66X == NO_ERRORS)) { + if ((12 == ch_64X)) { + arg2K0 = 0; + arg1K1 = status_66X; + goto L2871;} + else { + goto L3626;}} + else { + arg2K0 = eofP_65X; + arg1K1 = status_66X; + goto L2871;}}} + L2926: { + if ((SeofPS)) { + arg2K0 = 0; + goto L2959;} + else { + arg1K0 = 0; + goto L3566;}} + L3590: { + PS_READ_CHAR(port_62X, ch_67X, eofP_68X, status_69X) + if (eofP_68X) { + arg2K0 = eofP_68X; + arg1K1 = status_69X; + goto L2904;} + else { + if ((status_69X == NO_ERRORS)) { + if ((10 == ch_67X)) { + arg2K0 = 0; + arg1K1 = status_69X; + goto L2904;} + else { + goto L3590;}} + else { + arg2K0 = eofP_68X; + arg1K1 = status_69X; + goto L2904;}}} + L2871: { + eofP_70X = arg2K0; + status_71X = arg1K1; + if (eofP_70X) { + SeofPS = 1; + goto L2893;} + else { + if (((SstatusS) == NO_ERRORS)) { + goto L2893;} + else { + SeofPS = 1; + SstatusS = status_71X; + goto L2893;}}} + L2959: { + same_versionP_72X = arg2K0; + if ((SeofPS)) { + arg1K0 = -1; + goto L2994;} + else { + PS_READ_INTEGER(port_62X, thing_73X, eofP_74X, status_75X) + if (eofP_74X) { + SeofPS = 1; + arg1K0 = -1; + goto L2994;} + else { + if (((SstatusS) == NO_ERRORS)) { + arg1K0 = thing_73X; + goto L2994;} + else { + SeofPS = 1; + SstatusS = status_75X; + arg1K0 = -1; + goto L2994;}}}} + L3566: { + i_76X = arg1K0; + PS_READ_CHAR(port_62X, ch_77X, eofP_78X, status_79X) + if (eofP_78X) { + arg2K0 = 0; + arg2K1 = eofP_78X; + arg1K2 = status_79X; + goto L2937;} + else { + if ((status_79X == NO_ERRORS)) { + if ((i_76X == (strlen((char *) "Vanilla 20")))) { + arg2K0 = (10 == ch_77X); + arg2K1 = 0; + arg1K2 = status_79X; + goto L2937;} + else { + if ((ch_77X == (*("Vanilla 20" + i_76X)))) { + arg1K0 = (1 + i_76X); + goto L3566;} + else { + arg2K0 = 0; + arg2K1 = 0; + arg1K2 = status_79X; + goto L2937;}}} + else { + arg2K0 = 0; + arg2K1 = eofP_78X; + arg1K2 = status_79X; + goto L2937;}}} + L2904: { + eofP_80X = arg2K0; + status_81X = arg1K1; + if (eofP_80X) { + SeofPS = 1; + goto L2926;} + else { + if (((SstatusS) == NO_ERRORS)) { + goto L2926;} + else { + SeofPS = 1; + SstatusS = status_81X; + goto L2926;}}} + L2994: { + old_bytes_per_cell_82X = arg1K0; + if ((SeofPS)) { + arg1K0 = -1; + goto L3029;} + else { + PS_READ_INTEGER(port_62X, thing_83X, eofP_84X, status_85X) + if (eofP_84X) { + SeofPS = 1; + arg1K0 = -1; + goto L3029;} + else { + if (((SstatusS) == NO_ERRORS)) { + arg1K0 = thing_83X; + goto L3029;} + else { + SeofPS = 1; + SstatusS = status_85X; + arg1K0 = -1; + goto L3029;}}}} + L2937: { + thing_86X = arg2K0; + eofP_87X = arg2K1; + status_88X = arg1K2; + if (eofP_87X) { + SeofPS = 1; + arg2K0 = 0; + goto L2959;} + else { + if (((SstatusS) == NO_ERRORS)) { + arg2K0 = thing_86X; + goto L2959;} + else { + SeofPS = 1; + SstatusS = status_88X; + arg2K0 = 0; + goto L2959;}}} + L3029: { + cells_89X = arg1K0; + Sold_beginS = (((char *) (((cells_89X)<<2)))); + if ((SeofPS)) { + arg1K0 = -1; + goto L3067;} + else { + PS_READ_INTEGER(port_62X, thing_90X, eofP_91X, status_92X) + if (eofP_91X) { + SeofPS = 1; + arg1K0 = -1; + goto L3067;} + else { + if (((SstatusS) == NO_ERRORS)) { + arg1K0 = thing_90X; + goto L3067;} + else { + SeofPS = 1; + SstatusS = status_92X; + arg1K0 = -1; + goto L3067;}}}} + L3067: { + cells_93X = arg1K0; + Sold_hpS = (((char *) (((cells_93X)<<2)))); + if ((SeofPS)) { + arg1K0 = -1; + goto L3105;} + else { + PS_READ_INTEGER(port_62X, thing_94X, eofP_95X, status_96X) + if (eofP_95X) { + SeofPS = 1; + arg1K0 = -1; + goto L3105;} + else { + if (((SstatusS) == NO_ERRORS)) { + arg1K0 = thing_94X; + goto L3105;} + else { + SeofPS = 1; + SstatusS = status_96X; + arg1K0 = -1; + goto L3105;}}}} + L3105: { + v_97X = arg1K0; + SsymbolsS = v_97X; + if ((SeofPS)) { + arg1K0 = -1; + goto L3141;} + else { + PS_READ_INTEGER(port_62X, thing_98X, eofP_99X, status_100X) + if (eofP_99X) { + SeofPS = 1; + arg1K0 = -1; + goto L3141;} + else { + if (((SstatusS) == NO_ERRORS)) { + arg1K0 = thing_98X; + goto L3141;} + else { + SeofPS = 1; + SstatusS = status_100X; + arg1K0 = -1; + goto L3141;}}}} + L3141: { + v_101X = arg1K0; + Simported_bindingsS = v_101X; + if ((SeofPS)) { + arg1K0 = -1; + goto L3177;} + else { + PS_READ_INTEGER(port_62X, thing_102X, eofP_103X, status_104X) + if (eofP_103X) { + SeofPS = 1; + arg1K0 = -1; + goto L3177;} + else { + if (((SstatusS) == NO_ERRORS)) { + arg1K0 = thing_102X; + goto L3177;} + else { + SeofPS = 1; + SstatusS = status_104X; + arg1K0 = -1; + goto L3177;}}}} + L3177: { + v_105X = arg1K0; + Sexported_bindingsS = v_105X; + if ((SeofPS)) { + arg1K0 = -1; + goto L3213;} + else { + PS_READ_INTEGER(port_62X, thing_106X, eofP_107X, status_108X) + if (eofP_107X) { + SeofPS = 1; + arg1K0 = -1; + goto L3213;} + else { + if (((SstatusS) == NO_ERRORS)) { + arg1K0 = thing_106X; + goto L3213;} + else { + SeofPS = 1; + SstatusS = status_108X; + arg1K0 = -1; + goto L3213;}}}} + L3213: { + v_109X = arg1K0; + Sresumer_recordsS = v_109X; + if ((SeofPS)) { + arg1K0 = -1; + goto L3249;} + else { + PS_READ_INTEGER(port_62X, thing_110X, eofP_111X, status_112X) + if (eofP_111X) { + SeofPS = 1; + arg1K0 = -1; + goto L3249;} + else { + if (((SstatusS) == NO_ERRORS)) { + arg1K0 = thing_110X; + goto L3249;} + else { + SeofPS = 1; + SstatusS = status_112X; + arg1K0 = -1; + goto L3249;}}}} + L3249: { + v_113X = arg1K0; + Sstartup_procedureS = v_113X; + Simage_portS = port_62X; + if ((SeofPS)) { + goto L3288;} + else { + goto L3497;}} + L3288: { + if (((SstatusS) == NO_ERRORS)) { + if ((SeofPS)) { + SstatusS = EDOM; + ps_write_string("Premature EOF when reading image file", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + if (((SstatusS) == NO_ERRORS)) { + goto L3369;} + else { + ps_write_string((ps_error_string((SstatusS))), (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + goto L3369;}} + else { + if (same_versionP_72X) { + if ((4 == old_bytes_per_cell_82X)) { + return ((Sold_hpS) - (Sold_beginS));} + else { + ps_write_string("Incompatible bytes-per-cell in image", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + if (((SstatusS) == NO_ERRORS)) { + goto L3429;} + else { + ps_write_string((ps_error_string((SstatusS))), (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + goto L3429;}}} + else { + ps_write_string("Format of image is incompatible with this version of system", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + if (((SstatusS) == NO_ERRORS)) { + goto L3399;} + else { + ps_write_string((ps_error_string((SstatusS))), (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + goto L3399;}}}} + else { + ps_write_string("Error reading from image file", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + if (((SstatusS) == NO_ERRORS)) { + goto L3344;} + else { + ps_write_string((ps_error_string((SstatusS))), (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + goto L3344;}}} + L3497: { + PS_READ_CHAR(port_62X, ch_114X, eofP_115X, status_116X) + if (eofP_115X) { + arg2K0 = eofP_115X; + arg1K1 = status_116X; + goto L3266;} + else { + if ((status_116X == NO_ERRORS)) { + if ((12 == ch_114X)) { + arg2K0 = 0; + arg1K1 = status_116X; + goto L3266;} + else { + goto L3497;}} + else { + arg2K0 = eofP_115X; + arg1K1 = status_116X; + goto L3266;}}} + L3369: { + status_117X = ps_close(port_62X); + if ((status_117X == NO_ERRORS)) { + return -1;} + else { + ps_write_string("Error closing image file", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + return -1;}} + L3429: { + status_118X = ps_close(port_62X); + if ((status_118X == NO_ERRORS)) { + return -1;} + else { + ps_write_string("Error closing image file", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + return -1;}} + L3399: { + status_119X = ps_close(port_62X); + if ((status_119X == NO_ERRORS)) { + return -1;} + else { + ps_write_string("Error closing image file", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + return -1;}} + L3344: { + status_120X = ps_close(port_62X); + if ((status_120X == NO_ERRORS)) { + return -1;} + else { + ps_write_string("Error closing image file", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + return -1;}} + L3266: { + eofP_121X = arg2K0; + status_122X = arg1K1; + if (eofP_121X) { + SeofPS = 1; + goto L3288;} + else { + if (((SstatusS) == NO_ERRORS)) { + goto L3288;} + else { + SeofPS = 1; + SstatusS = status_122X; + goto L3288;}}} +} +long s48_find_all(long type_123X) +{ + char * arg0K0; + long arg1K0; + char * merged_arg0K1; + char * merged_arg0K0; + + int Hproc923124_return_tag; + char Hproc9231240_return_value; + char * start_125X; + char * end_126X; + char * next_142X; + long d_141X; + char * addr_140X; + long type_139X; + char v_138X; + long i_137X; + long count_136X; + long *sizes_135X; + char * *areas_134X; + char v_133X; + long i_132X; + long count_131X; + long *sizes_130X; + char * *areas_129X; + char v_128X; + char * start_hp_127X; + { Sfinding_typeS = type_123X; + start_hp_127X = s48_ShpS; + *((long *) (s48_ShpS)) = 0; + s48_ShpS = ((s48_ShpS) + 4); + merged_arg0K0 = (Snewspace_beginS); + merged_arg0K1 = start_hp_127X; + Hproc923124_return_tag = 0; + goto Hproc923124; + Hproc923124_return_0: + v_128X = Hproc9231240_return_value; + if (v_128X) { + if ((0 < (Simpure_area_countS))) { + areas_129X = Simpure_areasS; + sizes_130X = Simpure_sizesS; + count_131X = Simpure_area_countS; + arg1K0 = 0; + goto L5577;} + else { + goto L5517;}} + else { + goto L5535;}} + L5577: { + i_132X = arg1K0; + if ((i_132X < count_131X)) { + merged_arg0K0 = (*(areas_129X + i_132X)); + merged_arg0K1 = ((*(areas_129X + i_132X)) + (*(sizes_130X + i_132X))); + Hproc923124_return_tag = 1; + goto Hproc923124; + Hproc923124_return_1: + v_133X = Hproc9231240_return_value; + if (v_133X) { + arg1K0 = (1 + i_132X); + goto L5577;} + else { + goto L5535;}} + else { + goto L5517;}} + L5517: { + if ((0 < (Spure_area_countS))) { + areas_134X = Spure_areasS; + sizes_135X = Spure_sizesS; + count_136X = Spure_area_countS; + arg1K0 = 0; + goto L5598;} + else { + goto L5524;}} + L5535: { + s48_ShpS = start_hp_127X; + return 1;} + L5598: { + i_137X = arg1K0; + if ((i_137X < count_136X)) { + merged_arg0K0 = (*(areas_134X + i_137X)); + merged_arg0K1 = ((*(areas_134X + i_137X)) + (*(sizes_135X + i_137X))); + Hproc923124_return_tag = 2; + goto Hproc923124; + Hproc923124_return_2: + v_138X = Hproc9231240_return_value; + if (v_138X) { + arg1K0 = (1 + i_137X); + goto L5598;} + else { + goto L5535;}} + else { + goto L5524;}} + L5524: { + *((long *) start_hp_127X) = (10 + (((((s48_ShpS) - (start_hp_127X + 4)))<<8))); + return (3 + (((long) (start_hp_127X + 4))));} + Hproc923124: { + start_125X = merged_arg0K0; + end_126X = merged_arg0K1;{ + type_139X = Sfinding_typeS; + arg0K0 = start_125X; + goto L4503;} + L4503: { + addr_140X = arg0K0; + if ((addr_140X < end_126X)) { + d_141X = *((long *) addr_140X); + next_142X = addr_140X + (4 + (-4 & (3 + ((long)(((unsigned long)d_141X)>>8))))); + if ((2 == (3 & d_141X))) { + if ((type_139X == (31 & (((d_141X)>>2))))) { + if ((((s48_ShpS) + 16) < (s48_SlimitS))) { + *((long *) (s48_ShpS)) = (3 + (((long) (addr_140X + 4)))); + s48_ShpS = ((s48_ShpS) + 4); + arg0K0 = next_142X; + goto L4503;} + else { + Hproc9231240_return_value = 0; + goto Hproc923124_return;}} + else { + arg0K0 = next_142X; + goto L4503;}} + else { + ps_write_string("heap is in an inconsistent state.", (stderr)); + Hproc9231240_return_value = 0; + goto Hproc923124_return;}} + else { + Hproc9231240_return_value = 1; + goto Hproc923124_return;}} + Hproc923124_return: + switch (Hproc923124_return_tag) { + case 0: goto Hproc923124_return_0; + case 1: goto Hproc923124_return_1; + default: goto Hproc923124_return_2; + }} + +} +long s48_read_image(void) +{ + FILE * arg4K0; + char *arg3K1; + char arg2K1; + char arg2K0; + char * arg0K0; + long arg1K0; + long v_192X; + long descriptor_191X; + long v_190X; + long descriptor_189X; + long v_188X; + long descriptor_187X; + long v_186X; + long d_185X; + long descriptor_184X; + long v_183X; + long descriptor_182X; + char * ptr_181X; + long descriptor_180X; + long status_179X; + long status_178X; + long status_177X; + long status_176X; + char * next_175X; + long value_174X; + long x_173X; + long x_172X; + char * ptr_171X; + long status_170X; + long status_169X; + long status_168X; + char eofP_167X; + char v_166X; + char *string_165X; + char okayP_164X; + long status_163X; + long status_162X; + long status_161X; + char eofP_160X; + long got_159X; + long need_158X; + char * start_157X; + char * new_limit_156X; + char * new_hp_155X; + long delta_154X; + char reverseP_153X; + FILE * port_152X; + long x_151X; + long x_150X; + char * addr_149X; + char *string_148X; + char okayP_147X; + long status_146X; + char eofP_145X; + long got_144X; + FILE * port_143X; + { port_143X = Simage_portS; + got_144X = ps_read_block(port_143X, ((char *) (s48_ShpS)), 4, &eofP_145X, &status_146X); + if ((status_146X == NO_ERRORS)) { + if (eofP_145X) { + arg2K0 = 0; + arg3K1 = "Premature EOF when reading image file"; + goto L6079;} + else { + if ((got_144X < 4)) { + arg2K0 = 0; + arg3K1 = "Read returned too few bytes"; + goto L6079;} + else { + arg2K0 = 1; + arg3K1 = ""; + goto L6079;}}} + else { + SstatusS = status_146X; + arg2K0 = 0; + arg3K1 = "Error reading from image file"; + goto L6079;}} + L6079: { + okayP_147X = arg2K0; + string_148X = arg3K1; + if (okayP_147X) { + if ((1 == (*((long *) (s48_ShpS))))) { + arg4K0 = port_143X; + arg2K1 = 0; + goto L5092;} + else { + addr_149X = s48_ShpS; + x_150X = *((unsigned char *) addr_149X); + *((unsigned char *) addr_149X) = (*((unsigned char *) (addr_149X + 3))); + *((unsigned char *) (addr_149X + 3)) = x_150X; + x_151X = *((unsigned char *) (addr_149X + 1)); + *((unsigned char *) (addr_149X + 1)) = (*((unsigned char *) (addr_149X + 2))); + *((unsigned char *) (addr_149X + 2)) = x_151X; + if ((1 == (*((long *) (s48_ShpS))))) { + arg4K0 = port_143X; + arg2K1 = 1; + goto L5092;} + else { + ps_write_string("Unable to correct byte order", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + if (((SstatusS) == NO_ERRORS)) { + goto L6187;} + else { + ps_write_string((ps_error_string((SstatusS))), (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + goto L6187;}}}} + else { + ps_write_string(string_148X, (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + if (((SstatusS) == NO_ERRORS)) { + goto L6135;} + else { + ps_write_string((ps_error_string((SstatusS))), (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + goto L6135;}}} + L5092: { + port_152X = arg4K0; + reverseP_153X = arg2K1; + delta_154X = (s48_ShpS) - (Sold_beginS); + new_hp_155X = (Sold_hpS) + delta_154X; + new_limit_156X = Snewspace_endS; + start_157X = s48_ShpS; + if ((new_hp_155X < new_limit_156X)) { + need_158X = (Sold_hpS) - (Sold_beginS); + got_159X = ps_read_block(port_152X, ((char *) (s48_ShpS)), need_158X, &eofP_160X, &status_161X); + if ((status_161X == NO_ERRORS)) { + if (eofP_160X) { + arg2K0 = 0; + arg3K1 = "Premature EOF when reading image file"; + goto L5114;} + else { + if ((got_159X < need_158X)) { + arg2K0 = 0; + arg3K1 = "Read returned too few bytes"; + goto L5114;} + else { + arg2K0 = 1; + arg3K1 = ""; + goto L5114;}}} + else { + SstatusS = status_161X; + arg2K0 = 0; + arg3K1 = "Error reading from image file"; + goto L5114;}} + else { + ps_write_string("Heap not big enough to restore this image", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + if (((SstatusS) == NO_ERRORS)) { + goto L5210;} + else { + ps_write_string((ps_error_string((SstatusS))), (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + goto L5210;}}} + L6187: { + status_162X = ps_close(port_143X); + if ((status_162X == NO_ERRORS)) { + return -1;} + else { + ps_write_string("Error closing image file", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + return -1;}} + L6135: { + status_163X = ps_close(port_143X); + if ((status_163X == NO_ERRORS)) { + return -1;} + else { + ps_write_string("Error closing image file", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + return -1;}} + L5114: { + okayP_164X = arg2K0; + string_165X = arg3K1; + PS_READ_CHAR(port_152X, v_166X, eofP_167X, status_168X) + if (okayP_164X) { + if ((status_168X == NO_ERRORS)) { + if (eofP_167X) { + status_169X = ps_close(port_152X); + if ((status_169X == NO_ERRORS)) { + if (reverseP_153X) { + ps_write_string("Correcting byte order of resumed image.", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + arg0K0 = start_157X; + goto L4309;} + else { + goto L5152;}} + else { + ps_write_string("Error closing image file", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + if (((SstatusS) == NO_ERRORS)) { + goto L5345;} + else { + ps_write_string((ps_error_string((SstatusS))), (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + goto L5345;}}} + else { + ps_write_string("Image file has extraneous data after image", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + if (((SstatusS) == NO_ERRORS)) { + goto L5315;} + else { + ps_write_string((ps_error_string((SstatusS))), (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + goto L5315;}}} + else { + ps_write_string("Error reading from image file", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + if (((SstatusS) == NO_ERRORS)) { + goto L5285;} + else { + ps_write_string((ps_error_string((SstatusS))), (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + goto L5285;}}} + else { + ps_write_string(string_165X, (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + if (((SstatusS) == NO_ERRORS)) { + goto L5255;} + else { + ps_write_string((ps_error_string((SstatusS))), (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + goto L5255;}}} + L5210: { + status_170X = ps_close(port_152X); + if ((status_170X == NO_ERRORS)) { + return -1;} + else { + ps_write_string("Error closing image file", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + return -1;}} + L4309: { + ptr_171X = arg0K0; + if ((ptr_171X < new_hp_155X)) { + x_172X = *((unsigned char *) ptr_171X); + *((unsigned char *) ptr_171X) = (*((unsigned char *) (ptr_171X + 3))); + *((unsigned char *) (ptr_171X + 3)) = x_172X; + x_173X = *((unsigned char *) (ptr_171X + 1)); + *((unsigned char *) (ptr_171X + 1)) = (*((unsigned char *) (ptr_171X + 2))); + *((unsigned char *) (ptr_171X + 2)) = x_173X; + value_174X = *((long *) ptr_171X); + next_175X = ptr_171X + 4; + if ((2 == (3 & value_174X))) { + if (((31 & (((value_174X)>>2))) < 16)) { + arg0K0 = next_175X; + goto L4309;} + else { + arg0K0 = (next_175X + (-4 & (3 + ((long)(((unsigned long)value_174X)>>8))))); + goto L4309;}} + else { + arg0K0 = next_175X; + goto L4309;}} + else { + goto L5152;}} + L5152: { + if ((0 == delta_154X)) { + goto L5162;} + else { + arg0K0 = start_157X; + goto L4408;}} + L5345: { + status_176X = ps_close(port_152X); + if ((status_176X == NO_ERRORS)) { + return -1;} + else { + ps_write_string("Error closing image file", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + return -1;}} + L5315: { + status_177X = ps_close(port_152X); + if ((status_177X == NO_ERRORS)) { + return -1;} + else { + ps_write_string("Error closing image file", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + return -1;}} + L5285: { + status_178X = ps_close(port_152X); + if ((status_178X == NO_ERRORS)) { + return -1;} + else { + ps_write_string("Error closing image file", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + return -1;}} + L5255: { + status_179X = ps_close(port_152X); + if ((status_179X == NO_ERRORS)) { + return -1;} + else { + ps_write_string("Error closing image file", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + return -1;}} + L5162: { + s48_ShpS = new_hp_155X; + descriptor_180X = Sstartup_procedureS; + if ((3 == (3 & descriptor_180X))) { + arg1K0 = (3 + (((long) ((((char *) (-3 + descriptor_180X))) + delta_154X)))); + goto L5166;} + else { + arg1K0 = descriptor_180X; + goto L5166;}} + L4408: { + ptr_181X = arg0K0; + if ((ptr_181X < new_hp_155X)) { + descriptor_182X = *((long *) ptr_181X); + if ((3 == (3 & descriptor_182X))) { + arg1K0 = (3 + (((long) ((((char *) (-3 + descriptor_182X))) + delta_154X)))); + goto L4413;} + else { + arg1K0 = descriptor_182X; + goto L4413;}} + else { + goto L5162;}} + L5166: { + v_183X = arg1K0; + Sstartup_procedureS = v_183X; + descriptor_184X = SsymbolsS; + if ((3 == (3 & descriptor_184X))) { + arg1K0 = (3 + (((long) ((((char *) (-3 + descriptor_184X))) + delta_154X)))); + goto L5171;} + else { + arg1K0 = descriptor_184X; + goto L5171;}} + L4413: { + d_185X = arg1K0; + *((long *) ptr_181X) = d_185X; + if ((2 == (3 & d_185X))) { + if (((31 & (((d_185X)>>2))) < 16)) { + goto L4427;} + else { + arg0K0 = (ptr_181X + (4 + (-4 & (3 + ((long)(((unsigned long)d_185X)>>8)))))); + goto L4408;}} + else { + goto L4427;}} + L5171: { + v_186X = arg1K0; + SsymbolsS = v_186X; + descriptor_187X = Simported_bindingsS; + if ((3 == (3 & descriptor_187X))) { + arg1K0 = (3 + (((long) ((((char *) (-3 + descriptor_187X))) + delta_154X)))); + goto L5176;} + else { + arg1K0 = descriptor_187X; + goto L5176;}} + L4427: { + arg0K0 = (ptr_181X + 4); + goto L4408;} + L5176: { + v_188X = arg1K0; + Simported_bindingsS = v_188X; + descriptor_189X = Sexported_bindingsS; + if ((3 == (3 & descriptor_189X))) { + arg1K0 = (3 + (((long) ((((char *) (-3 + descriptor_189X))) + delta_154X)))); + goto L5181;} + else { + arg1K0 = descriptor_189X; + goto L5181;}} + L5181: { + v_190X = arg1K0; + Sexported_bindingsS = v_190X; + descriptor_191X = Sresumer_recordsS; + if ((3 == (3 & descriptor_191X))) { + arg1K0 = (3 + (((long) ((((char *) (-3 + descriptor_191X))) + delta_154X)))); + goto L5186;} + else { + arg1K0 = descriptor_191X; + goto L5186;}} + L5186: { + v_192X = arg1K0; + Sresumer_recordsS = v_192X; + return 0;} +} +long s48_find_all_records(long record_type_193X) +{ + char * arg0K0; + long arg1K0; + char * merged_arg0K1; + char * merged_arg0K0; + + int Hproc969194_return_tag; + char Hproc9691940_return_value; + char * start_195X; + char * end_196X; + long obj_213X; + char * next_212X; + long d_211X; + char * addr_210X; + long type_209X; + char v_208X; + long i_207X; + long count_206X; + long *sizes_205X; + char * *areas_204X; + char v_203X; + long i_202X; + long count_201X; + long *sizes_200X; + char * *areas_199X; + char v_198X; + char * start_hp_197X; + { Hthe_record_type9260 = record_type_193X; + Sfinding_typeS = 8; + start_hp_197X = s48_ShpS; + *((long *) (s48_ShpS)) = 0; + s48_ShpS = ((s48_ShpS) + 4); + merged_arg0K0 = (Snewspace_beginS); + merged_arg0K1 = start_hp_197X; + Hproc969194_return_tag = 0; + goto Hproc969194; + Hproc969194_return_0: + v_198X = Hproc9691940_return_value; + if (v_198X) { + if ((0 < (Simpure_area_countS))) { + areas_199X = Simpure_areasS; + sizes_200X = Simpure_sizesS; + count_201X = Simpure_area_countS; + arg1K0 = 0; + goto L5742;} + else { + goto L5682;}} + else { + goto L5700;}} + L5742: { + i_202X = arg1K0; + if ((i_202X < count_201X)) { + merged_arg0K0 = (*(areas_199X + i_202X)); + merged_arg0K1 = ((*(areas_199X + i_202X)) + (*(sizes_200X + i_202X))); + Hproc969194_return_tag = 1; + goto Hproc969194; + Hproc969194_return_1: + v_203X = Hproc9691940_return_value; + if (v_203X) { + arg1K0 = (1 + i_202X); + goto L5742;} + else { + goto L5700;}} + else { + goto L5682;}} + L5682: { + if ((0 < (Spure_area_countS))) { + areas_204X = Spure_areasS; + sizes_205X = Spure_sizesS; + count_206X = Spure_area_countS; + arg1K0 = 0; + goto L5763;} + else { + goto L5689;}} + L5700: { + s48_ShpS = start_hp_197X; + return 1;} + L5763: { + i_207X = arg1K0; + if ((i_207X < count_206X)) { + merged_arg0K0 = (*(areas_204X + i_207X)); + merged_arg0K1 = ((*(areas_204X + i_207X)) + (*(sizes_205X + i_207X))); + Hproc969194_return_tag = 2; + goto Hproc969194; + Hproc969194_return_2: + v_208X = Hproc9691940_return_value; + if (v_208X) { + arg1K0 = (1 + i_207X); + goto L5763;} + else { + goto L5700;}} + else { + goto L5689;}} + L5689: { + *((long *) start_hp_197X) = (10 + (((((s48_ShpS) - (start_hp_197X + 4)))<<8))); + return (3 + (((long) (start_hp_197X + 4))));} + Hproc969194: { + start_195X = merged_arg0K0; + end_196X = merged_arg0K1;{ + type_209X = Sfinding_typeS; + arg0K0 = start_195X; + goto L4670;} + L4670: { + addr_210X = arg0K0; + if ((addr_210X < end_196X)) { + d_211X = *((long *) addr_210X); + next_212X = addr_210X + (4 + (-4 & (3 + ((long)(((unsigned long)d_211X)>>8))))); + if ((2 == (3 & d_211X))) { + if ((type_209X == (31 & (((d_211X)>>2))))) { + obj_213X = 3 + (((long) (addr_210X + 4))); + if (((*((long *) (((char *) (-3 + obj_213X))))) == (Hthe_record_type9260))) { + if ((((s48_ShpS) + 16) < (s48_SlimitS))) { + *((long *) (s48_ShpS)) = obj_213X; + s48_ShpS = ((s48_ShpS) + 4); + arg0K0 = next_212X; + goto L4670;} + else { + Hproc9691940_return_value = 0; + goto Hproc969194_return;}} + else { + arg0K0 = next_212X; + goto L4670;}} + else { + arg0K0 = next_212X; + goto L4670;}} + else { + ps_write_string("heap is in an inconsistent state.", (stderr)); + Hproc9691940_return_value = 0; + goto Hproc969194_return;}} + else { + Hproc9691940_return_value = 1; + goto Hproc969194_return;}} + Hproc969194_return: + switch (Hproc969194_return_tag) { + case 0: goto Hproc969194_return_0; + case 1: goto Hproc969194_return_1; + default: goto Hproc969194_return_2; + }} + +} +long s48_trace_locationsB(char * start_214X, char * end_215X) +{ + char * arg0K0; + char * arg0K1; + long arg1K0; + long new_232X; + char * data_addr_231X; + char * frontier_230X; + long new_thing_229X; + char * frontier_228X; + long new_thing_227X; + char * a_226X; + long descriptor_225X; + long h_224X; + char * a_223X; + char v_222X; + long type_221X; + char v_220X; + char * next_219X; + long thing_218X; + char * frontier_217X; + char * addr_216X; + { arg0K0 = start_214X; + arg0K1 = (s48_ShpS); + goto L6441;} + L6441: { + addr_216X = arg0K0; + frontier_217X = arg0K1; + if ((addr_216X < end_215X)) { + thing_218X = *((long *) addr_216X); + next_219X = addr_216X + 4; + if ((2 == (3 & thing_218X))) { + if ((2 == (3 & thing_218X))) { + if (((31 & (((thing_218X)>>2))) < 16)) { + arg0K0 = next_219X; + arg0K1 = frontier_217X; + goto L6441;} + else { + arg0K0 = (next_219X + (-4 & (3 + ((long)(((unsigned long)thing_218X)>>8))))); + arg0K1 = frontier_217X; + goto L6441;}} + else { + arg0K0 = next_219X; + arg0K1 = frontier_217X; + goto L6441;}} + else { + if ((Swriting_imagePS)) { + v_220X = gc_recordP(thing_218X); + if (v_220X) { + type_221X = *((long *) (((char *) (-3 + thing_218X)))); + v_222X = gc_recordP(type_221X); + if (v_222X) { + if ((1 == (*((long *) ((((char *) (-3 + type_221X))) + 4))))) { + note_undumpableB(thing_218X); + *((long *) addr_216X) = (*((long *) ((((char *) (-3 + thing_218X))) + 4))); + arg0K0 = addr_216X; + arg0K1 = frontier_217X; + goto L6441;} + else { + goto L6475;}} + else { + goto L6475;}} + else { + goto L6475;}} + else { + goto L6475;}}} + else { + s48_ShpS = frontier_217X; + return 0;}} + L6475: { + if ((3 == (3 & thing_218X))) { + a_223X = ((char *) (-3 + thing_218X)); + if ((a_223X < (Sfrom_beginS))) { + arg0K0 = next_219X; + arg0K1 = frontier_217X; + goto L6441;} + else { + if ((a_223X < (Sfrom_endS))) { + h_224X = *((long *) ((((char *) (-3 + thing_218X))) + -4)); + if ((3 == (3 & h_224X))) { + arg1K0 = h_224X; + arg0K1 = frontier_217X; + goto L6482;} + else { + if ((1074 == h_224X)) { + descriptor_225X = *((long *) (((char *) (-3 + thing_218X)))); + if ((3 == (3 & descriptor_225X))) { + a_226X = ((char *) (-3 + descriptor_225X)); + if ((a_226X < (Sfrom_beginS))) { + goto L7062;} + else { + if ((a_226X < (Sfrom_endS))) { + new_thing_227X = copy_weak_pointer(thing_218X, frontier_217X, &frontier_228X); + arg1K0 = new_thing_227X; + arg0K1 = frontier_228X; + goto L6482;} + else { + goto L7062;}}} + else { + goto L7062;}} + else { + goto L7062;}}} + else { + arg0K0 = next_219X; + arg0K1 = frontier_217X; + goto L6441;}}} + else { + arg0K0 = next_219X; + arg0K1 = frontier_217X; + goto L6441;}} + L6482: { + new_thing_229X = arg1K0; + frontier_230X = arg0K1; + *((long *) addr_216X) = new_thing_229X; + arg0K0 = next_219X; + arg0K1 = frontier_230X; + goto L6441;} + L7062: { + *((long *) frontier_217X) = h_224X; + data_addr_231X = frontier_217X + 4; + new_232X = 3 + (((long) data_addr_231X)); + *((long *) ((((char *) (-3 + thing_218X))) + -4)) = new_232X; + memcpy((void *)data_addr_231X, (void *)(((char *) (-3 + thing_218X))),((long)(((unsigned long)h_224X)>>8))); + arg1K0 = new_232X; + arg0K1 = (data_addr_231X + (-4 & (3 + ((long)(((unsigned long)h_224X)>>8))))); + goto L6482;} +} +void s48_do_gc(void) +{ + char * arg0K0; + char * end_234X; + char * start_233X; + { arg0K0 = (Snewspace_beginS); + goto L6697;} + L6697: { + start_233X = arg0K0; + end_234X = s48_ShpS; + s48_trace_locationsB(start_233X, end_234X); + if (((((((s48_SlimitS) - (s48_ShpS)))>>2)) < 0)) { + ps_error("GC error: ran out of space in new heap", 0); + return clean_weak_pointers();} + else { + if ((end_234X < (s48_ShpS))) { + arg0K0 = end_234X; + goto L6697;} + else { + return clean_weak_pointers();}}} +} +long s48_trace_stob_contentsB(long stob_235X) +{ + char * start_237X; + long h_236X; + { h_236X = *((long *) ((((char *) (-3 + stob_235X))) + -4)); + start_237X = ((char *) (-3 + stob_235X)); + return s48_trace_locationsB(start_237X, (start_237X + (-4 & (3 + ((long)(((unsigned long)h_236X)>>8))))));} +} +void s48_begin_collection(void) +{ + long arg1K0; + long i_245X; + long count_244X; + long *sizes_243X; + char * *areas_242X; + char * temp_241X; + char * temp_240X; + char * temp_239X; + char * temp_238X; + { Sfrom_beginS = (Snewspace_beginS); + Sfrom_endS = (Snewspace_endS); + temp_238X = s48_SlimitS; + s48_SlimitS = (Soldspace_limitS); + Soldspace_limitS = temp_238X; + temp_239X = s48_ShpS; + s48_ShpS = (Soldspace_hpS); + Soldspace_hpS = temp_239X; + temp_240X = Snewspace_beginS; + Snewspace_beginS = (Soldspace_beginS); + Soldspace_beginS = temp_240X; + temp_241X = Snewspace_endS; + Snewspace_endS = (Soldspace_endS); + Soldspace_endS = temp_241X; + s48_ShpS = (Snewspace_beginS); + Sweak_pointer_hpS = NULL; + Swriting_imagePS = 0; + if ((0 < (Simpure_area_countS))) { + areas_242X = Simpure_areasS; + sizes_243X = Simpure_sizesS; + count_244X = Simpure_area_countS; + arg1K0 = 0; + goto L6812;} + else { + return;}} + L6812: { + i_245X = arg1K0; + if ((i_245X < count_244X)) { + s48_trace_locationsB((*(areas_242X + i_245X)), ((*(areas_242X + i_245X)) + (*(sizes_243X + i_245X)))); + arg1K0 = (1 + i_245X); + goto L6812;} + else { + return;}} +} +long s48_trace_value(long stob_246X) +{ + char * arg0K1; + long arg1K0; + long new_261X; + char * data_addr_260X; + char * new_hp_259X; + long new_thing_258X; + char * new_hp_257X; + long new_thing_256X; + char * a_255X; + long descriptor_254X; + long h_253X; + char * frontier_252X; + char * a_251X; + char v_250X; + long type_249X; + char v_248X; + long stob_247X; + { arg1K0 = stob_247X; + goto L7253;} + L7253: { + stob_247X = arg1K0; + if ((Swriting_imagePS)) { + v_248X = gc_recordP(stob_246X); + if (v_248X) { + type_249X = *((long *) (((char *) (-3 + stob_246X)))); + v_250X = gc_recordP(type_249X); + if (v_250X) { + if ((1 == (*((long *) ((((char *) (-3 + type_249X))) + 4))))) { + note_undumpableB(stob_246X); + arg1K0 = (*((long *) ((((char *) (-3 + stob_246X))) + 4))); + goto L7253;} + else { + goto L6840;}} + else { + goto L6840;}} + else { + goto L6840;}} + else { + goto L6840;}} + L6840: { + if ((3 == (3 & stob_246X))) { + a_251X = ((char *) (-3 + stob_246X)); + if ((a_251X < (Sfrom_beginS))) { + return stob_246X;} + else { + if ((a_251X < (Sfrom_endS))) { + frontier_252X = s48_ShpS; + h_253X = *((long *) ((((char *) (-3 + stob_246X))) + -4)); + if ((3 == (3 & h_253X))) { + arg1K0 = h_253X; + arg0K1 = frontier_252X; + goto L6862;} + else { + if ((1074 == h_253X)) { + descriptor_254X = *((long *) (((char *) (-3 + stob_246X)))); + if ((3 == (3 & descriptor_254X))) { + a_255X = ((char *) (-3 + descriptor_254X)); + if ((a_255X < (Sfrom_beginS))) { + goto L4193;} + else { + if ((a_255X < (Sfrom_endS))) { + new_thing_256X = copy_weak_pointer(stob_246X, frontier_252X, &new_hp_257X); + arg1K0 = new_thing_256X; + arg0K1 = new_hp_257X; + goto L6862;} + else { + goto L4193;}}} + else { + goto L4193;}} + else { + goto L4193;}}} + else { + return stob_246X;}}} + else { + return stob_246X;}} + L6862: { + new_thing_258X = arg1K0; + new_hp_259X = arg0K1; + s48_ShpS = new_hp_259X; + return new_thing_258X;} + L4193: { + *((long *) frontier_252X) = h_253X; + data_addr_260X = frontier_252X + 4; + new_261X = 3 + (((long) data_addr_260X)); + *((long *) ((((char *) (-3 + stob_246X))) + -4)) = new_261X; + memcpy((void *)data_addr_260X, (void *)(((char *) (-3 + stob_246X))),((long)(((unsigned long)h_253X)>>8))); + arg1K0 = new_261X; + arg0K1 = (data_addr_260X + (-4 & (3 + ((long)(((unsigned long)h_253X)>>8))))); + goto L6862;} +} +long s48_write_image(long resume_proc_262X, FILE * port_263X) +{ + char * arg0K0; + long arg1K0; + char * merged_arg0K1; + char * merged_arg0K0; + + int abort_collection_return_tag; + int Hproc967264_return_tag; + char Hproc9672640_return_value; + char * start_265X; + char * end_266X; + long h_320X; + long h_319X; + long d_318X; + char * addr_317X; + char * temp_316X; + char * temp_315X; + char * temp_314X; + char * temp_313X; + long type_312X; + long obj_311X; + char * next_310X; + long d_309X; + char * addr_308X; + long type_307X; + long status_306X; + long v_305X; + long v_304X; + long v_303X; + long v_302X; + long v_301X; + long v_300X; + long v_299X; + char * v_298X; + long v_297X; + char * v_296X; + long v_295X; + long v_294X; + long v_293X; + long v_292X; + long v_291X; + long imported_bindings_290X; + long resumer_records_289X; + char v_288X; + long i_287X; + long count_286X; + long *sizes_285X; + char * *areas_284X; + char v_283X; + long i_282X; + long count_281X; + long *sizes_280X; + char * *areas_279X; + char v_278X; + char * start_hp_277X; + long symbols_276X; + char * end_275X; + char * start_274X; + long resume_proc_273X; + long exported_bindings_272X; + long v_271X; + char * temp_270X; + char * temp_269X; + char * temp_268X; + char * temp_267X; + { Sfrom_beginS = (Snewspace_beginS); + Sfrom_endS = (Snewspace_endS); + temp_267X = s48_SlimitS; + s48_SlimitS = (Soldspace_limitS); + Soldspace_limitS = temp_267X; + temp_268X = s48_ShpS; + s48_ShpS = (Soldspace_hpS); + Soldspace_hpS = temp_268X; + temp_269X = Snewspace_beginS; + Snewspace_beginS = (Soldspace_beginS); + Soldspace_beginS = temp_269X; + temp_270X = Snewspace_endS; + Snewspace_endS = (Soldspace_endS); + Soldspace_endS = temp_270X; + s48_ShpS = (Snewspace_beginS); + Sweak_pointer_hpS = NULL; + Swriting_imagePS = 1; + Sundumpable_recordsS = 25; + Sundumpable_countS = 0; + v_271X = s48_exported_bindings(); + exported_bindings_272X = s48_trace_value(v_271X); + resume_proc_273X = s48_trace_value(resume_proc_262X); + arg0K0 = (Snewspace_beginS); + goto L6983;} + L6983: { + start_274X = arg0K0; + end_275X = s48_ShpS; + s48_trace_locationsB(start_274X, end_275X); + if (((((((s48_SlimitS) - (s48_ShpS)))>>2)) < 0)) { + ps_error("GC error: ran out of space in new heap", 0); + clean_weak_pointers(); + goto L6952;} + else { + if ((end_275X < (s48_ShpS))) { + arg0K0 = end_275X; + goto L6983;} + else { + clean_weak_pointers(); + goto L6952;}}} + L6952: { + s48_mark_traced_channels_closedB(); + symbols_276X = s48_copy_symbol_table(); + Sfinding_typeS = 8; + start_hp_277X = s48_ShpS; + *((long *) (s48_ShpS)) = 0; + s48_ShpS = ((s48_ShpS) + 4); + merged_arg0K0 = (Snewspace_beginS); + merged_arg0K1 = start_hp_277X; + Hproc967264_return_tag = 0; + goto Hproc967264; + Hproc967264_return_0: + v_278X = Hproc9672640_return_value; + if (v_278X) { + if ((0 < (Simpure_area_countS))) { + areas_279X = Simpure_areasS; + sizes_280X = Simpure_sizesS; + count_281X = Simpure_area_countS; + arg1K0 = 0; + goto L5907;} + else { + goto L5847;}} + else { + goto L5865;}} + L5907: { + i_282X = arg1K0; + if ((i_282X < count_281X)) { + merged_arg0K0 = (*(areas_279X + i_282X)); + merged_arg0K1 = ((*(areas_279X + i_282X)) + (*(sizes_280X + i_282X))); + Hproc967264_return_tag = 1; + goto Hproc967264; + Hproc967264_return_1: + v_283X = Hproc9672640_return_value; + if (v_283X) { + arg1K0 = (1 + i_282X); + goto L5907;} + else { + goto L5865;}} + else { + goto L5847;}} + L5847: { + if ((0 < (Spure_area_countS))) { + areas_284X = Spure_areasS; + sizes_285X = Spure_sizesS; + count_286X = Spure_area_countS; + arg1K0 = 0; + goto L5928;} + else { + goto L5854;}} + L5865: { + s48_ShpS = start_hp_277X; + arg1K0 = 1; + goto L7002;} + L5928: { + i_287X = arg1K0; + if ((i_287X < count_286X)) { + merged_arg0K0 = (*(areas_284X + i_287X)); + merged_arg0K1 = ((*(areas_284X + i_287X)) + (*(sizes_285X + i_287X))); + Hproc967264_return_tag = 2; + goto Hproc967264; + Hproc967264_return_2: + v_288X = Hproc9672640_return_value; + if (v_288X) { + arg1K0 = (1 + i_287X); + goto L5928;} + else { + goto L5865;}} + else { + goto L5854;}} + L5854: { + *((long *) start_hp_277X) = (10 + (((((s48_ShpS) - (start_hp_277X + 4)))<<8))); + arg1K0 = (3 + (((long) (start_hp_277X + 4)))); + goto L7002;} + L7002: { + resumer_records_289X = arg1K0; + imported_bindings_290X = s48_cleaned_imported_bindings(); + if ((1 == resumer_records_289X)) { + abort_collection_return_tag = 0; + goto abort_collection; + abort_collection_return_0: + return ENOMEM;} + else { + SstatusS = NO_ERRORS; + if (((SstatusS) == NO_ERRORS)) { + PS_WRITE_CHAR(10, port_263X, v_291X) + SstatusS = v_291X; + goto L2019;} + else { + goto L2019;}}} + L2019: { + if (((SstatusS) == NO_ERRORS)) { + PS_WRITE_CHAR(12, port_263X, v_292X) + SstatusS = v_292X; + goto L2028;} + else { + goto L2028;}} + L2028: { + if (((SstatusS) == NO_ERRORS)) { + PS_WRITE_CHAR(10, port_263X, v_293X) + SstatusS = v_293X; + goto L2037;} + else { + goto L2037;}} + L2037: { + if (((SstatusS) == NO_ERRORS)) { + SstatusS = (ps_write_string("Vanilla 20", port_263X)); + goto L2044;} + else { + goto L2044;}} + L2044: { + if (((SstatusS) == NO_ERRORS)) { + PS_WRITE_CHAR(10, port_263X, v_294X) + SstatusS = v_294X; + goto L2053;} + else { + goto L2053;}} + L2053: { + if (((SstatusS) == NO_ERRORS)) { + SstatusS = (ps_write_integer(4, port_263X)); + goto L2123;} + else { + goto L2123;}} + L2123: { + if (((SstatusS) == NO_ERRORS)) { + PS_WRITE_CHAR(10, port_263X, v_295X) + SstatusS = v_295X; + goto L2055;} + else { + goto L2055;}} + L2055: { + v_296X = Snewspace_beginS; + if (((SstatusS) == NO_ERRORS)) { + SstatusS = (ps_write_integer(((((((long) v_296X)))>>2)), port_263X)); + goto L2143;} + else { + goto L2143;}} + L2143: { + if (((SstatusS) == NO_ERRORS)) { + PS_WRITE_CHAR(10, port_263X, v_297X) + SstatusS = v_297X; + goto L2061;} + else { + goto L2061;}} + L2061: { + v_298X = s48_ShpS; + if (((SstatusS) == NO_ERRORS)) { + SstatusS = (ps_write_integer(((((((long) v_298X)))>>2)), port_263X)); + goto L2163;} + else { + goto L2163;}} + L2163: { + if (((SstatusS) == NO_ERRORS)) { + PS_WRITE_CHAR(10, port_263X, v_299X) + SstatusS = v_299X; + goto L2067;} + else { + goto L2067;}} + L2067: { + if (((SstatusS) == NO_ERRORS)) { + SstatusS = (ps_write_integer(symbols_276X, port_263X)); + goto L2178;} + else { + goto L2178;}} + L2178: { + if (((SstatusS) == NO_ERRORS)) { + PS_WRITE_CHAR(10, port_263X, v_300X) + SstatusS = v_300X; + goto L2069;} + else { + goto L2069;}} + L2069: { + if (((SstatusS) == NO_ERRORS)) { + SstatusS = (ps_write_integer(imported_bindings_290X, port_263X)); + goto L2193;} + else { + goto L2193;}} + L2193: { + if (((SstatusS) == NO_ERRORS)) { + PS_WRITE_CHAR(10, port_263X, v_301X) + SstatusS = v_301X; + goto L2071;} + else { + goto L2071;}} + L2071: { + if (((SstatusS) == NO_ERRORS)) { + SstatusS = (ps_write_integer(exported_bindings_272X, port_263X)); + goto L2208;} + else { + goto L2208;}} + L2208: { + if (((SstatusS) == NO_ERRORS)) { + PS_WRITE_CHAR(10, port_263X, v_302X) + SstatusS = v_302X; + goto L2073;} + else { + goto L2073;}} + L2073: { + if (((SstatusS) == NO_ERRORS)) { + SstatusS = (ps_write_integer(resumer_records_289X, port_263X)); + goto L2223;} + else { + goto L2223;}} + L2223: { + if (((SstatusS) == NO_ERRORS)) { + PS_WRITE_CHAR(10, port_263X, v_303X) + SstatusS = v_303X; + goto L2075;} + else { + goto L2075;}} + L2075: { + if (((SstatusS) == NO_ERRORS)) { + SstatusS = (ps_write_integer(resume_proc_273X, port_263X)); + goto L2238;} + else { + goto L2238;}} + L2238: { + if (((SstatusS) == NO_ERRORS)) { + PS_WRITE_CHAR(10, port_263X, v_304X) + SstatusS = v_304X; + goto L2077;} + else { + goto L2077;}} + L2077: { + if (((SstatusS) == NO_ERRORS)) { + PS_WRITE_CHAR(12, port_263X, v_305X) + SstatusS = v_305X; + goto L2086;} + else { + goto L2086;}} + L2086: { + *((long *) (s48_ShpS)) = 1; + if (((SstatusS) == NO_ERRORS)) { + SstatusS = (ps_write_block(port_263X, ((char *) (s48_ShpS)), (((s48_ShpS) + 4) - (s48_ShpS)))); + goto L2105;} + else { + goto L2105;}} + L2105: { + if (((SstatusS) == NO_ERRORS)) { + SstatusS = (ps_write_block(port_263X, ((char *) (Snewspace_beginS)), ((s48_ShpS) - (Snewspace_beginS)))); + goto L2118;} + else { + goto L2118;}} + L2118: { + status_306X = SstatusS; + abort_collection_return_tag = 1; + goto abort_collection; + abort_collection_return_1: + return status_306X;} + Hproc967264: { + start_265X = merged_arg0K0; + end_266X = merged_arg0K1;{ + type_307X = Sfinding_typeS; + arg0K0 = start_265X; + goto L4852;} + L4852: { + addr_308X = arg0K0; + if ((addr_308X < end_266X)) { + d_309X = *((long *) addr_308X); + next_310X = addr_308X + (4 + (-4 & (3 + ((long)(((unsigned long)d_309X)>>8))))); + if ((2 == (3 & d_309X))) { + if ((type_307X == (31 & (((d_309X)>>2))))) { + obj_311X = 3 + (((long) (addr_308X + 4))); + type_312X = *((long *) (((char *) (-3 + obj_311X)))); + if ((3 == (3 & type_312X))) { + if ((8 == (31 & ((((*((long *) ((((char *) (-3 + type_312X))) + -4))))>>2))))) { + if ((3 == (3 & (*((long *) ((((char *) (-3 + type_312X))) + 4)))))) { + if ((((s48_ShpS) + 16) < (s48_SlimitS))) { + *((long *) (s48_ShpS)) = obj_311X; + s48_ShpS = ((s48_ShpS) + 4); + arg0K0 = next_310X; + goto L4852;} + else { + Hproc9672640_return_value = 0; + goto Hproc967264_return;}} + else { + arg0K0 = next_310X; + goto L4852;}} + else { + arg0K0 = next_310X; + goto L4852;}} + else { + arg0K0 = next_310X; + goto L4852;}} + else { + arg0K0 = next_310X; + goto L4852;}} + else { + ps_write_string("heap is in an inconsistent state.", (stderr)); + Hproc9672640_return_value = 0; + goto Hproc967264_return;}} + else { + Hproc9672640_return_value = 1; + goto Hproc967264_return;}} + Hproc967264_return: + switch (Hproc967264_return_tag) { + case 0: goto Hproc967264_return_0; + case 1: goto Hproc967264_return_1; + default: goto Hproc967264_return_2; + }} + + abort_collection: { +{ temp_313X = s48_SlimitS; + s48_SlimitS = (Soldspace_limitS); + Soldspace_limitS = temp_313X; + temp_314X = s48_ShpS; + s48_ShpS = (Soldspace_hpS); + Soldspace_hpS = temp_314X; + temp_315X = Snewspace_beginS; + Snewspace_beginS = (Soldspace_beginS); + Soldspace_beginS = temp_315X; + temp_316X = Snewspace_endS; + Snewspace_endS = (Soldspace_endS); + Soldspace_endS = temp_316X; + arg0K0 = (Snewspace_beginS); + goto L4085;} + L4085: { + addr_317X = arg0K0; + if ((addr_317X < (s48_ShpS))) { + d_318X = *((long *) addr_317X); + if ((2 == (3 & d_318X))) { + arg1K0 = d_318X; + goto L4106;} + else { + h_319X = *((long *) ((((char *) (-3 + d_318X))) + -4)); + *((long *) addr_317X) = h_319X; + arg1K0 = h_319X; + goto L4106;}} + else { + goto abort_collection_return;}} + L4106: { + h_320X = arg1K0; + arg0K0 = (addr_317X + (4 + (-4 & (3 + ((long)(((unsigned long)h_320X)>>8)))))); + goto L4085;} + abort_collection_return: + switch (abort_collection_return_tag) { + case 0: goto abort_collection_return_0; + default: goto abort_collection_return_1; + }} + +} +void s48_initializing_gc_root(void) +{ + long v_325X; + long v_324X; + long v_323X; + long v_322X; + long v_321X; + { if ((SinitializingPS)) { + v_321X = s48_trace_value((Sstartup_procedureS)); + Sstartup_procedureS = v_321X; + v_322X = s48_trace_value((SsymbolsS)); + SsymbolsS = v_322X; + v_323X = s48_trace_value((Simported_bindingsS)); + Simported_bindingsS = v_323X; + v_324X = s48_trace_value((Sexported_bindingsS)); + Sexported_bindingsS = v_324X; + v_325X = s48_trace_value((Sresumer_recordsS)); + Sresumer_recordsS = v_325X; + return;} + else { + return;}} +}void +s48_heap_init(void) +{ +Spure_area_countS = 0; +Simpure_area_countS = 0; +Sfinding_typeS = 1; +Sgc_countS = 0; +SstatusS = NO_ERRORS; +SeofPS = 0; +SinitializingPS = 1; +Hthe_record_type9260 = 1; +} diff --git a/c/scheme48heap.h b/c/scheme48heap.h new file mode 100644 index 0000000..7072653 --- /dev/null +++ b/c/scheme48heap.h @@ -0,0 +1,53 @@ +/* + * Externally visible objects defined in scheme48heap.c. + */ + +/* initialize top-level variables */ +extern void s48_heap_init(void); + +/* heap-init interface */ +extern void s48_initialize_heap(long, long); +extern void s48_register_static_areas(unsigned char, long *, long *, + unsigned char, long *, long *); + +/* heap interface */ +extern long s48_available(void); +extern long s48_heap_size(void); +extern long s48_find_all(long); +extern long s48_find_all_records(long); +extern char *s48_ShpS; +extern char *s48_SlimitS; + +/* gc interface */ +extern void s48_begin_collection(void); +extern long s48_trace_value(long); +extern long s48_trace_locationsB(char *, char *); +extern long s48_trace_stob_contentsB(long); +extern void s48_do_gc(void); +extern void s48_end_collection(void); +extern char s48_extantP(long); +extern long s48_gc_count(void); + +/* allocation interface */ +extern char s48_availableP(long); +extern long s48_preallocate_space(long); +extern char *s48_allocate_space(long, long, long); +extern void s48_write_barrier(long, char *, long); + +/* images interface */ +extern char s48_image_writing_okayP(void); +extern long s48_write_image(long, FILE *); +extern long s48_check_image_header(unsigned char *); +extern long s48_read_image(); + +extern long s48_startup_procedure(void); +extern long s48_initial_symbols(void); +extern long s48_initial_imported_bindings(void); +extern long s48_initial_exported_bindings(void); +extern long s48_resumer_records(void); +extern long s48_undumpable_records(long *); + +extern void s48_initialization_completeB(void); +extern void s48_initializing_gc_root(void); + +extern void s48_set_image_valuesB(long, long, long, long); diff --git a/c/scheme48vm-prelude.h b/c/scheme48vm-prelude.h new file mode 100644 index 0000000..ee622b1 --- /dev/null +++ b/c/scheme48vm-prelude.h @@ -0,0 +1,41 @@ +#include +#include + +#include "c-mods.h" +#include "write-barrier.h" + +#define SMALL_MULTIPLY(x,y) ((x) * (y)) + +#define NO_ERRORS 0 /* extension to errno.h */ + +#include "scheme48vm.h" +#include "scheme48heap.h" +#include "event.h" +#include "fd-io.h" + +extern s48_value s48_extended_vm(long, s48_value), + s48_lookup_external_name(char *, char *), + s48_external_call(s48_value proc, + s48_value proc_name, + long nargs, + char *argv); +/* + * The following are hand-written macro versions of procedures + * in scheme48heap.c. + */ + +#define AVAILABLEp(cells) (s48_ShpS + ((cells)<<2) < s48_SlimitS) + +static char *_HHallocate_temp; + +#define ALLOCATE_SPACE(type, len) \ + (_HHallocate_temp = s48_ShpS, \ + s48_ShpS += ((len)+3) & ~3, \ + _HHallocate_temp) + +/* + * We rename these to avoid name clashes. + */ +#define TTreturn_value s48_return_value +#define TTrun_machine(x) s48_run_machine(x) + diff --git a/c/scheme48vm.c b/c/scheme48vm.c new file mode 100644 index 0000000..bf7c338 --- /dev/null +++ b/c/scheme48vm.c @@ -0,0 +1,10513 @@ +#include +#include "prescheme.h" +#include "scheme48vm-prelude.h" + +static char add_more_channels(long); +static void enqueue_channelB(long, long); +static long close_channelB(long); +static void push_continuationB(char *, long); +static long enter_string(char*, long); +static char HcleanerB2160(long); +static void push_exception_continuationB(long, long); +static long make_registered_channel(long, long, long, long, long*); +static long channel_close_error(long, long, long); +static void HtopD8861(void); +static long Hlookup2102(long, long, long); +static long Hlookup2083(long, long, long); +static void HtopD8854(void); +static long collect_saving_temps(long, long, long*); +void s48_set_extension_valueB(long); +void s48_note_event(void); +void s48_set_os_signal(long, long); +long s48_exported_bindings(void); +char * s48_set_gc_roots_baseB(void); +char s48_release_gc_roots_baseB(char *); +void s48_disable_interruptsB(void); +void s48_push_gc_rootsB(char *, long); +void s48_register_gc_rootB(char *); +void s48_stack_setB(long, long); +long s48_stack_ref(long); +void s48_push(long); +long s48_resetup_external_exception(long, long); +void s48_enable_interruptsB(void); +char s48_pop_gc_rootsB(void); +void s48_mark_traced_channels_closedB(void); +long s48_set_channel_os_index(long, long); +long s48_cleaned_imported_bindings(void); +long s48_copy_symbol_table(void); +void s48_setup_external_exception(long, long); +void s48_close_channel(long); +char s48_warn_about_undefined_imported_bindings(void); +void s48_define_exported_binding(char*, long); +long s48_add_channel(long, long, long); +long s48_get_imported_binding(char*); +long s48_allocate_stob(long, long); +void s48_initialize_vm(char *, long); +long s48_restart(long, long); +long s48_call_startup_procedure(char**, long); +static long Snumber_of_channelsS; +static long *Svm_channelsS; +static long Spending_channels_headS; +static long Spending_channels_tailS; +static char * Sstack_beginS; +static char * Sstack_endS; +static char * SstackS; +static char * Sstack_limitS; +static long ScontS; +static long Sbottom_of_stackS; +static char Sstack_warningPS; +static long SenvS; +static long StemplateS; +static char * Scode_pointerS; +static long SvalS; +static long Sexception_handlersS; +static long Sinterrupt_handlersS; +static long Scurrent_threadS; +static long Ssession_dataS; +static long Sfinalizer_alistS; +static long Sfinalize_theseS; +static long Senabled_interruptsS; +static long Spending_interruptsS; +static long Sinterrupted_templateS; +static long Sinterrupt_templateS; +static long Sexception_templateS; +static long Ssaved_pcS; +static long Slosing_opcodeS; +static long Sos_signal_typeS; +static long Sos_signal_argumentS; +static char Sexternal_exceptionPS; +static long Sexternal_exception_nargsS; +static long Simported_bindingsS; +static long Sexported_bindingsS; +static long Sthe_symbol_tableS; +static char * Sexternal_root_stackS; +static char * Sexternal_root_stack_baseS; +static char * Spermanent_external_rootsS; +static void (*Sgc_root_procS)(void); +static void (*Spost_gc_cleanupS)(void); +char s48_Spending_interruptPS; +long s48_Sextension_valueS; +long s48_Scallback_return_stack_blockS; +char s48_Spending_eventsPS; + +static char add_more_channels(long index_5X) +{ + long arg0K0; + long i_11X; + long i_10X; + long *new_vm_channels_9X; + long new_count_8X; + long y_7X; + long x_6X; + { x_6X = 1 + index_5X; + y_7X = 8 + (Snumber_of_channelsS); + if ((x_6X < y_7X)) { + arg0K0 = y_7X; + goto L2366;} + else { + arg0K0 = x_6X; + goto L2366;}} + L2366: { + new_count_8X = arg0K0; + new_vm_channels_9X = (long*)malloc(sizeof(long) * new_count_8X); + if ((NULL == new_vm_channels_9X)) { + return 0;} + else { + arg0K0 = 0; + goto L2378;}} + L2378: { + i_10X = arg0K0; + if ((i_10X == (Snumber_of_channelsS))) { + arg0K0 = (Snumber_of_channelsS); + goto L2393;} + else { + *(new_vm_channels_9X + i_10X) = (*((Svm_channelsS) + i_10X)); + arg0K0 = (1 + i_10X); + goto L2378;}} + L2393: { + i_11X = arg0K0; + if ((i_11X == new_count_8X)) { + free((Svm_channelsS)); + Svm_channelsS = new_vm_channels_9X; + Snumber_of_channelsS = new_count_8X; + return 1;} + else { + *(new_vm_channels_9X + i_11X) = 1; + arg0K0 = (1 + i_11X); + goto L2393;}} +} +static void enqueue_channelB(long index_12X, long status_13X) +{ + char * addr_18X; + long x_17X; + char * addr_16X; + long val_15X; + long channel_14X; + { channel_14X = *((Svm_channelsS) + index_12X); + val_15X = ((status_13X)<<2); + addr_16X = (((char *) (-3 + channel_14X))) + 16; + S48_WRITE_BARRIER(channel_14X, addr_16X, val_15X); + *((long *) addr_16X) = val_15X; + if ((1 == (*((long *) ((((char *) (-3 + channel_14X))) + 12))))) { + if ((1 == (Spending_channels_headS))) { + Spending_channels_headS = channel_14X; + Spending_channels_tailS = channel_14X; + return;} + else { + x_17X = Spending_channels_tailS; + addr_18X = (((char *) (-3 + x_17X))) + 12; + S48_WRITE_BARRIER(x_17X, addr_18X, channel_14X); + *((long *) addr_18X) = channel_14X; + Spending_channels_tailS = channel_14X; + return;}} + else { + return;}} +} +static long close_channelB(long channel_19X) +{ + long arg0K0; + char * addr_27X; + long status_26X; + long v_25X; + long v_24X; + long v_23X; + long v_22X; + long x_21X; + long os_index_20X; + { os_index_20X = (((*((long *) ((((char *) (-3 + channel_19X))) + 8))))>>2); + x_21X = *((long *) ((((char *) (-3 + channel_19X))) + 16)); + if ((5 == x_21X)) { + v_22X = ps_abort_fd_op(os_index_20X); + enqueue_channelB(os_index_20X, v_22X); + goto L7996;} + else { + goto L7996;}} + L7996: { + v_23X = *((long *) (((char *) (-3 + channel_19X)))); + if ((4 == v_23X)) { + goto L8011;} + else { + if ((12 == (*((long *) (((char *) (-3 + channel_19X))))))) { + goto L8011;} + else { + v_24X = ps_close_fd(os_index_20X); + arg0K0 = v_24X; + goto L8018;}}} + L8011: { + v_25X = ps_close_fd(os_index_20X); + arg0K0 = v_25X; + goto L8018;} + L8018: { + status_26X = arg0K0; + *((Svm_channelsS) + os_index_20X) = 1; + addr_27X = ((char *) (-3 + channel_19X)); + S48_WRITE_BARRIER(channel_19X, addr_27X, 0); + *((long *) addr_27X) = 0; + return status_26X;} +} +static void push_continuationB(char * code_pointer_28X, long size_29X) +{ + long cont_32X; + long template_31X; + long pc_30X; + { pc_30X = (((code_pointer_28X - (((char *) (-3 + (*((long *) (((char *) (-3 + (StemplateS)))))))))))<<2); + template_31X = StemplateS; + SstackS = ((SstackS) + -20); + *((long *) ((SstackS) + 4)) = (128 | (4134 + (((size_29X)<<10)))); + cont_32X = 3 + (((long) ((SstackS) + 8))); + *((long *) ((((char *) (-3 + cont_32X))) + 4)) = pc_30X; + *((long *) ((((char *) (-3 + cont_32X))) + 8)) = template_31X; + *((long *) ((((char *) (-3 + cont_32X))) + 12)) = (SenvS); + *((long *) (((char *) (-3 + cont_32X)))) = (ScontS); + ScontS = cont_32X; + return;} +} +static long enter_string(char *string_33X, long key_34X) +{ + long arg0K0; + long i_39X; + long string_38X; + char * addr_37X; + long len_36X; + long z_35X; + { z_35X = strlen((char *) string_33X); + len_36X = 1 + z_35X; + addr_37X = ALLOCATE_SPACE(16, (4 + len_36X)); + *((long *) addr_37X) = (66 + (((len_36X)<<8))); + string_38X = 3 + (((long) (addr_37X + 4))); + *((unsigned char *) ((((char *) (-3 + string_38X))) + z_35X)) = 0; + arg0K0 = 0; + goto L9526;} + L9526: { + i_39X = arg0K0; + if ((i_39X < z_35X)) { + *((unsigned char *) ((((char *) (-3 + string_38X))) + i_39X)) = ((*(string_33X + i_39X))); + arg0K0 = (1 + i_39X); + goto L9526;} + else { + return string_38X;}} +} +static char HcleanerB2160(long table_40X) +{ + long arg0K1; + long arg0K0; + long v_51X; + char * addr_50X; + long new_foo_49X; + char v_48X; + char * addr_47X; + long okay_46X; + long foo_45X; + long foo_44X; + char temp_43X; + long i_42X; + long table_41X; + { table_41X = s48_trace_value(table_40X); + arg0K0 = 0; + goto L9716;} + L9716: { + i_42X = arg0K0; + temp_43X = 1024 == i_42X; + if (temp_43X) { + return temp_43X;} + else { + foo_44X = *((long *) ((((char *) (-3 + table_41X))) + (((i_42X)<<2)))); + arg0K0 = foo_44X; + arg0K1 = 1; + goto L9736;}} + L9736: { + foo_45X = arg0K0; + okay_46X = arg0K1; + if ((1 == foo_45X)) { + addr_47X = (((char *) (-3 + table_41X))) + (((i_42X)<<2)); + S48_WRITE_BARRIER(table_41X, addr_47X, okay_46X); + *((long *) addr_47X) = okay_46X; + arg0K0 = (1 + i_42X); + goto L9716;} + else { + v_48X = s48_extantP(foo_45X); + if (v_48X) { + new_foo_49X = s48_trace_value(foo_45X); + addr_50X = (((char *) (-3 + new_foo_49X))) + 4; + S48_WRITE_BARRIER(new_foo_49X, addr_50X, okay_46X); + *((long *) addr_50X) = okay_46X; + arg0K0 = new_foo_49X; + goto L9741;} + else { + arg0K0 = okay_46X; + goto L9741;}}} + L9741: { + v_51X = arg0K0; + arg0K0 = (*((long *) ((((char *) (-3 + foo_45X))) + 4))); + arg0K1 = v_51X; + goto L9736;} +} +static void push_exception_continuationB(long exception_52X, long instruction_size_53X) +{ + char * arg1K0; + long arg0K1; + long arg0K0; + long v_58X; + long i_57X; + char * p_56X; + long tem_55X; + long opcode_54X; + { opcode_54X = *((unsigned char *) (Scode_pointerS)); + *((long *) (SstackS)) = (((instruction_size_53X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((exception_52X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (StemplateS); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((((Scode_pointerS) - (((char *) (-3 + (*((long *) (((char *) (-3 + (StemplateS)))))))))))<<2)); + SstackS = ((SstackS) + -4); + tem_55X = Sexception_templateS; + StemplateS = tem_55X; + Scode_pointerS = (((char *) (-3 + (*((long *) (((char *) (-3 + tem_55X)))))))); + arg1K0 = ((SstackS) + 4); + arg0K1 = 0; + goto L9949;} + L9949: { + p_56X = arg1K0; + i_57X = arg0K1; + if ((2 == (3 & (*((long *) p_56X))))) { + if ((22 == (*((long *) p_56X)))) { + arg0K0 = (-1 + i_57X); + goto L9890;} + else { + arg0K0 = i_57X; + goto L9890;}} + else { + arg1K0 = (p_56X + 4); + arg0K1 = (1 + i_57X); + goto L9949;}} + L9890: { + v_58X = arg0K0; + push_continuationB((Scode_pointerS), v_58X); + *((long *) (SstackS)) = (((opcode_54X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((exception_52X)<<2)); + SstackS = ((SstackS) + -4); + return;} +} +static long make_registered_channel(long mode_59X, long id_60X, long os_index_61X, long key_62X, long *TT0) +{ + long x_66X; + char * addr_65X; + char x_64X; + char temp_63X; + { temp_63X = os_index_61X < (Snumber_of_channelsS); + if (temp_63X) { + goto L10816;} + else { + x_64X = add_more_channels(os_index_61X); + if (x_64X) { + goto L10816;} + else { + *TT0 = 9; + return 1;}}} + L10816: { + if ((1 == (*((Svm_channelsS) + os_index_61X)))) { + addr_65X = ALLOCATE_SPACE(5, 24); + *((long *) addr_65X) = 5142; + x_66X = 3 + (((long) (addr_65X + 4))); + *((long *) (((char *) (-3 + x_66X)))) = (((mode_59X)<<2)); + *((long *) ((((char *) (-3 + x_66X))) + 4)) = id_60X; + *((long *) ((((char *) (-3 + x_66X))) + 8)) = (((os_index_61X)<<2)); + *((long *) ((((char *) (-3 + x_66X))) + 12)) = 1; + *((long *) ((((char *) (-3 + x_66X))) + 16)) = 1; + *((Svm_channelsS) + os_index_61X) = x_66X; + *TT0 = 9; + return x_66X;} + else { + *TT0 = 11; + return 1;}} +} +static long channel_close_error(long status_67X, long index_68X, long id_69X) +{ + long v_70X; + { ps_write_string("Error: ", (stderr)); + ps_write_string((ps_error_string(status_67X)), (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + ps_write_string(" while closing port ", (stderr)); + if ((3 == (3 & id_69X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + id_69X))) + -4))))>>2))))) { + ps_write_string((((char *)(((char *) (-3 + id_69X))))), (stderr)); + goto L11462;} + else { + goto L11456;}} + else { + goto L11456;}} + L11462: { + PS_WRITE_CHAR(10, (stderr), v_70X) + return v_70X;} + L11456: { + ps_write_integer((((index_68X)>>2)), (stderr)); + goto L11462;} +} +static void HtopD8861(void) +{ + char * arg1K0; + long arg0K1; + long arg0K0; + long env_113X; + long env_112X; + long last_env_111X; + long cont_110X; + long env_109X; + long v_108X; + long env_107X; + long p_106X; + long arg_count_105X; + long i_104X; + char * p_103X; + char * addr_102X; + long val_101X; + long unused_100X; + char * a_99X; + char x_98X; + long pair_97X; + long v_96X; + long v_95X; + long env_94X; + long alist_93X; + long x2_92X; + char * cell_91X; + long i_90X; + long x2_89X; + char * cell_88X; + long v_87X; + long v_86X; + long v_85X; + long v_84X; + long v_83X; + long v_82X; + long v_81X; + long v_80X; + long v_79X; + long v_78X; + long v_77X; + long v_76X; + long v_75X; + long v_74X; + char * frame_73X; + long length_72X; + char * frame_71X; + { arg1K0 = (Sexternal_root_stackS); + goto L6255;} + L6255: { + frame_71X = arg1K0; + if ((frame_71X == NULL)) { + arg1K0 = (Spermanent_external_rootsS); + goto L6281;} + else { + length_72X = *((long *) frame_71X); + arg0K0 = 0; + goto L6263;}} + L6281: { + frame_73X = arg1K0; + if ((frame_73X == NULL)) { + s48_initializing_gc_root(); + v_74X = s48_trace_value((Simported_bindingsS)); + Simported_bindingsS = v_74X; + v_75X = s48_trace_value((Sexported_bindingsS)); + Sexported_bindingsS = v_75X; + Ssaved_pcS = (((((Scode_pointerS) - (((char *) (-3 + (*((long *) (((char *) (-3 + (StemplateS)))))))))))<<2)); + v_76X = s48_trace_value((StemplateS)); + StemplateS = v_76X; + v_77X = s48_trace_value((SvalS)); + SvalS = v_77X; + v_78X = s48_trace_value((Scurrent_threadS)); + Scurrent_threadS = v_78X; + v_79X = s48_trace_value((Ssession_dataS)); + Ssession_dataS = v_79X; + v_80X = s48_trace_value((Sexception_handlersS)); + Sexception_handlersS = v_80X; + v_81X = s48_trace_value((Sexception_templateS)); + Sexception_templateS = v_81X; + v_82X = s48_trace_value((Sinterrupt_handlersS)); + Sinterrupt_handlersS = v_82X; + v_83X = s48_trace_value((Sinterrupt_templateS)); + Sinterrupt_templateS = v_83X; + v_84X = s48_trace_value((Sinterrupted_templateS)); + Sinterrupted_templateS = v_84X; + v_85X = s48_trace_value((Sfinalize_theseS)); + Sfinalize_theseS = v_85X; + v_86X = s48_trace_value((Sos_signal_typeS)); + Sos_signal_typeS = v_86X; + v_87X = s48_trace_value((Sos_signal_argumentS)); + Sos_signal_argumentS = v_87X; + arg0K0 = (Sfinalizer_alistS); + goto L5289;} + else { + cell_88X = ((char *) (*((long *) (frame_73X + 4)))); + x2_89X = s48_trace_value((*((long *) cell_88X))); + *((long *) cell_88X) = x2_89X; + arg1K0 = (((char *) (*((long *) frame_73X)))); + goto L6281;}} + L6263: { + i_90X = arg0K0; + if ((i_90X == length_72X)) { + arg1K0 = (((char *) (*((long *) (frame_71X + 4))))); + goto L6255;} + else { + cell_91X = ((char *) (*((long *) (frame_71X + (8 + (((i_90X)<<2))))))); + x2_92X = s48_trace_value((*((long *) cell_91X))); + *((long *) cell_91X) = x2_92X; + arg0K0 = (1 + i_90X); + goto L6263;}} + L5289: { + alist_93X = arg0K0; + if ((25 == alist_93X)) { + env_94X = s48_trace_value((SenvS)); + SenvS = env_94X; + v_95X = s48_trace_value((Spending_channels_headS)); + Spending_channels_headS = v_95X; + v_96X = s48_trace_value((Spending_channels_tailS)); + Spending_channels_tailS = v_96X; + if ((Sstack_warningPS)) { + arg1K0 = (Sstack_beginS); + goto L5883;} + else { + goto L5916;}} + else { + pair_97X = *((long *) (((char *) (-3 + alist_93X)))); + x_98X = s48_extantP((*((long *) (((char *) (-3 + pair_97X)))))); + if (x_98X) { + goto L5314;} + else { + s48_trace_stob_contentsB((*((long *) (((char *) (-3 + pair_97X)))))); + goto L5314;}}} + L5883: { + a_99X = arg1K0; + if ((252645135 == (*((long *) a_99X)))) { + arg1K0 = (a_99X + 4); + goto L5883;} + else { + unused_100X = (((a_99X - (Sstack_beginS)))>>2); + if ((unused_100X < 30)) { + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + ps_write_string("[Alert: stack overconsumption (", (stderr)); + ps_write_integer(unused_100X, (stderr)); + ps_write_string("); please inform the Scheme 48 implementors]", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + Sstack_warningPS = 0; + goto L5916;} + else { + goto L5916;}}} + L5916: { + arg1K0 = ((SstackS) + 4); + arg0K1 = 0; + goto L5981;} + L5314: { + val_101X = s48_trace_value((*((long *) ((((char *) (-3 + pair_97X))) + 4)))); + addr_102X = (((char *) (-3 + pair_97X))) + 4; + S48_WRITE_BARRIER(pair_97X, addr_102X, val_101X); + *((long *) addr_102X) = val_101X; + arg0K0 = (*((long *) ((((char *) (-3 + alist_93X))) + 4))); + goto L5289;} + L5981: { + p_103X = arg1K0; + i_104X = arg0K1; + if ((2 == (3 & (*((long *) p_103X))))) { + if ((22 == (*((long *) p_103X)))) { + arg0K0 = (-1 + i_104X); + goto L5918;} + else { + arg0K0 = i_104X; + goto L5918;}} + else { + arg1K0 = (p_103X + 4); + arg0K1 = (1 + i_104X); + goto L5981;}} + L5918: { + arg_count_105X = arg0K0; + s48_trace_locationsB(((SstackS) + 4), ((SstackS) + (4 + (((arg_count_105X)<<2))))); + p_106X = SenvS; + if ((3 == (3 & p_106X))) { + if ((p_106X < (((long) (Sstack_beginS))))) { + goto L5934;} + else { + if (((((long) (Sstack_endS))) < p_106X)) { + goto L5934;} + else { + env_107X = SenvS; + arg0K0 = env_107X; + goto L6094;}}} + else { + goto L5934;}} + L5934: { + v_108X = s48_trace_value((SenvS)); + SenvS = v_108X; + goto L5939;} + L6094: { + env_109X = arg0K0; + if ((3 == (3 & env_109X))) { + if ((env_109X < (((long) (Sstack_beginS))))) { + goto L5939;} + else { + if (((((long) (Sstack_endS))) < env_109X)) { + goto L5939;} + else { + s48_trace_stob_contentsB(env_109X); + arg0K0 = (*((long *) (((char *) (-3 + env_109X))))); + goto L6094;}}} + else { + goto L5939;}} + L5939: { + arg0K0 = (ScontS); + arg0K1 = 0; + goto L5944;} + L5944: { + cont_110X = arg0K0; + last_env_111X = arg0K1; + env_112X = *((long *) ((((char *) (-3 + cont_110X))) + 12)); + s48_trace_stob_contentsB(cont_110X); + if ((env_112X == last_env_111X)) { + goto L5962;} + else { + arg0K0 = env_112X; + goto L6049;}} + L5962: { + if ((cont_110X == (Sbottom_of_stackS))) { + return;} + else { + arg0K0 = (*((long *) (((char *) (-3 + cont_110X))))); + arg0K1 = env_112X; + goto L5944;}} + L6049: { + env_113X = arg0K0; + if ((3 == (3 & env_113X))) { + if ((env_113X < (((long) (Sstack_beginS))))) { + goto L5962;} + else { + if (((((long) (Sstack_endS))) < env_113X)) { + goto L5962;} + else { + s48_trace_stob_contentsB(env_113X); + arg0K0 = (*((long *) (((char *) (-3 + env_113X))))); + goto L6049;}}} + else { + goto L5962;}} +} +static long Hlookup2102(long table_114X, long string_115X, long key_116X) +{ + long arg0K1; + long arg0K0; + long len_127X; + long s2_126X; + char * addr_125X; + long x_124X; + char * addr_123X; + long foo_122X; + long bucket_121X; + long index_120X; + long h_119X; + long i_118X; + long n_117X; + { n_117X = -1 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + string_115X))) + -4))))>>8)); + arg0K0 = 0; + arg0K1 = 0; + goto L13083;} + L13083: { + i_118X = arg0K0; + h_119X = arg0K1; + if ((i_118X < n_117X)) { + arg0K0 = (1 + i_118X); + arg0K1 = (h_119X + (((*((unsigned char *) ((((char *) (-3 + string_115X))) + i_118X)))))); + goto L13083;} + else { + index_120X = 1023 & h_119X; + bucket_121X = *((long *) ((((char *) (-3 + table_114X))) + (((index_120X)<<2)))); + arg0K0 = bucket_121X; + goto L13051;}} + L13051: { + foo_122X = arg0K0; + if ((1 == foo_122X)) { + addr_123X = ALLOCATE_SPACE(13, 20); + *((long *) addr_123X) = 4150; + x_124X = 3 + (((long) (addr_123X + 4))); + *((long *) (((char *) (-3 + x_124X)))) = string_115X; + *((long *) ((((char *) (-3 + x_124X))) + 4)) = 1; + *((long *) ((((char *) (-3 + x_124X))) + 8)) = 13; + *((long *) ((((char *) (-3 + x_124X))) + 12)) = bucket_121X; + addr_125X = (((char *) (-3 + table_114X))) + (((index_120X)<<2)); + S48_WRITE_BARRIER(table_114X, addr_125X, x_124X); + *((long *) addr_125X) = x_124X; + return x_124X;} + else { + s2_126X = *((long *) (((char *) (-3 + foo_122X)))); + len_127X = (long)(((unsigned long)(*((long *) ((((char *) (-3 + string_115X))) + -4))))>>8); + if ((len_127X == ((long)(((unsigned long)(*((long *) ((((char *) (-3 + s2_126X))) + -4))))>>8)))) { + if (((!memcmp((void *)(((char *) (-3 + s2_126X))), (void *)(((char *) (-3 + string_115X))),len_127X)))) { + return foo_122X;} + else { + goto L13067;}} + else { + goto L13067;}}} + L13067: { + arg0K0 = (*((long *) ((((char *) (-3 + foo_122X))) + 12))); + goto L13051;} +} +static long Hlookup2083(long table_128X, long string_129X, long key_130X) +{ + long arg0K1; + long arg0K0; + long len_141X; + long s2_140X; + char * addr_139X; + long x_138X; + char * addr_137X; + long foo_136X; + long bucket_135X; + long index_134X; + long h_133X; + long i_132X; + long n_131X; + { n_131X = -1 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + string_129X))) + -4))))>>8)); + arg0K0 = 0; + arg0K1 = 0; + goto L13208;} + L13208: { + i_132X = arg0K0; + h_133X = arg0K1; + if ((i_132X < n_131X)) { + arg0K0 = (1 + i_132X); + arg0K1 = (h_133X + (((*((unsigned char *) ((((char *) (-3 + string_129X))) + i_132X)))))); + goto L13208;} + else { + index_134X = 1023 & h_133X; + bucket_135X = *((long *) ((((char *) (-3 + table_128X))) + (((index_134X)<<2)))); + arg0K0 = bucket_135X; + goto L13176;}} + L13176: { + foo_136X = arg0K0; + if ((1 == foo_136X)) { + addr_137X = ALLOCATE_SPACE(13, 20); + *((long *) addr_137X) = 4150; + x_138X = 3 + (((long) (addr_137X + 4))); + *((long *) (((char *) (-3 + x_138X)))) = string_129X; + *((long *) ((((char *) (-3 + x_138X))) + 4)) = 5; + *((long *) ((((char *) (-3 + x_138X))) + 8)) = 13; + *((long *) ((((char *) (-3 + x_138X))) + 12)) = bucket_135X; + addr_139X = (((char *) (-3 + table_128X))) + (((index_134X)<<2)); + S48_WRITE_BARRIER(table_128X, addr_139X, x_138X); + *((long *) addr_139X) = x_138X; + return x_138X;} + else { + s2_140X = *((long *) (((char *) (-3 + foo_136X)))); + len_141X = (long)(((unsigned long)(*((long *) ((((char *) (-3 + string_129X))) + -4))))>>8); + if ((len_141X == ((long)(((unsigned long)(*((long *) ((((char *) (-3 + s2_140X))) + -4))))>>8)))) { + if (((!memcmp((void *)(((char *) (-3 + s2_140X))), (void *)(((char *) (-3 + string_129X))),len_141X)))) { + return foo_136X;} + else { + goto L13192;}} + else { + goto L13192;}}} + L13192: { + arg0K0 = (*((long *) ((((char *) (-3 + foo_136X))) + 12))); + goto L13176;} +} +static void HtopD8854(void) +{ + long arg0K2; + long arg0K1; + long arg0K0; + long status_168X; + long id_167X; + long new_166X; + long id_165X; + long header_164X; + long channel_163X; + long i_162X; + char * addr_161X; + long l_160X; + long v_159X; + char * addr_158X; + char * addr_157X; + char * addr_156X; + char * addr_155X; + long val_154X; + char tracedP_153X; + long next_152X; + long thing_151X; + long pair_150X; + long alist_149X; + long l2_148X; + long goners_147X; + long okay_146X; + long alist_145X; + long pc_144X; + long tem_143X; + long new_142X; + { new_142X = s48_trace_value((Sthe_symbol_tableS)); + HcleanerB2160(new_142X); + Sthe_symbol_tableS = new_142X; + tem_143X = StemplateS; + pc_144X = Ssaved_pcS; + StemplateS = tem_143X; + Scode_pointerS = ((((char *) (-3 + (*((long *) (((char *) (-3 + tem_143X)))))))) + (((pc_144X)>>2))); + arg0K0 = (Sfinalizer_alistS); + arg0K1 = 25; + arg0K2 = 25; + goto L7722;} + L7722: { + alist_145X = arg0K0; + okay_146X = arg0K1; + goners_147X = arg0K2; + if ((25 == alist_145X)) { + Sfinalizer_alistS = okay_146X; + l2_148X = Sfinalize_theseS; + if ((25 == goners_147X)) { + arg0K0 = l2_148X; + goto L7730;} + else { + arg0K0 = goners_147X; + goto L7783;}} + else { + alist_149X = s48_trace_value(alist_145X); + pair_150X = s48_trace_value((*((long *) (((char *) (-3 + alist_149X)))))); + thing_151X = *((long *) (((char *) (-3 + pair_150X)))); + next_152X = *((long *) ((((char *) (-3 + alist_149X))) + 4)); + tracedP_153X = s48_extantP(thing_151X); + val_154X = s48_trace_value(thing_151X); + addr_155X = ((char *) (-3 + pair_150X)); + S48_WRITE_BARRIER(pair_150X, addr_155X, val_154X); + *((long *) addr_155X) = val_154X; + addr_156X = ((char *) (-3 + alist_149X)); + S48_WRITE_BARRIER(alist_149X, addr_156X, pair_150X); + *((long *) addr_156X) = pair_150X; + if (tracedP_153X) { + addr_157X = (((char *) (-3 + alist_149X))) + 4; + S48_WRITE_BARRIER(alist_149X, addr_157X, okay_146X); + *((long *) addr_157X) = okay_146X; + arg0K0 = next_152X; + arg0K1 = alist_149X; + arg0K2 = goners_147X; + goto L7722;} + else { + addr_158X = (((char *) (-3 + alist_149X))) + 4; + S48_WRITE_BARRIER(alist_149X, addr_158X, goners_147X); + *((long *) addr_158X) = goners_147X; + arg0K0 = next_152X; + arg0K1 = okay_146X; + arg0K2 = alist_149X; + goto L7722;}}} + L7730: { + v_159X = arg0K0; + Sfinalize_theseS = v_159X; + arg0K0 = 0; + goto L12515;} + L7783: { + l_160X = arg0K0; + if ((25 == (*((long *) ((((char *) (-3 + l_160X))) + 4))))) { + addr_161X = (((char *) (-3 + l_160X))) + 4; + S48_WRITE_BARRIER(l_160X, addr_161X, l2_148X); + *((long *) addr_161X) = l2_148X; + arg0K0 = goners_147X; + goto L7730;} + else { + arg0K0 = (*((long *) ((((char *) (-3 + l_160X))) + 4))); + goto L7783;}} + L12515: { + i_162X = arg0K0; + if ((i_162X == (Snumber_of_channelsS))) { + Spending_interruptsS = (4 | (Spending_interruptsS)); + if ((0 == ((Spending_interruptsS) & (Senabled_interruptsS)))) { + s48_Spending_interruptPS = 0; + if ((s48_Spending_eventsPS)) { + s48_Spending_interruptPS = 1; + return;} + else { + return;}} + else { + s48_Spending_interruptPS = 1; + return;}} + else { + channel_163X = *((Svm_channelsS) + i_162X); + if ((1 == channel_163X)) { + goto L12551;} + else { + header_164X = *((long *) ((((char *) (-3 + channel_163X))) + -4)); + if ((3 == (3 & header_164X))) { + arg0K0 = header_164X; + goto L12544;} + else { + if ((0 == (*((long *) (((char *) (-3 + channel_163X))))))) { + arg0K0 = 1; + goto L12544;} + else { + id_165X = *((long *) ((((char *) (-3 + channel_163X))) + 4)); + if ((0 == (3 & id_165X))) { + arg0K0 = id_165X; + goto L12227;} + else { + if ((3 == (3 & (*((long *) ((((char *) (-3 + id_165X))) + -4)))))) { + arg0K0 = (*((long *) ((((char *) (-3 + id_165X))) + -4))); + goto L12227;} + else { + arg0K0 = id_165X; + goto L12227;}}}}}}} + L12551: { + arg0K0 = (1 + i_162X); + goto L12515;} + L12544: { + new_166X = arg0K0; + *((Svm_channelsS) + i_162X) = new_166X; + goto L12551;} + L12227: { + id_167X = arg0K0; + status_168X = close_channelB(channel_163X); + if ((status_168X == NO_ERRORS)) { + goto L12242;} + else { + channel_close_error(status_168X, (*((long *) ((((char *) (-3 + channel_163X))) + 8))), id_167X); + goto L12242;}} + L12242: { + ps_write_string("Channel closed: ", (stderr)); + if ((0 == (3 & id_167X))) { + ps_write_integer((((id_167X)>>2)), (stderr)); + goto L12260;} + else { + ps_write_string((((char *)(((char *) (-3 + id_167X))))), (stderr)); + goto L12260;}} + L12260: { + ps_write_string(" ", (stderr)); + ps_write_integer(((((*((long *) ((((char *) (-3 + channel_163X))) + 8))))>>2)), (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + arg0K0 = 1; + goto L12544;} +} +static long collect_saving_temps(long value0_169X, long value1_170X, long *TT0) +{ + long value0_172X; + long value1_171X; + { s48_begin_collection(); + (*(Sgc_root_procS))(); + value1_171X = s48_trace_value(value1_170X); + value0_172X = s48_trace_value(value0_169X); + s48_do_gc(); + (*(Spost_gc_cleanupS))(); + s48_end_collection(); + *TT0 = value1_171X; + return value0_172X;} +} +void s48_set_extension_valueB(long value_173X) +{ + + { s48_Sextension_valueS = value_173X; + return;} +} +void s48_note_event(void) +{ + + { s48_Spending_eventsPS = 1; + s48_Spending_interruptPS = 1; + return;} +} +void s48_set_os_signal(long type_174X, long argument_175X) +{ + + { Sos_signal_typeS = type_174X; + Sos_signal_argumentS = argument_175X; + return;} +} +long s48_exported_bindings(void) +{ + + { return (Sexported_bindingsS);} +} +char * s48_set_gc_roots_baseB(void) +{ + char * old_base_176X; + { old_base_176X = Sexternal_root_stack_baseS; + Sexternal_root_stack_baseS = (Sexternal_root_stackS); + return old_base_176X;} +} +char s48_release_gc_roots_baseB(char * old_base_177X) +{ + char okayP_178X; + { okayP_178X = (Sexternal_root_stackS) == (Sexternal_root_stack_baseS); + Sexternal_root_stack_baseS = old_base_177X; + return okayP_178X;} +} +void s48_disable_interruptsB(void) +{ + + { s48_Spending_interruptPS = 0; + Senabled_interruptsS = 0; + return;} +} +void s48_push_gc_rootsB(char * frame_179X, long n_180X) +{ + + { *((long *) frame_179X) = n_180X; + *((long *) (frame_179X + 4)) = (((long) (Sexternal_root_stackS))); + Sexternal_root_stackS = frame_179X; + return;} +} +void s48_register_gc_rootB(char * loc_addr_181X) +{ + char * frame_182X; + { frame_182X = (char *)malloc(8); + if ((frame_182X == NULL)) { + ps_error("out of memory registering a global root", 0); + goto L3175;} + else { + goto L3175;}} + L3175: { + *((long *) frame_182X) = (((long) (Spermanent_external_rootsS))); + *((long *) (frame_182X + 4)) = (((long) loc_addr_181X)); + Spermanent_external_rootsS = frame_182X; + return;} +} +void s48_stack_setB(long x_183X, long value_184X) +{ + + { *((long *) ((SstackS) + (4 + (((x_183X)<<2))))) = value_184X; + return;} +} +long s48_stack_ref(long i_185X) +{ + + { return (*((long *) ((SstackS) + (4 + (((i_185X)<<2))))));} +} +void s48_push(long x_186X) +{ + + { *((long *) (SstackS)) = x_186X; + SstackS = ((SstackS) + -4); + return;} +} +long s48_resetup_external_exception(long new_why_187X, long additional_nargs_188X) +{ + long old_why_190X; + long old_nargs_189X; + { old_nargs_189X = Sexternal_exception_nargsS; + old_why_190X = *((long *) ((SstackS) + (4 + (((old_nargs_189X)<<2))))); + *((long *) ((SstackS) + (4 + (((old_nargs_189X)<<2))))) = (((new_why_187X)<<2)); + Sexternal_exception_nargsS = (old_nargs_189X + additional_nargs_188X); + return old_why_190X;} +} +void s48_enable_interruptsB(void) +{ + + { Senabled_interruptsS = -1; + if ((0 == ((Spending_interruptsS) & (Senabled_interruptsS)))) { + s48_Spending_interruptPS = 0; + if ((s48_Spending_eventsPS)) { + s48_Spending_interruptPS = 1; + return;} + else { + return;}} + else { + s48_Spending_interruptPS = 1; + return;}} +} +char s48_pop_gc_rootsB(void) +{ + + { if (((Sexternal_root_stackS) == (Sexternal_root_stack_baseS))) { + return 0;} + else { + Sexternal_root_stackS = (((char *) (*((long *) ((Sexternal_root_stackS) + 4))))); + return 1;}} +} +void s48_mark_traced_channels_closedB(void) +{ + long arg0K0; + char * addr_196X; + char * addr_195X; + long descriptor_194X; + long header_193X; + long channel_192X; + long i_191X; + { arg0K0 = 0; + goto L6332;} + L6332: { + i_191X = arg0K0; + if ((i_191X == (Snumber_of_channelsS))) { + return;} + else { + channel_192X = *((Svm_channelsS) + i_191X); + if ((1 == channel_192X)) { + goto L6392;} + else { + header_193X = *((long *) ((((char *) (-3 + channel_192X))) + -4)); + if ((3 == (3 & header_193X))) { + ps_write_string("Channel closed in dumped image: ", (stderr)); + descriptor_194X = *((long *) ((((char *) (-3 + channel_192X))) + 4)); + if ((0 == (3 & descriptor_194X))) { + ps_write_integer(((((*((long *) ((((char *) (-3 + channel_192X))) + 4))))>>2)), (stderr)); + goto L6378;} + else { + ps_write_string((((char *)(((char *) (-3 + (*((long *) ((((char *) (-3 + channel_192X))) + 4)))))))), (stderr)); + goto L6378;}} + else { + goto L6392;}}}} + L6392: { + arg0K0 = (1 + i_191X); + goto L6332;} + L6378: { + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + addr_195X = ((char *) (-3 + header_193X)); + S48_WRITE_BARRIER(header_193X, addr_195X, 0); + *((long *) addr_195X) = 0; + addr_196X = (((char *) (-3 + header_193X))) + 8; + S48_WRITE_BARRIER(header_193X, addr_196X, -4); + *((long *) addr_196X) = -4; + goto L6392;} +} +long s48_set_channel_os_index(long channel_197X, long os_index_198X) +{ + char * addr_205X; + long val_204X; + long v_203X; + long x_202X; + long old_index_201X; + char x_200X; + char temp_199X; + { temp_199X = os_index_198X < (Snumber_of_channelsS); + if (temp_199X) { + goto L7901;} + else { + x_200X = add_more_channels(os_index_198X); + if (x_200X) { + goto L7901;} + else { + return 36;}}} + L7901: { + if ((1 == (*((Svm_channelsS) + os_index_198X)))) { + old_index_201X = (((*((long *) ((((char *) (-3 + channel_197X))) + 8))))>>2); + x_202X = *((long *) ((((char *) (-3 + channel_197X))) + 16)); + if ((5 == x_202X)) { + v_203X = ps_abort_fd_op(old_index_201X); + enqueue_channelB(old_index_201X, v_203X); + goto L7887;} + else { + goto L7887;}} + else { + return 44;}} + L7887: { + *((Svm_channelsS) + old_index_201X) = 1; + *((Svm_channelsS) + os_index_198X) = channel_197X; + val_204X = ((os_index_198X)<<2); + addr_205X = (((char *) (-3 + channel_197X))) + 8; + S48_WRITE_BARRIER(channel_197X, addr_205X, val_204X); + *((long *) addr_205X) = val_204X; + return 5;} +} +long s48_cleaned_imported_bindings(void) +{ + long arg0K1; + long arg0K0; + long v_219X; + char * addr_218X; + long entry_217X; + char * addr_216X; + long new_foo_215X; + char v_214X; + char * addr_213X; + long okay_212X; + long foo_211X; + long i_210X; + long foo_209X; + long i_208X; + long table_207X; + long table_206X; + { table_206X = s48_trace_value((Simported_bindingsS)); + table_207X = s48_trace_value(table_206X); + arg0K0 = 0; + goto L8578;} + L8578: { + i_208X = arg0K0; + if ((1024 == i_208X)) { + arg0K0 = 0; + goto L9667;} + else { + foo_209X = *((long *) ((((char *) (-3 + table_207X))) + (((i_208X)<<2)))); + arg0K0 = foo_209X; + arg0K1 = 1; + goto L8598;}} + L9667: { + i_210X = arg0K0; + if ((1024 == i_210X)) { + return table_206X;} + else { + arg0K0 = (*((long *) ((((char *) (-3 + table_206X))) + (((i_210X)<<2))))); + goto L9675;}} + L8598: { + foo_211X = arg0K0; + okay_212X = arg0K1; + if ((1 == foo_211X)) { + addr_213X = (((char *) (-3 + table_207X))) + (((i_208X)<<2)); + S48_WRITE_BARRIER(table_207X, addr_213X, okay_212X); + *((long *) addr_213X) = okay_212X; + arg0K0 = (1 + i_208X); + goto L8578;} + else { + v_214X = s48_extantP(foo_211X); + if (v_214X) { + new_foo_215X = s48_trace_value(foo_211X); + addr_216X = (((char *) (-3 + new_foo_215X))) + 12; + S48_WRITE_BARRIER(new_foo_215X, addr_216X, okay_212X); + *((long *) addr_216X) = okay_212X; + arg0K0 = new_foo_215X; + goto L8603;} + else { + arg0K0 = okay_212X; + goto L8603;}}} + L9675: { + entry_217X = arg0K0; + if ((1 == entry_217X)) { + arg0K0 = (1 + i_210X); + goto L9667;} + else { + addr_218X = (((char *) (-3 + entry_217X))) + 8; + S48_WRITE_BARRIER(entry_217X, addr_218X, 529); + *((long *) addr_218X) = 529; + arg0K0 = (*((long *) ((((char *) (-3 + entry_217X))) + 12))); + goto L9675;}} + L8603: { + v_219X = arg0K0; + arg0K0 = (*((long *) ((((char *) (-3 + foo_211X))) + 12))); + arg0K1 = v_219X; + goto L8598;} +} +long s48_copy_symbol_table(void) +{ + long new_220X; + { new_220X = s48_trace_value((Sthe_symbol_tableS)); + HcleanerB2160(new_220X); + return new_220X;} +} +void s48_setup_external_exception(long why_221X, long nargs_222X) +{ + + { push_exception_continuationB(why_221X, 1); + if ((10 < nargs_222X)) { + ps_error("too many arguments from external exception", 0); + goto L11018;} + else { + goto L11018;}} + L11018: { + Sexternal_exception_nargsS = nargs_222X; + Sexternal_exceptionPS = 1; + return;} +} +void s48_close_channel(long os_index_223X) +{ + long obj_224X; + { if ((os_index_223X < 0)) { + return;} + else { + if ((os_index_223X < (Snumber_of_channelsS))) { + obj_224X = *((Svm_channelsS) + os_index_223X); + if ((3 == (3 & obj_224X))) { + if ((5 == (31 & ((((*((long *) ((((char *) (-3 + obj_224X))) + -4))))>>2))))) { + close_channelB((*((Svm_channelsS) + os_index_223X))); + return;} + else { + return;}} + else { + return;}} + else { + return;}}} +} +char s48_warn_about_undefined_imported_bindings(void) +{ + long arg0K0; + long name_230X; + long entry_229X; + char temp_228X; + long i_227X; + long table_226X; + FILE * out_225X; + { out_225X = stderr; + table_226X = Simported_bindingsS; + arg0K0 = 0; + goto L11558;} + L11558: { + i_227X = arg0K0; + temp_228X = 1024 == i_227X; + if (temp_228X) { + return temp_228X;} + else { + arg0K0 = (*((long *) ((((char *) (-3 + table_226X))) + (((i_227X)<<2))))); + goto L11566;}} + L11566: { + entry_229X = arg0K0; + if ((1 == entry_229X)) { + arg0K0 = (1 + i_227X); + goto L11558;} + else { + if ((17 == (255 & (*((long *) ((((char *) (-3 + entry_229X))) + 8)))))) { + name_230X = *((long *) (((char *) (-3 + entry_229X)))); + ps_write_string("undefined imported name ", out_225X); + if ((3 == (3 & name_230X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + name_230X))) + -4))))>>2))))) { + ps_write_string((((char *)(((char *) (-3 + name_230X))))), out_225X); + goto L11546;} + else { + goto L11544;}} + else { + goto L11544;}} + else { + goto L11569;}}} + L11546: { + { long ignoreXX; + PS_WRITE_CHAR(10, out_225X, ignoreXX) } + goto L11569;} + L11544: { + ps_write_string("", out_225X); + goto L11546;} + L11569: { + arg0K0 = (*((long *) ((((char *) (-3 + entry_229X))) + 12))); + goto L11566;} +} +void s48_define_exported_binding(char *name_231X, long value_232X) +{ + char arg2K0; + long arg0K2; + long arg0K1; + long arg0K0; + char * addr_245X; + long x_244X; + long name_243X; + long value_242X; + long key_241X; + long temp_240X; + long key_239X; + char okayP_238X; + char v_237X; + long temp1_236X; + long temp0_235X; + char v_234X; + long space_233X; + { space_233X = 6 + ((((4 + (strlen((char *) name_231X))))>>2)); + v_234X = AVAILABLEp(space_233X); + if (v_234X) { + arg2K0 = 1; + arg0K1 = 0; + arg0K2 = value_232X; + goto L14338;} + else { + temp0_235X = collect_saving_temps(value_232X, 1, &temp1_236X); + v_237X = AVAILABLEp(space_233X); + if (v_237X) { + arg2K0 = 1; + arg0K1 = 0; + arg0K2 = temp0_235X; + goto L14338;} + else { + arg2K0 = 0; + arg0K1 = 0; + arg0K2 = temp0_235X; + goto L14338;}}} + L14338: { + okayP_238X = arg2K0; + key_239X = arg0K1; + temp_240X = arg0K2; + if (okayP_238X) { + arg0K0 = key_239X; + arg0K1 = temp_240X; + goto L14319;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = key_239X; + arg0K1 = temp_240X; + goto L14319;}} + L14319: { + key_241X = arg0K0; + value_242X = arg0K1; + name_243X = enter_string(name_231X, key_241X); + x_244X = Hlookup2083((Simported_bindingsS), name_243X, key_241X); + addr_245X = (((char *) (-3 + x_244X))) + 8; + S48_WRITE_BARRIER(x_244X, addr_245X, value_242X); + *((long *) addr_245X) = value_242X; + return;} +} +long s48_add_channel(long mode_246X, long id_247X, long os_index_248X) +{ + char arg2K0; + long arg0K1; + long arg0K0; + long status_256X; + long channel_255X; + long v_254X; + long key_253X; + char okayP_252X; + char v_251X; + long temp1_250X; + char v_249X; + { v_249X = AVAILABLEp(6); + if (v_249X) { + arg2K0 = 1; + arg0K1 = 0; + goto L14727;} + else { + collect_saving_temps(1, 1, &temp1_250X); + v_251X = AVAILABLEp(6); + if (v_251X) { + arg2K0 = 1; + arg0K1 = 0; + goto L14727;} + else { + arg2K0 = 0; + arg0K1 = 0; + goto L14727;}}} + L14727: { + okayP_252X = arg2K0; + key_253X = arg0K1; + if (okayP_252X) { + arg0K0 = key_253X; + goto L14710;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = key_253X; + goto L14710;}} + L14710: { + v_254X = arg0K0; + channel_255X = make_registered_channel((((mode_246X)>>2)), id_247X, os_index_248X, v_254X, &status_256X); + if ((3 == (3 & channel_255X))) { + if ((5 == (31 & ((((*((long *) ((((char *) (-3 + channel_255X))) + -4))))>>2))))) { + return channel_255X;} + else { + goto L14721;}} + else { + goto L14721;}} + L14721: { + return (((status_256X)<<2));} +} +long s48_get_imported_binding(char *name_257X) +{ + char arg2K0; + long arg0K1; + long arg0K0; + long name_265X; + long key_264X; + long key_263X; + char okayP_262X; + char v_261X; + long temp1_260X; + char v_259X; + long space_258X; + { space_258X = 6 + ((((4 + (strlen((char *) name_257X))))>>2)); + v_259X = AVAILABLEp(space_258X); + if (v_259X) { + arg2K0 = 1; + arg0K1 = 0; + goto L15416;} + else { + collect_saving_temps(1, 1, &temp1_260X); + v_261X = AVAILABLEp(space_258X); + if (v_261X) { + arg2K0 = 1; + arg0K1 = 0; + goto L15416;} + else { + arg2K0 = 0; + arg0K1 = 0; + goto L15416;}}} + L15416: { + okayP_262X = arg2K0; + key_263X = arg0K1; + if (okayP_262X) { + arg0K0 = key_263X; + goto L15403;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = key_263X; + goto L15403;}} + L15403: { + key_264X = arg0K0; + name_265X = enter_string(name_257X, key_264X); + return Hlookup2102((Sexported_bindingsS), name_265X, key_264X);} +} +long s48_allocate_stob(long type_266X, long size_267X) +{ + char * addr_271X; + char v_270X; + long temp1_269X; + char v_268X; + { v_268X = AVAILABLEp(size_267X); + if (v_268X) { + goto L15711;} + else { + collect_saving_temps(1, 1, &temp1_269X); + v_270X = AVAILABLEp(size_267X); + if (v_270X) { + goto L15711;} + else { + ps_error("Scheme48 heap overflow", 0); + goto L15711;}}} + L15711: { + addr_271X = ALLOCATE_SPACE(type_266X, (4 + size_267X)); + *((long *) addr_271X) = (2 + (((((((size_267X)<<6)) + type_266X))<<2))); + return (3 + (((long) (addr_271X + 4))));} +} +void s48_initialize_vm(char * stack_begin_272X, long stack_size_273X) +{ + char arg2K0; + char * arg1K0; + long arg0K2; + long arg0K1; + long arg0K0; + char * addr_344X; + long code_343X; + long temp_342X; + char * addr_341X; + char * addr_340X; + char * addr_339X; + long code_338X; + long temp_337X; + char * addr_336X; + char * addr_335X; + char v_334X; + long temp1_333X; + char v_332X; + long cont_331X; + char * addr_330X; + long code_329X; + long temp_328X; + char * addr_327X; + char * addr_326X; + char v_325X; + long temp1_324X; + char v_323X; + char * a_322X; + long size_321X; + char * start_320X; + char * stack_319X; + long v_318X; + char * addr_317X; + long i_316X; + char * addr_315X; + char * addr_314X; + long val_313X; + long index_312X; + long h_311X; + long i_310X; + long table_309X; + char * addr_308X; + long v_307X; + char * addr_306X; + long i_305X; + long n_304X; + long string_303X; + long foo_302X; + long table_301X; + long i_300X; + long table_299X; + char * addr_298X; + long exported_bindings_297X; + long imported_bindings_296X; + long n_295X; + long symbols_294X; + long temp1_293X; + long temp0_292X; + char okayP_291X; + char * addr_290X; + long maybe_289X; + long v_288X; + long maybe_287X; + long i_286X; + char v_285X; + long temp1_284X; + long temp0_283X; + char v_282X; + long imported_bindings_281X; + long exported_bindings_280X; + long table_279X; + char * addr_278X; + char v_277X; + long temp1_276X; + char v_275X; + long symbol_table_274X; + { symbol_table_274X = s48_initial_symbols(); + if ((symbol_table_274X == 1)) { + v_275X = AVAILABLEp(1025); + if (v_275X) { + goto L15442;} + else { + collect_saving_temps(1, 1, &temp1_276X); + v_277X = AVAILABLEp(1025); + if (v_277X) { + goto L15442;} + else { + ps_error("Scheme48 heap overflow", 0); + goto L15442;}}} + else { + Sthe_symbol_tableS = symbol_table_274X; + goto L15834;}} + L15442: { + addr_278X = ALLOCATE_SPACE(2, 4100); + *((long *) addr_278X) = 1048586; + table_279X = 3 + (((long) (addr_278X + 4))); + arg0K0 = 0; + goto L15517;} + L15834: { + exported_bindings_280X = s48_initial_exported_bindings(); + imported_bindings_281X = s48_initial_imported_bindings(); + v_282X = AVAILABLEp(2050); + if (v_282X) { + arg2K0 = 1; + arg0K1 = imported_bindings_281X; + arg0K2 = exported_bindings_280X; + goto L14420;} + else { + temp0_283X = collect_saving_temps(imported_bindings_281X, exported_bindings_280X, &temp1_284X); + v_285X = AVAILABLEp(2050); + if (v_285X) { + arg2K0 = 1; + arg0K1 = temp0_283X; + arg0K2 = temp1_284X; + goto L14420;} + else { + arg2K0 = 0; + arg0K1 = temp0_283X; + arg0K2 = temp1_284X; + goto L14420;}}} + L15517: { + i_286X = arg0K0; + if ((1024 == i_286X)) { + Sthe_symbol_tableS = table_279X; + maybe_287X = s48_find_all(1); + if ((maybe_287X == 1)) { + collect_saving_temps(0, 0, &v_288X); + maybe_289X = s48_find_all(1); + if ((maybe_289X == 1)) { + ps_error("insufficient heap space to build symbol table", 0); + arg0K0 = maybe_289X; + goto L15471;} + else { + arg0K0 = maybe_289X; + goto L15471;}} + else { + arg0K0 = maybe_287X; + goto L15471;}} + else { + addr_290X = (((char *) (-3 + table_279X))) + (((i_286X)<<2)); + S48_WRITE_BARRIER(table_279X, addr_290X, 1); + *((long *) addr_290X) = 1; + arg0K0 = (1 + i_286X); + goto L15517;}} + L14420: { + okayP_291X = arg2K0; + temp0_292X = arg0K1; + temp1_293X = arg0K2; + if (okayP_291X) { + arg0K0 = temp0_292X; + arg0K1 = temp1_293X; + goto L14381;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = temp0_292X; + arg0K1 = temp1_293X; + goto L14381;}} + L15471: { + symbols_294X = arg0K0; + n_295X = (((3 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + symbols_294X))) + -4))))>>8))))>>2); + arg0K0 = 0; + goto L15538;} + L14381: { + imported_bindings_296X = arg0K0; + exported_bindings_297X = arg0K1; + if ((1 == imported_bindings_296X)) { + addr_298X = ALLOCATE_SPACE(2, 4100); + *((long *) addr_298X) = 1048586; + table_299X = 3 + (((long) (addr_298X + 4))); + arg0K0 = 0; + goto L14482;} + else { + arg0K0 = imported_bindings_296X; + goto L14396;}} + L15538: { + i_300X = arg0K0; + if ((i_300X == n_295X)) { + goto L15834;} + else { + table_301X = Sthe_symbol_tableS; + foo_302X = *((long *) ((((char *) (-3 + symbols_294X))) + (((i_300X)<<2)))); + string_303X = *((long *) (((char *) (-3 + foo_302X)))); + n_304X = -1 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + string_303X))) + -4))))>>8)); + arg0K0 = 0; + arg0K1 = 0; + goto L13005;}} + L14482: { + i_305X = arg0K0; + if ((1024 == i_305X)) { + arg0K0 = table_299X; + goto L14396;} + else { + addr_306X = (((char *) (-3 + table_299X))) + (((i_305X)<<2)); + S48_WRITE_BARRIER(table_299X, addr_306X, 1); + *((long *) addr_306X) = 1; + arg0K0 = (1 + i_305X); + goto L14482;}} + L14396: { + v_307X = arg0K0; + Simported_bindingsS = v_307X; + if ((1 == exported_bindings_297X)) { + addr_308X = ALLOCATE_SPACE(2, 4100); + *((long *) addr_308X) = 1048586; + table_309X = 3 + (((long) (addr_308X + 4))); + arg0K0 = 0; + goto L14459;} + else { + arg0K0 = exported_bindings_297X; + goto L14409;}} + L13005: { + i_310X = arg0K0; + h_311X = arg0K1; + if ((i_310X < n_304X)) { + arg0K0 = (1 + i_310X); + arg0K1 = (h_311X + (((*((unsigned char *) ((((char *) (-3 + string_303X))) + i_310X)))))); + goto L13005;} + else { + index_312X = 1023 & h_311X; + val_313X = *((long *) ((((char *) (-3 + table_301X))) + (((index_312X)<<2)))); + addr_314X = (((char *) (-3 + foo_302X))) + 4; + S48_WRITE_BARRIER(foo_302X, addr_314X, val_313X); + *((long *) addr_314X) = val_313X; + addr_315X = (((char *) (-3 + table_301X))) + (((index_312X)<<2)); + S48_WRITE_BARRIER(table_301X, addr_315X, foo_302X); + *((long *) addr_315X) = foo_302X; + arg0K0 = (1 + i_300X); + goto L15538;}} + L14459: { + i_316X = arg0K0; + if ((1024 == i_316X)) { + arg0K0 = table_309X; + goto L14409;} + else { + addr_317X = (((char *) (-3 + table_309X))) + (((i_316X)<<2)); + S48_WRITE_BARRIER(table_309X, addr_317X, 1); + *((long *) addr_317X) = 1; + arg0K0 = (1 + i_316X); + goto L14459;}} + L14409: { + v_318X = arg0K0; + Sexported_bindingsS = v_318X; + if ((stack_size_273X < 8131)) { + stack_319X = (char *)malloc(32524); + if ((stack_319X == NULL)) { + ps_error("out of memory, unable to continue", 0); + arg1K0 = stack_319X; + arg0K1 = 8131; + goto L14928;} + else { + arg1K0 = stack_319X; + arg0K1 = 8131; + goto L14928;}} + else { + arg1K0 = stack_begin_272X; + arg0K1 = stack_size_273X; + goto L14928;}} + L14928: { + start_320X = arg1K0; + size_321X = arg0K1; + Sstack_beginS = start_320X; + Sstack_endS = (start_320X + (((size_321X)<<2))); + Sstack_limitS = ((Sstack_beginS) + 524); + SstackS = ((Sstack_endS) + -4); + ScontS = 1; + SenvS = 17; + arg1K0 = start_320X; + goto L14960;} + L14960: { + a_322X = arg1K0; + if ((a_322X == (Sstack_endS))) { + v_323X = AVAILABLEp(5); + if (v_323X) { + goto L14977;} + else { + collect_saving_temps(1, 1, &temp1_324X); + v_325X = AVAILABLEp(5); + if (v_325X) { + goto L14977;} + else { + ps_error("Scheme48 heap overflow", 0); + goto L14977;}}} + else { + *((long *) a_322X) = 252645135; + arg1K0 = (a_322X + 4); + goto L14960;}} + L14977: { + addr_326X = ALLOCATE_SPACE(17, 6); + *((long *) addr_326X) = 582; + addr_327X = ALLOCATE_SPACE(11, 12); + *((long *) addr_327X) = 2094; + temp_328X = 3 + (((long) (addr_327X + 4))); + code_329X = 3 + (((long) (addr_326X + 4))); + addr_330X = ((char *) (-3 + temp_328X)); + S48_WRITE_BARRIER(temp_328X, addr_330X, code_329X); + *((long *) addr_330X) = code_329X; + *((unsigned char *) (((char *) (-3 + code_329X)))) = 23; + *((unsigned char *) ((((char *) (-3 + code_329X))) + 1)) = 31; + SstackS = ((SstackS) + -20); + *((long *) ((SstackS) + 4)) = 4262; + cont_331X = 3 + (((long) ((SstackS) + 8))); + *((long *) ((((char *) (-3 + cont_331X))) + 4)) = 0; + *((long *) ((((char *) (-3 + cont_331X))) + 8)) = temp_328X; + *((long *) ((((char *) (-3 + cont_331X))) + 12)) = (SenvS); + *((long *) (((char *) (-3 + cont_331X)))) = (ScontS); + ScontS = cont_331X; + Sbottom_of_stackS = (ScontS); + v_332X = AVAILABLEp(5); + if (v_332X) { + goto L15156;} + else { + collect_saving_temps(1, 1, &temp1_333X); + v_334X = AVAILABLEp(5); + if (v_334X) { + goto L15156;} + else { + ps_error("Scheme48 heap overflow", 0); + goto L15156;}}} + L15156: { + addr_335X = ALLOCATE_SPACE(17, 6); + *((long *) addr_335X) = 582; + addr_336X = ALLOCATE_SPACE(11, 12); + *((long *) addr_336X) = 2094; + temp_337X = 3 + (((long) (addr_336X + 4))); + code_338X = 3 + (((long) (addr_335X + 4))); + addr_339X = ((char *) (-3 + temp_337X)); + S48_WRITE_BARRIER(temp_337X, addr_339X, code_338X); + *((long *) addr_339X) = code_338X; + *((unsigned char *) (((char *) (-3 + code_338X)))) = 34; + *((unsigned char *) ((((char *) (-3 + code_338X))) + 1)) = 140; + Sinterrupt_templateS = temp_337X; + addr_340X = ALLOCATE_SPACE(17, 6); + *((long *) addr_340X) = 582; + addr_341X = ALLOCATE_SPACE(11, 12); + *((long *) addr_341X) = 2094; + temp_342X = 3 + (((long) (addr_341X + 4))); + code_343X = 3 + (((long) (addr_340X + 4))); + addr_344X = ((char *) (-3 + temp_342X)); + S48_WRITE_BARRIER(temp_342X, addr_344X, code_343X); + *((long *) addr_344X) = code_343X; + *((unsigned char *) (((char *) (-3 + code_343X)))) = 137; + *((unsigned char *) ((((char *) (-3 + code_343X))) + 1)) = 123; + Sexception_templateS = temp_342X; + return;} +} +long s48_restart(long proc_345X, long nargs_346X) +{ + char * arg1K1; + char * arg1K0; + char *arg3K0; + char arg2K3; + char arg2K1; + char arg2K2; + char arg2K0; + long arg0K3; + long arg0K2; + long arg0K1; + long arg0K0; + char *merged_arg3K0; + long merged_arg0K3; + long merged_arg0K2; + long merged_arg0K1; + long merged_arg0K0; + + int pop_continuationB_return_tag; + int get_error_string_return_tag; + long get_error_string0_return_value; + int okay_argument_list_return_tag; + char okay_argument_list0_return_value; + long okay_argument_list1_return_value; + int get_current_port_return_tag; + long get_current_port0_return_value; + int copy_continuation_from_heapB_return_tag; + long copy_continuation_from_heapB0_return_value; + int copy_listS_return_tag; + long copy_listS0_return_value; + int pop_args_GlistS_return_tag; + long pop_args_GlistS0_return_value; + int save_env_in_heap_return_tag; + long save_env_in_heap0_return_value; + int copy_env_return_tag; + long copy_env0_return_value; + int really_preserve_continuation_return_tag; + long really_preserve_continuation0_return_value; + int copy_stack_into_heap_return_tag; + int push_list_return_tag; + long push_list0_return_value; + int rest_list_setup_return_tag; + int check_events_return_tag; + char check_events0_return_value; + int loseD0_return_tag; + long status_347X; + long list_348X; + long marker_349X; + long cont_350X; + long list_351X; + long length_352X; + long start_353X; + long count_354X; + long env_355X; + long cont_356X; + long key_357X; + long reason_358X; + long env_359X; + long key_360X; + long reason_361X; + long key_362X; + long list_363X; + long count_364X; + long wants_stack_args_365X; + long stack_arg_count_366X; + long list_args_367X; + long list_arg_count_368X; + char *message_369X; + long pc_1284X; + long tem_1283X; + long cont_1282X; + long i_1281X; + long string_1280X; + char * addr_1279X; + long len_1278X; + long len_1277X; + long x_1276X; + char *string_1275X; + char move_slowP_1274X; + long slow_1273X; + long len_1272X; + long fast_1271X; + long v_1270X; + char *v_1269X; + long v_1268X; + long v_1267X; + long obj_1266X; + long env_1265X; + long thread_1264X; + long v_1263X; + long new_cont_1262X; + char * top_1261X; + char * addr_1260X; + long x_1259X; + char * addr_1258X; + long a_1257X; + long last_1256X; + long l_1255X; + long x_1254X; + char * addr_1253X; + long a_1252X; + long list_1251X; + long temp_1250X; + char okayP_1249X; + char v_1248X; + long temp1_1247X; + long temp0_1246X; + char v_1245X; + long space_1244X; + long x_1243X; + char * addr_1242X; + long a_1241X; + long count_1240X; + long args_1239X; + long start_1238X; + long temp_1237X; + char okayP_1236X; + char v_1235X; + long temp1_1234X; + long temp0_1233X; + char v_1232X; + long space_1231X; + long env_1230X; + long cont_1229X; + char * addr_1228X; + long new_1227X; + long p_1226X; + long env_1225X; + long top_1224X; + char * addr_1223X; + long new_1222X; + char * data_addr_1221X; + char * addr_1220X; + long header_1219X; + long new_1218X; + char * data_addr_1217X; + char * addr_1216X; + long header_1215X; + long p_1214X; + long previous_1213X; + long cont_1212X; + long end_1211X; + long v_1210X; + long p_1209X; + char * arg_1208X; + char * loc_1207X; + long stob_1206X; + char * top_1205X; + long arg_count_1204X; + long i_1203X; + char * p_1202X; + long v_1201X; + long l_1200X; + long i_1199X; + long key_1198X; + char okayP_1197X; + long list_1196X; + char v_1195X; + long temp1_1194X; + char v_1193X; + long space_1192X; + long x_1191X; + long v_1190X; + long x_1189X; + long v_1188X; + long count_1187X; + long x_1186X; + long v_1185X; + long status_1184X; + long channel_1183X; + long type_1182X; + char v_1181X; + long template_1180X; + char not_firstP_1179X; + long cont_1178X; + char not_firstP_1177X; + FILE * out_1176X; + long current_template_1175X; + long why_1174X; + long x_1173X; + long x_1172X; + long x_1171X; + char * addr_1170X; + long status_1169X; + char pendingP_1168X; + char eofP_1167X; + long got_1166X; + long length_1165X; + long v_1164X; + long obj_1163X; + long reason_1162X; + long status_1161X; + long v_1160X; + long v_1159X; + long key_1158X; + char okayP_1157X; + char v_1156X; + char * addr_1155X; + long value_1154X; + long offset_1153X; + long i_1152X; + long count_1151X; + long y_1150X; + char * addr_1149X; + long val_1148X; + char * addr_1147X; + long value_1146X; + long len_1145X; + long s2_1144X; + long foo_1143X; + long previous_foo_1142X; + long val_1141X; + long x_1140X; + char * addr_1139X; + long status_1138X; + char pendingP_1137X; + long got_1136X; + long length_1135X; + long count_1134X; + long start_1133X; + char waitP_1132X; + long x_1131X; + long status_1130X; + long channel_1129X; + long v_1128X; + long v_1127X; + long v_1126X; + long reason_1125X; + long channel_1124X; + long index_1123X; + long val_1122X; + long final_stack_arg_count_1121X; + char v_1120X; + long temp1_1119X; + char v_1118X; + long space_1117X; + long stack_arg_count_1116X; + long stack_slots_1115X; + char x_1114X; + long channel_1113X; + long obj_1112X; + long arg_count_1111X; + long count_1110X; + long i_1109X; + long env_1108X; + long value_1107X; + char *v_1106X; + long y_1105X; + long i_1104X; + long l_1103X; + long bucket_1102X; + long index_1101X; + long h_1100X; + long i_1099X; + long v_1098X; + long v_1097X; + long x_1096X; + long status_1095X; + long reason_1094X; + long v_1093X; + long reason_1092X; + long x_1091X; + long obj_1090X; + long v_1089X; + long v_1088X; + long len_1087X; + long s2_1086X; + char * addr_1085X; + long x_1084X; + char * addr_1083X; + long foo_1082X; + long rest_list_1081X; + long i_1080X; + long n_1079X; + long args_1078X; + long skip_1077X; + long template_1076X; + long stack_arg_count_1075X; + long skip_1074X; + long skip_1073X; + long template_1072X; + long stack_arg_count_1071X; + long skip_1070X; + char * addr_1069X; + long next_1068X; + long channel_1067X; + long m_1066X; + long i_1065X; + long value_1064X; + long back_1063X; + long env_1062X; + long offset_1061X; + long i_1060X; + long x_1059X; + char * addr_1058X; + long a_1057X; + long env_1056X; + long v_1055X; + long p_1054X; + long key_1053X; + long string_1052X; + char * addr_1051X; + long len_1050X; + long n_1049X; + long table_1048X; + long x_1047X; + long arg2_1046X; + long key_1045X; + char temp_1044X; + char minutesP_1043X; + long status_1042X; + long status_1041X; + long undumpable_count_1040X; + long undumpables_1039X; + long status_1038X; + long status_1037X; + long status_1036X; + long status_1035X; + FILE * port_1034X; + char x_1033X; + long comment_string_1032X; + long obj_1031X; + long arg3_1030X; + long arg2_1029X; + long key_1028X; + long x_1027X; + char * addr_1026X; + long channel_1025X; + long res_1024X; + long i_1023X; + char * addr_1022X; + char * addr_1021X; + long val_1020X; + char v_1019X; + long channel_1018X; + long count_1017X; + long start_1016X; + long obj_1015X; + long arg4_1014X; + long arg3_1013X; + long arg2_1012X; + long key_1011X; + long arg5_1010X; + long arg4_1009X; + long arg3_1008X; + long arg2_1007X; + long key_1006X; + long x_1005X; + long status_1004X; + long channel_1003X; + long obj_1002X; + long key_1001X; + long mode_1000X; + long arg2_999X; + long key_998X; + long bucket_997X; + long index_996X; + long h_995X; + long i_994X; + long i_993X; + long i_992X; + char * addr_991X; + long i_990X; + long i_989X; + long i_988X; + long c_987X; + long b_986X; + long c_985X; + long b_984X; + char x_983X; + long c_982X; + long b_981X; + long c_980X; + long mid_c_979X; + long v_978X; + long v_977X; + long lo_c_976X; + long hi_b_975X; + long hi_a_974X; + long lo_b_973X; + long lo_a_972X; + long b_971X; + long v_970X; + long v_969X; + long args_968X; + long next_967X; + long next_op_966X; + long cont_965X; + long index_964X; + long length_963X; + long wants_stack_args_962X; + long skip_961X; + long skip_960X; + long stack_space_959X; + long protocol_958X; + long index_957X; + long length_956X; + long wants_stack_args_955X; + long skip_954X; + long skip_953X; + long stack_space_952X; + long protocol_951X; + long n_950X; + long tem_949X; + long stack_arg_count_948X; + long v_947X; + long v_946X; + long key_945X; + long start_i_944X; + long temp_943X; + char okayP_942X; + long key_941X; + char okayP_940X; + long obj_939X; + long obj_938X; + long type_937X; + long thing_936X; + long stuff_935X; + char * addr_934X; + long val_933X; + long x_932X; + long i_931X; + long b_930X; + long p_929X; + long port_928X; + long Kchar_927X; + long x_926X; + long i_925X; + long b_924X; + long p_923X; + long p_922X; + long port_921X; + char * addr_920X; + long val_919X; + long x_918X; + long i_917X; + long b_916X; + long p_915X; + long p_914X; + long port_913X; + long list_912X; + long head_911X; + char move_slowP_910X; + long slow_909X; + long list_908X; + long n_907X; + long arg2_906X; + long val_905X; + long mseconds_904X; + long seconds_903X; + long option_902X; + long key_901X; + char okayP_900X; + long result_899X; + char * args_898X; + long name_897X; + long proc_896X; + long rest_list_895X; + long x_894X; + long tem_893X; + long pc_892X; + long v_891X; + long value_890X; + long vector_889X; + long type_888X; + char firstP_887X; + long v_886X; + long vector_885X; + char firstP_884X; + long x_883X; + char * addr_882X; + long b_881X; + long x_880X; + char * addr_879X; + long proc_878X; + long stob_877X; + long h_876X; + long i_875X; + long key_874X; + char okayP_873X; + long y_872X; + long n_871X; + char * addr_870X; + long prev_869X; + long ch_868X; + long val_867X; + long key_866X; + char okayP_865X; + long key_864X; + char okayP_863X; + long key_862X; + char okayP_861X; + long key_860X; + char okayP_859X; + long val_858X; + char * addr_857X; + char * addr_856X; + long val_855X; + long n_854X; + long string_853X; + long table_852X; + long obj_851X; + long string_850X; + char * addr_849X; + long len_848X; + long vector_847X; + char * addr_846X; + long value_845X; + char * addr_844X; + long len_843X; + long init_842X; + char okayP_841X; + long rest_list_840X; + long stack_nargs_839X; + long new_838X; + char * addr_837X; + long len_836X; + long type_835X; + long new_834X; + char * addr_833X; + long len_832X; + long type_831X; + long value_830X; + long val_829X; + long val_828X; + long val_827X; + long val_826X; + long r_825X; + long n_824X; + long a_823X; + long a_822X; + long val_821X; + long val_820X; + long val_819X; + long val_818X; + long val_817X; + long a_816X; + long a_815X; + long val_814X; + long val_813X; + long delta_812X; + long delta_811X; + long offset_810X; + long key_809X; + char okayP_808X; + char v_807X; + long tem_806X; + long key_805X; + char okayP_804X; + long list_arg_count_803X; + long list_args_802X; + long stack_nargs_801X; + long obj_800X; + char * addr_799X; + long list_args_798X; + long follower_797X; + long list_796X; + long args_795X; + long list_arg_count_794X; + char okayP_793X; + long stack_nargs_792X; + long list_args_791X; + long total_arg_count_790X; + long code_789X; + long obj_788X; + long obj_787X; + long list_arg_count_786X; + long list_args_785X; + long stack_arg_count_784X; + long obj_783X; + char * arg_782X; + char * loc_781X; + long args_780X; + long v_779X; + long v_778X; + long v_777X; + long list_arg_count_776X; + long list_args_775X; + long stack_arg_count_774X; + long exception_773X; + long code_772X; + long stack_arg_count_771X; + char v_770X; + long key_769X; + char okayP_768X; + long key_767X; + char okayP_766X; + char * addr_765X; + long value_764X; + long v_763X; + long new_env_762X; + char * addr_761X; + long len_760X; + char v_759X; + long temp1_758X; + long temp0_757X; + char v_756X; + long env_755X; + char v_754X; + long temp1_753X; + char v_752X; + long space_751X; + char * addr_750X; + long value_749X; + long index_748X; + long i_747X; + long env_746X; + long i_745X; + long env_744X; + long i_743X; + long env_742X; + long obj_741X; + long opcode_740X; + long nargs_739X; + FILE * out_738X; + long x_737X; + long v_736X; + long v_735X; + long v_734X; + long v_733X; + long v_732X; + long v_731X; + long v_730X; + long count_729X; + long to_index_728X; + long from_index_727X; + long arg5_726X; + long arg4_725X; + long arg3_724X; + long arg2_723X; + char * addr_722X; + long len_721X; + long value_720X; + long index_719X; + long arg4_718X; + long arg3_717X; + long arg2_716X; + long len_715X; + long index_714X; + long arg3_713X; + long arg2_712X; + long list_711X; + long thing_710X; + char v_709X; + long temp1_708X; + char v_707X; + long space_706X; + long len_705X; + long x_704X; + long obj_703X; + long arg2_702X; + long x_701X; + long arg2_700X; + long status_699X; + long value_698X; + long key_697X; + long arg2_696X; + long mseconds_695X; + long seconds_694X; + long mseconds_693X; + long seconds_692X; + long x_691X; + long other_690X; + long option_689X; + long arg2_688X; + long x_687X; + long arg2_686X; + char v_685X; + long temp1_684X; + char v_683X; + long rest_list_682X; + long p_681X; + long nargs_680X; + long x_679X; + long arg2_678X; + long p_677X; + long p_676X; + long p_675X; + long old_674X; + long temp_673X; + long obj_672X; + long p_671X; + long template_670X; + long p_669X; + long temp_668X; + long obj_667X; + long x_666X; + long type_665X; + long x_664X; + long bytes_663X; + long x_662X; + long other_661X; + long key_660X; + long arg2_659X; + char v_658X; + long temp1_657X; + char v_656X; + long n_655X; + long x_654X; + long obj_653X; + long v_652X; + char v_651X; + long temp1_650X; + char v_649X; + long x_648X; + char v_647X; + long temp1_646X; + char v_645X; + long space_644X; + char * addr_643X; + long next_642X; + long channel_641X; + long n_640X; + char * addr_639X; + long head_638X; + long channel_637X; + long obj_636X; + char v_635X; + long temp1_634X; + char v_633X; + char v_632X; + long temp1_631X; + char v_630X; + char v_629X; + long temp1_628X; + char v_627X; + char v_626X; + long temp1_625X; + char v_624X; + long x_623X; + long x_622X; + long x_621X; + long arg2_620X; + long descriptor_619X; + long x_618X; + long obj_617X; + char v_616X; + long temp1_615X; + char v_614X; + long len_613X; + char Kchar_612X; + long index_611X; + long arg3_610X; + long arg2_609X; + long len_608X; + long index_607X; + long arg2_606X; + long obj_605X; + char v_604X; + long temp1_603X; + char v_602X; + long size_601X; + char init_600X; + long len_599X; + long arg2_598X; + long len_597X; + long Kchar_596X; + long index_595X; + long arg3_594X; + long arg2_593X; + long len_592X; + long index_591X; + long arg2_590X; + long obj_589X; + char v_588X; + long temp1_587X; + char v_586X; + long size_585X; + long init_584X; + long len_583X; + long arg2_582X; + char * addr_581X; + long index_580X; + long len_579X; + long type_578X; + long value_577X; + long stob_576X; + long arg2_575X; + long index_574X; + long len_573X; + long type_572X; + long index_571X; + long stob_570X; + char v_569X; + long temp1_568X; + long temp0_567X; + char v_566X; + long size_565X; + long len_564X; + long type_563X; + long init_562X; + long len_561X; + char * addr_560X; + long type_559X; + long offset_558X; + long value_557X; + long stob_556X; + long type_555X; + long offset_554X; + long stob_553X; + char v_552X; + long temp1_551X; + char v_550X; + long space_549X; + long len_548X; + char v_547X; + long temp1_546X; + char v_545X; + long space_544X; + long len_543X; + long type_542X; + long stob_541X; + long type_540X; + long x_539X; + long x_538X; + long x_537X; + long x_536X; + long arg2_535X; + long x_534X; + long arg2_533X; + long x_532X; + long x_531X; + long result_530X; + long x_529X; + long x_528X; + long count_527X; + long value_526X; + long y_525X; + long x_524X; + long x_523X; + long arg2_522X; + long x_521X; + long arg2_520X; + long x_519X; + long arg2_518X; + long x_517X; + long x_516X; + long arg2_515X; + long x_514X; + long arg2_513X; + long x_512X; + long arg2_511X; + long n_510X; + long n_509X; + long x_508X; + long x_507X; + long x_506X; + long x_505X; + long x_504X; + long x_503X; + long x_502X; + long x_501X; + long x_500X; + long x_499X; + long x_498X; + long x_497X; + long x_496X; + long x_495X; + long a_494X; + long y_493X; + long x_492X; + long b_491X; + long a_490X; + long x_489X; + long arg2_488X; + long x_487X; + long arg2_486X; + long x_485X; + long arg2_484X; + long x_483X; + long arg2_482X; + long x_481X; + long arg2_480X; + long x_479X; + long arg2_478X; + long b_477X; + long a_476X; + long x_475X; + long arg2_474X; + long z_473X; + long y_472X; + long x_471X; + long b_470X; + long a_469X; + long x_468X; + long arg2_467X; + long z_466X; + long y_465X; + long x_464X; + long x_463X; + long x_462X; + long x_461X; + long n_460X; + long n_459X; + long n_458X; + long n_457X; + long x_456X; + long x_455X; + long arg2_454X; + long rest_list_453X; + long x_452X; + long rest_list_451X; + long stack_nargs_450X; + long arg0_449X; + long arg1_448X; + long rest_list_447X; + long arg0_446X; + long stack_nargs_445X; + long index_444X; + long val_443X; + long max_442X; + long p_441X; + char v_440X; + long temp1_439X; + char v_438X; + long space_437X; + long space_436X; + long index_435X; + long v_434X; + char v_433X; + long temp1_432X; + char v_431X; + long space_430X; + long code_429X; + long tem_428X; + long stack_nargs_427X; + long p_426X; + long obj_425X; + long consumer_424X; + long cont_423X; + long rest_list_422X; + long proc_421X; + long stack_nargs_420X; + long args_419X; + long length_418X; + char okayP_417X; + long list_args_416X; + long stob_415X; + char * top_of_args_414X; + long nargs_413X; + long obj_412X; + long stack_arg_count_411X; + char v_410X; + long temp1_409X; + char v_408X; + long space_407X; + long code_406X; + long template_405X; + long obj_404X; + long stack_arg_count_403X; + long cont_402X; + char v_401X; + long temp1_400X; + char v_399X; + long space_398X; + char v_397X; + long temp1_396X; + char v_395X; + long space_394X; + long total_count_393X; + long p_392X; + long v_391X; + char * addr_390X; + long val_389X; + long location_388X; + long location_387X; + long env_386X; + long back_385X; + long env_384X; + long back_383X; + long env_382X; + long back_381X; + long count_380X; + char * code_pointer_379X; + long code_378X; + char * addr_377X; + long proc_376X; + long temp_375X; + char okayP_374X; + char v_373X; + long temp1_372X; + long temp0_371X; + char v_370X; + { v_370X = AVAILABLEp(2); + if (v_370X) { + arg2K0 = 1; + arg0K1 = proc_345X; + goto L19375;} + else { + temp0_371X = collect_saving_temps(proc_345X, 1, &temp1_372X); + v_373X = AVAILABLEp(2); + if (v_373X) { + arg2K0 = 1; + arg0K1 = temp0_371X; + goto L19375;} + else { + arg2K0 = 0; + arg0K1 = temp0_371X; + goto L19375;}}} + L19375: { + okayP_374X = arg2K0; + temp_375X = arg0K1; + if (okayP_374X) { + arg0K0 = temp_375X; + goto L19346;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = temp_375X; + goto L19346;}} + L19346: { + proc_376X = arg0K0; + addr_377X = ALLOCATE_SPACE(17, 6); + *((long *) addr_377X) = 582; + code_378X = 3 + (((long) (addr_377X + 4))); + *((unsigned char *) (((char *) (-3 + code_378X)))) = 24; + *((unsigned char *) ((((char *) (-3 + code_378X))) + 1)) = nargs_346X; + Scode_pointerS = (((char *) (-3 + code_378X))); + SvalS = proc_376X; + arg1K0 = (Scode_pointerS); + goto L18438;} + L18438: { + code_pointer_379X = arg1K0; + switch ((*((unsigned char *) code_pointer_379X))) { + case 0 : + case 145 : { + push_exception_continuationB(15, 1); + arg0K0 = 0; + goto L16665;} + break; + case 1 : { + count_380X = ((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2))); + *((long *) (SstackS)) = (SenvS); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (1034 + (((count_380X)<<10))); + SstackS = ((SstackS) + -4); + SenvS = (3 + (((long) ((SstackS) + 8)))); + Scode_pointerS = ((Scode_pointerS) + 3); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 2 : { + SvalS = (*((long *) ((((char *) (-3 + (StemplateS)))) + ((((((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2)))))<<2))))); + Scode_pointerS = ((Scode_pointerS) + 3); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 3 : { + SvalS = (*((long *) ((((char *) (-3 + (StemplateS)))) + ((((*((unsigned char *) ((Scode_pointerS) + 1))))<<2))))); + Scode_pointerS = ((Scode_pointerS) + 3); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 4 : { + back_381X = *((unsigned char *) ((Scode_pointerS) + 1)); + env_382X = SenvS; + arg0K0 = env_382X; + arg0K1 = back_381X; + goto L23824;} + break; + case 5 : { + SvalS = (*((long *) ((((char *) (-3 + (SenvS)))) + ((((*((unsigned char *) ((Scode_pointerS) + 1))))<<2))))); + if ((529 == (SvalS))) { + push_exception_continuationB(0, 2); + arg0K0 = 0; + goto L16665;} + else { + Scode_pointerS = ((Scode_pointerS) + 2); + arg1K0 = (Scode_pointerS); + goto L18438;}} + break; + case 6 : { + SvalS = (*((long *) ((((char *) (-3 + (*((long *) (((char *) (-3 + (SenvS))))))))) + ((((*((unsigned char *) ((Scode_pointerS) + 1))))<<2))))); + if ((529 == (SvalS))) { + push_exception_continuationB(0, 2); + arg0K0 = 0; + goto L16665;} + else { + Scode_pointerS = ((Scode_pointerS) + 2); + arg1K0 = (Scode_pointerS); + goto L18438;}} + break; + case 7 : { + SvalS = (*((long *) ((((char *) (-3 + (*((long *) (((char *) (-3 + (*((long *) (((char *) (-3 + (SenvS)))))))))))))) + ((((*((unsigned char *) ((Scode_pointerS) + 1))))<<2))))); + if ((529 == (SvalS))) { + push_exception_continuationB(0, 2); + arg0K0 = 0; + goto L16665;} + else { + Scode_pointerS = ((Scode_pointerS) + 2); + arg1K0 = (Scode_pointerS); + goto L18438;}} + break; + case 8 : { + back_383X = ((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2))); + env_384X = SenvS; + arg0K0 = env_384X; + arg0K1 = back_383X; + goto L20247;} + break; + case 9 : { + back_385X = ((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2))); + env_386X = SenvS; + arg0K0 = env_386X; + arg0K1 = back_385X; + goto L20185;} + break; + case 10 : { + location_387X = *((long *) ((((char *) (-3 + (StemplateS)))) + ((((((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2)))))<<2)))); + SvalS = (*((long *) ((((char *) (-3 + location_387X))) + 4))); + if ((17 == (255 & (SvalS)))) { + push_exception_continuationB(1, 3); + *((long *) (SstackS)) = location_387X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + else { + Scode_pointerS = ((Scode_pointerS) + 3); + arg1K0 = (Scode_pointerS); + goto L18438;}} + break; + case 11 : { + location_388X = *((long *) ((((char *) (-3 + (StemplateS)))) + ((((((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2)))))<<2)))); + if ((273 == (*((long *) ((((char *) (-3 + location_388X))) + 4))))) { + push_exception_continuationB(1, 3); + *((long *) (SstackS)) = location_388X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + val_389X = SvalS; + addr_390X = (((char *) (-3 + location_388X))) + 4; + S48_WRITE_BARRIER(location_388X, addr_390X, val_389X); + *((long *) addr_390X) = val_389X; + SvalS = 13; + Scode_pointerS = ((Scode_pointerS) + 3); + arg1K0 = (Scode_pointerS); + goto L18438;}} + break; + case 12 : { + v_391X = *((unsigned char *) ((Scode_pointerS) + 3)); + if ((0 == v_391X)) { + p_392X = SenvS; + if ((3 == (3 & p_392X))) { + if ((p_392X < (((long) (Sstack_beginS))))) { + arg0K0 = 0; + goto L20964;} + else { + if (((((long) (Sstack_endS))) < p_392X)) { + arg0K0 = 0; + goto L20964;} + else { + arg0K0 = ((Sstack_endS) - (Sstack_beginS)); + goto L20964;}}} + else { + arg0K0 = 0; + goto L20964;}} + else { + arg0K0 = (SvalS); + goto L20971;}} + break; + case 13 : { + total_count_393X = *((unsigned char *) ((Scode_pointerS) + 2)); + space_394X = 1 + total_count_393X; + v_395X = AVAILABLEp(space_394X); + if (v_395X) { + goto L20766;} + else { + collect_saving_temps(1, 1, &temp1_396X); + v_397X = AVAILABLEp(space_394X); + if (v_397X) { + goto L20766;} + else { + ps_error("Scheme48 heap overflow", 0); + goto L20766;}}} + break; + case 14 : { + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 15 : { + SvalS = (*((long *) ((((char *) (-3 + (SenvS)))) + ((((*((unsigned char *) ((Scode_pointerS) + 1))))<<2))))); + if ((529 == (SvalS))) { + push_exception_continuationB(0, 3); + arg0K0 = 0; + goto L16665;} + else { + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + Scode_pointerS = ((Scode_pointerS) + 3); + arg1K0 = (Scode_pointerS); + goto L18438;}} + break; + case 16 : { + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + SvalS = (*((long *) ((((char *) (-3 + (SenvS)))) + ((((*((unsigned char *) ((Scode_pointerS) + 2))))<<2))))); + if ((529 == (SvalS))) { + push_exception_continuationB(0, 3); + arg0K0 = 0; + goto L16665;} + else { + Scode_pointerS = ((Scode_pointerS) + 3); + arg1K0 = (Scode_pointerS); + goto L18438;}} + break; + case 17 : { + SstackS = ((SstackS) + 4); + SvalS = (*((long *) (SstackS))); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 18 : { + SvalS = (*((long *) ((SstackS) + (4 + ((((*((unsigned char *) ((Scode_pointerS) + 1))))<<2)))))); + Scode_pointerS = ((Scode_pointerS) + 2); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 19 : { + *((long *) ((SstackS) + (4 + ((((*((unsigned char *) ((Scode_pointerS) + 1))))<<2))))) = (SvalS); + Scode_pointerS = ((Scode_pointerS) + 2); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 20 : { + push_continuationB(((Scode_pointerS) + (((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2))))), (*((unsigned char *) ((Scode_pointerS) + 3)))); + Scode_pointerS = ((Scode_pointerS) + 4); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 21 : { + push_continuationB(((Scode_pointerS) + (((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2))))), (((((*((unsigned char *) ((Scode_pointerS) + 3))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 4))))); + Scode_pointerS = ((Scode_pointerS) + 5); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 22 : { + space_398X = 1 + (((((Sstack_endS) - (SstackS)))>>2)); + v_399X = AVAILABLEp(space_398X); + if (v_399X) { + arg2K0 = 1; + arg0K1 = 0; + goto L20692;} + else { + collect_saving_temps(1, 1, &temp1_400X); + v_401X = AVAILABLEp(space_398X); + if (v_401X) { + arg2K0 = 1; + arg0K1 = 0; + goto L20692;} + else { + arg2K0 = 0; + arg0K1 = 0; + goto L20692;}}} + break; + case 23 : { + cont_402X = *((long *) (((char *) (-3 + (Sbottom_of_stackS))))); + if ((3 == (3 & cont_402X))) { + if ((9 == (31 & ((((*((long *) ((((char *) (-3 + cont_402X))) + -4))))>>2))))) { + if ((3 == (3 & cont_402X))) { + if ((9 == (31 & ((((*((long *) ((((char *) (-3 + cont_402X))) + -4))))>>2))))) { + merged_arg0K0 = cont_402X; + copy_continuation_from_heapB_return_tag = 0; + goto copy_continuation_from_heapB; + copy_continuation_from_heapB_return_0: + goto L19847;} + else { + goto L19882;}} + else { + goto L19882;}} + else { + goto L19848;}} + else { + goto L19848;}} + break; + case 24 : { + stack_arg_count_403X = *((unsigned char *) ((Scode_pointerS) + 1)); + obj_404X = SvalS; + if ((3 == (3 & obj_404X))) { + if ((3 == (31 & ((((*((long *) ((((char *) (-3 + obj_404X))) + -4))))>>2))))) { + template_405X = *((long *) (((char *) (-3 + (SvalS))))); + code_406X = *((long *) (((char *) (-3 + template_405X)))); + if ((stack_arg_count_403X == (*((unsigned char *) ((((char *) (-3 + code_406X))) + 1))))) { + StemplateS = template_405X; + SenvS = (*((long *) ((((char *) (-3 + (SvalS)))) + 4))); + Scode_pointerS = ((((char *) (-3 + code_406X))) + 2); + if (((SstackS) < (Sstack_limitS))) { + space_407X = 1 + (((((Sstack_endS) - (SstackS)))>>2)); + v_408X = AVAILABLEp(space_407X); + if (v_408X) { + arg2K0 = 1; + arg0K1 = 0; + goto L19208;} + else { + collect_saving_temps(1, 1, &temp1_409X); + v_410X = AVAILABLEp(space_407X); + if (v_410X) { + arg2K0 = 1; + arg0K1 = 0; + goto L19208;} + else { + arg2K0 = 0; + arg0K1 = 0; + goto L19208;}}} + else { + goto L19120;}} + else { + arg0K0 = stack_arg_count_403X; + goto L16066;}} + else { + arg0K0 = 3; + arg0K1 = stack_arg_count_403X; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;}} + else { + arg0K0 = 3; + arg0K1 = stack_arg_count_403X; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;}} + break; + case 25 : { + stack_arg_count_411X = ((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2))); + obj_412X = SvalS; + if ((3 == (3 & obj_412X))) { + if ((3 == (31 & ((((*((long *) ((((char *) (-3 + obj_412X))) + -4))))>>2))))) { + arg0K0 = stack_arg_count_411X; + goto L16066;} + else { + arg0K0 = 3; + arg0K1 = stack_arg_count_411X; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;}} + else { + arg0K0 = 3; + arg0K1 = stack_arg_count_411X; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;}} + break; + case 26 : { + nargs_413X = *((unsigned char *) ((Scode_pointerS) + 1)); + top_of_args_414X = SstackS; + stob_415X = ScontS; + arg1K0 = ((((char *) (-3 + stob_415X))) + -8); + arg1K1 = (top_of_args_414X + (((nargs_413X)<<2))); + goto L17628;} + break; + case 27 : { + SstackS = ((SstackS) + 4); + list_args_416X = *((long *) (SstackS)); + merged_arg0K0 = list_args_416X; + okay_argument_list_return_tag = 0; + goto okay_argument_list; + okay_argument_list_return_0: + okayP_417X = okay_argument_list0_return_value; + length_418X = okay_argument_list1_return_value; + if (okayP_417X) { + arg0K0 = (((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2)))); + arg0K1 = list_args_416X; + arg0K2 = length_418X; + goto L17666;} + else { + *((long *) (SstackS)) = list_args_416X; + SstackS = ((SstackS) + -4); + merged_arg0K0 = 25; + merged_arg0K1 = (1 + (((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2))))); + pop_args_GlistS_return_tag = 0; + goto pop_args_GlistS; + pop_args_GlistS_return_0: + args_419X = pop_args_GlistS0_return_value; + push_exception_continuationB(5, 0); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = args_419X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 28 : { + SstackS = ((SstackS) + 4); + SstackS = ((SstackS) + 4); + stack_nargs_420X = (((*((long *) (SstackS))))>>2); + proc_421X = *((long *) ((SstackS) + (4 + (((stack_nargs_420X)<<2))))); + *((long *) ((SstackS) + (4 + (((stack_nargs_420X)<<2))))) = 1; + SstackS = ((SstackS) + 4); + rest_list_422X = *((long *) (SstackS)); + if ((25 == rest_list_422X)) { + SstackS = ((SstackS) + 4); + arg0K0 = (*((long *) (SstackS))); + arg0K1 = (-2 + stack_nargs_420X); + goto L11273;} + else { + if ((25 == (*((long *) ((((char *) (-3 + rest_list_422X))) + 4))))) { + arg0K0 = (*((long *) (((char *) (-3 + rest_list_422X))))); + arg0K1 = (-1 + stack_nargs_420X); + goto L11273;} + else { + arg0K0 = (*((long *) ((((char *) (-3 + (*((long *) ((((char *) (-3 + rest_list_422X))) + 4)))))) + 4))); + arg0K1 = rest_list_422X; + goto L11314;}}} + break; + case 29 : { + SstackS = ((SstackS) + 4); + cont_423X = *((long *) (SstackS)); + if ((3 == (3 & cont_423X))) { + if ((9 == (31 & ((((*((long *) ((((char *) (-3 + cont_423X))) + -4))))>>2))))) { + merged_arg0K0 = cont_423X; + copy_continuation_from_heapB_return_tag = 1; + goto copy_continuation_from_heapB; + copy_continuation_from_heapB_return_1: + goto L17571;} + else { + goto L17578;}} + else { + goto L17578;}} + break; + case 30 : { + SstackS = ((SstackS) + 4); + consumer_424X = *((long *) (SstackS)); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + SvalS = consumer_424X; + obj_425X = SvalS; + if ((3 == (3 & obj_425X))) { + if ((3 == (31 & ((((*((long *) ((((char *) (-3 + obj_425X))) + -4))))>>2))))) { + arg0K0 = 1; + goto L16066;} + else { + arg0K0 = 3; + arg0K1 = 1; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;}} + else { + arg0K0 = 3; + arg0K1 = 1; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;}} + break; + case 31 : { + pop_continuationB_return_tag = 0; + goto pop_continuationB; + pop_continuationB_return_0: + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 32 : { + arg0K0 = (((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2)))); + arg0K1 = 25; + arg0K2 = 0; + goto L20427;} + break; + case 33 : { + SstackS = ((SstackS) + 4); + p_426X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + stack_nargs_427X = (((*((long *) (SstackS))))>>2); + SstackS = ((SstackS) + 4); + arg0K0 = stack_nargs_427X; + arg0K1 = (*((long *) (SstackS))); + arg0K2 = ((((p_426X)>>2)) - stack_nargs_427X); + goto L20427;} + break; + case 34 : { + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 35 : { + tem_428X = *((long *) ((((char *) (-3 + (StemplateS)))) + ((((((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2)))))<<2)))); + StemplateS = tem_428X; + Scode_pointerS = (((char *) (-3 + (*((long *) (((char *) (-3 + tem_428X)))))))); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 36 : { + code_429X = *((long *) (((char *) (-3 + (*((long *) ((((char *) (-3 + (StemplateS)))) + ((((((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2)))))<<2))))))))); + if ((0 == (*((unsigned char *) ((((char *) (-3 + code_429X))) + 1))))) { + if (((SstackS) < (Sstack_limitS))) { + space_430X = 1 + (((((Sstack_endS) - (SstackS)))>>2)); + v_431X = AVAILABLEp(space_430X); + if (v_431X) { + arg2K0 = 1; + arg0K1 = 0; + goto L18944;} + else { + collect_saving_temps(1, 1, &temp1_432X); + v_433X = AVAILABLEp(space_430X); + if (v_433X) { + arg2K0 = 1; + arg0K1 = 0; + goto L18944;} + else { + arg2K0 = 0; + arg0K1 = 0; + goto L18944;}}} + else { + goto L18817;}} + else { + v_434X = *((unsigned char *) ((((char *) (-3 + code_429X))) + 1)); + if ((66 == v_434X)) { + if ((0 == (*((unsigned char *) ((((char *) (-3 + code_429X))) + (-3 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + code_429X))) + -4))))>>8)))))))) { + index_435X = -2 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + code_429X))) + -4))))>>8)); + space_436X = ((((*((unsigned char *) ((((char *) (-3 + code_429X))) + index_435X))))<<8)) + (*((unsigned char *) ((((char *) (-3 + code_429X))) + (1 + index_435X)))); + if ((space_436X < (64 + (((((SstackS) - (Sstack_limitS)))>>2))))) { + goto L18817;} + else { + space_437X = 1 + (((((Sstack_endS) - (SstackS)))>>2)); + v_438X = AVAILABLEp(space_437X); + if (v_438X) { + arg2K0 = 1; + arg0K1 = 0; + goto L19000;} + else { + collect_saving_temps(1, 1, &temp1_439X); + v_440X = AVAILABLEp(space_437X); + if (v_440X) { + arg2K0 = 1; + arg0K1 = 0; + goto L19000;} + else { + arg2K0 = 0; + arg0K1 = 0; + goto L19000;}}}} + else { + goto L18862;}} + else { + goto L18862;}}} + break; + case 37 : { + if ((1 == (SvalS))) { + Scode_pointerS = ((Scode_pointerS) + (((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2))))); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + Scode_pointerS = ((Scode_pointerS) + 3); + arg1K0 = (Scode_pointerS); + goto L18438;}} + break; + case 38 : { + Scode_pointerS = ((Scode_pointerS) + (((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2))))); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 39 : { + if ((0 == (3 & (SvalS)))) { + p_441X = SvalS; + max_442X = *((unsigned char *) ((Scode_pointerS) + 1)); + val_443X = ((p_441X)>>2); + if ((val_443X < 0)) { + goto L18718;} + else { + if ((val_443X < max_442X)) { + index_444X = 1 + (((val_443X)<<1)); + arg0K0 = (((((*((unsigned char *) ((Scode_pointerS) + (1 + index_444X)))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + (2 + index_444X))))); + goto L18720;} + else { + goto L18718;}}} + else { + push_exception_continuationB(5, 0); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;}} + break; + case 40 : { + stack_nargs_445X = (((*((long *) ((SstackS) + 4))))>>2); + if ((0 == stack_nargs_445X)) { + arg0_446X = *((long *) ((SstackS) + 12)); + rest_list_447X = *((long *) ((SstackS) + 8)); + *((long *) (SstackS)) = arg0_446X; + SstackS = ((SstackS) + -4); + SvalS = (*((long *) (((char *) (-3 + rest_list_447X))))); + goto L19750;} + else { + arg1_448X = *((long *) ((SstackS) + (4 + (((stack_nargs_445X)<<2))))); + arg0_449X = *((long *) ((SstackS) + (8 + (((stack_nargs_445X)<<2))))); + *((long *) ((SstackS) + (8 + (((stack_nargs_445X)<<2))))) = 1; + *((long *) ((SstackS) + 4)) = (-4 + (((stack_nargs_445X)<<2))); + *((long *) (SstackS)) = arg0_449X; + SstackS = ((SstackS) + -4); + SvalS = arg1_448X; + goto L19750;}} + break; + case 41 : { + stack_nargs_450X = (((*((long *) ((SstackS) + 4))))>>2); + if ((stack_nargs_450X == 0)) { + rest_list_451X = *((long *) ((SstackS) + 8)); + if ((25 == (*((long *) ((((char *) (-3 + rest_list_451X))) + 4))))) { + arg0K0 = 1; + goto L18616;} + else { + *((long *) ((SstackS) + 8)) = (*((long *) ((((char *) (-3 + rest_list_451X))) + 4))); + *((long *) ((SstackS) + 12)) = (SvalS); + arg0K0 = -2; + goto L18616;}} + else { + if ((stack_nargs_450X == 1)) { + if ((25 == (*((long *) ((SstackS) + 8))))) { + arg0K0 = 1; + goto L18616;} + else { + *((long *) ((SstackS) + 4)) = 0; + *((long *) ((SstackS) + 12)) = (SvalS); + arg0K0 = -2; + goto L18616;}} + else { + *((long *) ((SstackS) + (8 + (((stack_nargs_450X)<<2))))) = (SvalS); + arg0K0 = -2; + goto L18616;}}} + break; + case 42 : { + if ((1 == (SvalS))) { + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + x_452X = (((*((long *) ((SstackS) + 4))))>>2); + if ((x_452X == 0)) { + rest_list_453X = *((long *) ((SstackS) + 8)); + if ((25 == (*((long *) ((((char *) (-3 + rest_list_453X))) + 4))))) { + arg0K0 = 1; + goto L19641;} + else { + *((long *) ((SstackS) + 8)) = (*((long *) ((((char *) (-3 + rest_list_453X))) + 4))); + *((long *) ((SstackS) + 12)) = (*((long *) (((char *) (-3 + rest_list_453X))))); + arg0K0 = -2; + goto L19641;}} + else { + if ((x_452X == 1)) { + if ((25 == (*((long *) ((SstackS) + 8))))) { + arg0K0 = 1; + goto L19641;} + else { + *((long *) ((SstackS) + 4)) = 0; + arg0K0 = -2; + goto L19641;}} + else { + arg0K0 = -2; + goto L19641;}}}} + break; + case 43 : { + SstackS = ((SstackS) + 4); + arg2_454X = *((long *) (SstackS)); + x_455X = SvalS; + if ((arg2_454X == x_455X)) { + arg0K0 = 5; + goto L38026;} + else { + arg0K0 = 1; + goto L38026;}} + break; + case 44 : { + x_456X = SvalS; + if ((0 == (3 & x_456X))) { + arg0K0 = 5; + goto L38038;} + else { + if ((3 == (3 & x_456X))) { + if ((19 == (31 & ((((*((long *) ((((char *) (-3 + x_456X))) + -4))))>>2))))) { + arg0K0 = 5; + goto L38038;} + else { + goto L10622;}} + else { + goto L10622;}}} + break; + case 45 : { + n_457X = SvalS; + if ((0 == (3 & n_457X))) { + goto L28391;} + else { + if ((3 == (3 & n_457X))) { + if ((19 == (31 & ((((*((long *) ((((char *) (-3 + n_457X))) + -4))))>>2))))) { + goto L28391;} + else { + goto L28392;}} + else { + goto L28392;}}} + break; + case 46 : { + n_458X = SvalS; + if ((0 == (3 & n_458X))) { + goto L28548;} + else { + if ((3 == (3 & n_458X))) { + if ((19 == (31 & ((((*((long *) ((((char *) (-3 + n_458X))) + -4))))>>2))))) { + goto L28548;} + else { + goto L28523;}} + else { + goto L28523;}}} + break; + case 47 : { + n_459X = SvalS; + if ((0 == (3 & n_459X))) { + goto L28747;} + else { + if ((3 == (3 & n_459X))) { + if ((19 == (31 & ((((*((long *) ((((char *) (-3 + n_459X))) + -4))))>>2))))) { + goto L28747;} + else { + goto L28722;}} + else { + goto L28722;}}} + break; + case 48 : { + n_460X = SvalS; + if ((0 == (3 & n_460X))) { + goto L28946;} + else { + if ((3 == (3 & n_460X))) { + if ((19 == (31 & ((((*((long *) ((((char *) (-3 + n_460X))) + -4))))>>2))))) { + goto L28946;} + else { + goto L28921;}} + else { + goto L28921;}}} + break; + case 49 : { + x_461X = SvalS; + if ((0 == (3 & x_461X))) { + SvalS = 5; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_461X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;}} + break; + case 50 : { + x_462X = SvalS; + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_462X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + break; + case 51 : { + x_463X = SvalS; + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_463X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + break; + case 52 : { + SstackS = ((SstackS) + 4); + x_464X = *((long *) (SstackS)); + y_465X = SvalS; + if ((0 == (3 & (x_464X | y_465X)))) { + z_466X = (((x_464X)>>2)) + (((y_465X)>>2)); + if ((536870911 < z_466X)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_464X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = y_465X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + if ((z_466X < -536870912)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_464X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = y_465X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + SvalS = (((z_466X)<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_464X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = y_465X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 53 : { + SstackS = ((SstackS) + 4); + arg2_467X = *((long *) (SstackS)); + x_468X = SvalS; + if ((0 == (3 & (arg2_467X | x_468X)))) { + a_469X = ((arg2_467X)>>2); + b_470X = ((x_468X)>>2); + if ((a_469X < 0)) { + arg0K0 = (0 - a_469X); + goto L6775;} + else { + arg0K0 = a_469X; + goto L6775;}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_467X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_468X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 54 : { + SstackS = ((SstackS) + 4); + x_471X = *((long *) (SstackS)); + y_472X = SvalS; + if ((0 == (3 & (x_471X | y_472X)))) { + z_473X = (((x_471X)>>2)) - (((y_472X)>>2)); + if ((536870911 < z_473X)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_471X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = y_472X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + if ((z_473X < -536870912)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_471X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = y_472X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + SvalS = (((z_473X)<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_471X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = y_472X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 55 : { + SstackS = ((SstackS) + 4); + arg2_474X = *((long *) (SstackS)); + x_475X = SvalS; + if ((0 == (3 & (arg2_474X | x_475X)))) { + if ((0 == x_475X)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_474X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_475X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + a_476X = ((arg2_474X)>>2); + b_477X = ((x_475X)>>2); + if ((a_476X < 0)) { + arg0K0 = (0 - a_476X); + goto L7056;} + else { + arg0K0 = a_476X; + goto L7056;}}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_474X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_475X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 56 : { + SstackS = ((SstackS) + 4); + arg2_478X = *((long *) (SstackS)); + x_479X = SvalS; + if ((0 == (3 & (arg2_478X | x_479X)))) { + if ((arg2_478X == x_479X)) { + arg0K0 = 5; + goto L31744;} + else { + arg0K0 = 1; + goto L31744;}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_478X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_479X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 57 : { + SstackS = ((SstackS) + 4); + arg2_480X = *((long *) (SstackS)); + x_481X = SvalS; + if ((0 == (3 & (arg2_480X | x_481X)))) { + if ((arg2_480X < x_481X)) { + arg0K0 = 5; + goto L31822;} + else { + arg0K0 = 1; + goto L31822;}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_480X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_481X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 58 : { + SstackS = ((SstackS) + 4); + arg2_482X = *((long *) (SstackS)); + x_483X = SvalS; + if ((0 == (3 & (arg2_482X | x_483X)))) { + if ((x_483X < arg2_482X)) { + arg0K0 = 5; + goto L31900;} + else { + arg0K0 = 1; + goto L31900;}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_482X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_483X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 59 : { + SstackS = ((SstackS) + 4); + arg2_484X = *((long *) (SstackS)); + x_485X = SvalS; + if ((0 == (3 & (arg2_484X | x_485X)))) { + if ((x_485X < arg2_484X)) { + arg0K0 = 1; + goto L31978;} + else { + arg0K0 = 5; + goto L31978;}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_484X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_485X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 60 : { + SstackS = ((SstackS) + 4); + arg2_486X = *((long *) (SstackS)); + x_487X = SvalS; + if ((0 == (3 & (arg2_486X | x_487X)))) { + if ((arg2_486X < x_487X)) { + arg0K0 = 1; + goto L32056;} + else { + arg0K0 = 5; + goto L32056;}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_486X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_487X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 61 : { + SstackS = ((SstackS) + 4); + arg2_488X = *((long *) (SstackS)); + x_489X = SvalS; + if ((0 == (3 & (arg2_488X | x_489X)))) { + if ((0 == x_489X)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_488X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_489X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + a_490X = ((arg2_488X)>>2); + b_491X = ((x_489X)>>2); + if ((a_490X < 0)) { + arg0K0 = (0 - a_490X); + goto L7233;} + else { + arg0K0 = a_490X; + goto L7233;}}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_488X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_489X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 62 : { + SstackS = ((SstackS) + 4); + x_492X = *((long *) (SstackS)); + y_493X = SvalS; + if ((0 == (3 & (x_492X | y_493X)))) { + if ((0 == y_493X)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_492X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = y_493X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + a_494X = ((x_492X)>>2); + if ((a_494X < 0)) { + arg0K0 = (0 - a_494X); + goto L25338;} + else { + arg0K0 = a_494X; + goto L25338;}}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_492X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = y_493X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 63 : { + x_495X = SvalS; + if ((0 == (3 & x_495X))) { + SvalS = x_495X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_495X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;}} + break; + case 64 : { + x_496X = SvalS; + if ((0 == (3 & x_496X))) { + SvalS = x_496X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_496X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;}} + break; + case 65 : { + x_497X = SvalS; + if ((0 == (3 & x_497X))) { + SvalS = 4; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_497X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;}} + break; + case 66 : { + x_498X = SvalS; + if ((0 == (3 & x_498X))) { + SvalS = x_498X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_498X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;}} + break; + case 67 : { + x_499X = SvalS; + if ((0 == (3 & x_499X))) { + SvalS = 0; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_499X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;}} + break; + case 68 : { + x_500X = SvalS; + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_500X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + break; + case 69 : { + x_501X = SvalS; + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_501X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + break; + case 70 : { + x_502X = SvalS; + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_502X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + break; + case 71 : { + x_503X = SvalS; + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_503X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + break; + case 72 : { + x_504X = SvalS; + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_504X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + break; + case 73 : { + x_505X = SvalS; + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_505X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + break; + case 74 : { + x_506X = SvalS; + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_506X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + break; + case 75 : { + x_507X = SvalS; + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_507X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + break; + case 76 : { + x_508X = SvalS; + if ((0 == (3 & x_508X))) { + if ((x_508X < 0)) { + goto L38295;} + else { + SvalS = 0; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}} + else { + goto L38295;}} + break; + case 77 : { + n_509X = SvalS; + if ((0 == (3 & n_509X))) { + n_510X = ((n_509X)>>2); + if ((n_510X < 0)) { + arg0K0 = (0 - n_510X); + goto L25624;} + else { + arg0K0 = n_510X; + goto L25624;}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = n_509X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;}} + break; + case 78 : { + SstackS = ((SstackS) + 4); + arg2_511X = *((long *) (SstackS)); + x_512X = SvalS; + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_511X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_512X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + break; + case 79 : { + SstackS = ((SstackS) + 4); + arg2_513X = *((long *) (SstackS)); + x_514X = SvalS; + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_513X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_514X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + break; + case 80 : { + SstackS = ((SstackS) + 4); + arg2_515X = *((long *) (SstackS)); + x_516X = SvalS; + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_515X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_516X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + break; + case 81 : { + x_517X = SvalS; + if ((0 == (3 & x_517X))) { + SvalS = (~ (3 | x_517X)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_517X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;}} + break; + case 82 : { + SstackS = ((SstackS) + 4); + arg2_518X = *((long *) (SstackS)); + x_519X = SvalS; + if ((0 == (3 & (arg2_518X | x_519X)))) { + SvalS = (arg2_518X & x_519X); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_518X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_519X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 83 : { + SstackS = ((SstackS) + 4); + arg2_520X = *((long *) (SstackS)); + x_521X = SvalS; + if ((0 == (3 & (arg2_520X | x_521X)))) { + SvalS = (arg2_520X | x_521X); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_520X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_521X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 84 : { + SstackS = ((SstackS) + 4); + arg2_522X = *((long *) (SstackS)); + x_523X = SvalS; + if ((0 == (3 & (arg2_522X | x_523X)))) { + SvalS = (arg2_522X ^ x_523X); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_522X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_523X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 85 : { + SstackS = ((SstackS) + 4); + x_524X = *((long *) (SstackS)); + y_525X = SvalS; + if ((0 == (3 & (x_524X | y_525X)))) { + value_526X = ((x_524X)>>2); + count_527X = ((y_525X)>>2); + if ((count_527X < 0)) { + PS_SHIFT_RIGHT(value_526X, (0 - count_527X), x_528X) + SvalS = (((x_528X)<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + PS_SHIFT_LEFT(value_526X, count_527X, x_529X) + result_530X = (((((x_529X)<<2)))>>2); + PS_SHIFT_RIGHT(result_530X, count_527X, x_531X) + if ((value_526X == x_531X)) { + if ((value_526X < 0)) { + if ((result_530X < 0)) { + goto L25903;} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_524X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = y_525X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + else { + if ((result_530X < 0)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_524X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = y_525X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + goto L25903;}}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_524X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = y_525X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_524X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = y_525X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 86 : { + x_532X = SvalS; + if ((9 == (255 & x_532X))) { + arg0K0 = 5; + goto L38383;} + else { + arg0K0 = 1; + goto L38383;}} + break; + case 87 : { + SstackS = ((SstackS) + 4); + arg2_533X = *((long *) (SstackS)); + if ((9 == (255 & arg2_533X))) { + if ((9 == (255 & (SvalS)))) { + x_534X = SvalS; + if ((arg2_533X == x_534X)) { + arg0K0 = 5; + goto L28166;} + else { + arg0K0 = 1; + goto L28166;}} + else { + goto L28139;}} + else { + goto L28139;}} + break; + case 88 : { + SstackS = ((SstackS) + 4); + arg2_535X = *((long *) (SstackS)); + if ((9 == (255 & arg2_535X))) { + if ((9 == (255 & (SvalS)))) { + x_536X = SvalS; + if ((arg2_535X < x_536X)) { + arg0K0 = 5; + goto L28076;} + else { + arg0K0 = 1; + goto L28076;}} + else { + goto L28049;}} + else { + goto L28049;}} + break; + case 89 : { + if ((9 == (255 & (SvalS)))) { + SvalS = (((((((((SvalS))>>8)))))<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;}} + break; + case 90 : { + if ((0 == (3 & (SvalS)))) { + x_537X = (((SvalS))>>2); + if ((255 < x_537X)) { + goto L32748;} + else { + if ((x_537X < 0)) { + goto L32748;} + else { + SvalS = (9 + (((((x_537X)))<<8))); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;}} + break; + case 91 : { + x_538X = SvalS; + if ((21 == x_538X)) { + arg0K0 = 5; + goto L38412;} + else { + arg0K0 = 1; + goto L38412;}} + break; + case 92 : { + x_539X = SvalS; + type_540X = *((unsigned char *) ((Scode_pointerS) + 1)); + if ((3 == (3 & x_539X))) { + if (((31 & ((((*((long *) ((((char *) (-3 + x_539X))) + -4))))>>2))) == type_540X)) { + arg0K0 = 5; + goto L38426;} + else { + arg0K0 = 1; + goto L38426;}} + else { + arg0K0 = 1; + goto L38426;}} + break; + case 93 : { + stob_541X = SvalS; + type_542X = *((unsigned char *) ((Scode_pointerS) + 1)); + if ((3 == (3 & stob_541X))) { + if (((31 & ((((*((long *) ((((char *) (-3 + stob_541X))) + -4))))>>2))) == type_542X)) { + SvalS = (-4 & (3 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + stob_541X))) + -4))))>>8)))); + Scode_pointerS = ((Scode_pointerS) + 2); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + goto L21229;}} + else { + goto L21229;}} + break; + case 94 : { + len_543X = *((unsigned char *) ((Scode_pointerS) + 1)); + space_544X = 4 + (((len_543X)<<2)); + v_545X = AVAILABLEp(space_544X); + if (v_545X) { + goto L21301;} + else { + collect_saving_temps(1, 1, &temp1_546X); + v_547X = AVAILABLEp(space_544X); + if (v_547X) { + goto L21301;} + else { + ps_error("Scheme48 heap overflow", 0); + goto L21301;}}} + break; + case 95 : { + SstackS = ((SstackS) + 4); + len_548X = (((*((long *) (SstackS))))>>2); + space_549X = 4 + (((len_548X)<<2)); + v_550X = AVAILABLEp(space_549X); + if (v_550X) { + goto L21483;} + else { + collect_saving_temps(1, 1, &temp1_551X); + v_552X = AVAILABLEp(space_549X); + if (v_552X) { + goto L21483;} + else { + ps_error("Scheme48 heap overflow", 0); + goto L21483;}}} + break; + case 96 : { + stob_553X = SvalS; + offset_554X = *((unsigned char *) ((Scode_pointerS) + 2)); + type_555X = *((unsigned char *) ((Scode_pointerS) + 1)); + if ((3 == (3 & stob_553X))) { + if (((31 & ((((*((long *) ((((char *) (-3 + stob_553X))) + -4))))>>2))) == type_555X)) { + SvalS = (*((long *) ((((char *) (-3 + stob_553X))) + (((offset_554X)<<2))))); + Scode_pointerS = ((Scode_pointerS) + 3); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + goto L21693;}} + else { + goto L21693;}} + break; + case 97 : { + SstackS = ((SstackS) + 4); + stob_556X = *((long *) (SstackS)); + value_557X = SvalS; + offset_558X = *((unsigned char *) ((Scode_pointerS) + 2)); + type_559X = *((unsigned char *) ((Scode_pointerS) + 1)); + if ((3 == (3 & stob_556X))) { + if (((31 & ((((*((long *) ((((char *) (-3 + stob_556X))) + -4))))>>2))) == type_559X)) { + if ((3 == (3 & stob_556X))) { + if ((0 == (128 & (*((long *) ((((char *) (-3 + stob_556X))) + -4)))))) { + addr_560X = (((char *) (-3 + stob_556X))) + (((offset_558X)<<2)); + S48_WRITE_BARRIER(stob_556X, addr_560X, value_557X); + *((long *) addr_560X) = value_557X; + SvalS = 13; + Scode_pointerS = ((Scode_pointerS) + 3); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + goto L21796;}} + else { + goto L21796;}} + else { + goto L21796;}} + else { + goto L21796;}} + break; + case 98 : { + SstackS = ((SstackS) + 4); + len_561X = *((long *) (SstackS)); + init_562X = SvalS; + type_563X = *((unsigned char *) ((Scode_pointerS) + 1)); + if ((0 == (3 & len_561X))) { + len_564X = ((len_561X)>>2); + size_565X = 1 + len_564X; + if ((len_564X < 0)) { + goto L21981;} + else { + if ((4194305 < size_565X)) { + goto L21981;} + else { + v_566X = AVAILABLEp(size_565X); + if (v_566X) { + arg2K0 = 1; + arg0K1 = init_562X; + goto L21999;} + else { + temp0_567X = collect_saving_temps(init_562X, 1, &temp1_568X); + v_569X = AVAILABLEp(size_565X); + if (v_569X) { + arg2K0 = 1; + arg0K1 = temp0_567X; + goto L21999;} + else { + arg2K0 = 0; + arg0K1 = temp0_567X; + goto L21999;}}}}} + else { + push_exception_continuationB(5, 2); + *((long *) (SstackS)) = (((type_563X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = len_561X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = init_562X; + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;}} + break; + case 99 : { + SstackS = ((SstackS) + 4); + stob_570X = *((long *) (SstackS)); + index_571X = SvalS; + type_572X = *((unsigned char *) ((Scode_pointerS) + 1)); + if ((0 == (3 & index_571X))) { + if ((3 == (3 & stob_570X))) { + if (((31 & ((((*((long *) ((((char *) (-3 + stob_570X))) + -4))))>>2))) == type_572X)) { + len_573X = (((3 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + stob_570X))) + -4))))>>8))))>>2); + index_574X = ((index_571X)>>2); + if ((index_574X < 0)) { + goto L22277;} + else { + if ((index_574X < len_573X)) { + SvalS = (*((long *) ((((char *) (-3 + stob_570X))) + (-4 & index_571X)))); + Scode_pointerS = ((Scode_pointerS) + 2); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + goto L22277;}}} + else { + goto L22254;}} + else { + goto L22254;}} + else { + goto L22254;}} + break; + case 100 : { + SstackS = ((SstackS) + 4); + arg2_575X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + stob_576X = *((long *) (SstackS)); + value_577X = SvalS; + type_578X = *((unsigned char *) ((Scode_pointerS) + 1)); + if ((0 == (3 & arg2_575X))) { + if ((3 == (3 & stob_576X))) { + if (((31 & ((((*((long *) ((((char *) (-3 + stob_576X))) + -4))))>>2))) == type_578X)) { + if ((3 == (3 & stob_576X))) { + if ((0 == (128 & (*((long *) ((((char *) (-3 + stob_576X))) + -4)))))) { + len_579X = (((3 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + stob_576X))) + -4))))>>8))))>>2); + index_580X = ((arg2_575X)>>2); + if ((index_580X < 0)) { + goto L22517;} + else { + if ((index_580X < len_579X)) { + addr_581X = (((char *) (-3 + stob_576X))) + (-4 & arg2_575X); + S48_WRITE_BARRIER(stob_576X, addr_581X, value_577X); + *((long *) addr_581X) = value_577X; + SvalS = 13; + Scode_pointerS = ((Scode_pointerS) + 2); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + goto L22517;}}} + else { + goto L22492;}} + else { + goto L22492;}} + else { + goto L22492;}} + else { + goto L22492;}} + else { + goto L22492;}} + break; + case 101 : { + SstackS = ((SstackS) + 4); + arg2_582X = *((long *) (SstackS)); + if ((0 == (3 & (arg2_582X | (SvalS))))) { + len_583X = ((arg2_582X)>>2); + init_584X = (((SvalS))>>2); + size_585X = 1 + ((((3 + len_583X))>>2)); + if ((len_583X < 0)) { + goto L26074;} + else { + if ((4194305 < size_585X)) { + goto L26074;} + else { + v_586X = AVAILABLEp(size_585X); + if (v_586X) { + goto L26166;} + else { + collect_saving_temps(1, 1, &temp1_587X); + v_588X = AVAILABLEp(size_585X); + if (v_588X) { + goto L26166;} + else { + push_exception_continuationB(8, 1); + *((long *) (SstackS)) = (((len_583X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((init_584X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}}}}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_582X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 102 : { + obj_589X = SvalS; + if ((3 == (3 & obj_589X))) { + if ((17 == (31 & ((((*((long *) ((((char *) (-3 + obj_589X))) + -4))))>>2))))) { + SvalS = (((((long)(((unsigned long)(*((long *) ((((char *) (-3 + (SvalS)))) + -4))))>>8)))<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + goto L36239;}} + else { + goto L36239;}} + break; + case 103 : { + SstackS = ((SstackS) + 4); + arg2_590X = *((long *) (SstackS)); + if ((3 == (3 & arg2_590X))) { + if ((17 == (31 & ((((*((long *) ((((char *) (-3 + arg2_590X))) + -4))))>>2))))) { + if ((0 == (3 & (SvalS)))) { + index_591X = (((SvalS))>>2); + len_592X = (long)(((unsigned long)(*((long *) ((((char *) (-3 + arg2_590X))) + -4))))>>8); + if ((index_591X < 0)) { + goto L32854;} + else { + if ((index_591X < len_592X)) { + SvalS = ((((*((unsigned char *) ((((char *) (-3 + arg2_590X))) + index_591X))))<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + goto L32854;}}} + else { + goto L35818;}} + else { + goto L35818;}} + else { + goto L35818;}} + break; + case 104 : { + SstackS = ((SstackS) + 4); + arg2_593X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + arg3_594X = *((long *) (SstackS)); + if ((3 == (3 & arg3_594X))) { + if ((17 == (31 & ((((*((long *) ((((char *) (-3 + arg3_594X))) + -4))))>>2))))) { + if ((0 == (3 & (arg2_593X | (SvalS))))) { + index_595X = ((arg2_593X)>>2); + Kchar_596X = (((SvalS))>>2); + if ((3 == (3 & arg3_594X))) { + if ((0 == (128 & (*((long *) ((((char *) (-3 + arg3_594X))) + -4)))))) { + len_597X = (long)(((unsigned long)(*((long *) ((((char *) (-3 + arg3_594X))) + -4))))>>8); + if ((index_595X < 0)) { + goto L29802;} + else { + if ((index_595X < len_597X)) { + *((unsigned char *) ((((char *) (-3 + arg3_594X))) + index_595X)) = Kchar_596X; + SvalS = 13; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + goto L29802;}}} + else { + goto L29781;}} + else { + goto L29781;}} + else { + goto L34230;}} + else { + goto L34230;}} + else { + goto L34230;}} + break; + case 105 : { + SstackS = ((SstackS) + 4); + arg2_598X = *((long *) (SstackS)); + if ((0 == (3 & arg2_598X))) { + if ((9 == (255 & (SvalS)))) { + len_599X = ((arg2_598X)>>2); + init_600X = ((((SvalS))>>8)); + size_601X = 1 + ((((4 + len_599X))>>2)); + if ((len_599X < 0)) { + goto L26308;} + else { + if ((4194305 < size_601X)) { + goto L26308;} + else { + v_602X = AVAILABLEp(size_601X); + if (v_602X) { + goto L26400;} + else { + collect_saving_temps(1, 1, &temp1_603X); + v_604X = AVAILABLEp(size_601X); + if (v_604X) { + goto L26400;} + else { + push_exception_continuationB(8, 1); + *((long *) (SstackS)) = (((len_599X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (9 + ((((init_600X))<<8))); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}}}}} + else { + goto L32935;}} + else { + goto L32935;}} + break; + case 106 : { + obj_605X = SvalS; + if ((3 == (3 & obj_605X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + obj_605X))) + -4))))>>2))))) { + SvalS = (-4 + (((((long)(((unsigned long)(*((long *) ((((char *) (-3 + (SvalS)))) + -4))))>>8)))<<2))); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + goto L36289;}} + else { + goto L36289;}} + break; + case 107 : { + SstackS = ((SstackS) + 4); + arg2_606X = *((long *) (SstackS)); + if ((3 == (3 & arg2_606X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + arg2_606X))) + -4))))>>2))))) { + if ((0 == (3 & (SvalS)))) { + index_607X = (((SvalS))>>2); + len_608X = -1 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + arg2_606X))) + -4))))>>8)); + if ((index_607X < 0)) { + goto L32998;} + else { + if ((index_607X < len_608X)) { + SvalS = (9 + ((((((*((unsigned char *) ((((char *) (-3 + arg2_606X))) + index_607X))))))<<8))); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + goto L32998;}}} + else { + goto L35914;}} + else { + goto L35914;}} + else { + goto L35914;}} + break; + case 108 : { + SstackS = ((SstackS) + 4); + arg2_609X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + arg3_610X = *((long *) (SstackS)); + if ((3 == (3 & arg3_610X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + arg3_610X))) + -4))))>>2))))) { + if ((0 == (3 & arg2_609X))) { + if ((9 == (255 & (SvalS)))) { + index_611X = ((arg2_609X)>>2); + Kchar_612X = ((((SvalS))>>8)); + if ((3 == (3 & arg3_610X))) { + if ((0 == (128 & (*((long *) ((((char *) (-3 + arg3_610X))) + -4)))))) { + len_613X = -1 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + arg3_610X))) + -4))))>>8)); + if ((index_611X < 0)) { + goto L29957;} + else { + if ((index_611X < len_613X)) { + *((unsigned char *) ((((char *) (-3 + arg3_610X))) + index_611X)) = (Kchar_612X); + SvalS = 13; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + goto L29957;}}} + else { + goto L29936;}} + else { + goto L29936;}} + else { + goto L34356;}} + else { + goto L34356;}} + else { + goto L34356;}} + else { + goto L34356;}} + break; + case 109 : { + v_614X = AVAILABLEp(3); + if (v_614X) { + goto L24478;} + else { + collect_saving_temps(1, 1, &temp1_615X); + v_616X = AVAILABLEp(3); + if (v_616X) { + goto L24478;} + else { + ps_error("Scheme48 heap overflow", 0); + goto L24478;}}} + break; + case 110 : { + obj_617X = SvalS; + if ((3 == (3 & obj_617X))) { + if ((4 == (31 & ((((*((long *) ((((char *) (-3 + obj_617X))) + -4))))>>2))))) { + x_618X = SvalS; + descriptor_619X = *((long *) ((((char *) (-3 + x_618X))) + 4)); + if ((17 == (255 & descriptor_619X))) { + if ((529 == (*((long *) ((((char *) (-3 + x_618X))) + 4))))) { + arg0K0 = 5; + goto L33976;} + else { + arg0K0 = 1; + goto L33976;}} + else { + arg0K0 = 5; + goto L33976;}} + else { + goto L33957;}} + else { + goto L33957;}} + break; + case 111 : { + SstackS = ((SstackS) + 4); + arg2_620X = *((long *) (SstackS)); + if ((3 == (3 & arg2_620X))) { + if ((4 == (31 & ((((*((long *) ((((char *) (-3 + arg2_620X))) + -4))))>>2))))) { + x_621X = SvalS; + if ((1 == x_621X)) { + goto L29544;} + else { + if ((5 == x_621X)) { + goto L29544;} + else { + goto L29551;}}} + else { + goto L29551;}} + else { + goto L29551;}} + break; + case 112 : { + x_622X = SvalS; + if ((3 == (3 & x_622X))) { + if ((0 == (128 & (*((long *) ((((char *) (-3 + x_622X))) + -4)))))) { + arg0K0 = 1; + goto L38498;} + else { + arg0K0 = 5; + goto L38498;}} + else { + arg0K0 = 5; + goto L38498;}} + break; + case 113 : { + x_623X = SvalS; + if ((3 == (3 & x_623X))) { + if ((0 == (128 & (*((long *) ((((char *) (-3 + x_623X))) + -4)))))) { + *((long *) ((((char *) (-3 + x_623X))) + -4)) = (128 | (*((long *) ((((char *) (-3 + x_623X))) + -4)))); + goto L33080;} + else { + goto L33080;}} + else { + goto L33080;}} + break; + case 114 : { + v_624X = AVAILABLEp(72); + if (v_624X) { + arg2K0 = 1; + arg0K1 = 0; + goto L33131;} + else { + collect_saving_temps(1, 1, &temp1_625X); + v_626X = AVAILABLEp(72); + if (v_626X) { + arg2K0 = 1; + arg0K1 = 0; + goto L33131;} + else { + arg2K0 = 0; + arg0K1 = 0; + goto L33131;}}} + break; + case 115 : { + v_627X = AVAILABLEp(66); + if (v_627X) { + arg2K0 = 1; + arg0K1 = 0; + goto L34474;} + else { + collect_saving_temps(1, 1, &temp1_628X); + v_629X = AVAILABLEp(66); + if (v_629X) { + arg2K0 = 1; + arg0K1 = 0; + goto L34474;} + else { + arg2K0 = 0; + arg0K1 = 0; + goto L34474;}}} + break; + case 116 : { + v_630X = AVAILABLEp(66); + if (v_630X) { + arg2K0 = 1; + arg0K1 = 0; + goto L37343;} + else { + collect_saving_temps(1, 1, &temp1_631X); + v_632X = AVAILABLEp(66); + if (v_632X) { + arg2K0 = 1; + arg0K1 = 0; + goto L37343;} + else { + arg2K0 = 0; + arg0K1 = 0; + goto L37343;}}} + break; + case 117 : { + v_633X = AVAILABLEp(66); + if (v_633X) { + arg2K0 = 1; + arg0K1 = 0; + goto L37603;} + else { + collect_saving_temps(1, 1, &temp1_634X); + v_635X = AVAILABLEp(66); + if (v_635X) { + arg2K0 = 1; + arg0K1 = 0; + goto L37603;} + else { + arg2K0 = 0; + arg0K1 = 0; + goto L37603;}}} + break; + case 118 : { + obj_636X = SvalS; + if ((3 == (3 & obj_636X))) { + if ((5 == (31 & ((((*((long *) ((((char *) (-3 + obj_636X))) + -4))))>>2))))) { + channel_637X = SvalS; + head_638X = Spending_channels_headS; + if ((1 == head_638X)) { + addr_639X = (((char *) (-3 + channel_637X))) + 16; + S48_WRITE_BARRIER(channel_637X, addr_639X, 1); + *((long *) addr_639X) = 1; + n_640X = ps_abort_fd_op(((((*((long *) ((((char *) (-3 + channel_637X))) + 8))))>>2))); + arg0K0 = (((n_640X)<<2)); + goto L33202;} + else { + if ((channel_637X == head_638X)) { + channel_641X = Spending_channels_headS; + next_642X = *((long *) ((((char *) (-3 + channel_641X))) + 12)); + Spending_channels_headS = next_642X; + addr_643X = (((char *) (-3 + channel_641X))) + 12; + S48_WRITE_BARRIER(channel_641X, addr_643X, 1); + *((long *) addr_643X) = 1; + if ((1 == next_642X)) { + Spending_channels_tailS = 1; + goto L8173;} + else { + goto L8173;}} + else { + arg0K0 = (*((long *) ((((char *) (-3 + head_638X))) + 12))); + arg0K1 = head_638X; + goto L8179;}}} + else { + goto L33185;}} + else { + goto L33185;}} + break; + case 119 : { + space_644X = 3 * (Snumber_of_channelsS); + v_645X = AVAILABLEp(space_644X); + if (v_645X) { + goto L14777;} + else { + collect_saving_temps(1, 1, &temp1_646X); + v_647X = AVAILABLEp(space_644X); + if (v_647X) { + goto L14777;} + else { + ps_error("Scheme48 heap overflow", 0); + goto L14777;}}} + break; + case 120 : { + SvalS = 529; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 121 : { + SvalS = 13; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 122 : { + x_648X = SvalS; + push_exception_continuationB(16, 1); + *((long *) (SstackS)) = x_648X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + break; + case 123 : { + SvalS = 1; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 124 : { + SvalS = 21; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 125 : { + v_649X = AVAILABLEp(66); + if (v_649X) { + arg2K0 = 1; + arg0K1 = 0; + goto L34575;} + else { + collect_saving_temps(1, 1, &temp1_650X); + v_651X = AVAILABLEp(66); + if (v_651X) { + arg2K0 = 1; + arg0K1 = 0; + goto L34575;} + else { + arg2K0 = 0; + arg0K1 = 0; + goto L34575;}}} + break; + case 126 : { + SvalS = 13; + collect_saving_temps(0, 0, &v_652X); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 127 : { + obj_653X = SvalS; + if ((3 == (3 & obj_653X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + obj_653X))) + -4))))>>2))))) { + x_654X = SvalS; + n_655X = -1 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + x_654X))) + -4))))>>8)); + arg0K0 = 0; + arg0K1 = 0; + goto L35407;} + else { + goto L35384;}} + else { + goto L35384;}} + break; + case 128 : { + v_656X = AVAILABLEp(6); + if (v_656X) { + goto L38564;} + else { + collect_saving_temps(1, 1, &temp1_657X); + v_658X = AVAILABLEp(6); + if (v_658X) { + goto L38564;} + else { + ps_error("Scheme48 heap overflow", 0); + goto L38564;}}} + break; + case 129 : { + SstackS = ((SstackS) + 4); + arg2_659X = *((long *) (SstackS)); + if ((0 == (3 & arg2_659X))) { + key_660X = ((arg2_659X)>>2); + other_661X = SvalS; + if ((5 == key_660X)) { + SvalS = (-4 & other_661X); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + if ((0 == key_660X)) { + x_662X = s48_available(); + SvalS = (((x_662X)<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + if ((1 == key_660X)) { + bytes_663X = s48_heap_size(); + SvalS = (-4 & (3 + bytes_663X)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + if ((2 == key_660X)) { + SvalS = (((((Sstack_endS) - (Sstack_beginS)))<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + if ((3 == key_660X)) { + x_664X = s48_gc_count(); + SvalS = (((x_664X)<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + if ((4 == key_660X)) { + push_exception_continuationB(15, 1); + *((long *) (SstackS)) = (((key_660X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = other_661X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + push_exception_continuationB(18, 1); + *((long *) (SstackS)) = (((key_660X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = other_661X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}}}}}}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_659X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 130 : { + if ((0 == (3 & (SvalS)))) { + type_665X = (((SvalS))>>2); + arg2K0 = 1; + goto L33293;} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;}} + break; + case 131 : { + x_666X = SvalS; + arg2K0 = 1; + arg0K1 = x_666X; + goto L38614;} + break; + case 132 : { + SvalS = (Scurrent_threadS); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 133 : { + Scurrent_threadS = (SvalS); + SvalS = 13; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 134 : { + SvalS = (Ssession_dataS); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 135 : { + Ssession_dataS = (SvalS); + SvalS = 13; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 136 : { + obj_667X = SvalS; + if ((3 == (3 & obj_667X))) { + if ((2 == (31 & ((((*((long *) ((((char *) (-3 + obj_667X))) + -4))))>>2))))) { + if ((((((3 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + (SvalS)))) + -4))))>>8))))>>2)) < 160)) { + goto L20570;} + else { + temp_668X = Sexception_handlersS; + Sexception_handlersS = (SvalS); + SvalS = temp_668X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}} + else { + goto L20570;}} + else { + goto L20570;}} + break; + case 137 : { + SstackS = ((SstackS) + 4); + p_669X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + template_670X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + SstackS = ((SstackS) + 4); + p_671X = *((long *) (SstackS)); + StemplateS = template_670X; + Scode_pointerS = ((((char *) (-3 + (*((long *) (((char *) (-3 + template_670X)))))))) + ((((((((((p_669X)>>2)) + (((p_671X)>>2))))<<2)))>>2))); + arg1K0 = (Scode_pointerS); + goto L18438;} + break; + case 138 : { + obj_672X = SvalS; + if ((3 == (3 & obj_672X))) { + if ((2 == (31 & ((((*((long *) ((((char *) (-3 + obj_672X))) + -4))))>>2))))) { + if ((((((3 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + (SvalS)))) + -4))))>>8))))>>2)) < 5)) { + goto L19494;} + else { + temp_673X = Sinterrupt_handlersS; + Sinterrupt_handlersS = (SvalS); + SvalS = temp_673X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}} + else { + goto L19494;}} + else { + goto L19494;}} + break; + case 139 : { + old_674X = Senabled_interruptsS; + p_675X = SvalS; + Senabled_interruptsS = (((p_675X)>>2)); + if ((0 == ((Spending_interruptsS) & (Senabled_interruptsS)))) { + s48_Spending_interruptPS = 0; + if ((s48_Spending_eventsPS)) { + s48_Spending_interruptPS = 1; + goto L38655;} + else { + goto L38655;}} + else { + s48_Spending_interruptPS = 1; + goto L38655;}} + break; + case 140 : { + SstackS = ((SstackS) + 4); + p_676X = *((long *) (SstackS)); + Senabled_interruptsS = (((p_676X)>>2)); + if ((0 == ((Spending_interruptsS) & (Senabled_interruptsS)))) { + s48_Spending_interruptPS = 0; + if ((s48_Spending_eventsPS)) { + s48_Spending_interruptPS = 1; + goto L18452;} + else { + goto L18452;}} + else { + s48_Spending_interruptPS = 1; + goto L18452;}} + break; + case 141 : { + if ((0 == (3 & (SvalS)))) { + p_677X = SvalS; + Spending_interruptsS = (-2 & (Spending_interruptsS)); + if ((0 == ((Spending_interruptsS) & (Senabled_interruptsS)))) { + s48_Spending_interruptPS = 0; + if ((s48_Spending_eventsPS)) { + s48_Spending_interruptPS = 1; + goto L37163;} + else { + goto L37163;}} + else { + s48_Spending_interruptPS = 1; + goto L37163;}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;}} + break; + case 142 : { + SstackS = ((SstackS) + 4); + arg2_678X = *((long *) (SstackS)); + if ((0 == (3 & arg2_678X))) { + x_679X = SvalS; + if ((1 == x_679X)) { + goto L34103;} + else { + if ((5 == x_679X)) { + goto L34103;} + else { + goto L34108;}}} + else { + goto L34108;}} + break; + case 143 : { + SstackS = ((SstackS) + 4); + nargs_680X = (((*((long *) (SstackS))))>>2); + SstackS = ((SstackS) + 4); + p_681X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + rest_list_682X = *((long *) (SstackS)); + if ((12 < nargs_680X)) { + push_exception_continuationB(20, (1 + (*((long *) ((SstackS) + (-4 & p_681X)))))); + *((long *) (SstackS)) = nargs_680X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + else { + arg0K0 = rest_list_682X; + goto L22787;}} + break; + case 144 : { + v_683X = AVAILABLEp(5); + if (v_683X) { + arg2K0 = 1; + arg0K1 = 0; + goto L33402;} + else { + collect_saving_temps(1, 1, &temp1_684X); + v_685X = AVAILABLEp(5); + if (v_685X) { + arg2K0 = 1; + arg0K1 = 0; + goto L33402;} + else { + arg2K0 = 0; + arg0K1 = 0; + goto L33402;}}} + break; + case 146 : { + SstackS = ((SstackS) + 4); + arg2_686X = *((long *) (SstackS)); + if ((3 == (3 & arg2_686X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + arg2_686X))) + -4))))>>2))))) { + x_687X = SvalS; + if ((1 == x_687X)) { + goto L23905;} + else { + if ((5 == x_687X)) { + goto L23905;} + else { + goto L23910;}}} + else { + goto L23910;}} + else { + goto L23910;}} + break; + case 147 : { + SstackS = ((SstackS) + 4); + arg2_688X = *((long *) (SstackS)); + if ((0 == (3 & arg2_688X))) { + option_689X = ((arg2_688X)>>2); + other_690X = SvalS; + if ((2 == option_689X)) { + x_691X = CHEAP_TIME(); + SvalS = (((x_691X)<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + if ((0 == option_689X)) { + seconds_692X = s48_run_time(&mseconds_693X); + arg0K0 = option_689X; + arg0K1 = seconds_692X; + arg0K2 = mseconds_693X; + goto L35318;} + else { + if ((1 == option_689X)) { + seconds_694X = s48_real_time(&mseconds_695X); + arg0K0 = option_689X; + arg0K1 = seconds_694X; + arg0K2 = mseconds_695X; + goto L35318;} + else { + push_exception_continuationB(18, 1); + *((long *) (SstackS)) = (((option_689X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = other_690X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}}}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_688X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 148 : { + SstackS = ((SstackS) + 4); + arg2_696X = *((long *) (SstackS)); + if ((0 == (3 & arg2_696X))) { + key_697X = ((arg2_696X)>>2); + value_698X = SvalS; + status_699X = s48_extended_vm(key_697X, value_698X); + if ((0 == status_699X)) { + SvalS = (s48_Sextension_valueS); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + if ((1 == status_699X)) { + push_exception_continuationB(23, 1); + *((long *) (SstackS)) = (((key_697X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = value_698X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + push_exception_continuationB(24, 1); + *((long *) (SstackS)) = (((key_697X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = value_698X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_696X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + break; + case 149 : { + SstackS = ((SstackS) + 4); + arg2_700X = *((long *) (SstackS)); + x_701X = SvalS; + Senabled_interruptsS = -1; + if ((0 == ((Spending_interruptsS) & (Senabled_interruptsS)))) { + s48_Spending_interruptPS = 0; + if ((s48_Spending_eventsPS)) { + s48_Spending_interruptPS = 1; + goto L38715;} + else { + goto L38715;}} + else { + s48_Spending_interruptPS = 1; + goto L38715;}} + break; + case 150 : { + SstackS = ((SstackS) + 4); + arg2_702X = *((long *) (SstackS)); + if ((3 == (3 & arg2_702X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + arg2_702X))) + -4))))>>2))))) { + obj_703X = SvalS; + if ((3 == (3 & obj_703X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + obj_703X))) + -4))))>>2))))) { + x_704X = SvalS; + len_705X = (long)(((unsigned long)(*((long *) ((((char *) (-3 + arg2_702X))) + -4))))>>8); + if ((len_705X == ((long)(((unsigned long)(*((long *) ((((char *) (-3 + x_704X))) + -4))))>>8)))) { + if (((!memcmp((void *)(((char *) (-3 + x_704X))), (void *)(((char *) (-3 + arg2_702X))),len_705X)))) { + arg0K0 = 5; + goto L27842;} + else { + arg0K0 = 1; + goto L27842;}} + else { + arg0K0 = 1; + goto L27842;}} + else { + goto L27809;}} + else { + goto L27809;}} + else { + goto L27809;}} + else { + goto L27809;}} + break; + case 151 : { + space_706X = 1 + ((((4 + ((((SvalS))>>2))))>>2)); + v_707X = AVAILABLEp(space_706X); + if (v_707X) { + goto L33611;} + else { + collect_saving_temps(1, 1, &temp1_708X); + v_709X = AVAILABLEp(space_706X); + if (v_709X) { + goto L33611;} + else { + ps_error("Scheme48 heap overflow", 0); + goto L33611;}}} + break; + case 152 : { + SstackS = ((SstackS) + 4); + thing_710X = *((long *) (SstackS)); + list_711X = SvalS; + arg0K0 = list_711X; + arg0K1 = list_711X; + arg2K2 = 1; + goto L29199;} + break; + case 153 : { + SstackS = ((SstackS) + 4); + arg2_712X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + arg3_713X = *((long *) (SstackS)); + if ((0 == (3 & (SvalS)))) { + index_714X = (((SvalS))>>2); + if ((3 == (3 & arg3_713X))) { + if ((8 == (31 & ((((*((long *) ((((char *) (-3 + arg3_713X))) + -4))))>>2))))) { + if ((arg2_712X == (*((long *) (((char *) (-3 + arg3_713X))))))) { + len_715X = (((3 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + arg3_713X))) + -4))))>>8))))>>2); + if ((index_714X < 0)) { + goto L27515;} + else { + if ((index_714X < len_715X)) { + SvalS = (*((long *) ((((char *) (-3 + arg3_713X))) + (((index_714X)<<2))))); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + goto L27515;}}} + else { + goto L27535;}} + else { + goto L27535;}} + else { + goto L27535;}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg3_713X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg2_712X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;}} + break; + case 154 : { + SstackS = ((SstackS) + 4); + arg2_716X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + arg3_717X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + arg4_718X = *((long *) (SstackS)); + if ((0 == (3 & arg2_716X))) { + index_719X = ((arg2_716X)>>2); + value_720X = SvalS; + if ((3 == (3 & arg4_718X))) { + if ((8 == (31 & ((((*((long *) ((((char *) (-3 + arg4_718X))) + -4))))>>2))))) { + if ((arg3_717X == (*((long *) (((char *) (-3 + arg4_718X))))))) { + if ((3 == (3 & arg4_718X))) { + if ((0 == (128 & (*((long *) ((((char *) (-3 + arg4_718X))) + -4)))))) { + len_721X = (((3 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + arg4_718X))) + -4))))>>8))))>>2); + if ((index_719X < 0)) { + goto L30704;} + else { + if ((index_719X < len_721X)) { + addr_722X = (((char *) (-3 + arg4_718X))) + (((index_719X)<<2)); + S48_WRITE_BARRIER(arg4_718X, addr_722X, value_720X); + *((long *) addr_722X) = value_720X; + SvalS = 13; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + goto L30704;}}} + else { + goto L30726;}} + else { + goto L30726;}} + else { + goto L30726;}} + else { + goto L30726;}} + else { + goto L30726;}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg4_718X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg3_717X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg2_716X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 4; + goto L16665;}} + break; + case 155 : { + SstackS = ((SstackS) + 4); + arg2_723X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + arg3_724X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + arg4_725X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + arg5_726X = *((long *) (SstackS)); + if ((0 == (3 & ((arg4_725X | arg2_723X) | (SvalS))))) { + from_index_727X = ((arg4_725X)>>2); + to_index_728X = ((arg2_723X)>>2); + count_729X = (((SvalS))>>2); + if ((3 == (3 & arg5_726X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + arg5_726X))) + -4))))>>2))))) { + goto L30955;} + else { + goto L30950;}} + else { + goto L30950;}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg5_726X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg4_725X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg3_724X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg2_723X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 5; + goto L16665;}} + break; + case 156 : { + v_730X = *((unsigned char *) ((Scode_pointerS) + 1)); + if ((0 == v_730X)) { + arg0K0 = (SvalS); + goto L23037;} + else { + merged_arg0K0 = 0; + get_current_port_return_tag = 0; + goto get_current_port; + get_current_port_return_0: + v_731X = get_current_port0_return_value; + arg0K0 = v_731X; + goto L23037;}} + break; + case 157 : { + v_732X = *((unsigned char *) ((Scode_pointerS) + 1)); + if ((0 == v_732X)) { + arg0K0 = (SvalS); + goto L23257;} + else { + merged_arg0K0 = 0; + get_current_port_return_tag = 1; + goto get_current_port; + get_current_port_return_1: + v_733X = get_current_port0_return_value; + arg0K0 = v_733X; + goto L23257;}} + break; + case 158 : { + v_734X = *((unsigned char *) ((Scode_pointerS) + 1)); + if ((0 == v_734X)) { + v_735X = SvalS; + SstackS = ((SstackS) + 4); + arg0K0 = (*((long *) (SstackS))); + arg0K1 = v_735X; + goto L23470;} + else { + merged_arg0K0 = 4; + get_current_port_return_tag = 2; + goto get_current_port; + get_current_port_return_2: + v_736X = get_current_port0_return_value; + arg0K0 = (SvalS); + arg0K1 = v_736X; + goto L23470;}} + break; + case 159 : { + x_737X = SvalS; + out_738X = stderr; + arg0K0 = x_737X; + goto L29452;} + break; + }} + L16665: { + nargs_739X = arg0K0; + opcode_740X = (((*((long *) ((SstackS) + (8 + (((nargs_739X)<<2)))))))>>2); + obj_741X = Sexception_handlersS; + if ((3 == (3 & obj_741X))) { + if ((2 == (31 & ((((*((long *) ((((char *) (-3 + obj_741X))) + -4))))>>2))))) { + goto L16724;} + else { + goto L16797;}} + else { + goto L16797;}} + L23824: { + env_742X = arg0K0; + i_743X = arg0K1; + if ((0 == i_743X)) { + SvalS = (*((long *) ((((char *) (-3 + env_742X))) + ((((*((unsigned char *) ((Scode_pointerS) + 2))))<<2))))); + if ((529 == (SvalS))) { + push_exception_continuationB(0, 3); + arg0K0 = 0; + goto L16665;} + else { + Scode_pointerS = ((Scode_pointerS) + 3); + arg1K0 = (Scode_pointerS); + goto L18438;}} + else { + arg0K0 = (*((long *) (((char *) (-3 + env_742X))))); + arg0K1 = (-1 + i_743X); + goto L23824;}} + L20247: { + env_744X = arg0K0; + i_745X = arg0K1; + if ((0 == i_745X)) { + SvalS = (*((long *) ((((char *) (-3 + env_744X))) + ((((((((*((unsigned char *) ((Scode_pointerS) + 3))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 4)))))<<2))))); + if ((529 == (SvalS))) { + push_exception_continuationB(0, 5); + arg0K0 = 0; + goto L16665;} + else { + Scode_pointerS = ((Scode_pointerS) + 5); + arg1K0 = (Scode_pointerS); + goto L18438;}} + else { + arg0K0 = (*((long *) (((char *) (-3 + env_744X))))); + arg0K1 = (-1 + i_745X); + goto L20247;}} + L20185: { + env_746X = arg0K0; + i_747X = arg0K1; + if ((0 == i_747X)) { + index_748X = ((((*((unsigned char *) ((Scode_pointerS) + 3))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 4))); + value_749X = SvalS; + addr_750X = (((char *) (-3 + env_746X))) + (((index_748X)<<2)); + S48_WRITE_BARRIER(env_746X, addr_750X, value_749X); + *((long *) addr_750X) = value_749X; + SvalS = 13; + Scode_pointerS = ((Scode_pointerS) + 5); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + arg0K0 = (*((long *) (((char *) (-3 + env_746X))))); + arg0K1 = (-1 + i_747X); + goto L20185;}} + L20964: { + space_751X = arg0K0; + v_752X = AVAILABLEp(space_751X); + if (v_752X) { + arg2K0 = 1; + arg0K1 = 0; + goto L21038;} + else { + collect_saving_temps(1, 1, &temp1_753X); + v_754X = AVAILABLEp(space_751X); + if (v_754X) { + arg2K0 = 1; + arg0K1 = 0; + goto L21038;} + else { + arg2K0 = 0; + arg0K1 = 0; + goto L21038;}}} + L20971: { + env_755X = arg0K0; + v_756X = AVAILABLEp(3); + if (v_756X) { + arg2K0 = 1; + arg0K1 = env_755X; + goto L20996;} + else { + temp0_757X = collect_saving_temps(env_755X, 1, &temp1_758X); + v_759X = AVAILABLEp(3); + if (v_759X) { + arg2K0 = 1; + arg0K1 = temp0_757X; + goto L20996;} + else { + arg2K0 = 0; + arg0K1 = temp0_757X; + goto L20996;}}} + L20766: { + len_760X = ((total_count_393X)<<2); + addr_761X = ALLOCATE_SPACE(2, (4 + len_760X)); + *((long *) addr_761X) = (10 + (((len_760X)<<8))); + new_env_762X = 3 + (((long) (addr_761X + 4))); + v_763X = *((unsigned char *) ((Scode_pointerS) + 1)); + if ((0 == v_763X)) { + arg0K0 = 0; + goto L20780;} + else { + value_764X = SvalS; + addr_765X = ((char *) (-3 + new_env_762X)); + S48_WRITE_BARRIER(new_env_762X, addr_765X, value_764X); + *((long *) addr_765X) = value_764X; + arg0K0 = 1; + goto L20780;}} + L20692: { + okayP_766X = arg2K0; + key_767X = arg0K1; + if (okayP_766X) { + arg0K0 = key_767X; + goto L20680;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = key_767X; + goto L20680;}} + L19847: { + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L19882: { + SstackS = ((((char *) (-3 + (Sbottom_of_stackS)))) + -8); + *((long *) (((char *) (-3 + (Sbottom_of_stackS))))) = cont_402X; + ScontS = (Sbottom_of_stackS); + goto L19847;} + L19848: { + if ((1 == cont_402X)) { + if ((0 == (3 & (SvalS)))) { + s48_Scallback_return_stack_blockS = 1; + return ((((SvalS))>>2));} + else { + goto L19863;}} + else { + goto L19863;}} + L19208: { + okayP_768X = arg2K0; + key_769X = arg0K1; + if (okayP_768X) { + arg0K0 = key_769X; + goto L19163;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = key_769X; + goto L19163;}} + L19120: { + if ((s48_Spending_interruptPS)) { + if ((s48_Spending_eventsPS)) { + s48_Spending_eventsPS = 0; + check_events_return_tag = 0; + goto check_events; + check_events_return_0: + v_770X = check_events0_return_value; + if (v_770X) { + arg0K0 = stack_arg_count_403X; + goto L16894;} + else { + goto L19124;}} + else { + arg0K0 = stack_arg_count_403X; + goto L16894;}} + else { + goto L19124;}} + L16066: { + stack_arg_count_771X = arg0K0; + code_772X = *((long *) (((char *) (-3 + (*((long *) (((char *) (-3 + (SvalS)))))))))); + arg0K0 = (*((unsigned char *) ((((char *) (-3 + code_772X))) + 1))); + arg0K1 = 64; + goto L16080;} + L17161: { + exception_773X = arg0K0; + stack_arg_count_774X = arg0K1; + list_args_775X = arg0K2; + list_arg_count_776X = arg0K3; + if (((StemplateS) == (SvalS))) { + if ((0 < (Slosing_opcodeS))) { + ps_error("wrong number of arguments to exception handler", 1, (Slosing_opcodeS)); + return v_777X;} + else { + ps_error("wrong number of arguments to interrupt handler", 1, (0 - (Slosing_opcodeS))); + return v_778X;}} + else { + merged_arg0K0 = list_args_775X; + merged_arg0K1 = list_arg_count_776X; + copy_listS_return_tag = 0; + goto copy_listS; + copy_listS_return_0: + v_779X = copy_listS0_return_value; + merged_arg0K0 = v_779X; + merged_arg0K1 = stack_arg_count_774X; + pop_args_GlistS_return_tag = 1; + goto pop_args_GlistS; + pop_args_GlistS_return_1: + args_780X = pop_args_GlistS0_return_value; + push_exception_continuationB(exception_773X, 0); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = args_780X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + L17628: { + loc_781X = arg1K0; + arg_782X = arg1K1; + if ((top_of_args_414X < arg_782X)) { + *((long *) loc_781X) = (*((long *) arg_782X)); + arg1K0 = (loc_781X + -4); + arg1K1 = (arg_782X + -4); + goto L17628;} + else { + SstackS = loc_781X; + obj_783X = SvalS; + if ((3 == (3 & obj_783X))) { + if ((3 == (31 & ((((*((long *) ((((char *) (-3 + obj_783X))) + -4))))>>2))))) { + arg0K0 = nargs_413X; + goto L16066;} + else { + arg0K0 = 3; + arg0K1 = nargs_413X; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;}} + else { + arg0K0 = 3; + arg0K1 = nargs_413X; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;}}} + L17666: { + stack_arg_count_784X = arg0K0; + list_args_785X = arg0K1; + list_arg_count_786X = arg0K2; + if ((0 == list_arg_count_786X)) { + obj_787X = SvalS; + if ((3 == (3 & obj_787X))) { + if ((3 == (31 & ((((*((long *) ((((char *) (-3 + obj_787X))) + -4))))>>2))))) { + arg0K0 = stack_arg_count_784X; + goto L16066;} + else { + arg0K0 = 3; + arg0K1 = stack_arg_count_784X; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;}} + else { + arg0K0 = 3; + arg0K1 = stack_arg_count_784X; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;}} + else { + obj_788X = SvalS; + if ((3 == (3 & obj_788X))) { + if ((3 == (31 & ((((*((long *) ((((char *) (-3 + obj_788X))) + -4))))>>2))))) { + code_789X = *((long *) (((char *) (-3 + (*((long *) (((char *) (-3 + (SvalS)))))))))); + total_arg_count_790X = stack_arg_count_784X + list_arg_count_786X; + arg0K0 = (*((unsigned char *) ((((char *) (-3 + code_789X))) + 1))); + arg0K1 = 64; + goto L16357;} + else { + arg0K0 = 3; + arg0K1 = stack_arg_count_784X; + arg0K2 = list_args_785X; + arg0K3 = list_arg_count_786X; + goto L17161;}} + else { + arg0K0 = 3; + arg0K1 = stack_arg_count_784X; + arg0K2 = list_args_785X; + arg0K3 = list_arg_count_786X; + goto L17161;}}} + L11273: { + list_args_791X = arg0K0; + stack_nargs_792X = arg0K1; + merged_arg0K0 = list_args_791X; + okay_argument_list_return_tag = 1; + goto okay_argument_list; + okay_argument_list_return_1: + okayP_793X = okay_argument_list0_return_value; + list_arg_count_794X = okay_argument_list1_return_value; + if (okayP_793X) { + SvalS = proc_421X; + arg0K0 = stack_nargs_792X; + arg0K1 = list_args_791X; + arg0K2 = list_arg_count_794X; + goto L17666;} + else { + *((long *) (SstackS)) = list_args_791X; + SstackS = ((SstackS) + -4); + merged_arg0K0 = 25; + merged_arg0K1 = (1 + stack_nargs_792X); + pop_args_GlistS_return_tag = 2; + goto pop_args_GlistS; + pop_args_GlistS_return_2: + args_795X = pop_args_GlistS0_return_value; + SstackS = ((SstackS) + 4); + push_exception_continuationB(5, 0); + *((long *) (SstackS)) = proc_421X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = args_795X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + L11314: { + list_796X = arg0K0; + follower_797X = arg0K1; + if ((25 == list_796X)) { + list_args_798X = *((long *) (((char *) (-3 + (*((long *) ((((char *) (-3 + follower_797X))) + 4))))))); + addr_799X = (((char *) (-3 + follower_797X))) + 4; + S48_WRITE_BARRIER(follower_797X, addr_799X, list_args_798X); + *((long *) addr_799X) = list_args_798X; + arg0K0 = rest_list_422X; + arg0K1 = (-1 + stack_nargs_420X); + goto L11273;} + else { + arg0K0 = (*((long *) ((((char *) (-3 + list_796X))) + 4))); + arg0K1 = (*((long *) ((((char *) (-3 + follower_797X))) + 4))); + goto L11314;}} + L17571: { + obj_800X = SvalS; + if ((3 == (3 & obj_800X))) { + if ((3 == (31 & ((((*((long *) ((((char *) (-3 + obj_800X))) + -4))))>>2))))) { + arg0K0 = 0; + goto L16066;} + else { + arg0K0 = 3; + arg0K1 = 0; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;}} + else { + arg0K0 = 3; + arg0K1 = 0; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;}} + L17578: { + SstackS = ((((char *) (-3 + (Sbottom_of_stackS)))) + -8); + *((long *) (((char *) (-3 + (Sbottom_of_stackS))))) = cont_423X; + ScontS = (Sbottom_of_stackS); + goto L17571;} + L20427: { + stack_nargs_801X = arg0K0; + list_args_802X = arg0K1; + list_arg_count_803X = arg0K2; + if ((1 == stack_nargs_801X)) { + SstackS = ((SstackS) + 4); + SvalS = (*((long *) (SstackS))); + pop_continuationB_return_tag = 1; + goto pop_continuationB; + pop_continuationB_return_1: + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + if (((ScontS) == (Sbottom_of_stackS))) { + arg0K0 = (*((long *) (((char *) (-3 + (Sbottom_of_stackS)))))); + goto L20438;} + else { + arg0K0 = (ScontS); + goto L20438;}}} + L18944: { + okayP_804X = arg2K0; + key_805X = arg0K1; + if (okayP_804X) { + arg0K0 = key_805X; + goto L18932;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = key_805X; + goto L18932;}} + L18817: { + tem_806X = *((long *) ((((char *) (-3 + (StemplateS)))) + ((((((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2)))))<<2)))); + StemplateS = tem_806X; + Scode_pointerS = ((((char *) (-3 + (*((long *) (((char *) (-3 + tem_806X)))))))) + 2); + if ((s48_Spending_interruptPS)) { + if ((s48_Spending_eventsPS)) { + s48_Spending_eventsPS = 0; + check_events_return_tag = 1; + goto check_events; + check_events_return_1: + v_807X = check_events0_return_value; + if (v_807X) { + goto L18826;} + else { + goto L18829;}} + else { + goto L18826;}} + else { + goto L18829;}} + L19000: { + okayP_808X = arg2K0; + key_809X = arg0K1; + if (okayP_808X) { + arg0K0 = key_809X; + goto L18987;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = key_809X; + goto L18987;}} + L18862: { + push_exception_continuationB(5, 4); + *((long *) (SstackS)) = (*((long *) ((((char *) (-3 + (StemplateS)))) + ((((((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2)))))<<2))))); + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + L18718: { + arg0K0 = (2 + (((max_442X)<<1))); + goto L18720;} + L18720: { + offset_810X = arg0K0; + Scode_pointerS = ((Scode_pointerS) + offset_810X); + arg1K0 = (Scode_pointerS); + goto L18438;} + L19750: { + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L18616: { + delta_811X = arg0K0; + Scode_pointerS = ((Scode_pointerS) + delta_811X); + arg1K0 = (Scode_pointerS); + goto L18438;} + L19641: { + delta_812X = arg0K0; + Scode_pointerS = ((Scode_pointerS) + delta_812X); + arg1K0 = (Scode_pointerS); + goto L18438;} + L38026: { + val_813X = arg0K0; + SvalS = val_813X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L38038: { + val_814X = arg0K0; + SvalS = val_814X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L10622: { + if ((3 == (3 & x_456X))) { + if ((7 == (31 & ((((*((long *) ((((char *) (-3 + x_456X))) + -4))))>>2))))) { + arg0K0 = 5; + goto L38038;} + else { + goto L10628;}} + else { + goto L10628;}} + L28391: { + SvalS = 5; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L28392: { + if ((3 == (3 & n_457X))) { + if ((10 == (31 & ((((*((long *) ((((char *) (-3 + n_457X))) + -4))))>>2))))) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = n_457X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + else { + goto L28396;}} + else { + goto L28396;}} + L28548: { + SvalS = 5; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L28523: { + if ((3 == (3 & n_458X))) { + if ((7 == (31 & ((((*((long *) ((((char *) (-3 + n_458X))) + -4))))>>2))))) { + goto L28548;} + else { + goto L28537;}} + else { + goto L28537;}} + L28747: { + SvalS = 5; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L28722: { + if ((3 == (3 & n_459X))) { + if ((7 == (31 & ((((*((long *) ((((char *) (-3 + n_459X))) + -4))))>>2))))) { + goto L28747;} + else { + goto L28736;}} + else { + goto L28736;}} + L28946: { + SvalS = 5; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L28921: { + if ((3 == (3 & n_460X))) { + if ((7 == (31 & ((((*((long *) ((((char *) (-3 + n_460X))) + -4))))>>2))))) { + goto L28946;} + else { + goto L28935;}} + else { + goto L28935;}} + L6775: { + a_815X = arg0K0; + if ((b_470X < 0)) { + arg0K0 = (0 - b_470X); + goto L6779;} + else { + arg0K0 = b_470X; + goto L6779;}} + L7056: { + a_816X = arg0K0; + if ((b_477X < 0)) { + arg0K0 = (0 - b_477X); + goto L7060;} + else { + arg0K0 = b_477X; + goto L7060;}} + L31744: { + val_817X = arg0K0; + SvalS = val_817X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L31822: { + val_818X = arg0K0; + SvalS = val_818X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L31900: { + val_819X = arg0K0; + SvalS = val_819X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L31978: { + val_820X = arg0K0; + SvalS = val_820X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L32056: { + val_821X = arg0K0; + SvalS = val_821X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L7233: { + a_822X = arg0K0; + if ((b_491X < 0)) { + arg0K0 = (0 - b_491X); + goto L7237;} + else { + arg0K0 = b_491X; + goto L7237;}} + L25338: { + a_823X = arg0K0; + n_824X = ((y_493X)>>2); + if ((n_824X < 0)) { + arg0K0 = (0 - n_824X); + goto L25340;} + else { + arg0K0 = n_824X; + goto L25340;}} + L38295: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = x_508X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + L25624: { + r_825X = arg0K0; + if ((536870911 < r_825X)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = n_509X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + else { + SvalS = (((r_825X)<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}} + L25903: { + SvalS = (((result_530X)<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L38383: { + val_826X = arg0K0; + SvalS = val_826X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L28166: { + val_827X = arg0K0; + SvalS = val_827X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L28139: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_533X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L28076: { + val_828X = arg0K0; + SvalS = val_828X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L28049: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_535X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L32748: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = (((x_537X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + L38412: { + val_829X = arg0K0; + SvalS = val_829X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L38426: { + value_830X = arg0K0; + SvalS = value_830X; + Scode_pointerS = ((Scode_pointerS) + 2); + arg1K0 = (Scode_pointerS); + goto L18438;} + L21229: { + push_exception_continuationB(5, 2); + *((long *) (SstackS)) = stob_541X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((type_542X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L21301: { + type_831X = *((unsigned char *) ((Scode_pointerS) + 2)); + len_832X = ((len_543X)<<2); + addr_833X = ALLOCATE_SPACE(type_831X, (4 + len_832X)); + *((long *) addr_833X) = (2 + (((((((len_832X)<<6)) + type_831X))<<2))); + new_834X = 3 + (((long) (addr_833X + 4))); + if ((len_543X < 1)) { + goto L21336;} + else { + *((long *) ((((char *) (-3 + new_834X))) + (-4 + (((len_543X)<<2))))) = (SvalS); + arg0K0 = (-2 + len_543X); + goto L21320;}} + L21483: { + type_835X = *((unsigned char *) ((Scode_pointerS) + 1)); + len_836X = ((len_548X)<<2); + addr_837X = ALLOCATE_SPACE(type_835X, (4 + len_836X)); + *((long *) addr_837X) = (2 + (((((((len_836X)<<6)) + type_835X))<<2))); + new_838X = 3 + (((long) (addr_837X + 4))); + SstackS = ((SstackS) + 4); + stack_nargs_839X = (((*((long *) (SstackS))))>>2); + SstackS = ((SstackS) + 4); + rest_list_840X = *((long *) (SstackS)); + arg0K0 = (-1 + stack_nargs_839X); + goto L21505;} + L21693: { + push_exception_continuationB(5, 3); + *((long *) (SstackS)) = stob_553X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((type_555X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((offset_554X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;} + L21796: { + push_exception_continuationB(5, 3); + *((long *) (SstackS)) = stob_556X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((type_559X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((offset_558X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = value_557X; + SstackS = ((SstackS) + -4); + arg0K0 = 4; + goto L16665;} + L21981: { + push_exception_continuationB(5, 2); + *((long *) (SstackS)) = (((type_563X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((len_564X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = init_562X; + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;} + L21999: { + okayP_841X = arg2K0; + init_842X = arg0K1; + if (okayP_841X) { + len_843X = ((len_564X)<<2); + addr_844X = ALLOCATE_SPACE(type_563X, (4 + len_843X)); + *((long *) addr_844X) = (2 + (((((((len_843X)<<6)) + type_563X))<<2))); + value_845X = 3 + (((long) (addr_844X + 4))); + arg0K0 = (-1 + len_564X); + goto L22028;} + else { + push_exception_continuationB(8, 2); + *((long *) (SstackS)) = (((type_563X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((len_564X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = init_842X; + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;}} + L22277: { + push_exception_continuationB(7, 2); + *((long *) (SstackS)) = stob_570X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((type_572X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = index_571X; + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;} + L22254: { + push_exception_continuationB(5, 2); + *((long *) (SstackS)) = stob_570X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((type_572X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = index_571X; + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;} + L22517: { + push_exception_continuationB(7, 2); + *((long *) (SstackS)) = stob_576X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((type_578X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg2_575X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = value_577X; + SstackS = ((SstackS) + -4); + arg0K0 = 4; + goto L16665;} + L22492: { + push_exception_continuationB(5, 2); + *((long *) (SstackS)) = stob_576X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((type_578X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg2_575X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = value_577X; + SstackS = ((SstackS) + -4); + arg0K0 = 4; + goto L16665;} + L26074: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = (((len_583X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((init_584X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L26166: { + addr_846X = ALLOCATE_SPACE(17, (4 + len_583X)); + *((long *) addr_846X) = (70 + (((len_583X)<<8))); + vector_847X = 3 + (((long) (addr_846X + 4))); + arg0K0 = (-1 + len_583X); + goto L26115;} + L36239: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + L32854: { + push_exception_continuationB(7, 1); + *((long *) (SstackS)) = arg2_590X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((index_591X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L35818: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_590X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L29802: { + push_exception_continuationB(7, 1); + *((long *) (SstackS)) = arg3_594X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((index_595X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((Kchar_596X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;} + L29781: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg3_594X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((index_595X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((Kchar_596X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;} + L34230: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg3_594X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg2_593X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;} + L26308: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = (((len_599X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (9 + ((((init_600X))<<8))); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L26400: { + len_848X = 1 + len_599X; + addr_849X = ALLOCATE_SPACE(16, (4 + len_848X)); + *((long *) addr_849X) = (66 + (((len_848X)<<8))); + string_850X = 3 + (((long) (addr_849X + 4))); + *((unsigned char *) ((((char *) (-3 + string_850X))) + len_599X)) = 0; + arg0K0 = (-1 + len_599X); + goto L26349;} + L32935: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_598X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L36289: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + L32998: { + push_exception_continuationB(7, 1); + *((long *) (SstackS)) = arg2_606X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((index_607X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L35914: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_606X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L29957: { + push_exception_continuationB(7, 1); + *((long *) (SstackS)) = arg3_610X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((index_611X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (9 + ((((Kchar_612X))<<8))); + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;} + L29936: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg3_610X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((index_611X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (9 + ((((Kchar_612X))<<8))); + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;} + L34356: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg3_610X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg2_609X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;} + L24478: { + obj_851X = SvalS; + if ((3 == (3 & obj_851X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + obj_851X))) + -4))))>>2))))) { + table_852X = Sthe_symbol_tableS; + string_853X = SvalS; + n_854X = -1 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + string_853X))) + -4))))>>8)); + arg0K0 = 0; + arg0K1 = 0; + goto L13333;} + else { + goto L24488;}} + else { + goto L24488;}} + L33976: { + val_855X = arg0K0; + SvalS = val_855X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L33957: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + L29544: { + if ((1 == (SvalS))) { + addr_856X = (((char *) (-3 + arg2_620X))) + 4; + S48_WRITE_BARRIER(arg2_620X, addr_856X, 273); + *((long *) addr_856X) = 273; + goto L29550;} + else { + if ((17 == (255 & (*((long *) ((((char *) (-3 + arg2_620X))) + 4)))))) { + addr_857X = (((char *) (-3 + arg2_620X))) + 4; + S48_WRITE_BARRIER(arg2_620X, addr_857X, 529); + *((long *) addr_857X) = 529; + goto L29550;} + else { + goto L29550;}}} + L29551: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_620X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L38498: { + val_858X = arg0K0; + SvalS = val_858X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L33080: { + SvalS = x_623X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L33131: { + okayP_859X = arg2K0; + key_860X = arg0K1; + if (okayP_859X) { + arg0K0 = key_860X; + goto L33097;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = key_860X; + goto L33097;}} + L34474: { + okayP_861X = arg2K0; + key_862X = arg0K1; + if (okayP_861X) { + arg0K0 = key_862X; + goto L34456;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = key_862X; + goto L34456;}} + L37343: { + okayP_863X = arg2K0; + key_864X = arg0K1; + if (okayP_863X) { + arg0K0 = key_864X; + goto L37273;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = key_864X; + goto L37273;}} + L37603: { + okayP_865X = arg2K0; + key_866X = arg0K1; + if (okayP_865X) { + arg0K0 = key_866X; + goto L37545;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = key_866X; + goto L37545;}} + L33202: { + val_867X = arg0K0; + SvalS = val_867X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L8173: { + arg0K0 = (*((long *) ((((char *) (-3 + channel_637X))) + 16))); + goto L33202;} + L8179: { + ch_868X = arg0K0; + prev_869X = arg0K1; + if ((1 == ch_868X)) { + addr_870X = (((char *) (-3 + channel_637X))) + 16; + S48_WRITE_BARRIER(channel_637X, addr_870X, 1); + *((long *) addr_870X) = 1; + n_871X = ps_abort_fd_op(((((*((long *) ((((char *) (-3 + channel_637X))) + 8))))>>2))); + arg0K0 = (((n_871X)<<2)); + goto L33202;} + else { + if ((ch_868X == channel_637X)) { + y_872X = Spending_channels_tailS; + if ((ch_868X == y_872X)) { + Spending_channels_tailS = prev_869X; + goto L8203;} + else { + goto L8203;}} + else { + arg0K0 = (*((long *) ((((char *) (-3 + ch_868X))) + 12))); + arg0K1 = ch_868X; + goto L8179;}}} + L33185: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + L14777: { + arg0K0 = (-1 + (Snumber_of_channelsS)); + arg0K1 = 25; + goto L14784;} + L34575: { + okayP_873X = arg2K0; + key_874X = arg0K1; + if (okayP_873X) { + arg0K0 = key_874X; + goto L34529;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = key_874X; + goto L34529;}} + L35407: { + i_875X = arg0K0; + h_876X = arg0K1; + if ((i_875X < n_655X)) { + arg0K0 = (1 + i_875X); + arg0K1 = (h_876X + (((*((unsigned char *) ((((char *) (-3 + x_654X))) + i_875X)))))); + goto L35407;} + else { + SvalS = (((h_876X)<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}} + L35384: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + L38564: { + SstackS = ((SstackS) + 4); + stob_877X = *((long *) (SstackS)); + proc_878X = SvalS; + if ((3 == (3 & stob_877X))) { + if ((3 == (3 & proc_878X))) { + if ((3 == (31 & ((((*((long *) ((((char *) (-3 + proc_878X))) + -4))))>>2))))) { + addr_879X = ALLOCATE_SPACE(0, 12); + *((long *) addr_879X) = 2050; + x_880X = 3 + (((long) (addr_879X + 4))); + *((long *) (((char *) (-3 + x_880X)))) = stob_877X; + *((long *) ((((char *) (-3 + x_880X))) + 4)) = proc_878X; + b_881X = Sfinalizer_alistS; + addr_882X = ALLOCATE_SPACE(0, 12); + *((long *) addr_882X) = 2050; + x_883X = 3 + (((long) (addr_882X + 4))); + *((long *) (((char *) (-3 + x_883X)))) = x_880X; + *((long *) ((((char *) (-3 + x_883X))) + 4)) = b_881X; + Sfinalizer_alistS = x_883X; + SvalS = 13; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + goto L30563;}} + else { + goto L30563;}} + else { + goto L30563;}} + L33293: { + firstP_884X = arg2K0; + vector_885X = s48_find_all(type_665X); + if ((1 == vector_885X)) { + if (firstP_884X) { + collect_saving_temps(0, 0, &v_886X); + arg2K0 = 0; + goto L33293;} + else { + push_exception_continuationB(8, 1); + *((long *) (SstackS)) = (((type_665X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;}} + else { + SvalS = vector_885X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}} + L38614: { + firstP_887X = arg2K0; + type_888X = arg0K1; + vector_889X = s48_find_all_records(type_888X); + if ((1 == vector_889X)) { + if (firstP_887X) { + value_890X = collect_saving_temps(type_888X, 0, &v_891X); + arg2K0 = 0; + arg0K1 = value_890X; + goto L38614;} + else { + push_exception_continuationB(8, 1); + *((long *) (SstackS)) = type_888X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;}} + else { + SvalS = vector_889X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}} + L20570: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + L19494: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + L38655: { + SvalS = (((old_674X)<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L18452: { + SstackS = ((SstackS) + 4); + pc_892X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + tem_893X = *((long *) (SstackS)); + StemplateS = tem_893X; + Scode_pointerS = ((((char *) (-3 + (*((long *) (((char *) (-3 + tem_893X)))))))) + (((pc_892X)>>2))); + SstackS = ((SstackS) + 4); + SvalS = (*((long *) (SstackS))); + arg1K0 = (Scode_pointerS); + goto L18438;} + L37163: { + x_894X = s48_schedule_alarm_interrupt((((p_677X)>>2))); + SvalS = (((x_894X)<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L34103: { + if ((1 == (SvalS))) { + arg2K0 = 0; + goto L34107;} + else { + arg2K0 = 1; + goto L34107;}} + L34108: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_678X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L22787: { + rest_list_895X = arg0K0; + if ((25 == rest_list_895X)) { + proc_896X = *((long *) ((SstackS) + (((nargs_680X)<<2)))); + name_897X = *((long *) ((SstackS) + (-4 + (((nargs_680X)<<2))))); + args_898X = (SstackS) + 4; + *((long *) (SstackS)) = (10 + (((nargs_680X)<<10))); + SstackS = ((SstackS) + -4); + if ((3 == (3 & name_897X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + name_897X))) + -4))))>>2))))) { + if ((3 == (3 & proc_896X))) { + if ((17 == (31 & ((((*((long *) ((((char *) (-3 + proc_896X))) + -4))))>>2))))) { + if ((4 == ((long)(((unsigned long)(*((long *) ((((char *) (-3 + proc_896X))) + -4))))>>8)))) { + result_899X = s48_external_call(proc_896X, name_897X, (-2 + nargs_680X), args_898X); + if ((Sexternal_exceptionPS)) { + Sexternal_exceptionPS = 0; + arg0K0 = (Sexternal_exception_nargsS); + goto L16665;} + else { + SvalS = result_899X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}} + else { + goto L22847;}} + else { + goto L22847;}} + else { + goto L22847;}} + else { + goto L22847;}} + else { + goto L22847;}} + else { + *((long *) (SstackS)) = (*((long *) (((char *) (-3 + rest_list_895X))))); + SstackS = ((SstackS) + -4); + arg0K0 = (*((long *) ((((char *) (-3 + rest_list_895X))) + 4))); + goto L22787;}} + L33402: { + okayP_900X = arg2K0; + key_901X = arg0K1; + if (okayP_900X) { + arg0K0 = key_901X; + goto L33368;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = key_901X; + goto L33368;}} + L23905: { + if ((1 == (SvalS))) { + arg0K0 = (Sexported_bindingsS); + goto L23938;} + else { + arg0K0 = (Simported_bindingsS); + goto L23938;}} + L23910: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_686X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L35318: { + option_902X = arg0K0; + seconds_903X = arg0K1; + mseconds_904X = arg0K2; + if ((536869 < seconds_903X)) { + push_exception_continuationB(6, 1); + *((long *) (SstackS)) = (((option_902X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((seconds_903X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((mseconds_904X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;} + else { + SvalS = (((((1000 * seconds_903X) + mseconds_904X))<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}} + L38715: { + s48_Scallback_return_stack_blockS = arg2_700X; + return x_701X;} + L27842: { + val_905X = arg0K0; + SvalS = val_905X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L27809: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_702X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L33611: { + SstackS = ((SstackS) + 4); + arg2_906X = *((long *) (SstackS)); + if ((0 == (3 & (SvalS)))) { + n_907X = (((SvalS))>>2); + if ((3 == (3 & arg2_906X))) { + if ((0 == (31 & ((((*((long *) ((((char *) (-3 + arg2_906X))) + -4))))>>2))))) { + goto L27369;} + else { + goto L27321;}} + else { + goto L27321;}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_906X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + L29199: { + list_908X = arg0K0; + slow_909X = arg0K1; + move_slowP_910X = arg2K2; + if ((25 == list_908X)) { + SvalS = 1; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + if ((3 == (3 & list_908X))) { + if ((0 == (31 & ((((*((long *) ((((char *) (-3 + list_908X))) + -4))))>>2))))) { + head_911X = *((long *) (((char *) (-3 + list_908X)))); + if ((3 == (3 & head_911X))) { + if ((0 == (31 & ((((*((long *) ((((char *) (-3 + head_911X))) + -4))))>>2))))) { + if (((*((long *) (((char *) (-3 + head_911X))))) == thing_710X)) { + SvalS = head_911X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + list_912X = *((long *) ((((char *) (-3 + list_908X))) + 4)); + if ((list_912X == slow_909X)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = thing_710X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = list_711X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + if (move_slowP_910X) { + arg0K0 = list_912X; + arg0K1 = (*((long *) ((((char *) (-3 + slow_909X))) + 4))); + arg2K2 = 0; + goto L29199;} + else { + arg0K0 = list_912X; + arg0K1 = slow_909X; + arg2K2 = 1; + goto L29199;}}}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = thing_710X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = list_711X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = thing_710X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = list_711X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = thing_710X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = list_711X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = thing_710X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = list_711X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}}} + L27515: { + push_exception_continuationB(7, 1); + *((long *) (SstackS)) = arg3_713X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg2_712X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((index_714X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;} + L27535: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg3_713X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg2_712X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((index_714X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;} + L30704: { + push_exception_continuationB(7, 1); + *((long *) (SstackS)) = arg4_718X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg3_717X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((index_719X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = value_720X; + SstackS = ((SstackS) + -4); + arg0K0 = 4; + goto L16665;} + L30726: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg4_718X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg3_717X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((index_719X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = value_720X; + SstackS = ((SstackS) + -4); + arg0K0 = 4; + goto L16665;} + L30955: { + if ((3 == (3 & arg5_726X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + arg5_726X))) + -4))))>>2))))) { + goto L30968;} + else { + goto L30963;}} + else { + goto L30963;}} + L30950: { + if ((3 == (3 & arg5_726X))) { + if ((17 == (31 & ((((*((long *) ((((char *) (-3 + arg5_726X))) + -4))))>>2))))) { + goto L30955;} + else { + goto L31022;}} + else { + goto L31022;}} + L23037: { + port_913X = arg0K0; + if ((3 == (3 & port_913X))) { + if ((6 == (31 & ((((*((long *) ((((char *) (-3 + port_913X))) + -4))))>>2))))) { + if ((0 == (4 & ((((*((long *) ((((char *) (-3 + port_913X))) + 4))))>>2))))) { + goto L23097;} + else { + p_914X = *((long *) ((((char *) (-3 + port_913X))) + 24)); + p_915X = *((long *) ((((char *) (-3 + port_913X))) + 28)); + b_916X = *((long *) ((((char *) (-3 + port_913X))) + 20)); + i_917X = ((p_914X)>>2); + x_918X = *((long *) ((((char *) (-3 + port_913X))) + 12)); + if ((5 == x_918X)) { + goto L23077;} + else { + if ((i_917X == (((p_915X)>>2)))) { + goto L23077;} + else { + val_919X = 4 + (((i_917X)<<2)); + addr_920X = (((char *) (-3 + port_913X))) + 24; + S48_WRITE_BARRIER(port_913X, addr_920X, val_919X); + *((long *) addr_920X) = val_919X; + SvalS = (9 + ((((((*((unsigned char *) ((((char *) (-3 + b_916X))) + i_917X))))))<<8))); + Scode_pointerS = ((Scode_pointerS) + 2); + arg1K0 = (Scode_pointerS); + goto L18438;}}}} + else { + goto L23097;}} + else { + goto L23097;}} + L23257: { + port_921X = arg0K0; + if ((3 == (3 & port_921X))) { + if ((6 == (31 & ((((*((long *) ((((char *) (-3 + port_921X))) + -4))))>>2))))) { + if ((0 == (4 & ((((*((long *) ((((char *) (-3 + port_921X))) + 4))))>>2))))) { + goto L23317;} + else { + p_922X = *((long *) ((((char *) (-3 + port_921X))) + 24)); + p_923X = *((long *) ((((char *) (-3 + port_921X))) + 28)); + b_924X = *((long *) ((((char *) (-3 + port_921X))) + 20)); + i_925X = ((p_922X)>>2); + x_926X = *((long *) ((((char *) (-3 + port_921X))) + 12)); + if ((5 == x_926X)) { + goto L23297;} + else { + if ((i_925X == (((p_923X)>>2)))) { + goto L23297;} + else { + SvalS = (9 + ((((((*((unsigned char *) ((((char *) (-3 + b_924X))) + i_925X))))))<<8))); + Scode_pointerS = ((Scode_pointerS) + 2); + arg1K0 = (Scode_pointerS); + goto L18438;}}}} + else { + goto L23317;}} + else { + goto L23317;}} + L23470: { + Kchar_927X = arg0K0; + port_928X = arg0K1; + if ((9 == (255 & Kchar_927X))) { + if ((3 == (3 & port_928X))) { + if ((6 == (31 & ((((*((long *) ((((char *) (-3 + port_928X))) + -4))))>>2))))) { + if ((0 == (8 & ((((*((long *) ((((char *) (-3 + port_928X))) + 4))))>>2))))) { + goto L23531;} + else { + p_929X = *((long *) ((((char *) (-3 + port_928X))) + 24)); + b_930X = *((long *) ((((char *) (-3 + port_928X))) + 20)); + i_931X = ((p_929X)>>2); + x_932X = *((long *) ((((char *) (-3 + port_928X))) + 12)); + if ((5 == x_932X)) { + goto L23513;} + else { + if ((i_931X == ((long)(((unsigned long)(*((long *) ((((char *) (-3 + b_930X))) + -4))))>>8)))) { + goto L23513;} + else { + val_933X = 4 + (((i_931X)<<2)); + addr_934X = (((char *) (-3 + port_928X))) + 24; + S48_WRITE_BARRIER(port_928X, addr_934X, val_933X); + *((long *) addr_934X) = val_933X; + *((unsigned char *) ((((char *) (-3 + (*((long *) ((((char *) (-3 + port_928X))) + 20)))))) + i_931X)) = (((((Kchar_927X)>>8)))); + SvalS = 13; + Scode_pointerS = ((Scode_pointerS) + 2); + arg1K0 = (Scode_pointerS); + goto L18438;}}}} + else { + goto L23531;}} + else { + goto L23531;}} + else { + goto L23531;}} + L29452: { + stuff_935X = arg0K0; + if ((3 == (3 & stuff_935X))) { + if ((0 == (31 & ((((*((long *) ((((char *) (-3 + stuff_935X))) + -4))))>>2))))) { + thing_936X = *((long *) (((char *) (-3 + stuff_935X)))); + if ((0 == (3 & thing_936X))) { + ps_write_integer((((thing_936X)>>2)), out_738X); + goto L29458;} + else { + if ((9 == (255 & thing_936X))) { + ps_write_string("#\\", out_738X); + { long ignoreXX; + PS_WRITE_CHAR(((((thing_936X)>>8))), out_738X, ignoreXX) } + goto L29458;} + else { + if ((3 == (3 & thing_936X))) { + if ((8 == (31 & ((((*((long *) ((((char *) (-3 + thing_936X))) + -4))))>>2))))) { + if ((0 < ((((3 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + thing_936X))) + -4))))>>8))))>>2)))) { + type_937X = *((long *) (((char *) (-3 + thing_936X)))); + if ((3 == (3 & type_937X))) { + if ((8 == (31 & ((((*((long *) ((((char *) (-3 + type_937X))) + -4))))>>2))))) { + if ((2 < ((((3 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + type_937X))) + -4))))>>8))))>>2)))) { + obj_938X = *((long *) ((((char *) (-3 + type_937X))) + 8)); + if ((3 == (3 & obj_938X))) { + if ((1 == (31 & ((((*((long *) ((((char *) (-3 + obj_938X))) + -4))))>>2))))) { + ps_write_string("#{", out_738X); + ps_write_string((((char *)(((char *) (-3 + (*((long *) (((char *) (-3 + (*((long *) ((((char *) (-3 + (*((long *) (((char *) (-3 + thing_936X)))))))) + 8))))))))))))), out_738X); + { long ignoreXX; + PS_WRITE_CHAR(125, out_738X, ignoreXX) } + goto L29458;} + else { + goto L11650;}} + else { + goto L11650;}} + else { + goto L11650;}} + else { + goto L11650;}} + else { + goto L11650;}} + else { + goto L11650;}} + else { + goto L11650;}} + else { + goto L11650;}}}} + else { + goto L29443;}} + else { + goto L29443;}} + L16724: { + SvalS = (*((long *) ((((char *) (-3 + (Sexception_handlersS)))) + (((opcode_740X)<<2))))); + obj_939X = SvalS; + if ((3 == (3 & obj_939X))) { + if ((3 == (31 & ((((*((long *) ((((char *) (-3 + obj_939X))) + -4))))>>2))))) { + goto L16741;} + else { + goto L16811;}} + else { + goto L16811;}} + L16797: { + merged_arg3K0 = "exception-handlers is not a vector"; + loseD0_return_tag = 0; + goto loseD0; + loseD0_return_0: + goto L16724;} + L21038: { + okayP_940X = arg2K0; + key_941X = arg0K1; + if (okayP_940X) { + arg0K0 = key_941X; + goto L20966;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = key_941X; + goto L20966;}} + L20996: { + okayP_942X = arg2K0; + temp_943X = arg0K1; + if (okayP_942X) { + arg0K0 = temp_943X; + goto L20977;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = temp_943X; + goto L20977;}} + L20780: { + start_i_944X = arg0K0; + arg0K0 = start_i_944X; + arg0K1 = 2; + arg0K2 = (SenvS); + goto L20788;} + L20680: { + key_945X = arg0K0; + if ((1 == (ScontS))) { + arg0K0 = 1; + goto L20684;} + else { + merged_arg0K0 = key_945X; + merged_arg0K1 = 2; + really_preserve_continuation_return_tag = 0; + goto really_preserve_continuation; + really_preserve_continuation_return_0: + v_946X = really_preserve_continuation0_return_value; + arg0K0 = v_946X; + goto L20684;}} + L19863: { + SstackS = ((((char *) (-3 + (Sbottom_of_stackS)))) + -8); + *((long *) (((char *) (-3 + (Sbottom_of_stackS))))) = 1; + ScontS = (Sbottom_of_stackS); + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = cont_402X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L19163: { + v_947X = arg0K0; + merged_arg0K0 = v_947X; + copy_stack_into_heap_return_tag = 0; + goto copy_stack_into_heap; + copy_stack_into_heap_return_0: + if (((SstackS) < (Sstack_limitS))) { + ps_error("Couldn't get default procedure space (how can this happen?)", 0); + goto L19120;} + else { + goto L19120;}} + L16894: { + stack_arg_count_948X = arg0K0; + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (StemplateS); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((((Scode_pointerS) - (((char *) (-3 + (*((long *) (((char *) (-3 + (StemplateS)))))))))))<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = ((((Senabled_interruptsS))<<2)); + SstackS = ((SstackS) + -4); + tem_949X = Sinterrupt_templateS; + StemplateS = tem_949X; + Scode_pointerS = (((char *) (-3 + (*((long *) (((char *) (-3 + tem_949X)))))))); + push_continuationB((Scode_pointerS), (4 + stack_arg_count_948X)); + n_950X = (Spending_interruptsS) & (Senabled_interruptsS); + arg0K0 = 0; + arg0K1 = 1; + goto L16999;} + L19124: { + arg1K0 = (Scode_pointerS); + goto L18438;} + L16080: { + protocol_951X = arg0K0; + stack_space_952X = arg0K1; + if ((68 == protocol_951X)) { + if ((stack_arg_count_771X < 3)) { + skip_953X = *((unsigned char *) ((((char *) (-3 + code_772X))) + (2 + stack_arg_count_771X))); + if ((0 == skip_953X)) { + arg0K0 = 4; + arg0K1 = stack_arg_count_771X; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;} + else { + arg0K0 = skip_953X; + arg0K1 = stack_arg_count_771X; + goto L16084;}} + else { + skip_954X = *((unsigned char *) ((((char *) (-3 + code_772X))) + 5)); + if ((0 == skip_954X)) { + arg0K0 = 4; + arg0K1 = stack_arg_count_771X; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;} + else { + arg0K0 = skip_954X; + goto L16107;}}} + else { + if ((67 == protocol_951X)) { + if ((stack_arg_count_771X < (*((unsigned char *) ((((char *) (-3 + code_772X))) + 2))))) { + arg0K0 = 4; + arg0K1 = stack_arg_count_771X; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;} + else { + arg0K0 = 3; + goto L16107;}} + else { + if ((65 == protocol_951X)) { + wants_stack_args_955X = ((((*((unsigned char *) ((((char *) (-3 + code_772X))) + 2))))<<8)) + (*((unsigned char *) ((((char *) (-3 + code_772X))) + 3))); + if ((stack_arg_count_771X < wants_stack_args_955X)) { + arg0K0 = 4; + arg0K1 = stack_arg_count_771X; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;} + else { + merged_arg0K0 = wants_stack_args_955X; + merged_arg0K1 = stack_arg_count_771X; + merged_arg0K2 = 25; + merged_arg0K3 = 0; + rest_list_setup_return_tag = 0; + goto rest_list_setup; + rest_list_setup_return_0: + arg0K0 = 4; + arg0K1 = (1 + wants_stack_args_955X); + goto L16084;}} + else { + if ((63 < protocol_951X)) { + if ((64 == protocol_951X)) { + if (((((((*((unsigned char *) ((((char *) (-3 + code_772X))) + 2))))<<8)) + (*((unsigned char *) ((((char *) (-3 + code_772X))) + 3)))) == stack_arg_count_771X)) { + arg0K0 = 4; + arg0K1 = stack_arg_count_771X; + goto L16084;} + else { + arg0K0 = 4; + arg0K1 = stack_arg_count_771X; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;}} + else { + if ((66 == protocol_951X)) { + length_956X = (long)(((unsigned long)(*((long *) ((((char *) (-3 + code_772X))) + -4))))>>8); + index_957X = -2 + length_956X; + arg0K0 = (*((unsigned char *) ((((char *) (-3 + code_772X))) + (-3 + length_956X)))); + arg0K1 = (((((*((unsigned char *) ((((char *) (-3 + code_772X))) + index_957X))))<<8)) + (*((unsigned char *) ((((char *) (-3 + code_772X))) + (1 + index_957X))))); + goto L16080;} + else { + ps_error("unknown protocol", 1, protocol_951X); + arg0K0 = 4; + arg0K1 = stack_arg_count_771X; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;}}} + else { + if ((protocol_951X == stack_arg_count_771X)) { + arg0K0 = 2; + arg0K1 = stack_arg_count_771X; + goto L16084;} + else { + arg0K0 = 4; + arg0K1 = stack_arg_count_771X; + arg0K2 = 25; + arg0K3 = 0; + goto L17161;}}}}}} + L16357: { + protocol_958X = arg0K0; + stack_space_959X = arg0K1; + if ((68 == protocol_958X)) { + if ((total_arg_count_790X < 3)) { + skip_960X = *((unsigned char *) ((((char *) (-3 + code_789X))) + (2 + total_arg_count_790X))); + if ((0 == skip_960X)) { + arg0K0 = 4; + arg0K1 = stack_arg_count_784X; + arg0K2 = list_args_785X; + arg0K3 = list_arg_count_786X; + goto L17161;} + else { + merged_arg0K0 = list_args_785X; + merged_arg0K1 = list_arg_count_786X; + push_list_return_tag = 0; + goto push_list; + push_list_return_0: + arg0K0 = skip_960X; + arg0K1 = total_arg_count_790X; + goto L16361;}} + else { + skip_961X = *((unsigned char *) ((((char *) (-3 + code_789X))) + 5)); + if ((0 == skip_961X)) { + arg0K0 = 4; + arg0K1 = stack_arg_count_784X; + arg0K2 = list_args_785X; + arg0K3 = list_arg_count_786X; + goto L17161;} + else { + arg0K0 = skip_961X; + goto L16386;}}} + else { + if ((67 == protocol_958X)) { + if ((total_arg_count_790X < (*((unsigned char *) ((((char *) (-3 + code_789X))) + 2))))) { + arg0K0 = 4; + arg0K1 = stack_arg_count_784X; + arg0K2 = list_args_785X; + arg0K3 = list_arg_count_786X; + goto L17161;} + else { + arg0K0 = 3; + goto L16386;}} + else { + if ((63 < protocol_958X)) { + if ((65 == protocol_958X)) { + wants_stack_args_962X = ((((*((unsigned char *) ((((char *) (-3 + code_789X))) + 2))))<<8)) + (*((unsigned char *) ((((char *) (-3 + code_789X))) + 3))); + if ((total_arg_count_790X < wants_stack_args_962X)) { + arg0K0 = 4; + arg0K1 = stack_arg_count_784X; + arg0K2 = list_args_785X; + arg0K3 = list_arg_count_786X; + goto L17161;} + else { + merged_arg0K0 = wants_stack_args_962X; + merged_arg0K1 = stack_arg_count_784X; + merged_arg0K2 = list_args_785X; + merged_arg0K3 = list_arg_count_786X; + rest_list_setup_return_tag = 1; + goto rest_list_setup; + rest_list_setup_return_1: + arg0K0 = 4; + arg0K1 = (1 + wants_stack_args_962X); + goto L16361;}} + else { + if ((64 == protocol_958X)) { + if (((((((*((unsigned char *) ((((char *) (-3 + code_789X))) + 2))))<<8)) + (*((unsigned char *) ((((char *) (-3 + code_789X))) + 3)))) == total_arg_count_790X)) { + merged_arg0K0 = list_args_785X; + merged_arg0K1 = list_arg_count_786X; + push_list_return_tag = 1; + goto push_list; + push_list_return_1: + arg0K0 = 4; + arg0K1 = total_arg_count_790X; + goto L16361;} + else { + arg0K0 = 4; + arg0K1 = stack_arg_count_784X; + arg0K2 = list_args_785X; + arg0K3 = list_arg_count_786X; + goto L17161;}} + else { + if ((66 == protocol_958X)) { + length_963X = (long)(((unsigned long)(*((long *) ((((char *) (-3 + code_789X))) + -4))))>>8); + index_964X = -2 + length_963X; + arg0K0 = (*((unsigned char *) ((((char *) (-3 + code_789X))) + (-3 + length_963X)))); + arg0K1 = (((((*((unsigned char *) ((((char *) (-3 + code_789X))) + index_964X))))<<8)) + (*((unsigned char *) ((((char *) (-3 + code_789X))) + (1 + index_964X))))); + goto L16357;} + else { + ps_error("unknown protocol", 1, protocol_958X); + arg0K0 = 4; + arg0K1 = stack_arg_count_784X; + arg0K2 = list_args_785X; + arg0K3 = list_arg_count_786X; + goto L17161;}}}} + else { + if ((protocol_958X == total_arg_count_790X)) { + merged_arg0K0 = list_args_785X; + merged_arg0K1 = list_arg_count_786X; + push_list_return_tag = 2; + goto push_list; + push_list_return_2: + arg0K0 = 2; + arg0K1 = total_arg_count_790X; + goto L16361;} + else { + arg0K0 = 4; + arg0K1 = stack_arg_count_784X; + arg0K2 = list_args_785X; + arg0K3 = list_arg_count_786X; + goto L17161;}}}}} + L20438: { + cont_965X = arg0K0; + if ((3 == (3 & cont_965X))) { + if ((9 == (31 & ((((*((long *) ((((char *) (-3 + cont_965X))) + -4))))>>2))))) { + next_op_966X = *((unsigned char *) ((((char *) (-3 + (*((long *) (((char *) (-3 + (*((long *) ((((char *) (-3 + cont_965X))) + 8))))))))))) + ((((*((long *) ((((char *) (-3 + cont_965X))) + 4))))>>2)))); + if ((34 == next_op_966X)) { + pop_continuationB_return_tag = 2; + goto pop_continuationB; + pop_continuationB_return_2: + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + if ((30 == next_op_966X)) { + next_967X = *((long *) (((char *) (-3 + (ScontS))))); + if (((ScontS) == (Sbottom_of_stackS))) { + *((long *) (((char *) (-3 + (ScontS))))) = (*((long *) (((char *) (-3 + next_967X))))); + goto L19282;} + else { + ScontS = next_967X; + goto L19282;}} + else { + merged_arg0K0 = list_args_802X; + merged_arg0K1 = stack_nargs_801X; + pop_args_GlistS_return_tag = 3; + goto pop_args_GlistS; + pop_args_GlistS_return_3: + args_968X = pop_args_GlistS0_return_value; + push_exception_continuationB(4, 0); + *((long *) (SstackS)) = 1; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = args_968X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}}} + else { + goto L20444;}} + else { + goto L20444;}} + L18932: { + v_969X = arg0K0; + merged_arg0K0 = v_969X; + copy_stack_into_heap_return_tag = 1; + goto copy_stack_into_heap; + copy_stack_into_heap_return_1: + if (((SstackS) < (Sstack_limitS))) { + ps_error("Couldn't get default procedure space (how can this happen?)", 0); + goto L18817;} + else { + goto L18817;}} + L18826: { + arg0K0 = (*((unsigned char *) ((Scode_pointerS) + 3))); + goto L16894;} + L18829: { + arg1K0 = (Scode_pointerS); + goto L18438;} + L18987: { + v_970X = arg0K0; + merged_arg0K0 = v_970X; + copy_stack_into_heap_return_tag = 2; + goto copy_stack_into_heap; + copy_stack_into_heap_return_2: + if ((space_436X < (64 + (((((SstackS) - (Sstack_limitS)))>>2))))) { + goto L18817;} + else { + ps_error("VM's stack is too small (how can this happen?)", 0); + goto L18817;}} + L10628: { + if ((3 == (3 & x_456X))) { + if ((18 == (31 & ((((*((long *) ((((char *) (-3 + x_456X))) + -4))))>>2))))) { + arg0K0 = 5; + goto L38038;} + else { + goto L10634;}} + else { + goto L10634;}} + L28396: { + SvalS = 1; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L28537: { + if ((3 == (3 & n_458X))) { + if ((18 == (31 & ((((*((long *) ((((char *) (-3 + n_458X))) + -4))))>>2))))) { + goto L28548;} + else { + goto L28549;}} + else { + goto L28549;}} + L28736: { + if ((3 == (3 & n_459X))) { + if ((18 == (31 & ((((*((long *) ((((char *) (-3 + n_459X))) + -4))))>>2))))) { + goto L28747;} + else { + goto L28748;}} + else { + goto L28748;}} + L28935: { + if ((3 == (3 & n_460X))) { + if ((18 == (31 & ((((*((long *) ((((char *) (-3 + n_460X))) + -4))))>>2))))) { + goto L28946;} + else { + goto L28947;}} + else { + goto L28947;}} + L6779: { + b_971X = arg0K0; + lo_a_972X = 65535 & a_815X; + lo_b_973X = 65535 & b_971X; + hi_a_974X = 65535 & (((a_815X)>>16)); + hi_b_975X = 65535 & (((b_971X)>>16)); + lo_c_976X = SMALL_MULTIPLY(lo_a_972X, lo_b_973X); + v_977X = SMALL_MULTIPLY(lo_b_973X, hi_a_974X); + v_978X = SMALL_MULTIPLY(lo_a_972X, hi_b_975X); + mid_c_979X = v_978X + v_977X; + c_980X = lo_c_976X + (((mid_c_979X)<<16)); + if ((0 < hi_a_974X)) { + if ((0 < hi_b_975X)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_467X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_468X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + goto L6821;}} + else { + goto L6821;}} + L7060: { + b_981X = arg0K0; + c_982X = a_816X / b_981X; + x_983X = 0 == (a_816X % b_981X); + if (x_983X) { + if ((a_476X < 0)) { + if ((b_477X < 0)) { + goto L7115;} + else { + goto L7114;}} + else { + if ((b_477X < 0)) { + goto L7114;} + else { + goto L7115;}}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_474X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_475X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + L7237: { + b_984X = arg0K0; + c_985X = a_822X / b_984X; + if ((a_490X < 0)) { + if ((b_491X < 0)) { + goto L7283;} + else { + goto L7282;}} + else { + if ((b_491X < 0)) { + goto L7282;} + else { + goto L7283;}}} + L25340: { + b_986X = arg0K0; + c_987X = a_823X % b_986X; + if ((a_494X < 0)) { + arg0K0 = (0 - c_987X); + goto L25344;} + else { + arg0K0 = c_987X; + goto L25344;}} + L21336: { + SvalS = new_834X; + Scode_pointerS = ((Scode_pointerS) + 3); + arg1K0 = (Scode_pointerS); + goto L18438;} + L21320: { + i_988X = arg0K0; + if ((i_988X < 0)) { + goto L21336;} + else { + SstackS = ((SstackS) + 4); + *((long *) ((((char *) (-3 + new_834X))) + (((i_988X)<<2)))) = (*((long *) (SstackS))); + arg0K0 = (-1 + i_988X); + goto L21320;}} + L21505: { + i_989X = arg0K0; + if ((i_989X < 0)) { + arg0K0 = stack_nargs_839X; + arg0K1 = rest_list_840X; + goto L21523;} + else { + SstackS = ((SstackS) + 4); + *((long *) ((((char *) (-3 + new_838X))) + (((i_989X)<<2)))) = (*((long *) (SstackS))); + arg0K0 = (-1 + i_989X); + goto L21505;}} + L22028: { + i_990X = arg0K0; + if ((i_990X < 0)) { + SvalS = value_845X; + Scode_pointerS = ((Scode_pointerS) + 2); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + addr_991X = (((char *) (-3 + value_845X))) + (((i_990X)<<2)); + S48_WRITE_BARRIER(value_845X, addr_991X, init_842X); + *((long *) addr_991X) = init_842X; + arg0K0 = (-1 + i_990X); + goto L22028;}} + L26115: { + i_992X = arg0K0; + if ((i_992X < 0)) { + SvalS = vector_847X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + *((unsigned char *) ((((char *) (-3 + vector_847X))) + i_992X)) = init_584X; + arg0K0 = (-1 + i_992X); + goto L26115;}} + L26349: { + i_993X = arg0K0; + if ((i_993X < 0)) { + SvalS = string_850X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + *((unsigned char *) ((((char *) (-3 + string_850X))) + i_993X)) = (init_600X); + arg0K0 = (-1 + i_993X); + goto L26349;}} + L13333: { + i_994X = arg0K0; + h_995X = arg0K1; + if ((i_994X < n_854X)) { + arg0K0 = (1 + i_994X); + arg0K1 = (h_995X + (((*((unsigned char *) ((((char *) (-3 + string_853X))) + i_994X)))))); + goto L13333;} + else { + index_996X = 1023 & h_995X; + bucket_997X = *((long *) ((((char *) (-3 + table_852X))) + (((index_996X)<<2)))); + arg0K0 = bucket_997X; + goto L13301;}} + L24488: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + L29550: { + SvalS = 13; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L33097: { + key_998X = arg0K0; + SstackS = ((SstackS) + 4); + arg2_999X = *((long *) (SstackS)); + if ((0 == (3 & (SvalS)))) { + mode_1000X = (((SvalS))>>2); + if ((1 == mode_1000X)) { + goto L26773;} + else { + if ((2 == mode_1000X)) { + goto L26773;} + else { + if ((3 == mode_1000X)) { + goto L26773;} + else { + if ((4 == mode_1000X)) { + goto L26773;} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_999X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((mode_1000X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}}}}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_999X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + L34456: { + key_1001X = arg0K0; + obj_1002X = SvalS; + if ((3 == (3 & obj_1002X))) { + if ((5 == (31 & ((((*((long *) ((((char *) (-3 + obj_1002X))) + -4))))>>2))))) { + channel_1003X = SvalS; + if ((0 == (*((long *) (((char *) (-3 + channel_1003X))))))) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = channel_1003X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + else { + status_1004X = close_channelB(channel_1003X); + if ((status_1004X == NO_ERRORS)) { + SvalS = 13; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + push_exception_continuationB(25, 1); + *((long *) (SstackS)) = channel_1003X; + SstackS = ((SstackS) + -4); + merged_arg0K0 = status_1004X; + merged_arg0K1 = key_1001X; + get_error_string_return_tag = 0; + goto get_error_string; + get_error_string_return_0: + x_1005X = get_error_string0_return_value; + *((long *) (SstackS)) = x_1005X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}}} + else { + goto L34464;}} + else { + goto L34464;}} + L37273: { + key_1006X = arg0K0; + SstackS = ((SstackS) + 4); + arg2_1007X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + arg3_1008X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + arg4_1009X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + arg5_1010X = *((long *) (SstackS)); + if ((0 == (3 & (arg4_1009X | arg3_1008X)))) { + if ((1 == arg2_1007X)) { + goto L37305;} + else { + if ((5 == arg2_1007X)) { + goto L37305;} + else { + goto L37325;}}} + else { + goto L37325;}} + L37545: { + key_1011X = arg0K0; + SstackS = ((SstackS) + 4); + arg2_1012X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + arg3_1013X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + arg4_1014X = *((long *) (SstackS)); + if ((0 == (3 & (arg3_1013X | arg2_1012X)))) { + obj_1015X = SvalS; + if ((3 == (3 & obj_1015X))) { + if ((5 == (31 & ((((*((long *) ((((char *) (-3 + obj_1015X))) + -4))))>>2))))) { + start_1016X = ((arg3_1013X)>>2); + count_1017X = ((arg2_1012X)>>2); + channel_1018X = SvalS; + v_1019X = 8 == (*((long *) (((char *) (-3 + channel_1018X))))); + if (v_1019X) { + if ((3 == (3 & arg4_1014X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + arg4_1014X))) + -4))))>>2))))) { + goto L36856;} + else { + goto L36848;}} + else { + goto L36848;}} + else { + arg0K0 = 5; + goto L36739;}} + else { + goto L37587;}} + else { + goto L37587;}} + else { + goto L37587;}} + L8203: { + val_1020X = *((long *) ((((char *) (-3 + ch_868X))) + 12)); + addr_1021X = (((char *) (-3 + prev_869X))) + 12; + S48_WRITE_BARRIER(prev_869X, addr_1021X, val_1020X); + *((long *) addr_1021X) = val_1020X; + addr_1022X = (((char *) (-3 + ch_868X))) + 12; + S48_WRITE_BARRIER(ch_868X, addr_1022X, 1); + *((long *) addr_1022X) = 1; + arg0K0 = (*((long *) ((((char *) (-3 + ch_868X))) + 16))); + goto L33202;} + L14784: { + i_1023X = arg0K0; + res_1024X = arg0K1; + if ((-1 == i_1023X)) { + SvalS = res_1024X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + channel_1025X = *((Svm_channelsS) + i_1023X); + if ((3 == (3 & channel_1025X))) { + if ((5 == (31 & ((((*((long *) ((((char *) (-3 + channel_1025X))) + -4))))>>2))))) { + addr_1026X = ALLOCATE_SPACE(0, 12); + *((long *) addr_1026X) = 2050; + x_1027X = 3 + (((long) (addr_1026X + 4))); + *((long *) (((char *) (-3 + x_1027X)))) = channel_1025X; + *((long *) ((((char *) (-3 + x_1027X))) + 4)) = res_1024X; + arg0K0 = x_1027X; + goto L14798;} + else { + arg0K0 = res_1024X; + goto L14798;}} + else { + arg0K0 = res_1024X; + goto L14798;}}} + L34529: { + key_1028X = arg0K0; + SstackS = ((SstackS) + 4); + arg2_1029X = *((long *) (SstackS)); + SstackS = ((SstackS) + 4); + arg3_1030X = *((long *) (SstackS)); + if ((3 == (3 & arg3_1030X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + arg3_1030X))) + -4))))>>2))))) { + obj_1031X = SvalS; + if ((3 == (3 & obj_1031X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + obj_1031X))) + -4))))>>2))))) { + comment_string_1032X = SvalS; + x_1033X = s48_image_writing_okayP(); + if (x_1033X) { + port_1034X = ps_open_output_file((((char *)(((char *) (-3 + arg3_1030X))))), &status_1035X); + if ((status_1035X == NO_ERRORS)) { + status_1036X = ps_write_string((((char *)(((char *) (-3 + comment_string_1032X))))), port_1034X); + if ((status_1036X == NO_ERRORS)) { + status_1037X = s48_write_image(arg2_1029X, port_1034X); + if ((status_1037X == NO_ERRORS)) { + status_1038X = ps_close(port_1034X); + if ((status_1038X == NO_ERRORS)) { + undumpables_1039X = s48_undumpable_records(&undumpable_count_1040X); + if ((0 == undumpable_count_1040X)) { + SvalS = 13; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + push_exception_continuationB(26, 1); + *((long *) (SstackS)) = arg3_1030X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg2_1029X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = comment_string_1032X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = undumpables_1039X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((undumpable_count_1040X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 5; + goto L16665;}} + else { + arg0K0 = 25; + arg0K1 = status_1038X; + goto L30184;}} + else { + status_1041X = ps_close(port_1034X); + if ((status_1041X == NO_ERRORS)) { + arg0K0 = 25; + arg0K1 = status_1037X; + goto L30184;} + else { + ps_write_string("Unable to close image file", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + arg0K0 = 25; + arg0K1 = status_1037X; + goto L30184;}}} + else { + status_1042X = ps_close(port_1034X); + if ((status_1042X == NO_ERRORS)) { + arg0K0 = 25; + arg0K1 = status_1036X; + goto L30184;} + else { + ps_write_string("Unable to close image file", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + arg0K0 = 25; + arg0K1 = status_1036X; + goto L30184;}}} + else { + arg0K0 = 10; + arg0K1 = status_1035X; + goto L30184;}} + else { + push_exception_continuationB(15, 1); + *((long *) (SstackS)) = arg3_1030X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg2_1029X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = comment_string_1032X; + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;}} + else { + goto L34561;}} + else { + goto L34561;}} + else { + goto L34561;}} + else { + goto L34561;}} + L30563: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = stob_877X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = proc_878X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L34107: { + minutesP_1043X = arg2K0; + if ((s48_Spending_interruptPS)) { + if ((s48_Spending_eventsPS)) { + s48_Spending_eventsPS = 0; + check_events_return_tag = 2; + goto check_events; + check_events_return_2: + temp_1044X = check_events0_return_value; + if (temp_1044X) { + goto L34133;} + else { + goto L34138;}} + else { + goto L34133;}} + else { + goto L34138;}} + L22847: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = proc_896X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = name_897X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L33368: { + key_1045X = arg0K0; + SstackS = ((SstackS) + 4); + arg2_1046X = *((long *) (SstackS)); + if ((3 == (3 & arg2_1046X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + arg2_1046X))) + -4))))>>2))))) { + x_1047X = SvalS; + if ((1 == x_1047X)) { + goto L33385;} + else { + if ((5 == x_1047X)) { + goto L33385;} + else { + goto L33390;}}} + else { + goto L33390;}} + else { + goto L33390;}} + L23938: { + table_1048X = arg0K0; + n_1049X = -1 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + arg2_686X))) + -4))))>>8)); + arg0K0 = 0; + arg0K1 = 0; + goto L12880;} + L27369: { + len_1050X = 1 + n_907X; + addr_1051X = ALLOCATE_SPACE(16, (4 + len_1050X)); + *((long *) addr_1051X) = (66 + (((len_1050X)<<8))); + string_1052X = 3 + (((long) (addr_1051X + 4))); + *((unsigned char *) ((((char *) (-3 + string_1052X))) + n_907X)) = 0; + arg0K0 = arg2_906X; + arg0K1 = (-1 + n_907X); + goto L27346;} + L27321: { + if ((25 == arg2_906X)) { + goto L27369;} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_906X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((n_907X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + L30968: { + if ((from_index_727X < 0)) { + goto L31022;} + else { + if ((to_index_728X < 0)) { + goto L31022;} + else { + if ((count_729X < 0)) { + goto L31022;} + else { + if ((3 == (3 & arg5_726X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + arg5_726X))) + -4))))>>2))))) { + arg0K0 = (-1 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + arg5_726X))) + -4))))>>8))); + goto L30989;} + else { + goto L30985;}} + else { + goto L30985;}}}}} + L30963: { + if ((3 == (3 & arg5_726X))) { + if ((17 == (31 & ((((*((long *) ((((char *) (-3 + arg5_726X))) + -4))))>>2))))) { + goto L30968;} + else { + goto L31022;}} + else { + goto L31022;}} + L31022: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg5_726X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((from_index_727X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg3_724X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((to_index_728X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((count_729X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 5; + goto L16665;} + L23097: { + push_exception_continuationB(5, 2); + *((long *) (SstackS)) = port_913X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + L23077: { + push_exception_continuationB(14, 2); + *((long *) (SstackS)) = port_913X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + L23317: { + push_exception_continuationB(5, 2); + *((long *) (SstackS)) = port_921X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + L23297: { + push_exception_continuationB(14, 2); + *((long *) (SstackS)) = port_921X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + L23531: { + push_exception_continuationB(5, 2); + *((long *) (SstackS)) = Kchar_927X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = port_928X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L23513: { + push_exception_continuationB(14, 2); + *((long *) (SstackS)) = Kchar_927X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = port_928X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L29458: { + arg0K0 = (*((long *) ((((char *) (-3 + stuff_935X))) + 4))); + goto L29452;} + L11650: { + if ((3 == (3 & thing_936X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + thing_936X))) + -4))))>>2))))) { + arg3K0 = (((char *)(((char *) (-3 + thing_936X))))); + goto L11692;} + else { + goto L11658;}} + else { + goto L11658;}} + L29443: { + { long ignoreXX; + PS_WRITE_CHAR(10, out_738X, ignoreXX) } + SvalS = 13; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L16741: { + StemplateS = (SvalS); + Slosing_opcodeS = opcode_740X; + arg0K0 = (2 + nargs_739X); + goto L16066;} + L16811: { + merged_arg3K0 = "exception handler is not a closure"; + loseD0_return_tag = 1; + goto loseD0; + loseD0_return_1: + goto L16741;} + L20966: { + key_1053X = arg0K0; + p_1054X = SenvS; + if ((3 == (3 & p_1054X))) { + if ((p_1054X < (((long) (Sstack_beginS))))) { + goto L21061;} + else { + if (((((long) (Sstack_endS))) < p_1054X)) { + goto L21061;} + else { + merged_arg0K0 = (SenvS); + merged_arg0K1 = (ScontS); + merged_arg0K2 = key_1053X; + merged_arg0K3 = 0; + save_env_in_heap_return_tag = 0; + goto save_env_in_heap; + save_env_in_heap_return_0: + v_1055X = save_env_in_heap0_return_value; + SenvS = v_1055X; + goto L21061;}}} + else { + goto L21061;}} + L20977: { + env_1056X = arg0K0; + a_1057X = *((long *) ((((char *) (-3 + (StemplateS)))) + ((((((((*((unsigned char *) ((Scode_pointerS) + 1))))<<8)) + (*((unsigned char *) ((Scode_pointerS) + 2)))))<<2)))); + addr_1058X = ALLOCATE_SPACE(3, 12); + *((long *) addr_1058X) = 2062; + x_1059X = 3 + (((long) (addr_1058X + 4))); + *((long *) (((char *) (-3 + x_1059X)))) = a_1057X; + *((long *) ((((char *) (-3 + x_1059X))) + 4)) = env_1056X; + if ((3 == (3 & x_1059X))) { + if ((0 == (128 & (*((long *) ((((char *) (-3 + x_1059X))) + -4)))))) { + *((long *) ((((char *) (-3 + x_1059X))) + -4)) = (128 | (*((long *) ((((char *) (-3 + x_1059X))) + -4)))); + arg0K0 = x_1059X; + goto L20985;} + else { + arg0K0 = x_1059X; + goto L20985;}} + else { + arg0K0 = x_1059X; + goto L20985;}} + L20788: { + i_1060X = arg0K0; + offset_1061X = arg0K1; + env_1062X = arg0K2; + if ((i_1060X == total_count_393X)) { + SvalS = new_env_762X; + Scode_pointerS = ((Scode_pointerS) + (1 + offset_1061X)); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + back_1063X = *((unsigned char *) ((Scode_pointerS) + (1 + offset_1061X))); + arg0K0 = env_1062X; + arg0K1 = back_1063X; + goto L20884;}} + L20684: { + value_1064X = arg0K0; + SvalS = value_1064X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L16999: { + i_1065X = arg0K0; + m_1066X = arg0K1; + if ((0 == (n_950X & m_1066X))) { + arg0K0 = (1 + i_1065X); + arg0K1 = (((m_1066X)<<1)); + goto L16999;} + else { + Spending_interruptsS = ((Spending_interruptsS) & (~ m_1066X)); + if ((i_1065X == 0)) { + *((long *) (SstackS)) = (Sinterrupted_templateS); + SstackS = ((SstackS) + -4); + Sinterrupted_templateS = 1; + *((long *) (SstackS)) = ((((Senabled_interruptsS))<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16918;} + else { + if ((i_1065X == 2)) { + *((long *) (SstackS)) = (Sfinalize_theseS); + SstackS = ((SstackS) + -4); + Sfinalize_theseS = 25; + *((long *) (SstackS)) = ((((Senabled_interruptsS))<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16918;} + else { + if ((i_1065X == 3)) { + channel_1067X = Spending_channels_headS; + next_1068X = *((long *) ((((char *) (-3 + channel_1067X))) + 12)); + Spending_channels_headS = next_1068X; + addr_1069X = (((char *) (-3 + channel_1067X))) + 12; + S48_WRITE_BARRIER(channel_1067X, addr_1069X, 1); + *((long *) addr_1069X) = 1; + if ((1 == next_1068X)) { + Spending_channels_tailS = 1; + arg0K0 = channel_1067X; + goto L8364;} + else { + arg0K0 = channel_1067X; + goto L8364;}} + else { + if ((i_1065X == 4)) { + *((long *) (SstackS)) = (Sos_signal_typeS); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (Sos_signal_argumentS); + SstackS = ((SstackS) + -4); + Sos_signal_typeS = 1; + Sos_signal_argumentS = 1; + *((long *) (SstackS)) = ((((Senabled_interruptsS))<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16918;} + else { + *((long *) (SstackS)) = ((((Senabled_interruptsS))<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16918;}}}}}} + L16084: { + skip_1070X = arg0K0; + stack_arg_count_1071X = arg0K1; + template_1072X = *((long *) (((char *) (-3 + (SvalS))))); + StemplateS = template_1072X; + Scode_pointerS = ((((char *) (-3 + (*((long *) (((char *) (-3 + template_1072X)))))))) + skip_1070X); + SenvS = (*((long *) ((((char *) (-3 + (SvalS)))) + 4))); + arg0K0 = stack_space_952X; + arg0K1 = stack_arg_count_1071X; + goto L15974;} + L16107: { + skip_1073X = arg0K0; + *((long *) (SstackS)) = 25; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((stack_arg_count_771X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((stack_arg_count_771X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = skip_1073X; + arg0K1 = (3 + stack_arg_count_771X); + goto L16084;} + L16361: { + skip_1074X = arg0K0; + stack_arg_count_1075X = arg0K1; + template_1076X = *((long *) (((char *) (-3 + (SvalS))))); + StemplateS = template_1076X; + Scode_pointerS = ((((char *) (-3 + (*((long *) (((char *) (-3 + template_1076X)))))))) + skip_1074X); + SenvS = (*((long *) ((((char *) (-3 + (SvalS)))) + 4))); + arg0K0 = stack_space_959X; + arg0K1 = stack_arg_count_1075X; + goto L15974;} + L16386: { + skip_1077X = arg0K0; + if ((total_arg_count_790X < 3)) { + arg0K0 = total_arg_count_790X; + goto L16394;} + else { + if ((2 < stack_arg_count_784X)) { + arg0K0 = stack_arg_count_784X; + goto L16394;} + else { + arg0K0 = 2; + goto L16394;}}} + L19282: { + SvalS = (*((long *) ((((char *) (-3 + cont_965X))) + 16))); + arg0K0 = stack_nargs_801X; + arg0K1 = list_args_802X; + arg0K2 = list_arg_count_803X; + goto L17666;} + L20444: { + merged_arg0K0 = list_args_802X; + merged_arg0K1 = stack_nargs_801X; + pop_args_GlistS_return_tag = 4; + goto pop_args_GlistS; + pop_args_GlistS_return_4: + args_1078X = pop_args_GlistS0_return_value; + push_exception_continuationB(4, 0); + *((long *) (SstackS)) = 1; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = args_1078X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L10634: { + if ((3 == (3 & x_456X))) { + if ((10 == (31 & ((((*((long *) ((((char *) (-3 + x_456X))) + -4))))>>2))))) { + arg0K0 = 5; + goto L38038;} + else { + arg0K0 = 1; + goto L38038;}} + else { + arg0K0 = 1; + goto L38038;}} + L28549: { + if ((3 == (3 & n_458X))) { + if ((10 == (31 & ((((*((long *) ((((char *) (-3 + n_458X))) + -4))))>>2))))) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = n_458X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + else { + goto L28553;}} + else { + goto L28553;}} + L28748: { + if ((3 == (3 & n_459X))) { + if ((10 == (31 & ((((*((long *) ((((char *) (-3 + n_459X))) + -4))))>>2))))) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = n_459X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + else { + goto L28752;}} + else { + goto L28752;}} + L28947: { + if ((3 == (3 & n_460X))) { + if ((10 == (31 & ((((*((long *) ((((char *) (-3 + n_460X))) + -4))))>>2))))) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = n_460X; + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + else { + goto L28951;}} + else { + goto L28951;}} + L6821: { + if ((536870911 < lo_c_976X)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_467X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_468X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + if ((lo_c_976X < 0)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_467X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_468X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + if ((8192 < mid_c_979X)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_467X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_468X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + if ((a_469X < 0)) { + if ((b_470X < 0)) { + goto L6848;} + else { + goto L6855;}} + else { + if ((b_470X < 0)) { + goto L6855;} + else { + goto L6848;}}}}}} + L7115: { + if ((536870911 < c_982X)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_474X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_475X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + SvalS = (((c_982X)<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}} + L7114: { + SvalS = ((((0 - c_982X))<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L7283: { + if ((536870911 < c_985X)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_488X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_489X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + SvalS = (((c_985X)<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}} + L7282: { + SvalS = ((((0 - c_985X))<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L25344: { + n_1079X = arg0K0; + SvalS = (((n_1079X)<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L21523: { + i_1080X = arg0K0; + rest_list_1081X = arg0K1; + if ((25 == rest_list_1081X)) { + SvalS = new_838X; + Scode_pointerS = ((Scode_pointerS) + 2); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + *((long *) ((((char *) (-3 + new_838X))) + (((i_1080X)<<2)))) = (*((long *) (((char *) (-3 + rest_list_1081X))))); + arg0K0 = (1 + i_1080X); + arg0K1 = (*((long *) ((((char *) (-3 + rest_list_1081X))) + 4))); + goto L21523;}} + L13301: { + foo_1082X = arg0K0; + if ((1 == foo_1082X)) { + addr_1083X = ALLOCATE_SPACE(1, 12); + *((long *) addr_1083X) = 2054; + x_1084X = 3 + (((long) (addr_1083X + 4))); + *((long *) (((char *) (-3 + x_1084X)))) = string_853X; + *((long *) ((((char *) (-3 + x_1084X))) + 4)) = bucket_997X; + addr_1085X = (((char *) (-3 + table_852X))) + (((index_996X)<<2)); + S48_WRITE_BARRIER(table_852X, addr_1085X, x_1084X); + *((long *) addr_1085X) = x_1084X; + arg0K0 = x_1084X; + goto L24529;} + else { + s2_1086X = *((long *) (((char *) (-3 + foo_1082X)))); + len_1087X = (long)(((unsigned long)(*((long *) ((((char *) (-3 + string_853X))) + -4))))>>8); + if ((len_1087X == ((long)(((unsigned long)(*((long *) ((((char *) (-3 + s2_1086X))) + -4))))>>8)))) { + if (((!memcmp((void *)(((char *) (-3 + s2_1086X))), (void *)(((char *) (-3 + string_853X))),len_1087X)))) { + arg0K0 = foo_1082X; + goto L24529;} + else { + goto L13317;}} + else { + goto L13317;}}} + L26773: { + if ((0 == (3 & arg2_999X))) { + if (((((arg2_999X)>>2)) < 0)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_999X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((mode_1000X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + arg0K0 = (((arg2_999X)>>2)); + goto L26593;}} + else { + if ((3 == (3 & arg2_999X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + arg2_999X))) + -4))))>>2))))) { + if ((1 == mode_1000X)) { + goto L26651;} + else { + if ((3 == mode_1000X)) { + goto L26651;} + else { + v_1088X = ps_open_fd((((char *)(((char *) (-3 + arg2_999X))))), 0, &v_1089X); + arg0K0 = v_1088X; + arg0K1 = v_1089X; + goto L26664;}}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_999X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((mode_1000X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + else { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_999X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((mode_1000X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}}} + L34464: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 1; + goto L16665;} + L37305: { + obj_1090X = SvalS; + if ((3 == (3 & obj_1090X))) { + if ((5 == (31 & ((((*((long *) ((((char *) (-3 + obj_1090X))) + -4))))>>2))))) { + x_1091X = SvalS; + if ((1 == arg2_1007X)) { + arg2K0 = 0; + goto L37322;} + else { + arg2K0 = 1; + goto L37322;}} + else { + goto L37325;}} + else { + goto L37325;}} + L37325: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg5_1010X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg4_1009X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg3_1008X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg2_1007X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 5; + goto L16665;} + L36856: { + if ((3 == (3 & arg4_1014X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + arg4_1014X))) + -4))))>>2))))) { + arg0K0 = (-1 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + arg4_1014X))) + -4))))>>8))); + goto L36868;} + else { + goto L36864;}} + else { + goto L36864;}} + L36848: { + if ((3 == (3 & arg4_1014X))) { + if ((17 == (31 & ((((*((long *) ((((char *) (-3 + arg4_1014X))) + -4))))>>2))))) { + goto L36856;} + else { + arg0K0 = 5; + goto L36739;}} + else { + arg0K0 = 5; + goto L36739;}} + L36739: { + reason_1092X = arg0K0; + push_exception_continuationB(reason_1092X, 1); + *((long *) (SstackS)) = arg4_1014X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((start_1016X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((count_1017X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = channel_1018X; + SstackS = ((SstackS) + -4); + arg0K0 = 4; + goto L16665;} + L37587: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg4_1014X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg3_1013X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg2_1012X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 4; + goto L16665;} + L14798: { + v_1093X = arg0K0; + arg0K0 = (-1 + i_1023X); + arg0K1 = v_1093X; + goto L14784;} + L30184: { + reason_1094X = arg0K0; + status_1095X = arg0K1; + push_exception_continuationB(reason_1094X, 1); + *((long *) (SstackS)) = arg3_1030X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg2_1029X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = comment_string_1032X; + SstackS = ((SstackS) + -4); + merged_arg0K0 = status_1095X; + merged_arg0K1 = key_1028X; + get_error_string_return_tag = 1; + goto get_error_string; + get_error_string_return_1: + x_1096X = get_error_string0_return_value; + *((long *) (SstackS)) = x_1096X; + SstackS = ((SstackS) + -4); + arg0K0 = 4; + goto L16665;} + L34561: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg3_1030X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = arg2_1029X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;} + L34133: { + SvalS = 13; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L34138: { + if ((0 == (Spending_interruptsS))) { + s48_wait_for_event((((arg2_678X)>>2)), minutesP_1043X); + goto L34133;} + else { + goto L34133;}} + L33385: { + if ((1 == (SvalS))) { + v_1097X = Hlookup2102((Sexported_bindingsS), arg2_1046X, key_1045X); + arg0K0 = v_1097X; + goto L33442;} + else { + v_1098X = Hlookup2083((Simported_bindingsS), arg2_1046X, key_1045X); + arg0K0 = v_1098X; + goto L33442;}} + L33390: { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_1046X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (SvalS); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + L12880: { + i_1099X = arg0K0; + h_1100X = arg0K1; + if ((i_1099X < n_1049X)) { + arg0K0 = (1 + i_1099X); + arg0K1 = (h_1100X + (((*((unsigned char *) ((((char *) (-3 + arg2_686X))) + i_1099X)))))); + goto L12880;} + else { + index_1101X = 1023 & h_1100X; + bucket_1102X = *((long *) ((((char *) (-3 + table_1048X))) + (((index_1101X)<<2)))); + arg0K0 = 1; + arg0K1 = bucket_1102X; + goto L12844;}} + L27346: { + l_1103X = arg0K0; + i_1104X = arg0K1; + if ((i_1104X < 0)) { + SvalS = string_1052X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + *((unsigned char *) ((((char *) (-3 + string_1052X))) + i_1104X)) = ((((((*((long *) (((char *) (-3 + l_1103X))))))>>8)))); + arg0K0 = (*((long *) ((((char *) (-3 + l_1103X))) + 4))); + arg0K1 = (-1 + i_1104X); + goto L27346;}} + L30989: { + y_1105X = arg0K0; + if ((y_1105X < (from_index_727X + count_729X))) { + goto L31022;} + else { + if ((3 == (3 & arg3_724X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + arg3_724X))) + -4))))>>2))))) { + arg0K0 = (-1 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + arg3_724X))) + -4))))>>8))); + goto L31004;} + else { + goto L31000;}} + else { + goto L31000;}}} + L30985: { + arg0K0 = ((long)(((unsigned long)(*((long *) ((((char *) (-3 + arg5_726X))) + -4))))>>8)); + goto L30989;} + L11692: { + v_1106X = arg3K0; + ps_write_string(v_1106X, out_738X); + goto L29458;} + L11658: { + if ((3 == (3 & thing_936X))) { + if ((1 == (31 & ((((*((long *) ((((char *) (-3 + thing_936X))) + -4))))>>2))))) { + arg3K0 = (((char *)(((char *) (-3 + (*((long *) (((char *) (-3 + thing_936X)))))))))); + goto L11692;} + else { + goto L11666;}} + else { + goto L11666;}} + L21061: { + arg0K0 = (SenvS); + goto L20971;} + L20985: { + value_1107X = arg0K0; + SvalS = value_1107X; + Scode_pointerS = ((Scode_pointerS) + 4); + arg1K0 = (Scode_pointerS); + goto L18438;} + L20884: { + env_1108X = arg0K0; + i_1109X = arg0K1; + if ((0 == i_1109X)) { + count_1110X = *((unsigned char *) ((Scode_pointerS) + (2 + offset_1061X))); + arg0K0 = count_1110X; + arg0K1 = i_1060X; + arg0K2 = (2 + offset_1061X); + goto L20805;} + else { + arg0K0 = (*((long *) (((char *) (-3 + env_1108X))))); + arg0K1 = (-1 + i_1109X); + goto L20884;}} + L16918: { + arg_count_1111X = arg0K0; + obj_1112X = Sinterrupt_handlersS; + if ((3 == (3 & obj_1112X))) { + if ((2 == (31 & ((((*((long *) ((((char *) (-3 + obj_1112X))) + -4))))>>2))))) { + goto L16932;} + else { + goto L17012;}} + else { + goto L17012;}} + L8364: { + channel_1113X = arg0K0; + x_1114X = 1 == (Spending_channels_headS); + if (x_1114X) { + goto L8378;} + else { + Spending_interruptsS = (8 | (Spending_interruptsS)); + if ((0 == ((Spending_interruptsS) & (Senabled_interruptsS)))) { + s48_Spending_interruptPS = 0; + if ((s48_Spending_eventsPS)) { + s48_Spending_interruptPS = 1; + goto L8378;} + else { + goto L8378;}} + else { + s48_Spending_interruptPS = 1; + goto L8378;}}} + L15974: { + stack_slots_1115X = arg0K0; + stack_arg_count_1116X = arg0K1; + if ((stack_slots_1115X < (64 + (((((SstackS) - (Sstack_limitS)))>>2))))) { + goto L15976;} + else { + space_1117X = 1 + (((((Sstack_endS) - (SstackS)))>>2)); + v_1118X = AVAILABLEp(space_1117X); + if (v_1118X) { + arg2K0 = 1; + arg0K1 = 0; + goto L16033;} + else { + collect_saving_temps(1, 1, &temp1_1119X); + v_1120X = AVAILABLEp(space_1117X); + if (v_1120X) { + arg2K0 = 1; + arg0K1 = 0; + goto L16033;} + else { + arg2K0 = 0; + arg0K1 = 0; + goto L16033;}}}} + L16394: { + final_stack_arg_count_1121X = arg0K0; + if ((stack_arg_count_784X < final_stack_arg_count_1121X)) { + arg0K0 = final_stack_arg_count_1121X; + goto L16398;} + else { + arg0K0 = stack_arg_count_784X; + goto L16398;}} + L28553: { + SvalS = 1; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L28752: { + SvalS = 1; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L28951: { + SvalS = 1; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L6848: { + if ((536870911 < c_980X)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_467X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_468X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + SvalS = (((c_980X)<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}} + L6855: { + if ((536870912 < c_980X)) { + push_exception_continuationB(5, 1); + *((long *) (SstackS)) = arg2_467X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_468X; + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + SvalS = ((((0 - c_980X))<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}} + L24529: { + val_1122X = arg0K0; + SvalS = val_1122X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L13317: { + arg0K0 = (*((long *) ((((char *) (-3 + foo_1082X))) + 4))); + goto L13301;} + L26593: { + index_1123X = arg0K0; + channel_1124X = make_registered_channel(mode_1000X, arg2_999X, index_1123X, key_998X, &reason_1125X); + if ((1 == channel_1124X)) { + if ((3 == (3 & arg2_999X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + arg2_999X))) + -4))))>>2))))) { + if ((1 == mode_1000X)) { + goto L26708;} + else { + if ((3 == mode_1000X)) { + goto L26708;} + else { + v_1126X = ps_close_fd(index_1123X); + arg0K0 = v_1126X; + goto L26703;}}} + else { + push_exception_continuationB(reason_1125X, 1); + *((long *) (SstackS)) = arg2_999X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((mode_1000X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + else { + push_exception_continuationB(reason_1125X, 1); + *((long *) (SstackS)) = arg2_999X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((mode_1000X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + else { + SvalS = channel_1124X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}} + L26651: { + v_1127X = ps_open_fd((((char *)(((char *) (-3 + arg2_999X))))), 1, &v_1128X); + arg0K0 = v_1127X; + arg0K1 = v_1128X; + goto L26664;} + L26664: { + channel_1129X = arg0K0; + status_1130X = arg0K1; + if ((status_1130X == NO_ERRORS)) { + arg0K0 = channel_1129X; + goto L26593;} + else { + if ((status_1130X == ENOENT)) { + push_exception_continuationB(10, 1); + *((long *) (SstackS)) = arg2_999X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((mode_1000X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + push_exception_continuationB(25, 1); + *((long *) (SstackS)) = arg2_999X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((mode_1000X)<<2)); + SstackS = ((SstackS) + -4); + merged_arg0K0 = status_1130X; + merged_arg0K1 = key_998X; + get_error_string_return_tag = 2; + goto get_error_string; + get_error_string_return_2: + x_1131X = get_error_string0_return_value; + *((long *) (SstackS)) = x_1131X; + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16665;}}} + L37322: { + waitP_1132X = arg2K0; + start_1133X = ((arg4_1009X)>>2); + count_1134X = ((arg3_1008X)>>2); + if ((4 == (*((long *) (((char *) (-3 + x_1091X))))))) { + if ((3 == (3 & arg5_1010X))) { + if ((0 == (128 & (*((long *) ((((char *) (-3 + arg5_1010X))) + -4)))))) { + if ((3 == (3 & arg5_1010X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + arg5_1010X))) + -4))))>>2))))) { + goto L36458;} + else { + goto L36450;}} + else { + goto L36450;}} + else { + arg0K0 = 5; + goto L36341;}} + else { + arg0K0 = 5; + goto L36341;}} + else { + arg0K0 = 5; + goto L36341;}} + L36868: { + length_1135X = arg0K0; + if ((length_1135X < (start_1016X + count_1017X))) { + arg0K0 = 7; + goto L36739;} + else { + got_1136X = ps_write_fd(((((*((long *) ((((char *) (-3 + channel_1018X))) + 8))))>>2)), ((((char *) (-3 + arg4_1014X))) + start_1016X), count_1017X, &pendingP_1137X, &status_1138X); + if ((status_1138X == NO_ERRORS)) { + if (pendingP_1137X) { + addr_1139X = (((char *) (-3 + channel_1018X))) + 16; + S48_WRITE_BARRIER(channel_1018X, addr_1139X, 5); + *((long *) addr_1139X) = 5; + s48_Spending_interruptPS = 0; + Senabled_interruptsS = 0; + arg0K0 = 13; + goto L36739;} + else { + SvalS = (((got_1136X)<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}} + else { + push_exception_continuationB(25, 1); + *((long *) (SstackS)) = arg4_1014X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((start_1016X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((count_1017X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = channel_1018X; + SstackS = ((SstackS) + -4); + merged_arg0K0 = status_1138X; + merged_arg0K1 = key_1011X; + get_error_string_return_tag = 3; + goto get_error_string; + get_error_string_return_3: + x_1140X = get_error_string0_return_value; + *((long *) (SstackS)) = x_1140X; + SstackS = ((SstackS) + -4); + arg0K0 = 5; + goto L16665;}}} + L36864: { + arg0K0 = ((long)(((unsigned long)(*((long *) ((((char *) (-3 + arg4_1014X))) + -4))))>>8)); + goto L36868;} + L33442: { + val_1141X = arg0K0; + SvalS = val_1141X; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L12844: { + previous_foo_1142X = arg0K0; + foo_1143X = arg0K1; + if ((1 == foo_1143X)) { + goto L23940;} + else { + s2_1144X = *((long *) (((char *) (-3 + foo_1143X)))); + len_1145X = (long)(((unsigned long)(*((long *) ((((char *) (-3 + arg2_686X))) + -4))))>>8); + if ((len_1145X == ((long)(((unsigned long)(*((long *) ((((char *) (-3 + s2_1144X))) + -4))))>>8)))) { + if (((!memcmp((void *)(((char *) (-3 + s2_1144X))), (void *)(((char *) (-3 + arg2_686X))),len_1145X)))) { + if ((1 == previous_foo_1142X)) { + value_1146X = *((long *) ((((char *) (-3 + foo_1143X))) + 12)); + addr_1147X = (((char *) (-3 + table_1048X))) + (((index_1101X)<<2)); + S48_WRITE_BARRIER(table_1048X, addr_1147X, value_1146X); + *((long *) addr_1147X) = value_1146X; + goto L23940;} + else { + val_1148X = *((long *) ((((char *) (-3 + foo_1143X))) + 12)); + addr_1149X = (((char *) (-3 + previous_foo_1142X))) + 12; + S48_WRITE_BARRIER(previous_foo_1142X, addr_1149X, val_1148X); + *((long *) addr_1149X) = val_1148X; + goto L23940;}} + else { + goto L12906;}} + else { + goto L12906;}}} + L31004: { + y_1150X = arg0K0; + if ((y_1150X < (to_index_728X + count_729X))) { + goto L31022;} + else { + memcpy((void *)((((char *) (-3 + arg3_724X))) + to_index_728X), (void *)((((char *) (-3 + arg5_726X))) + from_index_727X),count_729X); + SvalS = 13; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}} + L31000: { + arg0K0 = ((long)(((unsigned long)(*((long *) ((((char *) (-3 + arg3_724X))) + -4))))>>8)); + goto L31004;} + L11666: { + if ((1 == thing_936X)) { + goto L11669;} + else { + if ((5 == thing_936X)) { + goto L11669;} + else { + if ((25 == thing_936X)) { + arg3K0 = "()"; + goto L11692;} + else { + if ((3 == (3 & thing_936X))) { + if ((0 == (31 & ((((*((long *) ((((char *) (-3 + thing_936X))) + -4))))>>2))))) { + arg3K0 = "(...)"; + goto L11692;} + else { + goto L11682;}} + else { + goto L11682;}}}}} + L20805: { + count_1151X = arg0K0; + i_1152X = arg0K1; + offset_1153X = arg0K2; + if ((0 == count_1151X)) { + arg0K0 = i_1152X; + arg0K1 = offset_1153X; + arg0K2 = env_1108X; + goto L20788;} + else { + value_1154X = *((long *) ((((char *) (-3 + env_1108X))) + ((((*((unsigned char *) ((Scode_pointerS) + (1 + offset_1153X)))))<<2)))); + addr_1155X = (((char *) (-3 + new_env_762X))) + (((i_1152X)<<2)); + S48_WRITE_BARRIER(new_env_762X, addr_1155X, value_1154X); + *((long *) addr_1155X) = value_1154X; + arg0K0 = (-1 + count_1151X); + arg0K1 = (1 + i_1152X); + arg0K2 = (1 + offset_1153X); + goto L20805;}} + L16932: { + Senabled_interruptsS = 0; + if ((0 == ((Spending_interruptsS) & (Senabled_interruptsS)))) { + s48_Spending_interruptPS = 0; + if ((s48_Spending_eventsPS)) { + s48_Spending_interruptPS = 1; + goto L16934;} + else { + goto L16934;}} + else { + s48_Spending_interruptPS = 1; + goto L16934;}} + L17012: { + ps_error("interrupt handler is not a vector", 0); + goto L16932;} + L8378: { + *((long *) (SstackS)) = channel_1113X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (*((long *) ((((char *) (-3 + channel_1113X))) + 16))); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = ((((Senabled_interruptsS))<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 3; + goto L16918;} + L15976: { + if ((s48_Spending_interruptPS)) { + if ((s48_Spending_eventsPS)) { + s48_Spending_eventsPS = 0; + check_events_return_tag = 3; + goto check_events; + check_events_return_3: + v_1156X = check_events0_return_value; + if (v_1156X) { + arg0K0 = stack_arg_count_1116X; + goto L16894;} + else { + goto L15980;}} + else { + arg0K0 = stack_arg_count_1116X; + goto L16894;}} + else { + goto L15980;}} + L16033: { + okayP_1157X = arg2K0; + key_1158X = arg0K1; + if (okayP_1157X) { + arg0K0 = key_1158X; + goto L15987;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = key_1158X; + goto L15987;}} + L16398: { + v_1159X = arg0K0; + merged_arg0K0 = v_1159X; + merged_arg0K1 = stack_arg_count_784X; + merged_arg0K2 = list_args_785X; + merged_arg0K3 = list_arg_count_786X; + rest_list_setup_return_tag = 2; + goto rest_list_setup; + rest_list_setup_return_2: + *((long *) (SstackS)) = (((final_stack_arg_count_1121X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((total_arg_count_790X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = skip_1077X; + arg0K1 = (3 + final_stack_arg_count_1121X); + goto L16361;} + L26708: { + v_1160X = ps_close_fd(index_1123X); + arg0K0 = v_1160X; + goto L26703;} + L26703: { + status_1161X = arg0K0; + if ((status_1161X == NO_ERRORS)) { + push_exception_continuationB(reason_1125X, 1); + *((long *) (SstackS)) = arg2_999X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((mode_1000X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;} + else { + channel_close_error(status_1161X, index_1123X, arg2_999X); + push_exception_continuationB(reason_1125X, 1); + *((long *) (SstackS)) = arg2_999X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((mode_1000X)<<2)); + SstackS = ((SstackS) + -4); + arg0K0 = 2; + goto L16665;}} + L36458: { + if ((3 == (3 & arg5_1010X))) { + if ((16 == (31 & ((((*((long *) ((((char *) (-3 + arg5_1010X))) + -4))))>>2))))) { + arg0K0 = (-1 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + arg5_1010X))) + -4))))>>8))); + goto L36470;} + else { + goto L36466;}} + else { + goto L36466;}} + L36450: { + if ((3 == (3 & arg5_1010X))) { + if ((17 == (31 & ((((*((long *) ((((char *) (-3 + arg5_1010X))) + -4))))>>2))))) { + goto L36458;} + else { + arg0K0 = 5; + goto L36341;}} + else { + arg0K0 = 5; + goto L36341;}} + L36341: { + reason_1162X = arg0K0; + push_exception_continuationB(reason_1162X, 1); + *((long *) (SstackS)) = arg5_1010X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((start_1133X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((count_1134X)<<2)); + SstackS = ((SstackS) + -4); + if (waitP_1132X) { + arg0K0 = 5; + goto L36356;} + else { + arg0K0 = 1; + goto L36356;}} + L23940: { + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + L12906: { + arg0K0 = foo_1143X; + arg0K1 = (*((long *) ((((char *) (-3 + foo_1143X))) + 12))); + goto L12844;} + L11669: { + if ((1 == thing_936X)) { + arg3K0 = "#f"; + goto L11692;} + else { + arg3K0 = "#t"; + goto L11692;}} + L11682: { + if ((3 == (3 & thing_936X))) { + if ((2 == (31 & ((((*((long *) ((((char *) (-3 + thing_936X))) + -4))))>>2))))) { + arg3K0 = "#(...)"; + goto L11692;} + else { + goto L11686;}} + else { + goto L11686;}} + L16934: { + SvalS = (*((long *) ((((char *) (-3 + (Sinterrupt_handlersS)))) + (((i_1065X)<<2))))); + obj_1163X = SvalS; + if ((3 == (3 & obj_1163X))) { + if ((3 == (31 & ((((*((long *) ((((char *) (-3 + obj_1163X))) + -4))))>>2))))) { + goto L16951;} + else { + goto L17037;}} + else { + goto L17037;}} + L15980: { + arg1K0 = (Scode_pointerS); + goto L18438;} + L15987: { + v_1164X = arg0K0; + merged_arg0K0 = v_1164X; + copy_stack_into_heap_return_tag = 3; + goto copy_stack_into_heap; + copy_stack_into_heap_return_3: + if ((stack_slots_1115X < (64 + (((((SstackS) - (Sstack_limitS)))>>2))))) { + goto L15976;} + else { + ps_error("VM's stack is too small (how can this happen?)", 0); + goto L15976;}} + L36470: { + length_1165X = arg0K0; + if ((length_1165X < (start_1133X + count_1134X))) { + arg0K0 = 7; + goto L36341;} + else { + got_1166X = ps_read_fd(((((*((long *) ((((char *) (-3 + x_1091X))) + 8))))>>2)), ((((char *) (-3 + arg5_1010X))) + start_1133X), count_1134X, waitP_1132X, &eofP_1167X, &pendingP_1168X, &status_1169X); + if ((status_1169X == NO_ERRORS)) { + if (eofP_1167X) { + SvalS = 21; + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;} + else { + if (pendingP_1168X) { + addr_1170X = (((char *) (-3 + x_1091X))) + 16; + S48_WRITE_BARRIER(x_1091X, addr_1170X, 5); + *((long *) addr_1170X) = 5; + s48_Spending_interruptPS = 0; + Senabled_interruptsS = 0; + arg0K0 = 13; + goto L36341;} + else { + SvalS = (((got_1166X)<<2)); + Scode_pointerS = ((Scode_pointerS) + 1); + arg1K0 = (Scode_pointerS); + goto L18438;}}} + else { + push_exception_continuationB(25, 1); + *((long *) (SstackS)) = arg5_1010X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((start_1133X)<<2)); + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = (((count_1134X)<<2)); + SstackS = ((SstackS) + -4); + if (waitP_1132X) { + arg0K0 = 5; + goto L36393;} + else { + arg0K0 = 1; + goto L36393;}}}} + L36466: { + arg0K0 = ((long)(((unsigned long)(*((long *) ((((char *) (-3 + arg5_1010X))) + -4))))>>8)); + goto L36470;} + L36356: { + x_1171X = arg0K0; + *((long *) (SstackS)) = x_1171X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_1091X; + SstackS = ((SstackS) + -4); + arg0K0 = 5; + goto L16665;} + L11686: { + if ((3 == (3 & thing_936X))) { + if ((3 == (31 & ((((*((long *) ((((char *) (-3 + thing_936X))) + -4))))>>2))))) { + arg3K0 = "#{procedure}"; + goto L11692;} + else { + arg3K0 = "???"; + goto L11692;}} + else { + arg3K0 = "???"; + goto L11692;}} + L16951: { + StemplateS = (SvalS); + Slosing_opcodeS = (0 - i_1065X); + arg0K0 = arg_count_1111X; + goto L16066;} + L17037: { + ps_error("interrupt handler is not a closure", 1, i_1065X); + goto L16951;} + L36393: { + x_1172X = arg0K0; + *((long *) (SstackS)) = x_1172X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_1091X; + SstackS = ((SstackS) + -4); + merged_arg0K0 = status_1169X; + merged_arg0K1 = key_1006X; + get_error_string_return_tag = 4; + goto get_error_string; + get_error_string_return_4: + x_1173X = get_error_string0_return_value; + *((long *) (SstackS)) = x_1173X; + SstackS = ((SstackS) + -4); + arg0K0 = 6; + goto L16665;} + loseD0: { + message_369X = merged_arg3K0;{ + why_1174X = (((*((long *) ((SstackS) + (4 + (((nargs_739X)<<2)))))))>>2); + ps_write_string("Template UIDs: ", (stderr)); + current_template_1175X = StemplateS; + out_1176X = stderr; + if ((0 == (3 & (*((long *) ((((char *) (-3 + current_template_1175X))) + 4)))))) { + if ((current_template_1175X == (*((long *) ((((char *) (-3 + (Sbottom_of_stackS)))) + 8))))) { + arg2K0 = 0; + goto L10518;} + else { + ps_write_integer(((((*((long *) ((((char *) (-3 + current_template_1175X))) + 4))))>>2)), out_1176X); + arg2K0 = 1; + goto L10518;}} + else { + arg2K0 = 0; + goto L10518;}} + L10518: { + not_firstP_1177X = arg2K0; + arg0K0 = (ScontS); + arg2K1 = not_firstP_1177X; + goto L10525;} + L10525: { + cont_1178X = arg0K0; + not_firstP_1179X = arg2K1; + if ((3 == (3 & cont_1178X))) { + if ((9 == (31 & ((((*((long *) ((((char *) (-3 + cont_1178X))) + -4))))>>2))))) { + template_1180X = *((long *) ((((char *) (-3 + cont_1178X))) + 8)); + if ((0 == (3 & (*((long *) ((((char *) (-3 + template_1180X))) + 4)))))) { + if ((template_1180X == (*((long *) ((((char *) (-3 + (Sbottom_of_stackS)))) + 8))))) { + arg2K0 = not_firstP_1179X; + goto L10534;} + else { + if (not_firstP_1179X) { + ps_write_string(" <- ", out_1176X); + goto L10573;} + else { + goto L10573;}}} + else { + arg2K0 = not_firstP_1179X; + goto L10534;}} + else { + goto L16684;}} + else { + goto L16684;}} + L10534: { + v_1181X = arg2K0; + arg0K0 = (*((long *) (((char *) (-3 + cont_1178X))))); + arg2K1 = v_1181X; + goto L10525;} + L10573: { + ps_write_integer(((((*((long *) ((((char *) (-3 + template_1180X))) + 4))))>>2)), out_1176X); + arg2K0 = 1; + goto L10534;} + L16684: { + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + if ((why_1174X == 1)) { + if ((0 == (3 & (*((long *) (((char *) (-3 + (*((long *) ((SstackS) + (((nargs_739X)<<2))))))))))))) { + ps_error(message_369X, 3, opcode_740X, why_1174X, ((((*((long *) (((char *) (-3 + (*((long *) ((SstackS) + (((nargs_739X)<<2)))))))))))>>2))); + goto loseD0_return;} + else { + goto L16708;}} + else { + goto L16708;}} + L16708: { + ps_error(message_369X, 2, opcode_740X, why_1174X); + goto loseD0_return;} + loseD0_return: + switch (loseD0_return_tag) { + case 0: goto loseD0_return_0; + default: goto loseD0_return_1; + }} + + check_events: { +{ goto L39788;} + L39788: { + type_1182X = s48_get_next_event(&channel_1183X, &status_1184X); + if ((type_1182X == ALARM_EVENT)) { + if ((1 == (Sinterrupted_templateS))) { + Sinterrupted_templateS = (StemplateS); + arg0K0 = 1; + goto L15869;} + else { + arg0K0 = 1; + goto L15869;}} + else { + if ((type_1182X == KEYBOARD_INTERRUPT_EVENT)) { + arg0K0 = 2; + goto L15869;} + else { + if ((type_1182X == IO_COMPLETION_EVENT)) { + enqueue_channelB(channel_1183X, status_1184X); + arg0K0 = 8; + goto L15869;} + else { + if ((type_1182X == OS_SIGNAL_EVENT)) { + arg0K0 = 16; + goto L15869;} + else { + if ((type_1182X == NO_EVENT)) { + arg0K0 = 0; + goto L15869;} + else { + if ((type_1182X == ERROR_EVENT)) { + ps_write_string("OS error while getting event", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + ps_write_string((ps_error_string(status_1184X)), (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + arg0K0 = 0; + goto L15869;} + else { + ps_write_string("unknown type of event", (stderr)); + { long ignoreXX; + PS_WRITE_CHAR(10, (stderr), ignoreXX) } + arg0K0 = 0; + goto L15869;}}}}}}} + L15869: { + v_1185X = arg0K0; + Spending_interruptsS = (v_1185X | (Spending_interruptsS)); + if ((type_1182X == NO_EVENT)) { + if ((0 == ((Spending_interruptsS) & (Senabled_interruptsS)))) { + s48_Spending_interruptPS = 0; + if ((s48_Spending_eventsPS)) { + s48_Spending_interruptPS = 1; + goto L15896;} + else { + goto L15896;}} + else { + s48_Spending_interruptPS = 1; + goto L15896;}} + else { + goto L39788;}} + L15896: { + if ((s48_Spending_interruptPS)) { + if ((s48_Spending_eventsPS)) { + s48_Spending_eventsPS = 0; + goto L39788;} + else { + check_events0_return_value = 1; + goto check_events_return;}} + else { + check_events0_return_value = 0; + goto check_events_return;}} + check_events_return: + switch (check_events_return_tag) { + case 0: goto check_events_return_0; + case 1: goto check_events_return_1; + case 2: goto check_events_return_2; + default: goto check_events_return_3; + }} + + rest_list_setup: { + wants_stack_args_365X = merged_arg0K0; + stack_arg_count_366X = merged_arg0K1; + list_args_367X = merged_arg0K2; + list_arg_count_368X = merged_arg0K3;{ + if ((stack_arg_count_366X == wants_stack_args_365X)) { + merged_arg0K0 = list_args_367X; + merged_arg0K1 = list_arg_count_368X; + copy_listS_return_tag = 1; + goto copy_listS; + copy_listS_return_1: + x_1186X = copy_listS0_return_value; + *((long *) (SstackS)) = x_1186X; + SstackS = ((SstackS) + -4); + goto rest_list_setup_return;} + else { + if ((stack_arg_count_366X < wants_stack_args_365X)) { + count_1187X = wants_stack_args_365X - stack_arg_count_366X; + merged_arg0K0 = list_args_367X; + merged_arg0K1 = count_1187X; + push_list_return_tag = 3; + goto push_list; + push_list_return_3: + v_1188X = push_list0_return_value; + merged_arg0K0 = v_1188X; + merged_arg0K1 = (list_arg_count_368X - count_1187X); + copy_listS_return_tag = 2; + goto copy_listS; + copy_listS_return_2: + x_1189X = copy_listS0_return_value; + *((long *) (SstackS)) = x_1189X; + SstackS = ((SstackS) + -4); + goto rest_list_setup_return;} + else { + merged_arg0K0 = list_args_367X; + merged_arg0K1 = list_arg_count_368X; + copy_listS_return_tag = 3; + goto copy_listS; + copy_listS_return_3: + v_1190X = copy_listS0_return_value; + merged_arg0K0 = v_1190X; + merged_arg0K1 = (stack_arg_count_366X - wants_stack_args_365X); + pop_args_GlistS_return_tag = 5; + goto pop_args_GlistS; + pop_args_GlistS_return_5: + x_1191X = pop_args_GlistS0_return_value; + *((long *) (SstackS)) = x_1191X; + SstackS = ((SstackS) + -4); + goto rest_list_setup_return;}}} + rest_list_setup_return: + switch (rest_list_setup_return_tag) { + case 0: goto rest_list_setup_return_0; + case 1: goto rest_list_setup_return_1; + default: goto rest_list_setup_return_2; + }} + + push_list: { + list_363X = merged_arg0K0; + count_364X = merged_arg0K1;{ + *((long *) (SstackS)) = list_363X; + SstackS = ((SstackS) + -4); + if ((count_364X < (64 + (((((SstackS) - (Sstack_limitS)))>>2))))) { + goto L15285;} + else { + space_1192X = 1 + (((((Sstack_endS) - (SstackS)))>>2)); + v_1193X = AVAILABLEp(space_1192X); + if (v_1193X) { + arg2K0 = 1; + arg0K1 = 0; + goto L15369;} + else { + collect_saving_temps(1, 1, &temp1_1194X); + v_1195X = AVAILABLEp(space_1192X); + if (v_1195X) { + arg2K0 = 1; + arg0K1 = 0; + goto L15369;} + else { + arg2K0 = 0; + arg0K1 = 0; + goto L15369;}}}} + L15285: { + SstackS = ((SstackS) + 4); + list_1196X = *((long *) (SstackS)); + arg0K0 = count_364X; + arg0K1 = list_1196X; + goto L15294;} + L15369: { + okayP_1197X = arg2K0; + key_1198X = arg0K1; + if (okayP_1197X) { + arg0K0 = key_1198X; + goto L15320;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = key_1198X; + goto L15320;}} + L15294: { + i_1199X = arg0K0; + l_1200X = arg0K1; + if ((0 < i_1199X)) { + *((long *) (SstackS)) = (*((long *) (((char *) (-3 + l_1200X))))); + SstackS = ((SstackS) + -4); + arg0K0 = (-1 + i_1199X); + arg0K1 = (*((long *) ((((char *) (-3 + l_1200X))) + 4))); + goto L15294;} + else { + push_list0_return_value = l_1200X; + goto push_list_return;}} + L15320: { + v_1201X = arg0K0; + merged_arg0K0 = v_1201X; + copy_stack_into_heap_return_tag = 4; + goto copy_stack_into_heap; + copy_stack_into_heap_return_4: + if ((count_364X < (64 + (((((SstackS) - (Sstack_limitS)))>>2))))) { + goto L15285;} + else { + ps_error("VM's stack is too small (how can this happen?)", 0); + goto L15285;}} + push_list_return: + switch (push_list_return_tag) { + case 0: goto push_list_return_0; + case 1: goto push_list_return_1; + case 2: goto push_list_return_2; + default: goto push_list_return_3; + }} + + copy_stack_into_heap: { + key_362X = merged_arg0K0;{ + arg1K0 = ((SstackS) + 4); + arg0K1 = 0; + goto L13514;} + L13514: { + p_1202X = arg1K0; + i_1203X = arg0K1; + if ((2 == (3 & (*((long *) p_1202X))))) { + if ((22 == (*((long *) p_1202X)))) { + arg0K0 = (-1 + i_1203X); + goto L13501;} + else { + arg0K0 = i_1203X; + goto L13501;}} + else { + arg1K0 = (p_1202X + 4); + arg0K1 = (1 + i_1203X); + goto L13514;}} + L13501: { + arg_count_1204X = arg0K0; + top_1205X = SstackS; + if ((1 == (ScontS))) { + goto L13506;} + else { + merged_arg0K0 = key_362X; + merged_arg0K1 = 1; + really_preserve_continuation_return_tag = 1; + goto really_preserve_continuation; + really_preserve_continuation_return_1: + goto L13506;}} + L13506: { + stob_1206X = ScontS; + arg1K0 = ((((char *) (-3 + stob_1206X))) + -8); + arg1K1 = (top_1205X + (((arg_count_1204X)<<2))); + goto L13539;} + L13539: { + loc_1207X = arg1K0; + arg_1208X = arg1K1; + if ((top_1205X < arg_1208X)) { + *((long *) loc_1207X) = (*((long *) arg_1208X)); + arg1K0 = (loc_1207X + -4); + arg1K1 = (arg_1208X + -4); + goto L13539;} + else { + SstackS = loc_1207X; + goto copy_stack_into_heap_return;}} + copy_stack_into_heap_return: + switch (copy_stack_into_heap_return_tag) { + case 0: goto copy_stack_into_heap_return_0; + case 1: goto copy_stack_into_heap_return_1; + case 2: goto copy_stack_into_heap_return_2; + case 3: goto copy_stack_into_heap_return_3; + default: goto copy_stack_into_heap_return_4; + }} + + really_preserve_continuation: { + key_360X = merged_arg0K0; + reason_361X = merged_arg0K1;{ + p_1209X = SenvS; + if ((3 == (3 & p_1209X))) { + if ((p_1209X < (((long) (Sstack_beginS))))) { + goto L12690;} + else { + if (((((long) (Sstack_endS))) < p_1209X)) { + goto L12690;} + else { + merged_arg0K0 = (SenvS); + merged_arg0K1 = (ScontS); + merged_arg0K2 = key_360X; + merged_arg0K3 = reason_361X; + save_env_in_heap_return_tag = 1; + goto save_env_in_heap; + save_env_in_heap_return_1: + v_1210X = save_env_in_heap0_return_value; + SenvS = v_1210X; + goto L12690;}}} + else { + goto L12690;}} + L12690: { + end_1211X = *((long *) (((char *) (-3 + (Sbottom_of_stackS))))); + arg0K0 = (ScontS); + arg0K1 = (Sbottom_of_stackS); + goto L12643;} + L12643: { + cont_1212X = arg0K0; + previous_1213X = arg0K1; + if ((cont_1212X == (Sbottom_of_stackS))) { + *((long *) (((char *) (-3 + previous_1213X)))) = end_1211X; + ScontS = (Sbottom_of_stackS); + really_preserve_continuation0_return_value = (*((long *) (((char *) (-3 + (Sbottom_of_stackS)))))); + goto really_preserve_continuation_return;} + else { + p_1214X = *((long *) ((((char *) (-3 + cont_1212X))) + 12)); + if ((3 == (3 & p_1214X))) { + if ((p_1214X < (((long) (Sstack_beginS))))) { + goto L12661;} + else { + if (((((long) (Sstack_endS))) < p_1214X)) { + goto L12661;} + else { + merged_arg0K0 = (*((long *) ((((char *) (-3 + cont_1212X))) + 12))); + merged_arg0K1 = cont_1212X; + merged_arg0K2 = key_360X; + merged_arg0K3 = reason_361X; + save_env_in_heap_return_tag = 2; + goto save_env_in_heap; + save_env_in_heap_return_2: + goto L12661;}}} + else { + goto L12661;}}} + L12661: { + header_1215X = *((long *) ((((char *) (-3 + cont_1212X))) + -4)); + addr_1216X = ALLOCATE_SPACE((31 & (((header_1215X)>>2))), (4 + ((long)(((unsigned long)header_1215X)>>8)))); + data_addr_1217X = addr_1216X + 4; + *((long *) addr_1216X) = header_1215X; + memcpy((void *)data_addr_1217X, (void *)(((char *) (-3 + cont_1212X))),((long)(((unsigned long)header_1215X)>>8))); + new_1218X = 3 + (((long) data_addr_1217X)); + *((long *) (((char *) (-3 + previous_1213X)))) = new_1218X; + arg0K0 = (*((long *) (((char *) (-3 + new_1218X))))); + arg0K1 = new_1218X; + goto L12643;} + really_preserve_continuation_return: + switch (really_preserve_continuation_return_tag) { + case 0: goto really_preserve_continuation_return_0; + default: goto really_preserve_continuation_return_1; + }} + + copy_env: { + env_359X = merged_arg0K0;{ + header_1219X = *((long *) ((((char *) (-3 + env_359X))) + -4)); + addr_1220X = ALLOCATE_SPACE((31 & (((header_1219X)>>2))), (4 + ((long)(((unsigned long)header_1219X)>>8)))); + data_addr_1221X = addr_1220X + 4; + *((long *) addr_1220X) = header_1219X; + memcpy((void *)data_addr_1221X, (void *)(((char *) (-3 + env_359X))),((long)(((unsigned long)header_1219X)>>8))); + new_1222X = 3 + (((long) data_addr_1221X)); + addr_1223X = ((char *) (-3 + env_359X)); + S48_WRITE_BARRIER(env_359X, addr_1223X, 22); + *((long *) addr_1223X) = 22; + *((long *) ((((char *) (-3 + env_359X))) + -4)) = new_1222X; + copy_env0_return_value = new_1222X; + goto copy_env_return;} + copy_env_return: + switch (copy_env_return_tag) { + case 0: goto copy_env_return_0; + default: goto copy_env_return_1; + }} + + save_env_in_heap: { + env_355X = merged_arg0K0; + cont_356X = merged_arg0K1; + key_357X = merged_arg0K2; + reason_358X = merged_arg0K3;{ + merged_arg0K0 = env_355X; + merged_arg0K1 = key_357X; + merged_arg0K2 = reason_358X; + copy_env_return_tag = 0; + goto copy_env; + copy_env_return_0: + top_1224X = copy_env0_return_value; + arg0K0 = top_1224X; + goto L11922;} + L11922: { + env_1225X = arg0K0; + p_1226X = *((long *) (((char *) (-3 + env_1225X)))); + if ((3 == (3 & p_1226X))) { + if ((p_1226X < (((long) (Sstack_beginS))))) { + goto L11941;} + else { + if (((((long) (Sstack_endS))) < p_1226X)) { + goto L11941;} + else { + merged_arg0K0 = (*((long *) (((char *) (-3 + env_1225X))))); + merged_arg0K1 = key_357X; + merged_arg0K2 = reason_358X; + copy_env_return_tag = 1; + goto copy_env; + copy_env_return_1: + new_1227X = copy_env0_return_value; + addr_1228X = ((char *) (-3 + env_1225X)); + S48_WRITE_BARRIER(env_1225X, addr_1228X, new_1227X); + *((long *) addr_1228X) = new_1227X; + arg0K0 = new_1227X; + goto L11922;}}} + else { + goto L11941;}} + L11941: { + arg0K0 = cont_356X; + goto L11945;} + L11945: { + cont_1229X = arg0K0; + env_1230X = *((long *) ((((char *) (-3 + cont_1229X))) + 12)); + if ((3 == (3 & env_1230X))) { + if ((3 == (3 & (*((long *) ((((char *) (-3 + env_1230X))) + -4)))))) { + *((long *) ((((char *) (-3 + cont_1229X))) + 12)) = (*((long *) ((((char *) (-3 + env_1230X))) + -4))); + arg0K0 = (*((long *) (((char *) (-3 + cont_1229X))))); + goto L11945;} + else { + save_env_in_heap0_return_value = top_1224X; + goto save_env_in_heap_return;}} + else { + save_env_in_heap0_return_value = top_1224X; + goto save_env_in_heap_return;}} + save_env_in_heap_return: + switch (save_env_in_heap_return_tag) { + case 0: goto save_env_in_heap_return_0; + case 1: goto save_env_in_heap_return_1; + default: goto save_env_in_heap_return_2; + }} + + pop_args_GlistS: { + start_353X = merged_arg0K0; + count_354X = merged_arg0K1;{ + space_1231X = 3 * count_354X; + v_1232X = AVAILABLEp(space_1231X); + if (v_1232X) { + arg2K0 = 1; + arg0K1 = start_353X; + goto L14260;} + else { + temp0_1233X = collect_saving_temps(start_353X, 1, &temp1_1234X); + v_1235X = AVAILABLEp(space_1231X); + if (v_1235X) { + arg2K0 = 1; + arg0K1 = temp0_1233X; + goto L14260;} + else { + arg2K0 = 0; + arg0K1 = temp0_1233X; + goto L14260;}}} + L14260: { + okayP_1236X = arg2K0; + temp_1237X = arg0K1; + if (okayP_1236X) { + arg0K0 = temp_1237X; + goto L14234;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = temp_1237X; + goto L14234;}} + L14234: { + start_1238X = arg0K0; + arg0K0 = start_1238X; + arg0K1 = count_354X; + goto L14243;} + L14243: { + args_1239X = arg0K0; + count_1240X = arg0K1; + if ((0 == count_1240X)) { + pop_args_GlistS0_return_value = args_1239X; + goto pop_args_GlistS_return;} + else { + SstackS = ((SstackS) + 4); + a_1241X = *((long *) (SstackS)); + addr_1242X = ALLOCATE_SPACE(0, 12); + *((long *) addr_1242X) = 2050; + x_1243X = 3 + (((long) (addr_1242X + 4))); + *((long *) (((char *) (-3 + x_1243X)))) = a_1241X; + *((long *) ((((char *) (-3 + x_1243X))) + 4)) = args_1239X; + arg0K0 = x_1243X; + arg0K1 = (-1 + count_1240X); + goto L14243;}} + pop_args_GlistS_return: + switch (pop_args_GlistS_return_tag) { + case 0: goto pop_args_GlistS_return_0; + case 1: goto pop_args_GlistS_return_1; + case 2: goto pop_args_GlistS_return_2; + case 3: goto pop_args_GlistS_return_3; + case 4: goto pop_args_GlistS_return_4; + default: goto pop_args_GlistS_return_5; + }} + + copy_listS: { + list_351X = merged_arg0K0; + length_352X = merged_arg0K1;{ + if ((0 == length_352X)) { + copy_listS0_return_value = 25; + goto copy_listS_return;} + else { + space_1244X = 3 * length_352X; + v_1245X = AVAILABLEp(space_1244X); + if (v_1245X) { + arg2K0 = 1; + arg0K1 = list_351X; + goto L14139;} + else { + temp0_1246X = collect_saving_temps(list_351X, 1, &temp1_1247X); + v_1248X = AVAILABLEp(space_1244X); + if (v_1248X) { + arg2K0 = 1; + arg0K1 = temp0_1246X; + goto L14139;} + else { + arg2K0 = 0; + arg0K1 = temp0_1246X; + goto L14139;}}}} + L14139: { + okayP_1249X = arg2K0; + temp_1250X = arg0K1; + if (okayP_1249X) { + arg0K0 = temp_1250X; + goto L14097;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = temp_1250X; + goto L14097;}} + L14097: { + list_1251X = arg0K0; + a_1252X = *((long *) (((char *) (-3 + list_1251X)))); + addr_1253X = ALLOCATE_SPACE(0, 12); + *((long *) addr_1253X) = 2050; + x_1254X = 3 + (((long) (addr_1253X + 4))); + *((long *) (((char *) (-3 + x_1254X)))) = a_1252X; + *((long *) ((((char *) (-3 + x_1254X))) + 4)) = 25; + arg0K0 = (*((long *) ((((char *) (-3 + list_1251X))) + 4))); + arg0K1 = x_1254X; + goto L14112;} + L14112: { + l_1255X = arg0K0; + last_1256X = arg0K1; + if ((25 == l_1255X)) { + copy_listS0_return_value = x_1254X; + goto copy_listS_return;} + else { + a_1257X = *((long *) (((char *) (-3 + l_1255X)))); + addr_1258X = ALLOCATE_SPACE(0, 12); + *((long *) addr_1258X) = 2050; + x_1259X = 3 + (((long) (addr_1258X + 4))); + *((long *) (((char *) (-3 + x_1259X)))) = a_1257X; + *((long *) ((((char *) (-3 + x_1259X))) + 4)) = 25; + addr_1260X = (((char *) (-3 + last_1256X))) + 4; + S48_WRITE_BARRIER(last_1256X, addr_1260X, x_1259X); + *((long *) addr_1260X) = x_1259X; + arg0K0 = (*((long *) ((((char *) (-3 + l_1255X))) + 4))); + arg0K1 = x_1259X; + goto L14112;}} + copy_listS_return: + switch (copy_listS_return_tag) { + case 0: goto copy_listS_return_0; + case 1: goto copy_listS_return_1; + case 2: goto copy_listS_return_2; + default: goto copy_listS_return_3; + }} + + copy_continuation_from_heapB: { + cont_350X = merged_arg0K0;{ + top_1261X = (((char *) (-3 + (Sbottom_of_stackS)))) + (-8 - (-4 & (3 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + cont_350X))) + -4))))>>8))))); + new_cont_1262X = 3 + (((long) (top_1261X + 4))); + SstackS = (top_1261X + -4); + ScontS = new_cont_1262X; + v_1263X = (((3 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + cont_350X))) + -4))))>>8))))>>2); + memcpy((void *)top_1261X, (void *)((((char *) (-3 + cont_350X))) + -4),(4 + (((v_1263X)<<2)))); + *((long *) (((char *) (-3 + (Sbottom_of_stackS))))) = (*((long *) (((char *) (-3 + new_cont_1262X))))); + *((long *) (((char *) (-3 + new_cont_1262X)))) = (Sbottom_of_stackS); + copy_continuation_from_heapB0_return_value = new_cont_1262X; + goto copy_continuation_from_heapB_return;} + copy_continuation_from_heapB_return: + switch (copy_continuation_from_heapB_return_tag) { + case 0: goto copy_continuation_from_heapB_return_0; + default: goto copy_continuation_from_heapB_return_1; + }} + + get_current_port: { + marker_349X = merged_arg0K0;{ + thread_1264X = Scurrent_threadS; + if ((3 == (3 & thread_1264X))) { + if ((8 == (31 & ((((*((long *) ((((char *) (-3 + thread_1264X))) + -4))))>>2))))) { + if ((1 < ((((3 + ((long)(((unsigned long)(*((long *) ((((char *) (-3 + thread_1264X))) + -4))))>>8))))>>2)))) { + arg0K0 = (*((long *) ((((char *) (-3 + thread_1264X))) + 4))); + goto L10214;} + else { + goto L10264;}} + else { + goto L10264;}} + else { + goto L10264;}} + L10214: { + env_1265X = arg0K0; + if ((3 == (3 & env_1265X))) { + if ((0 == (31 & ((((*((long *) ((((char *) (-3 + env_1265X))) + -4))))>>2))))) { + obj_1266X = *((long *) (((char *) (-3 + env_1265X)))); + if ((3 == (3 & obj_1266X))) { + if ((0 == (31 & ((((*((long *) ((((char *) (-3 + obj_1266X))) + -4))))>>2))))) { + if ((marker_349X == (*((long *) (((char *) (-3 + (*((long *) (((char *) (-3 + env_1265X)))))))))))) { + get_current_port0_return_value = (*((long *) ((((char *) (-3 + (*((long *) (((char *) (-3 + env_1265X)))))))) + 4))); + goto get_current_port_return;} + else { + arg0K0 = (*((long *) ((((char *) (-3 + env_1265X))) + 4))); + goto L10214;}} + else { + goto L10286;}} + else { + goto L10286;}} + else { + goto L10286;}} + else { + goto L10286;}} + L10264: { + ps_error("current thread is not a record", 0); + get_current_port0_return_value = v_1267X; + goto get_current_port_return;} + L10286: { + if ((25 == env_1265X)) { + if (((((marker_349X)>>2)) == 1)) { + arg3K0 = "dynamic environment doesn't have current-output-port"; + goto L10240;} + else { + arg3K0 = "dynamic environment doesn't have current-input-port"; + goto L10240;}} + else { + ps_error("dynamic environment is not a proper list", 0); + get_current_port0_return_value = v_1268X; + goto get_current_port_return;}} + L10240: { + v_1269X = arg3K0; + ps_error(v_1269X, 0); + get_current_port0_return_value = v_1270X; + goto get_current_port_return;} + get_current_port_return: + switch (get_current_port_return_tag) { + case 0: goto get_current_port_return_0; + case 1: goto get_current_port_return_1; + default: goto get_current_port_return_2; + }} + + okay_argument_list: { + list_348X = merged_arg0K0;{ + arg0K0 = list_348X; + arg0K1 = 0; + arg0K2 = list_348X; + arg2K3 = 0; + goto L10081;} + L10081: { + fast_1271X = arg0K0; + len_1272X = arg0K1; + slow_1273X = arg0K2; + move_slowP_1274X = arg2K3; + if ((25 == fast_1271X)) { + okay_argument_list0_return_value = 1; + okay_argument_list1_return_value = len_1272X; + goto okay_argument_list_return;} + else { + if ((3 == (3 & fast_1271X))) { + if ((0 == (31 & ((((*((long *) ((((char *) (-3 + fast_1271X))) + -4))))>>2))))) { + if (move_slowP_1274X) { + if ((fast_1271X == slow_1273X)) { + okay_argument_list0_return_value = 0; + okay_argument_list1_return_value = 0; + goto okay_argument_list_return;} + else { + arg0K0 = (*((long *) ((((char *) (-3 + fast_1271X))) + 4))); + arg0K1 = (1 + len_1272X); + arg0K2 = (*((long *) ((((char *) (-3 + slow_1273X))) + 4))); + arg2K3 = 0; + goto L10081;}} + else { + arg0K0 = (*((long *) ((((char *) (-3 + fast_1271X))) + 4))); + arg0K1 = (1 + len_1272X); + arg0K2 = slow_1273X; + arg2K3 = 1; + goto L10081;}} + else { + okay_argument_list0_return_value = 0; + okay_argument_list1_return_value = 0; + goto okay_argument_list_return;}} + else { + okay_argument_list0_return_value = 0; + okay_argument_list1_return_value = 0; + goto okay_argument_list_return;}}} + okay_argument_list_return: + switch (okay_argument_list_return_tag) { + case 0: goto okay_argument_list_return_0; + default: goto okay_argument_list_return_1; + }} + + get_error_string: { + status_347X = merged_arg0K0;{ + string_1275X = ps_error_string(status_347X); + x_1276X = strlen((char *) string_1275X); + if ((x_1276X < 256)) { + arg0K0 = x_1276X; + goto L9589;} + else { + arg0K0 = 256; + goto L9589;}} + L9589: { + len_1277X = arg0K0; + len_1278X = 1 + len_1277X; + addr_1279X = ALLOCATE_SPACE(16, (4 + len_1278X)); + *((long *) addr_1279X) = (66 + (((len_1278X)<<8))); + string_1280X = 3 + (((long) (addr_1279X + 4))); + *((unsigned char *) ((((char *) (-3 + string_1280X))) + len_1277X)) = 0; + arg0K0 = 0; + goto L9599;} + L9599: { + i_1281X = arg0K0; + if ((i_1281X == len_1277X)) { + get_error_string0_return_value = string_1280X; + goto get_error_string_return;} + else { + *((unsigned char *) ((((char *) (-3 + string_1280X))) + i_1281X)) = ((*(string_1275X + i_1281X))); + arg0K0 = (1 + i_1281X); + goto L9599;}} + get_error_string_return: + switch (get_error_string_return_tag) { + case 0: goto get_error_string_return_0; + case 1: goto get_error_string_return_1; + case 2: goto get_error_string_return_2; + case 3: goto get_error_string_return_3; + default: goto get_error_string_return_4; + }} + + pop_continuationB: { +{ cont_1282X = ScontS; + tem_1283X = *((long *) ((((char *) (-3 + cont_1282X))) + 8)); + pc_1284X = *((long *) ((((char *) (-3 + cont_1282X))) + 4)); + StemplateS = tem_1283X; + Scode_pointerS = ((((char *) (-3 + (*((long *) (((char *) (-3 + tem_1283X)))))))) + (((pc_1284X)>>2))); + SenvS = (*((long *) ((((char *) (-3 + cont_1282X))) + 12))); + ScontS = (*((long *) (((char *) (-3 + cont_1282X))))); + SstackS = ((((char *) (-3 + cont_1282X))) + 12); + goto pop_continuationB_return;} + pop_continuationB_return: + switch (pop_continuationB_return_tag) { + case 0: goto pop_continuationB_return_0; + case 1: goto pop_continuationB_return_1; + default: goto pop_continuationB_return_2; + }} + +} +long s48_call_startup_procedure(char **startup_vector_1285X, long startup_vector_length_1286X) +{ + char arg2K0; + long arg0K1; + long arg0K0; + long v_1335X; + long x_1334X; + long x_1333X; + char * addr_1332X; + long b_1331X; + long channel_1330X; + long x_1329X; + char * addr_1328X; + long b_1327X; + long channel_1326X; + long x_1325X; + char * addr_1324X; + long b_1323X; + long channel_1322X; + long key_1321X; + long key_1320X; + char okayP_1319X; + char v_1318X; + long temp1_1317X; + char v_1316X; + long space_1315X; + long i_1314X; + long length_1313X; + long *v_1312X; + long v_1311X; + long v_1310X; + long y_1309X; + long x_1308X; + long v_1307X; + long x_1306X; + long y_1305X; + char * addr_1304X; + long value_1303X; + long x_1302X; + long y_1301X; + long i_1300X; + long vector_1299X; + char * addr_1298X; + long len_1297X; + long key_1296X; + long key_1295X; + char okayP_1294X; + char v_1293X; + long temp1_1292X; + char v_1291X; + long space_1290X; + long size_1289X; + long i_1288X; + long tem_1287X; + { SstackS = ((((char *) (-3 + (Sbottom_of_stackS)))) + -8); + *((long *) (((char *) (-3 + (Sbottom_of_stackS))))) = 1; + ScontS = (Sbottom_of_stackS); + SenvS = 13; + tem_1287X = Sinterrupt_templateS; + StemplateS = tem_1287X; + Scode_pointerS = (((char *) (-3 + (*((long *) (((char *) (-3 + tem_1287X)))))))); + SvalS = 13; + Scurrent_threadS = 25; + Ssession_dataS = 25; + Sexception_handlersS = 25; + Sinterrupt_handlersS = 25; + Senabled_interruptsS = 0; + Sfinalizer_alistS = 25; + Sfinalize_theseS = 25; + Spending_interruptsS = 0; + s48_Spending_interruptPS = 0; + Sinterrupted_templateS = 1; + arg0K0 = 0; + arg0K1 = 0; + goto L15603;} + L15603: { + i_1288X = arg0K0; + size_1289X = arg0K1; + if ((i_1288X == startup_vector_length_1286X)) { + space_1290X = 1 + (size_1289X + startup_vector_length_1286X); + v_1291X = AVAILABLEp(space_1290X); + if (v_1291X) { + arg2K0 = 1; + arg0K1 = 0; + goto L15640;} + else { + collect_saving_temps(1, 1, &temp1_1292X); + v_1293X = AVAILABLEp(space_1290X); + if (v_1293X) { + arg2K0 = 1; + arg0K1 = 0; + goto L15640;} + else { + arg2K0 = 0; + arg0K1 = 0; + goto L15640;}}} + else { + arg0K0 = (1 + i_1288X); + arg0K1 = (1 + (size_1289X + ((((4 + (strlen((char *) (*(startup_vector_1285X + i_1288X))))))>>2)))); + goto L15603;}} + L15640: { + okayP_1294X = arg2K0; + key_1295X = arg0K1; + if (okayP_1294X) { + arg0K0 = key_1295X; + goto L15618;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = key_1295X; + goto L15618;}} + L15618: { + key_1296X = arg0K0; + len_1297X = ((startup_vector_length_1286X)<<2); + addr_1298X = ALLOCATE_SPACE(2, (4 + len_1297X)); + *((long *) addr_1298X) = (10 + (((len_1297X)<<8))); + vector_1299X = 3 + (((long) (addr_1298X + 4))); + arg0K0 = 0; + goto L15676;} + L15676: { + i_1300X = arg0K0; + if ((i_1300X == startup_vector_length_1286X)) { + *((long *) (SstackS)) = vector_1299X; + SstackS = ((SstackS) + -4); + y_1301X = fileno((stderr)); + x_1302X = fileno((stdout)); + if ((x_1302X < y_1301X)) { + arg0K0 = y_1301X; + goto L14512;} + else { + arg0K0 = x_1302X; + goto L14512;}} + else { + value_1303X = enter_string((*(startup_vector_1285X + i_1300X)), key_1296X); + addr_1304X = (((char *) (-3 + vector_1299X))) + (((i_1300X)<<2)); + S48_WRITE_BARRIER(vector_1299X, addr_1304X, value_1303X); + *((long *) addr_1304X) = value_1303X; + arg0K0 = (1 + i_1300X); + goto L15676;}} + L14512: { + y_1305X = arg0K0; + x_1306X = fileno((stdin)); + if ((x_1306X < y_1305X)) { + arg0K0 = y_1305X; + goto L14514;} + else { + arg0K0 = x_1306X; + goto L14514;}} + L14514: { + v_1307X = arg0K0; + x_1308X = Snumber_of_channelsS; + y_1309X = 1 + v_1307X; + if ((x_1308X < y_1309X)) { + arg0K0 = y_1309X; + goto L14516;} + else { + arg0K0 = x_1308X; + goto L14516;}} + L14516: { + v_1310X = arg0K0; + Snumber_of_channelsS = v_1310X; + v_1311X = fileno((stdin)); + Svm_channelsS = ((long*)malloc(sizeof(long) * (Snumber_of_channelsS))); + Spending_channels_headS = 1; + Spending_channels_tailS = 1; + if ((NULL == (Svm_channelsS))) { + ps_error("out of memory, unable to continue", 0); + goto L14538;} + else { + goto L14538;}} + L14538: { + v_1312X = Svm_channelsS; + length_1313X = Snumber_of_channelsS; + arg0K0 = 0; + goto L14586;} + L14586: { + i_1314X = arg0K0; + if ((i_1314X < length_1313X)) { + *(v_1312X + i_1314X) = 1; + arg0K0 = (1 + i_1314X); + goto L14586;} + else { + space_1315X = 3 * (7 + ((((4 + (strlen((char *) "standard output"))))>>2))); + v_1316X = AVAILABLEp(space_1315X); + if (v_1316X) { + arg2K0 = 1; + arg0K1 = 0; + goto L14600;} + else { + collect_saving_temps(1, 1, &temp1_1317X); + v_1318X = AVAILABLEp(space_1315X); + if (v_1318X) { + arg2K0 = 1; + arg0K1 = 0; + goto L14600;} + else { + arg2K0 = 0; + arg0K1 = 0; + goto L14600;}}}} + L14600: { + okayP_1319X = arg2K0; + key_1320X = arg0K1; + if (okayP_1319X) { + arg0K0 = key_1320X; + goto L14544;} + else { + ps_error("Scheme48 heap overflow", 0); + arg0K0 = key_1320X; + goto L14544;}} + L14544: { + key_1321X = arg0K0; + channel_1322X = fileno((stdin)); + b_1323X = enter_string("standard input", key_1321X); + addr_1324X = ALLOCATE_SPACE(5, 24); + *((long *) addr_1324X) = 5142; + x_1325X = 3 + (((long) (addr_1324X + 4))); + *((long *) (((char *) (-3 + x_1325X)))) = 4; + *((long *) ((((char *) (-3 + x_1325X))) + 4)) = b_1323X; + *((long *) ((((char *) (-3 + x_1325X))) + 8)) = (((channel_1322X)<<2)); + *((long *) ((((char *) (-3 + x_1325X))) + 12)) = 1; + *((long *) ((((char *) (-3 + x_1325X))) + 16)) = 1; + *((Svm_channelsS) + channel_1322X) = x_1325X; + channel_1326X = fileno((stderr)); + b_1327X = enter_string("standard error", key_1321X); + addr_1328X = ALLOCATE_SPACE(5, 24); + *((long *) addr_1328X) = 5142; + x_1329X = 3 + (((long) (addr_1328X + 4))); + *((long *) (((char *) (-3 + x_1329X)))) = 8; + *((long *) ((((char *) (-3 + x_1329X))) + 4)) = b_1327X; + *((long *) ((((char *) (-3 + x_1329X))) + 8)) = (((channel_1326X)<<2)); + *((long *) ((((char *) (-3 + x_1329X))) + 12)) = 1; + *((long *) ((((char *) (-3 + x_1329X))) + 16)) = 1; + *((Svm_channelsS) + channel_1326X) = x_1329X; + channel_1330X = fileno((stdout)); + b_1331X = enter_string("standard output", key_1321X); + addr_1332X = ALLOCATE_SPACE(5, 24); + *((long *) addr_1332X) = 5142; + x_1333X = 3 + (((long) (addr_1332X + 4))); + *((long *) (((char *) (-3 + x_1333X)))) = 8; + *((long *) ((((char *) (-3 + x_1333X))) + 4)) = b_1331X; + *((long *) ((((char *) (-3 + x_1333X))) + 8)) = (((channel_1330X)<<2)); + *((long *) ((((char *) (-3 + x_1333X))) + 12)) = 1; + *((long *) ((((char *) (-3 + x_1333X))) + 16)) = 1; + *((Svm_channelsS) + channel_1330X) = x_1333X; + *((long *) (SstackS)) = x_1325X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_1333X; + SstackS = ((SstackS) + -4); + *((long *) (SstackS)) = x_1329X; + SstackS = ((SstackS) + -4); + x_1334X = s48_resumer_records(); + *((long *) (SstackS)) = x_1334X; + SstackS = ((SstackS) + -4); + s48_initialization_completeB(); + v_1335X = s48_startup_procedure(); + return s48_restart(v_1335X, 5);} +}void +s48_init(void) +{ +Snumber_of_channelsS = 100; +Spending_channels_headS = 1; +Spending_channels_tailS = 1; +Sstack_warningPS = 1; +Slosing_opcodeS = 0; +Sos_signal_typeS = 1; +Sos_signal_argumentS = 1; +Sexternal_exceptionPS = 0; +Sexternal_root_stackS = NULL; +Sexternal_root_stack_baseS = NULL; +Spermanent_external_rootsS = NULL; +Sgc_root_procS = HtopD8861; +Spost_gc_cleanupS = HtopD8854; +s48_Scallback_return_stack_blockS = 1; +s48_Spending_eventsPS = 0; +} diff --git a/c/scheme48vm.h b/c/scheme48vm.h new file mode 100644 index 0000000..70ea4cf --- /dev/null +++ b/c/scheme48vm.h @@ -0,0 +1,61 @@ +/* + * Externally visible objects defined in scheme48vm.c. + */ + +#include "scheme48.h" + +/* initializing */ +extern void s48_init(void); +extern void s48_initialize_vm(char *, long); + +/* running */ +extern long s48_call_startup_procedure(char **, long); +extern s48_value s48_restart(s48_value proc, long nargs); +extern s48_value s48_Scallback_return_stack_blockS; + +/* for extension.c */ +extern void s48_set_extension_valueB(s48_value); +extern s48_value s48_Sextension_valueS; + +/* interrupts */ +extern void s48_note_event(void); +extern char s48_Spending_eventsPS; +extern char s48_Spending_interruptPS; +extern void s48_disable_interruptsB(void); +extern void s48_enable_interruptsB(void); +extern void s48_set_os_signal(s48_value type, s48_value argument); + +/* imported and exported bindings */ +extern void s48_define_exported_binding(char *, s48_value); +extern s48_value s48_get_imported_binding(char *); + +/* for raising exceptions in external code */ +extern void s48_setup_external_exception(s48_value exception, + long nargs); +extern s48_value s48_resetup_external_exception(s48_value exception, + long additional_nargs); +extern void s48_push(s48_value value); +extern s48_value s48_stack_ref(long offset); +extern void s48_stack_setB(long offset, s48_value value); + +/* called when writing an image */ +extern s48_value s48_copy_symbol_table(void); +extern void s48_mark_traced_channels_closedB(void); +extern s48_value s48_cleaned_imported_bindings(void); +extern s48_value s48_exported_bindings(void); + +/* called when resuming an image */ +extern char s48_warn_about_undefined_imported_bindings(void); + +/* manipulating channels */ +extern void s48_close_channel(long); +extern s48_value s48_set_channel_os_index(s48_value, long); +extern s48_value s48_add_channel(s48_value, s48_value, long); + +/* external allocation and GC roots */ +extern s48_value s48_allocate_stob(long type, long size); +extern void s48_push_gc_rootsB(char *, long); +extern char s48_pop_gc_rootsB(void); +extern char * s48_set_gc_roots_baseB(void); +extern char s48_release_gc_roots_baseB(char *); +extern void s48_register_gc_rootB(char *marker); diff --git a/c/sysdep.h.in b/c/sysdep.h.in new file mode 100644 index 0000000..5cbb90e --- /dev/null +++ b/c/sysdep.h.in @@ -0,0 +1,99 @@ +/* c/sysdep.h.in. Generated automatically from configure.in by autoheader. */ + +/* Define to empty if the keyword does not work. */ +#undef const + +/* Define if you need to in order for stat and other things to work. */ +#undef _POSIX_SOURCE + +/* Define as the return type of signal handlers (int or void). */ +#undef RETSIGTYPE + +/* + * HAVE_SIGACTION is defined iff sigaction() is available. + */ +#undef HAVE_SIGACTION + +/* + * HAVE_STRERROR is defined iff the standard libraries provide strerror(). + */ +#undef HAVE_STRERROR + +/* + * NLIST_HAS_N_NAME is defined iff a struct nlist has an n_name member. + * If it doesn't then we assume it has an n_un member which, in turn, + * has an n_name member. + */ +#undef NLIST_HAS_N_NAME + +/* + * USCORE is defined iff C externals are prepended with an underscore. + */ +#undef USCORE + +/* Define if you have the chroot function. */ +#undef HAVE_CHROOT + +/* Define if you have the dlopen function. */ +#undef HAVE_DLOPEN + +/* Define if you have the ftime function. */ +#undef HAVE_FTIME + +/* Define if you have the gettimeofday function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define if you have the nlist function. */ +#undef HAVE_NLIST + +/* Define if you have the select function. */ +#undef HAVE_SELECT + +/* Define if you have the setitimer function. */ +#undef HAVE_SETITIMER + +/* Define if you have the sigaction function. */ +#undef HAVE_SIGACTION + +/* Define if you have the socket function. */ +#undef HAVE_SOCKET + +/* Define if you have the header file. */ +#undef HAVE_LIBGEN_H + +/* Define if you have the header file. */ +#undef HAVE_POSIX_TIME_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_TIMEB_H + +/* Define if you have the dl library (-ldl). */ +#undef HAVE_LIBDL + +/* Define if you have the elf library (-lelf). */ +#undef HAVE_LIBELF + +/* Define if you have the gen library (-lgen). */ +#undef HAVE_LIBGEN + +/* Define if you have the m library (-lm). */ +#undef HAVE_LIBM + +/* Define if you have the mld library (-lmld). */ +#undef HAVE_LIBMLD + +/* Define if you have the nsl library (-lnsl). */ +#undef HAVE_LIBNSL + +/* Define if you have the socket library (-lsocket). */ +#undef HAVE_LIBSOCKET + +/* Define if you have the sun library (-lsun). */ +#undef HAVE_LIBSUN + +#include "fake/sigact.h" +#include "fake/strerror.h" +#include "fake/sys-select.h" diff --git a/c/unix/dynamo-test.c b/c/unix/dynamo-test.c new file mode 100644 index 0000000..70beb8b --- /dev/null +++ b/c/unix/dynamo-test.c @@ -0,0 +1,40 @@ + +/* + * A simple test file for dynamic loading, dynamic name lookup, and + * old-style external calls. + */ + +#include +#include "scheme48.h" + +/* + * These should only be called on characters or other immediates. + */ + +s48_value +s48_dynamo_test(s48_value arg0, s48_value arg1, s48_value arg2) +{ + int i; + + s48_value vector = s48_make_vector(3, S48_FALSE); + + S48_VECTOR_SET(vector, 0, arg0); + S48_VECTOR_SET(vector, 1, arg1); + S48_VECTOR_SET(vector, 2, arg2); + + return vector; +} + +s48_value +s48_old_dynamo_test(long nargs, s48_value args[]) +{ + int i; + + s48_value vector = s48_make_vector(nargs, S48_FALSE); + + for (i = 0; i < nargs; i++) + S48_VECTOR_SET(vector, i, args[i]); + + return vector; +} + diff --git a/c/unix/dynamo.c b/c/unix/dynamo.c new file mode 100644 index 0000000..937688b --- /dev/null +++ b/c/unix/dynamo.c @@ -0,0 +1,185 @@ +/* + * Lookup external names in the running scheme virtual machine and, on + * machines which support it, do dynamic loading. + */ + +#include +#include +#include "sysdep.h" +#include "scheme48.h" +#include + + +#if defined(RTLD_NOW) +#define DLOPEN_MODE RTLD_NOW +#elif defined(RTLD_LAZY) +#define DLOPEN_MODE (RTLD_LAZY) +#else +#define DLOPEN_MODE (1) +#endif + +#define bool char /* boolean type */ +#define TRUE (0 == 0) +#define FALSE (! TRUE) + + +/* + * Linked list of dynamically loaded libraries. + */ +static struct dlob { + struct dlob *next; + char *name; + void *handle; +} *dlobs; + + +static s48_value s48_external_lookup(s48_value svname, s48_value svlocp), + s48_old_external_call(s48_value svproc, s48_value svargv), + s48_dynamic_load(s48_value filename); +static long lookup_external_name(char *name, long *locp); +static bool dynamic_load(char *name); + + +/* + * Install all exported functions in Scheme48. + */ +void +s48_init_external_lookup(void) +{ + S48_EXPORT_FUNCTION(s48_external_lookup); + S48_EXPORT_FUNCTION(s48_old_external_call); + S48_EXPORT_FUNCTION(s48_dynamic_load); +} + + +/* + * Glue between Scheme48 types and C types for external name lookup. + * Look up svname (either in a dynamically loaded library, or in the + * running executable). + * On success we return TRUE, having set *(long *)svlocp to the location. + * On failure, we return FALSE. + */ +static s48_value +s48_external_lookup(s48_value svname, s48_value svlocp) +{ + char *name; + long *locp, + res; + + name = s48_extract_string(svname); + locp = S48_EXTRACT_VALUE_POINTER(svlocp, long); + res = lookup_external_name(name, locp); + return (S48_ENTER_BOOLEAN(res)); +} + + +/* + * Glue between Scheme48 types and C types for external call. + * svproc is a byte vector containing the procedure and svargs is a + * vector of arguments. + */ +static s48_value +s48_old_external_call(s48_value svproc, s48_value svargv) +{ + s48_value (*func)(); + long *argv, + argc; + + func = (s48_value (*)())*S48_EXTRACT_VALUE_POINTER(svproc, long); + argc = S48_VECTOR_LENGTH(svargv); + argv = S48_ADDRESS_AFTER_HEADER(svargv, long); + return (func(argc, argv)); +} + + +/* + * Lookup an external name (either in a dynamically loaded library, or + * in the running executable). + * On success we return TRUE, having set *(long *)locp to the location. + * On failure, we return FALSE. + */ +static long +lookup_external_name(char *name, long *locp) +{ + struct dlob *dp; + void *res; + static void *self; + + for (dp = dlobs; dp != NULL; dp = dp->next) { + res = dlsym(dp->handle, name); + if (dlerror() == NULL) { + *locp = (long)res; + return (TRUE); + } + } + if (self == NULL) { + self = dlopen((char *)NULL, DLOPEN_MODE); + if (dlerror() != NULL) + return (FALSE); + } + res = dlsym(self, name); + if (dlerror() == NULL) { + *locp = (long)res; + return (TRUE); + } + return (FALSE); +} + + +/* + * External to load a library. + * Raises an exception if the file cannot be loaded, or loaded properly. + * Note, if you load the same file a second time, afterwards you must + * evaluate (lookup-all-externals) in package externals to update any + * externals the pointed to the old version of the library. + */ + +s48_value +s48_dynamic_load(s48_value filename) +{ + S48_CHECK_STRING(filename); + + if (! dynamic_load(S48_UNSAFE_EXTRACT_STRING(filename))) + /* the cast below is to remove the const part of the type */ + s48_raise_string_os_error((char *)dlerror()); + + return S48_UNSPECIFIC; +} + + +static bool +dynamic_load(char *name) +{ + struct dlob **dpp, + *dp; + void *handle; + + for (dpp = &dlobs;; dpp = &dp->next) { + dp = *dpp; + if (dp == NULL) { + handle = dlopen(name, DLOPEN_MODE); + if (handle == NULL) + return (FALSE); + dp = (struct dlob *)malloc(sizeof(*dp) + strlen(name) + 1); + if (dp == NULL) { + dlclose(handle); + return (FALSE); + } + dp->next = dlobs; + dlobs = dp; + dp->name = (char *)(dp + 1); + strcpy(dp->name, name); + dp->handle = handle; + return (TRUE); + } else if (strcmp(name, dp->name) == 0) { + dlclose(dp->handle); + dp->handle = dlopen(name, DLOPEN_MODE); + if (dp->handle == NULL) { + *dpp = dp->next; + free((void *)dp); + return (FALSE); + } + return (TRUE); + } + } +} diff --git a/c/unix/event.c b/c/unix/event.c new file mode 100644 index 0000000..79b16b9 --- /dev/null +++ b/c/unix/event.c @@ -0,0 +1,589 @@ +/* Copyright (c) 1993-1999 by Richard Kelsey and Jonathan Rees. + See file COPYING. */ + +#include /* for sigaction() (POSIX.1) */ +#include +#include +#include +#include +#include +#include +#include /* for errno, (POSIX?/ANSI) */ +#include "sysdep.h" +#include "c-mods.h" +#include "scheme48vm.h" +#include "event.h" + +/* turning interrupts and I/O readiness into events */ + +#define block_interrupts() +#define allow_interrupts() + + +static void when_keyboard_interrupt(); +static void when_alarm_interrupt(); +static void when_sigpipe_interrupt(); +bool s48_setcatcher(int signum, void (*catcher)(int)); +void s48_start_alarm_interrupts(void); + + +void +s48_sysdep_init(void) +{ + if (!s48_setcatcher(SIGINT, when_keyboard_interrupt) + || !s48_setcatcher(SIGALRM, when_alarm_interrupt) + || !s48_setcatcher(SIGPIPE, when_sigpipe_interrupt)) { + fprintf(stderr, + "Failed to install signal handlers, errno = %d\n", + errno); + exit(1); + } + s48_start_alarm_interrupts(); +} + + +/* + * Unless a signal is being ignored, set up the handler. + * If we return FALSE, something went wrong and errno is set to what. + */ +bool +s48_setcatcher(int signum, void (*catcher)(int)) +{ + struct sigaction sa; + + if (sigaction(signum, (struct sigaction *)NULL, &sa) != 0) + return (FALSE); + if (sa.sa_handler == SIG_IGN) + return (TRUE); + sa.sa_handler = catcher; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + if (sigaction(signum, &sa, (struct sigaction *)NULL) != 0) + return (FALSE); + return (TRUE); +} + +static long keyboard_interrupt_count = 0; + +static void +when_keyboard_interrupt(int ign) +{ + keyboard_interrupt_count += 1; + NOTE_EVENT; + return; +} + +/* + We turn off SIGPIPE interrupts by installing a handler that does nothing. + Turning them off affects exec()'ed programs, so we don't want to do that. + Any actual pipe problems are caught when we try to read or write to them. + + We thank Olin Shivers for this hack. +*/ + +static void +when_sigpipe_interrupt(int ign) +{ + return; +} + +/* ticks since last timer-interrupt request */ +long s48_current_time = 0; + +static long alarm_time = -1; +static long poll_time = -1; +static long poll_interval = 5; + +static void +when_alarm_interrupt(int ign) +{ + s48_current_time += 1; + /* fprintf(stderr, "[tick]"); */ + if ((alarm_time >= 0 && alarm_time <= s48_current_time) || + (poll_time >= 0 && poll_time <= s48_current_time)) { + NOTE_EVENT; + }; + return; +} + +#define USEC_PER_POLL (1000000 / POLLS_PER_SECOND) + +/* delta is in ticks, 0 cancels current alarm */ + +long +s48_schedule_alarm_interrupt(long delta) +{ + long old; + /* + fprintf(stderr, "\n", s48_current_time, + delta/TICKS_PER_POLL); + */ + /* get remaining time */ + if (alarm_time == -1) + old = -1; + else + old = (alarm_time - s48_current_time) * TICKS_PER_POLL; + + /* decrement poll_time and reset current_time */ + if (poll_time != -1) + poll_time -= s48_current_time; + s48_current_time = 0; + + /* set alarm_time */ + if (delta == 0) { + NOTE_EVENT; + alarm_time = 0; } + else + alarm_time = delta / TICKS_PER_POLL; + + return old; +} + +/* The next two procedures return times in seconds and ticks */ + +long +s48_real_time(long *ticks) +{ + struct timeval tv; + static struct timeval tv_orig; + static int initp = 0; + if (!initp) { + gettimeofday(&tv_orig, NULL); + initp = 1; + }; + gettimeofday(&tv, NULL); + *ticks = (tv.tv_usec - tv_orig.tv_usec)/(1000000/TICKS_PER_SECOND); + return tv.tv_sec - tv_orig.tv_sec; +} + +long +s48_run_time(long *ticks) +{ + struct tms time_buffer; + static long clock_tick = 0; + long cpu_time; + + if (clock_tick == 0) + clock_tick = sysconf(_SC_CLK_TCK); /* POSIX.1, POSIX.2 */ + times(&time_buffer); /* On Sun, getrusage() would be better */ + + cpu_time = time_buffer.tms_utime + time_buffer.tms_stime; + + *ticks = (cpu_time % clock_tick) * TICKS_PER_SECOND / clock_tick; + return cpu_time / clock_tick; +} + +void +s48_start_alarm_interrupts(void) +{ + struct itimerval new, old; + + new.it_value.tv_sec = 0; + new.it_value.tv_usec = USEC_PER_POLL; + new.it_interval.tv_sec = 0; + new.it_interval.tv_usec = USEC_PER_POLL; + if (0 != setitimer(ITIMER_REAL, &new, &old)) { + perror("setitimer"); + exit(-1); } +} + +void +s48_stop_alarm_interrupts(void) +{ + struct itimerval new, old; + + new.it_value.tv_sec = 0; + new.it_value.tv_usec = 0; + new.it_interval.tv_sec = 0; + new.it_interval.tv_usec = 0; + if (0 != setitimer(ITIMER_REAL, &new, &old)) { + perror("setitimer"); + exit(-1); } +} + + +/* + * ; Scheme version of the get-next-event procedure + * ; + * ; 1. If there has been a keyboard interrupt, return it. + * ; 2. Check for ready ports if enough time has passed since the last check. + * ; 3. If there is a ready port, return it. + * ; 4. If an alarm is due, return it. + * ; 5. If no events are pending, clear the event flags. + * (define (get-next-event) + * (cond ((> *keyboard-interrupt-count* 0) + * (without-interrupts + * (lambda () + * (set! *keyboard-interrupt-count* + * (- *keyboard-interrupt-count* 1)))) + * (values (enum event-type keyboard-interrupt) #f #f)) + * (else + * (cond ((>= *current_time* *poll-time*) + * (queue-ready-ports) + * (set! *poll-time* (+ *time* *poll-interval*)))) + * (cond ((not (queue-empty? ready-ports)) + * (values (enum event-type i/o-completion) + * (dequeue! ready-ports))) + * ((>= *current_time* *alarm-time*) + * (set! *alarm-time* max-integer) + * (values (enum event-type alarm-interrupt) #f)) + * (else + * (without-interrupts + * (lambda () + * (if (and (= *keyboard-interrupt-count* 0) + * (> *alarm-time* *current_time*) + * (> *poll-time* *current_time*)) + * (set! *pending-event?* #f)))) + * (values (enum event-type no-event) #f)))))) + */ + +static bool there_are_ready_ports(void); +static int next_ready_port(void); +static int queue_ready_ports(bool wait, long seconds, long ticks); + +int +s48_get_next_event(long *ready_fd, long *status) +{ + /* + extern int s48_os_signal_pending(void); + */ + + int io_poll_status; + /* + fprintf(stderr, "[poll at %d (waiting for %d)]\n", s48_current_time, alarm_time); + */ + if (keyboard_interrupt_count > 0) { + block_interrupts(); + --keyboard_interrupt_count; + allow_interrupts(); + /* fprintf(stderr, "[keyboard interrupt]\n"); */ + return (KEYBOARD_INTERRUPT_EVENT); + } + if (poll_time != -1 && s48_current_time >= poll_time) { + io_poll_status = queue_ready_ports(FALSE, 0, 0); + if (io_poll_status == NO_ERRORS) + poll_time = s48_current_time + poll_interval; + else { + *status = io_poll_status; + return (ERROR_EVENT); + } + } + if (there_are_ready_ports()) { + *ready_fd = next_ready_port(); + *status = 0; /* chars read or written */ + /* fprintf(stderr, "[i/o completion]\n"); */ + return (IO_COMPLETION_EVENT); + } + if (alarm_time != -1 && s48_current_time >= alarm_time) { + alarm_time = -1; + /* fprintf(stderr, "[alarm]\n"); */ + return (ALARM_EVENT); + } + /* + if (s48_os_signal_pending()) + return (OS_SIGNAL_EVENT); + */ + block_interrupts(); + if ((keyboard_interrupt_count == 0) + && (alarm_time == -1 || s48_current_time < alarm_time) + && (poll_time == -1 || s48_current_time < poll_time)) + s48_Spending_eventsPS = FALSE; + allow_interrupts(); + return (NO_EVENT); +} + + +/* + * We keep two queues of ports: those that have a pending operation, and + * those whose operation has completed. Periodically, we call select() on + * the pending ports and move any that are ready onto the other queue and + * signal an event. + */ +#define FD_QUIESCENT 0 /* idle */ +#define FD_READY 1 /* I/O ready to be performed */ +#define FD_PENDING 2 /* waiting */ + +typedef struct fd_struct { + int fd, /* file descriptor */ + status; /* one of the FD_* constants */ + bool is_input; /* iff input */ + struct fd_struct *next; /* next on same queue */ +} fd_struct; + + +/* + * A queue of fd_structs is empty iff the first field is NULL. In + * that case, lastp points to first. + */ +typedef struct fdque { + fd_struct *first, + **lastp; +} fdque; + + +static fd_struct *fds[FD_SETSIZE]; +static fdque ready = { + NULL, + &ready.first + }, + pending = { + NULL, + &pending.first + }; + + +static void findrm(fd_struct *entry, fdque *que); +static fd_struct *rmque(fd_struct **link, fdque *que); +static void addque(fd_struct *entry, fdque *que); +static fd_struct *add_fd(int fd, bool is_input); + + +/* + * Find a fd_struct in a queue, and remove it. + */ +static void +findrm(fd_struct *entry, fdque *que) +{ + fd_struct **fp, + *f; + + for (fp = &que->first; (f = *fp) != entry; fp = &f->next) + if (f == NULL) { + fprintf(stderr, "ERROR: findrm fd %d, status %d not on queue.\n", + entry->fd, entry->status); + return; + } + rmque(fp, que); +} + + +/* + * Given a pointer to the link of a fd_struct, and a pointer to + * the queue it is on, remove the entry from the queue. + * The entry removed is returned. + */ +static fd_struct * +rmque(fd_struct **link, fdque *que) +{ + fd_struct *res; + + res = *link; + *link = res->next; + if (res->next == NULL) + que->lastp = link; + return (res); +} + + +/* + * Add a fd_struct to a queue. + */ +static void +addque(fd_struct *entry, fdque *que) +{ + *que->lastp = entry; + entry->next = NULL; + que->lastp = &entry->next; +} + + +static bool +there_are_ready_ports(void) +{ + return (ready.first != NULL); +} + + +static int +next_ready_port(void) +{ + fd_struct *p; + + p = rmque(&ready.first, &ready); + p->status = FD_QUIESCENT; + return (p->fd); +} + + +/* + * Put fd on to the queue of ports with pending operations. + * Return TRUE if successful, and FALSE otherwise. + */ +bool +s48_add_pending_fd(int fd, bool is_input) +{ + fd_struct *data; + + if (! (0 <= fd && fd < FD_SETSIZE)) { + fprintf(stderr, "ERROR: add_pending fd %d not in [0, %d)\n", + fd, + FD_SETSIZE); + return (FALSE); + } + data = fds[fd]; + if (data == NULL) { + data = add_fd(fd, is_input); + if (data == NULL) + return (FALSE); /* no more memory */ + } else if (data->status == FD_PENDING) + return (TRUE); /* fd is already pending */ + else if (data->status == FD_READY) + findrm(data, &ready); + data->status = FD_PENDING; + addque(data, &pending); + if (poll_time == -1) + poll_time = s48_current_time + poll_interval; + return TRUE; +} + + +/* + * Add a new fd_struct for fd. + */ +static fd_struct * +add_fd(int fd, bool is_input) +{ + struct fd_struct *new; + + new = (struct fd_struct *)malloc(sizeof(*new)); + if (new != NULL) { + new->fd = fd; + new->status = FD_QUIESCENT; + new->is_input = is_input; + new->next = NULL; + fds[fd] = new; + } + return (new); +} + + +/* + * Remove fd from any queues it is on. Returns true if the FD was on a queue + * and false if it wasn't. + */ +bool +s48_remove_fd(int fd) +{ + struct fd_struct *data; + + if (! (0 <= fd && fd < FD_SETSIZE)) { + fprintf(stderr, "ERROR: s48_remove_fd fd %d not in [0, %d)\n", + fd, + FD_SETSIZE); + return FALSE; + } + data = fds[fd]; + if (data == NULL) + return FALSE; + if (data->status == FD_PENDING) { + findrm(data, &pending); + if (pending.first == NULL) + poll_time = -1; + } else if (data->status == FD_READY) + findrm(data, &ready); + free((void *)data); + fds[fd] = NULL; + return TRUE; +} + + +int +s48_wait_for_event(long max_wait, bool is_minutes) +{ + int status; + long seconds, + ticks; + + /* fprintf(stderr, "[waiting]\n"); */ + + s48_stop_alarm_interrupts(); + ticks = 0; + if (max_wait == -1) + seconds = -1; + else if (is_minutes) + seconds = max_wait * 60; + else { + seconds = max_wait / TICKS_PER_SECOND; + ticks = max_wait % TICKS_PER_SECOND; + } + if (keyboard_interrupt_count > 0) + status = NO_ERRORS; + else { + status = queue_ready_ports(TRUE, seconds, ticks); + if (there_are_ready_ports()) + NOTE_EVENT; + } + s48_start_alarm_interrupts(); + return (status); +} + + +/* + * Call select() on the pending ports and move any ready ones to the ready + * queue. If wait is true, seconds is either -1 (wait forever) or the + * maximum number of seconds to wait (with ticks any additional ticks). + * The returned value is a status code. + */ +static int +queue_ready_ports(bool wait, long seconds, long ticks) +{ + fd_set reads, + writes, + alls; + int limfd; + fd_struct *fdp, + **fdpp; + int left; + struct timeval tv, + *tvp; + + if ((! wait) + && (pending.first == NULL)) + return (NO_ERRORS); + FD_ZERO(&reads); + FD_ZERO(&writes); + FD_ZERO(&alls); + limfd = 0; + for (fdp = pending.first; fdp != NULL; fdp = fdp->next) { + FD_SET(fdp->fd, fdp->is_input ? &reads : &writes); + FD_SET(fdp->fd, &alls); + if (limfd <= fdp->fd) + limfd = fdp->fd + 1; + } + tvp = &tv; + if (wait) + if (seconds == -1) + tvp = NULL; + else { + tv.tv_sec = seconds; + tv.tv_usec = ticks * (1000000 / TICKS_PER_SECOND); + } + else + timerclear(&tv); + while(TRUE) { + left = select(limfd, &reads, &writes, &alls, tvp); + if (left > 0) { + fdpp = &pending.first; + while (left > 0 && (fdp = *fdpp) != NULL) + if ((FD_ISSET(fdp->fd, &alls)) + || (FD_ISSET(fdp->fd, fdp->is_input ? &reads : &writes))) { + --left; + rmque(fdpp, &pending); + fdp->status = FD_READY; + addque(fdp, &ready); + } else + fdpp = &fdp->next; + if (pending.first == NULL) + poll_time = -1; + return NO_ERRORS; + } + else if (left == 0) + return NO_ERRORS; + else if (errno == EINTR) { + tvp = &tv; /* turn off blocking and try again */ + timerclear(tvp); + } + else + return errno; + } +} diff --git a/c/unix/fd-io.c b/c/unix/fd-io.c new file mode 100644 index 0000000..ff8df92 --- /dev/null +++ b/c/unix/fd-io.c @@ -0,0 +1,181 @@ +/* Copyright (c) 1993-1999 by Richard Kelsey and Jonathan Rees. + See file COPYING. */ + +#include +#include +#include +#include +#include +#include +#include /* for errno, (POSIX?/ANSI) */ +#include "sysdep.h" +#include "c-mods.h" +#include "scheme48vm.h" +#include "event.h" + + +/* Non-blocking I/O on file descriptors. + + There appear to be two ways to get non-blocking input and output. One + is to open files with the O_NONBLOCK flag (and to use fcntl() to do the + same to stdin and stdout), the other is to call select() on each file + descriptor before doing the I/O operation. O_NONBLOCK has the problem + of being a property of the file descriptor, and its use with stdin and + stdout can lead to horrible results. + + We use a mixture of both. For input files we call select() before doing + a read(), because read() will return immediately if there are any bytes + available at all, and using O_NONBLOCK on stdin is a very bad idea. + Output files are opened using O_NONBLOCK and stdout is left alone. + +*/ + +int +ps_open_fd(char *filename, bool is_input, long *status) +{ +#define FILE_NAME_SIZE 1024 +#define PERMISSION 0666 /* read and write for everyone */ + + char filename_temp[FILE_NAME_SIZE]; + char *expanded; + extern char *s48_expand_file_name(char *, char *, int); + + int flags; + mode_t mode; + + expanded = s48_expand_file_name(filename, filename_temp, FILE_NAME_SIZE); + if (expanded == NULL) + return -1; + + if (is_input) { + flags = O_RDONLY; + mode = 0; } + else { + flags = O_WRONLY | O_CREAT | O_TRUNC | O_NONBLOCK; + mode = PERMISSION; } + + /* keep trying if interrupted */ + while(TRUE) { + int fd = open(expanded, flags, mode); + if (fd != -1) { + *status = NO_ERRORS; + return fd; } + else if (errno != EINTR) { + *status = errno; + return -1; } + } +} + +int +ps_close_fd(long fd_as_long) +{ + int fd = (int)fd_as_long; + + /* keep retrying if interrupted */ + while(TRUE) { + int status = close(fd); + if (status != -1) { + s48_remove_fd(fd); + return NO_ERRORS; } + else if (errno != EINTR) + return errno; + } +} + +long +ps_read_fd(long fd_as_long, char *buffer, long max, bool waitp, + bool *eofp, bool *pending, long *status) +{ + int got, ready; + void *buf = (void *)buffer; + int fd = (int)fd_as_long; + + struct timeval timeout; + fd_set readfds; + + FD_ZERO(&readfds); + FD_SET(fd, &readfds); + timerclear(&timeout); + + /* for the normal return */ + *eofp = FALSE; + *pending = FALSE; + *status = NO_ERRORS; + + while(TRUE) { + ready = select(fd + 1, &readfds, NULL, &readfds, &timeout); + if (ready == 0) { + if (!waitp) + return 0; + else if (s48_add_pending_fd(fd, TRUE)) { + *pending = TRUE; + return 0; } + else { + *status = ENOMEM; /* as close as POSIX gets */ + return 0; }} + else if (ready == -1) { + if (errno != EINTR) { + *status = errno; + return 0; } } + else { /* characters waiting */ + + got = read(fd, buf, max); + + if (got > 0) { /* all is well */ + return got; } + else if (got == 0) { /* end of file */ + *eofp = TRUE; + return 0; } + else if (errno == EINTR) { /* HCC */ + return 0; } + else if (errno == EAGAIN) { /* HCC */ + if (!waitp) + return 0; + else if (s48_add_pending_fd(fd, TRUE)) { + *pending = TRUE; + return 0; } + else { + *status = ENOMEM; /* as close as POSIX gets */ + return 0; } } + else { + *status = errno; + return 0; } } } +} + +long +ps_write_fd(long fd_as_long, char *buffer, long max, bool *pending, long *status) +{ + int sent; + int fd = (int)fd_as_long; + void *buf = (void *)buffer; + + *pending = FALSE; + *status = NO_ERRORS; + + sent = write(fd, buf, max); + if (sent > 0) + {} + else if (errno == EINTR || errno == EAGAIN) { /* HCC */ + if (s48_add_pending_fd(fd, FALSE)) + *pending = TRUE; + else + *status = ENOMEM; /* as close as POSIX gets */ + sent = 0; } + else { + *status = errno; + sent = 0; } + + return sent; +} + +long +ps_abort_fd_op(long fd_as_long) +{ + int fd = (int)fd_as_long; + + if (!s48_remove_fd(fd)) + fprintf(stderr, "Error: ps_abort_fd_op, no pending operation on fd %d\n", + fd); + return 0; /* because we do not actually do any I/O in parallel the + status is always zero: no characters transfered. */ +} diff --git a/c/unix/io.c b/c/unix/io.c new file mode 100644 index 0000000..ed21219 --- /dev/null +++ b/c/unix/io.c @@ -0,0 +1,296 @@ +/* Copyright (c) 1993-1999 by Richard Kelsey and Jonathan Rees. + See file COPYING. */ + +#include +#include +#include +#include +#include +#include "io.h" +#include "scheme48.h" + +#define TRUE (0 == 0) +#define FALSE (! TRUE) +#define bool char + +/* read a character while ignoring interrupts */ + +#define READ_CHAR(PORT,RESULT) \ +{ \ + FILE * TTport = PORT; \ + int TTchar; \ + if (EOF == (TTchar = getc(TTport))) \ + RESULT = s48_read_char(TTport); \ + else \ + RESULT = TTchar; \ +} + +/* +Helper procedure for the READ_CHAR macro. If the getc was interrupted +we clear the error bit and try again. +*/ + +int +s48_read_char(FILE *port) +{ + int result; + + while(TRUE) { + if (ferror(port) && errno == EINTR) { + clearerr(port); + result = getc(port); + if (EOF != result) + return result; } + else + return EOF; } +} + +/* called when getc(port) returned EOF */ + +char +ps_read_char(FILE *port, bool *eofp, long *status, bool peekp) +{ + bool errorp; + int result; + + result = s48_read_char(port); /* read past any interruptions */ + if (result != EOF) { + if (peekp) + ungetc(result, port); + *eofp = FALSE; + *status = NO_ERRORS; + return result; } + else { + errorp = ferror(port); + clearerr(port); + if (errorp) { + *eofp = FALSE; + *status = errno; + return 0; } + else { + *eofp = TRUE; + *status = NO_ERRORS; + return 0; } } +} + +long +ps_read_integer(FILE *port, bool *eofp, long *status) +{ + long result; + int ch; + bool negate; + bool errorp; + + /* eat whitespace */ + do { READ_CHAR(port, ch); } + while (ch == ' ' || ch == '\t' || ch == '\n'); + + /* read optional sign */ + if (ch == '-') { + negate = TRUE; + READ_CHAR(port, ch); } + else + negate = FALSE; + + if (ch < '0' || '9' < ch) { + if (ch != EOF) { + *eofp = FALSE; + *status = EINVAL; } /* has to be something */ + else { + errorp = ferror(port); + clearerr(port); + if (errorp) { + *eofp = FALSE; + *status = errno; } + else { + *eofp = TRUE; + *status = 0; } } + result = 0; } + else { + result = ch - '0'; + while(1) { + READ_CHAR(port, ch); + if (ch < '0' || '9' < ch) + break; + result = (10 * result) + (ch - '0'); } + if (ch != EOF) + ungetc(ch, port); + *eofp = FALSE; + *status = 0; } + return (negate ? -result : result); +} + +/* write a character regardless of interrupts */ + +#define WRITE_CHAR(CH,PORT,RESULT) \ +{ \ + char TTch = CH; \ + FILE * TTport = PORT; \ + if (putc(TTch, TTport) != EOF) \ + RESULT = 0; \ + else \ + RESULT = ps_write_char(TTch, TTport); \ +} + +/* called when putc(char, port) returned EOF */ + +long +ps_write_char(char ch, FILE *port) +{ + + while(TRUE) { + clearerr(port); + if (errno != EINTR) + return errno; + else if (putc(ch, port) != EOF) + return 0; } +} + +long +ps_write_integer(long n, FILE *port) +{ + int status; + + static long write_integer(unsigned long n, FILE *port); + + if (n == 0) { + WRITE_CHAR('0', port, status); + return status; } + else if (n > 0) + return write_integer(n, port); + else { + WRITE_CHAR('-', port, status); + if (status == 0) + return write_integer(- n, port); + else + return status; } +} + +static long +write_integer(unsigned long n, FILE *port) +{ + char ch; + long status; + + if (n == 0) + status = 0; + else { + status = write_integer(n / 10, port); + if (status == 0) { + ch = (n % 10) + '0'; + WRITE_CHAR(ch, port,status); } } + return status; +} + +long +ps_write_string(char *string, FILE *port) +{ + while (TRUE) { + if (EOF != fputs(string, port)) + return (0); + clearerr(port); + if (errno != EINTR) + return (errno); + } +} + +long +ps_read_block(FILE *port, char *buffer, long count, bool *eofp, long *status) +{ + int got = 0; + bool errorp; + + while(TRUE) { + got += fread(buffer, sizeof(char), count - got, port); + if (got == count) { + *eofp = FALSE; + *status = NO_ERRORS; + return got;} + else if (ferror(port) && errno == EINTR) + clearerr(port); + else { + *eofp = feof(port); + errorp = ferror(port); + clearerr(port); + if (errorp) + *status = errno; + else + *status = NO_ERRORS; + return got;} }; +} + +long +ps_write_block(FILE *port, char *buffer, long count) +{ + int sent = 0; + + while(TRUE) { + sent += fwrite(buffer, sizeof(char), count - sent, port); + if (sent == count) + return NO_ERRORS; + else if (ferror(port) && errno == EINTR) + clearerr(port); + else { + clearerr(port); + return errno; } } +} + +void +ps_error(char *message, long count, ...) +{ + va_list ap; + + va_start(ap, count); + fputs(message, stderr); + for(; count > 0; --count) + fprintf(stderr, " %ld", va_arg(ap, long)); + putc('\n', stderr); + exit(-1); +} + +static FILE * +ps_really_open_file(char *filename, long *status, char *mode) +{ +#define FILE_NAME_SIZE 1024 + + char filename_temp[FILE_NAME_SIZE]; + char *expanded; + extern char *s48_expand_file_name(char *, char *, int); + + FILE *new; + + expanded = s48_expand_file_name(filename, filename_temp, FILE_NAME_SIZE); + if (expanded == NULL) { + *status = EDOM; /* has to be something */ + return NULL; } + + new = fopen(expanded, mode); + + if (new == NULL) { + *status = errno; + return NULL; } + + *status = NO_ERRORS; + return new; +} + +FILE * +ps_open_input_file(char *name, long *status) +{ + return ps_really_open_file(name, status, "r"); +} + +FILE * +ps_open_output_file(char *name, long *status) +{ + return ps_really_open_file(name, status, "w"); +} + +long +ps_close(FILE *stream) +{ + if (0 == fclose(stream)) + return 0; + else + return errno; +} diff --git a/c/unix/misc.c b/c/unix/misc.c new file mode 100644 index 0000000..f8fe75e --- /dev/null +++ b/c/unix/misc.c @@ -0,0 +1,129 @@ +/* Copyright (c) 1993-1999 by Richard Kelsey and Jonathan Rees. + See file COPYING. */ + +#include +#include /* for getenv(), etc. (POSIX?/ANSI) */ +#include /* for strncpy(), etc. (POSIX/ANSI) */ +#include /* for getpwnam() (POSIX.1) */ +#include /* for sysconf(), etc. (POSIX.1/.2)*/ +#include +#include "sysdep.h" + + +#define TRUE (0 == 0) +#define FALSE (0 == 1) + +/* + Expanding Unix filenames + Unix Sucks + Richard Kelsey Wed Jan 17 21:40:26 EST 1990 + Later modified by others who wish to remain anonymous + + Expands initial ~ and ~/ in string `name', leaving the result in `buffer'. + `buffer_len' is the length of `buffer'. + + Note: strncpy(x, y, n) copies from y to x. +*/ + +char *s48_expand_file_name (name, buffer, buffer_len) + char *name, *buffer; + int buffer_len; +{ +#define USER_NAME_SIZE 256 + char *dir, *p, user_name[USER_NAME_SIZE]; + struct passwd *user_data; + int dir_len, i; + extern char *getenv(); + int name_len = strlen(name); + + dir = 0; + + if (name[0] == '~') { + name++; name_len--; + + if (name[0] == '/' || name[0] == 0) { + dir = getenv("HOME"); } + + else { + for (i = 0, p = name; i < name_len && *p != '/'; i++, p++) + if (i > (USER_NAME_SIZE - 2)) { + fprintf(stderr, + "\ns48_expand_file_name: user name longer than %d characters\n", + USER_NAME_SIZE - 3); + return(NULL); }; + strncpy(user_name, name, i); + user_name[i] = 0; + user_data = getpwnam(user_name); + if (!user_data) { + fprintf(stderr, "\ns48_expand_file_name: unknown user \"%s\"\n", + user_name); + return(NULL); }; + name_len -= i; + name = p; + dir = user_data->pw_dir; } } + + else if (name[0] == '$') { + name++; name_len--; + + for (i = 0, p = name; i < name_len && *p != '/'; i++, p++) + if (i > (USER_NAME_SIZE - 2)) { + fprintf(stderr, + "\ns48_expand_file_name: environment variable longer than %d characters\n", + USER_NAME_SIZE - 3); + return(NULL); }; + strncpy(user_name, name, i); + user_name[i] = 0; + + name_len -= i; + name = p; + dir = getenv(user_name); } + + if (dir) { + dir_len = strlen(dir); + if ((name_len + dir_len + 1) > buffer_len) { + fprintf(stderr, "\ns48_expand_file_name: supplied buffer is too small\n"); + return(NULL); }; + strncpy(buffer, dir, dir_len); + strncpy(buffer + dir_len, name, name_len); + buffer[name_len + dir_len] = 0; } + + else { + if ((name_len + 1) > buffer_len) { + fprintf(stderr, "\ns48_expand_file_name: supplied buffer is too small\n"); + return(NULL); }; + strncpy(buffer, name, name_len); + buffer[name_len] = 0; } + + return(buffer); +} + +/* test routine +main(argc, argv) + int argc; + char *argv[]; +{ + char buffer[32]; + s48_expand_file_name(argv[1], buffer, 32); + printf("%s\n", buffer); + return(0); +} +*/ + + +/* Driver loop for tail-recursive calls */ + +long s48_return_value; + +long +s48_run_machine(long (*proc) (void)) +{ + while (proc != 0) + proc = (long (*) (void)) (*proc)(); + return s48_return_value; +} + +unsigned char * +ps_error_string(long the_errno) +{ + return((unsigned char *)strerror(the_errno)); +} diff --git a/c/unix/socket.c b/c/unix/socket.c new file mode 100644 index 0000000..b8946a4 --- /dev/null +++ b/c/unix/socket.c @@ -0,0 +1,376 @@ +/* Copyright (c) 1993-1999 by Richard Kelsey and Jonathan Rees. + See file COPYING. */ + +/* + * An interface to Unix sockets. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "c-mods.h" +#include "scheme48.h" +#include "fd-io.h" /* ps_close_fd() */ +#include "event.h" /* add_pending_fd() */ + +/* Henry Cejtin says that 5 is the largest safe number for this. */ +#define LISTEN_QUEUE_SIZE 5 + +extern void s48_init_socket(void); +static s48_value s48_socket(s48_value server_p), + s48_bind(s48_value socket_channel, s48_value number), + s48_socket_number(s48_value socket_channel), + s48_listen(s48_value socket_channel), + s48_accept(s48_value socket_channel), + s48_connect(s48_value socket_channel, + s48_value machine, + s48_value port), + s48_close_socket_half(s48_value socket_channel, + s48_value input_p), + s48_get_host_name(void); + +/* + * Install all exported functions in Scheme48. + */ +void +s48_init_socket(void) +{ + S48_EXPORT_FUNCTION(s48_socket); + S48_EXPORT_FUNCTION(s48_bind); + S48_EXPORT_FUNCTION(s48_socket_number); + S48_EXPORT_FUNCTION(s48_listen); + S48_EXPORT_FUNCTION(s48_accept); + S48_EXPORT_FUNCTION(s48_connect); + S48_EXPORT_FUNCTION(s48_close_socket_half); + S48_EXPORT_FUNCTION(s48_get_host_name); +} + +/* + * Create an internet-domain stream (reliable, sequenced) socket. + * We return an input channel on success and raise an exception on failure. + * The socket has been made non-blocking. + */ + +static s48_value +s48_socket(s48_value server_p) +{ + int fd, + mode; + s48_value channel; + + fd = socket(AF_INET, SOCK_STREAM, 0); + + if (fd < 0) + s48_raise_os_error(errno); + + if (-1 == fcntl(fd, F_SETFL, O_NONBLOCK)) + s48_raise_os_error(errno); + + mode = (server_p == S48_FALSE) ? + S48_CHANNEL_STATUS_SPECIAL_OUTPUT : + S48_CHANNEL_STATUS_SPECIAL_INPUT; + + channel = s48_add_channel(mode, s48_enter_string("socket"), fd); + + if (!S48_CHANNEL_P(channel)) { + ps_close_fd(fd); /* retries if interrupted */ + s48_raise_scheme_exception(s48_extract_fixnum(channel), 0); }; + + return channel; +} + +/* + * Given an internet-domain stream socket and a port number, bind + * the socket to the port and prepare to receive connections. + * If the port number is #f, then we bind the socket to any available + * port. + * + * Nothing useful is returned. + */ + +static s48_value +s48_bind(s48_value channel, s48_value port_number) +{ + int socket_fd, + port; + struct sockaddr_in address; + + S48_CHECK_CHANNEL(channel); + socket_fd = S48_UNSAFE_EXTRACT_FIXNUM(S48_UNSAFE_CHANNEL_OS_INDEX(channel)); + + if (port_number == S48_FALSE) + port = 0; + else + port = s48_extract_fixnum(port_number); + + address.sin_family = AF_INET; + address.sin_addr.s_addr = htonl(INADDR_ANY); + address.sin_port = htons(port); + + if (bind(socket_fd, (struct sockaddr *)&address, sizeof(address)) < 0) + s48_raise_os_error(errno); + + return S48_UNSPECIFIC; +} + +/* + * Return the port number associated with an internet stream socket. + */ + +static s48_value +s48_socket_number(s48_value channel) +{ + int socket_fd, + len; + struct sockaddr_in address; + + S48_CHECK_CHANNEL(channel); + socket_fd = S48_UNSAFE_EXTRACT_FIXNUM(S48_UNSAFE_CHANNEL_OS_INDEX(channel)); + + address.sin_addr.s_addr = htonl(INADDR_ANY); + + len = sizeof(address); + + if ((getsockname(socket_fd, (struct sockaddr *)&address, &len) < 0) + || (address.sin_family != AF_INET)) + s48_raise_os_error(errno); + + return s48_enter_fixnum(htons(address.sin_port)); +} + +static s48_value +s48_listen(s48_value channel) +{ + int socket_fd; + + S48_CHECK_CHANNEL(channel); + socket_fd = S48_UNSAFE_EXTRACT_FIXNUM(S48_UNSAFE_CHANNEL_OS_INDEX(channel)); + + if (listen(socket_fd, LISTEN_QUEUE_SIZE) < 0) + s48_raise_os_error(errno); + + return S48_UNSPECIFIC; +} + + +/* + * Given an internet-domain stream socket which has been bound + * accept a connection and return the resulting socket as a pair of channels + * (after marking it non-blocking). + * + * If the accept fails because the client hasn't connected yet, then we + * return #f. + * + * If it fails for any other reason, then an exception is raised. + */ + +static s48_value +s48_accept(s48_value channel) +{ + int socket_fd, + connect_fd, + output_fd, + len; + struct sockaddr_in address; + s48_value input_channel, + output_channel; + + S48_CHECK_CHANNEL(channel); + socket_fd = S48_UNSAFE_EXTRACT_FIXNUM(S48_UNSAFE_CHANNEL_OS_INDEX(channel)); + + len = sizeof(address); + connect_fd = accept(socket_fd, (struct sockaddr *)&address, &len); + + /* + * Check for a connection. If we have one we create two channels, one + * input and one, with a dup()'ed fd, output. Lots of error checking + * makes this messy. + */ + + if (connect_fd >= 0) { + + S48_DECLARE_GC_PROTECT(1); + + if (-1 == fcntl(connect_fd, F_SETFL, O_NONBLOCK)) + s48_raise_os_error(errno); + + input_channel = s48_add_channel(S48_CHANNEL_STATUS_INPUT, + s48_enter_string("socket connection"), + connect_fd); + + if (!S48_CHANNEL_P(input_channel)) { + ps_close_fd(connect_fd); /* retries if interrupted */ + s48_raise_scheme_exception(s48_extract_fixnum(input_channel), 0); }; + + output_fd = dup(connect_fd); + + if (output_fd == -1) + s48_raise_os_error(errno); + + S48_GC_PROTECT_1(input_channel); + + output_channel = s48_add_channel(S48_CHANNEL_STATUS_OUTPUT, + s48_enter_string("socket connection"), + output_fd); + + if (!S48_CHANNEL_P(output_channel)) { + /* input_channel will eventually be closed by the GC */ + ps_close_fd(output_fd); /* retries if interrupted */ + s48_raise_scheme_exception(s48_extract_fixnum(output_channel), 0); }; + + S48_GC_UNPROTECT(); + + return s48_cons(input_channel, output_channel); + } + + /* + * Check for errors. If we need to retry we mark the socket as pending + * and return #F to tell the Scheme procedure to wait. + */ + + if ((errno != EWOULDBLOCK) && (errno != EINTR) && (errno == EAGAIN)) + s48_raise_os_error(errno); + + if (! s48_add_pending_fd(socket_fd, TRUE)) + s48_raise_out_of_memory_error(); + + return S48_FALSE; +} + +/* + * Given an internet-domain stream socket, a machine name and a port number, + * connect the socket to that machine/port. + * + * If this succeeds, it returns an output channel for the connection. + * If it fails because the connect would block, add the socket to the + * pending queue (for output) and return #f. + * If it fails for any other reason, raise an exception. + */ + +static s48_value +s48_connect(s48_value channel, s48_value machine, s48_value port) +{ + int socket_fd, + output_fd, + port_number; + char *machine_name; + struct hostent *host; + struct sockaddr_in address; + s48_value output_channel; + + S48_CHECK_CHANNEL(channel); + socket_fd = S48_UNSAFE_EXTRACT_FIXNUM(S48_UNSAFE_CHANNEL_OS_INDEX(channel)); + + S48_CHECK_STRING(machine); + machine_name = S48_UNSAFE_EXTRACT_STRING(machine); + + S48_CHECK_FIXNUM(port); + port_number = S48_UNSAFE_EXTRACT_FIXNUM(port); + + /* + * Get the host and initialize `address'. + */ + + host = gethostbyname(machine_name); + if (host == NULL) + s48_raise_os_error(errno); + + memset((void *)&address, 0, sizeof(address)); + address.sin_family = host->h_addrtype; + + if (host->h_length > sizeof(address.sin_addr)) + s48_raise_range_error(s48_enter_fixnum(host->h_length), + S48_UNSAFE_ENTER_FIXNUM(0), + s48_enter_fixnum(sizeof(address.sin_addr))); + memcpy((void *)&address.sin_addr, (void *)host->h_addr, host->h_length); + address.sin_port = htons(port_number); + + /* + * Try the connection. If it works we make an output channel and return it. + * The original socket channel will be used as the input channel. + */ + + if (connect(socket_fd, (struct sockaddr *)&address, sizeof(address)) >= 0) { + S48_STOB_SET(channel, S48_CHANNEL_STATUS_OFFSET, S48_CHANNEL_STATUS_INPUT); + + output_fd = dup(socket_fd); + + if (output_fd == -1) + s48_raise_os_error(errno); + + output_channel = s48_add_channel(S48_CHANNEL_STATUS_OUTPUT, + s48_enter_string("socket connection"), + output_fd); + + if (!S48_CHANNEL_P(output_channel)) { + ps_close_fd(output_fd); /* retries if interrupted */ + s48_raise_scheme_exception(s48_extract_fixnum(output_channel), 0); }; + + return output_channel; + } + + /* + * Check for errors. If we need to retry we mark the socket as pending + * and return #F to tell the Scheme procedure to wait. + */ + + /* already connected, will raise an error from Scheme */ + if (errno == EISCONN) + return S48_TRUE; + + if (errno != EWOULDBLOCK && errno != EINTR && errno != EALREADY + && errno != EINPROGRESS && errno != EAGAIN) + s48_raise_os_error(errno); + + if (! (s48_add_pending_fd(socket_fd, FALSE))) + s48_raise_out_of_memory_error(); + + return S48_FALSE; +} + +/* + * Close half of a socket; if `input_p' is true we close the input half, + * otherwise the output half. This horribleness is forced upon us by + * Unix's use of bidirectional file descriptors. + */ + +static s48_value +s48_close_socket_half(s48_value channel, s48_value input_p) +{ + int socket_fd; + + S48_CHECK_CHANNEL(channel); + socket_fd = S48_UNSAFE_EXTRACT_FIXNUM(S48_UNSAFE_CHANNEL_OS_INDEX(channel)); + + /* We ignore `endpoint is not connected' errors, as we just want to get + the file descriptor closed. */ + if ((0 > shutdown(socket_fd, S48_EXTRACT_BOOLEAN(input_p) ? 0 : 1)) + && (errno != ENOTCONN)) + s48_raise_os_error(errno); + + return S48_TRUE; +} + + +/* + * Get the name of the local machine. + */ + +static s48_value +s48_get_host_name(void) +{ + char mbuff[MAXHOSTNAMELEN]; + + if (gethostname(mbuff, sizeof(mbuff)) < 0) + s48_raise_os_error(errno); + + return s48_enter_string(mbuff); +} + diff --git a/c/unix/test.c b/c/unix/test.c new file mode 100644 index 0000000..0835635 --- /dev/null +++ b/c/unix/test.c @@ -0,0 +1,12 @@ + +#include "c/scheme48.h" + +long +frog(long arg_count, long *args) +{ + long i, res; + + for (i = 0, res = s48_enter_integer(-100); i < arg_count; res += args[i], i++); + + return res; +} diff --git a/c/write-barrier.h b/c/write-barrier.h new file mode 100644 index 0000000..721b011 --- /dev/null +++ b/c/write-barrier.h @@ -0,0 +1,2 @@ + +#define S48_WRITE_BARRIER(stob, address, value) ((void)0) diff --git a/configure b/configure new file mode 100755 index 0000000..be73f2e --- /dev/null +++ b/configure @@ -0,0 +1,1925 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.10 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.10" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LANG+set}" = set; then LANG=C; export LANG; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=c/scheme48vm.c + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + + + oldCFLAGS="$CFLAGS" + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + ac_prog_rejected=no + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_save_ifs" +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 +if test $ac_cv_prog_gcc = yes; then + GCC=yes + if test "${CFLAGS+set}" != set; then + echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +if eval "test \"`echo '$''{'ac_cv_prog_gcc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_gcc_g=yes +else + ac_cv_prog_gcc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_gcc_g" 1>&6 + if test $ac_cv_prog_gcc_g = yes; then + CFLAGS="-g -O" + else + CFLAGS="-O" + fi + fi +else + GCC= + test "${CFLAGS+set}" = set || CFLAGS="-g" +fi + + if test "z$oldCFLAGS" = z; then + if test "z$GCC" = z; then + CFLAGS='-O' + else + CFLAGS='-O2' + fi + fi + + echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 +if test -d /etc/conf/kconfig.d && + grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 +then + echo "$ac_t""yes" 1>&6 + ISC=yes # If later tests want to check for ISC. + cat >> confdefs.h <<\EOF +#define _POSIX_SOURCE 1 +EOF + + if test "$GCC" = yes; then + CC="$CC -posix" + else + CC="$CC -Xp" + fi +else + echo "$ac_t""no" 1>&6 + ISC= +fi + + # If we cannot run a trivial program, we must be cross compiling. +echo $ac_n "checking whether cross-compiling""... $ac_c" 1>&6 +if eval "test \"`echo '$''{'ac_cv_c_cross'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_c_cross=yes +else +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } +if test -s conftest && (./conftest; exit) 2>/dev/null; then + ac_cv_c_cross=no +else + ac_cv_c_cross=yes +fi +fi +rm -fr conftest* +fi + +echo "$ac_t""$ac_cv_c_cross" 1>&6 +cross_compiling=$ac_cv_c_cross + +if test "$cross_compiling" = yes; then + true +else +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } +if test -s conftest && (./conftest; exit) 2>/dev/null; then + : +fi +fi +rm -fr conftest* + if test "z$GCC" = z; then + echo $ac_n "checking -cckr""... $ac_c" 1>&6 + oldCFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -cckr" + if test "$cross_compiling" = yes; then + echo "$ac_t""no" 1>&6 + CFLAGS="$oldCFLAGS" +else +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } +if test -s conftest && (./conftest; exit) 2>/dev/null; then + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 + CFLAGS="$oldCFLAGS" +fi +fi +rm -fr conftest* + fi + + ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + for ac_prog in ginstall installbsd scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + # OSF/1 installbsd also uses dspmsg, but is usable. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_ifs" + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + echo $ac_n "checking for -lm""... $ac_c" 1>&6 +ac_lib_var=`echo m'_'main | tr './+\055' '__p_'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lm $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo m | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi + + echo $ac_n "checking for -ldl""... $ac_c" 1>&6 +ac_lib_var=`echo dl'_'main | tr './+\055' '__p_'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldl $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo dl | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi + + echo $ac_n "checking for -lmld""... $ac_c" 1>&6 +ac_lib_var=`echo mld'_'main | tr './+\055' '__p_'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lmld $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo mld | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi + + echo $ac_n "checking for -lnsl""... $ac_c" 1>&6 +ac_lib_var=`echo nsl'_'main | tr './+\055' '__p_'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lnsl $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo nsl | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi + + echo $ac_n "checking for -lgen""... $ac_c" 1>&6 +ac_lib_var=`echo gen'_'main | tr './+\055' '__p_'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lgen $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo gen | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi + + echo $ac_n "checking for -lsocket""... $ac_c" 1>&6 +ac_lib_var=`echo socket'_'main | tr './+\055' '__p_'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lsocket $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo socket | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi + + echo $ac_n "checking for -lsun""... $ac_c" 1>&6 +ac_lib_var=`echo sun'_'getpwnam | tr './+\055' '__p_'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lsun $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo sun | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi + + echo $ac_n "checking for -lelf""... $ac_c" 1>&6 +ac_lib_var=`echo elf'_'main | tr './+\055' '__p_'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lelf $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo elf | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi + + echo checking for RISC/OS POSIX library lossage +if test -f /usr/posix/usr/lib/libc.a; then + LIBS="${LIBS} /usr/posix/usr/lib/libc.a" +fi + + echo $ac_n "checking for working const""... $ac_c" 1>&6 +if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <j = 5; +} +{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; +} + +; return 0; } +EOF +if { (eval echo configure:1195: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_const=yes +else + rm -rf conftest* + ac_cv_c_const=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_c_const" 1>&6 +if test $ac_cv_c_const = no; then + cat >> confdefs.h <<\EOF +#define const +EOF + +fi + + echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 +if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#ifdef signal +#undef signal +#endif +#ifdef __cplusplus +extern "C" void (*signal (int, void (*)(int)))(int); +#else +void (*signal ()) (); +#endif + +int main() { return 0; } +int t() { +int i; +; return 0; } +EOF +if { (eval echo configure:1237: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_signal=void +else + rm -rf conftest* + ac_cv_type_signal=int +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_type_signal" 1>&6 +cat >> confdefs.h <&6 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and "${CC-cc}" will confuse make. + CPP="${CC-cc} -E" + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1275: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1290: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + rm -rf conftest* + CPP=/lib/cpp +fi +rm -f conftest* +fi +rm -f conftest* + ac_cv_prog_CPP="$CPP" +fi + CPP="$ac_cv_prog_CPP" +else + ac_cv_prog_CPP="$CPP" +fi +echo "$ac_t""$CPP" 1>&6 + +for ac_hdr in libgen.h sys/timeb.h posix/time.h +do +ac_safe=`echo "$ac_hdr" | tr './\055' '___'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1323: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | tr 'abcdefghijklmnopqrstuvwxyz./\055' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ___'` + cat >> confdefs.h <&6 +fi +done + + for ac_hdr in sys/select.h +do +ac_safe=`echo "$ac_hdr" | tr './\055' '___'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1360: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | tr 'abcdefghijklmnopqrstuvwxyz./\055' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ___'` + cat >> confdefs.h <&6 +fi +done + + for ac_func in dlopen gettimeofday ftime nlist select setitimer sigaction +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { return 0; } +int t() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1415: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* + +fi +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + for ac_func in socket chroot +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { return 0; } +int t() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* + +fi +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + echo $ac_n "checking for strerror""... $ac_c" 1>&6 +if eval "test \"`echo '$''{'ac_cv_func_strerror'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char strerror(); + +int main() { return 0; } +int t() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_strerror) || defined (__stub___strerror) +choke me +#else +strerror(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1519: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then + rm -rf conftest* + eval "ac_cv_func_strerror=yes" +else + rm -rf conftest* + eval "ac_cv_func_strerror=no" +fi +rm -f conftest* + +fi +if eval "test \"`echo '$ac_cv_func_'strerror`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define HAVE_STRERROR 1 +EOF + +else + echo "$ac_t""no" 1>&6 +LIBOBJS="$LIBOBJS c/fake/strerror.o" +fi + + echo $ac_n "checking n_name""... $ac_c" 1>&6 + cat > conftest.$ac_ext < +int main() { return 0; } +int t() { +struct nlist name_list; + name_list.n_name = "foo"; +; return 0; } +EOF +if { (eval echo configure:1551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then + rm -rf conftest* + cat >> confdefs.h <<\EOF +#define NLIST_HAS_N_NAME 1 +EOF + + echo "$ac_t""yes" 1>&6 +else + rm -rf conftest* + echo "$ac_t""no" 1>&6 +fi +rm -f conftest* + + echo $ac_n "checking __NEXT__""... $ac_c" 1>&6 + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then + rm -rf conftest* + CC="$CC -posix" + cat >> confdefs.h <<\EOF +#define HAVE_SIGACTION 1 +EOF + + echo "$ac_t""yes" 1>&6 +else + rm -rf conftest* + echo "$ac_t""no" 1>&6 +fi +rm -f conftest* + + echo $ac_n "checking underscore before symbols""... $ac_c" 1>&6 + echo 'main() { return 0; } fnord() {}' >conftest.c + if ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} conftest.c ${LIBS} && + nm a.out | grep _fnord >/dev/null; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define USCORE 1 +EOF + + else + echo "$ac_t""no" 1>&6 + fi + rm -f conftest.c a.out + + echo $ac_n "checking link with -rdynamic""... $ac_c" 1>&6 + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + echo "$ac_t""no" 1>&6 +else + rm -rf conftest* + echo "$ac_t""yes" 1>&6 + LDFLAGS="$LDFLAGS -rdynamic" +fi +rm -f conftest* + + + + + +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + sed -n "s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=\${\1='\2'}/p" \ + >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +DEFS=-DHAVE_CONFIG_H + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.10" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir +ac_given_INSTALL="$INSTALL" + +trap 'rm -fr `echo "Makefile c/sysdep.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@CC@%$CC%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@CPP@%$CPP%g +s%@LIBOBJS@%$LIBOBJS%g + +CEOF +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust relative srcdir, etc. for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file +fi; done +rm -f conftest.subs + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' +ac_dC='\3' +ac_dD='%g' +# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". +ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='\([ ]\)%\1#\2define\3' +ac_uC=' ' +ac_uD='\4%g' +# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_eB='$%\1#\2define\3' +ac_eC=' ' +ac_eD='%g' + +CONFIG_HEADERS=${CONFIG_HEADERS-"c/sysdep.h"} +for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then + # Support "outfile[:infile]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + echo creating $ac_file + + rm -f conftest.frag conftest.in conftest.out + cp $ac_given_srcdir/$ac_file_in conftest.in + +EOF + +# Transform confdefs.h into a sed script conftest.vals that substitutes +# the proper values into config.h.in to produce config.h. And first: +# Protect against being on the right side of a sed subst in config.status. +# Protect against being in an unquoted here document in config.status. +rm -f conftest.vals +cat > conftest.hdr <<\EOF +s/[\\&%]/\\&/g +s%[\\$`]%\\&%g +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp +s%ac_d%ac_u%gp +s%ac_u%ac_e%gp +EOF +sed -n -f conftest.hdr confdefs.h > conftest.vals +rm -f conftest.hdr + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >> conftest.vals <<\EOF +s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% +EOF + +# Break up conftest.vals because some shells have a limit on +# the size of here documents, and old seds have small limits too. +# Maximum number of lines to put in a single here document. +ac_max_here_lines=12 + +rm -f conftest.tail +while : +do + ac_lines=`grep -c . conftest.vals` + # grep -c gives empty output for an empty file on some AIX systems. + if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi + # Write a limited-size here document to conftest.frag. + echo ' cat > conftest.frag <> $CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS + echo 'CEOF + sed -f conftest.frag conftest.in > conftest.out + rm -f conftest.in + mv conftest.out conftest.in +' >> $CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail + rm -f conftest.vals + mv conftest.tail conftest.vals +done +rm -f conftest.vals + +cat >> $CONFIG_STATUS <<\EOF + rm -f conftest.frag conftest.h + echo "/* $ac_file. Generated automatically by configure. */" > conftest.h + cat conftest.in >> conftest.h + rm -f conftest.in + if cmp -s $ac_file conftest.h 2>/dev/null; then + echo "$ac_file is unchanged" + rm -f conftest.h + else + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + fi + rm -f $ac_file + mv conftest.h $ac_file + fi +fi; done + + + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + diff --git a/configure.in b/configure.in new file mode 100644 index 0000000..d7c1341 --- /dev/null +++ b/configure.in @@ -0,0 +1,130 @@ +dnl Process this file with autoconf to produce a configure script. +dnl +dnl We might want AC_WORDS_BIGENDIAN in the future. +dnl We might want AC_CHAR_UNSIGNED in the future. +dnl +dnl The -cckr (K&R) flag is for the IRIX C compiler. If this is left +dnl out, scheme48vm.c breaks because the rather pedantic SGI compiler +dnl decides that a char is not the same thing as an unsigned char. +dnl - Bryan O'Sullivan 3/94 +dnl Note, this test didn't work correctly on Sun's which take -cckr as a +dnl synonym for -c. (HCC) +define(S48_CFLAG_CKR, [dnl + if test "z$GCC" = z; then + AC_MSG_CHECKING([-cckr]) + oldCFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -cckr" + AC_TRY_RUN([int main() { return 0;}], + [AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no) + CFLAGS="$oldCFLAGS"], + [AC_MSG_RESULT(no) + CFLAGS="$oldCFLAGS"]) + fi +])dnl +dnl +define(S48_POSIX_LIBC, [dnl +echo checking for RISC/OS POSIX library lossage +if test -f /usr/posix/usr/lib/libc.a; then + LIBS="${LIBS} /usr/posix/usr/lib/libc.a" +fi +])dnl +dnl +dnl Run AC_PROG_CC, but don't accept it's changes to CFLAGS. +dnl For some insane reason, it sets CFLAGS to either `-O' or `-g -O' for gcc. +dnl I don't want the silly -g (because if you are using nlist, you can't strip +dnl the binary), I want -O2 for gcc and -O for other C compilers. +define(S48_PROG_CC, [dnl + oldCFLAGS="$CFLAGS" + AC_PROG_CC + if test "z$oldCFLAGS" = z; then + if test "z$GCC" = z; then + CFLAGS='-O' + else + CFLAGS='-O2' + fi + fi +])dnl +dnl +dnl Linux/ELF systems need the -rdynamic flag when linking so that +dnl dlsym() can find symbols in the executable. +dnl Note, on some Sun's, you can link with -rdynamic but the resulting +dnl a.out always core dumps. +define(S48_RDYNAMIC, [dnl + AC_MSG_CHECKING([link with -rdynamic]) + AC_TRY_COMPILE([], +[#if defined(__linux__) && defined(__ELF__) + this must not compile +#endif], + [AC_MSG_RESULT(no)], + [AC_MSG_RESULT(yes) + LDFLAGS="$LDFLAGS -rdynamic"]) +])dnl +dnl +define(S48_USCORE, [dnl + AC_MSG_CHECKING([underscore before symbols]) + echo 'main() { return 0; } fnord() {}' >conftest.c + if ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} conftest.c ${LIBS} && + nm a.out | grep _fnord >/dev/null; then + AC_MSG_RESULT([yes]) + AC_DEFINE(USCORE) + else + AC_MSG_RESULT([no]) + fi + rm -f conftest.c a.out +])dnl +dnl +AC_INIT(c/scheme48vm.c) + AC_CONFIG_HEADER(c/sysdep.h) + S48_PROG_CC + AC_ISC_POSIX + dnl set the cross-compile flag before we try anything. + AC_TRY_RUN([int main() { return 0;}], [], [], [true]) + S48_CFLAG_CKR + AC_PROG_INSTALL + AC_CHECK_LIB(m, main) + AC_CHECK_LIB(dl, main) + AC_CHECK_LIB(mld, main) + AC_CHECK_LIB(nsl, main) + AC_CHECK_LIB(gen, main) + AC_CHECK_LIB(socket, main) + AC_CHECK_LIB(sun, getpwnam) + dnl Solaris 2.3 seems to need -lelf for nlist(). (tnx Bryan O'Sullivan) + AC_CHECK_LIB(elf, main) + S48_POSIX_LIBC + AC_CONST + AC_RETSIGTYPE + AC_CHECK_HEADERS(libgen.h sys/timeb.h posix/time.h) + AC_CHECK_HEADERS(sys/select.h) + AC_CHECK_FUNCS(gettimeofday ftime nlist select setitimer sigaction) + AC_CHECK_FUNC(dlopen, AC_DEFINE(HAVE_DLOPEN), + AC_CHECK_FUNC(nlist, [LIBOBJS="$LIBOBJS c/fake/libdl1.c], + [LIBOBJS="$LIBOBJS c/fake/libdl2.c])) + AC_CHECK_FUNCS(socket chroot) + AC_CHECK_FUNC(strerror, AC_DEFINE(HAVE_STRERROR), + [LIBOBJS="$LIBOBJS c/fake/strerror.o"]) + AC_MSG_CHECKING([n_name]) + AC_TRY_LINK([#include ], + [struct nlist name_list; + name_list.n_name = "foo";], + AC_DEFINE(NLIST_HAS_N_NAME) + AC_MSG_RESULT([yes]), + AC_MSG_RESULT([no])) + AC_MSG_CHECKING([__NEXT__]) + AC_TRY_LINK(,[ +#ifdef __NeXT__ +return 0; +#else +fail +#endif +], + CC="$CC -posix" + AC_DEFINE(HAVE_SIGACTION) + AC_MSG_RESULT([yes]), + AC_MSG_RESULT([no])) + S48_USCORE + S48_RDYNAMIC + AC_SUBST(CFLAGS) + AC_SUBST(LIBOBJS) + AC_SUBST(LDFLAGS) +AC_OUTPUT(Makefile) diff --git a/doc/big-scheme.txt b/doc/big-scheme.txt new file mode 100644 index 0000000..0f03197 --- /dev/null +++ b/doc/big-scheme.txt @@ -0,0 +1,309 @@ + + Documentation for Big Scheme + + +Big Scheme is a set of generally useful facilities. + +Easiest way to access these things: + + > ,open big-scheme + Load structure big-scheme (y/n)? y + ... + +A better way is to use the module system. + +----- + +Ascii conversions + +(CHAR->ASCII ) => +(ASCII->CHAR ) => + These are identical to CHAR->INTEGER and INTEGER->CHAR except that + they use the ASCII encoding. + +----- + +Bitwise operations + +(BITWISE-NOT ) => +(BITWISE-AND ) => +(BITWISE-IOR ) => +(BITWISE-XOR ) => + These perform various logical operations on integers on a bit-by-bit + basis, using a two's-complement representation. + +(ARITHMETIC-SHIFT ) => + Shift the integer by the given bit count, shifting left for positive + counts and right for negative ones. A two's complement + representation is used. + +----- + +Hash tables + +(MAKE-TABLE) => +(MAKE-STRING-TABLE) => + Make a new, empty table. MAKE-TABLE returns a table that uses EQ? + for comparing keys and an ad-hoc hash function. String tables uses + strings for keys. + +(MAKE-TABLE-MAKER ) => + Returns a procedure of no arguments that makes tables that use the + given comparison and hash procedures. + ( ) => + ( ) => + +(TABLE? ) => + True if is a table. + +(TABLE-REF
) => + Return the value for in
, or #F if there is none. + should be of a type appropriate for
. + +(TABLE-SET!
) => + Make be the value of in
. should be of a + type appropriate for
. + +(TABLE-WALK
) => + Apply , which must accept two arguments, to every + associated key and value in
. + +----- + +Enumerations + +(DEFINE-ENUMERATION ( ...)) *SYNTAX* + Defines to be an enumeration with components + .... Also defines -COUNT to be the number of + components. + +(ENUM ) => *SYNTAX* + Evaluates to the value of within the enumeration + . For example, if (DEFINE-ENUMERATION COLOR (GREEN + RED)), then (ENUM COLOR GREEN) is zero and (ENUM COLOR RED) is one. + The mapping from name to integer is done at macro-expansion time, so + there is no run-time overhead. + +(ENUMERAND->NAME ) => + Returns the name associated with within . + E.g. (ENUMERAND->NAME 1 COLOR) => 'RED. + +(NAME->ENUMERAND ) => + Returns the integer associated with within . + E.g. (ENUMERAND->NAME 'GREEN COLOR) => 0. + +----- + +Port extensions + +(MAKE-TRACKING-INPUT-PORT ) => +(MAKE-TRACKING-OUTPUT-PORT ) => + These return ports that keep track of the current row and column and + are otherwise identical to their arguments. + +(MAKE-STRING-INPUT-PORT ) => + Returns a port that reads characters from the supplied string. + +(CALL-WITH-STRING-OUTPUT-PORT ) => + The procedure is called on a port. When it returns, CALL-WITH-STRING- + OUTPUT-PORT returns a string containing the characters written to the port. + +(WRITE-ONE-LINE ) => + The procedure is called on an output port. Output written to that + port is copied to until characters + have been written, at which point WRITE-ONE-LINE returns. + +(CURRENT-ROW ) => or #f +(CURRENT-COLUMN ) => or #f + These return the current read or write location of the port. #F is + returned if the port does not keep track of its location. + +(FRESH-LINE ) => + Write a newline character to if its current column is not 0. + +(INPUT-PORT? ) => +(OUTPUT-PORT? ) => + These are versions of the standard Scheme predicates that answer true for + extended ports. + +----- + +Queues + +(MAKE-QUEUE) => + Returns a new, empty queue. + +(ENQUEUE! ) => + Puts on the queue. + +(DEQUEUE! ) => + Removes and returns the first element of the queue. + +(QUEUE-EMPTY? ) => + True if the queue is empty. + +(QUEUE? ) => + True if is a queue. + +(QUEUE->LIST ) => + Returns a list of the elements of the queue, in order. + +(QUEUE-LENGTH ) => + The number of elements currently on the queue. + +(DELETE-FROM-QUEUE! ) => + Removes the first occurance of from the queue, returning true if + it was found and false otherwise. + +----- + +Little utility procedures + +(ATOM? ) => + (ATOM? x) == (NOT (PAIR? x)) + +(NULL-LIST? ) => + Returns #t for the empty list, #f for a pair, and signals an error + otherwise. + +(NEQ? ) => + (NEQ? x y) is the same as (NOT (EQ? x y)). + +(N= ) => + (N= x y) is the same as (NOT (= x y)). + +(IDENTITY ) => +(NO-OP ) => + These both just return their argument. NO-OP is guaranteed not to + be compiled in-line, IDENTITY may be. + +----- + +List utilities + +(MEMQ? ) => + Returns true if is in , false otherwise. + +(ANY? ) => + Returns true if is true for any element of . + +(EVERY? ) => + Returns true if is true for every element of . + +(ANY ) +(FIRST ) + ANY returns some element of for which is true, or + #F if there are none. FIRST does the same except that it returns + the first element for which is true. + +(FILTER ) +(FILTER! ) + Returns a list containing all of the elements of for which + is true. The order of the elements is preserved. + FILTER! may reuse the storage of . + +(FILTER-MAP ) + The same as FILTER except the returned list contains the results of + applying instead of elements of . (FILTER-MAP p + l) is the same as (FILTER IDENTITY (MAP p l)). + +(PARTITION-LIST ) => +(PARTITION-LIST! ) => + The first return value contains those elements for which + is true, the second contains the remaining elements. + The order of the elements is preserved. PARTITION-LIST! may resuse + the storage of the . + +(REMOVE-DUPLICATES ) => + Returns its argument with all duplicate elements removed. The first + instance of each element is preserved. + +(DELQ ) => +(DELQ! ) => +(DELETE ) => + All three of these return with some elements removed. DELQ + removes all elements EQ? to . DELQ! does the same and may + modify the list argument. DELETE removes all elements for which + is true. Both DELQ and DELETE may reuse some of the + storage in the list argument, but won't modify it. + +(REVERSE! ) => + Destructively reverses . + +(SORT-LIST ) => +(SORT-LIST! ) => + Returns a sorted copy of . The sorting algorithm is stable. + (SORT-LIST '(6 5 1 3 2 4) <) => '(1 2 3 4 5 6) + +----- + +Additional syntax + +(DESTRUCTURE (( ) ...) ...) *SYNTAX* + The s are evaluated and their values are dissasembled + according to the corresponding patterns, with identifiers in the + patterns being bound to fresh locations holding the corresponding + part, and the body is evaluated in the extended environment. + Patterns may be any of the following: + + #f Discard the corresponding part. + Bind the to the part. + ( ...) The part must be a list at least as long as the + pattern. + ( ... . ) + The same thing, except that the final CDR of the + part is dissasembled according to . + #( ...) The part must be a vector at least as long as the + pattern. + +(RECEIVE ...) *SYNTAX* + => (CALL-WITH-VALUES (LAMBDA () ) (LAMBDA ...)) + Bind to the values returned by , and evaluate the + body in the resulting environment. + +----- + +Printing and related procedures + +(CONCATENATE-SYMBOL . ) + Returns the symbol whose name is produced by concatenating the DISPLAYed + representations of . + (CONCATENATE-SYMBOL 'abc "-" 4) => 'abc-4 + +(FORMAT . ) => or + Prints the arguments to the port as directed by the string. + should be either: + An output port. The output is written directly to the port. The result + of the call to FORMAT is undefined. + #T. The output is written to the current output port. The result of the + call to FORMAT is undefined. + #F. The output is written to a string, which is then the value returned + from the call to FORMAT. + Characters in which are not preceded by a ~ are written + directly to the output. Characters preceded by a ~ have the following + meaning (case is irrelevant; ~a and ~A have the same meaning): + ~~ prints a single ~ + ~A prints the next argument using DISPLAY + ~D prints the next argument as a decimal number + ~S prints the next argument using WRITE + ~% prints a newline character + ~& prints a NEWLINE character if the previous printed character was not one + (this is implemented using FRESH-LINE) + ~? performs a recursive call to FORMAT using the next two arguments as the + string and the list of arguments + +(ERROR . ) +(BREAKPOINT . ) + Signals an error or breakpoint condition, passing it the result of + applying FORMAT to the arguments. + +(P ) +(P ) +(PRETTY-PRINT ) + Pretty-print . The current output port is used if no port is + specified. is the starting offset. will be + pretty-printed to the right of this column. + + +Original by RK, 26 Jan 1993. +Minor changes by JAR, 5 Dec 1993. diff --git a/doc/external.ps b/doc/external.ps new file mode 100644 index 0000000..2f3d093 --- /dev/null +++ b/doc/external.ps @@ -0,0 +1,4430 @@ +%!PS-Adobe-2.0 +%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software +%%Title: external.dvi +%%Pages: 13 +%%PageOrder: Ascend +%%BoundingBox: 0 0 612 792 +%%DocumentPaperSizes: Letter +%%EndComments +%DVIPSCommandLine: /usr/bin/dvips -D 600 -f external.dvi +%DVIPSParameters: dpi=600, comments removed +%DVIPSSource: TeX output 1999.02.23:1806 +%%BeginProcSet: tex.pro +/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N +/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 +mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} +ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale +isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div +hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul +TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if} +forall round exch round exch]setmatrix}N /@landscape{/isls true N}B +/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B +/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{ +/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N +string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N +end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{ +/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0] +N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup +length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{ +128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub +get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data +dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N +/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup +/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx +0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff +setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff +.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]} +if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup +length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{ +cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin +0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul +add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict +/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook +known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X +/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for +65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 +0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V +{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 +getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} +ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false +RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1 +false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform +round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg +rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail +{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M} +B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{ +4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{ +p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p +a}B /bos{/SS save N}B /eos{SS restore}B end +%%EndProcSet +TeXDict begin 40258431 52099146 1000 600 600 (external.dvi) +@start /Fa 3 119 df<1C007F00FF80FF80FF80FF80FF807F001C000909798817>58 +D<03E0007F000007F801FFE0000E3C0781F0001C3E1E00F800383F3800FC00303F7000FC +00303FE0007C00703FC0007C00603F80007C00603F80007C00E03F0000FC00C07F0000FC +00C07E0000FC00C07E0000FC00007E0001FC0000FE0001F80000FC0001F80000FC0001F8 +0000FC0003F80001FC0003F00001F80003F00001F80007F00001F80007E00003F80007E0 +0003F0000FE03003F0000FC03003F0001FC07007F0001F806007E0001F806007E0001F80 +E007E0001F00C00FE0001F01C00FC0001F01800FC0001F03800FC0001F07001FC0000F0E +001F800007FC0007000001F0002C267EA432>110 D<00F80003C003FE0007E0070F000F +E00E0F800FF01C0F800FF0180F800FF0380F8007F0300F8003F0701F8001F0601F8001F0 +601F8000F0E03F8000E0C03F0000E0C07F0000E0007E0000E0007E0000C000FE0000C000 +FC0000C000FC0001C001FC00018001F800018001F800038001F800030003F800030003F0 +00070003F000060003F0000E0003F0000C0003F0001C0003F000180003F000380003F000 +700001F000E00001F801C00000FC038000007E0F0000001FFE00000007F0000024267EA4 +28>118 D E /Fb 7 109 df<7FFE0000003FFF007FFF0000007FFF00FFFF800000FFFF80 +FFFFC00001FFFF80FFFFC00001FFFF807FFFC00001FFFF007FFFE00003FFFF0003FFE000 +03FFE00003FBE00003EFE00003FBF00007EFE00003FBF00007EFE00003FBF00007EFE000 +03F9F00007CFE00003F9F8000FCFE00003F9F8000FCFE00003F9F8000FCFE00003F9FC00 +1FCFE00003F8FC001F8FE00003F8FC001F8FE00003F8FE003F8FE00003F8FE003F8FE000 +03F87E003F0FE00003F87E003F0FE00003F87F007F0FE00003F87F007F0FE00003F83F00 +7E0FE00003F83F80FE0FE00003F83F80FE0FE00003F81F80FC0FE00003F81FC1FC0FE000 +03F81FC1FC0FE00003F80FC1F80FE00003F80FC1F80FE00003F80FE3F80FE00003F80FE3 +F80FE00003F807E3F00FE00003F807E3F00FE00003F807F7F00FE00003F803F7E00FE000 +03F803F7E00FE00003F803F7E00FE00003F801FFC00FE00003F801FFC00FE00003F801FF +C00FE00003F800FF800FE00003F800FF800FE00003F800FF800FE00003F8007F000FE000 +03F8003E000FE00003F80000000FE00003F80000000FE00003F80000000FE00003F80000 +000FE00003F80000000FE00003F80000000FE00003F80000000FE00003F80000000FE000 +03F80000000FE00003F80000000FE00003F80000000FE00003F80000000FE00003F80000 +000FE00003F80000000FE00003F80000000FE00003F80000000FE00003F80000000FE000 +7FFFC00001FFFF007FFFC00001FFFF00FFFFE00003FFFF80FFFFE00003FFFF80FFFFE000 +03FFFF807FFFC00001FFFF007FFFC00001FFFF0039497EC83E>77 +D<000FFFC0000000007FFFF800000001FFFFFE00000003FFFFFF80000007FFFFFFE00000 +0FFFFFFFF000000FFFFFFFF800001FFC007FFC00001FF8000FFE00001FF80007FE00001F +F80001FF00001FF80001FF00000FF00000FF800007E000007F8000000000007FC0000000 +00003FC000000000003FC000000000003FC000000000003FC000000000003FC000000000 +003FC000000003FFFFC00000007FFFFFC0000003FFFFFFC000001FFFFFFFC000007FFFFF +FFC00000FFFFFFFFC00003FFFFC03FC00007FFF8003FC0000FFF80003FC0001FFC00003F +C0003FF000003FC0003FE000003FC0007FC000003FC0007F8000003FC000FF8000003FC0 +00FF0000003FC000FF0000003FC000FF0000003FC000FF0000003FC000FF0000003FC000 +FF8000007FC0007F8000007FC0007FC00000FFC0003FE00003FFC0003FF8000FFFE0001F +FF00FFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFFC07FFFFFFCFFFFC01FFFFFF07FFFC00FF +FFFC03FFF8003FFFF0007FF80007FF00000000363679B43E>97 D<00001FF800000000FF +FF80000003FFFFE000000FFFFFF800001FFFFFFC00007FFFFFFE0000FFFFFFFF0001FFF8 +0FFF8001FFC001FFC003FF8000FFE007FE00003FE00FFC00001FF00FF800000FF01FF000 +000FF81FF0000007F83FE0000007FC3FE0000007FC7FC0000003FC7FC0000003FC7F8000 +0003FE7F80000003FEFF80000001FEFF80000001FEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFF +FFFFFEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFFFFFCFFFFFFFFFFFCFF0000000000FF8000 +000000FF80000000007F80000000007F80000000007FC0000000003FC0000000003FE000 +0000FC3FE0000000FC1FF0000001FE1FF8000001FE0FFC000003FE07FE000007FE07FF00 +000FFC03FF80001FFC01FFE0007FF800FFFC03FFF0007FFFFFFFE0003FFFFFFFC0001FFF +FFFF800007FFFFFF000001FFFFFC0000007FFFE000000007FF00002F3679B43E>101 +D<00000001FFC00000000FFFF00000003FFFFC000000FFFFFE000001FFFFFE000003FFFF +FF000007FFFFFF00000FFF03FF00001FF803FF00001FF001FE00003FE001FE00003FC000 +FC00007FC0000000007F80000000007F80000000007F80000000007F80000000007F8000 +0000007F80000000007F80000000007F80000000007F80000000007F8000003FFFFFFFFF +F07FFFFFFFFFF0FFFFFFFFFFF8FFFFFFFFFFF8FFFFFFFFFFF87FFFFFFFFFF07FFFFFFFFF +F000007F80000000007F80000000007F80000000007F80000000007F80000000007F8000 +0000007F80000000007F80000000007F80000000007F80000000007F80000000007F8000 +0000007F80000000007F80000000007F80000000007F80000000007F80000000007F8000 +0000007F80000000007F80000000007F80000000007F80000000007F80000000007F8000 +0000007F80000000007F80000000007F80000000007F80000000007F80000000007F8000 +0000007F80000000007F80000000007F80000000007F80000000007F80000000007F8000 +0000007F8000003FFFFFFFFF003FFFFFFFFF007FFFFFFFFF807FFFFFFFFF807FFFFFFFFF +803FFFFFFFFF003FFFFFFFFF00304A7CC93E>I<00003E00000000007F0000000000FF80 +00000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000000FF80 +000000007F00000000003E00000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000003FFFFF8000007FFFFF8000007FFFFFC000007FFFFFC0 +00007FFFFFC000007FFFFFC000003FFFFFC0000000003FC0000000003FC0000000003FC0 +000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0 +000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0 +000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0 +000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0 +000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0 +000000003FC0000000003FC0000000003FC0000000003FC000007FFFFFFFFF80FFFFFFFF +FFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC07FFFFFFFFF802A4A76C9 +3E>105 D<7FFF00000000007FFF0000000000FFFF8000000000FFFF8000000000FFFF80 +000000007FFF80000000007FFF8000000000003F8000000000003F8000000000003F8000 +000000003F8000000000003F8000000000003F8000000000003F8000000000003F800000 +0000003F8000000000003F8000000000003F8000000000003F8000000000003F80000000 +00003F8000000000003F8000000000003F801FFFFFF0003F803FFFFFF0003F803FFFFFF8 +003F803FFFFFF8003F803FFFFFF8003F803FFFFFF0003F801FFFFFF0003F80003FF00000 +3F80007FE000003F8000FFC000003F8001FF8000003F8003FF0000003F8007FE0000003F +800FFC0000003F801FF80000003F803FF00000003F807FE00000003F80FFC00000003F81 +FF800000003F83FF000000003F87FE000000003F8FFE000000003F9FFF000000003FBFFF +800000003FFFFFC00000003FFFFFC00000003FFFBFE00000003FFF1FF00000003FFE0FF8 +0000003FFC07F80000003FF807FC0000003FF003FE0000003FE001FF0000003FC000FF00 +00003F8000FF8000003F80007FC000003F80003FE000003F80001FE000003F80001FF000 +003F80000FF800003F800007FC00003F800003FC00003F800003FE00003F800001FF007F +FFFFC03FFFFE7FFFFFC03FFFFEFFFFFFE07FFFFFFFFFFFE07FFFFFFFFFFFE07FFFFF7FFF +FFC03FFFFE7FFFFFC03FFFFE38497DC83E>107 D<7FFFFFC00000FFFFFFC00000FFFFFF +E00000FFFFFFE00000FFFFFFE00000FFFFFFE000007FFFFFE0000000001FE0000000001F +E0000000001FE0000000001FE0000000001FE0000000001FE0000000001FE0000000001F +E0000000001FE0000000001FE0000000001FE0000000001FE0000000001FE0000000001F +E0000000001FE0000000001FE0000000001FE0000000001FE0000000001FE0000000001F +E0000000001FE0000000001FE0000000001FE0000000001FE0000000001FE0000000001F +E0000000001FE0000000001FE0000000001FE0000000001FE0000000001FE0000000001F +E0000000001FE0000000001FE0000000001FE0000000001FE0000000001FE0000000001F +E0000000001FE0000000001FE0000000001FE0000000001FE0000000001FE0000000001F +E0000000001FE0000000001FE0000000001FE0000000001FE0000000001FE0000000001F +E0000000001FE0000000001FE0000000001FE0000000001FE0000000001FE0000000001F +E0000000001FE0000000001FE0000000001FE000007FFFFFFFFFF8FFFFFFFFFFFCFFFFFF +FFFFFCFFFFFFFFFFFCFFFFFFFFFFFCFFFFFFFFFFFC7FFFFFFFFFF82E4978C83E>I +E /Fc 2 111 df<000E00001F00003F00003F00003E00001C0000000000000000000000 +000000000000000000000003E00007F0000C7800187C00307C00307C00607C0060F800C0 +F800C0F80001F00001F00001F00003E00003E00007C00007C00007C1800F81800F81801F +03001F03001F06000F0C000F1C0007F00003E00011287DA617>105 +D<07801FC0000FE07FF00018F0E0F80030F1807C0030FB007C0060FE003C0060FC003C00 +60F8003C00C1F8007C00C1F0007C0001F0007C0001F0007C0003E000F80003E000F80003 +E000F80003E001F00007C001F00007C001F06007C003E06007C003E0600F8007C0C00F80 +07C0C00F8007C1800F8003C3001F0003C7001F0001FE000E0000F800231B7D9929>110 +D E /Fd 4 58 df<003F800001FFF00003E0F80007803C000F001E001E000F003E000F80 +3E000F803C0007807C0007C07C0007C07C0007C07C0007C0FC0007E0FC0007E0FC0007E0 +FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0 +FC0007E0FC0007E07C0007C07C0007C07C0007C03E000F803E000F803E000F801F001F00 +0F001E0007803C0003E0F80001FFF000003F80001B277EA521>48 +D<00380000780001F8001FF800FEF800E0F80000F80000F80000F80000F80000F80000F8 +0000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8 +0000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80001FC +00FFFFF8FFFFF815267BA521>I<00FF000003FFE0000E03F0001800F80030007C006000 +7E0078003F00FC003F00FE001F80FE001F80FE001F80FE001F807C001F8000001F800000 +1F0000003F0000003E0000007E0000007C000000F8000001F0000003E0000003C0000007 +8000000E0000001C0000003800000070018000E001800180018003000300060003000C00 +03001FFFFF003FFFFF007FFFFE00FFFFFE00FFFFFE0019267DA521>I<007F000001FFC0 +0007C1E0000F0070001E0078003E003C003C003E007C001E007C001E00FC001F00FC001F +00FC001F00FC001F00FC001F80FC001F80FC001F80FC001F807C003F807C003F803C003F +803E007F801E007F800F01DF8007FF9F8001FE1F8000101F0000001F0000001F0000003E +003C003E007E003C007E003C007E0078007E00F0007C00E0003003C0001C0780000FFF00 +0003F8000019277DA521>57 D E /Fe 4 111 df<0003F00000000FFC7800003FFFFC00 +007FFFFC0000FFFFFC0001FE1FFC0003FC0FF80007F80FF8000FF007F8000FE007F8001F +C007F0001F8007F0003F8007F0003F0007F0007F0007E0007E0007E0007E0007E0007E00 +0FE000FE000FE000FC000FC000FC000FC000FC001FC180FC001F87E0FC003F87E0FC003F +87E0FC007F8FE0FC00FF0FC0FC01FF0FC0FE03FF0FC07E07FF1F807F0FFF3F803FFFFFFF +001FFFDFFF001FFF8FFE0007FE07FC0001F801F000232476A32C>97 +D<00007F000003FFC0000FFFF0003FFFF8007FFFFC00FFC1FC01FE00FC03FC007E07F800 +7E0FE000FE0FE000FC1FC000FC3F8001FC3F0007F87F003FF87FFFFFF07FFFFFE07FFFFF +80FFFFFE00FFFFF000FC000000FC000000FC000000FC000000FC000000FC0000007E0000 +007E00001C7F00003E3F8000FE3FC00FFE1FFFFFFE0FFFFFFC07FFFFF001FFFFC0007FFE +001F2475A32C>101 D<00707E007E000079FF81FF8000FFFFC7FFC000FFFFCFFFC000FF +FFFFFFE000FFC3FFC3E001FF83FF83E001FF03FF03F001FE03FE03F001FC03FC03E003FC +03FC03E003F803F803E003F803F803E003F007F007E007F007F007C007F007F007C007E0 +07E007C00FE00FE00FC00FC00FC00F800FC00FC00F801FC01FC01F801F801F801F001F80 +1F801F001F801F803F003F803F803E003F003F003E003F003F007E003F003F007C007F00 +7F007C007E007E007C007E007E007C007E007E007F00FE00FE007F00FC00FC003F80FC00 +FC003F00780078000F002C247DA32C>109 D<01F007F00007F81FFC000FFC7FFE001FFE +FFFF003FFFFFFF803F3FFE1F803F3FF81F807E3FF01F807E3FE01F807E7FC01F80FE7FC0 +1F80FC7F801F80FC7F001F80FCFF003F8000FE003F0000FE003F0000FE003F0001FC007F +0001FC007E0001FC007E0001F800FE0003F800FC1803F800FC7E03F001FC7E03F001F87E +07F001F8FE07F003F8FC07E003F0FC07E003F1FC0FE003F1F80FE003F3F00FC003FFF00F +C001FFE00FC001FFC00F8000FF800700003E0027247AA32C>I E +/Ff 24 122 df<7FFFF87FFFF8FFFFF8FFFFF8FFFFF0150579941E>45 +D<0E003F807F80FF80FF80FF80FF007E003C000909778819>I<00000003FE000E000000 +3FFF801E000000FFFFE03C000003FE01F03C00000FF000787C00003FC0003CFC00007F00 +001FF80000FE00000FF80003FC00000FF80007F8000007F8000FF0000007F0001FE00000 +03F0003FC0000003F0003F80000003F0007F00000003E000FF00000003E001FE00000003 +E001FC00000003E003FC00000003C007F800000003C007F800000003C00FF000000003C0 +0FF000000003801FE000000003801FE000000000001FE000000000003FC000000000003F +C000000000003FC000000000007FC000000000007F8000000000007F8000000000007F80 +0000000000FF800000000000FF000000000000FF000000000000FF000000000000FF0000 +00000000FF000000003800FF000000003800FF000000007800FE000000007000FF000000 +007000FF00000000F0007F00000000E0007F00000001E0007F00000001C0007F00000003 +C0003F8000000780003F8000000700001F8000000E00001FC000001E00000FC000003C00 +000FE0000078000007F00001F0000003F80003C0000001FE000F800000007F807E000000 +003FFFFC000000000FFFE00000000000FF00000000373D74BA3B>67 +D<0000F800000007FE0000001F871C00003E03FE00007C03FE0000F801FE0001F801FE00 +03F000FC0007E000FC000FE000FC000FC001FC001FC001F8001FC001F8003F8001F8003F +8003F8007F8003F0007F0003F0007F0003F0007F0007F000FF0007E000FE0007E000FE00 +07E000FE000FE000FE000FC000FC000FC1C0FC000FC1C0FC001FC1C0FC001F83C0FC001F +8380FC003F8380FC003F87807C007F87007C00FF07003E01FF0F003E038F8E001F0F079E +0007FE03FC0001F000F000222677A42A>97 D<003F00001FFF00001FFF00001FFF000000 +7F0000007E0000007E0000007E000000FE000000FC000000FC000000FC000001FC000001 +F8000001F8000001F8000003F8000003F0000003F0000003F0000007F0000007E0F80007 +E7FE0007EF0F800FFC07C00FF807C00FF003E00FE003E01FC003F01FC003F01F8003F01F +8003F03F8003F03F0003F03F0003F03F0007F07F0007F07E0007F07E0007F07E000FF0FE +000FF0FC000FE0FC000FE0FC001FE0FC001FC0F8001FC0F8003F80F8003F80F8003F00F8 +007F00F8007E00F800FC007801F8007C01F0003C03E0003E07C0001E1F80000FFE000001 +F000001C3B77B926>I<00007F000003FFC0000FC1E0001F0070007E007800FC003801F8 +01F803F003F807F003F807E003F80FE003F81FC003F01FC000003F8000003F8000007F80 +00007F0000007F0000007F000000FF000000FE000000FE000000FE000000FE000000FC00 +0000FC000000FC000000FC000030FC000038FC0000787C0000F07E0001E03E0003C03E00 +0F801F003E000F81F80003FFE00000FF00001D2677A426>I<00000001F8000000FFF800 +0000FFF8000000FFF800000003F800000003F000000003F000000007F000000007F00000 +0007E000000007E00000000FE00000000FE00000000FC00000000FC00000001FC0000000 +1FC00000001F800000001F800000003F800000003F800000F83F000007FE3F00001F877F +00003E03FF00007C03FE0000F801FE0001F801FE0003F000FE0007E000FC000FE000FC00 +0FC001FC001FC001FC001FC001F8003F8001F8003F8003F8007F8003F8007F0003F0007F +0003F0007F0007F000FF0007F000FE0007E000FE0007E000FE000FE000FE000FE000FC00 +0FC1C0FC000FC1C0FC001FC1C0FC001FC3C0FC001F8380FC003F8380FC003F87807C007F +87007C00FF07003E01FF0F003E038F8E001F0F079E0007FE03FC0001F000F000253B77B9 +2A>I<00007F000003FFC0000FC1E0003F00F0007E007800FC007801F8007803F0007807 +E000780FE000780FC000F81FC000F03F8001F03F8007E03F801F807F81FF007FFFF8007F +FF00007F000000FF000000FE000000FE000000FE000000FE000000FE000000FC000000FC +000000FC0000307C0000387C0000787E0000F03E0001E03E0003C01F000F800F003E0007 +81F80003FFE00000FF00001D2677A426>I<00000007C00000001FF00000003E38000000 +7C3C000000F8FC000000F9FC000001F9FC000001F1FC000003F1F8000003F0F0000003F0 +00000007F000000007E000000007E000000007E000000007E00000000FE00000000FC000 +00000FC00000000FC00000000FC00000001FC00000001F8000000FFFFFC0001FFFFFC000 +1FFFFF8000003F800000003F000000003F000000003F000000003F000000007F00000000 +7E000000007E000000007E000000007E00000000FE00000000FC00000000FC00000000FC +00000000FC00000001FC00000001F800000001F800000001F800000001F800000003F800 +000003F000000003F000000003F000000003F000000007F000000007E000000007E00000 +0007E000000007E00000000FE00000000FC00000000FC00000000FC00000001FC0000000 +1F800000001F800000001F800000001F000000003F0000001C3F0000007E3E0000007E3E +000000FE3C000000FE7C000000FE78000000F8F000000078F00000003FC00000000F8000 +0000264C82BA19>I<000007C00000003FF0000000FC38E00001F01FF00003E01FF00007 +C00FF0000F800FF0001F8007F0003F0007E0007F0007E0007E000FE000FE000FE000FC00 +0FC001FC000FC001FC001FC003FC001FC003F8001F8003F8001F8003F8003F8007F8003F +8007F0003F0007F0003F0007F0007F0007F0007F0007E0007E0007E0007E0007E000FE00 +07E000FE0007E000FC0003E001FC0003E003FC0003E007FC0001F00FF80000F01FF80000 +787BF800003FF3F800000FC3F000000003F000000007F000000007F000000007E0000000 +07E00000000FE00000000FC0001C000FC0007E001FC0007E001F8000FE003F0000FE007E +0000FE00FC00007801F800007C07E000001FFF80000003FE00000024367CA426>I<0003 +F0000001FFF0000001FFF0000001FFF000000007F000000007E000000007E000000007E0 +0000000FE00000000FC00000000FC00000000FC00000001FC00000001F800000001F8000 +00001F800000003F800000003F000000003F000000003F000000007F000000007E07F000 +007E1FFC00007E783E0000FFE01F0000FFC01F8000FF800F8000FF000F8001FE000F8001 +FE000FC001FC000FC001F8001F8003F8001F8003F0001F8003F0001F8003F0003F8007F0 +003F0007E0003F0007E0003F0007E0007F000FE0007E000FC0007E000FC000FE000FC000 +FC001FC000FC001F8001FC1C1F8001F81C1F8001F83C3F8003F8383F0003F0383F0003F0 +383F0003F0707F0003E0707E0003E0F07E0003E0E07E0003E1C0FE0001E380FC0000FF00 +3800003C00263B7BB92A>I<0001C00007E00007F0000FF0000FE00007E0000380000000 +00000000000000000000000000000000000000000000000000000000000000F00003FC00 +071E000E1F001C1F001C1F00381F00383F00703F00703F00707F00F07E00E07E00E0FE00 +00FC0000FC0001FC0001F80003F80003F80003F00007F00007E00007E0000FE0E00FC0E0 +0FC1E01FC1C01F81C01F81C01F83801F03801F07001F07001F0E000F1C0007F80001E000 +143879B619>I<000FC007FFC007FFC007FFC0001FC0001F80001F80003F80003F80003F +00003F00007F00007F00007E00007E0000FE0000FE0000FC0000FC0001FC0001FC0001F8 +0001F80003F80003F80003F00003F00007F00007F00007E00007E0000FE0000FE0000FC0 +000FC0001FC0001FC0001F80001F80003F80003F80003F00003F00007F00007F00007E0E +007E0E00FE0E00FE1E00FC1C00FC1C00FC3C00FC3800F83800F878007870007CE0001FE0 +000F8000123B79B915>108 D<01E000FE0007F00007F803FF801FFC000E3C0F07C0783E +001E3E3C03E1E01F001C1F7803F3C01F80383FF001F7800F80383FE001F7000F80783FC0 +01FE000F80703FC001FE000FC0703F8001FC000FC0703F0003F8001F80F07F0003F8001F +80E07E0003F0001F80E07E0003F0001F80007E0007F0003F8000FE0007F0003F0000FC00 +07E0003F0000FC0007E0003F0000FC000FE0007F0001FC000FE0007E0001F8000FC0007E +0001F8000FC000FE0001F8001FC000FC0003F8001FC000FC0003F0001F8001FC1C03F000 +1F8001F81C03F0003F8001F83C07F0003F8003F83807E0003F0003F03807E0003F0003F0 +3807E0007F0003F0700FE0007F0003E0700FC0007E0003E0F00FC0007E0003E0E00FC000 +FE0003E1C01FC000FE0001E3C01F8000FC0000FF000700003800003C003E2679A444>I< +01E000FE000007F803FF80000E3C0F07C0001E3E3C03E0001C1F7803F000383FF001F000 +383FE001F000783FC001F000703FC001F800703F8001F800703F0003F000F07F0003F000 +E07E0003F000E07E0003F000007E0007F00000FE0007E00000FC0007E00000FC0007E000 +00FC000FE00001FC000FC00001F8000FC00001F8001FC00001F8001F800003F8001F8000 +03F0003F838003F0003F038003F0003F078007F0007F070007E0007E070007E0007E0700 +07E0007E0E000FE0007C0E000FC0007C1E000FC0007C1C000FC0007C38001FC0003C7800 +1F80001FE000070000078000292679A42F>I<00007F000003FFC0000FC1F0001F00F800 +7E007C00FC007C01F8007E03F0003E07F0003F07E0003F0FE0003F1FC0003F1FC0003F3F +80003F3F80007F7F80007F7F00007F7F00007F7F0000FFFF0000FFFE0000FEFE0000FEFE +0001FEFE0001FCFC0001FCFC0003F8FC0003F8FC0007F0FC0007E0FC000FE07C000FC07E +001F803E003F003E007E001F00F8000F83F00003FFC00000FE0000202677A42A>I<0007 +8007C000001FE03FF000003CF0787C000038F8E03E0000787FC03E0000707F801F000070 +FF001F0000F0FE001F8000E0FE001F8000E0FC001F8001E1FC001F8001C1FC001F8001C1 +F8001F8001C1F8001F800003F8003F800003F8003F800003F0003F800003F0003F800007 +F0007F800007F0007F800007E0007F000007E0007F00000FE000FF00000FE000FE00000F +C000FE00000FC001FC00001FC001FC00001FC001F800001F8003F800001F8003F000003F +8007E000003FC00FC000003FC00F8000003FE01F0000007FE03E0000007F70FC0000007E +3FF00000007E0F80000000FE0000000000FE0000000000FC0000000000FC0000000001FC +0000000001FC0000000001F80000000001F80000000003F80000000003F80000000003F0 +0000000007F000000000FFFFC0000000FFFFC0000000FFFFC0000000293580A42A>I<03 +C003F0000FF01FFC001E783C0F001C7C700F003C3EE03F80383FC03F80387F803F80787F +803F00707F003F00707F001C00F07E000000E0FE000000E0FC000000E0FC00000000FC00 +000001FC00000001F800000001F800000001F800000003F800000003F000000003F00000 +0003F000000007F000000007E000000007E000000007E00000000FE00000000FC0000000 +0FC00000000FC00000001FC00000001F800000001F800000001F800000003F800000003F +000000000E00000000212679A423>114 D<0000FE000007FF80000F83C0003E00E0007C +00F00078007000F800F001F803F001F003F001F003F001F003E003F001C003F8000003FC +000003FFC00001FFF80001FFFE0000FFFF00007FFF80003FFF80000FFFC00000FFC00000 +3FC000001FC000000FC03E000FC07E000FC0FE000F80FE000F80FE000F80FC001F00E000 +1F00F0003E0070007C003800F8001E03E0000FFFC00001FE00001C267AA422>I<000380 +0007C0000FC0000FC0000FC0000FC0001FC0001F80001F80001F80003F80003F00003F00 +003F00007F00007E007FFFFF7FFFFFFFFFFF00FC0000FC0000FC0001FC0001F80001F800 +01F80003F80003F00003F00003F00007F00007E00007E00007E0000FE0000FC0000FC000 +0FC0001FC0001F801C1F801C1F803C3F80383F00783F00703F00F03F00E03F01C03E03C0 +1F07800F0F0007FC0001F000183579B31C>I<00F800000003FE0001C0078F0003E00E0F +8007E01E0F8007E01C0F8007E0380F800FE0381F800FE0781F800FC0701F800FC0703F80 +1FC0F03F001FC0E03F001F80E07F001F80007E003F80007E003F8000FE003F0000FC003F +0000FC007F0001FC007F0001F8007E0001F8007E0001F800FE0003F800FE0003F000FC0E +03F000FC0E03F001FC1E03F001FC1C03F001F81C03E001F81C03E001F83C03F003F83803 +F007F83801F007F07001F01EF8F000F83C78E0003FF03FC0000FC00F00272679A42D>I< +00F0000E0003FC003F00071E007F800E1F007F801C1F007F803C1F007F80381F003F8038 +3F001F80703F000F80703F000F80707F000F80F07E000F00E07E000700E0FE00070000FC +000F0000FC000E0001FC000E0001F8000E0001F8001E0003F8001C0003F0001C0003F000 +1C0003F0003C0007F000380007E000380007E000700007E000700007E000700007E000E0 +0007E000E00007E001C00007E003C00003E003800003F007000001F00E000000F83C0000 +007FF80000000FC00000212679A426>I<0007E007C0001FF81FF800787C383C00F03E70 +3C01E01EE0FE03C01FE0FE03801FC0FE07001FC0FC0F001F80FC0E001F80700E003F8000 +1E003F00001C003F00001C003F000000007F000000007F000000007E000000007E000000 +00FE00000000FE00000000FC00000000FC00000001FC00000001FC00000001F800700001 +F800700003F800F00003F800E01C03F000E07E03F001E07E07F001C0FE07F00380FE0FF0 +0780FE0EF00F00781CF81E0078387C3C003FF03FF00007C00FC00027267CA427>120 +D<00F000000003FC0001C0071E0003E00E1F0007E01C1F0007E03C1F0007E0381F000FE0 +383F000FC0703F000FC0703F000FC0707F001FC0F07E001F80E07E001F80E0FE001F8000 +FC003F8000FC003F0001FC003F0001F8003F0001F8007F0003F8007E0003F0007E0003F0 +007E0003F000FE0007F000FC0007E000FC0007E000FC0007E001FC0007E001F80007E001 +F80007E001F80007E003F80007E003F00007E007F00003E00FF00003F01FF00001F87FE0 +00007FF7E000001FC7E00000000FE00000000FC00000000FC00000001FC0003F001F8000 +7F003F80007F003F00007F007E00007F007C00007E00FC00007001F800007003E0000038 +07C000003C1F8000000FFE00000003F0000000233679A428>I E +/Fg 70 123 df<1C007F00FF80FF80FF80FF80FF80FF80FF80FF80FF80FF80FF80FF80FF +80FF80FF80FF80FF807F007F007F007F007F007F007F007F007F007F007F007F007F007F +007F003E00000000000000000000000000000000001C007F007F00FF80FF80FF807F007F +001C0009346FB32C>33 D<3C001E007F007F00FF007F80FF007F80FF007F80FF007F80FF +007F80FF007F807F007F007F007F007F007F007F007F007F007F007F007F007E003F007E +003F007E003F007E003F007E003F007E003F003E003E003E003E003E003E003C001E001C +001C00191977B32C>I<000F003C00001F807E00001F807E00001F807E00001F807E0000 +1F807E00001F807E00001F807E00001F807E00003F80FE00003F00FC00003F00FC00003F +00FC00003F00FC007FFFFFFFF0FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF83FFFFF +FFF0007E01F800007E01F800007E01F800007E01F800007E01F80000FE03F80000FC03F0 +0000FC03F00000FC03F00000FC03F00000FC03F00000FC03F0003FFFFFFFF0FFFFFFFFF8 +FFFFFFFFF8FFFFFFFFF8FFFFFFFFF87FFFFFFFF001F807E00001F807E00001F807E00003 +F80FE00003F00FC00003F00FC00003F00FC00003F00FC00003F00FC00003F00FC00003F0 +0FC00003F00FC00001E007800025337DB22C>I<07800007001FE0000F801FE0001F803F +F0001F807FF8003F807FF8003F007CF8007F00FCFC007E00F87C007E00F87C00FE00F87C +00FC00F87C01FC00F87C01F800F87C01F800F87C03F800FCFC03F0007CF803F0007FF807 +F0007FF807E0003FF00FE0001FE00FC0001FE00FC00007801FC00000001F800000003F80 +0000003F000000003F000000007F000000007E00000000FE00000000FC00000000FC0000 +0001FC00000001F800000001F800000003F800000003F000000007F000000007E0000000 +07E00000000FE00000000FC00000001FC00000001F800F00001F803FC0003F807FE0003F +007FE0007F00FFF0007E00F9F0007E00F9F000FE01F9F800FC01F0F800FC01F0F801FC01 +F0F801F801F0F803F801F0F803F001F0F803F001F9F807F000F9F007E000F9F00FE000FF +F00FC0007FE00FC0007FE007C0003FC00380000F0025417DB92C>37 +D<0000380000FC0001FC0003FC0007F8000FF0001FC0003F80007F0000FE0001FC0003F8 +0003F00007F00007E0000FE0000FC0001F80001F80003F80003F00003F00007F00007E00 +007E00007E0000FE0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC00 +00FC0000FC0000FC0000FE00007E00007E00007E00007F00003F00003F00003F80001F80 +001F80000FC0000FE00007E00007F00003F00003F80001FC0000FE00007F00003F80001F +C0000FF00007F80003FC0001FC0000FC000038164272B92C>40 D<700000FC0000FE0000 +FF00007F80003FC0000FE00007F00003F80001FC0000FE00007F00003F00003F80001F80 +001FC0000FC00007E00007E00007F00003F00003F00003F80001F80001F80001F80001FC +0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC +0001FC0001F80001F80001F80003F80003F00003F00007F00007E00007E0000FC0001FC0 +001F80003F80003F00007F0000FE0001FC0003F80007F0000FE0003FC0007F8000FF0000 +FE0000FC0000700000164279B92C>I<000380000007C0000007C0000007C0000007C000 +0007C0000007C0002007C008F807C03EFE07C0FEFF07C1FEFFC7C7FEFFE7CFFE3FFFFFF8 +0FFFFFE003FFFF8001FFFF00007FFC00007FFC0001FFFF0003FFFF800FFFFFE03FFFFFF8 +FFE7CFFEFFC7C7FEFF07C1FEFE07C0FEF807C03E2007C0080007C0000007C0000007C000 +0007C0000007C0000007C000000380001F247AAA2C>I<0F801FE03FF07FF87FF87FFC7F +FC7FFC3FFC1FFC0FFC00FC00F800F801F803F007F01FE07FC0FF80FF00FC0070000E1771 +8A2C>44 D<7FFFFFFF00FFFFFFFF80FFFFFFFF80FFFFFFFF80FFFFFFFF807FFFFFFF0021 +067B9B2C>I<1F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F000B0B708A2C>I<0000 +0007000000000F800000001F800000001F800000003F800000003F000000007F00000000 +7E00000000FE00000000FC00000001FC00000001F800000003F800000003F000000003F0 +00000007F000000007E00000000FE00000000FC00000001FC00000001F800000003F8000 +00003F000000007F000000007E00000000FE00000000FC00000000FC00000001FC000000 +01F800000003F800000003F000000007F000000007E00000000FE00000000FC00000001F +C00000001F800000001F800000003F800000003F000000007F000000007E00000000FE00 +000000FC00000001FC00000001F800000003F800000003F000000007F000000007E00000 +0007E00000000FE00000000FC00000001FC00000001F800000003F800000003F00000000 +7F000000007E00000000FE00000000FC00000000FC00000000F800000000780000000021 +417BB92C>I<0003F80000000FFE0000003FFF8000007FFFC00000FFFFE00001FE0FF000 +03F803F80007F001FC0007E000FC000FC0007E000FC0007E001F80003F001F80003F003F +00001F803F00001F803E00000F807E00000FC07E00000FC07E00000FC07C000007C0FC00 +0007E0FC000007E0FC000007E0FC000007E0FC000007E0FC000007E0FC000007E0FC0000 +07E0FC000007E0FC000007E0FC000007E0FC000007E0FE00000FE07E00000FC07E00000F +C07E00000FC07E00000FC03F00001F803F00001F803F00001F801F80003F001F80003F00 +0FC0007E000FE000FE0007E000FC0007F001FC0003F803F80001FE0FF00000FFFFE00000 +7FFFC000003FFF8000000FFE00000003F8000023357CB32C>I<00070000000F8000000F +8000001F8000001F8000003F8000007F800000FF800001FF800007FF80007FFF8000FFFF +8000FFDF8000FF9F80007C1F8000001F8000001F8000001F8000001F8000001F8000001F +8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F +8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F +8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80007FFF +FFE0FFFFFFF0FFFFFFF0FFFFFFF07FFFFFE01C3477B32C>I<000FF80000007FFF800001 +FFFFE00007FFFFF0000FFFFFFC001FF80FFE003FE001FF003F80007F007F00003F807E00 +001F80FE00001FC0FE00000FC0FF00000FE0FF000007E0FF000007E0FF000007E07E0000 +07E03C000007E000000007E000000007E00000000FE00000000FC00000001FC00000001F +800000003F800000003F000000007F00000000FE00000001FC00000003FC00000007F800 +00000FF00000001FE00000003FC0000000FF80000001FE00000003FC00000007F8000000 +0FF00000003FE00000007F80000000FF00000001FE00000003FC0003C007F80007E01FE0 +0007E03FC00007E07FFFFFFFE0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE07FFFFFFFC023347C +B32C>I<000007F00000000FF80000001FF80000003FF80000003FF80000007EF8000000 +7EF8000000FCF8000001F8F8000001F8F8000003F0F8000007E0F8000007E0F800000FC0 +F800001F80F800001F80F800003F00F800007E00F800007E00F80000FC00F80001F800F8 +0001F800F80003F000F80003E000F80007E000F8000FC000F8000FC000F8001F8000F800 +3F0000F8003F0000F8007E0000F800FC0000F800FFFFFFFFFCFFFFFFFFFEFFFFFFFFFEFF +FFFFFFFE7FFFFFFFFC000000F800000000F800000000F800000000F800000000F8000000 +00F800000000F800000000F800000000F800000000F80000007FFFF00000FFFFF80000FF +FFF80000FFFFF800007FFFF027347EB32C>52 D<0007FC0000003FFF800000FFFFE00003 +FFFFF80007FFFFFC000FFC07FE001FF001FF001FC0007F003F80003F803F00001F807F00 +001FC07E00000FC07E00000FC07E00000FC07E00000FC07E00000FC03F00001F803F0000 +1F801F80003F001FC0007F000FF001FE0003FC07F80001FFFFF000007FFFC0000007FC00 +00007FFFC00001FFFFF00003FC07F8000FF001FE001FC0007F001F80003F003F00001F80 +7E00000FC07E00000FC0FC000007E0FC000007E0FC000007E0FC000007E0FC000007E0FC +000007E0FC000007E07E00000FC07E00000FC07F00001FC03F80003F801FC0007F001FF0 +01FF000FFC07FE0007FFFFFC0003FFFFF80000FFFFE000003FFF80000007FC000023357C +B32C>56 D<1F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F00000000000000000000 +000000000000000000000000000000000000001F003F807FC0FFE0FFE0FFE0FFE0FFE07F +C03F801F000B2470A32C>58 D<0F801FC03FE07FF07FF07FF07FF07FF03FE01FC00F8000 +0000000000000000000000000000000000000000000000000000000F801FC03FE07FE07F +F07FF07FF07FF03FF01FF00FF001F003F003E007E00FC00FC03F807F00FF00FE00F80070 +000C3071A32C>I<7FFFFFFFF0FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF83FFFFF +FFF000000000000000000000000000000000000000000000000000000000000000000000 +0000000000003FFFFFFFF0FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF87FFFFFFFF0 +25147DA22C>61 D<003FFE000003FFFFC0000FFFFFF0001FFFFFFC003FFFFFFE007FE007 +FF007F0000FF00FE00003F80FF00001F80FF00001F80FF00001F80FF00003F807E00007F +003C0000FF00000003FE0000000FFC0000001FF80000003FE00000007FC0000000FF0000 +0001FE00000003FC00000003F800000007F800000007F00000000FF00000000FE0000000 +0FE00000000FE00000000FE00000000FE00000000FE00000000FE000000007C000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000003800000000FE00000000FE00000001FF00000001FF00000001FF00000000FE000 +00000FE00000000380000021337BB22C>63 D<0000FE00000001FF00000001FF00000001 +FF00000001FF00000003FF80000003FF80000003EF80000003EF80000007EF80000007EF +C0000007EFC0000007C7C0000007C7C000000FC7E000000FC7E000000FC7E000000FC3E0 +00001F83F000001F83F000001F83F000001F83F000001F83F000003F01F800003F01F800 +003F01F800003F01F800007E00FC00007E00FC00007E00FC00007E00FC00007E00FC0000 +FC007E0000FFFFFE0000FFFFFE0000FFFFFE0001FFFFFF0001FFFFFF0001F8003F0001F8 +003F0001F8003F0003F0001F8003F0001F8003F0001F8003F0001F8007F0001FC007E000 +0FC07FFE00FFFC7FFF01FFFCFFFF01FFFE7FFF01FFFC7FFE00FFFC27347EB32C>65 +D<7FFFFFE0007FFFFFF800FFFFFFFE007FFFFFFF007FFFFFFFC003F0003FC003F0000FE0 +03F00007F003F00003F003F00003F003F00001F803F00001F803F00001F803F00001F803 +F00001F803F00001F803F00003F003F00003F003F00007F003F0000FE003F0001FC003F0 +00FF8003FFFFFF0003FFFFFE0003FFFFFC0003FFFFFF0003FFFFFFC003F0001FE003F000 +07F003F00003F803F00001F803F00000FC03F00000FC03F00000FE03F000007E03F00000 +7E03F000007E03F000007E03F000007E03F000007E03F00000FE03F00000FC03F00001FC +03F00003F803F0000FF803F0003FF07FFFFFFFE07FFFFFFFC0FFFFFFFF807FFFFFFE007F +FFFFF00027337FB22C>I<0000FF00700007FFE0F8000FFFF9F8003FFFFDF8007FFFFFF8 +00FF81FFF801FE007FF803FC001FF807F0000FF807F00007F80FE00007F80FC00003F81F +800003F81F800001F83F000001F83F000001F87F000001F87E000000F07E000000007E00 +000000FE00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC0000 +0000FC00000000FC00000000FC00000000FC00000000FC00000000FE000000007E000000 +007E000000007E000000007F000000F03F000001F83F000001F81F800001F81F800001F8 +0FC00003F80FE00003F007F00007F007F00007E003FC001FE001FE003FC000FF81FF8000 +7FFFFF00003FFFFE00000FFFFC000007FFF0000000FF800025357DB32C>I<7FFFFF0000 +FFFFFFC000FFFFFFF000FFFFFFF8007FFFFFFC0007E003FE0007E000FF0007E0007F8007 +E0003F8007E0001FC007E0000FE007E0000FE007E00007E007E00007F007E00003F007E0 +0003F807E00001F807E00001F807E00001F807E00001F807E00000FC07E00000FC07E000 +00FC07E00000FC07E00000FC07E00000FC07E00000FC07E00000FC07E00000FC07E00000 +FC07E00000FC07E00000FC07E00001F807E00001F807E00001F807E00003F807E00003F0 +07E00003F007E00007F007E00007E007E0000FE007E0001FC007E0003FC007E0007F8007 +E000FF0007E003FE007FFFFFFC00FFFFFFF800FFFFFFF000FFFFFFC0007FFFFF00002633 +7EB22C>I<7FFFFFFFF0FFFFFFFFF8FFFFFFFFF8FFFFFFFFF87FFFFFFFF803F00001F803 +F00001F803F00001F803F00001F803F00001F803F00001F803F00001F803F00000F003F0 +00000003F000000003F000000003F000000003F001E00003F003F00003F003F00003F003 +F00003F003F00003FFFFF00003FFFFF00003FFFFF00003FFFFF00003FFFFF00003F003F0 +0003F003F00003F003F00003F003F00003F001E00003F000000003F000000003F0000000 +03F000000003F000000003F000003C03F000007E03F000007E03F000007E03F000007E03 +F000007E03F000007E03F000007E03F000007E7FFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFF +FFFFFE7FFFFFFFFC27337EB22C>I<7FFFFFFFF8FFFFFFFFFCFFFFFFFFFCFFFFFFFFFC7F +FFFFFFFC03F00000FC03F00000FC03F00000FC03F00000FC03F00000FC03F00000FC03F0 +0000FC03F000007803F000000003F000000003F000000003F000000003F000000003F000 +F00003F001F80003F001F80003F001F80003F001F80003FFFFF80003FFFFF80003FFFFF8 +0003FFFFF80003FFFFF80003F001F80003F001F80003F001F80003F001F80003F000F000 +03F000000003F000000003F000000003F000000003F000000003F000000003F000000003 +F000000003F000000003F000000003F000000003F000000003F00000007FFFE00000FFFF +E00000FFFFF00000FFFFE000007FFFE0000026337EB22C>I<0001FC0380000FFF87C000 +1FFFEFC0007FFFFFC000FFFFFFC001FF07FFC003FC01FFC003F800FFC007F0007FC00FE0 +003FC00FC0001FC01FC0001FC01F80001FC03F80000FC03F00000FC03F00000FC07E0000 +0FC07E000007807E000000007E00000000FE00000000FC00000000FC00000000FC000000 +00FC00000000FC00000000FC00000000FC00000000FC00000000FC0003FFF8FC0007FFFC +FC0007FFFCFE0007FFFC7E0003FFF87E00000FC07E00000FC07E00000FC03F00001FC03F +00001FC03F80001FC01F80001FC01FC0003FC00FC0003FC00FE0007FC007F0007FC003F8 +00FFC003FC01FFC001FF07FFC000FFFFFFC0007FFFEFC0001FFFCFC0000FFF07800001FC +000026357DB32C>I<7FFE00FFFCFFFF01FFFEFFFF01FFFEFFFF01FFFE7FFE00FFFC07E0 +000FC007E0000FC007E0000FC007E0000FC007E0000FC007E0000FC007E0000FC007E000 +0FC007E0000FC007E0000FC007E0000FC007E0000FC007E0000FC007E0000FC007E0000F +C007E0000FC007E0000FC007FFFFFFC007FFFFFFC007FFFFFFC007FFFFFFC007FFFFFFC0 +07E0000FC007E0000FC007E0000FC007E0000FC007E0000FC007E0000FC007E0000FC007 +E0000FC007E0000FC007E0000FC007E0000FC007E0000FC007E0000FC007E0000FC007E0 +000FC007E0000FC007E0000FC007E0000FC007E0000FC07FFE00FFFCFFFF01FFFEFFFF01 +FFFEFFFF01FFFE7FFE00FFFC27337EB22C>I<7FFFFFF8FFFFFFFCFFFFFFFCFFFFFFFC7F +FFFFF8000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC00000 +0FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC00000 +0FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC00000 +0FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC00000 +0FC000000FC000000FC000000FC000000FC000000FC0007FFFFFF8FFFFFFFCFFFFFFFCFF +FFFFFC7FFFFFF81E3379B22C>I<0007FFFF80000FFFFFC0000FFFFFC0000FFFFFC00007 +FFFF80000003F000000003F000000003F000000003F000000003F000000003F000000003 +F000000003F000000003F000000003F000000003F000000003F000000003F000000003F0 +00000003F000000003F000000003F000000003F000000003F000000003F000000003F000 +000003F000000003F000000003F000000003F000000003F000000003F000000003F00000 +0003F000000003F000000003F000000003F000000003F000180003F0007E0003F0007E00 +03F000FF0003F000FF0003F000FF0007E000FE000FE0007F001FE0007FC07FC0003FFFFF +80001FFFFF00000FFFFE000003FFF80000007FC0000022347BB22C>I<7FFC007FF8FFFE +00FFFCFFFE00FFFCFFFE00FFFC7FFC007FF807C0001F8007C0003F8007C0007F0007C000 +7E0007C000FC0007C001F80007C003F80007C007F00007C007E00007C00FC00007C01F80 +0007C03F800007C07F000007C07E000007C0FC000007C1F8000007C3F8000007C7FC0000 +07C7FC000007CFFE000007DFBE000007FFBF000007FF1F000007FE1F800007FC0FC00007 +F80FC00007F807E00007F003E00007E003F00007C001F00007C001F80007C000FC0007C0 +00FC0007C0007E0007C0003E0007C0003F0007C0001F0007C0001F8007C0000FC007C000 +0FC007C00007E07FFC001FFCFFFE003FFEFFFE003FFEFFFE003FFE7FFC001FFC27337EB2 +2C>I<7FFFE00000FFFFF00000FFFFF00000FFFFF000007FFFE0000003F000000003F000 +000003F000000003F000000003F000000003F000000003F000000003F000000003F00000 +0003F000000003F000000003F000000003F000000003F000000003F000000003F0000000 +03F000000003F000000003F000000003F000000003F000000003F000000003F000000003 +F000000003F000000003F000000003F000000003F000000003F000000003F000000003F0 +00000003F000000003F00000F003F00001F803F00001F803F00001F803F00001F803F000 +01F803F00001F803F00001F803F00001F87FFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFFFFFFF +F87FFFFFFFF025337DB22C>I<7FE0000FFCFFF0001FFEFFF0001FFEFFF8003FFE7FF800 +3FFC0FF8003FE00FBC007BE00FBC007BE00FBC007BE00FBC007BE00F9E00F3E00F9E00F3 +E00F9E00F3E00F9F01F3E00F9F01F3E00F8F01E3E00F8F01E3E00F8F83E3E00F8F83E3E0 +0F8783C3E00F87C7C3E00F87C7C3E00F83C783E00F83C783E00F83EF83E00F83EF83E00F +81EF03E00F81EF03E00F81FF03E00F80FE03E00F80FE03E00F80FE03E00F807C03E00F80 +3803E00F800003E00F800003E00F800003E00F800003E00F800003E00F800003E00F8000 +03E00F800003E00F800003E00F800003E00F800003E00F800003E07FF0001FFCFFF8003F +FEFFF8003FFEFFF8003FFE7FF0001FFC27337EB22C>I<7FF0007FFCFFF800FFFEFFF800 +FFFEFFFC00FFFE7FFC007FFC07FE0007C007DE0007C007DE0007C007DF0007C007CF0007 +C007CF0007C007CF8007C007C78007C007C7C007C007C7C007C007C3C007C007C3E007C0 +07C3E007C007C1E007C007C1F007C007C1F007C007C0F007C007C0F807C007C0F807C007 +C07C07C007C07C07C007C07C07C007C03E07C007C03E07C007C01E07C007C01F07C007C0 +1F07C007C00F07C007C00F87C007C00F87C007C00787C007C007C7C007C007C7C007C003 +C7C007C003E7C007C001E7C007C001E7C007C001F7C007C000F7C007C000F7C007C000FF +C07FFC007FC0FFFE007FC0FFFE003FC0FFFE003FC07FFC001F8027337EB22C>I<007FFF +000003FFFFE0000FFFFFF8001FFFFFFC003FFFFFFE003FE003FE003F8000FE007F00007F +007F00007F007E00003F007E00003F007E00003F00FE00003F80FC00001F80FC00001F80 +FC00001F80FC00001F80FC00001F80FC00001F80FC00001F80FC00001F80FC00001F80FC +00001F80FC00001F80FC00001F80FC00001F80FC00001F80FC00001F80FC00001F80FC00 +001F80FC00001F80FC00001F80FC00001F80FC00001F80FC00001F80FC00001F80FC0000 +1F80FC00001F80FC00001F80FE00003F80FE00003F807E00003F007E00003F007E00003F +007F00007F007F00007F003F8000FE003FF007FE003FFFFFFE001FFFFFFC000FFFFFF800 +03FFFFE000007FFF000021357BB32C>I<7FFFFFC000FFFFFFF800FFFFFFFC00FFFFFFFF +007FFFFFFF8003F000FFC003F0003FC003F0000FE003F00007F003F00007F003F00003F0 +03F00003F803F00001F803F00001F803F00001F803F00001F803F00001F803F00001F803 +F00003F803F00003F003F00007F003F00007F003F0000FE003F0003FC003F000FFC003FF +FFFF8003FFFFFF0003FFFFFC0003FFFFF80003FFFFC00003F000000003F000000003F000 +000003F000000003F000000003F000000003F000000003F000000003F000000003F00000 +0003F000000003F000000003F000000003F000000003F000000003F00000007FFF800000 +FFFFC00000FFFFC00000FFFFC000007FFF80000025337EB22C>I<007FFF000003FFFFE0 +000FFFFFF8001FFFFFFC003FFFFFFE003FF007FE003F8000FE007F00007F007F00007F00 +7E00003F007E00003F007E00003F00FE00003F80FC00001F80FC00001F80FC00001F80FC +00001F80FC00001F80FC00001F80FC00001F80FC00001F80FC00001F80FC00001F80FC00 +001F80FC00001F80FC00001F80FC00001F80FC00001F80FC00001F80FC00001F80FC0000 +1F80FC00001F80FC00001F80FC00001F80FC00001F80FC00001F80FC00001F80FC00001F +80FC01F01F80FC03F81F80FE03F83F807E01FC3F007E01FC3F007E00FE3F007F00FE7F00 +7F007F7F003F807FFE003FF03FFE003FFFFFFE001FFFFFFC000FFFFFF80003FFFFE00000 +7FFFE000000007F000000007F000000003F800000003F800000001FC00000001FC000000 +00FE00000000FE000000007F000000007F000000003E0021407BB32C>I<7FFFFC000000 +FFFFFF800000FFFFFFE00000FFFFFFF800007FFFFFFC000007E007FE000007E001FE0000 +07E0007F000007E0003F800007E0001F800007E0001F800007E0000FC00007E0000FC000 +07E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0001F800007E0001F8000 +07E0003F800007E0007F000007E001FE000007E007FE000007FFFFFC000007FFFFF80000 +07FFFFE0000007FFFFF0000007FFFFF8000007E007FC000007E001FE000007E000FE0000 +07E0007F000007E0003F000007E0003F000007E0003F000007E0003F000007E0003F0000 +07E0003F000007E0003F000007E0003F000007E0003F0F0007E0003F1F8007E0003F1F80 +07E0003F1F8007E0003F1F8007E0003F1F807FFE001FBF80FFFF001FFF00FFFF000FFF00 +FFFF000FFE007FFE0007FC0000000001F00029347EB22C>I<001FF8070000FFFF0F8001 +FFFFCF8007FFFFFF800FFFFFFF801FF01FFF803FC003FF803F8001FF807F0000FF807E00 +007F80FE00003F80FC00003F80FC00001F80FC00001F80FC00001F80FC00001F80FE0000 +0F007E000000007F000000007F800000003FE00000001FFC0000001FFFC000000FFFFC00 +0003FFFFC00001FFFFF000007FFFF8000007FFFC0000007FFE00000007FF00000000FF80 +0000003F800000001FC00000001FC00000000FE00000000FE078000007E0FC000007E0FC +000007E0FC000007E0FC000007E0FC000007E0FE00000FC0FE00000FC0FF00001F80FF80 +003F80FFE0007F00FFFE01FF00FFFFFFFE00FFFFFFFC00F9FFFFF000F83FFFC0007007FF +000023357CB32C>I<7FFFFFFFFCFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFC00 +7E007EFC007E007EFC007E007EFC007E007EFC007E007EFC007E007EFC007E007E78007E +003C00007E000000007E000000007E000000007E000000007E000000007E000000007E00 +0000007E000000007E000000007E000000007E000000007E000000007E000000007E0000 +00007E000000007E000000007E000000007E000000007E000000007E000000007E000000 +007E000000007E000000007E000000007E000000007E000000007E000000007E00000000 +7E000000007E000000007E000000007E000000007E0000003FFFFC00003FFFFC00007FFF +FE00003FFFFC00003FFFFC0027337EB22C>I<7FFF803FFFC0FFFFC07FFFE0FFFFC07FFF +E0FFFFC07FFFE07FFF803FFFC003F00001F80003F00001F80003F00001F80003F00001F8 +0003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F8 +0003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F8 +0003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F8 +0003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F8 +0003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F80003F8 +0001F80003F00001F80003F00001FC0007F00000FC0007E00000FE000FE000007F001FC0 +00003F803F8000003FE0FF8000001FFFFF0000000FFFFE00000003FFF800000001FFF000 +0000003F8000002B3480B22C>I<7FFC007FFCFFFE00FFFEFFFE00FFFEFFFE00FFFE7FFC +007FFC0FC00007E00FE0000FE007E0000FC007E0000FC007E0000FC007F0001FC003F000 +1F8003F0001F8003F0001F8003F8003F8001F8003F0001F8003F0001F8003F0001FC007F +0000FC007E0000FC007E0000FC007E0000FC007E00007E00FC00007E00FC00007E00FC00 +007E00FC00003F01F800003F01F800003F01F800003F01F800001F83F000001F83F00000 +1F83F000001F83F000000F83E000000FC7E000000FC7E000000FC7E0000007C7C0000007 +C7C0000007EFC0000007EFC0000003EF80000003EF80000003FF80000003FF80000001FF +00000001FF00000001FF00000001FF00000000FE000027347EB22C>I<3FFF03FFE07FFF +07FFF07FFF87FFF07FFF07FFF03FFF03FFE001F800FE0001FC00FE0000FC01FC0000FE01 +FC00007E01F800007F03F800003F03F000003F87F000001F87E000001FCFE000000FCFC0 +00000FFFC0000007FF80000007FF80000003FF00000003FF00000001FE00000001FE0000 +0000FC00000000FC00000001FE00000001FE00000003FF00000003FF00000007FF800000 +07FFC000000FCFC000000FCFE000001FC7E000001F87F000003F83F000003F03F800007F +01F800007E01FC0000FE00FC0000FC00FE0001FC007E0001F8007F0003F8003F0003F000 +3F8003F0001F807FFE00FFFC7FFF01FFFCFFFF01FFFE7FFF01FFFC7FFE00FFFC27337EB2 +2C>88 D<7FFC007FFCFFFE00FFFEFFFE00FFFEFFFE00FFFE7FFC007FFC07F0000FC007F0 +001FC003F0001F8003F8003F8001F8003F8001FC007F0000FC007F0000FE007E00007E00 +FE00007F00FC00003F01FC00003F81F800001F81F800001F83F000000FC3F000000FC7F0 +000007E7E0000007E7E0000003E7C0000003EFC0000001FF80000001FF80000001FF0000 +0000FF00000000FE000000007E000000007E000000007E000000007E000000007E000000 +007E000000007E000000007E000000007E000000007E000000007E000000007E00000000 +7E000000007E000000007E000000007E00000007FFE000000FFFF000000FFFF000000FFF +F0000007FFE00027337EB22C>I<3FFFFFFFC07FFFFFFFE07FFFFFFFE07FFFFFFFE07FFF +FFFFE07E00001FC07E00003F807E00003F807E00007F007E00007E007E0000FE007E0001 +FC003C0001F800000003F800000007F000000007F00000000FE00000001FC00000001FC0 +0000003F800000007F000000007F00000000FE00000001FC00000001FC00000003F80000 +0007F000000007F00000000FE00000001FC00000001FC00000003F800000007F00000000 +7F00000000FE00000001FC00000001FC00000003F80003C003F00007E007F00007E00FE0 +0007E00FC00007E01FC00007E03F800007E03F800007E07F000007E0FFFFFFFFE0FFFFFF +FFE0FFFFFFFFE0FFFFFFFFE07FFFFFFFC023337CB22C>I<7FFFFFFF00FFFFFFFF80FFFF +FFFF80FFFFFFFF80FFFFFFFF807FFFFFFF0021067B7D2C>95 D<01FFF0000007FFFE0000 +1FFFFF80001FFFFFE0003FFFFFF0003FC01FF8003FC007F8003FC001FC001F8000FC0006 +0000FE000000007E000000007E000000007E000000FFFE00001FFFFE0000FFFFFE0003FF +FFFE000FFFFFFE001FFF807E003FF8007E007FC0007E007F00007E00FE00007E00FC0000 +7E00FC00007E00FC00007E00FC00007E00FE00007E007F0000FE007F8003FE003FE01FFE +001FFFFFFFFC0FFFFFFFFE07FFFFBFFE01FFFE1FFE003FF007FC27247CA32C>97 +D<7FF0000000FFF8000000FFF8000000FFF80000007FF800000001F800000001F8000000 +01F800000001F800000001F800000001F800000001F800000001F800000001F800000001 +F800000001F81FE00001F8FFF80001FBFFFE0001FFFFFF0001FFFFFF8001FFF07FC001FF +801FE001FF0007F001FE0003F801FC0003F801FC0001FC01F80000FC01F80000FC01F800 +00FE01F800007E01F800007E01F800007E01F800007E01F800007E01F800007E01F80000 +7E01F800007E01F80000FE01FC0000FC01FC0000FC01FC0001F801FE0003F801FF0007F0 +01FF000FF001FF801FE001FFE07FC001FFFFFF8001FFFFFF0001FBFFFE0001F8FFF80000 +F03FC00027337FB22C>I<0003FFE000001FFFF800007FFFFE0001FFFFFE0003FFFFFF00 +07FE00FF000FF000FF001FE000FF001FC0007E003F800018003F000000007F000000007E +000000007E00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00 +000000FC00000000FC000000007E000000007E000000007F000000003F00000F003F8000 +1F801FC0001F801FE0003F800FF0007F0007FE03FF0003FFFFFE0001FFFFFC00007FFFF8 +00001FFFE0000003FF000021247AA32C>I<00000FFE0000001FFF0000001FFF0000001F +FF0000000FFF000000003F000000003F000000003F000000003F000000003F000000003F +000000003F000000003F000000003F000000003F000007F83F00003FFE3F0000FFFFBF00 +01FFFFFF0003FFFFFF0007FC0FFF000FF003FF001FE001FF001FC000FF003F80007F003F +00007F007E00003F007E00003F00FE00003F00FC00003F00FC00003F00FC00003F00FC00 +003F00FC00003F00FC00003F00FC00003F00FC00003F00FE00003F007E00007F007E0000 +7F007F0000FF003F8000FF003F8001FF001FC003FF000FF007FF0007FC1FFF0003FFFFFF +FC01FFFFBFFE00FFFF3FFE003FFC3FFE000FF01FFC27337DB22C>I<0003FE0000001FFF +C000007FFFF00001FFFFF80003FFFFFC0007FE03FE000FF800FF001FE0003F801FC0003F +803F80001FC03F00000FC07F00000FC07E00000FE07E000007E0FC000007E0FFFFFFFFE0 +FFFFFFFFE0FFFFFFFFE0FFFFFFFFE0FFFFFFFFC0FC00000000FE000000007E000000007E +000000007F000000003F000003C03F800007E01FC00007E00FF0000FE007F8003FC007FF +00FFC001FFFFFF8000FFFFFF00003FFFFC00000FFFF0000001FF800023247CA32C>I<00 +000FF80000003FFE000000FFFF000001FFFF800003FFFF800007FC7F800007F07F80000F +E03F00000FC03F00000FC00000000FC00000000FC00000000FC00000000FC00000000FC0 +00007FFFFFFE00FFFFFFFF00FFFFFFFF00FFFFFFFF007FFFFFFE00000FC00000000FC000 +00000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000 +000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC0000000 +0FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000F +C00000000FC00000000FC000003FFFFFF0007FFFFFF8007FFFFFF8007FFFFFF8003FFFFF +F00021337DB22C>I<00000003F80007F80FFC001FFE3FFE007FFFFFFF01FFFFFFFF03FF +FFFE7F03FC0FF87F07F003F83E0FE001FC1C0FC000FC001FC000FE001F80007E001F8000 +7E001F80007E001F80007E001F80007E001F80007E001FC000FE000FC000FC000FE001FC +0007F003F80003FC0FF00007FFFFF00007FFFFE0000FFFFF80000F9FFE00000F87F80000 +0F800000000F800000000F800000000FC000000007E000000007FFFFF00003FFFFFE0007 +FFFFFF800FFFFFFFE01FFFFFFFF03FC0001FF87F000003FC7E000000FC7C0000007CFC00 +00007EF80000003EF80000003EF80000003EF80000003EFC0000007E7E000000FC7F8000 +03FC3FE0000FF81FFC007FF00FFFFFFFE003FFFFFF8001FFFFFF00003FFFF8000007FFC0 +0028387EA42C>I<7FF000000000FFF800000000FFF800000000FFF8000000007FF80000 +000001F80000000001F80000000001F80000000001F80000000001F80000000001F80000 +000001F80000000001F80000000001F80000000001F80000000001F81FE0000001F87FFC +000001F9FFFE000001FBFFFF000001FFFFFF000001FFF03F800001FFC01F800001FF801F +C00001FF000FC00001FE000FC00001FC000FC00001FC000FC00001F8000FC00001F8000F +C00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000F +C00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000F +C00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC0007FFFE0FF +FF00FFFFF1FFFF80FFFFF1FFFF80FFFFF1FFFF807FFFE0FFFF0029337FB22C>I<000700 +00001FC000001FC000003FE000003FE000003FE000001FC000001FC00000070000000000 +000000000000000000000000000000000000000000000000007FFFC0007FFFE000FFFFE0 +007FFFE0007FFFE0000007E0000007E0000007E0000007E0000007E0000007E0000007E0 +000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0 +000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0 +000007E0007FFFFFFCFFFFFFFEFFFFFFFEFFFFFFFE7FFFFFFC1F3479B32C>I<00000E00 +00003F8000003F8000007FC000007FC000007FC000003F8000003F8000000E0000000000 +00000000000000000000000000000000000000000000000001FFFF8003FFFFC003FFFFC0 +03FFFFC001FFFFC000000FC000000FC000000FC000000FC000000FC000000FC000000FC0 +00000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC0 +00000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC0 +00000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC0 +00000FC000000FC000000FC000000FC000001FC03C001F807E003F80FF003F00FF007F00 +FF01FE00FFFFFC007FFFF8007FFFF0001FFFE00007FF00001A467CB32C>I<7FE0000000 +FFF0000000FFF0000000FFF00000007FF000000001F000000001F000000001F000000001 +F000000001F000000001F000000001F000000001F000000001F000000001F000000001F0 +1FFFF001F03FFFF801F03FFFF801F03FFFF801F01FFFF001F000FE0001F001FC0001F003 +F80001F007F00001F00FE00001F01FC00001F03F800001F07F000001F0FE000001F1FC00 +0001F3FC000001F7FE000001FFFF000001FFFF000001FF9F800001FF0FC00001FE0FE000 +01FC07E00001F803F00001F001F80001F001FC0001F000FC0001F0007E0001F0003F0001 +F0003F8001F0001F807FFFC0FFFCFFFFE1FFFEFFFFE1FFFEFFFFE1FFFE7FFFC0FFFC2733 +7EB22C>I<7FFFE00000FFFFF00000FFFFF00000FFFFF000007FFFF000000003F0000000 +03F000000003F000000003F000000003F000000003F000000003F000000003F000000003 +F000000003F000000003F000000003F000000003F000000003F000000003F000000003F0 +00000003F000000003F000000003F000000003F000000003F000000003F000000003F000 +000003F000000003F000000003F000000003F000000003F000000003F000000003F00000 +0003F000000003F000000003F000000003F000000003F000000003F000000003F0000000 +03F000000003F000000003F000000003F000007FFFFFFF80FFFFFFFFC0FFFFFFFFC0FFFF +FFFFC07FFFFFFF8022337BB22C>I<7F83F007E0007FCFFC1FF800FFDFFE3FFC007FFFFE +FFFC007FFFFFFFFE0007FE1FFC3E0007FC1FF83F0007F80FF01F0007F00FE01F0007E00F +C01F0007E00FC01F0007E00FC01F0007C00F801F0007C00F801F0007C00F801F0007C00F +801F0007C00F801F0007C00F801F0007C00F801F0007C00F801F0007C00F801F0007C00F +801F0007C00F801F0007C00F801F0007C00F801F0007C00F801F0007C00F801F0007C00F +801F0007C00F801F0007C00F801F0007C00F801F007FFC3FF87FF07FFC7FF8FFF0FFFE7F +FCFFF87FFC7FF8FFF07FFC3FF87FF02D2481A32C>I<7FF01FE00000FFF87FFC0000FFF9 +FFFE0000FFFBFFFF00007FFFFFFF000001FFF03F800001FFC01F800001FF801FC00001FF +000FC00001FE000FC00001FC000FC00001FC000FC00001F8000FC00001F8000FC00001F8 +000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8 +000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8 +000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC0007FFFE0FFFF00FFFF +F1FFFF80FFFFF1FFFF80FFFFF1FFFF807FFFE0FFFF0029247FA32C>I<0007FC0000001F +FF0000007FFFC00001FFFFF00003FFFFF80007FC07FC000FF001FE001FE000FF001F8000 +3F003F80003F803F00001F807E00000FC07E00000FC07E00000FC0FC000007E0FC000007 +E0FC000007E0FC000007E0FC000007E0FC000007E0FC000007E0FE00000FE07E00000FC0 +7E00000FC07F00001FC03F00001F803F80003F801FC0007F001FE000FF000FF001FE0007 +FC07FC0003FFFFF80001FFFFF000007FFFC000001FFF00000007FC000023247CA32C>I< +7FF01FE000FFF8FFF800FFFBFFFE00FFFFFFFF007FFFFFFF8001FFF07FC001FF801FE001 +FF0007F001FE0003F801FC0003F801FC0001FC01F80000FC01F80000FC01F80000FE01F8 +00007E01F800007E01F800007E01F800007E01F800007E01F800007E01F800007E01F800 +007E01F80000FE01FC0000FC01FC0000FC01FC0001F801FE0003F801FF0007F001FF000F +F001FF801FE001FFE07FC001FFFFFF8001FFFFFF0001FBFFFE0001F8FFF80001F83FC000 +01F800000001F800000001F800000001F800000001F800000001F800000001F800000001 +F800000001F800000001F800000001F800000001F800000001F80000007FFFE00000FFFF +F00000FFFFF00000FFFFF000007FFFE0000027367FA32C>I<7FFE003FC0FFFF01FFF0FF +FF07FFF8FFFF1FFFFC7FFF3FFFFC003F7FE1FC003FFF01FC003FFC00F8003FF80070003F +F00000003FE00000003FE00000003FC00000003F800000003F800000003F800000003F00 +0000003F000000003F000000003F000000003F000000003F000000003F000000003F0000 +00003F000000003F000000003F000000003F000000003F000000003F000000003F000000 +7FFFFFE000FFFFFFF000FFFFFFF000FFFFFFF0007FFFFFE00026247EA32C>114 +D<007FF87003FFFFF80FFFFFF81FFFFFF83FFFFFF87FC00FF87E0003F8FC0001F8F80001 +F8F80001F8F80001F8FC0000F07F0000007FF000003FFFC0001FFFFE000FFFFF8003FFFF +E0007FFFF80001FFFC000007FC000000FE7800007FFC00003FFC00001FFE00001FFE0000 +1FFF00003FFF80003EFFC000FEFFF007FCFFFFFFFCFFFFFFF8FFFFFFE0F8FFFF80701FFC +0020247AA32C>I<001E000000003F000000003F000000003F000000003F000000003F00 +0000003F000000003F000000003F000000003F0000007FFFFFFF00FFFFFFFF80FFFFFFFF +80FFFFFFFF807FFFFFFF00003F000000003F000000003F000000003F000000003F000000 +003F000000003F000000003F000000003F000000003F000000003F000000003F00000000 +3F000000003F000000003F000000003F000000003F000000003F0003C0003F0007E0003F +0007E0003F0007E0003F0007E0003F0007E0003F800FE0001F801FC0001FE07FC0000FFF +FF80000FFFFF000003FFFE000001FFF80000003FE000232E7EAD2C>I<7FF003FF8000FF +F807FFC000FFF807FFC000FFF807FFC0007FF803FFC00001F8000FC00001F8000FC00001 +F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001 +F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001 +F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001 +F8000FC00001F8001FC00001F8001FC00001F8003FC00001FC007FC00000FE03FFC00000 +FFFFFFFF00007FFFFFFF80003FFFFFFF80001FFFCFFF800003FE07FF0029247FA32C>I< +7FFF01FFFCFFFF01FFFEFFFF83FFFEFFFF01FFFE7FFF01FFFC03E0000F8003E0000F8003 +F0001F8001F0001F0001F0001F0001F8003F0000F8003E0000F8003E0000FC007E00007C +007C00007C007C00007E00FC00003E00F800003E00F800003F01F800001F01F000001F01 +F000001F83F000000F83E000000F83E000000FC7E0000007C7C0000007C7C0000007EFC0 +000003EF80000003EF80000003FF80000001FF00000001FF00000000FE000000007C0000 +27247EA32C>I<3FFF03FFF07FFF87FFF87FFF87FFF87FFF87FFF83FFF03FFF000FC007E +0000FC00FC00007E01F800003F01F000001F83F000001F87E000000FCFC0000007EF8000 +0003FF80000001FF00000001FE00000000FC000000007C00000000FE00000001FE000000 +01FF00000003EF80000007CFC000000FC7C000000F83E000001F01F000003F01F800007E +00F800007C007C0000F8007E0001F8003F007FFF01FFFC7FFF83FFFCFFFF83FFFE7FFF83 +FFFC7FFF01FFFC27247EA32C>120 D<7FFF01FFFCFFFF81FFFEFFFF83FFFEFFFF81FFFE +7FFF01FFFC03E0000F8001F0000F8001F0001F8001F8001F0000F8001F0000F8003F0000 +FC003E00007C003E00007E007E00003E007C00003E007C00003F00FC00001F00F800001F +00F800000F81F800000F81F000000F81F0000007C1F0000007C3E0000007C3E0000003E3 +E0000003E7C0000001E7C0000001F7C0000001F780000000FF80000000FF80000000FF00 +0000007F000000007F000000003E000000003E000000007E000000007C000000007C0000 +0000FC00000000F800000000F800000C01F800003F01F000007F83F000007F87E000007E +0FE000007E1FC000007FFF8000003FFF0000001FFE0000000FFC00000007E00000002736 +7EA32C>I<3FFFFFFFE07FFFFFFFF07FFFFFFFF07FFFFFFFF07FFFFFFFF07E00001FE07E +00003FC07E00007F807E0000FF007E0001FE003C0003FC00000007F80000000FF0000000 +1FE00000003FC00000007F80000000FF00000001FC00000003F80000000FF00000001FE0 +0000003FC00000007F80000000FF00000001FE0001E003FC0003F007F80003F00FF00003 +F01FE00003F03FC00003F07F800003F0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0 +7FFFFFFFE024247DA32C>I E /Fh 35 121 df<07C01FF03FF87FFCFFFEFFFEFFFEFFFE +FFFEFFFEFFFE7FFC3FF81FF007C00F0F788E1F>46 D<000003C000000007C00000001FC0 +0000007FC0000003FFC000003FFFC000FFFFFFC000FFFFFFC000FFFFFFC000FFFFFFC000 +FFC3FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC00000 +03FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003 +FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FF +C0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0 +000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC000 +0003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC00000 +03FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC000FFFF +FFFFFCFFFFFFFFFCFFFFFFFFFCFFFFFFFFFCFFFFFFFFFC264177C038>49 +D<0000FFE00000000FFFFE0000003FFFFF800000FFFFFFE00003FFFFFFF80007FC03FFFE +000FE0007FFF001F80003FFF803F00000FFFC07F000007FFC07FC00007FFE07FF00003FF +E0FFF00001FFF0FFF80001FFF0FFF80001FFF8FFF80000FFF8FFF80000FFF8FFF80000FF +F8FFF80000FFF87FF00000FFF83FE00000FFF81FC00000FFF800000000FFF800000000FF +F000000001FFF000000001FFF000000001FFE000000003FFE000000003FFC000000007FF +800000000FFF000000000FFF000000001FFC000000003FF8000000003FF0000000007FE0 +00000000FFC000000001FF0000000003FE0000000007FC000000000FF0000000001FE000 +0000003F80000000007F0000780000FE0000780001FC0000780003F80000F80007E00000 +F0000FC00000F0001F800000F0003F000000F0007C000001F000F8000003F001FFFFFFFF +F003FFFFFFFFE007FFFFFFFFE00FFFFFFFFFE01FFFFFFFFFE03FFFFFFFFFE07FFFFFFFFF +E0FFFFFFFFFFE0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC02D417BC038 +>I<0000FFF000000007FFFF0000001FFFFFC000007FFFFFF00000FF007FF80003F8003F +FE0007E0001FFF0007E0000FFF000FF80007FF800FFE0007FF801FFE0007FFC01FFF0007 +FFC01FFF0007FFC01FFF0007FFC01FFF0007FFC01FFF0007FFC01FFF0007FFC00FFE0007 +FFC007FC0007FF8003F8000FFF800000000FFF000000001FFF000000001FFE000000003F +FC000000007FF800000000FFF000000001FFE00000000FFF80000007FFFE00000007FFF8 +00000007FFFF00000007FFFFC000000000FFF0000000003FFC000000000FFE000000000F +FF8000000007FF8000000003FFC000000003FFE000000003FFE000000001FFF000000001 +FFF000000001FFF800000001FFF800000001FFF80FC00001FFF83FF00001FFF87FF80001 +FFF87FF80001FFF8FFFC0001FFF8FFFC0001FFF8FFFC0001FFF0FFFC0001FFF0FFFC0003 +FFF0FFFC0003FFE07FF80003FFE07FF00007FFC07FE00007FFC03F80000FFF801FF0001F +FF000FFE00FFFE0007FFFFFFF80001FFFFFFF000007FFFFFC000001FFFFE00000001FFE0 +00002D427BC038>I<1E00000000001F00000000001FFC000000001FFFFFFFFFFE1FFFFF +FFFFFE1FFFFFFFFFFE1FFFFFFFFFFE3FFFFFFFFFFE3FFFFFFFFFFC3FFFFFFFFFF83FFFFF +FFFFF03FFFFFFFFFE03FFFFFFFFFC03FFFFFFFFFC07FFFFFFFFF807E0000003F007C0000 +007E007C000000FC0078000000F80078000001F80078000003F000F8000007E000F00000 +0FC000F000000F8000F000001F80000000003F00000000007E0000000000FC0000000000 +FC0000000001F80000000003F80000000003F00000000007F0000000000FE0000000000F +E0000000001FE0000000001FC0000000003FC0000000003FC0000000007FC0000000007F +8000000000FF8000000000FF8000000001FF8000000001FF8000000001FF8000000003FF +8000000003FF0000000003FF0000000003FF0000000007FF0000000007FF0000000007FF +0000000007FF0000000007FF000000000FFF000000000FFF000000000FFF000000000FFF +000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF +0000000007FE0000000003FC0000000001F80000002F447AC238>55 +D<00007FF000000007FFFE0000001FFFFF8000007FFFFFE00000FFE03FF00001FF800FF8 +0003FF0007FC0007FE0007FE000FFC0003FF001FFC0001FF003FFC0001FF803FFC0001FF +807FF80001FFC07FF80000FFC07FF80000FFE07FF80000FFE0FFF80000FFE0FFF80000FF +F0FFF80000FFF0FFF80000FFF0FFF80000FFF0FFF80000FFF0FFF80000FFF0FFF80000FF +F8FFF80000FFF8FFF80000FFF8FFF80000FFF8FFF80001FFF87FF80001FFF87FF80001FF +F87FF80001FFF83FF80003FFF83FF80003FFF81FFC0003FFF81FFC0007FFF80FFE000FFF +F807FE000FFFF803FF001EFFF801FFC07CFFF800FFFFF8FFF8003FFFF0FFF8000FFFC0FF +F00001FF00FFF000000000FFF000000000FFF000000000FFE000000001FFE000000001FF +E003C00001FFE00FF00001FFC01FF80001FFC03FFC0003FF803FFC0003FF803FFC0003FF +003FFC0007FE003FFC000FFE003FFC000FFC003FF8001FF8001FF0003FF0001FC000FFE0 +000FF003FFC00007FFFFFF800003FFFFFE000001FFFFF80000007FFFE000000007FE0000 +002D427BC038>57 D<00000000FFF00000700000001FFFFF0000F0000001FFFFFFE001F0 +000007FFFFFFF803F000003FFFFFFFFE07F00000FFFFE001FF0FF00001FFFE00003F9FF0 +0007FFF000000FFFF0000FFFC0000007FFF0001FFF00000003FFF0003FFE00000001FFF0 +007FFC00000000FFF000FFF8000000007FF001FFF0000000003FF003FFE0000000001FF0 +07FFE0000000001FF007FFC0000000000FF00FFF80000000000FF00FFF800000000007F0 +1FFF000000000007F01FFF000000000003F03FFF000000000003F03FFE000000000003F0 +3FFE000000000003F07FFE000000000001F07FFE000000000001F07FFE000000000001F0 +7FFC00000000000000FFFC00000000000000FFFC00000000000000FFFC00000000000000 +FFFC00000000000000FFFC00000000000000FFFC00000000000000FFFC00000000000000 +FFFC00000000000000FFFC00000000000000FFFC00000000000000FFFC00000000000000 +FFFC00000000000000FFFC00000000000000FFFC000000000000007FFC00000000000000 +7FFE000000000000007FFE000000000000F07FFE000000000000F03FFE000000000000F0 +3FFE000000000000F03FFF000000000000F01FFF000000000001F01FFF000000000001E0 +0FFF800000000001E00FFF800000000003E007FFC00000000003C007FFE00000000007C0 +03FFE00000000007C001FFF0000000000F8000FFF8000000001F00007FFC000000003F00 +003FFE000000007E00001FFF80000000FC00000FFFC0000001F8000007FFF0000007F000 +0001FFFE00001FE0000000FFFFF001FF800000003FFFFFFFFF0000000007FFFFFFFC0000 +000001FFFFFFF000000000001FFFFF80000000000000FFF800000044467AC451>67 +D69 D<00000000FFF0000070000000001FFFFF0000F000000001FFFFFFE0 +01F000000007FFFFFFF803F00000003FFFFFFFFE07F0000000FFFFE001FF0FF0000001FF +FE00003F9FF0000007FFF000000FFFF000000FFFC0000007FFF000001FFF00000003FFF0 +00003FFE00000001FFF000007FFC00000000FFF00000FFF8000000007FF00001FFF00000 +00003FF00003FFE0000000001FF00007FFE0000000001FF00007FFC0000000000FF0000F +FF80000000000FF0000FFF800000000007F0001FFF000000000007F0001FFF0000000000 +03F0003FFF000000000003F0003FFE000000000003F0003FFE000000000003F0007FFE00 +0000000001F0007FFE000000000001F0007FFE000000000001F0007FFC00000000000000 +00FFFC0000000000000000FFFC0000000000000000FFFC0000000000000000FFFC000000 +0000000000FFFC0000000000000000FFFC0000000000000000FFFC0000000000000000FF +FC0000000000000000FFFC0000000000000000FFFC0000000000000000FFFC0000000000 +000000FFFC0000000000000000FFFC0000000000000000FFFC0000007FFFFFFFF07FFC00 +00007FFFFFFFF07FFE0000007FFFFFFFF07FFE0000007FFFFFFFF07FFE0000007FFFFFFF +F03FFE0000000001FFF0003FFE0000000001FFF0003FFF0000000001FFF0001FFF000000 +0001FFF0001FFF0000000001FFF0000FFF8000000001FFF0000FFF8000000001FFF00007 +FFC000000001FFF00007FFE000000001FFF00003FFE000000001FFF00001FFF000000001 +FFF00000FFF800000001FFF000007FFC00000001FFF000003FFE00000003FFF000001FFF +80000003FFF000000FFFC0000007FFF0000007FFF000000FFFF0000001FFFE00003FFFF0 +000000FFFFF001FF9FF00000003FFFFFFFFF0FF000000007FFFFFFFC03F000000001FFFF +FFF000F0000000001FFFFFC000300000000000FFFC000000004C467AC458>71 +D75 D<00000007FFC0000000000000FFFFFE000000000007FFFFFFC0000000001FFF +FFFFF0000000007FFE00FFFC00000001FFF0001FFF00000007FF800003FFC000000FFF00 +0001FFE000001FFC0000007FF000003FF80000003FF800007FF00000001FFC0000FFF000 +00001FFE0001FFE00000000FFF0003FFC000000007FF8003FFC000000007FF8007FF8000 +000003FFC007FF8000000003FFC00FFF0000000001FFE00FFF0000000001FFE01FFF0000 +000001FFF01FFE0000000000FFF03FFE0000000000FFF83FFE0000000000FFF83FFE0000 +000000FFF87FFE0000000000FFFC7FFC00000000007FFC7FFC00000000007FFC7FFC0000 +0000007FFC7FFC00000000007FFCFFFC00000000007FFEFFFC00000000007FFEFFFC0000 +0000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC0000 +0000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC0000 +0000007FFEFFFC00000000007FFEFFFC00000000007FFE7FFC00000000007FFC7FFE0000 +000000FFFC7FFE0000000000FFFC7FFE0000000000FFFC3FFE0000000000FFF83FFE0000 +000000FFF83FFF0000000001FFF81FFF0000000001FFF01FFF0000000001FFF01FFF8000 +000003FFF00FFF8000000003FFE00FFF8000000003FFE007FFC000000007FFC003FFC000 +000007FF8003FFE00000000FFF8001FFF00000001FFF0000FFF80000003FFE00007FFC00 +00007FFC00003FFE000000FFF800001FFF000001FFF000000FFFC00007FFE0000007FFF0 +001FFFC0000001FFFE00FFFF00000000FFFFFFFFFE000000003FFFFFFFF80000000007FF +FFFFC00000000000FFFFFE00000000000007FFC000000047467AC454>79 +D82 D<0000FFE0001C000007FFFE003C00003FFFFF807C00 +00FFFFFFE0FC0001FFFFFFF9FC0003FF801FFFFC0007FC0001FFFC000FF800007FFC001F +F000003FFC003FE000000FFC003FC0000007FC007FC0000003FC007F80000003FC007F80 +000001FC007F80000000FC00FF80000000FC00FF800000007C00FF800000007C00FFC000 +00007C00FFC00000007C00FFE00000003C00FFF00000003C00FFF80000003C00FFFC0000 +0000007FFE00000000007FFFE0000000007FFFFE000000003FFFFFF00000003FFFFFFF00 +00001FFFFFFFE000001FFFFFFFFC00000FFFFFFFFE000007FFFFFFFF800003FFFFFFFFC0 +0001FFFFFFFFE000007FFFFFFFF000001FFFFFFFF8000007FFFFFFFC000000FFFFFFFC00 +00000FFFFFFE00000000FFFFFE0000000007FFFF00000000007FFF00000000003FFF0000 +0000000FFF800000000007FF800000000003FF80F000000003FF80F000000001FF80F000 +000001FF80F000000000FF80F000000000FF80F800000000FF80F800000000FF80F80000 +0000FF00FC00000000FF00FC00000000FF00FE00000001FF00FF00000001FE00FF800000 +03FE00FFC0000003FC00FFE0000007FC00FFF800000FF800FFFF00003FF000FFFFF800FF +E000FE7FFFFFFFC000FC1FFFFFFF0000F807FFFFFC0000F000FFFFF00000E00007FF8000 +0031467AC43E>I<0001FFE0000000001FFFFE000000007FFFFF80000001FFFFFFE00000 +03FE007FF8000007FC001FFC000007FE000FFE00000FFF0007FF00000FFF0007FF00000F +FF0003FF80000FFF0003FF80000FFF0003FF80000FFF0001FFC00007FE0001FFC00003FC +0001FFC00000F00001FFC00000000001FFC00000000001FFC00000000001FFC000000000 +01FFC000000003FFFFC0000000FFFFFFC0000007FFFFFFC000003FFFF1FFC00000FFFC01 +FFC00003FFE001FFC0000FFF8001FFC0001FFE0001FFC0003FFC0001FFC0003FF80001FF +C0007FF80001FFC0007FF00001FFC000FFF00001FFC000FFE00001FFC000FFE00001FFC0 +00FFE00001FFC000FFE00003FFC000FFE00003FFC000FFF00007FFC0007FF8000FFFC000 +7FF8001FFFF0003FFE003EFFFFC01FFF80FC7FFFC007FFFFF87FFFC003FFFFE01FFFC000 +7FFF8007FFC0000FFC00000000322F7DAD36>97 D<007FC000000000FFFFC000000000FF +FFC000000000FFFFC000000000FFFFC000000000FFFFC00000000003FFC00000000001FF +C00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0 +0000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000 +00000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000 +000001FFC00000000001FFC00FF8000001FFC0FFFF800001FFC3FFFFE00001FFCFFFFFF8 +0001FFDFC03FFC0001FFFF000FFE0001FFFC0003FF0001FFF80001FF8001FFF00001FFC0 +01FFE00000FFE001FFC00000FFE001FFC000007FF001FFC000007FF001FFC000007FF801 +FFC000003FF801FFC000003FF801FFC000003FF801FFC000003FFC01FFC000003FFC01FF +C000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC0 +00003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000 +003FF801FFC000003FF801FFC000007FF801FFC000007FF001FFC000007FF001FFC00000 +7FF001FFC00000FFE001FFE00000FFC001FFF00001FFC001FFF80003FF8001FF7C0007FF +0001FE3E000FFE0001FC1FC07FFC0001F80FFFFFF00001F003FFFFC00001E000FFFF0000 +0000001FF0000036467DC43E>I<00003FFC00000001FFFFC000000FFFFFF000003FFFFF +FC00007FF003FE0000FFC001FF0003FF8003FF0007FF0007FF8007FE0007FF800FFE0007 +FF801FFC0007FF801FFC0007FF803FF80007FF803FF80003FF007FF80001FE007FF80000 +78007FF0000000007FF000000000FFF000000000FFF000000000FFF000000000FFF00000 +0000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF00000 +0000FFF000000000FFF0000000007FF8000000007FF8000000007FF8000000003FF80000 +00003FFC000003C03FFC000003C01FFE000007C00FFE000007800FFF00000F8007FF8000 +1F0003FFC0003E0001FFF0007C00007FFC03F800003FFFFFF000000FFFFFC0000003FFFF +000000003FF800002A2F7CAD32>I<0000000003FE0000000007FFFE0000000007FFFE00 +00000007FFFE0000000007FFFE0000000007FFFE00000000001FFE00000000000FFE0000 +0000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE000000 +00000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000 +000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE0000000000 +0FFE0000003FE00FFE000003FFFC0FFE00000FFFFF8FFE00003FFFFFCFFE0000FFF807FF +FE0001FFC001FFFE0003FF80007FFE0007FF00003FFE000FFE00001FFE000FFC00000FFE +001FFC00000FFE003FF800000FFE003FF800000FFE003FF800000FFE007FF800000FFE00 +7FF000000FFE007FF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FF +F000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF0 +00000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE007FF000000FFE007FF000 +000FFE007FF000000FFE007FF800000FFE003FF800000FFE003FF800000FFE001FFC0000 +1FFE001FFC00001FFE000FFE00003FFE0007FE00007FFE0003FF0000FFFF0001FFC003FF +FFFC00FFF01FEFFFFC007FFFFF8FFFFC001FFFFE0FFFFC0007FFF80FFFFC00007FC00FF8 +0036467CC43E>I<00003FF800000003FFFF8000000FFFFFE000003FFFFFF000007FF83F +F80000FFC007FC0001FF8003FE0003FF0001FF0007FE0000FF800FFC0000FF801FFC0000 +7FC01FF800007FC03FF800003FE03FF800003FE07FF800003FE07FF000003FE07FF00000 +3FF07FF000001FF0FFF000001FF0FFF000001FF0FFFFFFFFFFF0FFFFFFFFFFF0FFFFFFFF +FFF0FFFFFFFFFFF0FFF000000000FFF000000000FFF000000000FFF000000000FFF00000 +00007FF0000000007FF0000000007FF8000000007FF8000000003FF8000000003FF80000 +00F01FFC000000F01FFC000001F00FFE000001E007FF000003E003FF800007C001FFC000 +0F8000FFF0003F00007FFE01FE00001FFFFFFC000007FFFFF0000001FFFFC00000001FFE +00002C2F7DAD33>I<000000FF8000000FFFE000007FFFF00001FFFFF80003FF8FFC000F +FE0FFE001FFC1FFE001FF81FFE003FF81FFE007FF01FFE007FF01FFE007FF00FFC00FFE0 +0FFC00FFE003F000FFE000C000FFE0000000FFE0000000FFE0000000FFE0000000FFE000 +0000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00000FFFFFFF800 +FFFFFFF800FFFFFFF800FFFFFFF800FFFFFFF80000FFE0000000FFE0000000FFE0000000 +FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FF +E0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0 +000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE000 +0000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00000 +00FFE0000000FFE000007FFFFFE0007FFFFFE0007FFFFFE0007FFFFFE0007FFFFFE00027 +467DC522>I<0000FFE0007E00000FFFFE03FF80003FFFFF8FFF8000FFFFFFFFFFC001FF +C07FFF3FC003FF001FF83FC007FE000FFC3FC00FFC0007FE1F801FFC0007FF0F001FF800 +03FF00001FF80003FF00003FF80003FF80003FF80003FF80003FF80003FF80003FF80003 +FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80001FF80003FF +00001FF80003FF00001FFC0007FF00000FFC0007FE000007FE000FFC000003FF001FF800 +0001FFC07FF0000003FFFFFFE0000003FFFFFF800000078FFFFE0000000780FFE0000000 +0F8000000000000F8000000000000F8000000000000F8000000000000FC000000000000F +E000000000000FF000000000000FFFFFFFC000000FFFFFFFFC000007FFFFFFFF800007FF +FFFFFFE00003FFFFFFFFF00001FFFFFFFFFC0000FFFFFFFFFC0003FFFFFFFFFE000FFFFF +FFFFFF001FF000007FFF003FC0000007FF007F80000001FF807F80000000FF80FF000000 +00FF80FF000000007F80FF000000007F80FF000000007F80FF000000007F80FF80000000 +FF807F80000000FF007FC0000001FF003FE0000003FE001FF0000007FC000FFE00003FF8 +0007FFC001FFF00001FFFFFFFFC000007FFFFFFF0000000FFFFFF8000000007FFF000000 +32427DAC38>I<007FC000000000FFFFC000000000FFFFC000000000FFFFC000000000FF +FFC000000000FFFFC00000000003FFC00000000001FFC00000000001FFC00000000001FF +C00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0 +0000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000 +00000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC007FE +000001FFC03FFF800001FFC0FFFFE00001FFC1FFFFF80001FFC7F03FFC0001FFCF801FFC +0001FFDF000FFE0001FFDE000FFE0001FFFC000FFE0001FFF80007FF0001FFF00007FF00 +01FFF00007FF0001FFE00007FF0001FFE00007FF0001FFE00007FF0001FFC00007FF0001 +FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FF +C00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC0 +0007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC000 +07FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007 +FF0001FFC00007FF0001FFC00007FF0001FFC00007FF00FFFFFF83FFFFFEFFFFFF83FFFF +FEFFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFFFE37457CC43E>I<007C0001FF0003 +FF8007FFC007FFC00FFFE00FFFE00FFFE00FFFE00FFFE007FFC007FFC003FF8001FF0000 +7C00000000000000000000000000000000000000000000000000000000000000007FC07F +FFC07FFFC07FFFC07FFFC07FFFC003FFC001FFC001FFC001FFC001FFC001FFC001FFC001 +FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001 +FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001 +FFC001FFC001FFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18467CC520>I<000003E00000 +0FF800001FFC00003FFE00003FFE00007FFF00007FFF00007FFF00007FFF00007FFF0000 +3FFE00003FFE00001FFC00000FF8000003E0000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000001FF0003FFFF0003FFFF0003 +FFFF0003FFFF0003FFFF00000FFF000007FF000007FF000007FF000007FF000007FF0000 +07FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0000 +07FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0000 +07FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0000 +07FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0000 +07FF000007FF1F8007FF3FC007FF7FE007FFFFF007FFFFF00FFEFFF00FFEFFF00FFCFFF0 +1FFCFFE01FF87FE03FF03FC0FFE01FFFFF800FFFFF0003FFFC0000FFC000205A86C522> +I<007FC000FFFFC000FFFFC000FFFFC000FFFFC000FFFFC00003FFC00001FFC00001FFC0 +0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0 +0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0 +0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0 +0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0 +0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0 +0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0 +0001FFC000FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF8019457CC420>108 +D<007F8007FE00000FFC0000FFFF803FFFC0007FFF8000FFFF80FFFFF001FFFFE000FFFF +81FFFFF803FFFFF000FFFF87F01FFC0FE03FF800FFFF8FC00FFE1F801FFC0003FF9F000F +FF3E001FFE0001FF9E0007FF3C000FFE0001FFBC0007FF78000FFE0001FFF80003FFF000 +07FF0001FFF80003FFF00007FF0001FFF00003FFE00007FF0001FFE00003FFC00007FF00 +01FFE00003FFC00007FF0001FFE00003FFC00007FF0001FFC00003FF800007FF0001FFC0 +0003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF +800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007 +FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001 +FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC000 +03FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF80 +0007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF +0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FF +C00003FF800007FF00FFFFFF81FFFFFF03FFFFFEFFFFFF81FFFFFF03FFFFFEFFFFFF81FF +FFFF03FFFFFEFFFFFF81FFFFFF03FFFFFEFFFFFF81FFFFFF03FFFFFE572D7CAC5E>I<00 +7F8007FE0000FFFF803FFF8000FFFF80FFFFE000FFFF81FFFFF800FFFF87F03FFC00FFFF +8F801FFC0003FF9F000FFE0001FF9E000FFE0001FFBC000FFE0001FFF80007FF0001FFF0 +0007FF0001FFF00007FF0001FFE00007FF0001FFE00007FF0001FFE00007FF0001FFC000 +07FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007 +FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF +0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF00 +01FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001 +FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF00FFFFFF83FFFFFEFFFF +FF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFFFE372D7CAC3E>I<00001F +FC0000000001FFFFC000000007FFFFF00000001FFFFFFC0000007FF80FFF000000FFC001 +FF800001FF8000FFC00003FE00003FE00007FE00003FF0000FFC00001FF8000FF800000F +F8001FF800000FFC001FF800000FFC003FF800000FFE003FF0000007FE007FF0000007FF +007FF0000007FF007FF0000007FF007FF0000007FF00FFF0000007FF80FFF0000007FF80 +FFF0000007FF80FFF0000007FF80FFF0000007FF80FFF0000007FF80FFF0000007FF80FF +F0000007FF80FFF0000007FF80FFF0000007FF807FF0000007FF007FF0000007FF007FF0 +000007FF007FF0000007FF003FF800000FFE003FF800000FFE001FF800000FFC001FFC00 +001FFC000FFC00001FF80007FE00003FF00007FE00003FF00003FF8000FFE00001FFC001 +FFC000007FF80FFF0000003FFFFFFE0000000FFFFFF800000001FFFFC0000000001FFC00 +0000312F7DAD38>I<007FC00FF80000FFFFC0FFFF8000FFFFC3FFFFE000FFFFCFFFFFF8 +00FFFFDFC03FFC00FFFFFF001FFE0003FFFC0007FF0001FFF80003FF8001FFF00003FFC0 +01FFE00001FFE001FFC00001FFE001FFC00000FFF001FFC00000FFF001FFC000007FF801 +FFC000007FF801FFC000007FF801FFC000007FF801FFC000003FFC01FFC000003FFC01FF +C000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC0 +00003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000 +007FF801FFC000007FF801FFC000007FF801FFC000007FF001FFC00000FFF001FFC00000 +FFF001FFC00001FFE001FFE00001FFC001FFF00003FFC001FFF80007FF8001FFFC000FFF +0001FFFE001FFE0001FFDFC07FFC0001FFCFFFFFF00001FFC3FFFFC00001FFC0FFFF0000 +01FFC01FF0000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001 +FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FF +C00000000001FFC00000000001FFC00000000001FFC000000000FFFFFF80000000FFFFFF +80000000FFFFFF80000000FFFFFF80000000FFFFFF8000000036407DAC3E>I<007F807F +00FFFF81FFE0FFFF83FFF0FFFF8FFFF8FFFF8F8FFCFFFF9F1FFE03FFBE1FFE01FFBC1FFE +01FFF81FFE01FFF81FFE01FFF01FFE01FFF00FFC01FFE007F801FFE001E001FFE0000001 +FFE0000001FFE0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FF +C0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0 +000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC000 +0001FFC0000001FFC0000001FFC00000FFFFFFE000FFFFFFE000FFFFFFE000FFFFFFE000 +FFFFFFE000272D7DAC2E>114 D<001FFC038000FFFF878003FFFFFF800FFFFFFF801FF0 +03FF803FC000FF803F80003F807F00001F807E00001F80FE00000F80FE00000F80FE0000 +0780FF00000780FF00000780FF80000780FFE0000000FFFE0000007FFFF000007FFFFF00 +003FFFFFC0003FFFFFF0001FFFFFFC000FFFFFFE0003FFFFFF0001FFFFFF80007FFFFF80 +000FFFFFC000003FFFC0000003FFE0000000FFE0F000003FE0F000003FE0F800001FE0F8 +00000FE0F800000FE0FC00000FE0FC00000FE0FE00000FC0FF00001FC0FF00001FC0FF80 +003F80FFE0007F00FFF803FE00FFFFFFFC00FCFFFFF800F03FFFE000E007FE0000232F7C +AD2C>I<0001E000000001E000000001E000000001E000000001E000000003E000000003 +E000000003E000000003E000000007E000000007E00000000FE00000000FE00000001FE0 +0000001FE00000003FE00000007FE0000000FFE0000003FFE000000FFFFFFF80FFFFFFFF +80FFFFFFFF80FFFFFFFF80FFFFFFFF8000FFE0000000FFE0000000FFE0000000FFE00000 +00FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000 +FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FF +E0000000FFE0000000FFE0000000FFE001E000FFE001E000FFE001E000FFE001E000FFE0 +01E000FFE001E000FFE001E000FFE001E000FFE001E000FFE003E000FFF003C0007FF003 +C0007FF007C0003FF80F80001FFC1F00000FFFFF000007FFFC000001FFF80000003FE000 +23407EBE2C>I<007FC00001FF00FFFFC003FFFF00FFFFC003FFFF00FFFFC003FFFF00FF +FFC003FFFF00FFFFC003FFFF0003FFC0000FFF0001FFC00007FF0001FFC00007FF0001FF +C00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC0 +0007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC000 +07FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007 +FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF +0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC0000FFF0001FFC0000FFF00 +01FFC0001FFF0001FFC0001FFF0001FFC0003FFF0000FFC0003FFF0000FFE0007FFF8000 +7FE001F7FFFE007FF807E7FFFE003FFFFFC7FFFE000FFFFF07FFFE0003FFFE07FFFE0000 +7FF007FC00372E7CAC3E>IIII E /Fi 6 104 df<7FFFFFFFFFFF80FFFFFFFFFFFFC0FFFFFFFFFFFF +C07FFFFFFFFFFF803204799641>0 D<000FE000007FFC0000FFFE0003FFFF8007FFFFC0 +0FFFFFE01FFFFFF03FFFFFF83FFFFFF87FFFFFFC7FFFFFFC7FFFFFFCFFFFFFFEFFFFFFFE +FFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFE7FFFFFFC7FFFFFFC7FFFFFFC +3FFFFFF83FFFFFF81FFFFFF00FFFFFE007FFFFC003FFFF8000FFFE00007FFC00000FE000 +1F207BA42A>15 D<00000000000180000000000007C000000000001FC000000000007F80 +0000000001FF000000000007FC00000000001FF000000000007FC00000000001FF000000 +000007FC00000000001FF000000000007FC00000000001FF000000000007FC0000000000 +1FF000000000007FC00000000001FF000000000007FC00000000001FF000000000007FC0 +0000000001FF000000000007FC00000000003FF000000000007FC00000000000FF000000 +000000FE0000000000007F8000000000003FE000000000000FF8000000000003FE000000 +000000FF8000000000003FE000000000000FF8000000000003FE000000000000FF800000 +0000003FE000000000000FF8000000000003FE000000000000FF8000000000003FE00000 +0000000FF8000000000003FE000000000000FF8000000000003FE000000000000FF80000 +00000003FE000000000000FF8000000000003FC000000000000FC0000000000003800000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000007FFFFFFFFFFF80FFFFFFFFFF +FFC0FFFFFFFFFFFFC07FFFFFFFFFFF80324479B441>20 D<0000000000001E0000000000 +0000001E00000000000000001E00000000000000001E00000000000000001F0000000000 +0000000F00000000000000000F00000000000000000F8000000000000000078000000000 +00000007C00000000000000003E00000000000000003E00000000000000001F000000000 +00000000F80000000000000000FC00000000000000007E00000000000000003F00000000 +000000001F80000000000000000FC00000000000000007F07FFFFFFFFFFFFFFFFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFC0000000000000007F0000000 +000000000FC0000000000000001F80000000000000003F00000000000000007E00000000 +00000000FC0000000000000000F80000000000000001F00000000000000003E000000000 +00000003E00000000000000007C0000000000000000780000000000000000F8000000000 +0000000F00000000000000000F00000000000000001F00000000000000001E0000000000 +0000001E00000000000000001E00000000000000001E0000482C7BAA53>33 +D<000001F800000FF800003F800000FC000001F8000003F0000007E0000007E000000FE0 +00000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC0 +00000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC0 +00000FC000000FC000000FC000000FC000000FC000000FC000000FC000001FC000001F80 +00003F8000007F000000FE000003F800007FE00000FF0000007FE0000003F8000000FE00 +00007F0000003F8000001F8000001FC000000FC000000FC000000FC000000FC000000FC0 +00000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC0 +00000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC0 +00000FC000000FC000000FE0000007E0000007E0000003F0000001F8000000FC0000003F +8000000FF8000001F81D537ABD2A>102 DI +E /Fj 67 123 df<00000FF800FC0000007FFF07FF000001F807DF83C00007E001FF0FC0 +001F8007FE1FE0003F000FFC1FE0007E000FFC1FE0007E000FF81FE000FC000FF81FE000 +FC000FF0078001F80007F0000001F80003F0000001F80003F0000001F80003F0000001F8 +0003F0000001F80003F0000001F80003F0000001F80003F0000001F80003F0000001F800 +03F0000001F80003F0000001F80003F0000001F80003F00000FFFFFFFFFFF800FFFFFFFF +FFF800FFFFFFFFFFF80001F80003F0000001F80003F0000001F80003F0000001F80003F0 +000001F80003F0000001F80003F0000001F80003F0000001F80003F0000001F80003F000 +0001F80003F0000001F80003F0000001F80003F0000001F80003F0000001F80003F00000 +01F80003F0000001F80003F0000001F80003F0000001F80003F0000001F80003F0000001 +F80003F0000001F80003F0000001F80003F0000001F80003F0000001F80003F0000001F8 +0003F0000001F80003F0000001F80003F0000001F80003F0000001F80003F0000003FC00 +07F800007FFFE0FFFFF0007FFFE0FFFFF0007FFFE0FFFFF000333B7FBA30>11 +D<00000FF8000000007FFE00000001F80780000007E001C000001F8000E000003F0007E0 +00007E000FF000007E000FF00000FC000FF00000FC000FF00001F8000FF00001F80007E0 +0001F80001800001F80000000001F80000000001F80000000001F80000000001F8000000 +0001F80000000001F80000000001F80000000001F80000000001F80003F000FFFFFFFFF0 +00FFFFFFFFF000FFFFFFFFF00001F8000FF00001F80003F00001F80003F00001F80003F0 +0001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F0 +0001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F0 +0001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F0 +0001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F0 +0001F80003F00003FC0007F8007FFFE0FFFFC07FFFE0FFFFC07FFFE0FFFFC02A3B7FBA2E +>I<00000FFC000000007FFF70000001F803F0000007E007F000001F800FF000003F000F +F000007E000FF000007E000FF00000FC000FF00000FC0007F00001F80003F00001F80003 +F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003 +F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F000FFFFFFFF +F000FFFFFFFFF000FFFFFFFFF00001F80003F00001F80003F00001F80003F00001F80003 +F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003 +F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003 +F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003 +F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003 +F00001F80003F00003FC0007F8007FFFE0FFFFC07FFFE0FFFFC07FFFE0FFFFC02A3B7FBA +2E>I<00000FF0001FF0000000007FFE00FFFC00000001F80F83F00F00000007E001CFC0 +038000001F8000FF0001C000003F0007FE000FC000007E000FFC001FE000007E000FFC00 +1FE00000FC000FF8001FE00000FC000FF8001FE00001F8000FF0001FE00001F80007F000 +0FC00001F80003F00003000001F80003F00000000001F80003F00000000001F80003F000 +00000001F80003F00000000001F80003F00000000001F80003F00000000001F80003F000 +00000001F80003F00000000001F80003F00000000001F80003F00007E000FFFFFFFFFFFF +FFE000FFFFFFFFFFFFFFE000FFFFFFFFFFFFFFE00001F80003F0001FE00001F80003F000 +07E00001F80003F00007E00001F80003F00007E00001F80003F00007E00001F80003F000 +07E00001F80003F00007E00001F80003F00007E00001F80003F00007E00001F80003F000 +07E00001F80003F00007E00001F80003F00007E00001F80003F00007E00001F80003F000 +07E00001F80003F00007E00001F80003F00007E00001F80003F00007E00001F80003F000 +07E00001F80003F00007E00001F80003F00007E00001F80003F00007E00001F80003F000 +07E00001F80003F00007E00001F80003F00007E00001F80003F00007E00001F80003F000 +07E00001F80003F00007E00001F80003F00007E00001F80003F00007E00003FC0007F800 +0FF0007FFFE0FFFFC1FFFF807FFFE0FFFFC1FFFF807FFFE0FFFFC1FFFF80413B7FBA45> +I<1C007F00FF80FF80FFC0FFC0FFC07FC01CC000C000C000C000C001C001800180038003 +00070006000E001C003800700060000A1979B917>39 D<0000600000E00001C000038000 +0700000E00001E00003C0000780000780000F00001E00001E00003C00003C00007C00007 +80000F80000F00000F00001F00001E00001E00003E00003E00003E00007C00007C00007C +00007C00007C00007C0000F80000F80000F80000F80000F80000F80000F80000F80000F8 +0000F80000F80000F80000F80000F80000F80000F80000F80000F800007C00007C00007C +00007C00007C00007C00003E00003E00003E00001E00001E00001F00000F00000F00000F +800007800007C00003C00003C00001E00001E00000F000007800007800003C00001E0000 +0E000007000003800001C00000E0000060135278BD20>II<1C007F00FF80FF80FFC0FF +C0FFC07FC01CC000C000C000C000C001C00180018003800300070006000E001C00380070 +0060000A19798817>44 DI<1C007F +00FF80FF80FF80FF80FF807F001C000909798817>I<0003F80000001FFF0000007E0FC0 +0000F803E00001E000F00003C000780007C0007C000F80003E000F80003E001F00001F00 +1F00001F003F00001F803F00001F803F00001F807E00000FC07E00000FC07E00000FC07E +00000FC07E00000FC07E00000FC0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00 +000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE0000 +0FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000F +E07E00000FC07E00000FC07E00000FC07E00000FC07F00001FC03F00001F803F00001F80 +3F00001F801F00001F001F80003F000F80003E000F80003E0007C0007C0003E000F80001 +F001F00000F803E000007E0FC000001FFF00000003F80000233A7DB72A>48 +D<0001C0000003C0000007C000001FC00000FFC000FFFFC000FFFFC000FF1FC000001FC0 +00001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0 +00001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0 +00001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0 +00001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0 +00001FC000001FC000001FC000001FC000001FC000001FC000001FC000003FE0007FFFFF +F07FFFFFF07FFFFFF01C3879B72A>I<000FF00000007FFE000001FFFF800003E03FE000 +0F000FF0000E0007F8001C0003FC00380001FE00300001FE00700000FF00600000FF00FC +0000FF00FF00007F80FF80007F80FF80007F80FF80007F80FF80007F80FF80007F807F00 +007F801C00007F800000007F80000000FF00000000FF00000000FF00000001FE00000001 +FC00000003FC00000003F800000007F000000007E00000000FE00000001FC00000003F80 +0000003F000000007C00000000F800000001F000000003E000000007C00000000F800000 +000F000000001E000180003C000180007800018000F000038001E000030003C000030007 +800003000E000007000FFFFFFF001FFFFFFF003FFFFFFF007FFFFFFE00FFFFFFFE00FFFF +FFFE00FFFFFFFE0021387CB72A>I<0007F80000003FFF0000007FFFC00001F80FF00003 +C007F800078003FC000E0001FC000F0001FE001FE000FE001FF000FF001FF000FF001FF0 +00FF001FF000FF001FF000FF000FE000FF0007C000FF00000000FE00000001FE00000001 +FE00000001FC00000003F800000003F800000007F000000007E00000000F800000007E00 +00001FFC0000001FFF800000000FE000000007F000000001FC00000001FE00000000FF00 +0000007F800000007F800000007FC00000007FC00000003FC00000003FE00000003FE01E +00003FE07F80003FE0FFC0003FE0FFC0003FE0FFC0003FE0FFC0003FE0FFC0003FC0FF80 +007FC07F80007F807E00007F80700000FF00380001FE001E0001FE000F8003F80007F00F +F00001FFFFC000007FFF0000000FF80000233A7DB72A>I<000000380000000038000000 +007800000000F800000000F800000001F800000003F800000007F800000007F80000000F +F80000001FF80000001BF800000033F800000073F800000063F8000000C3F8000001C3F8 +00000183F800000303F800000703F800000603F800000C03F800001C03F800001803F800 +003003F800007003F800006003F80000C003F80001C003F800038003F800030003F80007 +0003F8000E0003F8000C0003F800180003F800380003F800300003F800600003F800E000 +03F800FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8000003F800000003F800000003F800000003 +F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8 +00000007FC000003FFFFF80003FFFFF80003FFFFF825397EB82A>I<0600000C00078000 +3C0007F003F80007FFFFF80007FFFFF00007FFFFE00007FFFF800007FFFF000007FFFC00 +00067FE00000060000000006000000000600000000060000000006000000000600000000 +060000000006000000000600000000060000000006000000000607F80000063FFE000006 +780F800007E007E000078003F000070001F800060001F800060000FC00000000FE000000 +00FE00000000FF000000007F000000007F000000007F800000007F800000007F80000000 +7F803E00007F807F00007F80FF80007F80FF80007F80FF80007F80FF80007F80FF00007F +00FE0000FF00E00000FF00600000FE00700000FE00300001FC00380001F8001C0003F800 +1E0007F0000F800FE00007E03F800001FFFF0000007FFC0000001FE00000213A7CB72A> +I<00003FC0000001FFF0000007FFFC00000FE03E00003F800700007E001F0000FC003F80 +01F8007F8003F0007F8003F0007F8007E0007F800FE0003F000FC0001E001FC00000001F +C00000003F800000003F800000003F800000007F800000007F000000007F01FC00007F07 +FF8000FF1E07E000FF3801F000FF7000F800FF6000FC00FFE0007E00FFC0003F00FFC000 +3F00FF80003F80FF80003FC0FF80001FC0FF80001FC0FF00001FE0FF00001FE0FF00001F +E0FF00001FE0FF00001FE07F00001FE07F00001FE07F00001FE07F00001FE07F00001FE0 +3F80001FE03F80001FC03F80001FC01F80001FC01F80003F801FC0003F800FC0003F0007 +E0007F0007E000FE0003F000FC0001F801F80000FE07F000003FFFC000001FFF00000003 +FC0000233A7DB72A>I<300000000038000000003E000000003FFFFFFFE03FFFFFFFE03F +FFFFFFE03FFFFFFFC07FFFFFFFC07FFFFFFF807FFFFFFF0070000006006000000E006000 +001C006000001800E000003800C000007000C00000E000C00000C000000001C000000003 +80000000030000000007000000000E000000000C000000001C0000000038000000003800 +00000070000000007000000000F000000001E000000001E000000003E000000003E00000 +0003C000000007C000000007C00000000FC00000000FC00000000FC00000001F80000000 +1F800000001F800000003F800000003F800000003F800000003F800000003F800000007F +800000007F800000007F800000007F800000007F800000007F800000007F800000007F80 +0000007F800000003F000000001E000000233B7BB82A>I<0003F80000001FFF0000007F +FFC00000FC07F00001E001F80003C000FC000780007C000700003E000F00001E000E0000 +1F001E00000F001E00000F001E00000F001F00000F001F00000F001F80000F001F80001F +001FE0001E000FF0003E000FFC003C000FFE00780007FF80F00007FFC1E00003FFF3C000 +01FFFF000000FFFE0000003FFF0000001FFFC000001FFFE000007FFFF80000F0FFFC0003 +E07FFE0007801FFF000F000FFF801F0003FF803E0001FFC03C00007FC07C00003FC07800 +000FE0F8000007E0F0000007E0F0000003E0F0000003E0F0000001E0F0000001E0F00000 +01E0F8000001C078000001C078000003C07C000003803E000007001F00000F000F80001E +0007E0007C0003F803F00000FFFFE000003FFF80000007FC0000233A7DB72A>I<0003F8 +0000001FFF0000007FFFC00000FC07E00003F803F00007F001F8000FE000FC000FC0007E +001FC0007E003F80003F003F80003F007F80003F807F00003F807F00003F80FF00001FC0 +FF00001FC0FF00001FC0FF00001FC0FF00001FC0FF00001FC0FF00001FE0FF00001FE0FF +00001FE0FF00001FE0FF00001FE07F00003FE07F00003FE07F80003FE03F80003FE01F80 +007FE01F80007FE00FC000FFE007E000DFE003E001DFE001F0039FE000FC0F1FE0003FFC +1FC00007F01FC00000001FC00000003FC00000003F800000003F800000003F800000003F +000000007F000F00007E001F80007E003FC000FC003FC000FC003FC001F8003FC003F000 +3F8007E0001F000FC0001C001F80000F807F000007FFFC000001FFF00000003FC0000023 +3A7DB72A>I<1C007F00FF80FF80FF80FF80FF807F001C00000000000000000000000000 +0000000000000000000000000000000000000000000000001C007F00FF80FF80FF80FF80 +FF807F001C00092479A317>I<1C007F00FF80FF80FF80FF80FF807F001C000000000000 +000000000000000000000000000000000000000000000000000000000000001C007F00FF +00FF80FF80FF80FF807F801D8001800180018001800380030003000700060006000E001C +001800380070006000093479A317>I<0000003800000000000038000000000000380000 +000000007C0000000000007C0000000000007C000000000000FE000000000000FE000000 +000000FE000000000001FF000000000001FF000000000001FF0000000000037F80000000 +00037F8000000000077FC000000000063FC000000000063FC0000000000E3FE000000000 +0C1FE0000000000C1FE0000000001C1FF000000000180FF000000000180FF00000000038 +0FF8000000003007F8000000003007F8000000007007FC000000006003FC000000006003 +FC00000000C003FE00000000C001FE00000000C001FE000000018001FF000000018000FF +000000018000FF000000030000FF8000000300007F8000000300007F8000000600007FC0 +000007FFFFFFC0000007FFFFFFC000000FFFFFFFE000000C00001FE000000C00001FE000 +001800000FF000001800000FF000001800000FF0000030000007F8000030000007F80000 +30000007F8000060000003FC000060000003FC0000E0000003FC0000E0000001FE0001E0 +000001FE0003F0000001FF000FFC000007FF80FFFF8000FFFFFEFFFF8000FFFFFEFFFF80 +00FFFFFE373C7DBB3E>65 D<000001FF80018000000FFFE0038000007FFFF803800001FF +807E07800003FC000F0F80000FF000039F80001FE00001DF80003F800000FF80007F0000 +007F8000FE0000003F8001FE0000003F8003FC0000001F8007F80000000F8007F8000000 +0F800FF000000007800FF000000007801FE000000007801FE000000003803FE000000003 +803FC000000003807FC000000001807FC000000001807FC000000001807F800000000180 +FF800000000000FF800000000000FF800000000000FF800000000000FF800000000000FF +800000000000FF800000000000FF800000000000FF800000000000FF800000000000FF80 +0000000000FF800000000000FF8000000000007F8000000000007FC000000001807FC000 +000001807FC000000001803FC000000001803FE000000001801FE000000003801FE00000 +0003000FF000000003000FF0000000070007F8000000070007F8000000060003FC000000 +0E0001FE0000001C0000FE0000001800007F0000003800003F8000007000001FE00000E0 +00000FF00003C0000003FC000F80000001FF803F000000007FFFFC000000000FFFF00000 +000001FF800000313D7BBA3C>67 D69 DI<000000FF8000C000000FFFF001C000003FFFFC01C0 +0000FF803F03C00003FC000787C0000FF00003CFC0001FE00000EFC0003FC000007FC000 +7F8000003FC000FF0000001FC001FE0000001FC003FC0000000FC007F800000007C007F8 +00000007C00FF000000003C00FF000000003C01FE000000003C01FE000000001C03FE000 +000001C03FC000000001C07FC000000000C07FC000000000C07FC000000000C07FC00000 +0000C0FF800000000000FF800000000000FF800000000000FF800000000000FF80000000 +0000FF800000000000FF800000000000FF800000000000FF800000000000FF8000000000 +00FF800000000000FF800000FFFFFFFF800000FFFFFF7FC00000FFFFFF7FC00000007FE0 +7FC00000003FC07FC00000003FC03FC00000003FC03FE00000003FC01FE00000003FC01F +E00000003FC00FF00000003FC00FF00000003FC007F80000003FC007F80000003FC003FC +0000003FC001FE0000003FC000FF0000007FC0007F8000007FC0003FC00000FFC0001FE0 +0000EFC0000FF80003C7C00003FE000783C00000FFC03F01C000003FFFFC00C000000FFF +F00000000000FF800000383D7CBA41>I73 +D75 +DIII<000003FF00000000001FFFE000000000FE01FC00 +000001F8007E00000007E0001F8000000FC0000FC000003F800007F000007F000003F800 +00FE000001FC0001FC000000FE0001F80000007E0003F80000007F0007F00000003F8007 +F00000003F800FE00000001FC00FE00000001FC01FE00000001FE01FC00000000FE03FC0 +0000000FF03FC00000000FF03FC00000000FF07FC00000000FF87F8000000007F87F8000 +000007F87F8000000007F8FF8000000007FCFF8000000007FCFF8000000007FCFF800000 +0007FCFF8000000007FCFF8000000007FCFF8000000007FCFF8000000007FCFF80000000 +07FCFF8000000007FCFF8000000007FCFF8000000007FC7F8000000007F87FC00000000F +F87FC00000000FF87FC00000000FF83FC00000000FF03FC00000000FF01FE00000001FE0 +1FE00000001FE01FE00000001FE00FF00000003FC007F00000003F8007F80000007F8003 +F80000007F0001FC000000FE0001FC000000FE0000FE000001FC00007F000003F800003F +800007F000001FC0000FE0000007E0001F80000003F8007F00000000FE01FC000000001F +FFE00000000003FF000000363D7BBA41>II82 D<000FF800C0003FFE01C000FFFF81C003F8 +07E3C007E000F7C00FC0007FC01F80003FC03F00001FC03E00000FC07E000007C07E0000 +07C07C000003C0FC000003C0FC000001C0FC000001C0FC000001C0FE000000C0FE000000 +C0FE000000C0FF000000C0FF800000007FC00000007FE00000007FF80000003FFF800000 +1FFFF800001FFFFF80000FFFFFE00007FFFFF80003FFFFFE0000FFFFFF00003FFFFF8000 +07FFFFC000007FFFC0000007FFE00000007FE00000003FF00000001FF00000000FF00000 +0007F800000007F8C0000003F8C0000003F8C0000001F8C0000001F8C0000001F8E00000 +01F8E0000001F8E0000001F0F0000001F0F0000003F0F8000003E0FC000007E0FE000007 +C0FF00000FC0FF80001F80FBF0003F00F0FE00FE00E03FFFF800E00FFFE000C001FF0000 +253D7CBA2E>I<3FFFFFFFFFFFE03FFFFFFFFFFFE03FFFFFFFFFFFE03FC003FF001FE03E +0001FE0003E07C0001FE0001F0780001FE0000F0700001FE000070700001FE0000707000 +01FE000070600001FE000030600001FE000030600001FE000030600001FE000030E00001 +FE000038C00001FE000018C00001FE000018C00001FE000018C00001FE000018000001FE +000000000001FE000000000001FE000000000001FE000000000001FE000000000001FE00 +0000000001FE000000000001FE000000000001FE000000000001FE000000000001FE0000 +00000001FE000000000001FE000000000001FE000000000001FE000000000001FE000000 +000001FE000000000001FE000000000001FE000000000001FE000000000001FE00000000 +0001FE000000000001FE000000000001FE000000000001FE000000000001FE0000000000 +01FE000000000001FE000000000001FE000000000001FE000000000001FE000000000001 +FE000000000001FE000000000001FE000000000007FF800000001FFFFFFFE000001FFFFF +FFE000001FFFFFFFE00035397DB83C>III +I<0180038007000E001C00180038003000700060006000E000C000C000C000C000CE00FF +80FFC0FFC0FFC07FC07FC03F800E000A197AB917>96 D<001FE0000000FFFC000003E03F +000007000F80000F8007E0001FC003F0001FE003F0001FE001F8001FE001F8001FE000FC +000FC000FC00078000FC00000000FC00000000FC00000000FC00000000FC0000007FFC00 +0007FFFC00003FE0FC0000FE00FC0003F800FC000FF000FC001FC000FC003FC000FC007F +8000FC007F0000FC007F0000FC0CFE0000FC0CFE0000FC0CFE0000FC0CFE0001FC0CFE00 +01FC0CFF0003FC0C7F00077C0C7F80063E183FC01E3E180FE0781FF003FFF00FE0007F80 +07C026277DA52A>I<03F0000000FFF0000000FFF0000000FFF00000000FF000000003F0 +00000003F000000003F000000003F000000003F000000003F000000003F000000003F000 +000003F000000003F000000003F000000003F000000003F000000003F000000003F00000 +0003F000000003F01FE00003F07FF80003F1E03E0003F3801F8003F7000FC003FE0007E0 +03FC0003F003F80001F803F00001F803F00000FC03F00000FC03F00000FE03F00000FE03 +F000007E03F000007F03F000007F03F000007F03F000007F03F000007F03F000007F03F0 +00007F03F000007F03F000007F03F000007F03F000007E03F00000FE03F00000FE03F000 +00FC03F00001FC03F80001F803F80003F003FC0003F003EE0007E003C6000FC003C7801F +000381E07E000300FFF80000001FC000283B7EB92E>I<0003FC00001FFF80007E03E001 +F8007003F000F807E001FC0FC003FC0FC003FC1F8003FC3F8003FC3F0001F87F0000F07F +0000007F0000007E000000FE000000FE000000FE000000FE000000FE000000FE000000FE +000000FE000000FE000000FE0000007E0000007F0000007F0000003F0000063F8000061F +80000E1FC0000C0FC0001C07E0003803F0007001F800E0007C07C0001FFF000007F8001F +277DA525>I<0000000FC0000003FFC0000003FFC0000003FFC00000003FC00000000FC0 +0000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC000 +00000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000 +000FC00003F80FC0001FFF0FC0007E078FC000F801EFC003F0007FC007E0003FC00FC000 +1FC00FC0001FC01F80000FC03F80000FC03F00000FC07F00000FC07F00000FC07E00000F +C0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0 +FE00000FC0FE00000FC0FE00000FC07E00000FC07F00000FC07F00000FC03F00000FC03F +00000FC01F80001FC01F80001FC00FC0003FC007E0007FC003F000EFF001F801CFFF007C +078FFF001FFE0FFF0007F80FC0283B7DB92E>I<0007F800001FFF00007C0FC001F803E0 +03F001F007E001F80FC000F81F80007C1F80007C3F00007E3F00003E7F00003E7F00003F +7E00003FFE00003FFE00003FFE00003FFFFFFFFFFFFFFFFFFE000000FE000000FE000000 +FE000000FE0000007E0000007E0000007F0000007F0000003F0000033F8000031F800007 +0FC0000607C0000E07E0001C01F0003800F80070007E03E0001FFF800003FC0020277EA5 +25>I<00007E000003FF80000FC1E0001F87E0003F0FF0007E0FF0007E0FF000FC0FF000 +FC0FF001F803C001F8000001F8000001F8000001F8000001F8000001F8000001F8000001 +F8000001F8000001F8000001F8000001F8000001F80000FFFFFC00FFFFFC00FFFFFC0001 +F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001 +F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001 +F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001 +F8000001F8000003FC00007FFFF8007FFFF8007FFFF8001C3B7FBA19>I<00000003F000 +0FF00FF8003FFC3C3C00F81F707C01F00FE07C03E007C07C07C003E0100FC003F0000FC0 +03F0001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8001 +F8001F8001F8000FC003F0000FC003F00007C003E00003E007C00003F00F800003F81F00 +00073FFC0000060FF000000E000000000E000000000E000000000E000000000F00000000 +0F000000000FC000000007FFFFC00007FFFFF80003FFFFFE0001FFFFFF8003FFFFFFC00F +80007FE01F00000FF03E000003F07C000001F07C000001F8F8000000F8F8000000F8F800 +0000F8F8000000F8F8000000F8FC000001F87C000001F03E000003E03F000007E00F8000 +0F8007E0003F0001FC01FC00007FFFF0000007FF000026387EA52A>I<03F000000000FF +F000000000FFF000000000FFF0000000000FF00000000003F00000000003F00000000003 +F00000000003F00000000003F00000000003F00000000003F00000000003F00000000003 +F00000000003F00000000003F00000000003F00000000003F00000000003F00000000003 +F00000000003F00000000003F00FF0000003F03FFC000003F0F03F000003F1C01F800003 +F3800FC00003F7000FC00003FE000FC00003FC0007E00003FC0007E00003F80007E00003 +F80007E00003F80007E00003F00007E00003F00007E00003F00007E00003F00007E00003 +F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003 +F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003 +F00007E00003F00007E00003F00007E00003F00007E00003F00007E00007F8000FF000FF +FFC1FFFF80FFFFC1FFFF80FFFFC1FFFF80293A7EB92E>I<0380000FE0001FF0001FF000 +1FF0001FF0001FF0000FE000038000000000000000000000000000000000000000000000 +00000000000000000003F000FFF000FFF000FFF00007F00003F00003F00003F00003F000 +03F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000 +03F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000 +07F800FFFFC0FFFFC0FFFFC012387EB717>I<0001C00007F0000FF8000FF8000FF8000F +F8000FF80007F00001C00000000000000000000000000000000000000000000000000000 +000000000001F800FFF800FFF800FFF80007F80001F80001F80001F80001F80001F80001 +F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 +F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 +F80001F80001F80001F80001F80001F80001F80001F80001F83C01F87E01F8FF01F0FF03 +F0FF03F0FF03E0FE07C07C07C03C0F000FFE0003F800154984B719>I<03F0000000FFF0 +000000FFF0000000FFF00000000FF000000003F000000003F000000003F000000003F000 +000003F000000003F000000003F000000003F000000003F000000003F000000003F00000 +0003F000000003F000000003F000000003F000000003F000000003F000000003F001FFFC +03F001FFFC03F001FFFC03F0007FC003F0007F0003F0007C0003F000700003F000E00003 +F001C00003F003800003F007000003F01E000003F038000003F078000003F0FC000003F1 +FC000003F3FE000003F73F000003FE3F800003F81F800003F00FC00003F00FE00003F007 +E00003F003F00003F001F80003F001FC0003F000FC0003F0007E0003F0007F0003F0003F +0003F0003F8003F0001FC007F8003FF0FFFFC0FFFFFFFFC0FFFFFFFFC0FFFF283A7EB92C +>I<03F000FFF000FFF000FFF0000FF00003F00003F00003F00003F00003F00003F00003 +F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003 +F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003 +F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003 +F00003F00003F00003F00003F00003F00003F00007F800FFFFC0FFFFC0FFFFC0123A7EB9 +17>I<03F00FF0001FE000FFF03FFC007FF800FFF0F03F01E07E00FFF1C01F83803F000F +F3800FC7001F8003F7000FCE001F8003FE000FDC001F8003FC0007F8000FC003FC0007F8 +000FC003F80007F0000FC003F80007F0000FC003F80007F0000FC003F00007E0000FC003 +F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0 +000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003 +F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0 +000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003 +F00007E0000FC003F00007E0000FC007F8000FF0001FE0FFFFC1FFFF83FFFFFFFFC1FFFF +83FFFFFFFFC1FFFF83FFFF40257EA445>I<03F00FF00000FFF03FFC0000FFF0F03F0000 +FFF1C01F80000FF3800FC00003F7000FC00003FE000FC00003FC0007E00003FC0007E000 +03F80007E00003F80007E00003F80007E00003F00007E00003F00007E00003F00007E000 +03F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E000 +03F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E000 +03F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E000 +07F8000FF000FFFFC1FFFF80FFFFC1FFFF80FFFFC1FFFF8029257EA42E>I<0003FE0000 +000FFF8000003E03E00000F800F80001F0007C0003E0003E0007C0001F000F80000F801F +80000FC01F000007C03F000007E03F000007E07E000003F07E000003F07E000003F07E00 +0003F0FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE0000 +03F8FE000003F8FE000003F87E000003F07E000003F07F000007F03F000007E03F000007 +E01F80000FC00F80000F800FC0001F8007E0003F0003F0007E0000F800F800007E03F000 +001FFFC0000003FE000025277EA52A>I<03F01FE000FFF07FF800FFF1E07E00FFF3801F +8007F7000FC003FE0007E003FC0003F003F80003F803F00001F803F00001FC03F00000FC +03F00000FE03F00000FE03F00000FE03F000007F03F000007F03F000007F03F000007F03 +F000007F03F000007F03F000007F03F000007F03F000007F03F000007F03F00000FE03F0 +0000FE03F00000FE03F00001FC03F00001FC03F80003F803F80003F003FC0007F003FE00 +0FE003F6000FC003F7803F0003F1E07E0003F0FFF80003F01FC00003F000000003F00000 +0003F000000003F000000003F000000003F000000003F000000003F000000003F0000000 +03F000000003F000000007F8000000FFFFC00000FFFFC00000FFFFC0000028357EA42E> +I<0003F800C0001FFE01C0007E0781C000FC01C3C003F000E3C007F00077C00FE00037C0 +0FC0003FC01FC0001FC03F80001FC03F80000FC07F00000FC07F00000FC07F00000FC0FE +00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00 +000FC0FE00000FC0FE00000FC07F00000FC07F00000FC07F00000FC03F00000FC03F8000 +1FC01F80001FC01FC0003FC00FC0003FC007E0007FC003F000EFC001F801CFC0007E078F +C0001FFE0FC00007F80FC00000000FC00000000FC00000000FC00000000FC00000000FC0 +0000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000001FE000 +0003FFFF000003FFFF000003FFFF28357DA42C>I<07E01F00FFE07FC0FFE1E3E0FFE387 +F00FE707F003E607F003EE07F003EC03E003FC008003F8000003F8000003F8000003F800 +0003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F000 +0003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F000 +0003F0000003F0000007F80000FFFFF000FFFFF000FFFFF0001C257EA421>I<00FF0300 +03FFE7000F80FF001E003F003C001F0078000F0070000700F0000700F0000700F0000300 +F8000300F8000300FC000300FF0000007FE000007FFF00003FFFE0001FFFF8000FFFFC00 +03FFFE0000FFFF000007FF8000007F8000001F80C0000FC0C00007C0C00007C0E00003C0 +E00003C0E00003C0F00003C0F0000380F8000780FC000780FC000F00FF001E00F3C07C00 +E1FFF000C03F80001A277DA521>I<001800000018000000180000001800000018000000 +380000003800000038000000780000007800000078000000F8000001F8000003F8000007 +F800001FFFFF00FFFFFF00FFFFFF0001F8000001F8000001F8000001F8000001F8000001 +F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001 +F8000001F8000001F8000001F8000001F800C001F800C001F800C001F800C001F800C001 +F800C001F800C001F800C001F800C000FC01C000FC0180007C0380007E0300003F070000 +0FFE000001F8001A347FB220>I<03F00007E000FFF001FFE000FFF001FFE000FFF001FF +E0000FF0001FE00003F00007E00003F00007E00003F00007E00003F00007E00003F00007 +E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007 +E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007 +E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F0000F +E00003F0000FE00003F0000FE00003F0001FE00001F0001FE00001F8003FE00000F80077 +F80000FC00E7FF80003F03C7FF80001FFF87FF800003FC07E00029267EA42E>IIIII<3FFFFFFC3FFFFFFC3F8003FC3E0003F83C0007F03800 +0FE030000FE070001FC070003F8060007F8060007F006000FE006001FC006001FC000003 +F8000007F0000007F000000FE000001FC000003F8000003F8000007F000600FE000600FE +000601FC000603F8000607F8000E07F0000E0FE0000C1FC0001C1FC0001C3F80003C7F00 +007CFF0003FCFFFFFFFCFFFFFFFC1F247EA325>I E /Fk 42 122 +df<000003FFC0000000003FFFFC00000000FFFFFF00000003FFFFFFC000000FFF81FFF0 +00001FFC003FF800003FF8001FFC00007FF0000FFE0000FFE00007FF0001FFC00003FF80 +03FF800001FFC003FF800001FFC007FF800001FFE00FFF000000FFF00FFF000000FFF00F +FF000000FFF01FFF000000FFF81FFF000000FFF83FFF000000FFFC3FFE0000007FFC3FFE +0000007FFC3FFE0000007FFC7FFE0000007FFE7FFE0000007FFE7FFE0000007FFE7FFE00 +00007FFE7FFE0000007FFE7FFE0000007FFEFFFE0000007FFFFFFE0000007FFFFFFE0000 +007FFFFFFE0000007FFFFFFE0000007FFFFFFE0000007FFFFFFE0000007FFFFFFE000000 +7FFFFFFE0000007FFFFFFE0000007FFFFFFE0000007FFFFFFE0000007FFFFFFE0000007F +FFFFFE0000007FFFFFFE0000007FFFFFFE0000007FFFFFFE0000007FFFFFFE0000007FFF +FFFE0000007FFFFFFE0000007FFFFFFE0000007FFFFFFE0000007FFFFFFE0000007FFF7F +FE0000007FFE7FFE0000007FFE7FFE0000007FFE7FFE0000007FFE7FFE0000007FFE7FFE +0000007FFE3FFE0000007FFC3FFE0000007FFC3FFF000000FFFC3FFF000000FFFC1FFF00 +0000FFF81FFF000000FFF81FFF000000FFF80FFF000000FFF00FFF000000FFF007FF8000 +01FFE007FF800001FFE003FFC00003FFC001FFC00003FF8001FFE00007FF8000FFF0000F +FF00007FF8001FFE00001FFC003FF800000FFF81FFF0000007FFFFFFE0000001FFFFFF80 +0000003FFFFC0000000003FFC00000384F7BCD43>48 D<000000780000000000FC000000 +0003FC0000000007FC000000001FFC00000000FFFC0000000FFFFC000007FFFFFC0000FF +FFFFFC0000FFFFFFFC0000FFFF7FFC0000FFF07FFC0000F8007FFC000000007FFC000000 +007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000 +007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000 +007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000 +007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000 +007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000 +007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000 +007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000 +007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000 +007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000 +007FFC000000007FFC000000007FFC000000007FFC000000007FFC00007FFFFFFFFFFE7F +FFFFFFFFFE7FFFFFFFFFFE7FFFFFFFFFFE7FFFFFFFFFFE2F4E76CD43>I<00003FFE0000 +000003FFFFE00000000FFFFFFC0000003FFFFFFF000000FFFFFFFFC00001FFC07FFFE000 +03FE000FFFF80007F80003FFFC000FE00001FFFE001FC00000FFFF003F8000007FFF003F +F000007FFF807FF800003FFFC07FFC00003FFFC0FFFE00001FFFE0FFFF00001FFFE0FFFF +00001FFFE0FFFF00000FFFF0FFFF00000FFFF0FFFF00000FFFF0FFFF00000FFFF0FFFF00 +000FFFF07FFE00000FFFF07FFE00000FFFF03FFC00000FFFF00FF000000FFFF003C00000 +0FFFF0000000000FFFE0000000001FFFE0000000001FFFE0000000001FFFC0000000003F +FFC0000000003FFF80000000003FFF80000000007FFF00000000007FFE0000000000FFFC +0000000001FFF80000000001FFF00000000003FFE00000000003FFC00000000007FF8000 +0000000FFF00000000001FFE00000000001FFC00000000003FF800000000007FE0000000 +0000FFC00000000001FF800000000003FE000000000007FC000000000007F80000000000 +0FF00001F000001FE00001F000003F800001F000007F000001F00000FE000003E00001FC +000003E00003F8000003E00007F0000003E0000FE0000003E0001F80000007E0003F0000 +0007E0003E0000000FE0007FFFFFFFFFE000FFFFFFFFFFC001FFFFFFFFFFC003FFFFFFFF +FFC007FFFFFFFFFFC00FFFFFFFFFFFC01FFFFFFFFFFFC03FFFFFFFFFFFC07FFFFFFFFFFF +C0FFFFFFFFFFFFC0FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80 +344E79CD43>I<00000FFFC000000000FFFFFC00000007FFFFFF8000001FFFFFFFE00000 +3FF807FFF00000FF8001FFFC0001FE00007FFE0003F800003FFF0003F000003FFF8007FC +00001FFF800FFF00001FFFC00FFF80001FFFC01FFFC0001FFFE01FFFC0001FFFE01FFFC0 +001FFFE01FFFC0001FFFE01FFFE0001FFFE01FFFC0001FFFE01FFFC0001FFFE01FFFC000 +1FFFE00FFFC0001FFFC007FF80001FFFC003FF00003FFFC001FC00003FFF80000000003F +FF80000000007FFF00000000007FFE00000000007FFE0000000000FFFC0000000001FFF8 +0000000003FFF00000000007FFC0000000000FFF8000000000FFFE00000000FFFFF80000 +0000FFFFE000000000FFFFFC00000000FFFFFF800000000007FFE00000000001FFF80000 +0000007FFE00000000003FFF00000000001FFF80000000000FFFC0000000000FFFE00000 +000007FFF00000000007FFF00000000007FFF80000000007FFF80000000003FFFC000000 +0003FFFC0000000003FFFE0000000003FFFE03E0000003FFFE0FF8000003FFFE1FFC0000 +03FFFE3FFE000003FFFE7FFF000003FFFEFFFF800003FFFEFFFF800003FFFEFFFF800003 +FFFEFFFF800003FFFCFFFF800003FFFCFFFF800007FFFCFFFF800007FFF8FFFF000007FF +F87FFF000007FFF07FFE00000FFFF03FFC00000FFFE03FF000001FFFC01FE000003FFF80 +0FF800007FFF0007FF0000FFFE0003FFF007FFFC0000FFFFFFFFF000007FFFFFFFE00000 +1FFFFFFF80000003FFFFFC000000001FFF800000374F7ACD43>I<00000000007C000000 +00000000FE00000000000000FE00000000000001FE00000000000003FE00000000000007 +FE0000000000000FFE0000000000000FFE0000000000001FFE0000000000003FFE000000 +0000007FFE0000000000007FFE000000000000FFFE000000000001FFFE000000000003FF +FE000000000003FFFE000000000007FFFE00000000000FFFFE00000000001FBFFE000000 +00003F3FFE00000000003E3FFE00000000007C3FFE0000000000FC3FFE0000000001F83F +FE0000000001F03FFE0000000003E03FFE0000000007E03FFE000000000FC03FFE000000 +000F803FFE000000001F003FFE000000003F003FFE000000007E003FFE000000007C003F +FE00000000F8003FFE00000001F8003FFE00000003F0003FFE00000007E0003FFE000000 +07C0003FFE0000000F80003FFE0000001F80003FFE0000003F00003FFE0000003E00003F +FE0000007C00003FFE000000FC00003FFE000001F800003FFE000001F000003FFE000003 +E000003FFE000007E000003FFE00000FC000003FFE00001F8000003FFE00001F0000003F +FE00003E0000003FFE00007E0000003FFE0000FC0000003FFE0000FFFFFFFFFFFFFFC0FF +FFFFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0000000007F +FE0000000000007FFE0000000000007FFE0000000000007FFE0000000000007FFE000000 +0000007FFE0000000000007FFE0000000000007FFE0000000000007FFE0000000000007F +FE0000000000007FFE0000000000007FFE0000000000007FFE0000000000007FFE000000 +0000007FFE000000000FFFFFFFFFC000000FFFFFFFFFC000000FFFFFFFFFC000000FFFFF +FFFFC000000FFFFFFFFFC03A4F7CCE43>I<03800000000E0007E00000007E0007FE0000 +03FE0007FFF0007FFE0007FFFFFFFFFC0007FFFFFFFFF80007FFFFFFFFF00007FFFFFFFF +E00007FFFFFFFFC00007FFFFFFFF800007FFFFFFFF000007FFFFFFFE000007FFFFFFFC00 +0007FFFFFFF0000007FFFFFFC0000007FFFFFF00000007FFFFF800000007E1FF00000000 +07E0000000000007E0000000000007E0000000000007E0000000000007E0000000000007 +E0000000000007E0000000000007E0000000000007E0000000000007E0000000000007E0 +000000000007E00FFF00000007E07FFFF0000007E3FFFFFE000007E7FFFFFF800007FFF8 +07FFC00007FFC001FFE00007FE0000FFF80007FC00007FFC0007F800003FFC0007F00000 +3FFE0007E000001FFF0003C000001FFF80000000001FFF80000000001FFFC0000000000F +FFC0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFF +F0000000000FFFF0000000000FFFF00FE000000FFFF01FF000000FFFF03FF800000FFFF0 +7FFC00000FFFF0FFFE00000FFFF0FFFE00000FFFF0FFFE00000FFFF0FFFE00000FFFF0FF +FE00000FFFE0FFFE00000FFFE0FFFE00000FFFE0FFFC00000FFFE07FF800001FFFC07FF0 +00001FFFC07FE000001FFF803E0000003FFF803F0000003FFF001F8000007FFE001FC000 +007FFC000FE00000FFF80007F80001FFF00003FE0007FFE00001FFC03FFFC00000FFFFFF +FF8000003FFFFFFE0000001FFFFFF800000003FFFFC0000000007FF8000000344F79CD43 +>I<0000000FFF0000000000FFFFE000000007FFFFF00000001FFFFFFC0000007FFE03FE +000001FFF0007F000003FFC0003F800007FF00001F80000FFE00007FC0001FFC0000FFC0 +003FF80001FFE0007FF00003FFE000FFF00007FFE001FFE00007FFE001FFE00007FFE003 +FFC00007FFE007FFC00007FFE007FFC00007FFE00FFFC00003FFC00FFF800001FF801FFF +800000FF001FFF8000007E001FFF80000000003FFF80000000003FFF80000000003FFF00 +000000007FFF00000000007FFF00000000007FFF00080000007FFF01FFF800007FFF07FF +FF0000FFFF0FFFFFC000FFFF1FFFFFF000FFFF3F007FF800FFFF3C003FFC00FFFF78001F +FE00FFFFF0000FFF00FFFFF00007FF80FFFFE00007FFC0FFFFE00007FFC0FFFFC00007FF +E0FFFFC00003FFF0FFFF800003FFF0FFFF800003FFF8FFFF800003FFF8FFFF800003FFF8 +FFFF800003FFF8FFFF000003FFFCFFFF000003FFFCFFFF000003FFFC7FFF000003FFFC7F +FF000003FFFC7FFF000003FFFC7FFF000003FFFC7FFF000003FFFC7FFF000003FFFC3FFF +000003FFFC3FFF000003FFFC3FFF000003FFFC3FFF000003FFFC1FFF000003FFF81FFF80 +0003FFF81FFF800003FFF80FFF800003FFF80FFF800003FFF007FF800007FFF007FF8000 +07FFE003FFC00007FFC001FFC00007FFC001FFE0000FFF8000FFF0000FFF00007FF8001F +FE00003FFC007FFC00001FFF01FFF800000FFFFFFFF0000003FFFFFFC0000000FFFFFF00 +0000003FFFFC0000000007FFC00000364F7ACD43>I<1F000000000000001F8000000000 +00001FC00000000000001FFF8000000000001FFFFFFFFFFFFF801FFFFFFFFFFFFF801FFF +FFFFFFFFFF801FFFFFFFFFFFFF803FFFFFFFFFFFFF803FFFFFFFFFFFFF003FFFFFFFFFFF +FE003FFFFFFFFFFFFC003FFFFFFFFFFFF8003FFFFFFFFFFFF8003FFFFFFFFFFFF0003FFF +FFFFFFFFE0003FFFFFFFFFFFC0007FFFFFFFFFFF80007F800000007F00007E00000000FF +00007E00000001FE00007C00000003FC00007C00000003F800007C00000007F000007C00 +00000FF000007C0000001FE00000F80000003FC00000F80000007F800000F80000007F00 +0000F8000000FE00000000000001FE00000000000003FC00000000000003F80000000000 +0007F00000000000000FF00000000000001FE00000000000001FE00000000000003FC000 +00000000003FC00000000000007F80000000000000FF80000000000000FF800000000000 +01FF00000000000001FF00000000000003FF00000000000003FE00000000000007FE0000 +0000000007FE0000000000000FFE0000000000000FFE0000000000000FFC000000000000 +1FFC0000000000001FFC0000000000003FFC0000000000003FFC0000000000003FFC0000 +000000003FFC0000000000007FFC0000000000007FF80000000000007FF8000000000000 +7FF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF80000 +00000000FFF8000000000001FFF8000000000001FFF8000000000001FFF8000000000001 +FFF8000000000001FFF8000000000001FFF8000000000001FFF8000000000001FFF80000 +00000001FFF8000000000001FFF8000000000001FFF8000000000001FFF8000000000000 +FFF0000000000000FFF00000000000003FC00000000000001F8000000000395279D043> +I<000007FFC0000000007FFFFC00000003FFFFFF8000000FFFFFFFE000001FFC01FFF800 +003FE0003FFC00007F80000FFE0000FF000007FF0001FE000003FF0003FC000001FF8007 +FC000001FFC007F8000000FFC00FF8000000FFC00FF8000000FFE00FF80000007FE00FF8 +0000007FE01FF80000007FE01FFC0000007FE01FFC0000007FE01FFE0000007FE01FFF00 +00007FE01FFF800000FFE01FFFE00000FFC01FFFF80000FFC01FFFFE0001FF800FFFFF00 +01FF800FFFFFC003FF000FFFFFF007FE0007FFFFF807FC0007FFFFFE1FF80003FFFFFFBF +F00001FFFFFFFFE00001FFFFFFFF800000FFFFFFFE0000007FFFFFFF0000003FFFFFFF80 +00000FFFFFFFE0000007FFFFFFF0000001FFFFFFFC000007FFFFFFFE00001FFFFFFFFF00 +003FFFFFFFFF8000FFE7FFFFFF8001FF81FFFFFFC003FF007FFFFFE007FE001FFFFFF00F +FC000FFFFFF01FF80003FFFFF01FF80000FFFFF83FF000007FFFF83FF000001FFFF87FE0 +000007FFFC7FE0000001FFFC7FE0000000FFFCFFC00000007FFCFFC00000003FFCFFC000 +00003FFCFFC00000001FFCFFC00000001FFCFFC00000000FFCFFC00000000FFCFFC00000 +000FF8FFC00000000FF8FFE00000000FF87FE00000000FF07FF00000001FF07FF0000000 +1FF03FF80000003FE01FF80000003FC01FFC0000007FC00FFE000000FF8007FF800003FF +0003FFE0000FFE0001FFFC00FFFC00007FFFFFFFF000003FFFFFFFE000000FFFFFFF8000 +0001FFFFFC000000000FFFC00000364F7ACD43>I<00000FFF8000000000FFFFF8000000 +03FFFFFE0000000FFFFFFF8000001FFF03FFC000007FF800FFE00000FFF0003FF00001FF +E0001FF80003FFC0001FFC0007FFC0000FFE000FFF80000FFF000FFF800007FF001FFF80 +0007FF803FFF800007FF803FFF000007FFC07FFF000007FFC07FFF000003FFE07FFF0000 +03FFE07FFF000003FFF0FFFF000003FFF0FFFF000003FFF0FFFF000003FFF0FFFF000003 +FFF8FFFF000003FFF8FFFF000003FFF8FFFF000003FFF8FFFF000003FFF8FFFF000003FF +F8FFFF000003FFFCFFFF000003FFFCFFFF000003FFFCFFFF000003FFFC7FFF000007FFFC +7FFF000007FFFC7FFF000007FFFC3FFF000007FFFC3FFF000007FFFC3FFF00000FFFFC1F +FF80000FFFFC0FFF80001FFFFC0FFF80001FFFFC07FF80003FFFFC03FFC0003FFFFC01FF +E0007BFFFC00FFF000F3FFFC007FF803F3FFFC001FFFFFE3FFFC000FFFFFC3FFFC0003FF +FF83FFF800007FFE03FFF80000004003FFF80000000003FFF80000000003FFF800000000 +03FFF00000000007FFF00000000007FFF00000000007FFF001F8000007FFE003FC000007 +FFE007FE000007FFC00FFF000007FFC01FFF80000FFF801FFF80000FFF801FFF80000FFF +001FFF80001FFF001FFF80001FFE001FFF80003FFC001FFF00003FFC000FFE00007FF800 +0FFC0000FFF0000FF80001FFE00007F00003FFC00003FC000FFF800003FF807FFE000001 +FFFFFFFC0000007FFFFFF00000003FFFFFC00000000FFFFE0000000000FFF0000000364F +7ACD43>I<00000000001F00000000000000000000003F80000000000000000000007FC0 +000000000000000000007FC000000000000000000000FFE000000000000000000000FFE0 +00000000000000000000FFE000000000000000000001FFF000000000000000000001FFF0 +00000000000000000003FFF800000000000000000003FFF800000000000000000003FFF8 +00000000000000000007FFFC00000000000000000007FFFC00000000000000000007FFFC +0000000000000000000FFFFE0000000000000000000FFFFE0000000000000000001FFFFF +0000000000000000001FFFFF0000000000000000001FFFFF0000000000000000003FFFFF +8000000000000000003F7FFF8000000000000000007F7FFFC000000000000000007E7FFF +C000000000000000007E3FFFC00000000000000000FE3FFFE00000000000000000FC1FFF +E00000000000000001FC1FFFF00000000000000001F81FFFF00000000000000001F80FFF +F00000000000000003F80FFFF80000000000000003F007FFF80000000000000007F007FF +FC0000000000000007E007FFFC0000000000000007E003FFFC000000000000000FE003FF +FE000000000000000FC001FFFE000000000000001FC001FFFF000000000000001F8001FF +FF000000000000001F8000FFFF000000000000003F8000FFFF800000000000003F00007F +FF800000000000007F00007FFFC00000000000007E00007FFFC00000000000007E00003F +FFC0000000000000FE00003FFFE0000000000000FC00001FFFE0000000000001FC00001F +FFF0000000000001F800001FFFF0000000000001F800000FFFF0000000000003F800000F +FFF8000000000003F0000007FFF8000000000007F0000007FFFC000000000007E0000007 +FFFC000000000007E0000003FFFC00000000000FFFFFFFFFFFFE00000000000FFFFFFFFF +FFFE00000000001FFFFFFFFFFFFF00000000001FFFFFFFFFFFFF00000000001FFFFFFFFF +FFFF00000000003F80000000FFFF80000000003F000000007FFF80000000007F00000000 +7FFFC0000000007F000000007FFFC0000000007E000000003FFFC000000000FE00000000 +3FFFE000000000FC000000001FFFE000000001FC000000001FFFF000000001FC00000000 +1FFFF000000001F8000000000FFFF000000003F8000000000FFFF800000003F000000000 +07FFF800000007F00000000007FFFC00000007F00000000007FFFC00000007E000000000 +03FFFC0000000FE00000000003FFFE0000000FC00000000003FFFE0000001FC000000000 +01FFFF000000FFFC0000000001FFFF0000FFFFFFF800000FFFFFFFFFE0FFFFFFF800000F +FFFFFFFFE0FFFFFFF800000FFFFFFFFFE0FFFFFFF800000FFFFFFFFFE0FFFFFFF800000F +FFFFFFFFE05B547BD366>65 D<0000000001FFFC000001C0000000007FFFFFC00003C000 +000007FFFFFFF80007C00000003FFFFFFFFE001FC0000000FFFFFFFFFF803FC0000003FF +FFE003FFC07FC000000FFFFC00003FF0FFC000003FFFE000000FF9FFC000007FFF800000 +03FFFFC00001FFFE00000000FFFFC00003FFF8000000007FFFC00007FFF0000000003FFF +C0000FFFE0000000001FFFC0001FFFC0000000000FFFC0003FFF800000000007FFC0007F +FF000000000003FFC000FFFE000000000001FFC000FFFE000000000001FFC001FFFC0000 +00000000FFC003FFF8000000000000FFC003FFF80000000000007FC007FFF00000000000 +007FC00FFFF00000000000003FC00FFFF00000000000003FC01FFFE00000000000001FC0 +1FFFE00000000000001FC01FFFE00000000000001FC03FFFC00000000000001FC03FFFC0 +0000000000000FC03FFFC00000000000000FC07FFFC00000000000000FC07FFFC0000000 +0000000FC07FFFC000000000000000007FFF8000000000000000007FFF80000000000000 +0000FFFF800000000000000000FFFF800000000000000000FFFF800000000000000000FF +FF800000000000000000FFFF800000000000000000FFFF800000000000000000FFFF8000 +00000000000000FFFF800000000000000000FFFF800000000000000000FFFF8000000000 +00000000FFFF800000000000000000FFFF800000000000000000FFFF8000000000000000 +00FFFF8000000000000000007FFF8000000000000000007FFF8000000000000000007FFF +C000000000000000007FFFC000000000000000007FFFC000000000000007C03FFFC00000 +0000000007C03FFFC000000000000007C03FFFC000000000000007C01FFFE00000000000 +0007C01FFFE000000000000007C01FFFE00000000000000FC00FFFF00000000000000F80 +0FFFF00000000000000F8007FFF00000000000001F8003FFF80000000000001F8003FFF8 +0000000000001F0001FFFC0000000000003F0000FFFE0000000000007E0000FFFE000000 +0000007E00007FFF000000000000FC00003FFF800000000001F800001FFFC00000000003 +F800000FFFE00000000007F0000007FFF0000000000FE0000003FFFC000000001FC00000 +01FFFE000000007F800000007FFF80000000FF000000003FFFE0000007FE000000000FFF +FE00001FF80000000003FFFFE001FFF00000000000FFFFFFFFFFC000000000003FFFFFFF +FF00000000000007FFFFFFFC000000000000007FFFFFE00000000000000001FFFC000000 +00525479D261>67 DI70 D +72 DI76 D82 D<00000FFF800007000000FFFFF8000F00 +0007FFFFFF001F00001FFFFFFFC03F00003FFFFFFFF07F0000FFFC00FFF8FF0001FFE000 +0FFDFF0003FF800001FFFF0007FE0000007FFF000FFC0000003FFF000FF80000000FFF00 +1FF800000007FF001FF000000003FF003FF000000003FF003FE000000001FF007FE00000 +0000FF007FE000000000FF007FE0000000007F00FFE0000000007F00FFE0000000003F00 +FFE0000000003F00FFF0000000003F00FFF0000000003F00FFF8000000001F00FFF80000 +00001F00FFFC000000001F00FFFE000000001F00FFFF000000000000FFFFC00000000000 +7FFFF000000000007FFFFF00000000007FFFFFF8000000003FFFFFFF800000003FFFFFFF +FC0000001FFFFFFFFFC000001FFFFFFFFFF000000FFFFFFFFFFC000007FFFFFFFFFF0000 +03FFFFFFFFFFC00001FFFFFFFFFFE00000FFFFFFFFFFF000007FFFFFFFFFF800003FFFFF +FFFFFC00000FFFFFFFFFFE000003FFFFFFFFFE000000FFFFFFFFFF0000001FFFFFFFFF80 +000000FFFFFFFF800000000FFFFFFFC0000000007FFFFFC00000000007FFFFE000000000 +00FFFFE000000000003FFFE000000000000FFFF0000000000007FFF0000000000003FFF0 +000000000003FFF0780000000001FFF0F80000000000FFF0F80000000000FFF0F8000000 +0000FFF0F800000000007FF0F800000000007FF0FC00000000007FF0FC00000000007FF0 +FC00000000007FE0FE00000000007FE0FE00000000007FE0FF0000000000FFC0FF000000 +0000FFC0FF8000000000FFC0FFC000000001FF80FFE000000001FF00FFF000000003FF00 +FFFC00000007FE00FFFF0000000FFC00FFFFC000001FF800FFFFF800007FF000FF1FFFC0 +03FFE000FE0FFFFFFFFFC000FC03FFFFFFFF0000F8007FFFFFFC0000F0000FFFFFF00000 +E000007FFF0000003C5479D24B>I85 D<00007FFF000000000007FFFFF0000000003FFFFFFE00000000 +FFFFFFFF80000001FFE00FFFC0000003FE0001FFF0000007FF0000FFF8000007FF80003F +FC00000FFF80003FFE00000FFFC0001FFE00000FFFC0001FFF00000FFFC0000FFF80000F +FFC0000FFF80000FFFC0000FFF800007FF800007FFC00007FF800007FFC00003FF000007 +FFC00001FE000007FFC0000000000007FFC0000000000007FFC0000000000007FFC00000 +00000007FFC0000000000007FFC0000000000007FFC0000000007FFFFFC00000000FFFFF +FFC0000000FFFFFFFFC0000007FFFF87FFC000003FFFF007FFC000007FFF8007FFC00001 +FFFC0007FFC00003FFF00007FFC00007FFE00007FFC0000FFFC00007FFC0001FFF800007 +FFC0003FFF000007FFC0007FFF000007FFC0007FFE000007FFC0007FFE000007FFC000FF +FC000007FFC000FFFC000007FFC000FFFC000007FFC000FFFC000007FFC000FFFC00000F +FFC000FFFC00000FFFC000FFFE00001FFFC0007FFE00001DFFC0007FFE00003DFFC0003F +FF000079FFE0001FFF8000F1FFF8000FFFC003E1FFFFE007FFF81FC0FFFFF003FFFFFF80 +7FFFF000FFFFFF001FFFF0001FFFFC0007FFE00001FFE0000000003C387CB641>97 +D<003FF0000000000000FFFFF0000000000000FFFFF0000000000000FFFFF00000000000 +00FFFFF0000000000000FFFFF000000000000003FFF000000000000000FFF00000000000 +0000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000000000 +0000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000000000 +0000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000000000 +0000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000000000 +0000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000000000 +0000FFF000000000000000FFF001FFE000000000FFF00FFFFE00000000FFF03FFFFFC000 +0000FFF0FFFFFFF0000000FFF3FF01FFF8000000FFF7F8003FFE000000FFFFE0000FFF00 +0000FFFF800007FF800000FFFF000003FFC00000FFFE000001FFE00000FFFC000001FFF0 +0000FFF8000000FFF80000FFF8000000FFF80000FFF80000007FFC0000FFF80000007FFC +0000FFF80000007FFE0000FFF80000007FFE0000FFF80000007FFF0000FFF80000003FFF +0000FFF80000003FFF0000FFF80000003FFF0000FFF80000003FFF8000FFF80000003FFF +8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF +8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF +8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF0000FFF80000003FFF +0000FFF80000003FFF0000FFF80000003FFF0000FFF80000007FFE0000FFF80000007FFE +0000FFF80000007FFE0000FFF80000007FFC0000FFF8000000FFFC0000FFF8000000FFF8 +0000FFFC000001FFF00000FFFC000001FFF00000FFFE000003FFE00000FFFF000007FFC0 +0000FFFF80000FFF800000FFCFC0001FFF000000FF87F0007FFC000000FF03FE03FFF800 +0000FE00FFFFFFE0000000FC007FFFFF80000000F8001FFFFC00000000000003FFC00000 +0041547BD24B>I<000001FFF8000000001FFFFF80000000FFFFFFF0000003FFFFFFFC00 +000FFFC00FFE00001FFE0001FF00007FFC0003FF8000FFF00007FF8001FFF00007FFC003 +FFE0000FFFC003FFC0000FFFC007FFC0000FFFC00FFF80000FFFC00FFF80000FFFC01FFF +800007FF801FFF000007FF803FFF000003FF003FFF000001FE007FFF00000000007FFE00 +000000007FFE00000000007FFE0000000000FFFE0000000000FFFE0000000000FFFE0000 +000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE000000 +0000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE00000000 +007FFE00000000007FFF00000000007FFF00000000003FFF00000000003FFF0000000000 +3FFF00000003E01FFF80000003E01FFF80000007E00FFFC0000007C007FFC0000007C007 +FFE000000FC003FFE000001F8001FFF000003F0000FFF800007E00007FFE0000FC00003F +FF0003F800000FFFE01FF0000003FFFFFFE0000000FFFFFF800000003FFFFE0000000001 +FFE0000033387CB63C>I<000000000001FF80000000000007FFFF80000000000007FFFF +80000000000007FFFF80000000000007FFFF80000000000007FFFF800000000000001FFF +8000000000000007FF8000000000000007FF8000000000000007FF8000000000000007FF +8000000000000007FF8000000000000007FF8000000000000007FF8000000000000007FF +8000000000000007FF8000000000000007FF8000000000000007FF8000000000000007FF +8000000000000007FF8000000000000007FF8000000000000007FF8000000000000007FF +8000000000000007FF8000000000000007FF8000000000000007FF8000000000000007FF +8000000000000007FF8000000000000007FF8000000001FFE007FF800000001FFFFC07FF +80000000FFFFFF07FF80000003FFFFFFC7FF8000000FFFE03FE7FF8000001FFF0007F7FF +8000007FFC0001FFFF800000FFF80000FFFF800001FFF000003FFF800003FFE000001FFF +800007FFC000001FFF800007FFC000000FFF80000FFF8000000FFF80001FFF8000000FFF +80001FFF0000000FFF80003FFF0000000FFF80003FFF0000000FFF80003FFF0000000FFF +80007FFE0000000FFF80007FFE0000000FFF80007FFE0000000FFF80007FFE0000000FFF +8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000000FFF +8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000000FFF +8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000000FFF +80007FFE0000000FFF80007FFE0000000FFF80007FFE0000000FFF80003FFF0000000FFF +80003FFF0000000FFF80003FFF0000000FFF80001FFF0000000FFF80001FFF0000000FFF +80000FFF8000000FFF80000FFF8000001FFF800007FFC000003FFF800003FFC000003FFF +800001FFE000007FFF800000FFF00001FFFF8000007FF80003FFFFE000003FFE000FEFFF +FF80000FFFC07FCFFFFF800007FFFFFF8FFFFF800001FFFFFE0FFFFF8000003FFFF80FFF +FF80000003FFC00FFE000041547CD24B>I<000003FFC0000000003FFFFC00000001FFFF +FF00000007FFFFFFC000000FFF81FFE000003FFC007FF800007FF8003FFC0000FFF0001F +FE0001FFE0000FFE0003FFC00007FF0007FFC00007FF800FFF800003FF800FFF800003FF +C01FFF800001FFC01FFF000001FFC03FFF000001FFE03FFF000001FFE07FFF000000FFE0 +7FFE000000FFE07FFE000000FFF07FFE000000FFF0FFFE000000FFF0FFFE000000FFF0FF +FE000000FFF0FFFE000000FFF0FFFFFFFFFFFFF0FFFFFFFFFFFFF0FFFFFFFFFFFFF0FFFF +FFFFFFFFE0FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE00 +00000000FFFE00000000007FFE00000000007FFE00000000007FFF00000000003FFF0000 +0000003FFF00000000003FFF00000000E01FFF00000001F01FFF80000003F00FFF800000 +03F007FFC0000007E007FFC0000007E003FFE000000FC001FFF000001FC000FFF800003F +80007FFC0000FF00001FFE0003FE00000FFFC03FF8000003FFFFFFF0000000FFFFFFC000 +00001FFFFE0000000001FFF0000034387CB63D>I<0000003FFC00000003FFFF0000000F +FFFFC000003FFFFFE00000FFF81FF00001FFC03FF80003FF807FF80007FF00FFFC000FFE +00FFFC001FFC00FFFC001FFC00FFFC003FF800FFFC003FF800FFFC003FF8007FF8007FF0 +007FF8007FF0003FF0007FF0000FC0007FF0000000007FF0000000007FF0000000007FF0 +000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0 +000000007FF0000000007FF0000000007FF0000000007FF0000000FFFFFFFFE000FFFFFF +FFE000FFFFFFFFE000FFFFFFFFE000FFFFFFFFE000007FF8000000007FF8000000007FF8 +000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 +000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 +000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 +000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 +000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 +000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 +000000007FF8000000007FF8000000007FF8000000007FF80000007FFFFFFE00007FFFFF +FE00007FFFFFFE00007FFFFFFE00007FFFFFFE00002E547CD329>I<00003FFF0000FF00 +0003FFFFF007FFC0000FFFFFFC1FFFE0003FFFFFFF7FFFE0007FFC0FFFFF9FF000FFE001 +FFF83FF001FFC000FFE03FF003FF80007FF01FF007FF00003FF81FE00FFF00003FFC0FC0 +0FFF00003FFC07801FFE00001FFE00001FFE00001FFE00003FFE00001FFF00003FFE0000 +1FFF00003FFE00001FFF00003FFE00001FFF00003FFE00001FFF00003FFE00001FFF0000 +3FFE00001FFF00003FFE00001FFF00003FFE00001FFF00001FFE00001FFE00001FFE0000 +1FFE00000FFF00003FFC00000FFF00003FFC000007FF00003FF8000003FF80007FF00000 +01FFC000FFE0000000FFE001FFC0000000FFFC0FFF80000001FFFFFFFF00000003EFFFFF +FC00000003C3FFFFF000000007C03FFF0000000007C000000000000007C0000000000000 +0FC00000000000000FC00000000000000FC00000000000000FE00000000000000FE00000 +000000000FF80000000000000FFE0000000000000FFFFFFFFF00000007FFFFFFFFF80000 +07FFFFFFFFFF000007FFFFFFFFFFC00003FFFFFFFFFFE00001FFFFFFFFFFF00000FFFFFF +FFFFF800007FFFFFFFFFFC00007FFFFFFFFFFE0001FFFFFFFFFFFF0007FFFFFFFFFFFF00 +0FFE000003FFFF801FF80000003FFF803FF000000007FF807FE000000003FFC07FE00000 +0001FFC0FFC000000001FFC0FFC000000000FFC0FFC000000000FFC0FFC000000000FFC0 +FFC000000000FFC0FFC000000000FFC0FFE000000001FFC07FE000000001FF807FF00000 +0003FF803FF000000003FF001FF800000007FE000FFE0000001FFC0007FF8000007FF800 +03FFE00001FFF00001FFFE001FFFE000007FFFFFFFFF8000000FFFFFFFFC00000001FFFF +FFE0000000000FFFFC0000003C4F7CB543>I<003FF0000000000000FFFFF00000000000 +00FFFFF0000000000000FFFFF0000000000000FFFFF0000000000000FFFFF00000000000 +0003FFF000000000000000FFF000000000000000FFF000000000000000FFF00000000000 +0000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000000000 +0000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000000000 +0000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000000000 +0000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000000000 +0000FFF000000000000000FFF000000000000000FFF000000000000000FFF0001FFC0000 +0000FFF000FFFFC0000000FFF003FFFFF0000000FFF00FFFFFF8000000FFF01FE07FFC00 +0000FFF03F001FFE000000FFF07C001FFF000000FFF0F0000FFF000000FFF1E0000FFF80 +0000FFF3C0000FFF800000FFF7800007FF800000FFF7800007FFC00000FFFF000007FFC0 +0000FFFE000007FFC00000FFFE000007FFC00000FFFC000007FFC00000FFFC000007FFC0 +0000FFFC000007FFC00000FFFC000007FFC00000FFF8000007FFC00000FFF8000007FFC0 +0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 +0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 +0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 +0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 +0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 +0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 +0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 +00FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFF +C0FFFFFFF807FFFFFFC042537BD24B>I<007F000000FF800003FFE00007FFF00007FFF0 +000FFFF8000FFFF8000FFFF8000FFFF8000FFFF8000FFFF8000FFFF80007FFF00007FFF0 +0003FFE00000FF8000007F00000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000003FF000FFFFF0 +00FFFFF000FFFFF000FFFFF000FFFFF00001FFF00000FFF00000FFF00000FFF00000FFF0 +0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0 +0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0 +0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0 +0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0 +0000FFF00000FFF000FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE01B547BD325>I< +003FF000FFFFF000FFFFF000FFFFF000FFFFF000FFFFF00001FFF00000FFF00000FFF000 +00FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF000 +00FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF000 +00FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF000 +00FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF000 +00FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF000 +00FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF000 +00FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF000 +00FFF00000FFF00000FFF00000FFF00000FFF00000FFF000FFFFFFF0FFFFFFF0FFFFFFF0 +FFFFFFF0FFFFFFF01C537BD225>108 D<003FF0001FFC000000FFE00000FFFFF000FFFF +C00007FFFE0000FFFFF003FFFFF0001FFFFF8000FFFFF00FFFFFF8007FFFFFC000FFFFF0 +1FE07FFC00FF03FFE000FFFFF03F001FFE01F800FFF00003FFF07C001FFF03E000FFF800 +00FFF0F0000FFF0780007FF80000FFF1E0000FFF8F00007FFC0000FFF3C0000FFF9E0000 +7FFC0000FFF7800007FFBC00003FFC0000FFF7800007FFFC00003FFE0000FFFF000007FF +F800003FFE0000FFFE000007FFF000003FFE0000FFFE000007FFF000003FFE0000FFFC00 +0007FFE000003FFE0000FFFC000007FFE000003FFE0000FFFC000007FFE000003FFE0000 +FFFC000007FFE000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003F +FE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC0 +00003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF80000 +07FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FF +F8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE +0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000 +003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007 +FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8 +000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE00 +00FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC00000 +3FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FF +C000003FFE00FFFFFFF807FFFFFFC03FFFFFFEFFFFFFF807FFFFFFC03FFFFFFEFFFFFFF8 +07FFFFFFC03FFFFFFEFFFFFFF807FFFFFFC03FFFFFFEFFFFFFF807FFFFFFC03FFFFFFE67 +367BB570>I<003FF0001FFC000000FFFFF000FFFFC00000FFFFF003FFFFF00000FFFFF0 +0FFFFFF80000FFFFF01FE07FFC0000FFFFF03F001FFE000003FFF07C001FFF000000FFF0 +F0000FFF000000FFF1E0000FFF800000FFF3C0000FFF800000FFF7800007FF800000FFF7 +800007FFC00000FFFF000007FFC00000FFFE000007FFC00000FFFE000007FFC00000FFFC +000007FFC00000FFFC000007FFC00000FFFC000007FFC00000FFFC000007FFC00000FFF8 +000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8 +000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8 +000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8 +000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8 +000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8 +000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8 +000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8 +000007FFC00000FFF8000007FFC000FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFF +F807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC042367BB54B>I<000001FFE0 +00000000001FFFFE0000000000FFFFFFC000000003FFFFFFF00000000FFF807FFC000000 +1FFC000FFE0000007FF80007FF800000FFF00003FFC00001FFE00001FFE00003FFC00000 +FFF00003FF8000007FF00007FF8000007FF8000FFF0000003FFC000FFF0000003FFC001F +FF0000003FFE001FFF0000003FFE003FFE0000001FFF003FFE0000001FFF003FFE000000 +1FFF007FFE0000001FFF807FFE0000001FFF807FFE0000001FFF807FFE0000001FFF80FF +FE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE000000 +1FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FF +FE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC07FFE0000001FFF807FFE000000 +1FFF807FFE0000001FFF803FFE0000001FFF003FFF0000003FFF003FFF0000003FFF001F +FF0000003FFE001FFF0000003FFE000FFF0000003FFC000FFF8000007FFC0007FF800000 +7FF80003FFC00000FFF00001FFE00001FFE00000FFF00003FFC000007FF80007FF800000 +3FFE001FFF0000000FFF807FFC00000007FFFFFFF800000000FFFFFFC0000000003FFFFF +000000000001FFE00000003A387CB643>I<003FF001FFE0000000FFFFF00FFFFE000000 +FFFFF03FFFFFC00000FFFFF0FFFFFFF00000FFFFF3FF01FFF80000FFFFF7F8007FFE0000 +03FFFFE0001FFF000000FFFF80000FFF800000FFFF000007FFC00000FFFE000007FFE000 +00FFFC000003FFF00000FFF8000001FFF80000FFF8000001FFF80000FFF8000000FFFC00 +00FFF8000000FFFC0000FFF8000000FFFE0000FFF80000007FFE0000FFF80000007FFF00 +00FFF80000007FFF0000FFF80000007FFF0000FFF80000007FFF0000FFF80000003FFF80 +00FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF80 +00FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF80 +00FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF00 +00FFF80000007FFF0000FFF80000007FFF0000FFF80000007FFF0000FFF80000007FFE00 +00FFF8000000FFFE0000FFF8000000FFFE0000FFF8000000FFFC0000FFF8000001FFFC00 +00FFF8000001FFF80000FFFC000003FFF00000FFFC000003FFF00000FFFE000007FFE000 +00FFFF00000FFFC00000FFFF80001FFF800000FFFFC0003FFF000000FFFFF000FFFC0000 +00FFFBFE07FFF8000000FFF8FFFFFFE0000000FFF87FFFFF80000000FFF81FFFFC000000 +00FFF803FFC000000000FFF800000000000000FFF800000000000000FFF8000000000000 +00FFF800000000000000FFF800000000000000FFF800000000000000FFF8000000000000 +00FFF800000000000000FFF800000000000000FFF800000000000000FFF8000000000000 +00FFF800000000000000FFF800000000000000FFF800000000000000FFF8000000000000 +00FFF800000000000000FFF8000000000000FFFFFFF80000000000FFFFFFF80000000000 +FFFFFFF80000000000FFFFFFF80000000000FFFFFFF80000000000414D7BB54B>I<007F +E003FE00FFFFE00FFF80FFFFE03FFFE0FFFFE07FFFF0FFFFE0FE1FF8FFFFE1F83FFC03FF +E3E03FFE00FFE3C07FFE00FFE7807FFE00FFEF807FFE00FFEF007FFE00FFEE007FFE00FF +FE003FFC00FFFC003FFC00FFFC001FF800FFFC000FF000FFF800000000FFF800000000FF +F800000000FFF800000000FFF800000000FFF000000000FFF000000000FFF000000000FF +F000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FF +F000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FF +F000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FF +F000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FF +F0000000FFFFFFFC0000FFFFFFFC0000FFFFFFFC0000FFFFFFFC0000FFFFFFFC00002F36 +7CB537>114 D<0003FFF00F00003FFFFE1F0000FFFFFFFF0003FFFFFFFF0007FF003FFF +000FF80007FF001FE00001FF003FC00000FF003F8000007F007F8000007F007F0000003F +007F0000003F00FF0000001F00FF0000001F00FF8000001F00FF8000001F00FFC000001F +00FFF000000000FFFC00000000FFFFC00000007FFFFF0000007FFFFFF800003FFFFFFF00 +003FFFFFFFC0001FFFFFFFF0000FFFFFFFF80007FFFFFFFC0003FFFFFFFE0000FFFFFFFF +00003FFFFFFF80000FFFFFFFC00000FFFFFFC0000007FFFFE00000003FFFE000000007FF +F000000001FFF0780000007FF0F80000003FF0F80000001FF0FC0000001FF0FC0000000F +F0FC0000000FF0FE0000000FF0FE0000000FE0FF0000000FE0FF8000001FE0FF8000001F +C0FFC000001FC0FFE000003F80FFF800007F00FFFE0001FE00FFFFC00FFC00FF7FFFFFF8 +00FC1FFFFFE000F807FFFF8000F000FFF800002C387CB635>I<00003E00000000003E00 +000000003E00000000003E00000000003E00000000003E00000000007E00000000007E00 +000000007E00000000007E0000000000FE0000000000FE0000000001FE0000000001FE00 +00000001FE0000000003FE0000000007FE0000000007FE000000000FFE000000001FFE00 +0000003FFE00000000FFFE00000001FFFE0000000FFFFFFFFF00FFFFFFFFFF00FFFFFFFF +FF00FFFFFFFFFF00FFFFFFFFFF00003FFE000000003FFE000000003FFE000000003FFE00 +0000003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE00 +0000003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE00 +0000003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE00 +0000003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE00 +07C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE00 +07C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007C0001FFE000F80001FFF00 +0F80001FFF000F80000FFF001F00000FFF801F000007FFC03E000003FFF0FC000001FFFF +F80000007FFFF00000001FFFE000000003FF80002A4D7ECB34>I<003FF8000001FFC000 +FFFFF80007FFFFC000FFFFF80007FFFFC000FFFFF80007FFFFC000FFFFF80007FFFFC000 +FFFFF80007FFFFC00003FFF800001FFFC00000FFF8000007FFC00000FFF8000007FFC000 +00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 +00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 +00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 +00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 +00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 +00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 +00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 +00FFF8000007FFC00000FFF8000007FFC00000FFF800000FFFC00000FFF800000FFFC000 +00FFF800000FFFC00000FFF800001FFFC00000FFF800001FFFC000007FF800003FFFC000 +007FF800003BFFC000007FF800007BFFC000003FFC0000F3FFC000003FFC0001E3FFF000 +001FFE0007C3FFFFC0000FFFC03F83FFFFC00007FFFFFF03FFFFC00001FFFFFE03FFFFC0 +00007FFFF803FFFFC0000007FFE003FF000042377BB54B>III<7FFFFFF0007FFFFE007FFFFFF0007FFFFE007FFFFFF0007FFFFE007FFFFFF0007F +FFFE007FFFFFF0007FFFFE00007FFE00000FFF0000003FFF000007F80000001FFF800007 +F00000000FFFC0000FE000000007FFC0001FC000000007FFE0003F8000000003FFF0003F +0000000001FFF8007E0000000000FFFC00FC00000000007FFE01FC00000000007FFE03F8 +00000000003FFF07F000000000001FFF8FE000000000000FFFCFC0000000000007FFFF80 +000000000003FFFF00000000000003FFFF00000000000001FFFE00000000000000FFFC00 +0000000000007FFE000000000000003FFF000000000000003FFF000000000000001FFF80 +0000000000001FFFC00000000000003FFFE00000000000007FFFF0000000000000FFFFF0 +000000000001FDFFF8000000000001F8FFFC000000000003F07FFE000000000007E03FFF +00000000000FE01FFF00000000001FC01FFF80000000003F800FFFC0000000007F0007FF +E000000000FE0003FFF000000000FC0001FFF800000001F80001FFF800000003F00000FF +FC00000007F000007FFE0000000FE000003FFF0000001FC000001FFF800000FFF000001F +FF8000FFFFFE0001FFFFFFC0FFFFFE0001FFFFFFC0FFFFFE0001FFFFFFC0FFFFFE0001FF +FFFFC0FFFFFE0001FFFFFFC042357EB447>II +E /Fl 32 122 df<3C007E00FF00FF00FF80FF807F803D80018001800180018003800300 +0300070006000E000C001C0038007000600009177A8715>44 DI<3C7EFFFFFFFF7E3C08087A8715>I<000001C000000001C000 +000003C000000007C000000007C00000000FC00000001FC00000001FC00000003FC00000 +007FC00000006FC0000000CFC0000001CFC00000038FC00000030FC00000070FC000000E +0FC000000C0FC000001C0FC00000380FC00000300FC00000700FC00000E00FC00000C00F +C00001800FC00003800FC00003000FC00006000FC0000E000FC0000C000FC00018000FC0 +0038000FC00030000FC00060000FC000E0000FC000FFFFFFFF80FFFFFFFF80FFFFFFFF80 +00000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000 +000FC00000000FC00000001FE0000007FFFF800007FFFF800007FFFF8021337EB226>52 +D<000FE000007FFC0000FFFF0003F01F8007C007C00F0003E00E0001F01E0000F01C0000 +F83C0000783C0000783C0000783E0000783E0000783F0000F83F8000F03FC001F01FF001 +E01FF803C00FFE078007FF0F0003FFDE0001FFF80000FFF800003FFE00003FFF0000F7FF +C003E3FFE00780FFF00F007FF81E001FF83E0007FC3C0003FC780001FC7800007EF80000 +7EF000003EF000003EF000001EF000001EF000001EF800001EF800003C7800003C7C0000 +783E0000781F0000F00F8003E007F01FC001FFFF00007FFC00001FE0001F347DB126>56 +D<000003FE000C00003FFF801C0000FFFFE01C0003FE01F83C000FF0003C7C001FC0000E +FC007F800007FC00FE000003FC01FC000001FC03FC000000FC03F8000000FC07F0000000 +7C0FE00000007C0FE00000003C1FC00000003C1FC00000001C3FC00000001C3F80000000 +1C7F800000000C7F800000000C7F800000000C7F000000000CFF0000000000FF00000000 +00FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00000000 +00FF0000000000FF0000000000FF00000000007F00000000007F800000000C7F80000000 +0C7F800000000C3F800000000C3FC00000000C1FC00000001C1FC0000000180FE0000000 +180FE00000003807F00000003003F80000007003FC000000E001FC000000E000FE000001 +C0007F80000380001FC0000F00000FF0001E000003FE00FC000000FFFFF00000003FFFC0 +00000003FE00002E377CB437>67 D78 D<001FE00300007FFC070001FFFF070007 +F01FCF000F8003FF001F0000FF003E00007F003E00003F007C00001F007C00001F007800 +000F00F800000700F800000700F800000700F800000700FC00000300FC00000300FE0000 +0300FE000000007F000000007FC00000003FF00000003FFF0000001FFFF000000FFFFF00 +0007FFFFC00003FFFFF00000FFFFF800003FFFFC000003FFFE0000003FFF00000003FF00 +000000FF800000007F800000003F800000001FC00000000FC0C000000FC0C000000FC0C0 +000007C0C0000007C0C0000007C0E0000007C0E0000007C0F000000F80F000000F80F800 +000F00FC00001F00FE00003E00FF00007E00FFC000FC00F1FC03F800E0FFFFE000E01FFF +8000C003FE000022377CB42B>83 D<7FFFFFFFFFFE7FFFFFFFFFFE7FFFFFFFFFFE7F8007 +F001FE7C0007F0003E780007F0001E700007F0000E700007F0000E600007F00006E00007 +F00007E00007F00007E00007F00007C00007F00003C00007F00003C00007F00003C00007 +F00003C00007F00003C00007F00003000007F00000000007F00000000007F00000000007 +F00000000007F00000000007F00000000007F00000000007F00000000007F00000000007 +F00000000007F00000000007F00000000007F00000000007F00000000007F00000000007 +F00000000007F00000000007F00000000007F00000000007F00000000007F00000000007 +F00000000007F00000000007F00000000007F00000000007F00000000007F00000000007 +F00000000007F0000000000FF80000001FFFFFFC00001FFFFFFC00001FFFFFFC0030337D +B237>I<007F80000003FFF000000F80FC00001C003E00003F003F00003F801F80003F80 +0FC0003F800FC0003F8007E0001F0007E000000007E000000007E000000007E000000007 +E0000001FFE000001FFFE00000FF87E00003FC07E0000FF007E0001FC007E0003F8007E0 +007F8007E0007F0007E000FF0007E0C0FE0007E0C0FE0007E0C0FE0007E0C0FE000FE0C0 +FE000FE0C0FF001FE0C07F003BE0C03F8071F1801FC1E1FF8007FFC0FF0000FE003C0022 +237DA126>97 D<03F0000000FFF0000000FFF0000000FFF000000007F000000003F00000 +0003F000000003F000000003F000000003F000000003F000000003F000000003F0000000 +03F000000003F000000003F000000003F000000003F000000003F000000003F03F800003 +F0FFE00003F3C0F80003F7007E0003FE003F0003FC001F8003F8000FC003F0000FC003F0 +0007E003F00007F003F00007F003F00003F003F00003F803F00003F803F00003F803F000 +03F803F00003F803F00003F803F00003F803F00003F803F00003F803F00003F803F00003 +F003F00007F003F00007E003F00007E003F0000FC003F8000FC003FC001F8003EC003F00 +03CF007C00038381F8000301FFE00000007F000025357EB32B>I<0007F800003FFF0000 +FC07C001F000E003E003F007C007F00FC007F01F8007F03F8007F03F0003E07F0000007F +0000007E000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE +000000FE000000FE0000007F0000007F0000003F0000183F8000181F8000381FC000300F +C0007007E000E003F001C000FC0F80003FFE000007F0001D237EA122>I<0000003F0000 +000FFF0000000FFF0000000FFF000000007F000000003F000000003F000000003F000000 +003F000000003F000000003F000000003F000000003F000000003F000000003F00000000 +3F000000003F000000003F000000003F000007F03F00003FFC3F0000FC0F3F0001F003BF +0007E001FF000FC000FF001F80007F001F80003F003F00003F003F00003F007F00003F00 +7E00003F00FE00003F00FE00003F00FE00003F00FE00003F00FE00003F00FE00003F00FE +00003F00FE00003F00FE00003F00FE00003F007E00003F007F00003F007F00003F003F00 +003F001F80007F001F80007F000FC000FF0007E001FF8003F007BFFC00F81E3FFC003FFC +3FFC000FE03F0026357DB32B>I<000FE000007FFC0000F83F0003F00F8007E00FC00FC0 +07E01F8003E01F8003F03F0003F03F0001F07F0001F87E0001F87E0001F8FE0001F8FE00 +01F8FFFFFFF8FFFFFFF8FE000000FE000000FE000000FE000000FE0000007E0000007F00 +00007F0000003F0000183F0000181F8000380F8000300FC0007007E000E001F003C000FC +0F00003FFE000007F0001D237EA122>I<0001FC000007FF00001F0780003E0FC0007C1F +C000FC1FC001F81FC001F81FC003F8070003F0000003F0000003F0000003F0000003F000 +0003F0000003F0000003F0000003F0000003F0000003F0000003F00000FFFFF000FFFFF0 +00FFFFF00003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F000 +0003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F000 +0003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000007F800 +007FFFE0007FFFE0007FFFE0001A357FB417>I<0000001F00001FC07F8000FFF8E3C001 +F07FC7C007E03F03C00FC01F83800F800F80001F800FC0001F0007C0003F0007E0003F00 +07E0003F0007E0003F0007E0003F0007E0003F0007E0001F0007C0001F800FC0000F800F +80000FC01F800007E03F000007F07C00000EFFF800000C1FC000001C000000001C000000 +001C000000001E000000001E000000001F000000000FFFFE00000FFFFFC00007FFFFF000 +03FFFFFC0007FFFFFE001F0001FE003E00007F007C00003F007C00001F80F800000F80F8 +00000F80F800000F80F800000F80F800000F80FC00001F807C00001F003E00003E001F00 +007C000FC001F80003F007E00000FFFF8000001FFC000022337EA126>I<03F0000000FF +F0000000FFF0000000FFF000000007F000000003F000000003F000000003F000000003F0 +00000003F000000003F000000003F000000003F000000003F000000003F000000003F000 +000003F000000003F000000003F000000003F01FC00003F07FF00003F1E0FC0003F3807C +0003F7007E0003FE007E0003FC003F0003FC003F0003F8003F0003F8003F0003F0003F00 +03F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003 +F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0 +003F0003F0003F0003F0003F0003F0003F0007F8007F80FFFFC7FFFCFFFFC7FFFCFFFFC7 +FFFC26347EB32B>I<07800FC01FE01FE01FE01FE00FC007800000000000000000000000 +00000000000000000007E0FFE0FFE0FFE00FE007E007E007E007E007E007E007E007E007 +E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E00FF0FFFFFF +FFFFFF10337EB215>I<03F0000000FFF0000000FFF0000000FFF000000007F000000003 +F000000003F000000003F000000003F000000003F000000003F000000003F000000003F0 +00000003F000000003F000000003F000000003F000000003F000000003F000000003F000 +000003F003FFE003F003FFE003F003FFE003F001FF0003F000F80003F001E00003F001C0 +0003F003800003F00F000003F01C000003F038000003F070000003F0F0000003F3F80000 +03F7FC000003FEFC000003FC7E000003F87F000003F03F800003F01F800003F00FC00003 +F00FE00003F007E00003F003F00003F003F80003F001F80003F000FC0003F000FE0007F8 +00FF80FFFFC3FFF0FFFFC3FFF0FFFFC3FFF024347EB329>107 D<07E0FFE0FFE0FFE00F +E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007 +E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007 +E007E007E007E007E007E007E007E00FF0FFFFFFFFFFFF10347EB315>I<03F01FE000FF +0000FFF07FF803FFC000FFF1E07C0F03E000FFF3803E1C01F00007F7003F3801F80003FE +003F7001F80003FC001FE000FC0003FC001FE000FC0003F8001FC000FC0003F8001FC000 +FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0 +001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000 +FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0 +001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000 +FC0003F0001F8000FC0007F8003FC001FE00FFFFC7FFFE3FFFF0FFFFC7FFFE3FFFF0FFFF +C7FFFE3FFFF03C217EA041>I<03F01FC000FFF07FF000FFF1E0FC00FFF3807C0007F700 +7E0003FE007E0003FC003F0003FC003F0003F8003F0003F8003F0003F0003F0003F0003F +0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F00 +03F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003 +F0003F0003F0003F0003F0003F0007F8007F80FFFFC7FFFCFFFFC7FFFCFFFFC7FFFC2621 +7EA02B>I<0007F00000003FFE000000FC1F800001F007C00003C001E00007C001F0000F +8000F8001F00007C001F00007C003F00007E003E00003E007E00003F007E00003F007E00 +003F00FE00003F80FE00003F80FE00003F80FE00003F80FE00003F80FE00003F80FE0000 +3F80FE00003F807E00003F007E00003F007E00003F003F00007E003F00007E001F00007C +001F8000FC000FC001F80007C001F00003F007E00000FC1F8000003FFE00000007F00000 +21237EA126>I<03F03F8000FFF0FFE000FFF3C0F800FFF7007E0007FE003F0003FC001F +8003F8001FC003F0000FC003F0000FE003F00007F003F00007F003F00007F003F00003F8 +03F00003F803F00003F803F00003F803F00003F803F00003F803F00003F803F00003F803 +F00003F803F00007F803F00007F003F00007F003F00007E003F0000FE003F0000FC003F8 +001FC003FC003F8003FC003F0003FF00FC0003F381F80003F1FFE00003F07F000003F000 +000003F000000003F000000003F000000003F000000003F000000003F000000003F00000 +0003F000000003F000000007F8000000FFFFC00000FFFFC00000FFFFC0000025307EA02B +>I<03E07C00FFE1FF00FFE38F80FFE71FC007EE1FC003EC1FC003EC1FC003FC0F8003F8 +000003F8000003F8000003F0000003F0000003F0000003F0000003F0000003F0000003F0 +000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0 +000003F0000003F0000007F80000FFFFE000FFFFE000FFFFE0001A217FA01E>114 +D<00FF060007FFCE001F00FE003C003E0078001E0078000E00F0000E00F0000600F00006 +00F8000600F8000600FE000000FF8000007FFC00003FFFC0003FFFF0000FFFF80007FFFC +0000FFFE00000FFF000000FF0000003F80C0001F80C0000F80E0000780E0000780E00007 +80F0000780F0000700F8000F00FC000E00FE001C00F7807800E1FFE000C07F800019237E +A11E>I<00300000300000300000300000300000700000700000700000F00000F00001F0 +0001F00003F00007F0001FFFFEFFFFFEFFFFFE03F00003F00003F00003F00003F00003F0 +0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00303F00303F0 +0303F00303F00303F00303F00303F00303F00701F80601F80600FC0E007E1C001FF80007 +E0182F7FAD1E>I<03F0003F00FFF00FFF00FFF00FFF00FFF00FFF0007F0007F0003F000 +3F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F +0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F00 +03F0003F0003F0003F0003F0003F0003F0003F0003F0007F0003F0007F0003F0007F0003 +F000FF0001F000FF0001F801FF8000F803BFFC007E073FFC001FFE3FFC0007F83F002622 +7EA02B>IIII<7FFF807FF87FFF807FF87FFF807FF807F8001FC003F8000F8001F8000700 +01F800060000FC000C0000FC000C0000FE001C00007E001800007E001800003F00300000 +3F003000003F807000001F806000001FC0E000000FC0C000000FC0C0000007E180000007 +E180000007F380000003F300000003FB00000001FE00000001FE00000000FC00000000FC +00000000FC00000000780000000078000000003000000000300000000060000000006000 +000000E000000000C000000000C0000000018000007801800000FC03000000FC03000000 +FC06000000FC0E000000701C00000078380000001FF00000000FC000000025307F9F29> +I E /Fm 7 117 df<0000001F800000000000001F800000000000003FC0000000000000 +3FC00000000000007FE00000000000007FE00000000000007FE0000000000000FFF00000 +00000000FFF0000000000001FFF8000000000001FFF8000000000001FFF8000000000003 +FFFC000000000003FFFC000000000007FFFE000000000007CFFE000000000007CFFE0000 +0000000FCFFF00000000000F87FF00000000001F87FF80000000001F03FF80000000003F +03FFC0000000003E01FFC0000000003E01FFC0000000007E01FFE0000000007C00FFE000 +000000FC00FFF000000000F8007FF000000000F8007FF000000001F8007FF800000001F0 +003FF800000003F0003FFC00000003E0001FFC00000003E0001FFC00000007FFFFFFFE00 +000007FFFFFFFE0000000FFFFFFFFF0000000FFFFFFFFF0000001F800007FF8000001F00 +0003FF8000001F000003FF8000003F000003FFC000003E000001FFC000007E000001FFE0 +00007C000000FFE000007C000000FFE00000FC000000FFF00000F80000007FF000FFFFF0 +003FFFFFF0FFFFF0003FFFFFF0FFFFF0003FFFFFF0FFFFF0003FFFFFF03C347DB343>65 +D<007FFE000003FFFFE00007FFFFF8000FF00FFC001FF803FF001FF801FF001FF800FF80 +1FF800FFC01FF8007FC00FF0007FC007E0007FC00180007FC00000007FC000007FFFC000 +0FFFFFC000FFFFFFC003FFF07FC00FFF007FC01FF8007FC03FF0007FC07FE0007FC0FFC0 +007FC0FF80007FC0FF80007FC0FF80007FC0FF8000FFC0FFC000FFC07FC001FFC07FE003 +FFE03FF80FBFFF0FFFFF1FFF03FFFC0FFF007FE007FF28217EA02B>97 +D<01FC00000000FFFC00000000FFFC00000000FFFC00000000FFFC000000000FFC000000 +0007FC0000000007FC0000000007FC0000000007FC0000000007FC0000000007FC000000 +0007FC0000000007FC0000000007FC0000000007FC0000000007FC0000000007FC000000 +0007FC0000000007FC07FC000007FC7FFF800007FDFFFFE00007FFF00FF80007FFC007FC +0007FF0003FE0007FE0001FF0007FC0000FF8007FC0000FF8007FC0000FFC007FC00007F +C007FC00007FC007FC00007FE007FC00007FE007FC00007FE007FC00007FE007FC00007F +E007FC00007FE007FC00007FE007FC00007FE007FC00007FE007FC00007FC007FC00007F +C007FC0000FFC007FC0000FF8007FC0000FF8007FE0001FF0007FF0003FE0007FFC007FC +0007F3F01FF80007E1FFFFE00007C07FFF800007800FF800002B347EB331>I<0007FF80 +00003FFFF00000FFFFFC0003FE01FE0007FC03FF000FF803FF001FF003FF003FE003FF00 +3FE003FF007FE001FE007FC000FC007FC0003000FFC0000000FFC0000000FFC0000000FF +C0000000FFC0000000FFC0000000FFC0000000FFC0000000FFC00000007FC00000007FE0 +0000007FE00000003FE00007803FF00007801FF8000F800FF8001F0007FE003E0003FF80 +FC0000FFFFF800003FFFE0000007FF000021217DA027>I<01F81F80FFF87FF0FFF8FFF8 +FFF9E3FCFFFBC7FE0FFF87FE07FF07FE07FF07FE07FE07FE07FE03FC07FE01F807FE0060 +07FC000007FC000007FC000007FC000007FC000007FC000007FC000007FC000007FC0000 +07FC000007FC000007FC000007FC000007FC000007FC000007FC000007FC0000FFFFF000 +FFFFF000FFFFF000FFFFF0001F217EA024>114 D<00FFE1C007FFFFC00FFFFFC03F803F +C07E000FC07E0007C0FC0007C0FC0003C0FE0003C0FE0003C0FF800000FFFC0000FFFFE0 +007FFFFC007FFFFE003FFFFF800FFFFFC007FFFFE000FFFFE0000FFFF000007FF000000F +F0F00007F0F00003F0F80003F0F80003F0FC0003E0FE0007E0FF000FC0FFC01F80FFFFFF +00F9FFFC00E03FE0001C217DA023>I<003C0000003C0000003C0000003C0000003C0000 +007C0000007C0000007C000000FC000000FC000001FC000001FC000003FC000007FC0000 +1FFFFF80FFFFFF80FFFFFF80FFFFFF8007FC000007FC000007FC000007FC000007FC0000 +07FC000007FC000007FC000007FC000007FC000007FC000007FC000007FC000007FC0000 +07FC000007FC000007FC03C007FC03C007FC03C007FC03C007FC03C007FC03C007FC03C0 +07FE078003FE078001FF0F0000FFFE00003FFC00000FF0001A2F7EAE22>I +E /Fn 24 122 df<7FFFFFF8FFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFC7FFFFFF81E067C99 +27>45 D<1E007F807F80FFC0FFC0FFC0FFC07F807F801E000A0A728927>I<0001FE0000 +07FF80001FFFC0007FFFE000FFFFF001FF03F803FC01F807F000FC0FE01F7C0FC07FFE1F +80FFFE1F01FFFE3F03FFFE3E07F1FF7E07E0FF7C0FC07F7C0F803F7C0F803FFC1F803FF8 +1F001FF81F001FF81F001FF81F001FF81F001FF81F001FF81F001FF81F001FFC1F803F7C +0F803E7C0F803E7C0FC07E7E07E0FC3E07F1FC3F03FFF81F01FFF01F80FFE00FC07FC00F +E01F1E07F0003F03FC007F01FF03FF00FFFFFE007FFFFC001FFFF00007FFC00001FF0020 +2E7DAD27>64 D<03FFC000000FFFF000001FFFFC00003FFFFF00003FFFFF80003F80FF80 +003F801FC0001F000FC00004000FE000000007E000000007E000000FFFE000007FFFE000 +03FFFFE0000FFFFFE0001FFFFFE0003FFC07E0007FC007E0007F0007E000FE0007E000FC +0007E000FC0007E000FC0007E000FC0007E000FE000FE0007F001FE0007FC0FFE0003FFF +FFFF801FFFFFFFC00FFFFFFFC003FFF1FFC000FF807F8022207C9F27>97 +D<7FE0000000FFF0000000FFF0000000FFF00000007FF000000003F000000003F0000000 +03F000000003F000000003F000000003F000000003F000000003F000000003F000000003 +F0FF000003F3FFC00003FFFFF00003FFFFF80003FFFFFC0003FF81FE0003FE00FF0003FC +003F8003F8001F8003F8001FC003F0000FC003F0000FC003F0000FE003F00007E003F000 +07E003F00007E003F00007E003F00007E003F00007E003F0000FE003F0000FC003F8000F +C003F8001FC003FC003F8003FC007F8003FE00FF0003FF83FE0003FFFFFC0003FFFFF800 +03FFFFF00003F3FFC00001E0FE0000232E7FAD27>I<000FFF00007FFFC001FFFFE003FF +FFF007FFFFF00FF807F01FE007F03FC003E03F8000807F0000007E0000007E000000FE00 +0000FC000000FC000000FC000000FC000000FC000000FC000000FE0000007E0000007E00 +00007F0000F03F8001F83FC001F81FE003F80FF80FF007FFFFF003FFFFE001FFFFC0007F +FF00000FF8001D207B9F27>I<00003FF00000007FF80000007FF80000007FF80000003F +F800000001F800000001F800000001F800000001F800000001F800000001F800000001F8 +00000001F800000001F800000FE1F800007FFDF80001FFFFF80003FFFFF80007FFFFF800 +0FF83FF8001FE00FF8003FC007F8003F8003F8007F0003F8007E0001F8007E0001F800FE +0001F800FC0001F800FC0001F800FC0001F800FC0001F800FC0001F800FC0001F800FE00 +01F8007E0003F8007E0003F8007F0003F8003F0007F8003F800FF8001FE01FF8000FF03F +F80007FFFFFFC003FFFFFFE001FFFDFFE0007FF9FFE0001FE0FFC0232E7EAD27>I<000F +F800003FFE0000FFFF8003FFFFC007FFFFE00FFC0FF01FE003F81FC001F83F8001FC7F00 +00FC7E0000FC7E00007EFE00007EFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFCFC00 +0000FE0000007E0000007F0000003F00003C3F80007E1FC0007E1FF000FE0FFC07FC07FF +FFFC01FFFFF800FFFFF0003FFFC00007FE001F207D9F27>I<00001FF00000FFF80001FF +FC0003FFFE0007FFFE000FF0FE000FC0FE001FC07C001F8000001F8000001F8000001F80 +00001F8000001F80007FFFFFF0FFFFFFF8FFFFFFF8FFFFFFF87FFFFFF0001F8000001F80 +00001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80 +00001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80 +00001F8000001F80003FFFFFC07FFFFFE07FFFFFE07FFFFFE03FFFFFC01F2E7EAD27>I< +0000003F00001FC0FF80007FF3FFC001FFFFFFE003FFFFFFE007FFFFEFE00FF07F87E01F +C01FC3C01FC01FC0001F800FC0003F0007E0003F0007E0003F0007E0003F0007E0003F00 +07E0003F0007E0001F800FC0001FC01FC0001FC01FC0000FF07F80000FFFFF00000FFFFE +00001FFFFC00001F7FF000001F1FC000001F000000001F000000001F800000000FFFFF00 +000FFFFFE0000FFFFFF8001FFFFFFE003FFFFFFF003F8001FF007E00003F807C00000F80 +FC00000FC0F8000007C0F8000007C0F8000007C0F8000007C0FC00000FC07C00000F807F +00003F803F80007F003FF807FF001FFFFFFE0007FFFFF80003FFFFF00000FFFFC000000F +FC000023337EA027>I<7FE0000000FFF0000000FFF0000000FFF00000007FF000000003 +F000000003F000000003F000000003F000000003F000000003F000000003F000000003F0 +00000003F000000003F07F000003F1FFC00003F7FFF00003FFFFF00003FFFFF80003FFC1 +F80003FF01FC0003FE00FC0003FC00FC0003F800FC0003F800FC0003F000FC0003F000FC +0003F000FC0003F000FC0003F000FC0003F000FC0003F000FC0003F000FC0003F000FC00 +03F000FC0003F000FC0003F000FC0003F000FC0003F000FC0003F000FC0003F000FC007F +FF83FFE0FFFFC7FFF0FFFFC7FFF0FFFFC7FFF07FFF83FFE0242E7FAD27>I<000F000000 +1F8000003FC000003FC000003FC000003FC000001F8000000F0000000000000000000000 +000000000000000000000000000000000000003FFF80007FFFC0007FFFC0007FFFC0003F +FFC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC00000 +0FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC00000 +0FC000000FC000000FC000000FC000000FC0007FFFFFF0FFFFFFF0FFFFFFF8FFFFFFF07F +FFFFF01D2F7BAE27>I<00003C00007E0000FF0000FF0000FF0000FF00007E00003C0000 +0000000000000000000000000000000000000001FFFE03FFFF03FFFF03FFFF01FFFF0000 +3F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0000 +3F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0000 +3F00003F00003F00003F00003F00003F00003F00003F00003F00003F00007E38007E7C00 +FEFE01FCFE03FCFFFFF8FFFFF07FFFE03FFF8007FE0018407CAE27>I<7FE00000007FF0 +000000FFF00000007FF00000007FF000000001F000000001F000000001F000000001F000 +000001F000000001F000000001F000000001F000000001F000000001F03FFFC001F07FFF +E001F07FFFE001F07FFFE001F03FFFC001F003F80001F007F00001F00FE00001F01FC000 +01F03F800001F0FF000001F1FE000001F3FC000001F7F8000001FFFC000001FFFE000001 +FFFF000001FF3F000001FE1F800001FC0FC00001F80FE00001F007E00001F003F00001F0 +01F80001F001FC0001F000FE0001F0007E007FFFC1FFF07FFFC3FFF8FFFFE3FFF87FFFC3 +FFF87FFFC3FFF0252E80AD27>I<7FFF8000FFFFC000FFFFC000FFFFC0007FFFC000000F +C000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000F +C000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000F +C000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000F +C000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC0007FFF +FFF8FFFFFFFCFFFFFFFCFFFFFFFC7FFFFFF81E2E7CAD27>I<7F07C01F0000FF9FF07FC0 +00FFFFF9FFE000FFFFFFFFF0007FFFFFFFF0000FFC7FF1F8000FF03FC0F8000FE03F80F8 +000FC03F00F8000FC03F00F8000FC03F00F8000F803E00F8000F803E00F8000F803E00F8 +000F803E00F8000F803E00F8000F803E00F8000F803E00F8000F803E00F8000F803E00F8 +000F803E00F8000F803E00F8000F803E00F8000F803E00F8000F803E00F8000F803E00F8 +000F803E00F8007FF0FFC3FF00FFF8FFE3FF80FFF9FFE7FF80FFF8FFE3FF807FF0FFC3FF +002920819F27>I<7FE07F0000FFF1FFC000FFF7FFF000FFFFFFF0007FFFFFF80003FFC1 +F80003FF01FC0003FE00FC0003FC00FC0003F800FC0003F800FC0003F000FC0003F000FC +0003F000FC0003F000FC0003F000FC0003F000FC0003F000FC0003F000FC0003F000FC00 +03F000FC0003F000FC0003F000FC0003F000FC0003F000FC0003F000FC0003F000FC007F +FF83FFE0FFFFC7FFF0FFFFC7FFF0FFFFC7FFF07FFF83FFE024207F9F27>I<001FE00000 +7FF80001FFFE0003FFFF0007FFFF800FF03FC01FC00FE03F8007F03F0003F07F0003F87E +0001F87E0001F8FC0000FCFC0000FCFC0000FCFC0000FCFC0000FCFC0000FCFC0000FCFE +0001FC7E0001F87E0001F87F0003F83F8007F03F8007F01FE01FE00FF03FC007FFFF8003 +FFFF0001FFFE00007FF800001FE0001E207C9F27>I<7FE0FF0000FFF3FFC000FFFFFFF0 +00FFFFFFF8007FFFFFFC0003FF81FE0003FE00FF0003FC003F8003F8001F8003F8001FC0 +03F0000FC003F0000FC003F0000FE003F00007E003F00007E003F00007E003F00007E003 +F00007E003F00007E003F0000FE003F0000FC003F8000FC003F8001FC003FC003F8003FC +007F8003FE00FF0003FF83FE0003FFFFFC0003FFFFF80003FFFFF00003F3FFC00003F0FE +000003F000000003F000000003F000000003F000000003F000000003F000000003F00000 +0003F000000003F000000003F000000003F000000003F00000007FFF800000FFFFC00000 +FFFFC00000FFFFC000007FFF80000023317F9F27>I<7FFC03FC00FFFE0FFF00FFFE3FFF +80FFFE7FFFC07FFEFFFFC0007FFE1FC0007FF81FC0007FF00F80007FE00200007FC00000 +007F800000007F800000007F000000007F000000007E000000007E000000007E00000000 +7E000000007E000000007E000000007E000000007E000000007E000000007E000000007E +000000007E000000007E0000007FFFFF8000FFFFFFC000FFFFFFC000FFFFFFC0007FFFFF +800022207E9F27>114 D<00FFF38007FFFFC01FFFFFC03FFFFFC07FFFFFC07F803FC0FC +000FC0F8000FC0F8000FC0F8000780FC0000007F8000007FFC00003FFFF0001FFFFC0007 +FFFF0001FFFF80000FFFC000003FE0000007E0780003F0FC0001F0FC0001F0FE0001F0FE +0003F0FF0007E0FFE01FE0FFFFFFC0FFFFFF80FFFFFF00FBFFFC00707FF0001C207B9F27 +>I<003C0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E +00007FFFFFF0FFFFFFF8FFFFFFF8FFFFFFF87FFFFFF0007E0000007E0000007E0000007E +0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E +0000007E0000007E0018007E007E007E007E007E007E007E007E007E00FE003F00FC003F +83FC003FFFF8001FFFF0000FFFE00003FFC00000FF001F297EA827>I<7FE01FF800FFF0 +3FFC00FFF03FFC00FFF03FFC007FF01FFC0003F000FC0003F000FC0003F000FC0003F000 +FC0003F000FC0003F000FC0003F000FC0003F000FC0003F000FC0003F000FC0003F000FC +0003F000FC0003F000FC0003F000FC0003F000FC0003F000FC0003F000FC0003F000FC00 +03F001FC0003F001FC0003F003FC0003FC0FFC0001FFFFFFE001FFFFFFF000FFFFFFF000 +3FFEFFF0000FF87FE024207F9F27>I<7FFC0FFF80FFFE1FFFC0FFFE1FFFC0FFFE1FFFC0 +7FFC0FFF8007E000F80003E001F80003E001F00003F001F00001F003F00001F803E00000 +F803E00000F803E00000FC07C000007C07C000007C07C000007E0F8000003E0F8000003E +0F8000001F0F0000001F1F0000001F1F0000000F1F0000000F9E0000000FBE00000007BE +00000007FC00000003FC00000003FC00000003F800000001F800000001F800000001F000 +000001F000000003F000000003E000000003E000000007E000000007C000000807C00000 +3E0FC000007F0F8000007F1F8000007E7F0000007FFE0000003FFC0000003FF80000001F +F000000007C000000022317E9F27>121 D E /Fo 24 122 df<1E007F80FF80FFC0FFC0 +FFE0FFE0FFE07FE01E60006000600060006000E000C000C000C001C00180038003000700 +06000E001C003800700060000B1D78891B>44 D<000030000000F0000001F0000003F000 +001FF00000FFF000FFFFF000FFE7F000FF07F0000007F0000007F0000007F0000007F000 +0007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F000 +0007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F000 +0007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F000 +0007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F000 +0007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F000 +0007F0000007F0000007F000000FF800001FFC007FFFFFFF7FFFFFFF7FFFFFFF204278C1 +31>49 D<0003FE0000001FFFC000007FFFF00001F80FFC0003C001FE00078000FF000E00 +007F801C00003FC01C00001FE03800001FF03000000FF07000000FF860000007F86C0000 +07F8FF000007FCFF800007FCFFC00007FCFFC00003FCFFC00003FCFFC00003FCFFC00003 +FC7F800007FC3F000007FC00000007FC00000007F800000007F80000000FF80000000FF0 +0000001FF00000001FE00000001FE00000003FC00000007F800000007F00000000FF0000 +0000FE00000001FC00000003F800000007F000000007E00000000FC00000001F80000000 +3F000000007C00000000F800000000F000000001E000000003C000000007800000000F00 +000C001E00000C003C00000C0038000018007000001800E000001801C000001803800000 +3807000000300E000000701FFFFFFFF01FFFFFFFF03FFFFFFFF07FFFFFFFF0FFFFFFFFE0 +FFFFFFFFE0FFFFFFFFE026427BC131>I<0001FF0000000FFFE000003FFFFC0000FE01FE +0001F0007F8003C0003FC00700001FE00E00001FE00E00000FF00FE0000FF01FF0000FF8 +1FF0000FF81FF00007F81FF80007F81FF00007F81FF00007F80FE0000FF803C0000FF800 +00000FF00000000FF00000000FF00000001FE00000001FE00000003FC00000003F800000 +007F00000000FE00000001FC00000003F00000001FC000000FFF0000000FFFF000000001 +FC000000007F000000003F800000001FC00000000FE00000000FF000000007F800000007 +FC00000003FC00000003FE00000003FE00000001FE00000001FF00000001FF00000001FF +1E000001FF7F800001FFFFC00001FFFFC00001FFFFC00001FFFFC00001FFFFC00001FEFF +800003FEFF800003FE7E000003FC70000007FC30000007F83800000FF81C00000FF00E00 +001FE00780003FC003E0007F8001FE01FE00007FFFF800000FFFE0000001FF000028447C +C131>I<0000FF00000007FFE000001FFFF800007F80FC0000FC007E0001F8003F0003F0 +001F8007E0000FC00FE00007E01FC00007E01FC00003F03F800003F03F800003F87F8000 +01F87F000001FC7F000001FCFF000001FCFF000001FCFF000001FEFF000000FEFF000000 +FEFF000000FEFF000000FEFF000000FEFF000000FFFF000000FFFF000000FFFF000000FF +7F000001FF7F000001FF7F000001FF3F800001FF3F800003FF1F800003FF1FC00003FF0F +C00007FF07E00006FF07E0000EFF03F0001CFF01F80038FF007C0070FF003F01E0FF000F +FF80FE0001FE00FE00000000FE00000001FE00000001FC00000001FC00000001FC000000 +01FC00000003F800000003F800000003F00F800007F01FC00007E03FE0000FE03FE0000F +C03FE0001F803FE0001F803FC0003F003F80007E001E0000FC001C0001F8000F0003F000 +07E01FE00003FFFF800000FFFE0000001FF0000028447CC131>57 +D70 D75 D77 +D82 D<0001FF000300000FFF +E00700003FFFF8070000FE00FE0F0001F8001F0F0007E000079F0007C00003DF000F8000 +01FF001F000000FF003F0000007F003E0000003F007E0000003F007E0000001F007C0000 +001F00FC0000000F00FC0000000F00FC0000000700FC0000000700FC0000000700FE0000 +000700FE0000000300FE0000000300FF0000000300FF00000003007F80000000007FC000 +0000007FE0000000003FF8000000003FFE000000001FFFE00000000FFFFE00000007FFFF +E0000003FFFFFC000001FFFFFF000000FFFFFFC000003FFFFFF000000FFFFFF8000001FF +FFFC0000001FFFFE00000001FFFE000000001FFF0000000003FF8000000001FF80000000 +00FFC0000000007FC0000000003FC0000000001FC0000000001FE0C00000000FE0C00000 +000FE0C00000000FE0C000000007E0C000000007E0C000000007E0E000000007E0E00000 +0007E0E000000007E0F000000007C0F00000000FC0F80000000FC0F80000000F80FC0000 +001F80FE0000001F00FF0000003F00FF8000007E00FBC00000FC00F9F00001F800F07C00 +03F000F03FC00FE000E00FFFFF8000E001FFFE0000C0003FF000002B487BC536>I<0007 +FC000000003FFF80000000F80FE0000003C003F00000070001F800000E0000FC00000FC0 +007E00001FE0007F00001FF0003F80001FF0003F80001FF0003F80001FF0001FC0001FF0 +001FC0000FE0001FC0000380001FC0000000001FC0000000001FC0000000001FC0000000 +001FC00000000FFFC0000001FFFFC000000FFE1FC000003FC01FC00000FF001FC00003FC +001FC00007F8001FC0000FF0001FC0001FE0001FC0003FC0001FC0007FC0001FC0007F80 +001FC0007F80001FC060FF00001FC060FF00001FC060FF00001FC060FF00003FC060FF00 +003FC060FF00003FC060FF80007FC0607F8000EFC0607FC000C7E0C03FC001C7E0C01FE0 +0783F1C007F81E03FF8001FFFC01FF00001FE0007C002B2E7CAC31>97 +D<01FC00000000FFFC00000000FFFC00000000FFFC0000000007FC0000000003FC000000 +0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000 +0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000 +0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000 +0001FC0000000001FC03FC000001FC0FFF800001FC3C07E00001FC7001F80001FDE0007E +0001FD80003F0001FF80001F8001FF00001FC001FE00000FE001FC000007E001FC000007 +F001FC000007F001FC000003F801FC000003F801FC000003FC01FC000003FC01FC000001 +FC01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001 +FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001 +FC01FC000003FC01FC000003FC01FC000003F801FC000003F801FC000007F001FC000007 +F001FE00000FE001FE00000FC001FF00001FC001FB00003F8001F380007E0001E1C000FC +0001E0F001F80001C03C07E00001801FFF8000000003FC00002F467DC436>I<00007F80 +000003FFF000000FC07C00003F000F0000FC00038001F80001C003F8000FC007F0001FE0 +07E0003FE00FE0003FE01FC0003FE01FC0003FE03F80003FE03F80001FC07F800007007F +800000007F800000007F00000000FF00000000FF00000000FF00000000FF00000000FF00 +000000FF00000000FF00000000FF00000000FF00000000FF00000000FF000000007F0000 +00007F800000007F800000003F800000003F800000303FC00000301FC00000700FE00000 +600FE00000E007F00000C003F80001C001F800038000FC000700003F001E00001FC07800 +0007FFF0000000FF8000242E7DAC2B>I<000000007F000000003FFF000000003FFF0000 +00003FFF0000000001FF0000000000FF00000000007F00000000007F00000000007F0000 +0000007F00000000007F00000000007F00000000007F00000000007F00000000007F0000 +0000007F00000000007F00000000007F00000000007F00000000007F00000000007F0000 +0000007F00000000007F00000000007F00000000007F0000007F807F000003FFF07F0000 +0FC07C7F00003F000E7F00007E00077F0000FC0003FF0003F80001FF0007F00000FF0007 +E00000FF000FE000007F001FC000007F001FC000007F003F8000007F003F8000007F007F +8000007F007F8000007F007F0000007F00FF0000007F00FF0000007F00FF0000007F00FF +0000007F00FF0000007F00FF0000007F00FF0000007F00FF0000007F00FF0000007F00FF +0000007F00FF0000007F007F0000007F007F8000007F007F8000007F003F8000007F003F +8000007F001FC000007F001FC000007F000FC00000FF000FE00000FF0007F00001FF0003 +F00003FF0001F800077F8000FC000E7FC0003F001C7FFE000FC0F87FFE0003FFE07FFE00 +007F007F002F467DC436>I<0001FE00000007FFC000001F03F000007E00FC0000FC007E +0001F8003F0003F0003F0007E0001F800FE0001FC00FC0000FC01FC0000FC03F80000FE0 +3F800007E03F800007E07F800007F07F000007F07F000007F0FF000007F0FF000007F0FF +000007F0FFFFFFFFF0FFFFFFFFF0FF00000000FF00000000FF00000000FF00000000FF00 +000000FF000000007F000000007F000000007F800000007F800000003F800000003F8000 +00301FC00000301FC00000700FC00000600FE00000E007F00000C003F00001C001F80003 +8000FC000700003E001E00001F80F8000003FFE0000000FF0000242E7DAC2B>I<01FC00 +000000FFFC00000000FFFC00000000FFFC0000000007FC0000000003FC0000000001FC00 +00000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00 +00000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00 +00000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00 +00000001FC01FE000001FC07FFC00001FC1E07F00001FC3801F80001FC7001FC0001FCE0 +00FC0001FDC000FE0001FD8000FE0001FF80007F0001FF00007F0001FF00007F0001FE00 +007F0001FE00007F0001FE00007F0001FC00007F0001FC00007F0001FC00007F0001FC00 +007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00 +007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00 +007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00 +007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0003FE0000FF80FFFFF8 +3FFFFEFFFFF83FFFFEFFFFF83FFFFE2F457DC436>104 D<01E00007F80007F8000FFC00 +0FFC000FFC000FFC0007F80007F80001E000000000000000000000000000000000000000 +00000000000000000000000000000000000000000001FC00FFFC00FFFC00FFFC0007FC00 +03FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00 +01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00 +01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0003FE00 +FFFFF8FFFFF8FFFFF815437DC21C>I<01FC00000000FFFC00000000FFFC00000000FFFC +0000000007FC0000000003FC0000000001FC0000000001FC0000000001FC0000000001FC +0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC +0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC +0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC001FFFE001FC +001FFFE001FC001FFFE001FC000FFF0001FC0007F80001FC0007E00001FC0007C00001FC +0007800001FC000E000001FC001C000001FC0038000001FC0070000001FC00E0000001FC +01C0000001FC0380000001FC0700000001FC0F00000001FC3F80000001FC7FC0000001FC +FFC0000001FDCFE0000001FF8FF0000001FF07F0000001FE03F8000001FC03FC000001FC +01FC000001FC00FE000001FC00FF000001FC007F000001FC003F800001FC003FC00001FC +001FC00001FC000FE00001FC000FF00001FC0007F00001FC0007F80001FC0003FC0001FC +0003FE0001FC0003FF0003FE0007FF80FFFFF81FFFF8FFFFF81FFFF8FFFFF81FFFF82D45 +7DC433>107 D<01FC00FFFC00FFFC00FFFC0007FC0003FC0001FC0001FC0001FC0001FC +0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC +0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC +0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC +0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC +0001FC0001FC0001FC0001FC0001FC0001FC0001FC0003FE00FFFFF8FFFFF8FFFFF81545 +7DC41C>I<01FC03FC0000FFFC0FFF8000FFFC3C07E000FFFC7001F80007FDE000FE0001 +FD80007F0001FF80003F8001FF00001FC001FE00001FE001FC00000FE001FC00000FF001 +FC000007F001FC000007F801FC000003F801FC000003FC01FC000003FC01FC000003FC01 +FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01 +FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000003FC01 +FC000003FC01FC000003FC01FC000007F801FC000007F801FC000007F001FC00000FF001 +FE00000FE001FE00001FC001FF00003FC001FF00003F8001FF80007E0001FDC000FC0001 +FCF003F80001FC3C0FE00001FC1FFF800001FC03FC000001FC0000000001FC0000000001 +FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001 +FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000003 +FE00000000FFFFF8000000FFFFF8000000FFFFF80000002F3F7DAB36>112 +D<03F803F0FFF81FFCFFF83C3EFFF8707F07F8E0FF03F9C0FF01F980FF01FB80FF01FB00 +7E01FB003C01FF000001FE000001FE000001FE000001FE000001FC000001FC000001FC00 +0001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00 +0001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00 +0001FC000001FC000001FC000001FC000003FF0000FFFFFE00FFFFFE00FFFFFE00202C7D +AB26>114 D<003FE01801FFFC3807E01F780F0003F81E0001F83C0000F87C0000787800 +0078F8000038F8000038F8000018F8000018FC000018FC000018FE000018FF8000007FC0 +00007FFC00003FFFE0001FFFFC000FFFFF0007FFFFC003FFFFE000FFFFF0001FFFF80000 +FFF800000FFC000003FCC00001FEC00000FEC000007EE000007EE000003EE000003EF000 +003EF000003EF000003EF800003CFC00007CFC000078FE0000F8FF0001F0F38003E0F1F0 +0F80E07FFE00C00FF0001F2E7DAC26>I<01FC00007F00FFFC003FFF00FFFC003FFF00FF +FC003FFF0007FC0001FF0003FC0000FF0001FC00007F0001FC00007F0001FC00007F0001 +FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001 +FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001 +FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001 +FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC0000FF0001 +FC0000FF0001FC0000FF0001FC0001FF0001FC0001FF0000FC0001FF0000FE0003FF0000 +7E00077F80007F000E7FC0003F001C7FFE000FC0787FFE0003FFF07FFE00007F807F002F +2D7DAB36>117 D121 +D E /Fp 17 120 df<000000000078000000000000007800000000000000F80000000000 +0001F800000000000001F800000000000003F800000000000007F800000000000007F800 +00000000000FF80000000000001FF80000000000001FF80000000000003FF80000000000 +003FF80000000000007FF8000000000000FFF8000000000000EFF8000000000001EFF800 +0000000003CFF80000000000038FF80000000000078FF80000000000070FF80000000000 +0E0FF800000000001E0FF800000000001C0FF800000000003C0FF80000000000780FF800 +00000000700FF80000000000F00FF80000000000E00FF80000000001C00FF80000000003 +C00FF80000000003800FF80000000007800FF8000000000F000FF8000000000E000FF800 +0000001E000FF8000000001C000FF80000000038000FF80000000078000FF80000000070 +000FF800000000F0000FF800000001E0000FF800000001C0000FF800000003C0000FF800 +00000380000FF80000000700000FF80000000F00000FF80000000E00000FF80000001E00 +000FF80000003C00000FF80000003800000FF80000007800000FF8000000F000000FF800 +0000E000000FF8000001E000000FF8000001C000000FF8000003C000000FF80000078000 +000FF80000070000000FF800000F0000000FF800001E0000000FF800001C0000000FF800 +003C0000000FF80000380000000FF80000700000000FF80000F00000000FF80000FFFFFF +FFFFFFFFE0FFFFFFFFFFFFFFE0FFFFFFFFFFFFFFE0FFFFFFFFFFFFFFE0000000000FF800 +00000000000FF80000000000000FF80000000000000FF80000000000000FF80000000000 +000FF80000000000000FF80000000000000FF80000000000000FF80000000000000FF800 +00000000000FF80000000000000FF80000000000000FF80000000000000FF80000000000 +000FF80000000000000FF80000000000000FF80000000000000FF80000000000000FF800 +00000000001FFC0000000000007FFF0000000001FFFFFFFFC0000001FFFFFFFFC0000001 +FFFFFFFFC0000001FFFFFFFFC03B5F7DDE42>52 D<000003FF80000000001FFFF8000000 +00FFFFFE00000003FFFFFF80000007FE00FFE000001FE0001FF000003F800007FC00007E +000001FE0000FC000000FF0001F80000007F0001F00000003F8003E00000001FC007E000 +00000FC007C00000000FE00FC000000007E00FC000000007E00F8000000007F01F800000 +0003F01F8000000003F01F8000000003F01F8000000003F01F8000000003F01FC0000000 +03F01FC000000003F01FE000000007F01FE000000007E01FF000000007E00FF80000000F +E00FFC0000000FC00FFE0000000FC007FF0000001F8007FFC000003F8003FFE000003F00 +03FFF800007E0001FFFC0000FC0000FFFE0001F80000FFFF8003F000007FFFC00FE00000 +3FFFF01F8000000FFFF83F00000007FFFEFC00000001FFFFF000000000FFFFE000000000 +3FFFE0000000001FFFF8000000000FFFFC000000001FFFFE000000007FFFFF80000001F8 +7FFFC0000003F03FFFF000000FC00FFFF800001F8007FFFC00003F0001FFFF00007E0000 +FFFF8000FC00003FFF8001F800001FFFC003F000000FFFE007E0000003FFF00FC0000001 +FFF00FC00000007FF81F800000003FF83F800000001FF83F000000000FFC7F0000000007 +FC7E0000000003FC7E0000000003FE7E0000000001FEFE0000000000FEFC0000000000FE +FC0000000000FEFC00000000007EFC00000000007EFC00000000007EFC00000000007EFC +00000000007EFC00000000007EFE00000000007C7E0000000000FC7E0000000000FC7F00 +00000000F83F0000000001F83F8000000001F01F8000000003F01FC000000003E00FE000 +000007E007F00000000FC007F80000001F8003FC0000003F0001FE000000FE00007F8000 +01FC00003FE0000FF000000FFE007FE0000007FFFFFF80000001FFFFFE000000003FFFF8 +0000000003FF80000037607BDD42>56 D<00000000007FF800000060000000000FFFFF80 +0000E0000000007FFFFFE00000E000000003FFFFFFFC0001E00000000FFFE003FE0001E0 +0000003FFE00003F8003E0000000FFF0000007C003E0000001FFC0000003F007E0000007 +FF00000000F80FE000000FFC000000007C0FE000001FF8000000001E1FE000007FE00000 +00000F1FE00000FFC00000000007BFE00001FF800000000003FFE00003FF000000000003 +FFE00007FE000000000001FFE0000FFC000000000000FFE0000FF80000000000007FE000 +1FF00000000000007FE0003FF00000000000003FE0007FE00000000000001FE0007FC000 +00000000001FE000FFC00000000000000FE001FF800000000000000FE001FF8000000000 +00000FE003FF0000000000000007E003FF0000000000000007E007FE0000000000000003 +E007FE0000000000000003E00FFC0000000000000003E00FFC0000000000000001E01FFC +0000000000000001E01FFC0000000000000001E01FF80000000000000001E03FF8000000 +0000000001E03FF80000000000000000E03FF00000000000000000E03FF0000000000000 +0000E07FF00000000000000000E07FF00000000000000000007FF0000000000000000000 +7FF00000000000000000007FF0000000000000000000FFE0000000000000000000FFE000 +0000000000000000FFE0000000000000000000FFE0000000000000000000FFE000000000 +0000000000FFE0000000000000000000FFE0000000000000000000FFE000000000000000 +0000FFE0000000000000000000FFE0000000000000000000FFE0000000000000000000FF +E0000000000000000000FFE0000000000000000000FFE0000000000000000000FFE00000 +00000000000000FFE00000000000000000007FF00000000000000000007FF00000000000 +000000007FF00000000000000000007FF00000000000000000007FF00000000000000000 +003FF00000000000000000003FF00000000000000000E03FF80000000000000000E03FF8 +0000000000000000E01FF80000000000000000E01FFC0000000000000000E01FFC000000 +0000000000E00FFC0000000000000001E00FFC0000000000000001C007FE000000000000 +0001C007FE0000000000000001C003FF0000000000000001C003FF0000000000000003C0 +01FF80000000000000038001FF80000000000000078000FFC00000000000000780007FC0 +0000000000000700007FE00000000000000F00003FF00000000000001E00001FF0000000 +0000001E00000FF80000000000003C00000FFC00000000000038000007FE000000000000 +78000003FF000000000000F0000001FF800000000001E0000000FFC00000000003C00000 +007FE00000000007C00000001FF8000000000F800000000FFC000000001F0000000007FF +000000007C0000000001FFC0000001F80000000000FFF0000007F000000000003FFE0000 +1FC000000000000FFFE001FF00000000000003FFFFFFFC000000000000007FFFFFF00000 +00000000000FFFFF8000000000000000007FF80000000053667AE360>67 +D<000007FF0000030000003FFFF00007000001FFFFFC0007000007FFFFFF000F00000FFC +00FFC00F00003FE0000FF01F00007F800003F81F0000FE000000FC3F0001FC0000007E3F +0003F80000001F7F0007F00000000FFF000FE000000007FF000FC000000007FF001FC000 +000003FF001F8000000001FF003F8000000000FF003F0000000000FF007F00000000007F +007F00000000007F007E00000000003F007E00000000003F00FE00000000003F00FE0000 +0000001F00FE00000000001F00FE00000000001F00FE00000000000F00FE00000000000F +00FF00000000000F00FF00000000000F00FF00000000000F00FF80000000000700FF8000 +00000007007FC00000000007007FC00000000007007FE00000000000003FF00000000000 +003FF80000000000003FFC0000000000001FFE0000000000001FFF8000000000000FFFE0 +000000000007FFFC000000000007FFFFC00000000003FFFFF80000000001FFFFFF800000 +0000FFFFFFF8000000007FFFFFFF800000001FFFFFFFE00000000FFFFFFFF800000003FF +FFFFFE00000000FFFFFFFF800000001FFFFFFFC000000001FFFFFFE0000000003FFFFFF0 +0000000003FFFFF800000000003FFFFC000000000003FFFE0000000000007FFE00000000 +00001FFF0000000000000FFF80000000000003FF80000000000001FFC0000000000000FF +C0000000000000FFC00000000000007FE00000000000003FE00000000000003FE0000000 +0000001FE0E000000000001FF0E000000000000FF0E000000000000FF0E000000000000F +F0E000000000000FF0E0000000000007F0E0000000000007F0F0000000000007F0F00000 +00000007F0F0000000000007F0F0000000000007F0F8000000000007F0F8000000000007 +E0F800000000000FE0FC00000000000FE0FC00000000000FC0FE00000000000FC0FF0000 +0000001FC0FF00000000001F80FF80000000003F80FFC0000000003F00FFE0000000007F +00FFF000000000FE00FEF800000000FC00FEFC00000001F800FC7F00000003F800FC1F80 +00000FF000F80FE000001FE000F807FC00007F8000F001FFE003FF0000F0007FFFFFFC00 +00E0001FFFFFF00000E00003FFFFC00000C000001FFE0000003C667AE349>83 +D85 +D<000001FF80000000000FFFF8000000003FFFFE00000000FF007F80000003FC0007E000 +0007F00001F000001FE000007800003FC000003C00007F8000001E0000FF0000000F0001 +FE0000001F0001FC000000FF0003FC000001FF8007F8000003FF8007F8000003FF800FF0 +000003FF800FF0000003FF801FE0000003FF801FE0000003FF803FE0000001FF003FC000 +00007C003FC000000000007FC000000000007FC000000000007FC000000000007F800000 +000000FF800000000000FF800000000000FF800000000000FF800000000000FF80000000 +0000FF800000000000FF800000000000FF800000000000FF800000000000FF8000000000 +00FF800000000000FF800000000000FF8000000000007F8000000000007FC00000000000 +7FC000000000007FC000000000007FC000000000003FC000000000003FE000000000003F +E000000000001FE000000001C01FF000000001C00FF000000003C00FF8000000038007F8 +000000038003FC000000078003FE000000070001FE0000000F0000FF0000001E00007F80 +00003C00003FC000007800001FE00000F000000FF80001E0000003FC0007C0000000FF80 +3F800000003FFFFE000000000FFFF80000000001FF80000032417CBF3A>99 +D<0000000000001E000000000000003FFE00000000000007FFFE00000000000007FFFE00 +000000000007FFFE00000000000007FFFE000000000000000FFE0000000000000003FE00 +00000000000003FE0000000000000001FE0000000000000001FE0000000000000001FE00 +00000000000001FE0000000000000001FE0000000000000001FE0000000000000001FE00 +00000000000001FE0000000000000001FE0000000000000001FE0000000000000001FE00 +00000000000001FE0000000000000001FE0000000000000001FE0000000000000001FE00 +00000000000001FE0000000000000001FE0000000000000001FE0000000000000001FE00 +00000000000001FE0000000000000001FE0000000000000001FE0000000000000001FE00 +00000000000001FE0000000000000001FE0000000000000001FE0000000000000001FE00 +00000000000001FE0000000000FF8001FE000000000FFFF801FE000000003FFFFE01FE00 +000000FF803F81FE00000003FC0007C1FE00000007F80001E1FE0000001FE00000F9FE00 +00003FC000007DFE0000007F8000003DFE000000FF0000001FFE000001FE0000000FFE00 +0001FC00000007FE000003FC00000007FE000007F800000003FE000007F000000001FE00 +000FF000000001FE00001FF000000001FE00001FE000000001FE00001FE000000001FE00 +003FE000000001FE00003FC000000001FE00007FC000000001FE00007FC000000001FE00 +007FC000000001FE00007FC000000001FE00007F8000000001FE0000FF8000000001FE00 +00FF8000000001FE0000FF8000000001FE0000FF8000000001FE0000FF8000000001FE00 +00FF8000000001FE0000FF8000000001FE0000FF8000000001FE0000FF8000000001FE00 +00FF8000000001FE0000FF8000000001FE0000FF8000000001FE0000FF8000000001FE00 +007F8000000001FE00007FC000000001FE00007FC000000001FE00007FC000000001FE00 +003FC000000001FE00003FC000000001FE00003FE000000001FE00001FE000000001FE00 +001FE000000001FE00000FF000000003FE00000FF000000003FE000007F800000007FE00 +0003F800000007FE000003FC0000000FFE000001FE0000001FFE000000FE0000003DFE00 +00007F0000003DFE0000003F800000F9FF0000001FC00001F1FF0000000FF00003C1FFC0 +000007F8000F81FFFF800001FF007F01FFFF8000007FFFFC01FFFF8000001FFFE001FFFF +80000001FF0001FF000041657CE349>I<000003FE00000000001FFFE000000000FFFFF8 +00000001FE03FE00000007F0007F8000000FE0003FC000003FC0001FE000007F00000FF0 +0000FF000007F80000FE000003F80001FC000003FC0003F8000001FC0007F8000001FE00 +07F0000000FE000FF0000000FF000FF00000007F001FE00000007F001FE00000007F803F +E00000007F803FC00000003F803FC00000003F807FC00000003FC07FC00000003FC07FC0 +0000003FC07F800000003FC07F800000003FC0FF800000003FC0FFFFFFFFFFFFC0FFFFFF +FFFFFFC0FFFFFFFFFFFFC0FF800000000000FF800000000000FF800000000000FF800000 +000000FF800000000000FF800000000000FF800000000000FF800000000000FF80000000 +00007F8000000000007FC000000000007FC000000000007FC000000000003FC000000000 +003FC000000000003FE000000000001FE000000000001FE000000001C00FF000000001C0 +0FF000000003C007F8000000038007F8000000038003FC000000078001FC0000000F0001 +FE0000000E0000FF0000001E00007F8000003C00003FC000007800001FE00000F0000007 +F00003E0000003FC0007C0000000FF803F000000003FFFFC000000000FFFF00000000001 +FF80000032417CBF3A>I<0000000000003F80000003FC0001FFE000003FFFC007FFF000 +00FFFFF01FC1F80003FC03FC3E03F80007F000FE7803F8000FE0007FE003F8001FC0003F +C003F8003F80001FC001F0007F00000FE0000000FE000007F0000000FE000007F0000001 +FC000003F8000001FC000003F8000003FC000003FC000003FC000003FC000003F8000001 +FC000007F8000001FE000007F8000001FE000007F8000001FE000007F8000001FE000007 +F8000001FE000007F8000001FE000007F8000001FE000007F8000001FE000007F8000001 +FE000007F8000001FE000003F8000001FC000003FC000003FC000003FC000003FC000001 +FC000003F8000001FC000003F8000000FE000007F0000000FE000007F00000007F00000F +E00000003F80001FC00000001FC0003F800000003FE0007F0000000037F000FE00000000 +73FC03FC0000000060FFFFF000000000E03FFFC000000000E003FC0000000001C0000000 +00000001C000000000000001C000000000000001C000000000000001C000000000000001 +E000000000000001E000000000000001F000000000000001F000000000000001F8000000 +00000000FC00000000000000FF00000000000000FFFFFFFE000000007FFFFFFFF0000000 +3FFFFFFFFE0000001FFFFFFFFF8000000FFFFFFFFFE000000FFFFFFFFFF000003FFFFFFF +FFFC0000FE000001FFFE0003F80000001FFE0007E000000003FF000FC000000000FF801F +80000000007F803F80000000003FC03F00000000001FC07E00000000001FC07E00000000 +000FE0FE00000000000FE0FC000000000007E0FC000000000007E0FC000000000007E0FC +000000000007E0FC000000000007E0FC000000000007E0FE00000000000FE07E00000000 +000FC07E00000000000FC07F00000000001FC03F80000000003F801FC0000000007F000F +C0000000007E0007F000000001FC0003F800000003F80001FC00000007F000007F000000 +1FC000003FE00000FF8000000FFE000FFE00000001FFFFFFF0000000003FFFFF80000000 +0001FFF00000003D5E7DBF42>103 D<0003C000000000000007FFC0000000000000FFFF +C0000000000000FFFFC0000000000000FFFFC0000000000000FFFFC000000000000001FF +C0000000000000007FC0000000000000007FC0000000000000003FC0000000000000003F +C0000000000000003FC0000000000000003FC0000000000000003FC0000000000000003F +C0000000000000003FC0000000000000003FC0000000000000003FC0000000000000003F +C0000000000000003FC0000000000000003FC0000000000000003FC0000000000000003F +C0000000000000003FC0000000000000003FC0000000000000003FC0000000000000003F +C0000000000000003FC0000000000000003FC0000000000000003FC0000000000000003F +C0000000000000003FC0000000000000003FC0000000000000003FC0000000000000003F +C0000000000000003FC0000000000000003FC0000000000000003FC0007FE0000000003F +C003FFFC000000003FC00FFFFF000000003FC03F00FFC00000003FC078001FE00000003F +C0F0000FF00000003FC1C00007F80000003FC3800007FC0000003FC7000003FC0000003F +CE000003FE0000003FCE000001FE0000003FDC000001FE0000003FD8000001FE0000003F +F8000000FF0000003FF0000000FF0000003FF0000000FF0000003FF0000000FF0000003F +E0000000FF0000003FE0000000FF0000003FE0000000FF0000003FC0000000FF0000003F +C0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003F +C0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003F +C0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003F +C0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003F +C0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003F +C0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003F +C0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003F +C0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003F +C0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000007F +E0000001FF800000FFF0000003FFC000FFFFFFF003FFFFFFC0FFFFFFF003FFFFFFC0FFFF +FFF003FFFFFFC0FFFFFFF003FFFFFFC042647DE349>I<003C000000FF000001FF800003 +FFC00003FFC00003FFC00003FFC00003FFC00003FFC00001FF800000FF0000003C000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000003C00007FFC0007FFFC0007FFFC0007FFFC0007FFFC00001FFC00000 +7FC000007FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000 +3FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000 +3FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000 +3FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000 +3FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000 +3FC000003FC000003FC000003FC000003FC000007FE00000FFF000FFFFFFE0FFFFFFE0FF +FFFFE0FFFFFFE01B5F7DDE23>I<0003C000FFC0000007FE00000007FFC003FFF800001F +FFC00000FFFFC00FFFFE00007FFFF00000FFFFC03F00FF8001F807FC0000FFFFC078003F +C003C001FE0000FFFFC1E0001FE00F0000FF000001FFC3C0000FF01E00007F8000007FC3 +800007F81C00003FC000007FC7000007F83800003FC000003FCE000003FC7000001FE000 +003FCC000003FC6000001FE000003FDC000003FCE000001FE000003FD8000003FCC00000 +1FE000003FF8000001FFC000000FF000003FF0000001FF8000000FF000003FF0000001FF +8000000FF000003FE0000001FF0000000FF000003FE0000001FF0000000FF000003FE000 +0001FF0000000FF000003FE0000001FF0000000FF000003FC0000001FE0000000FF00000 +3FC0000001FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE0000000F +F000003FC0000001FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE00 +00000FF000003FC0000001FE0000000FF000003FC0000001FE0000000FF000003FC00000 +01FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE0000000FF000003F +C0000001FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE0000000FF0 +00003FC0000001FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE0000 +000FF000003FC0000001FE0000000FF000003FC0000001FE0000000FF000003FC0000001 +FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE0000000FF000003FC0 +000001FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE0000000FF000 +003FC0000001FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE000000 +0FF000003FC0000001FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE +0000000FF000003FC0000001FE0000000FF000003FC0000001FE0000000FF000003FC000 +0001FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE0000000FF00000 +7FE0000003FF0000001FF80000FFF0000007FF8000003FFC00FFFFFFF007FFFFFF803FFF +FFFCFFFFFFF007FFFFFF803FFFFFFCFFFFFFF007FFFFFF803FFFFFFCFFFFFFF007FFFFFF +803FFFFFFC663F7CBE6F>109 D<0003C0007FE000000007FFC003FFFC000000FFFFC00F +FFFF000000FFFFC03F00FFC00000FFFFC078001FE00000FFFFC0F0000FF0000001FFC1C0 +0007F80000007FC3800007FC0000007FC7000003FC0000003FCE000003FE0000003FCE00 +0001FE0000003FDC000001FE0000003FD8000001FE0000003FF8000000FF0000003FF000 +0000FF0000003FF0000000FF0000003FF0000000FF0000003FE0000000FF0000003FE000 +0000FF0000003FE0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000 +0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000 +0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000 +0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000 +0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000 +0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000 +0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000 +0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000 +0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000 +0000FF0000003FC0000000FF0000003FC0000000FF0000007FE0000001FF800000FFF000 +0003FFC000FFFFFFF003FFFFFFC0FFFFFFF003FFFFFFC0FFFFFFF003FFFFFFC0FFFFFFF0 +03FFFFFFC0423F7DBE49>I<000000FF8000000000000FFFF800000000003FFFFE000000 +0000FF007F8000000003FC001FE000000007F00007F00000000FC00001F80000003F8000 +00FE0000007F0000007F0000007E0000003F000000FC0000001F800001F80000000FC000 +03F80000000FE00003F000000007E00007F000000007F0000FE000000003F8000FE00000 +0003F8001FE000000003FC001FC000000001FC001FC000000001FC003FC000000001FE00 +3FC000000001FE003FC000000001FE007F8000000000FF007F8000000000FF007F800000 +0000FF007F8000000000FF00FF8000000000FF80FF8000000000FF80FF8000000000FF80 +FF8000000000FF80FF8000000000FF80FF8000000000FF80FF8000000000FF80FF800000 +0000FF80FF8000000000FF80FF8000000000FF80FF8000000000FF80FF8000000000FF80 +7F8000000000FF007F8000000000FF007FC000000001FF007FC000000001FF003FC00000 +0001FE003FC000000001FE003FC000000001FE001FE000000003FC001FE000000003FC00 +1FE000000003FC000FF000000007F80007F000000007F00007F000000007F00003F80000 +000FE00001FC0000001FC00001FC0000001FC00000FE0000003F8000007F0000007F0000 +003F800000FE0000001FC00001FC0000000FF00007F800000003FC001FE000000000FF00 +7F80000000007FFFFF00000000000FFFF8000000000001FFC000000039417CBF42>I<00 +00FFE00180000FFFFC0380007FFFFF078001FF001FCF8003F80003EF8007E00001FF800F +C00000FF801F8000007F803F0000003F803E0000001F807E0000000F807C0000000F807C +0000000F80FC0000000780FC0000000780FC0000000780FC0000000380FE0000000380FE +0000000380FF0000000380FF80000003807FC0000003807FE0000000007FF8000000003F +FE000000001FFFF00000000FFFFF80000007FFFFF8000003FFFFFF000001FFFFFFC00000 +7FFFFFF000001FFFFFF8000007FFFFFE0000007FFFFF00000003FFFF800000003FFFC000 +000003FFC000000000FFE0000000007FE0E00000001FF0E00000000FF0E00000000FF8F0 +00000007F8F000000003F8F000000003F8F000000003F8F800000001F8F800000001F8F8 +00000001F8FC00000001F8FC00000001F8FE00000001F0FE00000003F0FF00000003F0FF +00000003E0FF80000007E0FFC000000FC0FFE000000F80FDF000001F80F8F800007F00F8 +3E0000FC00F01FC00FF800F007FFFFE000E001FFFF8000C0003FF800002D417DBF34> +115 D<000038000000000038000000000038000000000038000000000038000000000038 +0000000000380000000000780000000000780000000000780000000000780000000000F8 +0000000000F80000000000F80000000001F80000000001F80000000001F80000000003F8 +0000000003F80000000007F8000000000FF8000000001FF8000000001FF8000000007FF8 +00000000FFF800000003FFF80000000FFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFF +FFFF000007F80000000007F80000000007F80000000007F80000000007F80000000007F8 +0000000007F80000000007F80000000007F80000000007F80000000007F80000000007F8 +0000000007F80000000007F80000000007F80000000007F80000000007F80000000007F8 +0000000007F80000000007F80000000007F80000000007F80000000007F80000000007F8 +0000000007F80000000007F80000000007F80000000007F80000000007F80000000007F8 +0000000007F80000000007F80000000007F80000E00007F80000E00007F80000E00007F8 +0000E00007F80000E00007F80000E00007F80000E00007F80000E00007F80000E00007F8 +0000E00007F80000E00007F80000E00007F80000E00007F80000E00003FC0001C00003FC +0001C00003FC0001C00003FC0003C00001FE0003800001FE0007800000FF00070000007F +800F0000003FC01E0000001FF07C0000000FFFF800000003FFE0000000007F80002B597F +D733>I119 D E end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin +%%PaperSize: Letter + +%%EndSetup +%%Page: 1 1 +1 0 bop 1090 872 a Fp(Using)44 b(C)f(co)t(de)h(with)g(Sc)l(heme)h(48) +1661 1112 y Fo(Mik)m(e)33 b(Sp)s(erb)s(er)1260 1229 y +Fn(sperber@informatik.uni-tueb)q(ingen)q(.de)1623 1345 +y Fo(Ric)m(hard)g(Kelsey)1437 1461 y Fn(kelsey@research.nj.nec.com)1563 +1657 y Fo(F)-8 b(ebruary)33 b(23,)f(1999)1778 1955 y +Fm(Abstract)837 2086 y Fl(This)41 b(do)r(cumen)n(t)e(describ)r(es)i(an) +f(in)n(terface)h(for)g(calling)h(C)e(functions)h(from)722 +2177 y(Sc)n(heme,)32 b(calling)g(Sc)n(heme)e(functions)i(from)f(C,)h +(and)f(allo)r(cating)i(storage)g(in)e(the)722 2268 y(Sc)n(heme)21 +b(heap.)33 b(These)22 b(facilities)j(are)d(designed)g(to)h(link)e +(existing)i(C)f(libraries)h(in)n(to)722 2360 y(Sc)n(heme)30 +b(48)j(in)e(order)h(to)g(use)g(them)e(from)h(Sc)n(heme.)51 +b(T)-6 b(o)32 b(this)g(end,)g(Sc)n(heme)f(48)722 2451 +y(manages)f(stub)f(functions)h(in)g(C)g(that)f(negotiate)i(b)r(et)n(w)n +(een)e(the)g(calling)j(con)n(v)n(en-)722 2542 y(tions)23 +b(of)g(Sc)n(heme)e(and)h(C)h(and)f(the)g(memory)e(allo)r(cation)25 +b(p)r(olicies)f(of)f(b)r(oth)f(w)n(orlds.)722 2634 y(No)27 +b(stub)g(generator)h(is)f(a)n(v)l(ailable)h(y)n(et,)f(but)f(writing)i +(them)e(is)h(a)g(straigh)n(tforw)n(ard)722 2725 y(task.)515 +2999 y Fk(1)134 b(Av)-7 b(ailable)46 b(F)-11 b(acilities)515 +3181 y Fj(The)27 b(follo)n(wing)g(facilities)h(are)e(a)n(v)-5 +b(ailable)26 b(for)i(in)n(terfacing)e(b)r(et)n(w)n(een)i(Sc)n(heme)f +(48)g(and)g(C:)639 3347 y Fi(\017)41 b Fj(Sc)n(heme)28 +b(co)r(de)f(can)g(call)h(C)f(functions.)639 3513 y Fi(\017)41 +b Fj(The)32 b(external)f(in)n(terface)g(pro)n(vides)f(full)i(in)n +(trosp)r(ection)f(for)h(all)f(Sc)n(heme)g(ob)5 b(jects.)722 +3613 y(External)25 b(co)r(de)g(ma)n(y)g(insp)r(ect,)i(mo)r(dify)-7 +b(,)26 b(and)g(allo)r(cate)f(Sc)n(heme)g(ob)5 b(jects)25 +b(arbitrar-)722 3713 y(ily)-7 b(.)639 3879 y Fi(\017)41 +b Fj(External)27 b(co)r(de)g(ma)n(y)g(raise)f(exceptions)h(bac)n(k)g +(to)h(Sc)n(heme)f(48)g(to)g(signal)g(errors.)639 4045 +y Fi(\017)41 b Fj(External)23 b(co)r(de)g(ma)n(y)h(call)f(bac)n(k)g(in) +n(to)g(Sc)n(heme.)36 b(Sc)n(heme)24 b(48)e(correctly)h(unrolls)g(the) +722 4144 y(pro)r(cess)k(stac)n(k)f(on)i(non-lo)r(cal)e(exits.)639 +4310 y Fi(\017)41 b Fj(External)25 b(mo)r(dules)h(ma)n(y)f(register)f +(bindings)i(of)f(names)g(to)h(v)-5 b(alues)25 b(with)i(a)e(cen)n(tral) +722 4410 y(registry)37 b(accessible)g(from)g(Sc)n(heme.)69 +b(Con)n(v)n(ersely)-7 b(,)38 b(Sc)n(heme)g(co)r(de)g(can)g(register)722 +4510 y(shared)27 b(bindings)g(for)h(access)e(b)n(y)h(C)h(co)r(de.)515 +4676 y(This)39 b(do)r(cumen)n(t)h(has)e(three)i(parts:)59 +b(the)40 b(\014rst)f(describ)r(es)g(ho)n(w)f(bindings)i(are)e(mo)n(v)n +(ed)515 4775 y(from)26 b(Sc)n(heme)h(to)g(C)f(and)h(vice)g(v)n(ersa,)e +(the)i(second)f(tells)h(ho)n(w)f(to)h(call)f(C)h(functions)g(from)515 +4875 y(Sc)n(heme,)21 b(and)g(the)f(third)h(co)n(v)n(ers)d(the)j(C)f(in) +n(terface)g(to)g(Sc)n(heme)g(ob)5 b(jects,)21 b(including)g(calling)515 +4975 y(Sc)n(heme)27 b(pro)r(cedures,)g(using)g(the)h(Sc)n(heme)f(heap,) +h(and)f(so)g(forth.)1926 5255 y(1)p eop +%%Page: 2 2 +2 1 bop 515 523 a Fh(1.1)112 b(Sc)m(heme)37 b(structures)515 +676 y Fj(The)19 b(structure)f Fg(external-calls)13 b +Fj(has)18 b(most)h(of)g(the)g(Sc)n(heme)g(functions)g(describ)r(ed)f +(here.)515 776 y(The)37 b(others)f(are)g(in)h Fg(dynamic-externals)o +Fj(,)d(whic)n(h)j(has)f(the)h(functions)h(for)e(dynamic)515 +876 y(loading)e(and)h(name)g(lo)r(okup)f(from)h(Section)g(5,)74 +b(and)35 b Fg(shared-bindings)o Fj(,)d(whic)n(h)j(has)515 +975 y(the)28 b(additional)f(shared-binding)f(functions)i(describ)r(ed)f +(in)h(Section)g(2.3.)515 1208 y Fh(1.2)112 b(C)37 b(naming)g(con)m(v)m +(en)m(tions)515 1361 y Fj(The)30 b(names)g(of)g(all)g(of)h(Sc)n(heme)f +(48's)f(visible)h(C)h(bindings)f(b)r(egin)h(with)f(`)p +Fg(s48)p 2990 1361 27 4 v 31 w Fj(')g(\(for)g(pro-)515 +1460 y(cedures)i(and)g(v)-5 b(ariables\))32 b(or)g(`)p +Fg(S48)p 1631 1460 V 30 w Fj(')h(\(for)f(macros\).)52 +b(Whenev)n(er)32 b(a)g(C)h(name)f(is)h(deriv)n(ed)515 +1560 y(from)24 b(a)h(Sc)n(heme)g(iden)n(ti\014er,)g(w)n(e)g(replace)f +(`)p Fg(-)p Fj(')h(with)g(`)p 2167 1560 V 32 w(')g(and)f(con)n(v)n(ert) +g(letters)h(to)g(lo)n(w)n(ercase)515 1660 y(for)f(pro)r(cedures)g(and)g +(upp)r(ercase)g(for)h(macros.)34 b(A)25 b(\014nal)g(`)p +Fg(?)p Fj(')36 b(con)n(v)n(erted)23 b(to)i(`)p 2929 1660 +V 31 w Fg(p)p Fj(')g(\(`)p 3107 1660 V 31 w Fg(P)p Fj(')g(in)g(C)515 +1759 y(macro)f(names\).)36 b(A)25 b(\014nal)g(`)p Fg(!)p +Fj(')36 b(is)25 b(dropp)r(ed.)36 b(Th)n(us)25 b(the)g(C)h(macro)e(for)g +(Sc)n(heme's)h Fg(pair?)34 b Fj(is)515 1859 y Fg(S48)p +652 1859 V 30 w(PAIR)p 858 1859 V 30 w(P)29 b Fj(and)g(the)h(one)f(for) +g Fg(set-car!)39 b Fj(is)29 b Fg(S48)p 2160 1859 V 30 +w(SET)p 2322 1859 V 30 w(CAR)p Fj(.)g(Pro)r(cedures)e(and)j(macros)515 +1959 y(that)e(do)f(not)h(c)n(hec)n(k)e(the)i(t)n(yp)r(es)g(of)f(their)h +(argumen)n(ts)e(ha)n(v)n(e)h(`)p Fg(unsafe)p Fj(')e(in)j(their)f +(names.)639 2058 y(All)k(of)f(the)h(C)f(functions)h(and)f(macros)e +(describ)r(ed)i(ha)n(v)n(e)f(protot)n(yp)r(es)h(or)f(de\014nitions)515 +2158 y(in)g(the)g(\014le)g Fg(c/scheme48.h)p Fj(.)37 +b(The)29 b(C)g(t)n(yp)r(e)g(for)f(Sc)n(heme)h(v)-5 b(alues)29 +b(is)g(de\014ned)g(there)g(to)g(b)r(e)515 2257 y Fg(s48)p +652 2257 V 30 w(value)p Fj(.)515 2532 y Fk(2)134 b(Shared)45 +b(bindings)515 2714 y Fj(Shared)c(bindings)h(are)f(the)h(means)f(b)n(y) +h(whic)n(h)f(named)h(v)-5 b(alues)41 b(are)g(shared)g(b)r(et)n(w)n(een) +515 2813 y(Sc)n(heme)35 b(co)r(de)h(and)f(C)h(co)r(de.)61 +b(There)35 b(are)f(t)n(w)n(o)h(separate)f(tables)i(of)f(shared)g +(bindings,)515 2913 y(one)28 b(for)g(v)-5 b(alues)29 +b(de\014ned)g(in)g(Sc)n(heme)f(and)h(accessed)e(from)i(C)f(and)h(the)g +(other)f(for)g(v)-5 b(alues)515 3013 y(going)30 b(the)i(other)f(w)n(a)n +(y)-7 b(.)47 b(Shared)30 b(bindings)i(actually)f(bind)h(names)e(to)i +(cells,)g(to)f(allo)n(w)f(a)515 3112 y(name)d(to)h(b)r(e)g(lo)r(ok)n +(ed)f(up)h(b)r(efore)f(it)i(has)e(b)r(een)h(assigned.)36 +b(This)28 b(is)g(necessary)e(b)r(ecause)h(C)515 3212 +y(initialization)j(co)r(de)h(ma)n(y)f(b)r(e)h(run)g(b)r(efore)f(or)g +(after)h(the)g(corresp)r(onding)e(Sc)n(heme)h(co)r(de,)515 +3312 y(dep)r(ending)25 b(on)f(whether)h(the)g(Sc)n(heme)g(co)r(de)g(is) +f(in)i(the)f(resumed)f(image)g(or)g(is)h(run)g(in)g(the)515 +3411 y(curren)n(t)h(session.)515 3644 y Fh(2.1)112 b(Exp)s(orting)36 +b(Sc)m(heme)i(v)-6 b(alues)37 b(to)g(C)531 3797 y Fi(\017)k +Fg(\(define-exported-)o(bi)o(ndi)o(ng)35 b Ff(name)42 +b(value)6 b Fg(\))42 b Fi(!)f Ff(shar)l(e)l(d-binding)531 +3946 y Fi(\017)g Fg(s48)p 751 3946 V 31 w(value)e(s48)p +1173 3946 V 30 w(get)p 1335 3946 V 30 w(imported)p 1717 +3946 V 28 w(binding\(char)e(*name\))531 4046 y Fi(\017)k +Fg(s48)p 751 4046 V 31 w(value)e(S48)p 1173 4046 V 30 +w(SHARED)p 1467 4046 V 29 w(BINDING)p 1804 4046 V 28 +w(REF\(s48)p 2140 4046 V 29 w(value)g(shared)p 2692 4046 +V 29 w(binding\))515 4195 y(Define-exported-)o(bi)o(nd)o(ing)34 +b Fj(mak)n(es)40 b Ff(value)h Fj(a)n(v)-5 b(ailable)39 +b(to)i(C)g(co)r(de)f(under)h(as)f Ff(name)515 4295 y +Fj(whic)n(h)23 b(m)n(ust)h(b)r(e)h(a)e Ff(string)p Fj(,)h(creating)f(a) +g(new)h(shared)f(binding)h(if)g(necessary)-7 b(.)34 b(The)24 +b(C)g(func-)515 4395 y(tion)34 b Fg(s48)p 829 4395 V +30 w(get)p 991 4395 V 30 w(imported)p 1373 4395 V 28 +w(binding)e Fj(returns)h(the)i(shared)e(binding)h(de\014ned)h(for)f +Fg(name)p Fj(,)515 4494 y(again)c(creating)g(it)h(if)h(necessary)-7 +b(.)46 b(The)31 b(C)h(macro)e Fg(S48)p 2288 4494 V 30 +w(SHARED)p 2582 4494 V 29 w(BINDING)p 2919 4494 V 28 +w(REF)g Fj(derefer-)515 4594 y(ences)d(a)g(shared)g(binding,)h +(returning)e(its)i(curren)n(t)f(v)-5 b(alue.)515 4826 +y Fh(2.2)112 b(Exp)s(orting)36 b(C)i(v)-6 b(alues)37 +b(to)g(Sc)m(heme)531 4980 y Fi(\017)k Fg(void)f(s48)p +967 4980 V 30 w(define)p 1261 4980 V 29 w(exported)p +1642 4980 V 28 w(binding\(char)d(*name,)i(s48)p 2670 +4980 V 30 w(value)g(value\))1926 5255 y Fj(2)p eop +%%Page: 3 3 +3 2 bop 531 523 a Fi(\017)41 b Fg(\(lookup-imported-)o(bi)o(ndi)o(ng)35 +b Ff(string)7 b Fg(\))41 b Fi(!)h Ff(shar)l(e)l(d-binding)531 +623 y Fi(\017)f Fg(\(shared-binding-r)o(ef)35 b Ff(shar)l(e)l +(d-binding)7 b Fg(\))43 b Fi(!)f Ff(value)515 740 y Fj(These)f(are)g +(used)h(to)g(de\014ne)g(shared)f(bindings)h(from)f(C)h(and)g(to)f +(access)g(them)h(from)515 840 y(Sc)n(heme.)35 b(Again,)24 +b(if)g(a)f(name)g(is)g(lo)r(ok)n(ed)g(up)g(b)r(efore)g(it)h(has)f(b)r +(een)h(de\014ned,)g(a)f(new)h(binding)515 940 y(is)j(created)g(for)g +(it.)639 1039 y(The)32 b(common)g(case)f(of)h(exp)r(orting)g(a)f(C)i +(function)f(to)g(Sc)n(heme)g(can)g(b)r(e)h(done)e(using)515 +1139 y(the)d(macro)e Fg(S48)p 1044 1139 27 4 v 30 w(EXPORT)p +1338 1139 V 29 w(FUNCTION\()p Fe(name)9 b Fg(\))p Fj(.)37 +b(This)27 b(expands)g(in)n(to)639 1238 y Fg(s48)p 776 +1238 V 30 w(define)p 1070 1238 V 29 w(exported)p 1451 +1238 V 28 w(binding\(")p Ff(name)p Fg(",)40 b(s48)p 2330 +1238 V 30 w(enter)p 2580 1238 V 29 w(pointer\()p Ff(name)p +Fg(\)\))515 1338 y Fj(whic)n(h)29 b(b)r(o)n(xes)g(the)g(function)h(in)n +(to)f(a)g(Sc)n(heme)g(b)n(yte)h(v)n(ector)e(and)h(then)h(exp)r(orts)e +(it.)43 b(Note)515 1438 y(that)28 b Fg(s48)p 832 1438 +V 30 w(enter)p 1082 1438 V 29 w(pointer)e Fj(allo)r(cates)g(space)i(in) +g(the)g(Sc)n(heme)g(heap)g(and)g(migh)n(t)g(trigger)515 +1537 y(a)f(garbage)e(collection;)i(see)g(Section)h(9.)531 +1655 y Fi(\017)41 b Fg(\(import-definitio)o(n)35 b Ff(name)p +Fg(\))1462 b Fj(syn)n(tax)531 1754 y Fi(\017)41 b Fg +(\(import-definitio)o(n)35 b Ff(name)42 b(c-name)p Fg(\))1157 +b Fj(syn)n(tax)515 1872 y(These)31 b(macros)g(simplify)h(imp)r(orting)f +(de\014nitions)h(from)g(C)g(to)f(Sc)n(heme.)50 b(They)31 +b(expand)515 1972 y(in)n(to)639 2071 y Fg(\(define)41 +b Ff(name)j Fg(\(lookup-imported)o(-b)o(in)o(din)o(g)37 +b Ff(c-name)p Fg(\)\))515 2171 y Fj(where)30 b Ff(c-name)g +Fj(is)h(as)f(supplied)h(for)f(the)h(second)f(form.)45 +b(F)-7 b(or)30 b(the)h(\014rst)f(form)g Ff(c-name)h Fj(is)515 +2271 y(deriv)n(ed)26 b(from)g Ff(name)h Fj(b)n(y)g(replacing)e(`)p +Fg(-)p Fj(')i(with)g(`)p 2024 2271 V 32 w(')g(and)f(con)n(v)n(erting)f +(letters)i(to)g(lo)n(w)n(ercase.)515 2370 y(F)-7 b(or)27 +b(example,)g Fg(\(import-definiti)o(on)37 b(my-foo\))25 +b Fj(expands)i(in)n(to)639 2470 y Fg(\(define)41 b(my-foo)g +(\(lookup-imported)o(-bi)o(nd)o(ing)c("my)p 2520 2470 +V 30 w(foo"\)\))515 2695 y Fh(2.3)112 b(Complete)36 b(shared)j(binding) +d(in)m(terface)515 2849 y Fj(There)24 b(are)f(a)h(n)n(um)n(b)r(er)h(of) +f(other)g(Sc)n(heme)h(functions)g(related)e(to)i(shared)e(bindings;)j +(these)515 2948 y(are)g(in)i(the)g(structure)f Fg(shared-bindings)p +Fj(.)531 3066 y Fi(\017)41 b Fg(\(shared-binding?)j Ff(x)10 +b Fg(\))40 b Fi(!)i Ff(b)l(o)l(ole)l(an)531 3165 y Fi(\017)f +Fg(\(shared-binding-n)o(am)o(e)36 b Ff(shar)l(e)l(d-binding)7 +b Fg(\))43 b Fi(!)e Ff(string)531 3265 y Fi(\017)g Fg +(\(shared-binding-i)o(s-)o(imp)o(or)o(t?)j Ff(shar)l(e)l(d-binding)7 +b Fg(\))43 b Fi(!)e Ff(b)l(o)l(ole)l(an)531 3365 y Fi(\017)g +Fg(\(shared-binding-s)o(et)o(!)36 b Ff(shar)l(e)l(d-binding)43 +b(value)6 b Fg(\))531 3464 y Fi(\017)41 b Fg(\(define-imported-)o(bi)o +(ndi)o(ng)35 b Ff(string)41 b(value)6 b Fg(\))531 3564 +y Fi(\017)41 b Fg(\(lookup-exported-)o(bi)o(ndi)o(ng)35 +b Ff(string)7 b Fg(\))531 3664 y Fi(\017)41 b Fg(\(undefine-importe)o +(d-)o(bin)o(di)o(ng)35 b Ff(string)7 b Fg(\))531 3763 +y Fi(\017)41 b Fg(\(undefine-exporte)o(d-)o(bin)o(di)o(ng)35 +b Ff(string)7 b Fg(\))515 3881 y(Shared-binding?)31 b +Fj(is)d(the)h(predicate)e(for)g(shared-bindings.)37 b +Fg(Shared-binding-n)o(am)o(e)515 3980 y Fj(returns)19 +b(the)h(name)f(of)h(a)f(binding.)35 b Fg(Shared-binding-)o(is-)o(im)o +(po)o(rt?)27 b Fj(is)20 b(true)g(if)g(the)g(bind-)515 +4080 y(ing)26 b(w)n(as)f(de\014ned)h(from)g(C.)g Fg(Shared-binding-se)o +(t!)k Fj(c)n(hanges)25 b(the)h(v)-5 b(alue)26 b(of)g(a)g(binding.)515 +4180 y Fg(Define-imported-)o(bi)o(nd)o(ing)34 b Fj(and)41 +b Fg(lookup-exported-b)o(ind)o(in)o(g)35 b Fj(are)40 +b(Sc)n(heme)h(v)n(er-)515 4279 y(sions)i(of)51 b Fg(s48)p +990 4279 V 30 w(define)p 1284 4279 V 29 w(exported)p +1665 4279 V 28 w(binding)42 b Fj(and)i Fg(s48)p 2353 +4279 V 30 w(lookup)p 2647 4279 V 29 w(imported)p 3028 +4279 V 28 w(binding)p Fj(.)515 4379 y(The)38 b(t)n(w)n(o)f +Fg(undefine-)e Fj(pro)r(cedures)i(remo)n(v)n(e)f(bindings)i(from)g(the) +h(t)n(w)n(o)e(tables.)68 b(They)515 4479 y(do)27 b(nothing)g(if)i(the)f +(name)f(is)g(not)h(found)g(in)g(the)g(table.)639 4578 +y(The)g(follo)n(wing)e(C)i(macros)e(corresp)r(ond)g(to)i(the)g(Sc)n +(heme)f(functions)h(ab)r(o)n(v)n(e.)531 4696 y Fi(\017)41 +b Fg(int)290 b(S48)p 1173 4696 V 30 w(SHARED)p 1467 4696 +V 29 w(BINDING)p 1804 4696 V 28 w(P\(x\))531 4795 y Fi(\017)41 +b Fg(int)290 b(S48)p 1173 4795 V 30 w(SHARED)p 1467 4795 +V 29 w(BINDING)p 1804 4795 V 28 w(IS)p 1920 4795 V 31 +w(IMPORT)p 2215 4795 V 29 w(P\(s48)p 2464 4795 V 29 w(value)39 +b(s)p 2796 4795 V 31 w(b\))531 4895 y Fi(\017)i Fg(s48)p +751 4895 V 31 w(value)e(S48)p 1173 4895 V 30 w(SHARED)p +1467 4895 V 29 w(BINDING)p 1804 4895 V 28 w(NAME\(s48)p +2184 4895 V 29 w(value)g(s)p 2516 4895 V 31 w(b\))531 +4995 y Fi(\017)i Fg(void)248 b(S48)p 1175 4995 V 30 w(SHARED)p +1469 4995 V 29 w(BINDING)p 1806 4995 V 28 w(SET\(s48)p +2142 4995 V 29 w(value)39 b(s)p 2474 4995 V 31 w(b,)i(s48)p +2766 4995 V 30 w(value)e(value\))1926 5255 y Fj(3)p eop +%%Page: 4 4 +4 3 bop 515 523 a Fk(3)134 b(Calling)47 b(C)e(F)-11 b(unctions)44 +b(from)h(Sc)l(heme)515 705 y Fj(There)30 b(are)g(three)h(di\013eren)n +(t)g(w)n(a)n(ys)f(to)h(call)f(C)h(functions)h(from)e(Sc)n(heme,)i(dep)r +(ending)f(on)515 805 y(ho)n(w)c(the)h(C)f(function)h(w)n(as)f +(obtained.)531 953 y Fi(\017)41 b Fg(\(call-imported-bi)o(nd)o(ing)35 +b Ff(binding)42 b(ar)l(g)2030 965 y Fd(0)2110 953 y Ff(.)13 +b(.)g(.)g Fg(\))50 b Fi(!)42 b Ff(value)531 1052 y Fi(\017)f +Fg(\(call-external)36 b Ff(external)41 b(ar)l(g)1706 +1064 y Fd(0)1786 1052 y Ff(.)13 b(.)g(.)g Fg(\))50 b +Fi(!)42 b Ff(value)531 1152 y Fi(\017)f Fg(\(call-external-va)o(lu)o(e) +36 b Ff(value)42 b(name)f(ar)l(g)2101 1164 y Fd(0)2181 +1152 y Ff(.)13 b(.)g(.)g Fg(\))50 b Fi(!)42 b Ff(value)515 +1300 y Fj(Eac)n(h)35 b(of)i(these)g(applies)f(its)h(\014rst)f(argumen)n +(t,)i(a)e(C)h(function,)j(to)c(the)h(rest)g(of)f(the)h(ar-)515 +1400 y(gumen)n(ts.)k(F)-7 b(or)28 b Fg(call-imported-bi)o(ndi)o(ng)23 +b Fj(the)29 b(function)h(argumen)n(t)e(m)n(ust)h(b)r(e)g(an)g(im-)515 +1500 y(p)r(orted)23 b(binding.)35 b(F)-7 b(or)22 b Fg(call-external)c +Fj(the)23 b(function)h(argumen)n(t)e(m)n(ust)h(b)r(e)g(an)g(external) +515 1599 y(b)r(ound)i(in)g(the)g(curren)n(t)f(pro)r(cess)g(\(see)h +(Section)f(5\).)72 b(F)-7 b(or)24 b Fg(call-external-val)o(ue)18 +b Ff(value)515 1699 y Fj(m)n(ust)33 b(b)r(e)i(a)e(b)n(yte)g(v)n(ector)g +(whose)g(con)n(ten)n(ts)g(is)g(a)g(p)r(oin)n(ter)h(to)f(a)g(C)h +(function)g(and)g Ff(name)515 1799 y Fj(should)e(b)r(e)g(a)g(string)f +(naming)h(the)g(function.)51 b(The)32 b Ff(name)h Fj(argumen)n(t)e(is)h +(used)g(only)g(for)515 1898 y(prin)n(ting)27 b(error)f(messages.)639 +1998 y(F)-7 b(or)41 b(all)g(of)g(these,)k(the)c(C)g(function)h(is)f +(passed)g(the)g Ff(ar)l(g)2530 2010 y Fc(i)2600 1998 +y Fj(v)-5 b(alues)41 b(and)g(the)g(v)-5 b(alue)515 2097 +y(returned)37 b(is)h(that)g(returned)g(b)n(y)g(C)g(pro)r(cedure.)66 +b(Up)39 b(to)f(t)n(w)n(elv)n(e)f(argumen)n(ts)f(ma)n(y)i(b)r(e)515 +2197 y(passed.)51 b(There)32 b(is)g(no)g(metho)r(d)h(supplied)g(for)f +(returning)g(m)n(ultiple)h(v)-5 b(alues)32 b(to)g(Sc)n(heme)515 +2297 y(from)23 b(C)h(\(or)f(vice)h(v)n(ersa\))e(\(mainly)i(b)r(ecause)g +(C)f(do)r(es)h(not)g(ha)n(v)n(e)e(m)n(ultiple)j(return)e(v)-5 +b(alues\).)639 2396 y(Keyb)r(oard)34 b(in)n(terrupts)h(that)g(o)r(ccur) +g(during)g(a)g(call)g(to)g(a)g(C)g(function)h(are)e(ignored)515 +2496 y(un)n(til)28 b(the)h(function)g(returns)e(to)i(Sc)n(heme)f +(\(this)g(is)h(clearly)e(a)h(problem;)g(w)n(e)g(are)f(w)n(orking)515 +2596 y(on)g(a)g(solution\).)531 2744 y Fi(\017)41 b Fg +(\(import-lambda-de)o(fi)o(nit)o(io)o(n)36 b Ff(name)41 +b Fg(\()p Ff(formal)i Fg(...\)\))619 b Fj(syn)n(tax)531 +2844 y Fi(\017)41 b Fg(\(import-lambda-de)o(fi)o(nit)o(io)o(n)36 +b Ff(name)41 b Fg(\()p Ff(formal)i Fg(...\))d Ff(c-name)p +Fg(\))316 b Fj(syn)n(tax)515 2992 y(These)31 b(macros)e(simplify)j(imp) +r(orting)f(functions)h(from)f(C.)g(They)g(de\014ne)h +Ff(name)g Fj(to)f(b)r(e)g(a)515 3092 y(function)26 b(with)g(the)g(giv)n +(en)f(formals)f(that)i(applies)g(those)f(formals)g(to)g(the)h(corresp)r +(onding)515 3191 y(C)h(binding.)37 b Ff(C-name)p Fj(,)28 +b(if)h(supplied,)f(should)f(b)r(e)h(a)f(string.)36 b(These)28 +b(expand)f(in)n(to)680 3373 y Fg(\(define)41 b(temp)h +(\(lookup-imported)o(-b)o(in)o(din)o(g)37 b Ff(c-name)p +Fg(\)\))680 3472 y(\(define)k Ff(name)767 3572 y Fg(\(lambda)g(\()p +Ff(formal)k Fg(...\))854 3671 y(\(external-apply)38 b(temp)k +Ff(formal)j Fg(...\)\)\))545 3853 y Fj(If)31 b Ff(c-name)f +Fj(is)h(not)f(supplied,)h(it)g(is)f(deriv)n(ed)g(from)g +Ff(name)g Fj(b)n(y)h(con)n(v)n(erting)d(all)i(letters)g(to)515 +3952 y(lo)n(w)n(ercase)25 b(and)i(replacing)g(`)p Fg(-)p +Fj(')g(with)h(`)p 1731 3952 27 4 v 32 w('.)515 4227 y +Fk(4)134 b(Adding)45 b(external)h(mo)t(dules)f(to)g(the)h +Fb(Makefile)515 4408 y Fj(Getting)35 b(access)f(to)h(C)g(bindings)g +(from)f(Sc)n(heme)h(requires)f(that)h(the)h(C)f(co)r(de)f(b)r(e)i(com-) +515 4508 y(piled)f(an)h(link)n(ed)f(in)g(with)h(the)g(Sc)n(heme)f(48)g +(virtual)g(mac)n(hine)g(and)g(that)g(the)h(relev)n(en)n(t)515 +4608 y(shared-bindings)42 b(b)r(e)h(created.)84 b(The)43 +b(Sc)n(heme)g(48)g(mak)n(e\014le)f(has)h(rules)g(for)f(compil-)515 +4707 y(ing)c(and)g(linking)h(external)e(co)r(de)i(and)f(for)g(sp)r +(ecifying)h(initialization)f(functions)h(that)515 4807 +y(should)d(b)r(e)h(called)f(on)h(startup.)63 b(There)36 +b(are)g(three)g(Mak)n(e\014le)g(v)-5 b(ariables)35 b(that)i(con)n(trol) +515 4907 y(whic)n(h)44 b(external)f(mo)r(dules)i(are)e(included)i(in)f +(the)h(executable)f(for)f(the)i(virutal)f(ma-)515 5006 +y(c)n(hine)39 b(\()p Fg(scheme48vm)p Fj(\).)67 b Fg(EXTERNAL)p +1692 5006 V 28 w(OBJECTS)36 b Fj(lists)j(the)h(ob)5 b(ject)38 +b(\014les)h(to)g(b)r(e)h(included)1926 5255 y(4)p eop +%%Page: 5 5 +5 4 bop 515 523 a Fj(in)31 b Fg(scheme48vm)p Fj(,)d Fg(EXTERNAL)p +1463 523 27 4 v 28 w(FLAGS)h Fj(is)i(a)g(list)g(of)38 +b Fg(ld)30 b Fj(\015ags)g(to)h(b)r(e)h(used)f(when)g(creating)515 +623 y Fg(scheme48vm)p Fj(,)21 b(and)k Fg(EXTERNAL)p 1515 +623 V 28 w(INITIALIZERS)20 b Fj(is)25 b(a)f(list)i(of)f(C)g(pro)r +(cedures)e(to)i(b)r(e)g(called)515 722 y(on)32 b(startup.)52 +b(The)33 b(pro)r(cedures)e(listed)i(in)g Fg(EXTERNAL)p +2259 722 V 28 w(INITIALIZERS)28 b Fj(should)k(tak)n(e)g(no)515 +822 y(argumen)n(ts)g(and)i(ha)n(v)n(e)e(a)h(return)g(t)n(yp)r(e)h(of)40 +b Fg(void)p Fj(.)54 b(After)34 b(c)n(hanging)e(the)i(de\014nitions)g +(of)515 922 y(an)n(y)f(of)h(these)g(v)-5 b(ariables)33 +b(y)n(ou)g(should)h(do)f Fg(make)42 b(scheme48vm)30 b +Fj(to)k(rebuild)g(the)h(virtual)515 1021 y(mac)n(hine.)515 +1296 y Fk(5)134 b(Dynamic)46 b(Loading)515 1478 y Fj(External)23 +b(co)r(de)g(can)h(b)r(e)g(loaded)g(in)n(to)g(a)f(running)h(Sc)n(heme)g +(48)f(pro)r(cess)g(and)g(C)i(ob)5 b(ject-\014le)515 1577 +y(bindings)30 b(can)h(b)r(e)g(dereferenced)f(at)h(run)n(time)f(and)h +(their)g(v)-5 b(alues)30 b(called)h(\(although)f(not)515 +1677 y(all)f(v)n(ersions)f(of)i(Unix)g(supp)r(ort)g(all)f(of)h(this\).) +44 b(The)30 b(required)f(Sc)n(heme)h(functions)g(are)f(in)515 +1776 y(the)f(structure)f Fg(dynamic-external)o(s)p Fj(.)531 +1926 y Fi(\017)41 b Fg(\(dynamic-load)36 b Ff(string)7 +b Fg(\))515 2075 y(Dynamic-load)15 b Fj(loads)k(the)h(named)g(\014le)g +(in)n(to)g(the)g(curren)n(t)f(pro)r(cess,)h(raising)f(an)g(exception) +515 2175 y(if)g(the)g(\014le)g(cannot)f(b)r(e)h(found)g(or)f(if)h +(dynamic)g(loading)f(is)g(not)h(supp)r(orted)g(b)n(y)f(the)h(op)r +(erating)515 2275 y(system.)36 b(The)26 b(\014le)f(m)n(ust)h(ha)n(v)n +(e)f(b)r(een)h(compiled)g(and)f(link)n(ed)h(appropriately)-7 +b(.)34 b(F)-7 b(or)25 b(Lin)n(ux,)515 2374 y(the)33 b(follo)n(wing)g +(commands)f(compile)i Fg(foo.c)d Fj(in)n(to)i(a)g(\014le)g +Fg(foo.so)e Fj(that)j(can)f(b)r(e)h(loaded)515 2474 y(dynamically)-7 +b(.)680 2640 y Fg(\045)43 b(gcc)g(-c)f(-o)h(foo.o)f(foo.c)680 +2739 y(\045)h(ld)g(-shared)e(-o)h(foo.so)g(foo.o)531 +2906 y Fi(\017)f Fg(\(get-external)36 b Ff(string)7 b +Fg(\))42 b Fi(!)f Ff(external)531 3005 y Fi(\017)g Fg(\(external?)46 +b Ff(x)10 b Fg(\))41 b Fi(!)g Ff(b)l(o)l(ole)l(an)531 +3105 y Fi(\017)g Fg(\(external-name)36 b Ff(external)9 +b Fg(\))41 b Fi(!)g Ff(string)531 3204 y Fi(\017)g Fg(\(external-value) +36 b Ff(external)9 b Fg(\))40 b Fi(!)i Ff(byte-ve)l(ctor)515 +3354 y Fj(These)c(functions)g(giv)n(e)g(access)f(to)h(v)-5 +b(alues)38 b(b)r(ound)h(in)g(the)f(curren)n(t)g(pro)r(cess,)i(and)e +(are)515 3453 y(used)26 b(for)g(retrieving)f(v)-5 b(alues)26 +b(from)g(dynamically-loaded)e(\014les.)36 b Fg(Get-external)22 +b Fj(returns)515 3553 y(an)41 b Ff(external)49 b Fj(ob)5 +b(ject)41 b(that)h(con)n(tains)e(the)i(v)-5 b(alue)41 +b(of)g Ff(name)p Fj(,)k(raising)40 b(an)h(exception)g(if)515 +3653 y(there)f(is)h(no)g(suc)n(h)f(v)-5 b(alue)41 b(in)g(the)h(curren)n +(t)e(pro)r(cess.)75 b Fg(External?)f Fj(is)40 b(the)i(predicate)515 +3752 y(for)33 b(externals,)g(and)h Fg(external-name)28 +b Fj(and)33 b Fg(external-value)27 b Fj(return)33 b(the)h(name)f(and) +515 3852 y(v)-5 b(alue)34 b(of)g(an)g(external.)55 b(The)34 +b(v)-5 b(alue)34 b(is)g(returned)g(as)f(b)n(yte)h(v)n(ector)f(of)h +(length)g(four)g(\(on)515 3952 y(32-bit)29 b(arc)n(hitectures\).)41 +b(The)30 b(v)-5 b(alue)29 b(is)h(that)g(whic)n(h)f(w)n(as)g(extan)n(t)g +(when)h Fg(get-external)515 4051 y Fj(w)n(as)k(called.)58 +b(The)35 b(follo)n(wing)f(t)n(w)n(o)g(functions)h(can)f(b)r(e)i(used)e +(to)h(up)r(date)g(the)h(v)-5 b(alues)34 b(of)515 4151 +y(externals.)531 4300 y Fi(\017)41 b Fg(\(lookup-external)35 +b Ff(external)9 b Fg(\))41 b Fi(!)g Ff(b)l(o)l(ole)l(an)531 +4400 y Fi(\017)g Fg(\(lookup-all-exter)o(na)o(ls\))35 +b Fi(!)41 b Ff(b)l(o)l(ole)l(an)515 4549 y Fg(Lookup-external)19 +b Fj(up)r(dates)26 b(the)g(v)-5 b(alue)26 b(of)g Ff(external)f +Fj(b)n(y)h(lo)r(oking)e(its)i(name)g(in)g(the)g(cur-)515 +4649 y(ren)n(t)18 b(pro)r(cess,)h(returning)g Fg(#t)e +Fj(if)i(it)g(is)f(b)r(ound)h(and)f Fg(#f)g Fj(if)h(it)f(is)h(not.)33 +b Fg(Lookup-all-extern)o(als)515 4749 y Fj(calls)27 b +Fg(lookup-external)21 b Fj(on)27 b(all)h(extan)n(t)f(externals,)g +(returning)h Fg(#f)e Fj(an)n(y)h(are)g(un)n(b)r(ound.)531 +4898 y Fi(\017)41 b Fg(\(call-external)36 b Ff(external)41 +b(ar)l(g)1706 4910 y Fd(0)1786 4898 y Ff(.)13 b(.)g(.)g +Fg(\))50 b Fi(!)42 b Ff(value)1926 5255 y Fj(5)p eop +%%Page: 6 6 +6 5 bop 515 523 a Fj(An)29 b(external)f(whose)g(v)-5 +b(alue)29 b(is)f(a)g(C)h(pro)r(cedure)f(can)g(b)r(e)h(called)g(using)g +Fg(call-external)p Fj(.)515 623 y(See)e(Section)h(3)55 +b(for)27 b(more)g(information.)639 722 y(In)e(some)f(v)n(ersions)f(of)h +(Unix)h(retrieving)f(a)g(v)-5 b(alue)25 b(from)f(the)h(curren)n(t)f +(pro)r(cess)f(ma)n(y)h(re-)515 822 y(quire)f(a)g(non-trivial)f(amoun)n +(t)h(of)h(computation.)35 b(W)-7 b(e)24 b(recommend)f(that)h(a)f +(dynamically-)515 922 y(loaded)i(\014le)g(con)n(tain)g(a)g(single)g +(initialization)g(pro)r(cedure)g(that)g(creates)g(shared)f(bindings)515 +1021 y(for)j(the)h(v)-5 b(alues)27 b(exp)r(orted)g(b)n(y)g(the)h +(\014le.)515 1296 y Fk(6)134 b(Compatibilit)l(y)515 1478 +y Fj(Sc)n(heme)18 b(48's)f(old)h Fg(external-call)c Fj(function)k(is)h +(still)f(a)n(v)-5 b(ailable)17 b(in)i(the)g(structure)f +Fg(externals)p Fj(,)515 1577 y(whic)n(h)g(no)n(w)g(also)f(includes)i +Fg(external-name)13 b Fj(and)18 b Fg(external-value)p +Fj(.)28 b(The)18 b(old)h Fg(scheme48.h)515 1677 y Fj(\014le)27 +b(has)h(b)r(een)g(renamed)f Fg(old-scheme48.h)p Fj(.)515 +1951 y Fk(7)134 b(Accessing)45 b(Sc)l(heme)g(data)h(from)f(C)515 +2133 y Fj(The)37 b(C)h(header)e(\014le)i Fg(scheme48.h)33 +b Fj(pro)n(vides)j(access)g(to)h(Sc)n(heme)h(48)e(data)h(structures)515 +2233 y(\(for)i(compatibilit)n(y)-7 b(,)42 b(the)e(old)g +Fg(scheme48.h)35 b Fj(\014le)40 b(is)f(a)n(v)-5 b(ailable)39 +b(as)f Fg(old-scheme48.h)p Fj(\).)515 2332 y(The)d(t)n(yp)r(e)g +Fg(s48)p 1024 2332 27 4 v 30 w(value)e Fj(is)h(used)h(for)g(Sc)n(heme)f +(v)-5 b(alues.)59 b(When)35 b(the)g(t)n(yp)r(e)g(of)g(a)f(v)-5 +b(alue)35 b(is)515 2432 y(kno)n(wn,)24 b(suc)n(h)f(as)h(the)g(in)n +(teger)f(returned)g(b)n(y)i Fg(vector-length)19 b Fj(or)k(the)h(b)r(o)r +(olean)g(returned)515 2532 y(b)n(y)29 b Fg(pair?)p Fj(,)e(the)i +(corresp)r(onding)e(C)i(pro)r(cedure)f(returns)g(a)g(C)h(v)-5 +b(alue)28 b(of)h(the)g(appropriate)515 2631 y(t)n(yp)r(e,)f(and)f(not)h +(a)f Fg(s48)p 1240 2631 V 30 w(value)p Fj(.)35 b(Predicates)26 +b(return)h Fg(1)g Fj(for)g(true)h(and)f Fg(0)h Fj(for)f(false.)515 +2864 y Fh(7.1)112 b(Constan)m(ts)515 3017 y Fj(The)27 +b(follo)n(wing)g(macros)f(denote)h(Sc)n(heme)h(constan)n(ts:)515 +3183 y Fg(S48)p 652 3183 V 30 w(FALSE)39 b Fj(is)28 b +Fg(#f)p Fj(.)515 3349 y Fg(S48)p 652 3349 V 30 w(TRUE)40 +b Fj(is)27 b Fg(#t)p Fj(.)515 3515 y Fg(S48)p 652 3515 +V 30 w(NULL)40 b Fj(is)27 b(the)h(empt)n(y)g(list.)515 +3681 y Fg(S48)p 652 3681 V 30 w(UNSPECIFIC)37 b Fj(is)26 +b(a)g(v)-5 b(alue)26 b(used)g(for)g(functions)g(whic)n(h)g(ha)n(v)n(e)f +(no)h(meaningful)h(return)722 3781 y(v)-5 b(alue)22 b(\(in)g(Sc)n(heme) +g(this)g(v)-5 b(alue)21 b(returned)g(b)n(y)h(the)g(n)n(ullary)e(pro)r +(cedure)h Fg(unspecific)722 3880 y Fj(in)28 b(the)g(structure)f +Fg(util)p Fj(\).)515 4046 y Fg(S48)p 652 4046 V 30 w(EOF)40 +b Fj(is)22 b(the)g(end-of-\014le)f(ob)5 b(ject)22 b(\(in)h(Sc)n(heme)e +(this)h(v)-5 b(alue)22 b(is)g(returned)f(b)n(y)h(the)g(n)n(ullary)722 +4146 y(pro)r(cedure)27 b Fg(eof-object)c Fj(in)28 b(the)g(structure)f +Fg(i/o-internal)p Fj(\).)515 4378 y Fh(7.2)112 b(Con)m(v)m(erting)37 +b(v)-6 b(alues)515 4532 y Fj(The)28 b(follo)n(wing)f(functions)i(con)n +(v)n(ert)e(v)-5 b(alues)28 b(b)r(et)n(w)n(een)g(Sc)n(heme)g(and)h(C)f +(represen)n(tations.)515 4631 y(The)e(`extract')g(ones)f(con)n(v)n(ert) +g(from)h(Sc)n(heme)g(to)h(C)f(and)g(the)h(`en)n(ter's)e(go)h(the)g +(other)g(w)n(a)n(y)-7 b(.)531 4781 y Fi(\017)41 b Fg(unsigned)e(char)g +(s48)p 1357 4781 V 31 w(extract)p 1696 4781 V 28 w(char\(s48)p +2076 4781 V 28 w(value\))531 4880 y Fi(\017)i Fg(char)f(*)166 +b(s48)p 1177 4880 V 30 w(extract)p 1515 4880 V 28 w(string\(s48)p +1983 4880 V 28 w(value\))531 4980 y Fi(\017)41 b Fg(long)248 +b(s48)p 1175 4980 V 30 w(extract)p 1513 4980 V 28 w(integer\(s48)p +2025 4980 V 27 w(value\))1926 5255 y Fj(6)p eop +%%Page: 7 7 +7 6 bop 531 523 a Fi(\017)41 b Fg(double)164 b(s48)p +1179 523 27 4 v 30 w(extract)p 1517 523 V 29 w(double\(s48)p +1986 523 V 27 w(value\))531 623 y Fi(\017)41 b Fg(s48)p +751 623 V 31 w(value)e(s48)p 1173 623 V 30 w(enter)p +1423 623 V 29 w(char\(unsigned)e(char\))531 722 y Fi(\017)k +Fg(s48)p 751 722 V 31 w(value)e(s48)p 1173 722 V 30 w(enter)p +1423 722 V 29 w(string\(char)e(*\))953 b Fj(\(ma)n(y)28 +b(GC\))531 822 y Fi(\017)41 b Fg(s48)p 751 822 V 31 w(value)e(s48)p +1173 822 V 30 w(enter)p 1423 822 V 29 w(integer\(long\))990 +b Fj(\(ma)n(y)28 b(GC\))531 922 y Fi(\017)41 b Fg(s48)p +751 922 V 31 w(value)e(s48)p 1173 922 V 30 w(enter)p +1423 922 V 29 w(double\(double\))946 b Fj(\(ma)n(y)28 +b(GC\))515 1066 y(The)k(v)-5 b(alue)32 b(returned)g(b)n(y)h +Fg(s48)p 1509 1066 V 30 w(extract)p 1847 1066 V 29 w(string)c +Fj(p)r(oin)n(ts)j(to)h(the)f(actual)g(storage)e(used)515 +1165 y(b)n(y)d(the)h(string;)f(it)h(is)g(v)-5 b(alid)27 +b(only)g(un)n(til)h(the)g(next)g(garbage)d(collection;)i(see)h(Section) +f(9.)639 1265 y Fg(s48)p 776 1265 V 30 w(enter)p 1026 +1265 V 30 w(integer\(\))33 b Fj(needs)j(to)h(allo)r(cate)f(storage)e +(when)j(its)g(argumen)n(t)f(is)g(to)r(o)515 1365 y(large)28 +b(to)j(\014t)f(in)h(a)e(Sc)n(heme)h(48)g(\014xn)n(um.)44 +b(In)31 b(cases)e(where)h(the)g(n)n(um)n(b)r(er)g(is)g(kno)n(wn)g(to)g +(\014t)515 1464 y(within)d(a)f(\014xn)n(um)g(\(curren)n(tly)g(30)f +(bits)i(including)f(the)h(sign\),)f(the)h(follo)n(wing)e(pro)r(cedures) +515 1564 y(can)30 b(b)r(e)g(used.)45 b(These)30 b(ha)n(v)n(e)f(the)h +(disadv)-5 b(an)n(tage)29 b(of)h(only)g(ha)n(ving)f(a)h(limited)h +(range,)e(but)515 1664 y(the)f(adv)-5 b(an)n(tage)26 +b(of)h(nev)n(er)g(causing)g(a)g(garbage)e(collection.)531 +1808 y Fi(\017)41 b Fg(long)248 b(s48)p 1175 1808 V 30 +w(extract)p 1513 1808 V 28 w(fixnum\(s48)p 1981 1808 +V 28 w(value\))531 1908 y Fi(\017)41 b Fg(s48)p 751 1908 +V 31 w(value)e(s48)p 1173 1908 V 30 w(enter)p 1423 1908 +V 29 w(fixnum\(long\))531 2007 y Fi(\017)i Fg(long)248 +b(S48)p 1175 2007 V 30 w(MAX)p 1337 2007 V 30 w(FIXNUM)p +1631 2007 V 29 w(VALUE)531 2107 y Fi(\017)41 b Fg(long)248 +b(S48)p 1175 2107 V 30 w(MIN)p 1337 2107 V 30 w(FIXNUM)p +1631 2107 V 29 w(VALUE)515 2251 y Fj(An)23 b(error)d(is)i(signalled)g +(if)29 b Fg(s48)p 1473 2251 V 30 w(extract)p 1811 2251 +V 29 w(fixnum)p Fj('s)19 b(argumen)n(t)j(is)g(not)g(a)g(\014xn)n(um)g +(or)g(if)h(the)515 2351 y(argumen)n(t)31 b(to)i Fg(s48)p +1135 2351 V 30 w(enter)p 1385 2351 V 30 w(fixnum)d Fj(is)j(less)f(than) +h Fg(S48)p 2287 2351 V 30 w(MIN)p 2449 2351 V 30 w(FIXNUM)p +2743 2351 V 29 w(VALUE)e Fj(or)h(greater)515 2450 y(than)27 +b Fg(S48)p 845 2450 V 31 w(MAX)p 1008 2450 V 30 w(FIXNUM)p +1302 2450 V 29 w(VALUE)e Fj(\()p Fi(\000)p Fj(2)1710 +2420 y Fd(29)1808 2450 y Fj(and)i(2)2011 2420 y Fd(29)2099 +2450 y Fi(\000)18 b Fj(1)28 b(in)f(the)h(curren)n(t)f(system\).)515 +2682 y Fh(7.3)112 b(C)37 b(v)m(ersions)h(of)f(Sc)m(heme)g(pro)s +(cedures)515 2835 y Fj(The)23 b(follo)n(wing)f(macros)g(and)h(pro)r +(cedures)f(are)g(C)h(v)n(ersions)f(of)h(Sc)n(heme)g(pro)r(cedures.)34 +b(The)515 2935 y(names)27 b(w)n(ere)g(deriv)n(ed)f(b)n(y)i(replacing)e +(`)p Fg(-)p Fj(')h(with)i(`)p 2057 2935 V 31 w(',)f(`)p +Fg(?)p Fj(')36 b(with)28 b(`)p Fg(p)p Fj(',)g(and)f(dropping)g(`)p +Fg(!)p Fj(.)531 3079 y Fi(\017)41 b Fg(int)290 b(S48)p +1173 3079 V 30 w(EQ)p 1291 3079 V 30 w(P\(s48)p 1541 +3079 V 30 w(value\))531 3179 y Fi(\017)41 b Fg(int)290 +b(S48)p 1173 3179 V 30 w(CHAR)p 1379 3179 V 30 w(P\(s48)p +1629 3179 V 29 w(value\))531 3278 y Fi(\017)41 b Fg(int)290 +b(S48)p 1173 3278 V 30 w(INTEGER)p 1511 3278 V 28 w(P\(s48)p +1759 3278 V 30 w(value\))531 3422 y Fi(\017)41 b Fg(int)290 +b(S48)p 1173 3422 V 30 w(PAIR)p 1379 3422 V 30 w(P\(s48)p +1629 3422 V 29 w(value\))531 3522 y Fi(\017)41 b Fg(s48)p +751 3522 V 31 w(value)e(S48)p 1173 3522 V 30 w(CAR\(s48)p +1511 3522 V 29 w(value\))531 3622 y Fi(\017)i Fg(s48)p +751 3622 V 31 w(value)e(S48)p 1173 3622 V 30 w(CDR\(s48)p +1511 3622 V 29 w(value\))531 3721 y Fi(\017)i Fg(void)248 +b(S48)p 1175 3721 V 30 w(SET)p 1337 3721 V 30 w(CAR\(s48)p +1675 3721 V 29 w(value,)39 b(s48)p 2139 3721 V 30 w(value\))531 +3821 y Fi(\017)i Fg(void)248 b(S48)p 1175 3821 V 30 w(SET)p +1337 3821 V 30 w(CDR\(s48)p 1675 3821 V 29 w(value,)39 +b(s48)p 2139 3821 V 30 w(value\))531 3921 y Fi(\017)i +Fg(s48)p 751 3921 V 31 w(value)e(s48)p 1173 3921 V 30 +w(cons\(s48)p 1555 3921 V 28 w(value,)g(s48)p 2018 3921 +V 30 w(value\))702 b Fj(\(ma)n(y)28 b(GC\))531 4020 y +Fi(\017)41 b Fg(long)248 b(s48)p 1175 4020 V 30 w(length\(s48)p +1645 4020 V 27 w(value\))531 4165 y Fi(\017)41 b Fg(int)290 +b(S48)p 1173 4165 V 30 w(VECTOR)p 1467 4165 V 29 w(P\(s48)p +1716 4165 V 29 w(value\))531 4264 y Fi(\017)41 b Fg(long)248 +b(S48)p 1175 4264 V 30 w(VECTOR)p 1469 4264 V 29 w(LENGTH\(s48)p +1938 4264 V 27 w(value\))531 4364 y Fi(\017)41 b Fg(s48)p +751 4364 V 31 w(value)e(S48)p 1173 4364 V 30 w(VECTOR)p +1467 4364 V 29 w(REF\(s48)p 1804 4364 V 28 w(value,)g(long\))531 +4463 y Fi(\017)i Fg(void)248 b(S48)p 1175 4463 V 30 w(VECTOR)p +1469 4463 V 29 w(SET\(s48)p 1806 4463 V 28 w(value,)39 +b(long,)h(s48)p 2529 4463 V 30 w(value\))531 4563 y Fi(\017)h +Fg(s48)p 751 4563 V 31 w(value)e(s48)p 1173 4563 V 30 +w(make)p 1379 4563 V 30 w(vector\(long,)d(s48)p 2105 +4563 V 30 w(value\))615 b Fj(\(ma)n(y)28 b(GC\))531 4707 +y Fi(\017)41 b Fg(int)290 b(S48)p 1173 4707 V 30 w(STRING)p +1467 4707 V 29 w(P\(s48)p 1716 4707 V 29 w(value\))531 +4807 y Fi(\017)41 b Fg(long)248 b(S48)p 1175 4807 V 30 +w(STRING)p 1469 4807 V 29 w(LENGTH\(s48)p 1938 4807 V +27 w(value\))531 4907 y Fi(\017)41 b Fg(char)248 b(S48)p +1175 4907 V 30 w(STRING)p 1469 4907 V 29 w(REF\(s48)p +1806 4907 V 28 w(value,)39 b(long\))531 5006 y Fi(\017)i +Fg(void)248 b(S48)p 1175 5006 V 30 w(STRING)p 1469 5006 +V 29 w(SET\(s48)p 1806 5006 V 28 w(value,)39 b(long,)h(char\))1926 +5255 y Fj(7)p eop +%%Page: 8 8 +8 7 bop 531 523 a Fi(\017)41 b Fg(s48)p 751 523 27 4 +v 31 w(value)e(s48)p 1173 523 V 30 w(make)p 1379 523 +V 30 w(string\(long,)d(char\))821 b Fj(\(ma)n(y)28 b(GC\))531 +672 y Fi(\017)41 b Fg(int)290 b(S48)p 1173 672 V 30 w(SYMBOL)p +1467 672 V 29 w(P\(s48)p 1716 672 V 29 w(value\))531 +772 y Fi(\017)41 b Fg(s48)p 751 772 V 31 w(value)e(s48)p +1173 772 V 30 w(SYMBOL)p 1467 772 V 29 w(TO)p 1584 772 +V 31 w(STRING\(s48)p 2055 772 V 27 w(value\))531 922 +y Fi(\017)i Fg(int)290 b(S48)p 1173 922 V 30 w(BYTE)p +1379 922 V 30 w(VECTOR)p 1673 922 V 28 w(P\(s48)p 1921 +922 V 30 w(value\))531 1021 y Fi(\017)41 b Fg(long)248 +b(S48)p 1175 1021 V 30 w(BYTE)p 1381 1021 V 30 w(VECTOR)p +1675 1021 V 29 w(LENGTH\(s48)p 2144 1021 V 27 w(value\))531 +1121 y Fi(\017)41 b Fg(char)248 b(S48)p 1175 1121 V 30 +w(BYTE)p 1381 1121 V 30 w(VECTOR)p 1675 1121 V 29 w(REF\(s48)p +2012 1121 V 28 w(value,)39 b(long\))531 1220 y Fi(\017)i +Fg(void)248 b(S48)p 1175 1220 V 30 w(BYTE)p 1381 1220 +V 30 w(VECTOR)p 1675 1220 V 29 w(SET\(s48)p 2012 1220 +V 28 w(value,)39 b(long,)g(int\))531 1320 y Fi(\017)i +Fg(s48)p 751 1320 V 31 w(value)e(s48)p 1173 1320 V 30 +w(make)p 1379 1320 V 30 w(byte)p 1585 1320 V 30 w(vector\(long,)d +(int\))659 b Fj(\(ma)n(y)28 b(GC\))515 1595 y Fk(8)134 +b(Calling)47 b(Sc)l(heme)e(functions)g(from)g(C)515 1776 +y Fj(External)29 b(co)r(de)h(that)g(has)g(b)r(een)h(called)f(from)g(Sc) +n(heme)g(can)g(call)g(bac)n(k)f(to)h(Sc)n(heme)g(pro-)515 +1876 y(cedures)d(using)g(the)h(follo)n(wing)e(function.)531 +2026 y Fi(\017)41 b Fg(scheme)p 883 2026 V 29 w(value)f(s48)p +1304 2026 V 30 w(call)p 1510 2026 V 30 w(scheme\(s48)p +1980 2026 V 27 w(value)f(proc,)h(long)g(nargs,)f(...\))515 +2175 y Fj(This)33 b(calls)f(the)i(Sc)n(heme)e(pro)r(cedure)g +Fg(proc)g Fj(on)h Fg(nargs)e Fj(argumen)n(ts,)i(whic)n(h)g(are)f +(passed)515 2275 y(as)i(additional)g(argumen)n(ts)f(to)i +Fg(s48)p 1680 2275 V 30 w(call)p 1886 2275 V 30 w(scheme)p +Fj(.)56 b(There)34 b(ma)n(y)g(b)r(e)h(at)g(most)f(ten)h(ar-)515 +2374 y(gumen)n(ts.)58 b(The)34 b(v)-5 b(alue)35 b(returned)f(b)n(y)g +(the)i(Sc)n(heme)e(pro)r(cedure)g(is)g(returned)h(b)n(y)f(the)h(C)515 +2474 y(pro)r(cedure.)62 b(In)n(v)n(oking)35 b(an)n(y)h(Sc)n(heme)g(pro) +r(cedure)g(ma)n(y)f(p)r(oten)n(tially)i(cause)e(a)h(garbage)515 +2573 y(collection.)639 2673 y(There)19 b(are)f(some)g(complications)g +(that)h(o)r(ccur)g(when)g(mixing)f(calls)h(from)f(C)h(to)g(Sc)n(heme) +515 2773 y(with)29 b(con)n(tin)n(uations)f(and)h(threads.)40 +b(C)29 b(only)g(supp)r(orts)f(do)n(wn)n(w)n(ard)f(con)n(tin)n(uations)h +(\(via)515 2872 y Fg(longjmp\(\))p Fj(\).)39 b(Sc)n(heme)30 +b(con)n(tin)n(uations)e(that)i(capture)f(a)g(p)r(ortion)g(of)h(the)g(C) +g(stac)n(k)e(ha)n(v)n(e)515 2972 y(to)40 b(follo)n(w)h(the)g(same)f +(restriction.)76 b(F)-7 b(or)40 b(example,)k(supp)r(ose)c(Sc)n(heme)h +(pro)r(cedure)f Fg(s0)515 3072 y Fj(captures)f(con)n(tin)n(uation)h +Fg(a)g Fj(and)g(then)h(calls)f(C)h(pro)r(cedure)e Fg(c0)p +Fj(,)k(whic)n(h)d(in)h(turn)g(calls)515 3171 y(Sc)n(heme)26 +b(pro)r(cedure)g Fg(s1)p Fj(.)36 b(Pro)r(cedure)25 b +Fg(s1)h Fj(can)g(safely)h(call)f(the)h(con)n(tin)n(uation)f +Fg(a)p Fj(,)g(b)r(ecause)515 3271 y(that)32 b(is)g(a)g(do)n(wn)n(w)n +(ard)e(use.)50 b(When)33 b Fg(a)e Fj(is)h(called)g(Sc)n(heme)g(48)f +(will)i(remo)n(v)n(e)d(the)j(p)r(ortion)515 3370 y(of)j(the)i(C)f(stac) +n(k)e(used)i(b)n(y)g(the)g(call)f(to)h Fg(c0)p Fj(.)64 +b(On)36 b(the)h(other)g(hand,)i(if)k Fg(s1)37 b Fj(captures)e(a)515 +3470 y(con)n(tin)n(uation,)f(that)f(con)n(tin)n(uation)g(cannot)g(b)r +(e)g(used)h(from)f Fg(s0)p Fj(,)h(b)r(ecause)f(b)n(y)g(the)h(time)515 +3570 y(con)n(trol)21 b(returns)h(to)g Fg(s0)g Fj(the)h(C)g(stac)n(k)f +(used)g(b)n(y)i Fg(c0)e Fj(will)g(no)h(longer)e(b)r(e)i(v)-5 +b(alid.)35 b(An)23 b(attempt)515 3669 y(to)31 b(in)n(v)n(ok)n(e)f(an)i +(up)n(w)n(ard)e(con)n(tin)n(uation)h(that)h(is)g(closed)f(o)n(v)n(er)f +(a)h(p)r(ortion)g(of)h(the)g(C)g(stac)n(k)515 3769 y(will)c(raise)e(an) +h(exception.)639 3869 y(In)22 b(Sc)n(heme)f(48)f(threads)h(are)f +(implemen)n(ted)i(using)f(con)n(tin)n(uations,)g(so)f(the)i(do)n(wn)n +(w)n(ard)515 3968 y(restriction)27 b(applies)g(to)h(them)h(as)e(w)n +(ell.)38 b(An)29 b(attempt)f(to)g(return)g(from)f(Sc)n(heme)h(to)g(C)g +(at)515 4068 y(a)33 b(time)h(when)g(the)f(appropriate)f(C)i(frame)f(is) +g(not)h(on)f(top)h(of)f(the)h(C)g(stac)n(k)e(will)i(cause)515 +4167 y(the)c(curren)n(t)g(thread)g(to)g(blo)r(c)n(k)f(un)n(til)i(the)g +(frame)f(is)g(a)n(v)-5 b(ailable.)43 b(F)-7 b(or)30 b(example,)g(supp)r +(ose)515 4267 y(thread)21 b Fg(t0)f Fj(calls)h(a)g(C)g(pro)r(cedure)f +(whic)n(h)i(calls)e(bac)n(k)h(to)g(Sc)n(heme,)h(at)g(whic)n(h)f(p)r +(oin)n(t)g(con)n(trol)515 4367 y(switc)n(hes)g(to)g(thread)g +Fg(t1)p Fj(,)h(whic)n(h)f(also)g(calls)f(C)i(and)f(then)h(bac)n(k)e(to) +i(Sc)n(heme.)34 b(A)n(t)22 b(this)g(p)r(oin)n(t)515 4466 +y(b)r(oth)28 b Fg(t0)f Fj(and)g Fg(t1)g Fj(ha)n(v)n(e)g(activ)n(e)g +(calls)g(to)h(C)f(on)h(the)g(C)g(stac)n(k,)e(with)j Fg(t1)p +Fj('s)d(C)i(frame)f(ab)r(o)n(v)n(e)515 4566 y Fg(t0)p +Fj('s.)60 b(If)36 b(thread)f Fg(t0)g Fj(attempts)h(to)g(return)f(from)g +(Sc)n(heme)h(to)f(C)h(it)g(will)g(blo)r(c)n(k,)h(as)e(its)515 +4666 y(frame)27 b(is)h(not)h(accessable.)37 b(Once)27 +b Fg(t1)h Fj(has)f(returned)h(to)g(C)g(and)g(from)g(there)g(to)g(Sc)n +(heme,)515 4765 y Fg(t0)k Fj(will)h(b)r(e)h(able)e(to)h(resume.)53 +b(The)33 b(return)f(to)h(Sc)n(heme)g(is)g(required)f(b)r(ecause)g(con)n +(text)515 4865 y(switc)n(hes)25 b(can)h(only)f(o)r(ccur)h(while)g(C)g +(co)r(de)g(is)f(running.)36 b Fg(T0)26 b Fj(will)g(also)f(b)r(e)h(able) +g(to)g(resume)515 4964 y(if)34 b Fg(t1)27 b Fj(uses)g(a)h(con)n(tin)n +(uation)e(to)i(thro)n(w)e(past)i(its)g(call)f(to)g(C.)1926 +5255 y(8)p eop +%%Page: 9 9 +9 8 bop 515 523 a Fk(9)134 b(In)l(teracting)47 b(with)e(the)g(Sc)l +(heme)g(Heap)515 705 y Fj(Sc)n(heme)35 b(48)f(uses)h(a)g(cop)n(ying,)h +(precise)e(garbage)f(collector.)59 b(An)n(y)35 b(pro)r(cedure)f(that)i +(al-)515 805 y(lo)r(cates)g(ob)5 b(jects)37 b(within)h(the)g(Sc)n(heme) +f(48)f(heap)h(ma)n(y)g(trigger)f(a)h(garbage)e(collection.)515 +904 y(V)-7 b(ariables)23 b(b)r(ound)j(to)e(v)-5 b(alues)25 +b(in)g(the)g(Sc)n(heme)g(48)f(heap)g(need)h(to)g(b)r(e)g(registered)e +(with)j(the)515 1004 y(garbage)20 b(collector)h(so)h(that)h(the)g(v)-5 +b(alue)23 b(will)g(b)r(e)g(retained)f(and)h(so)f(that)g(the)h(v)-5 +b(ariables)22 b(will)515 1103 y(b)r(e)i(up)r(dated)h(if)f(the)h +(garbage)c(collector)i(mo)n(v)n(es)f(the)j(ob)5 b(ject.)35 +b(The)24 b(garbage)e(collector)h(has)515 1203 y(no)i(facilit)n(y)g(for) +g(up)r(dating)h(p)r(oin)n(ters)f(to)g(the)h(in)n(teriors)e(of)h(ob)5 +b(jects,)25 b(so)g(suc)n(h)g(p)r(oin)n(ters,)h(for)515 +1303 y(example)f(the)h(ones)e(returned)i(b)n(y)g Fg(EXTRACT)p +1924 1303 27 4 v 28 w(STRING)p Fj(,)d(will)j(lik)n(ely)f(b)r(ecome)g +(in)n(v)-5 b(alid)26 b(when)515 1402 y(a)h(garbage)e(collection)i(o)r +(ccurs.)515 1634 y Fh(9.1)112 b(Registering)35 b(Ob)6 +b(jects)38 b(with)f(the)g(GC)515 1788 y Fj(A)28 b(set)g(of)h(macros)d +(are)h(used)i(to)f(manage)f(the)h(registration)e(of)j(lo)r(cal)e(v)-5 +b(ariables)27 b(with)i(the)515 1887 y(garbage)c(collector.)531 +2035 y Fi(\017)41 b Fg(S48)p 751 2035 V 31 w(DECLARE)p +1090 2035 V 28 w(GC)p 1206 2035 V 31 w(PROTECT\()p Fa(n)p +Fg(\))531 2135 y Fi(\017)g Fg(void)f(S48)p 967 2135 V +30 w(GC)p 1085 2135 V 31 w(PROTECT)p 1424 2135 V 28 w +Fa(n)p Fg(\(s48)p 1678 2135 V 30 w(value)1923 2147 y +Fd(1)1958 2135 y Fg(,)h Fa(:)14 b(:)g(:)p Fg(,)41 b(s48)p +2362 2135 V 30 w(value)2607 2147 y Fc(n)2650 2135 y Fg(\))531 +2235 y Fi(\017)g Fg(void)f(S48)p 967 2235 V 30 w(GC)p +1085 2235 V 31 w(UNPROTECT\(\))639 2383 y(S48)p 776 2383 +V 30 w(DECLARE)p 1114 2383 V 29 w(GC)p 1231 2383 V 30 +w(PROTECT\()p Fa(n)p Fg(\))p Fj(,)28 b(where)i(1)d Fi(\024)g +Fa(n)h Fi(\024)f Fj(9,)k(allo)r(cates)e(storage)g(for)h(regis-)515 +2483 y(tering)23 b Fa(n)h Fj(v)-5 b(ariables.)34 b(A)n(t)24 +b(most)g(one)g(use)f(of)31 b Fg(S48)p 2039 2483 V 30 +w(DECLARE)p 2377 2483 V 28 w(GC)p 2493 2483 V 31 w(PROTECT)21 +b Fj(ma)n(y)i(o)r(ccur)g(in)h(a)515 2582 y(blo)r(c)n(k.)35 +b Fg(S48)p 902 2582 V 30 w(GC)p 1020 2582 V 31 w(PROTECT)p +1359 2582 V 28 w Fa(n)p Fg(\()p Fa(v)1516 2594 y Fd(1)1553 +2582 y Fg(,)43 b Fa(:)14 b(:)g(:)p Fg(,)43 b Fa(v)1864 +2594 y Fc(n)1910 2582 y Fg(\))24 b Fj(registers)e(the)j +Fa(n)f Fj(v)-5 b(ariables)23 b(\(l-v)-5 b(alues\))25 +b(with)515 2682 y(the)c(garbage)d(collector.)33 b(It)21 +b(m)n(ust)f(b)r(e)h(within)g(scop)r(e)f(of)h(a)f Fg(S48)p +2457 2682 V 30 w(DECLARE)p 2795 2682 V 28 w(GC)p 2911 +2682 V 31 w(PROTECT\()p Fa(n)p Fg(\))515 2781 y Fj(and)27 +b(b)r(e)i(b)r(efore)e(an)n(y)g(co)r(de)h(whic)n(h)g(can)f(cause)g(a)h +(GC.)g Fg(S48)p 2383 2781 V 30 w(GC)p 2501 2781 V 31 +w(UNPROTECT)c Fj(remo)n(v)n(es)i(the)515 2881 y(blo)r(c)n(k's)32 +b(protected)h(v)-5 b(ariables)32 b(from)h(the)h(garbage)d(collectors)h +(list.)54 b(It)34 b(m)n(ust)g(b)r(e)f(called)515 2981 +y(at)g(the)h(end)f(of)g(the)h(blo)r(c)n(k)f(after)g(an)n(y)f(co)r(de)h +(whic)n(h)h(ma)n(y)e(cause)h(a)g(garbage)e(collection.)515 +3080 y(Omitting)d(an)n(y)f(of)g(the)h(three)g(ma)n(y)f(cause)g(serious) +f(and)i(hard-to-debug)e(problems.)37 b(No-)515 3180 y(tably)-7 +b(,)36 b(the)f(garbage)d(collector)h(ma)n(y)h(relo)r(cate)g(an)g(ob)5 +b(ject)34 b(and)h(in)n(v)-5 b(alidate)34 b Fg(s48)p 3136 +3180 V 30 w(value)515 3280 y Fj(v)-5 b(ariables)26 b(whic)n(h)i(are)e +(not)i(protected.)639 3379 y(A)h Fg(gc-protection-mis)o(mat)o(ch)22 +b Fj(exception)29 b(is)f(raised)g(if,)i(when)f(a)f(C)h(pro)r(cedure)f +(re-)515 3479 y(turns)h(to)g(Sc)n(heme,)h(the)g(calls)f(to)g +Fg(S48)p 1732 3479 V 30 w(GC)p 1850 3479 V 31 w(PROTECT\(\))d +Fj(ha)n(v)n(e)i(not)h(b)r(een)h(matc)n(hed)f(b)n(y)g(an)515 +3578 y(equal)e(n)n(um)n(b)r(er)g(of)h(calls)f(to)g Fg(S48)p +1554 3578 V 30 w(GC)p 1672 3578 V 31 w(UNPROTECT\(\))p +Fj(.)639 3678 y(Global)g(v)-5 b(ariables)27 b(ma)n(y)g(also)f(b)r(e)i +(registered)e(with)i(the)g(garbage)e(collector.)531 3826 +y Fi(\017)41 b Fg(void)f(S48)p 967 3826 V 30 w(GC)p 1085 +3826 V 31 w(PROTECT)p 1424 3826 V 28 w(GLOBAL\()p Ff(value)p +Fg(\))515 3975 y(S48)p 652 3975 V 30 w(GC)p 770 3975 +V 30 w(PROTECT)p 1108 3975 V 29 w(GLOBAL)34 b Fj(p)r(ermanen)n(tly)i +(registers)f(the)i(v)-5 b(ariable)35 b Ff(value)j Fj(\(an)e(l-v)-5 +b(alue\))515 4074 y(with)28 b(the)g(garbage)d(collector.)36 +b(There)27 b(is)g(no)h(w)n(a)n(y)e(to)h(unregister)g(the)h(v)-5 +b(ariable.)515 4306 y Fh(9.2)112 b(Keeping)37 b(C)g(data)i(structures)e +(in)f(the)i(Sc)m(heme)f(heap)515 4460 y Fj(C)32 b(data)f(structures)h +(can)f(b)r(e)i(k)n(ept)f(in)g(the)h(Sc)n(heme)f(heap)f(b)n(y)h(em)n(b)r +(edding)g(them)h(inside)515 4559 y(b)n(yte)26 b(v)n(ectors.)35 +b(The)27 b(follo)n(wing)f(macros)f(can)h(b)r(e)h(used)g(to)g(create)f +(and)g(access)g(em)n(b)r(edded)515 4659 y(C)h(ob)5 b(jects.)531 +4807 y Fi(\017)41 b Fg(s48)p 751 4807 V 31 w(value)e(S48)p +1173 4807 V 30 w(MAKE)p 1379 4807 V 30 w(VALUE\(type\))1121 +b Fj(\(ma)n(y)28 b(GC\))531 4907 y Fi(\017)41 b Fg(type)248 +b(S48)p 1175 4907 V 30 w(EXTRACT)p 1513 4907 V 28 w(VALUE\(s48)p +1937 4907 V 28 w(value,)39 b(type\))531 5006 y Fi(\017)i +Fg(type)f(*)166 b(S48)p 1177 5006 V 30 w(EXTRACT)p 1515 +5006 V 28 w(VALUE)p 1763 5006 V 30 w(POINTER\(s48)p 2277 +5006 V 27 w(value,)39 b(type\))1926 5255 y Fj(9)p eop +%%Page: 10 10 +10 9 bop 531 523 a Fi(\017)41 b Fg(void)248 b(S48)p 1175 +523 27 4 v 30 w(SET)p 1337 523 V 30 w(VALUE\(s48)p 1763 +523 V 28 w(value,)39 b(type,)g(value\))537 655 y(S48)p +674 655 V 30 w(MAKE)p 880 655 V 29 w(VALUE)20 b Fj(mak)n(es)h(a)g(b)n +(yte)h(v)n(ector)f(large)f(enough)h(to)h(hold)g(an)f(ob)5 +b(ject)22 b(whose)f(t)n(yp)r(e)515 755 y(is)30 b Ff(typ)l(e)p +Fj(.)45 b Fg(S48)p 950 755 V 30 w(EXTRACT)p 1288 755 +V 29 w(VALUE)28 b Fj(returns)h(the)i(con)n(ten)n(ts)f(of)g(a)g(b)n(yte) +g(v)n(ector)f(cast)h(to)g Ff(typ)l(e)p Fj(,)515 854 y(and)e +Fg(S48)p 814 854 V 31 w(EXTRACT)p 1153 854 V 28 w(VALUE)p +1401 854 V 29 w(POINTER)f Fj(returns)h(a)g(p)r(oin)n(ter)h(to)f(the)i +(con)n(ten)n(ts)e(of)h(the)g(b)n(yte)515 954 y(v)n(ector.)43 +b(The)30 b(v)-5 b(alue)30 b(returned)g(b)n(y)h Fg(S48)p +1790 954 V 30 w(EXTRACT)p 2128 954 V 29 w(VALUE)p 2377 +954 V 29 w(POINTER)d Fj(is)i(v)-5 b(alid)30 b(only)g(un)n(til)515 +1054 y(the)e(next)g(garbage)d(collection\(see)i(Section)g(9\).)639 +1153 y Fg(S48)p 776 1153 V 30 w(SET)p 938 1153 V 31 w(VALUE)e +Fj(stores)i Fg(value)e Fj(in)n(to)i(the)h(b)n(yte)g(v)n(ector.)515 +1382 y Fh(9.3)112 b(C)37 b(co)s(de)h(and)g(heap)h(images)515 +1535 y Fj(Sc)n(heme)32 b(48)f(uses)g(dump)r(ed)i(heap)f(images)e(to)i +(restore)f(a)g(previous)g(system)g(state.)50 b(The)515 +1635 y(Sc)n(heme)29 b(48)f(heap)h(is)g(written)g(in)n(to)g(a)f(\014le)i +(in)f(a)f(mac)n(hine-indep)r(enden)n(t)i(and)e(op)r(erating-)515 +1734 y(system-indep)r(enden)n(t)34 b(format.)55 b(The)34 +b(pro)r(cedures)e(describ)r(ed)i(ab)r(o)n(v)n(e)e(ma)n(y)h(b)r(e)h +(used)g(to)515 1834 y(create)26 b(ob)5 b(jects)28 b(in)g(the)g(Sc)n +(heme)f(heap)h(that)f(con)n(tain)g(information)g(sp)r(eci\014c)h(to)g +(the)g(cur-)515 1934 y(ren)n(t)40 b(mac)n(hine,)j(op)r(erating)c +(system,)k(or)c(pro)r(cess.)74 b(A)41 b(heap)f(image)f(con)n(taining)g +(suc)n(h)515 2033 y(ob)5 b(jects)27 b(ma)n(y)g(not)g(w)n(ork)g +(correctly)f(on)h(when)h(resumed.)639 2133 y(T)-7 b(o)26 +b(address)f(this)h(problem,)g(a)g(record)f(t)n(yp)r(e)h(ma)n(y)f(b)r(e) +i(giv)n(en)e(a)h(`resumer')f(pro)r(cedure.)515 2232 y(On)k(startup,)g +(the)g(resumer)g(pro)r(cedure)f(for)g(a)h(t)n(yp)r(e)g(is)g(applied)h +(to)f(eac)n(h)f(record)g(of)h(that)515 2332 y(t)n(yp)r(e)i(in)g(the)g +(image)f(b)r(eing)h(restarted.)45 b(This)31 b(pro)r(cedure)f(can)h(up)r +(date)g(the)g(record)e(in)i(a)515 2432 y(manner)19 b(appropriate)f(to)i +(the)g(mac)n(hine,)h(op)r(erating)e(system,)i(or)e(pro)r(cess)f(used)i +(to)g(resume)515 2531 y(the)28 b(image.)531 2663 y Fi(\017)41 +b Fg(\(define-record-re)o(su)o(mer)35 b Ff(r)l(e)l(c)l(or)l(d-typ)l(e) +42 b(pr)l(o)l(c)l(e)l(dur)l(e)6 b Fg(\))515 2795 y(Define-record-re)o +(su)o(me)o(r)19 b Fj(de\014nes)26 b Ff(pr)l(o)l(c)l(e)l(dur)l(e)p +Fj(,)g(whic)n(h)f(should)g(accept)g(one)g(argumen)n(t,)515 +2895 y(to)30 b(b)r(e)i(the)f(resumer)e(for)i Ff(r)l(e)l(c)l(or)l(d-typ) +l(e)6 b Fj(.)47 b(The)31 b(order)e(in)i(whic)n(h)g(resumer)f(pro)r +(cedures)f(are)515 2995 y(called)e(is)g(not)h(sp)r(eci\014ed.)639 +3094 y(The)34 b Ff(pr)l(o)l(c)l(e)l(dur)l(e)f Fj(argumen)n(t)f(to)i +Fg(define-record-r)o(esu)o(me)o(r)27 b Fj(ma)n(y)33 b(b)r(e)h +Fg(#f)p Fj(,)g(in)f(whic)n(h)515 3194 y(case)22 b(records)f(of)h(the)h +(giv)n(en)f(t)n(yp)r(e)h(are)f(not)h(written)g(out)f(in)h(heap)g +(images.)34 b(When)23 b(writing)515 3293 y(a)37 b(heap)g(image)f(an)n +(y)h(reference)f(to)h(suc)n(h)g(a)g(record)f(is)h(replaced)g(b)n(y)g +(the)g(v)-5 b(alue)37 b(of)h(the)515 3393 y(record's)26 +b(\014rst)h(\014eld,)h(and)f(an)h(exception)f(is)g(raised)g(after)g +(the)h(image)f(is)h(written.)515 3664 y Fk(10)135 b(Using)45 +b(Sc)l(heme)g(records)g(in)g(C)g(co)t(de)515 3846 y Fj(External)26 +b(mo)r(dules)i(can)f(create)g(records)f(and)h(access)f(their)i(slots)f +(p)r(ositionally)-7 b(.)531 3978 y Fi(\017)41 b Fg(s48)p +751 3978 V 31 w(value)e(S48)p 1173 3978 V 30 w(MAKE)p +1379 3978 V 30 w(RECORD\(s48)p 1849 3978 V 27 w(value\))874 +b Fj(\(ma)n(y)28 b(GC\))531 4077 y Fi(\017)41 b Fg(int)290 +b(S48)p 1173 4077 V 30 w(RECORD)p 1467 4077 V 29 w(P\(s48)p +1716 4077 V 29 w(value\))531 4177 y Fi(\017)41 b Fg(s48)p +751 4177 V 31 w(value)e(S48)p 1173 4177 V 30 w(RECORD)p +1467 4177 V 29 w(TYPE\(s48)p 1848 4177 V 28 w(value\))531 +4276 y Fi(\017)i Fg(s48)p 751 4276 V 31 w(value)e(S48)p +1173 4276 V 30 w(RECORD)p 1467 4276 V 29 w(REF\(s48)p +1804 4276 V 28 w(value,)g(long\))531 4376 y Fi(\017)i +Fg(void)248 b(S48)p 1175 4376 V 30 w(RECORD)p 1469 4376 +V 29 w(SET\(s48)p 1806 4376 V 28 w(value,)39 b(long,)h(s48)p +2529 4376 V 30 w(value\))515 4508 y Fj(The)31 b(argumen)n(t)f(to)h +Fg(S48)p 1306 4508 V 30 w(MAKE)p 1512 4508 V 30 w(RECORD)e +Fj(should)i(b)r(e)g(a)g(shared)f(binding)i(whose)e(v)-5 +b(alue)31 b(is)515 4608 y(a)d(record)f(t)n(yp)r(e.)40 +b(In)29 b(C)g(the)g(\014elds)g(of)f(Sc)n(heme)h(records)e(are)g(only)i +(accessible)e(via)h(o\013sets,)515 4707 y(with)f(the)g(\014rst)g +(\014eld)g(ha)n(ving)f(o\013set)h(zero,)f(the)h(second)f(o\013set)h +(one,)g(and)g(so)f(forth.)36 b(If)28 b(the)515 4807 y(order)e(of)i(the) +h(\014elds)e(is)h(c)n(hanged)f(in)h(the)h(Sc)n(heme)f(de\014nition)g +(of)g(the)g(record)f(t)n(yp)r(e)h(the)g(C)515 4907 y(co)r(de)f(m)n(ust) +h(b)r(e)g(up)r(dated)g(as)f(w)n(ell.)639 5006 y(F)-7 +b(or)27 b(example,)g(giv)n(en)g(the)h(follo)n(wing)f(record-t)n(yp)r(e) +f(de\014nition)1905 5255 y(10)p eop +%%Page: 11 11 +11 10 bop 680 523 a Fg(\(define-record-t)o(ype)37 b(thing)k(:thing)767 +623 y(\(make-thing)e(a)k(b\))767 722 y(thing?)767 822 +y(\(a)g(thing-a\))767 922 y(\(b)g(thing-b\)\))515 1081 +y Fj(the)28 b(iden)n(ti\014er)f Fg(:thing)e Fj(is)j(b)r(ound)g(to)f +(the)h(record)e(t)n(yp)r(e)i(and)g(can)f(b)r(e)h(exp)r(orted)f(to)h(C:) +680 1240 y Fg(\(define-exported)o(-bi)o(nd)o(ing)37 b("thing-record-ty) +o(pe)o(")g(:thing\))515 1400 y(Thing)25 b Fj(records)h(can)h(then)i(b)r +(e)f(made)f(in)h(C:)680 1559 y Fg(static)41 b(scheme_value)e +(thing_record_typ)o(e_)o(bin)o(di)o(ng)e(=)43 b(SCHFALSE;)680 +1758 y(void)f(initialize_thing)o(s\(v)o(oi)o(d\))680 +1858 y Fi(f)767 1958 y Fg(S48_GC_PROTECT_GL)o(OB)o(AL\()o(th)o(ing)o +(_r)o(ec)o(ord)o(_t)o(ype)o(_b)o(in)o(din)o(g\))o(;)767 +2057 y(thing_record_type)o(_b)o(ind)o(in)o(g)c(=)898 +2157 y(s48_get_imported)o(_bi)o(nd)o(ing)o(\(")o(th)o(ing)o(-r)o(eco)o +(rd)o(-t)o(ype)o("\))o(;)680 2257 y Fi(g)680 2456 y Fg(scheme_value)h +(make_thing\(schem)o(e_)o(va)o(lue)e(a,)43 b(scheme_value)38 +b(b\))680 2555 y Fi(f)767 2655 y Fg(s48_value)i(thing;)767 +2755 y(s48_DECLARE_GC_PR)o(OT)o(ECT)o(\(2)o(\);)767 2954 +y(S48_GC_PROTECT_2\()o(a,)d(b\);)767 3153 y(thing)42 +b(=)h(s48_make_record\()o(thi)o(ng)o(_r)o(eco)o(rd)o(_ty)o(pe)o(_b)o +(ind)o(in)o(g\);)767 3253 y(S48_RECORD_SET\(th)o(in)o(g,)37 +b(0,)43 b(a\);)767 3352 y(S48_RECORD_SET\(th)o(in)o(g,)37 +b(1,)43 b(b\);)767 3552 y(S48_GC_UNPROTECT\()o(\);)767 +3751 y(return)e(thing;)680 3851 y Fi(g)515 4010 y Fj(Note)31 +b(that)g(the)g(v)-5 b(ariables)29 b Fg(a)h Fj(and)h Fg(b)f +Fj(m)n(ust)h(b)r(e)g(protected)g(against)e(the)i(p)r(ossibilit)n(y)g +(of)f(a)515 4110 y(garbage)25 b(collection)i(o)r(ccuring)g(during)g +(the)h(call)f(to)g Fg(s48)p 2324 4110 27 4 v 31 w(make)p +2531 4110 V 29 w(record\(\))p Fj(.)515 4383 y Fk(11)135 +b(Raising)46 b(exceptions)g(from)f(external)h(co)t(de)515 +4565 y Fj(The)34 b(follo)n(wing)f(macros)f(explicitly)i(raise)f +(certain)g(errors,)h(immediately)g(returning)f(to)515 +4664 y(Sc)n(heme)k(48.)67 b(Raising)37 b(an)h(exception)f(p)r(erforms)g +(all)h(necessary)e(clean-up)h(actions)g(to)515 4764 y(prop)r(erly)30 +b(return)g(to)h(Sc)n(heme)g(48,)g(including)h(adjusting)f(the)g(stac)n +(k)f(of)h(protected)g(v)-5 b(ari-)515 4863 y(ables.)531 +5006 y Fi(\017)41 b Fg(s48)p 751 5006 V 31 w(raise)p +1002 5006 V 29 w(scheme)p 1295 5006 V 29 w(exception\(int)36 +b(type,)j(int)i(nargs,)e(...\))1905 5255 y Fj(11)p eop +%%Page: 12 12 +12 11 bop 515 523 a Fg(s48)p 652 523 27 4 v 30 w(raise)p +902 523 V 29 w(scheme)p 1195 523 V 29 w(exception)15 +b Fj(is)k(the)h(base)e(pro)r(cedure)g(for)h(raising)e(exceptions.)34 +b Fg(type)515 623 y Fj(is)27 b(the)h(t)n(yp)r(e)f(of)h(exception,)f +(and)g(should)h(b)r(e)f(one)g(of)h(the)g Fg(S48)p 2480 +623 V 30 w(EXCEPTION)p 2906 623 V 27 w Fj(.)14 b(.)g(.)g(constan)n(ts) +515 722 y(de\014ned)37 b(in)f Fg(scheme48arch.h)p Fj(.)58 +b Fg(nargs)35 b Fj(is)h(the)h(n)n(um)n(b)r(er)g(of)f(additional)g(v)-5 +b(alues)36 b(to)h(b)r(e)515 822 y(included)26 b(in)h(the)f(exception;)g +(these)g(follo)n(w)g(the)g Fg(nargs)e Fj(argumen)n(t)h(and)h(should)g +(all)f(ha)n(v)n(e)515 922 y(t)n(yp)r(e)j Fg(s48)p 839 +922 V 30 w(value)p Fj(.)35 b Fg(s48)p 1279 922 V 30 w(raise)p +1529 922 V 29 w(scheme)p 1822 922 V 29 w(exception)24 +b Fj(nev)n(er)i(returns.)639 1021 y(The)i(follo)n(wing)e(pro)r(cedures) +h(are)f(a)n(v)-5 b(ailable)26 b(for)h(raising)g(particular)f(t)n(yp)r +(es)h(of)h(excep-)515 1121 y(tions.)36 b(Lik)n(e)27 b +Fg(s48)p 1068 1121 V 31 w(raise)p 1319 1121 V 29 w(scheme)p +1612 1121 V 29 w(exception)d Fj(these)j(nev)n(er)g(return.)531 +1270 y Fi(\017)41 b Fg(s48)p 751 1270 V 31 w(raise)p +1002 1270 V 29 w(argument)p 1383 1270 V 28 w(type)p 1587 +1270 V 30 w(error\(scheme)p 2145 1270 V 26 w(value\))531 +1370 y Fi(\017)g Fg(s48)p 751 1370 V 31 w(raise)p 1002 +1370 V 29 w(argument)p 1383 1370 V 28 w(number)p 1675 +1370 V 29 w(error\(int)d(nargs,)h(int)h(min,)g(int)g(max\))531 +1469 y Fi(\017)h Fg(s48)p 751 1469 V 31 w(raise)p 1002 +1469 V 29 w(index)p 1251 1469 V 29 w(range)p 1500 1469 +V 29 w(error\(long)d(value,)h(long)h(min,)g(long)f(max\))531 +1569 y Fi(\017)i Fg(s48)p 751 1569 V 31 w(raise)p 1002 +1569 V 29 w(closed)p 1295 1569 V 29 w(channel)p 1632 +1569 V 28 w(error\(\))531 1669 y Fi(\017)g Fg(s48)p 751 +1669 V 31 w(raise)p 1002 1669 V 29 w(os)p 1119 1669 V +30 w(error\(int)d(errno\))531 1768 y Fi(\017)j Fg(s48)p +751 1768 V 31 w(raise)p 1002 1768 V 29 w(out)p 1163 1768 +V 30 w(of)p 1281 1768 V 31 w(memory)p 1576 1768 V 28 +w(error\(\))515 1918 y Fj(An)25 b(argumen)n(t)g(t)n(yp)r(e)g(error)e +(indicates)i(that)h(the)f(giv)n(en)g(v)-5 b(alue)25 b(is)g(of)g(the)g +(wrong)f(t)n(yp)r(e.)37 b(An)515 2017 y(argumen)n(t)24 +b(n)n(um)n(b)r(er)h(error)e(is)i(raised)f(when)i(the)f(n)n(um)n(b)r(er) +g(of)g(argumen)n(ts,)g Fg(nargs)p Fj(,)e(should)515 2117 +y(b)r(e,)29 b(but)h(isn't,)g(b)r(et)n(w)n(een)f Fg(min)e +Fj(and)i Fg(max)p Fj(,)f(inclusiv)n(e.)41 b(Similarly)-7 +b(,)29 b(and)f(index)h(range)f(error)515 2217 y(is)f(raised)g(when)h +Fg(value)d Fj(is)j(not)f(b)r(et)n(w)n(een)h(b)r(et)n(w)n(een)f +Fg(min)g Fj(and)g Fg(max)p Fj(,)g(inclusiv)n(e.)639 2316 +y(The)g(follo)n(wing)f(macros)g(raise)g(argumen)n(t)g(t)n(yp)r(e)h +(errors)e(if)i(their)g(argumen)n(t)f(do)r(es)h(not)515 +2416 y(ha)n(v)n(e)f(the)i(required)f(t)n(yp)r(e.)531 +2565 y Fi(\017)41 b Fg(void)f(S48)p 967 2565 V 30 w(CHECK)p +1217 2565 V 30 w(SYMBOL\(s48)p 1687 2565 V 27 w(value\))531 +2665 y Fi(\017)h Fg(void)f(S48)p 967 2665 V 30 w(CHECK)p +1217 2665 V 30 w(PAIR\(s48)p 1599 2665 V 28 w(value\))531 +2765 y Fi(\017)h Fg(void)f(S48)p 967 2765 V 30 w(CHECK)p +1217 2765 V 30 w(STRING\(s48)p 1687 2765 V 27 w(value\))531 +2864 y Fi(\017)h Fg(void)f(S48)p 967 2864 V 30 w(CHECK)p +1217 2864 V 30 w(INTEGER\(s48)p 1731 2864 V 27 w(value\))531 +2964 y Fi(\017)h Fg(void)f(S48)p 967 2964 V 30 w(CHECK)p +1217 2964 V 30 w(CHANNEL\(s48)p 1731 2964 V 27 w(value\))531 +3064 y Fi(\017)h Fg(void)f(S48)p 967 3064 V 30 w(CHECK)p +1217 3064 V 30 w(BYTE)p 1423 3064 V 29 w(VECTOR\(s48)p +1892 3064 V 28 w(value\))531 3163 y Fi(\017)h Fg(void)f(S48)p +967 3163 V 30 w(CHECK)p 1217 3163 V 30 w(RECORD\(s48)p +1687 3163 V 27 w(value\))531 3263 y Fi(\017)h Fg(void)f(S48)p +967 3263 V 30 w(CHECK)p 1217 3263 V 30 w(SHARED)p 1511 +3263 V 29 w(BINDING\(s48)p 2024 3263 V 26 w(value\))515 +3537 y Fk(12)135 b(Unsafe)46 b(functions)e(and)h(macros)515 +3719 y Fj(All)24 b(of)h(the)f(C)h(pro)r(cedures)e(and)h(macros)e +(describ)r(ed)i(ab)r(o)n(v)n(e)f(c)n(hec)n(k)h(that)g(their)g(argumen)n +(ts)515 3819 y(ha)n(v)n(e)h(the)i(appropriate)e(t)n(yp)r(es)i(and)f +(that)h(indexes)f(are)g(in)h(range.)35 b(The)27 b(follo)n(wing)e(pro)r +(ce-)515 3918 y(dures)20 b(and)i(macros)d(are)i(iden)n(tical)g(to)g +(those)g(describ)r(ed)g(ab)r(o)n(v)n(e,)g(except)g(that)h(they)f(do)g +(not)515 4018 y(p)r(erform)31 b(t)n(yp)r(e)h(and)f(range)g(c)n(hec)n +(ks.)48 b(They)31 b(are)g(pro)n(vided)g(for)g(the)h(purp)r(ose)f(of)g +(writing)515 4118 y(more)c(e\016cien)n(t)g(co)r(de;)h(their)f(general)f +(use)i(is)f(not)h(recommended.)531 4267 y Fi(\017)41 +b Fg(char)248 b(S48)p 1175 4267 V 30 w(UNSAFE)p 1469 +4267 V 29 w(EXTRACT)p 1806 4267 V 28 w(CHAR\(s48)p 2186 +4267 V 28 w(value\))531 4367 y Fi(\017)41 b Fg(char)f(*)166 +b(S48)p 1177 4367 V 30 w(UNSAFE)p 1471 4367 V 29 w(EXTRACT)p +1808 4367 V 28 w(STRING\(s48)p 2276 4367 V 28 w(value\))531 +4466 y Fi(\017)41 b Fg(long)248 b(S48)p 1175 4466 V 30 +w(UNSAFE)p 1469 4466 V 29 w(EXTRACT)p 1806 4466 V 28 +w(INTEGER\(s48)p 2318 4466 V 27 w(value\))531 4566 y +Fi(\017)41 b Fg(long)248 b(S48)p 1175 4566 V 30 w(UNSAFE)p +1469 4566 V 29 w(EXTRACT)p 1806 4566 V 28 w(DOUBLE\(s48)p +2274 4566 V 28 w(value\))531 4715 y Fi(\017)41 b Fg(long)248 +b(S48)p 1175 4715 V 30 w(UNSAFE)p 1469 4715 V 29 w(EXTRACT)p +1806 4715 V 28 w(FIXNUM\(s48)p 2274 4715 V 28 w(value\))531 +4815 y Fi(\017)41 b Fg(s48)p 751 4815 V 31 w(value)e(S48)p +1173 4815 V 30 w(UNSAFE)p 1467 4815 V 29 w(ENTER)p 1716 +4815 V 29 w(FIXNUM\(long\))531 4964 y Fi(\017)i Fg(s48)p +751 4964 V 31 w(value)e(S48)p 1173 4964 V 30 w(UNSAFE)p +1467 4964 V 29 w(CAR\(s48)p 1804 4964 V 28 w(value\))1905 +5255 y Fj(12)p eop +%%Page: 13 13 +13 12 bop 531 523 a Fi(\017)41 b Fg(s48)p 751 523 27 +4 v 31 w(value)e(S48)p 1173 523 V 30 w(UNSAFE)p 1467 +523 V 29 w(CDR\(s48)p 1804 523 V 28 w(value\))531 623 +y Fi(\017)i Fg(void)248 b(S48)p 1175 623 V 30 w(UNSAFE)p +1469 623 V 29 w(SET)p 1630 623 V 30 w(CAR\(s48)p 1968 +623 V 28 w(value,)39 b(s48)p 2431 623 V 31 w(value\))531 +722 y Fi(\017)i Fg(void)248 b(S48)p 1175 722 V 30 w(UNSAFE)p +1469 722 V 29 w(SET)p 1630 722 V 30 w(CDR\(s48)p 1968 +722 V 28 w(value,)39 b(s48)p 2431 722 V 31 w(value\))531 +872 y Fi(\017)i Fg(long)248 b(S48)p 1175 872 V 30 w(UNSAFE)p +1469 872 V 29 w(VECTOR)p 1762 872 V 29 w(LENGTH\(s48)p +2231 872 V 27 w(value\))531 971 y Fi(\017)41 b Fg(s48)p +751 971 V 31 w(value)e(S48)p 1173 971 V 30 w(UNSAFE)p +1467 971 V 29 w(VECTOR)p 1760 971 V 29 w(REF\(s48)p 2097 +971 V 28 w(value,)g(long\))531 1071 y Fi(\017)i Fg(void)248 +b(S48)p 1175 1071 V 30 w(UNSAFE)p 1469 1071 V 29 w(VECTOR)p +1762 1071 V 29 w(SET\(s48)p 2099 1071 V 28 w(value,)39 +b(long,)h(s48)p 2822 1071 V 30 w(value\))531 1220 y Fi(\017)h +Fg(long)248 b(S48)p 1175 1220 V 30 w(UNSAFE)p 1469 1220 +V 29 w(STRING)p 1762 1220 V 29 w(LENGTH\(s48)p 2231 1220 +V 27 w(value\))531 1320 y Fi(\017)41 b Fg(char)248 b(S48)p +1175 1320 V 30 w(UNSAFE)p 1469 1320 V 29 w(STRING)p 1762 +1320 V 29 w(REF\(s48)p 2099 1320 V 28 w(value,)39 b(long\))531 +1420 y Fi(\017)i Fg(void)248 b(S48)p 1175 1420 V 30 w(UNSAFE)p +1469 1420 V 29 w(STRING)p 1762 1420 V 29 w(SET\(s48)p +2099 1420 V 28 w(value,)39 b(long,)h(char\))531 1569 +y Fi(\017)h Fg(s48)p 751 1569 V 31 w(value)e(S48)p 1173 +1569 V 30 w(UNSAFE)p 1467 1569 V 29 w(SYMBOL)p 1760 1569 +V 29 w(TO)p 1877 1569 V 30 w(STRING\(s48)p 2347 1569 +V 28 w(value\))531 1719 y Fi(\017)i Fg(long)248 b(S48)p +1175 1719 V 30 w(UNSAFE)p 1469 1719 V 29 w(BYTE)p 1674 +1719 V 30 w(VECTOR)p 1968 1719 V 28 w(LENGTH\(s48)p 2436 +1719 V 28 w(value\))531 1818 y Fi(\017)41 b Fg(char)248 +b(S48)p 1175 1818 V 30 w(UNSAFE)p 1469 1818 V 29 w(BYTE)p +1674 1818 V 30 w(VECTOR)p 1968 1818 V 28 w(REF\(s48)p +2304 1818 V 29 w(value,)39 b(long\))531 1918 y Fi(\017)i +Fg(void)248 b(S48)p 1175 1918 V 30 w(UNSAFE)p 1469 1918 +V 29 w(BYTE)p 1674 1918 V 30 w(VECTOR)p 1968 1918 V 28 +w(SET\(s48)p 2304 1918 V 29 w(value,)39 b(long,)g(int\))531 +2067 y Fi(\017)i Fg(s48)p 751 2067 V 31 w(value)e(S48)p +1173 2067 V 30 w(UNSAFE)p 1467 2067 V 29 w(SHARED)p 1760 +2067 V 29 w(BINDING)p 2097 2067 V 28 w(REF\(s48)p 2433 +2067 V 29 w(value)g(s)p 2765 2067 V 31 w(b\))531 2167 +y Fi(\017)i Fg(int)290 b(S48)p 1173 2167 V 30 w(UNSAFE)p +1467 2167 V 29 w(SHARED)p 1760 2167 V 29 w(BINDING)p +2097 2167 V 28 w(P\(x\))531 2267 y Fi(\017)41 b Fg(int)290 +b(S48)p 1173 2267 V 30 w(UNSAFE)p 1467 2267 V 29 w(SHARED)p +1760 2267 V 29 w(BINDING)p 2097 2267 V 28 w(IS)p 2213 +2267 V 31 w(IMPORT)p 2508 2267 V 29 w(P\(s48)p 2757 2267 +V 29 w(value)39 b(s)p 3089 2267 V 31 w(b\))531 2366 y +Fi(\017)i Fg(s48)p 751 2366 V 31 w(value)e(S48)p 1173 +2366 V 30 w(UNSAFE)p 1467 2366 V 29 w(SHARED)p 1760 2366 +V 29 w(BINDING)p 2097 2366 V 28 w(NAME\(s48)p 2477 2366 +V 28 w(value)h(s)p 2809 2366 V 31 w(b\))531 2466 y Fi(\017)h +Fg(void)248 b(S48)p 1175 2466 V 30 w(UNSAFE)p 1469 2466 +V 29 w(SHARED)p 1762 2466 V 29 w(BINDING)p 2099 2466 +V 28 w(SET\(s48)p 2435 2466 V 29 w(value)39 b(s)p 2767 +2466 V 31 w(b,)i(s48)p 3059 2466 V 30 w(value)e(value\))531 +2615 y Fi(\017)i Fg(s48)p 751 2615 V 31 w(value)e(S48)p +1173 2615 V 30 w(UNSAFE)p 1467 2615 V 29 w(RECORD)p 1760 +2615 V 29 w(TYPE\(s48)p 2141 2615 V 28 w(value\))531 +2715 y Fi(\017)i Fg(s48)p 751 2715 V 31 w(value)e(S48)p +1173 2715 V 30 w(UNSAFE)p 1467 2715 V 29 w(RECORD)p 1760 +2715 V 29 w(REF\(s48)p 2097 2715 V 28 w(value,)g(long\))531 +2814 y Fi(\017)i Fg(void)248 b(S48)p 1175 2814 V 30 w(UNSAFE)p +1469 2814 V 29 w(RECORD)p 1762 2814 V 29 w(SET\(s48)p +2099 2814 V 28 w(value,)39 b(long,)h(s48)p 2822 2814 +V 30 w(value\))531 2964 y Fi(\017)h Fg(type)248 b(S48)p +1175 2964 V 30 w(UNSAFE)p 1469 2964 V 29 w(EXTRACT)p +1806 2964 V 28 w(VALUE\(s48)p 2230 2964 V 28 w(value,)39 +b(type\))531 3064 y Fi(\017)i Fg(type)f(*)166 b(S48)p +1177 3064 V 30 w(UNSAFE)p 1471 3064 V 29 w(EXTRACT)p +1808 3064 V 28 w(VALUE)p 2056 3064 V 30 w(POINTER\(s48)p +2570 3064 V 27 w(value,)39 b(type\))531 3163 y Fi(\017)i +Fg(void)248 b(S48)p 1175 3163 V 30 w(UNSAFE)p 1469 3163 +V 29 w(SET)p 1630 3163 V 30 w(VALUE\(s48)p 2056 3163 +V 28 w(value,)39 b(type,)g(value\))1905 5255 y Fj(13)p +eop +%%Trailer +end +userdict /end-hook known{end-hook}if +%%EOF diff --git a/doc/hacking.txt b/doc/hacking.txt new file mode 100644 index 0000000..081d7e5 --- /dev/null +++ b/doc/hacking.txt @@ -0,0 +1,290 @@ + +,bench +,load-package linker +,new-package =link= linker debuginfo defpackage +,load scripts.scm +(link-initial-system) + + +To change between initial image starting in mini-command (MINI) and +command (MAXI): + + 1. Definition of initial system's command module in comp-packages.scm: + MINI: (make-mini-command scheme) + MAXI: (make-command scheme) + 2. Location of (define-module (make-command ...)...): + MINI: more-packages.scm + MAXI: comp-packages.scm + 3. Location of (define-interface command-interface ...): + MINI: more-interfaces.scm + MAXI: interfaces.scm + + + + +> ,new-package z architecture primitives packages table enumerated debug-data +z> (let ((i 0)) + (table-walk (lambda (x y) (set! i (+ i 1))) + location-name-table) + i) +1385 +z> (vector-length (find-all-xs (name->enumerand 'location stob))) +1259 +(vector-length (find-all-xs (name->enumerand 'record stob))) +2150 + +(find-all-xs (name->enumerand 'record stob)) +z> (do ((i 0 (+ i 1)) + (j 0 (if (package? (vector-ref rs i)) (+ j 1) j))) ((= i (vector-length rs)) j)) +72 +z> + + + + +> ,new-package z architecture primitives compiler table +z> (vector-ref stob 10) +'template +z> stob +'#(pair symbol vector closure location port ratio record continuation extended-number template weak-pointer external unused-d-header1 unused-d-header2 string code-vector double bignum) +z> (vector-ref stob 7) +'record +z> (define rs (find-all-xs 7)) +z> (vector-length rs) +2178 +z> (define ls (find-all-xs 4)) +z> (vector-length ls) +1266 +z> + + + + +To get a fresh config package: + +,in config (define-structures ((config1 (export))) + (open defpackage built-in-structures more-structures)) +,config-package-is config1 + + +To load a linker with a fresh new compiler: + x48 -i new-scheme48.image -h 10000000 ,in reification reify-structures +'#{Procedure 8447 reify-structures} +debug-config> (define reify-structures ##) +debug-config> make-simple-package + +Error: undefined variable + make-simple-package + (package debug-config) +1 debug-config> +debug-config> (define-structures ((p (export start))) (open initial-system scheme-level-2 packages)) +debug-config> (define go (in p `(start ,(reify-structures (desirable-packages) (lambda (loc) `',loc))))) + + + +### Small images for exercising the linker and/or runtime system + +debug/tiny.image: debug/tiny.scm $(LINKER_IMAGE) + ($(START_LINKER_RUNNABLE) \ + echo "(load \"debug/tiny-packages.scm\")"; \ + echo "(link-simple-system '(debug tiny) 'start tiny-system)") \ + | $(LINKER_RUNNABLE) -i $(LINKER_IMAGE) + +debug/little.image: $(LINKER_IMAGE) $(CONFIG_FILES) $(little-files) + ($(START_LINKER_RUNNABLE) \ + echo "(load \"scripts.scm\")"; \ + echo "(link-little-system)") \ + | $(LINKER_RUNNABLE) -i $(LINKER_IMAGE) $(BIG_HEAP) + +debug/medium.image: $(LINKER_IMAGE) $(CONFIG_FILES) $(medium-files) + ($(START_LINKER_RUNNABLE) \ + echo "(load \"scripts.scm\")"; \ + echo "(link-medium-system)") \ + | $(LINKER_RUNNABLE) -i $(LINKER_IMAGE) $(BIG_HEAP) + + + echo "(define l-f (package-all-filenames little-system))"; \ + echo "(define m-f (package-all-filenames medium-system))"; \ + + 'little-files l-f 'medium-files m-f \ + + +[The following is from June 1992, and probably not quite compatible +with the current compiler internals.] + +To eliminate use of the stack GC to implement tail recursion, change +comp.scm as follows: + +(define (compile-unknown-call exp cenv depth cont) + (note-source-code + exp + (maybe-push-continuation (sequentially + (push-all (cdr exp) cenv 0) + (compile (car exp) + cenv + (length (cdr exp)) + (fall-through-cont)) + (instruction (if (return-cont? cont) + op/move-args-and-call + op/call) + (length (cdr exp)))) + depth + cont))) + + +-------------------- + +Here's another cool thing. 6/28/93 + +(define-interface evaluation-interface + (export eval load eval-from-file)) + +(define-structure run evaluation-interface + (open scheme-level-2 syntactic packages scan + environments + signals + locations + features ;force-output + table + fluids) + (files (debug run))) + +,load-package run +,in run +,in package-commands (environment-for-syntax-promise) +(define cool (make-simple-package (list scheme) eval ## 'cool)) +,in command set-environment-for-commands! +(## cool) + +cool> ,inspect (lambda (x) x) +'#{Procedure 6394} + + [0: exp] '(lambda (x) x) + [1: env] '#{Package 286 cool} +inspect: +inspect: q +cool> + + + +(define (z s) + (define (show-type name static) + (write name) + (display " : ") + (write (static-type static)) + (newline)) + (if (package? s) + (for-each-definition (lambda (name static loc) + (show-type name static)) + s) + (interface-walk (lambda (name type) + (show-type name + (car (structure-lookup + s name #t)))) + (structure-interface s)))) + +; ,open expander syntactic packages reconstruction + +(define (e x) + (let ((p (interaction-environment))) + (let ((node (expand-form x p))) + (write (node-type node (package->environment p))) + (newline) + (eval node p)))) + + + +> (define hunk3 (lap hunk3 + 0 (check-nargs= 3) + 2 (pop) + 3 (make-stored-object 3 0) + 6 (return))) +> (hunk3 1 2 3) +'(1 . 2) +> (define cxr (lap cxr + 0 (check-nargs= 2) + 2 (pop) + 3 (stored-object-indexed-ref 0) + 5 (return))) +> (cxr (hunk3 1 2 3) 2) +3 +> + + +(define-syntax %cons + (lambda (e r c) + (let ((n (cadr e)) + (kind (caddr e))) + `(,(r 'lap) (%cons ,n ,kind) + (check-nargs= ,n) + (pop) + (make-stored-object ,n ,kind) + (return))))) + + +(define (& x) + (or (node-ref x 'uid) + (begin (set! *n* (+ *n* 1)) + (node-set! x 'uid *n*) + *n*)) + x) + +(define (uid n) (node-ref (& n) 'uid)) + +(define *n* 0) diff --git a/doc/html/external.html b/doc/html/external.html new file mode 100644 index 0000000..61ca405 --- /dev/null +++ b/doc/html/external.html @@ -0,0 +1,690 @@ + + + + +Mixing Scheme 48 and C + + + + +

Using C code with Scheme 48

+

Mike Sperber
sperber@informatik.uni-tuebingen.de
Richard Kelsey
kelsey@research.nj.nec.com +

+

February 23, 1999

+

Abstract

+
+This document describes an interface for calling C functions + from Scheme, calling Scheme functions from C, and allocating + storage in the Scheme heap. +These facilities are designed to link + existing C libraries into Scheme 48 in order to use them from Scheme. +To this end, Scheme 48 manages stub functions in C that + negotiate between the calling conventions of Scheme and C and the + memory allocation policies of both worlds. +No stub generator is available yet, but writing them is a straightforward task. +
+

Available Facilities

+ +

The following facilities are available for interfacing between + Scheme 48 and C: +

  • Scheme code can call C functions. +
  • The external interface provides full introspection for all + Scheme objects. External code may inspect, modify, and allocate + Scheme objects arbitrarily. +
  • External code may raise exceptions back to Scheme 48 to + signal errors. +
  • External code may call back into Scheme. Scheme 48 + correctly unrolls the process stack on non-local exits. +
  • External modules may register bindings of names to values with a + central registry accessible from + Scheme. Conversely, Scheme code can register shared + bindings for access by C code. +
+This document has three parts: the first describes how bindings are + moved from Scheme to C and vice versa, the second tells how to call + C functions from Scheme, and the third covers the C interface + to Scheme objects, including calling Scheme procedures, using the + Scheme heap, and so forth. +

Scheme structures

+

The structure external-calls has + most of the Scheme functions described here. +The others are in + dynamic-externals, which has the functions for dynamic loading and + name lookup from + +the section on Dynamic Loading, + and shared-bindings, which has the additional shared-binding functions + described in + +the section on the complete shared-binding interface. +

C naming conventions

+

The names of all of Scheme 48's visible C bindings begin + with `s48_' (for procedures and variables) or + `S48_' (for macros). +Whenever a C name is derived from a Scheme identifier, we + replace `-' with `_' and convert letters to lowercase + for procedures and uppercase for macros. +A final `?' converted to `_p' (`_P' in C macro names). +A final `!' is dropped. +Thus the C macro for Scheme's pair? is S48_PAIR_P and + the one for set-car! is S48_SET_CAR. +Procedures and macros that do not check the types of their arguments + have `unsafe' in their names. +

All of the C functions and macros described have prototypes or definitions + in the file c/scheme48.h. +The C type for Scheme values is defined there to be s48_value. +

Shared bindings

+ +

Shared bindings are the means by which named values are shared between Scheme + code and C code. +There are two separate tables of shared bindings, one for values defined in + Scheme and accessed from C and the other for values going the other way. +Shared bindings actually bind names to cells, to allow a name to be looked + up before it has been assigned. +This is necessary because C initialization code may be run before or after + the corresponding Scheme code, depending on whether the Scheme code is in + the resumed image or is run in the current session. +

Exporting Scheme values to C

+
  • (define-exported-binding name value) -> shared-binding +
+
  • s48_value s48_get_imported_binding(char *name) +
  • s48_value S48_SHARED_BINDING_REF(s48_value shared_binding) +
+

Define-exported-binding makes value available to C code + under as name which must be a string, creating a new shared + binding if necessary. +The C function s48_get_imported_binding returns the shared binding + defined for name, again creating it if necessary. +The C macro S48_SHARED_BINDING_REF dereferences a shared binding, + returning its current value. +

Exporting C values to Scheme

+
  • void s48_define_exported_binding(char *name, s48_value value) +
+
  • (lookup-imported-binding string) -> shared-binding +
  • (shared-binding-ref shared-binding) -> value +
+

These are used to define shared bindings from C and to access them + from Scheme. +Again, if a name is looked up before it has been defined, a new binding is + created for it. +

The common case of exporting a C function to Scheme can be done using + the macro S48_EXPORT_FUNCTION(name). +This expands into +

s48_define_exported_binding("name", s48_enter_pointer(name)) +

which boxes the function into a Scheme byte vector and then + exports it. +Note that s48_enter_pointer allocates space in the Scheme heap + and might trigger a + garbage collection. +

+
(import-definition name) syntax
+
  • +
    (import-definition name c-name) syntax
    + +These macros simplify importing definitions from C to Scheme. +They expand into +

    (define name (lookup-imported-binding c-name)) +

    where c-name is as supplied for the second form. +For the first form c-name is derived from name by + replacing `-' with `_' and converting letters to lowercase. +For example, (import-definition my-foo) expands into +

    (define my-foo (lookup-imported-binding "my_foo")) +

    Complete shared binding interface

    + +

    There are a number of other Scheme functions related to shared bindings; + these are in the structure shared-bindings. +

    • (shared-binding? x) -> boolean +
    • (shared-binding-name shared-binding) -> string +
    • (shared-binding-is-import? shared-binding) -> boolean +
    • (shared-binding-set! shared-binding value) +
    • (define-imported-binding string value) +
    • (lookup-exported-binding string) +
    • (undefine-imported-binding string) +
    • (undefine-exported-binding string) +
    +

    Shared-binding? is the predicate for shared-bindings. +Shared-binding-name returns the name of a binding. +Shared-binding-is-import? is true if the binding was defined from C. +Shared-binding-set! changes the value of a binding. +Define-imported-binding and lookup-exported-binding are + Scheme versions of s48_define_exported_binding + and s48_lookup_imported_binding. +The two undefine- procedures remove bindings from the two tables. +They do nothing if the name is not found in the table. +

    The following C macros correspond to the Scheme functions above. +

    • int S48_SHARED_BINDING_P(x) +
    • int S48_SHARED_BINDING_IS_IMPORT_P(s48_value s_b) +
    • s48_value S48_SHARED_BINDING_NAME(s48_value s_b) +
    • void S48_SHARED_BINDING_SET(s48_value s_b, s48_value value) +
    +

    Calling C Functions from Scheme

    + +

    There are three different ways to call C functions from Scheme, depending on + how the C function was obtained. +

    • (call-imported-binding binding arg0 ...) -> value +
    • (call-external external arg0 ...) -> value +
    • (call-external-value value name arg0 ...) -> value +
    +Each of these applies its first argument, a C function, to the rest of + the arguments. +For call-imported-binding the function argument must be an + imported binding. +For call-external the function argument must be an external + bound in the current process + (see + +the section on Dynamic Loading). +For call-external-value value must be a byte vector + whose contents is a pointer to a C function and name should be + a string naming the function. +The name argument is used only for printing error messages. +

    For all of these, the C function is passed the argi values + and the value returned is that returned by C procedure. +Up to twelve arguments may be passed. +There is no method supplied for returning multiple values to + Scheme from C (or vice versa) (mainly because C does not have multiple return + values). +

    Keyboard interrupts that occur during a call to a C function are ignored + until the function returns to Scheme (this is clearly a + problem; we are working on a solution). +

    • +
      (import-lambda-definition name (formal ...)) syntax
      +
    • +
      (import-lambda-definition name (formal ...) c-name) syntax
      +
    +These macros simplify importing functions from C. +They define name to be a function with the given formals that + applies those formals to the corresponding C binding. +C-name, if supplied, should be a string. +These expand into +
    +(define temp (lookup-imported-binding c-name))
    +(define name
    +  (lambda (formal ...)
    +    (external-apply temp formal ...)))
    +
    +

    +If c-name is not supplied, it is derived from name by converting + all letters to lowercase and replacing `-' with `_'. +

    Adding external modules to the Makefile

    + +

    Getting access to C bindings from Scheme requires that the C code be + compiled an linked in with the Scheme 48 virtual machine and that the + relevent shared-bindings be created. +The Scheme 48 makefile has rules for compiling and linking external code + and for specifying initialization functions that should be called on + startup. +There are three Makefile variables that control which external modules are + included in the executable for the virutal machine (scheme48vm). +EXTERNAL_OBJECTS lists the object files to be included in + scheme48vm, +EXTERNAL_FLAGS is a list of ld flags to be used when + creating scheme48vm, and + EXTERNAL_INITIALIZERS is a list of C procedures to be called + on startup. +The procedures listed in EXTERNAL_INITIALIZERS should take no + arguments and have a return type of void. +After changing the definitions of any of these variables you should + do make scheme48vm to rebuild the virtual machine. +

    Dynamic Loading

    + +

    External code can be loaded into a running Scheme 48 process + and C object-file bindings can be dereferenced at runtime and + their values called + (although not all versions of Unix support all of this). +The required Scheme functions are in the structure dynamic-externals. +

    • (dynamic-load string) +
    +Dynamic-load loads the named file into the current + process, raising an exception if the file cannot be found or if dynamic + loading is not supported by the operating system. +The file must have been compiled and linked appropriately. +For Linux, the following commands compile foo.c into a + file foo.so that can be loaded dynamically. +
    +% gcc -c -o foo.o foo.c
    +% ld -shared -o foo.so foo.o
    +
    +
    • (get-external string) -> external +
    • (external? x) -> boolean +
    • (external-name external) -> string +
    • (external-value external) -> byte-vector +
    +These functions give access to values bound in the current process, and + are used for retrieving values from dynamically-loaded files. +Get-external returns an external object that contains the + value of name, raising an exception if there is no such + value in the current process. +External? is the predicate for externals, and +external-name and external-value return the name and + value of an external. +The value is returned as byte vector of length four (on 32-bit + architectures). +The value is that which was extant when get-external was + called. +The following two functions can be used to update the values of + externals. +
    • (lookup-external external) -> boolean +
    • (lookup-all-externals) -> boolean +
    +Lookup-external updates the value of external by looking its + name in the current process, returning #t if it is bound and #f + if it is not. +Lookup-all-externals calls lookup-external on all extant + externals, returning #f any are unbound. +
    • (call-external external arg0 ...) -> value +
    +An external whose value is a C procedure can be called using + call-external. +See + +the section on calling C functions from Scheme +for more information. +

    In some versions of Unix retrieving a value from the current + process may require a non-trivial amount of computation. +We recommend that a dynamically-loaded file contain a single initialization + procedure that creates shared bindings for the values exported by the file. +

    Compatibility

    +

    Scheme 48's old external-call function is still available in the structure + externals, which now also includes external-name and + external-value. +The old scheme48.h file has been renamed old-scheme48.h. +

    Accessing Scheme data from C

    + +

    The C header file scheme48.h provides + access to Scheme 48 data structures + (for compatibility, the old scheme48.h file is available + as old-scheme48.h). +The type s48_value is used for Scheme values. +When the type of a value is known, such as the integer returned + by vector-length or the boolean returned by pair?, + the corresponding C procedure returns a C value of the appropriate + type, and not a s48_value. +Predicates return 1 for true and 0 for false. +

    Constants

    + +

    The following macros denote Scheme constants: +

    S48_FALSE
    is #f. +
    S48_TRUE
    is #t. +
    S48_NULL
    is the empty list. +
    S48_UNSPECIFIC
    is a value used for functions which have no + meaningful return value + (in Scheme this value returned by the nullary procedure unspecific + in the structure util). +
    S48_EOF
    is the end-of-file object + (in Scheme this value is returned by the nullary procedure eof-object + in the structure i/o-internal). +
    +

    Converting values

    +

    The following functions convert values between Scheme and C + representations. +The `extract' ones convert from Scheme to C and the `enter's go the other + way. +

    • unsigned char s48_extract_char(s48_value) +
    • char * s48_extract_string(s48_value) +
    • long s48_extract_integer(s48_value) +
    • double s48_extract_double(s48_value) +
    • s48_value s48_enter_char(unsigned char) +
    • +
      s48_value s48_enter_string(char *) (may GC)
      +
    • +
      s48_value s48_enter_integer(long) (may GC)
      +
    • +
      s48_value s48_enter_double(double) (may GC)
      +
    +

    The value returned by s48_extract_string points to the actual + storage used by the string; it is valid only until the next + garbage collection. +

    s48_enter_integer() needs to allocate storage when + its argument is too large to fit in a Scheme 48 fixnum. +In cases where the number is known to fit within a fixnum (currently 30 bits + including the sign), the following procedures can be used. +These have the disadvantage of only having a limited range, but + the advantage of never causing a garbage collection. +

    • long s48_extract_fixnum(s48_value) +
    • s48_value s48_enter_fixnum(long) +
    • long S48_MAX_FIXNUM_VALUE +
    • long S48_MIN_FIXNUM_VALUE +
    +

    An error is signalled if s48_extract_fixnum's argument + is not a fixnum or if the argument to s48_enter_fixnum is less than + S48_MIN_FIXNUM_VALUE or greater than S48_MAX_FIXNUM_VALUE + (-229 and 229-1 in the current system). +

    C versions of Scheme procedures

    +

    The following macros and procedures are C versions of Scheme procedures. +The names were derived by replacing `-' with `_', + `?' with `p', and dropping `!. +

    • int S48_EQ_P(s48_value) +
    • int S48_CHAR_P(s48_value) +
    • int S48_INTEGER_P(s48_value) +
    +
    • int S48_PAIR_P(s48_value) +
    • s48_value S48_CAR(s48_value) +
    • s48_value S48_CDR(s48_value) +
    • void S48_SET_CAR(s48_value, s48_value) +
    • void S48_SET_CDR(s48_value, s48_value) +
    • +
      s48_value s48_cons(s48_value, s48_value) (may GC)
      +
    • long s48_length(s48_value) +
    +
    • int S48_VECTOR_P(s48_value) +
    • long S48_VECTOR_LENGTH(s48_value) +
    • s48_value S48_VECTOR_REF(s48_value, long) +
    • void S48_VECTOR_SET(s48_value, long, s48_value) +
    • +
      s48_value s48_make_vector(long, s48_value) (may GC)
      +
    +
    • int S48_STRING_P(s48_value) +
    • long S48_STRING_LENGTH(s48_value) +
    • char S48_STRING_REF(s48_value, long) +
    • void S48_STRING_SET(s48_value, long, char) +
    • +
      s48_value s48_make_string(long, char) (may GC)
      +
    +
    • int S48_SYMBOL_P(s48_value) +
    • s48_value s48_SYMBOL_TO_STRING(s48_value) +
    +
    • int S48_BYTE_VECTOR_P(s48_value) +
    • long S48_BYTE_VECTOR_LENGTH(s48_value) +
    • char S48_BYTE_VECTOR_REF(s48_value, long) +
    • void S48_BYTE_VECTOR_SET(s48_value, long, int) +
    • +
      s48_value s48_make_byte_vector(long, int) (may GC)
      +
    +

    Calling Scheme functions from C

    + +

    External code that has been called from Scheme can call back to Scheme + procedures using the following function. +

    • scheme_value s48_call_scheme(s48_value proc, long nargs, ...) +
    +This calls the Scheme procedure proc on nargs + arguments, which are passed as additional arguments to s48_call_scheme. +There may be at most ten arguments. +The value returned by the Scheme procedure is returned by the C procedure. +Invoking any Scheme procedure may potentially cause a garbage collection. +

    There are some complications that occur when mixing calls from C to Scheme + with continuations and threads. +C only supports downward continuations (via longjmp()). +Scheme continuations that capture a portion of the C stack have to follow the + same restriction. +For example, suppose Scheme procedure s0 captures continuation a + and then calls C procedure c0, which in turn calls Scheme procedure + s1. +Procedure s1 can safely call the continuation a, because that + is a downward use. +When a is called Scheme 48 will remove the portion of the C stack used + by the call to c0. +On the other hand, if s1 captures a continuation, that continuation + cannot be used from s0, because by the time control returns to + s0 the C stack used by c0 will no longer be valid. +An attempt to invoke an upward continuation that is closed over a portion + of the C stack will raise an exception. +

    In Scheme 48 threads are implemented using continuations, so the downward + restriction applies to them as well. +An attempt to return from Scheme to C at a time when the appropriate + C frame is not on top of the C stack will cause the current thread to + block until the frame is available. +For example, suppose thread t0 calls a C procedure which calls back + to Scheme, at which point control switches to thread t1, which also + calls C and then back to Scheme. +At this point both t0 and t1 have active calls to C on the + C stack, with t1's C frame above t0's. +If thread t0 attempts to return from Scheme to C it will block, + as its frame is not accessable. +Once t1 has returned to C and from there to Scheme, t0 will + be able to resume. +The return to Scheme is required because context switches can only occur while + C code is running. +T0 will also be able to resume if t1 uses a continuation to + throw past its call to C. +

    Interacting with the Scheme Heap

    + + +

    Scheme 48 uses a copying, precise garbage collector. +Any procedure that allocates objects within the Scheme 48 heap may trigger + a garbage collection. +Variables bound to values in the Scheme 48 heap need to be registered with + the garbage collector so that the value will be retained and so that the + variables will be updated if the garbage collector moves the object. +The garbage collector has no facility for updating pointers to the interiors + of objects, so such pointers, for example the ones returned by + EXTRACT_STRING, will likely become invalid when a garbage collection + occurs. +

    Registering Objects with the GC

    + +

    A set of macros are used to manage the registration of local variables with the + garbage collector. +

    • S48_DECLARE_GC_PROTECT(n) +
    • void S48_GC_PROTECT_n(s48_value1, ..., s48_valuen) +
    • void S48_GC_UNPROTECT() +
    +

    S48_DECLARE_GC_PROTECT(n), where 1 <= n <= 9, allocates + storage for registering n variables. +At most one use of S48_DECLARE_GC_PROTECT may occur in a block. +S48_GC_PROTECT_n(v1, ..., vn) registers the + n variables (l-values) with the garbage collector. +It must be within scope of a S48_DECLARE_GC_PROTECT(n) + and be before any code which can cause a GC. +S48_GC_UNPROTECT removes the block's protected variables from + the garbage collectors list. +It must be called at the end of the block after + any code which may cause a garbage collection. +Omitting any of the three may cause serious and + hard-to-debug problems. +Notably, the garbage collector may relocate an object and + invalidate s48_value variables which are not protected. +

    A gc-protection-mismatch exception is raised if, when a C + procedure returns to Scheme, the calls + to S48_GC_PROTECT() have not been matched by an equal number of + calls to S48_GC_UNPROTECT(). +

    Global variables may also be registered with the garbage collector. +

    • void S48_GC_PROTECT_GLOBAL(value) +
    +

    S48_GC_PROTECT_GLOBAL permanently registers the + variable value (an l-value) with the garbage collector. +There is no way to unregister the variable. +

    Keeping C data structures in the Scheme heap

    + +

    C data structures can be kept in the Scheme heap by embedding them + inside byte vectors. +The following macros can be used to create and access embedded C objects. +

    • +
      s48_value S48_MAKE_VALUE(type) (may GC)
      +
    • type S48_EXTRACT_VALUE(s48_value, type) +
    • type * S48_EXTRACT_VALUE_POINTER(s48_value, type) +
    • void S48_SET_VALUE(s48_value, type, value) +
    +

    S48_MAKE_VALUE makes a byte vector large enough to hold an object + whose type is type. +S48_EXTRACT_VALUE returns the contents of a byte vector cast to + type, and S48_EXTRACT_VALUE_POINTER returns a pointer + to the contents of the byte vector. +The value returned by S48_EXTRACT_VALUE_POINTER is valid only until + the next garbage collection. +

    S48_SET_VALUE stores value into the byte vector. +

    C code and heap images

    + +

    Scheme 48 uses dumped heap images to restore a previous system state. +The Scheme 48 heap is written into a file in a machine-independent and + operating-system-independent format. +The procedures described above may be used to create objects in the + Scheme heap that contain information specific to the current + machine, operating system, or process. +A heap image containing such objects may not work correctly on + when resumed. +

    To address this problem, a record type may be given a `resumer' + procedure. +On startup, the resumer procedure for a type is applied to each record of + that type in the image being restarted. +This procedure can update the record in a manner appropriate to + the machine, operating system, or process used to resume the + image. +

    • (define-record-resumer record-type procedure) +
    +

    Define-record-resumer defines procedure, + which should accept one argument, to be the resumer for + record-type. +The order in which resumer procedures are called is not specified. +

    The procedure argument to define-record-resumer may + be #f, in which case records of the given type are + not written out in heap images. +When writing a heap image any reference to such a record is replaced by + the value of the record's first field, and an exception is raised + after the image is written. +

    Using Scheme records in C code

    +

    External modules can create records and access their slots + positionally. +

    • +
      s48_value S48_MAKE_RECORD(s48_value) (may GC)
      +
    • int S48_RECORD_P(s48_value) +
    • s48_value S48_RECORD_TYPE(s48_value) +
    • s48_value S48_RECORD_REF(s48_value, long) +
    • void S48_RECORD_SET(s48_value, long, s48_value) +
    +The argument to S48_MAKE_RECORD should be a shared binding + whose value is a record type. +In C the fields of Scheme records are only accessible via offsets, + with the first field having offset zero, the second offset one, and + so forth. +If the order of the fields is changed in the Scheme definition of the + record type the C code must be updated as well. +

    For example, given the following record-type definition +

    +(define-record-type thing :thing
    +  (make-thing a b)
    +  thing?
    +  (a thing-a)
    +  (b thing-b))
    +
    +the identifier :thing is bound to the record type and can + be exported to C: +
    +(define-exported-binding "thing-record-type" :thing)
    +
    +Thing records can then be made in C: +
    +static scheme_value thing_record_type_binding = SCHFALSE;
    +
    +void initialize_things(void)
    +{
    +  S48_GC_PROTECT_GLOBAL(thing_record_type_binding);
    +  thing_record_type_binding =
    +     s48_get_imported_binding("thing-record-type");
    +}
    +
    +scheme_value make_thing(scheme_value a, scheme_value b)
    +{
    +  s48_value thing;
    +  s48_DECLARE_GC_PROTECT(2);
    +
    +  S48_GC_PROTECT_2(a, b);
    +
    +  thing = s48_make_record(thing_record_type_binding);
    +  S48_RECORD_SET(thing, 0, a);
    +  S48_RECORD_SET(thing, 1, b);
    +
    +  S48_GC_UNPROTECT();
    +
    +  return thing;
    +}
    +
    +Note that the variables a and b must be protected + against the possibility of a garbage collection occuring during + the call to s48_make_record(). +

    Raising exceptions from external code

    + +

    The following macros explicitly raise certain errors, immediately + returning to Scheme 48. +Raising an exception performs all + necessary clean-up actions to properly return to Scheme 48, including + adjusting the stack of protected variables. +

    • s48_raise_scheme_exception(int type, int nargs, ...) +
    +

    s48_raise_scheme_exception is the base procedure for + raising exceptions. +type is the type of exception, and should be one of the + S48_EXCEPTION_...constants defined in scheme48arch.h. +nargs is the number of additional values to be included in the + exception; these follow the nargs argument and should all have + type s48_value. +s48_raise_scheme_exception never returns. +

    The following procedures are available for raising particular + types of exceptions. +Like s48_raise_scheme_exception these never return. +

    • s48_raise_argument_type_error(scheme_value) +
    • s48_raise_argument_number_error(int nargs, int min, int max) +
    • s48_raise_index_range_error(long value, long min, long max) +
    • s48_raise_closed_channel_error() +
    • s48_raise_os_error(int errno) +
    • s48_raise_out_of_memory_error() +
    +

    An argument type error indicates that the given value is of the wrong + type. +An argument number error is raised when the number of arguments, nargs, + should be, but isn't, between min and max, inclusive. +Similarly, and index range error is raised when value is not between + between min and max, inclusive. +

    The following macros raise argument type errors if their argument does not + have the required type. +

    • void S48_CHECK_SYMBOL(s48_value) +
    • void S48_CHECK_PAIR(s48_value) +
    • void S48_CHECK_STRING(s48_value) +
    • void S48_CHECK_INTEGER(s48_value) +
    • void S48_CHECK_CHANNEL(s48_value) +
    • void S48_CHECK_BYTE_VECTOR(s48_value) +
    • void S48_CHECK_RECORD(s48_value) +
    • void S48_CHECK_SHARED_BINDING(s48_value) +
    +

    Unsafe functions and macros

    +

    All of the C procedures and macros described above check that their + arguments have the appropriate types and that indexes are in range. +The following procedures and macros are identical to those described + above, except that they do not perform type and range checks. +They are provided for the purpose of writing more efficient code; + their general use is not recommended. +

    • char S48_UNSAFE_EXTRACT_CHAR(s48_value) +
    • char * S48_UNSAFE_EXTRACT_STRING(s48_value) +
    • long S48_UNSAFE_EXTRACT_INTEGER(s48_value) +
    • long S48_UNSAFE_EXTRACT_DOUBLE(s48_value) +
    +
    • long S48_UNSAFE_EXTRACT_FIXNUM(s48_value) +
    • s48_value S48_UNSAFE_ENTER_FIXNUM(long) +
    +
    • s48_value S48_UNSAFE_CAR(s48_value) +
    • s48_value S48_UNSAFE_CDR(s48_value) +
    • void S48_UNSAFE_SET_CAR(s48_value, s48_value) +
    • void S48_UNSAFE_SET_CDR(s48_value, s48_value) +
    +
    • long S48_UNSAFE_VECTOR_LENGTH(s48_value) +
    • s48_value S48_UNSAFE_VECTOR_REF(s48_value, long) +
    • void S48_UNSAFE_VECTOR_SET(s48_value, long, s48_value) +
    +
    • long S48_UNSAFE_STRING_LENGTH(s48_value) +
    • char S48_UNSAFE_STRING_REF(s48_value, long) +
    • void S48_UNSAFE_STRING_SET(s48_value, long, char) +
    +
    • s48_value S48_UNSAFE_SYMBOL_TO_STRING(s48_value) +
    +
    • long S48_UNSAFE_BYTE_VECTOR_LENGTH(s48_value) +
    • char S48_UNSAFE_BYTE_VECTOR_REF(s48_value, long) +
    • void S48_UNSAFE_BYTE_VECTOR_SET(s48_value, long, int) +
    +
    • s48_value S48_UNSAFE_SHARED_BINDING_REF(s48_value s_b) +
    • int S48_UNSAFE_SHARED_BINDING_P(x) +
    • int S48_UNSAFE_SHARED_BINDING_IS_IMPORT_P(s48_value s_b) +
    • s48_value S48_UNSAFE_SHARED_BINDING_NAME(s48_value s_b) +
    • void S48_UNSAFE_SHARED_BINDING_SET(s48_value s_b, s48_value value) +
    +
    • s48_value S48_UNSAFE_RECORD_TYPE(s48_value) +
    • s48_value S48_UNSAFE_RECORD_REF(s48_value, long) +
    • void S48_UNSAFE_RECORD_SET(s48_value, long, s48_value) +
    +
    • type S48_UNSAFE_EXTRACT_VALUE(s48_value, type) +
    • type * S48_UNSAFE_EXTRACT_VALUE_POINTER(s48_value, type) +
    • void S48_UNSAFE_SET_VALUE(s48_value, type, value) +
    +
    Mike + Sperber, Richard Kelsey

    + diff --git a/doc/html/utilities.html b/doc/html/utilities.html new file mode 100644 index 0000000..5e40725 --- /dev/null +++ b/doc/html/utilities.html @@ -0,0 +1,315 @@ + + + + +Untitled + + + + +

    Scheme 48 User's Guide

    +

    Richard A. Kelsey

    +

    February 23, 1999

    +

    ASCII character encoding

    +

    These are in the structure ascii. +

    • (char->ascii char) -> integer +
    • (ascii->char integer) -> char +
    +These are identical to char->integer and integer->char except that + they use the ASCII encoding. +
    • +
      ascii-limit integer
      +
    • +
      ascii-whitespaces list of integers
      +
    +Ascii-limit is one more than the largest value that char->ascii + may return. +Ascii-whitespaces is a list of the ASCII values of whitespace characters + (space, tab, line feed, form feed, and carriage return). +

    Bitwise integer operations

    +

    These functions use the two's-complement representation for integers. +There is no limit to the number of bits in an integer. +They are in the structures bitwise and big-scheme. +

    • (bitwise-and integer integer) -> integer +
    • (bitwise-ior integer integer) -> integer +
    • (bitwise-xor integer integer) -> integer +
    • (bitwise-not integer) -> integer +
    +These perform various logical operations on integers on a bit-by-bit +basis. `ior' is inclusive OR and `xor' is exclusive OR. +
    • (arithmetic-shift integer bit-count) -> integer +
    +Shifts the integer by the given bit count, which must be an integer, + shifting left for positive counts and right for negative ones. +Shifting preserves the integer's sign. +

    Arrays

    +

    These are N-dimensional, zero-based arrays and + are in the structure arrays. +

    The array interface is derived from one written by Alan Bawden. +

    • (make-array value dimension0 ...) -> array +
    • (array dimensions element0 ...) -> array +
    • (copy-array array) -> array +
    +Make-array makes a new array with the given dimensions, each of which + must be a non-negative integer. +Every element is initially set to value. +Array Returns a new array with the given dimensions and elements. +Dimensions must be a list of non-negative integers, +The number of elements should be the equal to the product of the + dimensions. +The elements are stored in row-major order. +
    +(make-array 'a 2 3) -> {Array 2 3}
    +
    +(array '(2 3) 'a 'b 'c 'd 'e 'f)
    +    -> {Array 2 3}
    +
    +

    Copy-array returns a copy of array. +The copy is identical to the array but does not share storage with it. +

    • (array? value) -> boolean +
    +Returns #t if value is an array. +
    • (array-ref array index0 ...) -> value +
    • (array-set! array value index0 ...) +
    • (array->vector array) -> vector +
    • (array-dimensions array) -> list +
    +Array-ref returns the specified array element and array-set! + replaces the element with value. +
    +(let ((a (array '(2 3) 'a 'b 'c 'd 'e 'f)))
    +  (let ((x (array-ref a 0 1)))
    +    (array-set! a 'g 0 1)
    +    (list x (array-ref a 0 1))))
    +    -> '(b g)
    +
    +

    Array->vector returns a vector containing the elements of array + in row-major order. +Array-dimensions returns the dimensions of + the array as a list. +

    • (make-shared-array array linear-map dimension0 ...) -> array +
    +Make-shared-array makes a new array that shares storage with array + and uses linear-map to map indicies to elements. +Linear-map must accept as many arguments as the number of + dimensions given and must return a list of non-negative integers + that are valid indicies into array. +
    +(array-ref (make-shared-array a f i0 i1 ...)
    +           j0 j1 ...)
    +
    +is equivalent to +
    +(apply array-ref a (f j0 j1 ...))
    +
    +

    As an example, the following function makes the transpose of a two-dimensional + array: +

    +(define (transpose array)
    +  (let ((dimensions (array-dimensions array)))
    +    (make-shared-array array
    +                       (lambda (x y)
    +		         (list y x))
    +		       (cadr dimensions)
    +		       (car dimensions))))
    +
    +(array->vector
    +  (transpose
    +    (array '(2 3) 'a 'b 'c 'd 'e 'f)))
    +      -> '(a d b e c f)
    +
    +

    Records

    +

    New types can be constructed using the define-record-type macro + from the define-record-types structure +The general syntax is: +

    +(define-record-type tag type-name
    +  (constructor-name field-tag ...)
    +  predicate-name
    +  (field-tag accessor-name [modifier-name])
    +  ...)
    +
    +This makes the following definitions: +
    • +
      type-name type
      +
    • (constructor-name field-init ...) -> type-name +
    • (predicate-name value) -> boolean +
    • (accessor-name type-name) -> value +
    • (modifier-name type-name value) +
    +Type-name is the record type itself, and can be used to + specify a print method (see below). +Constructor-name is a constructor that accepts values + for the fields whose tags are specified. +Predicate-name to a predicate that can returns #t for + elements of the type and #f for everything else. +The accessor-names retrieve the values of fields, + and the modifier-name's update them. +The tag is used in printing instances of the record type and + the field tags are used in the inspector and to match + constructor arguments with fields. +
    • (define-record-discloser type discloser) +
    +Define-record-discloser determines how + records of type type are printed. +Discloser should be procedure which takes a single + record of type type and returns a list whose car is + a symbol. +The record will be printed as the value returned by discloser + with curly braces used instead of the usual parenthesis. +

    For example +

    +(define-record-type pare :pare
    +  (kons x y)
    +  pare?
    +  (x kar set-kar!)
    +  (y kdr))
    +
    +defines kons to be a constructor, kar and kdr to be + accessors, set-kar! to be a modifier, and pare? to be a predicate + for a new type of object. +The type itself is named :pare. +Pare is a tag used in printing the new objects. +

    By default, the new objects print as #Pare. +The print method can be modified using DEFINE-RECORD-DISCLOSER: +

    +(define-record-discloser :pare
    +  (lambda (p) `(pare ,(kar p) ,(kdr p))))
    +
    +will cause the result of (kons 1 2) to print as + #{pare 1 2}. +

    Finite record types

    +

    The structure finite-types has + two macros for defining `finite' record types. +These are record types for which there are a fixed number of instances, + which are created when the record type is defined. +The syntax for the defining a finite type is: +

    +(define-finite-type tag type-name
    +  (field-tag ...)
    +  predicate-name
    +  vector-of-elements-name
    +  name-accessor
    +  index-accessor
    +  (field-tag accessor-name [modifier-name])
    +  ...
    +  ((element-name field-value ...)
    +   ...))
    +
    +This differs from define-record-type in the following ways: +
    • No name is specified for the constructor, but the field arguments + to the constructor are listed. +
    • The vector-of-elements-name is added; it will be bound + to a vector containing all of the elements of the type. +These are constructed by applying the (unnamed) constructor to the + initial field values at the end of the form. +
    • There are names for accessors for two required fields, name + and index. +These fields are not settable, and are not to be included + in the argument list for the constructor. +
    • The form ends with the names and the initial field values for + the elements of the type. +The name must be first. +The remaining values must match the field-tags in the constructor's + argument list. +
    • Tag is bound to a macro that maps element-names to the + the corresponding element of the vector. +The name lookup is done at macro-expansion time. +
    +
    +(define-finite-type color :color
    +  (red green blue)
    +  color?
    +  colors
    +  color-name
    +  color-index
    +  (red   color-red)
    +  (green color-green)
    +  (blue  color-blue)
    +  ((white  255 255 255)
    +   (black    0   0   0)
    +   (yellow 255 255   0)
    +   (maroon 176  48  96)))
    +
    +(color-name (vector-ref colors 0)) -> white
    +(color-name (color black))         -> black
    +(color-index (color yellow))       -> 2
    +(color-red (color maroon))         -> 176
    +
    +

    Enumerated types are finite types whose only fields are the name + and the index. +The syntax for defining an enumerated type is: +

    +(define-enumerated-type tag type-name
    +  predicate-name
    +  vector-of-elements-name
    +  name-accessor
    +  index-accessor
    +  (element-name ...))
    +
    +In the absence of any additional fields, both the constructor argument + list and the initial field values are not required. +

    The above example of a finite type can be pared down to the following + enumerated type: +

    +(define-enumerated-type color :color
    +  color?
    +  colors
    +  color-name
    +  color-index
    +  (white black yellow maroon))
    +
    +(color-name (vector-ref colors 0)) -> white
    +(color-name (color black))         -> black
    +(color-index (color yellow))       -> 2
    +
    +

    Hash tables

    +

    These are generic hash tables, and are in the structure tables. +Strictly speaking they are more maps than tables, as every table has a + value for every possible key (for that type of table). +All but a finite number of those values are #f. +

    • (make-table) -> table +
    • (make-symbol-table) -> symbol-table +
    • (make-string-table) -> string-table +
    • (make-integer-table) -> integer-table +
    • (make-table-maker compare-proc hash-proc) -> procedure +
    • (make-table-immutable! table) +
    +The first four functions listed make various kinds of tables. +Make-table returns a table whose keys may be symbols, integer, + characters, booleans, or the empty list (these are also the values + that may be used in case expressions). +As with case, comparison is done using eqv?. +The comparison procedures used in symbol, string, and integer tables are + eq?, string=?, and =. +

    Make-table-maker takes two procedures as arguments and returns + a nullary table-making procedure. +Compare-proc should be a two-argument equality predicate. +Hash-proc should be a one argument procedure that takes a key + and returns a non-negative integer hash value. +If (compare-proc x y) returns true, + then (= (hash-proc x) (hash-proc y)) + must also return true. +For example, make-integer-table could be defined + as (make-table-maker = abs). +

    Make-table-immutable! prohibits future modification to its argument. +

    • (table? value) -> boolean +
    • (table-ref table key) -> value or #f +
    • (table-set! table key value) +
    • (table-walk procedure table) +
    +Table? is the predicate for tables. +Table-ref and table-set! access and modify the value of key + in table. +Table-walk applies procedure, which must accept two arguments, + to every associated key and non-#f value in table. +
    • (default-hash-function value) -> integer +
    • (string-hash string) -> integer +
    +default-hash-function is the hash function used in the tables + returned by make-table, and string-hash it the one used + by make-string-table. +
    + diff --git a/doc/install.txt b/doc/install.txt new file mode 100644 index 0000000..7ffcada --- /dev/null +++ b/doc/install.txt @@ -0,0 +1,159 @@ +-*- Mode: Indented-text; -*- + +Here are some remarks to complement what's in the INSTALL file. + +----- + +When running "make", don't worry if the ".notify" target fails. Its +only purpose is to send an email message to +scheme-48-notifications@martigny.ai.mit.edu, so that we can get a +rough idea of how much Scheme 48 is being used and by whom. We +promise not to use your name or email address for any commercial +purpose. If you don't want us to know, just do "make -t .notify" +first. + +----- + +Customizing the installation + + 1. If you don't believe in configure scripts, or don't have a + /bin/sh that can handle the configure script, you can make + sysdep.h and Makefile manually from sysdep.h.in and Makefile.in. + The technique is fairly obvious. For Makefile, just give + reasonable values for all of the variables at the top that are + defined as "foo = @foo@", e.g. srcdir=., CC=cc, LIBS=-lm, + INSTALL=cp, etc. For sysdep.h, read the comments. If your OS is + Posix compliant, you should be able to copy sysdep.h.in to + sysdep.h unmodified and everything should work. + + 2. If you definitely won't be installing Scheme 48, you should set + libdir to the distribution directory (e.g. "make libdir=`pwd`"). + This will make the ,open and ,load-package commands work for the + library packages defined in more-packages.scm. + + 3. If desired, customize the contents of the development environment + heap image by editing the definitions of USUAL-COMMANDS and/or + USUAL-FEATURES in more-packages.scm; see below. + + 4. If you're using a DEC MIPS, and want to use the foreign function + interface, specify LDFLAGS=-N (with e.g. "make LDFLAGS=-N"). + +----- + +Customizing scheme48.image + +By default, the image consists of a core Scheme system (Revised^5 +Scheme plus a very minimal read-eval-print loop) together with a +standard set of "options" (command processor, debugging commands, +inspector, disassembler, generic arithmetic). The set of options is +controlled by the definitions of USUAL-COMMANDS and USUAL-FEATURES in +more-packages.scm. If you make the (open ...) clause empty, then +"make scheme48.image" will create a Scheme system without any extras +(such as error recovery), and the image will be smaller. The files +are listed in approximate order of decreasing desirability; you'll +probably want at least these: + + package-commands, build + - necessary for the scheme48.image script to work + debuginfo, disclosers + - necessary if you want error messages to be at all helpful + debugging + - defines important debugging commands such as ,preview and ,trace + +After editing the definition of usual-features, simply + + make scheme48.image + +to rebuild the image. + +----- + +Deeper changes to the system -- for example, edits to most of the +files in the rts/ directory -- will require using the static linker to +make a new initial.image. After you have a working scheme48.image +(perhaps a previous version of Scheme 48), you can create a linker +image with + + make linker + +after which you can say + + make image + +to get the linker to build a new initial.image and initial.debug. +scheme48.image will then be built from those. + +You might think that "make scheme48.image" ought to do this, but the +circular dependencies + + scheme48.image on initial.image + initial.image on link/linker.image + link/linker.image on scheme48.image + +needs to be broken somewhere, or else make will (justifiably) barf. I +chose to break the cycle by making scheme48.image not depend on +initial.image, since this is most robust for installation purposes. + +----- + +Editor support + +We recommend interacting with the Scheme 48 command processor using the +emacs/scheme interface written by Olin Shivers at CMU. Copies of the +relevant .el files, together with a "cmuscheme48.el", are in the +emacs/ subdirectory of the release. Usage information is in +doc/user-guide.txt. + +You will probably want to byte-compile the .el files to get .elc +files. Use M-x byte-compile-file to do this. + +----- + +Performance + +If you don't have a C compiler that optimizes as well as gcc does, +then performance may suffer. Take a look at the automatically +generated code in scheme48vm.c to find out why. With a good register +allocator, all those variables (including some of the virtual +machine's virtual registers) get allocated to hardware registers, and +it really flies. Without one, performance can be pretty bad. + +The configure script automatically sets the Makefile variable CFLAGS +to -O2 -g if gcc is available, or to -O if it isn't. This can be +overriden by specifying a different CFLAGS, e.g. "make CFLAGS=-g" for +no optimization. + +Even if you do have a good compiler, you should be able to improve +overall performance even more, maybe about 6-10%, by removing the +range check from the interpreter's instruction dispatch. To do this, +use the -S flag to get assembly code for scheme48vm.c, then find the +instructions in scheme48vm.s corresponding to the big dispatch in +restart(): + + L19173: { + code_pointer_83X = arg1K0; + switch ((*((unsigned char *) code_pointer_83X))) { + ... } + +There will be one or two comparison instructions to see whether the +opcode is in range; just remove them. For the 68000 I use a "sed" + script + + /cmpl #137,d0/ N + /cmpl #137,d0\n jhi L/ d + +but of course the constant will probably have to change when a new +release comes along. + +See the user's guide for information on the ,bench command, which +makes programs run faster. + +----- + +filenames.make is "include"d by the Makefile, but is automatically +generated from the module dependencies laid out in the various +configuration files (*-packages.scm). If you edit any of these .scm +files, you may want to do a "make filenames.make" before you do any +further "make"s in order to update the depedencies. This step isn't +necessary if you're using Gnu make, because Gnu make will make +included files automatically. diff --git a/doc/io.txt b/doc/io.txt new file mode 100644 index 0000000..239e1d2 --- /dev/null +++ b/doc/io.txt @@ -0,0 +1,201 @@ + +There are two types of I/O objects in Scheme 48, channels and ports. +Channels are the raw, unbuffered ports of the operating system. The +only I/O operations the VM supports for channels are block reads and +writes. Ports are the actual Scheme ports and are implemented in Scheme, +with some support from the VM for READ-CHAR, PEEK-CHAR, and WRITE-CHAR +for efficiency. The run-time system provides ports that are buffered +versions of channels. Other sorts of ports are in big/more-port.scm. + +Source files: + + rts/port.scm port operations and port handlers + rts/current-port.scm current-input-port, etc. + rts/channel.scm blocking on channels and handling i/o interrupts + rts/channel-port.scm ports that read and write to channels + rts/low.scm CHANNEL-READ and CHANNEL-WRITE + big/more-port.scm additional kinds of ports + vm/arch.scm fields of ports and channels + vm/prim-io.scm VM i/o opcodes + vm/vmio.scm implementation of channels + +---------------------------------------------------------------- + +CHANNELS + +The VM instructions that deal with channels are: + + (OPEN-CHANNEL ) -> channel + is a from the enumeration OPEN-CHANNEL-OPTION in arch.scm. + is either a filename (as a string) or an OS port (as a one-word + code-vector), depending on the mode. + + (CLOSE-CHANNEL ) -> unspecific + + (CHANNEL-MAYBE-READ + ) + -> number of bytes read or the eof-object + (CHANNEL-MAYBE-WRITE ) + -> number of bytes written + These read or write up to the specified number of characters or bytes + from or to the string or code-vector, with the first character or byte + going at . + + (CHANNEL-ABORT ) -> number of bytes read or written or + the eof-object + This aborts any pending read or write operation on the channel. The return + value reflects any partial completion. + +CHANNEL-MAYBE-READ and CHANNEL-MAYBE-WRITE do not block. If the read or +write cannot be completed immediately a PENDING-CHANNEL-I/O exception is +raised. It is then up to the run-time system to either wait or run some +other thread. The VM raises an I/O-COMPLETION interrupt whenever an i/o +operation completes. + +Because CHANNEL-MAYBE-READ and CHANNEL-MAYBE-WRITE are awkward to use, +the RTS defines somewhat simpler versions: + + (CHANNEL-READ ) + -> number of bytes read or the eof-object + (CHANNEL-WRITE ) + -> unspecified + is either a string or code vector and is the index of the + first character read or written. is one of: + N > 0 : the call returns when this many characters has been read or + an EOF is reached. + 'IMMEDIATE : the call reads as many characters as are available and + returns immediately. + 'ANY : the call returns as soon as at least one character has been read + or an EOF is reached. + is the number of characters to be written. CHANNEL-READ will read + the requested number of characters unless an EOF is reached. CHANNEL-WRITE + will write the requested number of characters. + +---------------------------------------------------------------- + +PORTS + +Ports are actual Scheme port and are (usually) buffered. They are fully +exposed to the run-time system. The VM instructions on ports could be +implemented in Scheme; they are in the VM for efficiency. Buffers are +code-vectors (this is a micro-hack; strings have a slightly higher overhead +because of the null terminating byte for C compatibility) (code-vectors are +just vectors of bytes). + +The fields of a port are: + + PORT-STATUS: a bit set represented as a fixnum. + Indices into this bit set are from the PORT-STATUS-OPTIONS + enumeration in arch.scm. The current bits are: input, output, + open-for-input, open-for-output (the last two are for things like + sockets, on which you need to block but which do not support + normal reading or writing). + + PORT-HANDLER: a record containing three procedures. These handle + printing the port, closing the port, and filling (for input ports) + or emptying (for output ports) buffers. + + PORT-DATA: ? + Whatever stuff the handler needs. + + PORT-LOCKED?, PORT-LOCK: used by the system to guarentee the atomicity + of i/o operations. + + PORT-BUFFER: a code-vector. The input or output buffer of the port. + + PORT-INDEX: a fixnum. The index of the next byte to read or written. + + PORT-LIMIT: a fixnum. One past the end of the valid/available buffer space. + + PORT-PENDING-EOF?: true if the next read to this port should return EOF. + +Additional operations on ports: + + (READ-BLOCK string-or-code-vector start count input-port) + Read COUNT bytes into STRING-OR-CODE-VECTOR starting at index START. + Returns the number of bytes read. Only an end-of-file will prevent + the requested number of bytes from being read. + + (WRITE-STRING string output-port) + Write the characters in the string to the port. + + (WRITE-BLOCK string-or-code-vector start count output-port) + The output counterpart to READ-BLOCK. This always writes out the + requested number of bytes. Its return value is unspecified. + + (FORCE_OUTPUT output-port) + Causes any buffered characters to be written out. + + (CURRENT-ERROR-PORT) + The current error port, analogous to Scheme's CURRENT-INPUT-PORT + and CURRENT-OUTPUT-PORT. + +The system maintains a list of output ports whose buffers should be +periodically flushed. The default output port and ports made by +OPEN-OUTPUT-FILE are on this list. (PERIODICALLY-FORCE-OUTPUT! ) +may be used to add others. + +---------------------------------------------------------------- + +PORT HANDLERS + +Every port has a handler with three procedures. The first two are used +for printing and closing ports and have the same type for all ports: + + (DISCLOSE port-data) -> disclose list + (CLOSE port-data) -> unspecific + +For CLOSE, The system takes care of modifying the port's status. + +The third procedure is used to fill and empty buffers. Its arguments +and return values depend on the kind of port: + + Buffered output ports: + (BUFFER-PROC port-data buffer start-index byte-count) -> unspecific + BYTE-COUNT bytes should be copied from the buffer beginning at + START-INDEX. The buffer may be either a string or a code-vector. + + Unbuffered output ports: + (BUFFER-PROC port-data char) -> unspecific + Write out the given character. The system uses this for the default + error port. + + Input ports: + (BUFFER-PROC data buffer start-index needed-bytes) + -> EOF or number of bytes read (before an EOF) + Bytes should be copied into the buffer starting at START-INDEX. The + buffer may be either a string or a code-vector. NEEDED-BYTES is one of: + + 'IMMEDIATE + The call should return immediately after transfering whatever number + of bytes are currently available, possibly none (this is used for + CHAR-READY?). The maximum number of characters is determined by the + length of BUFFER. + + 'ANY + The call should wait until at least one byte is available or an EOF + occurs (used for READ-CHAR and PEEK-CHAR). The maximum number of + characters is determined by the length of BUFFER. + + N > 0 + The call should wait until N bytes have been copied into the buffer + or an EOF occurs. If the return value is less than NEEDED-BYTES the + port code inserts an EOF after the last byte. + +---------------------------------------------------------------- + +Ports and the Virtual Machine + +Ports could be implemented entirely in Scheme, with no support from +the VM. For efficiency reasons VM instructions are supplied for +three port operations: + + (READ-CHAR ) + (PEEK-CHAR ) + (WRITE-CHAR ) + +For each of these, if there is sufficient data or space in the +appropriate buffer the VM performs the operation. Otherwise a +buffer-full/empty exception is raised and the exception handler +uses the buffer procedure from the port's handler to fill or +empty the buffer. diff --git a/doc/meeting.ps b/doc/meeting.ps new file mode 100644 index 0000000..3fcb07d --- /dev/null +++ b/doc/meeting.ps @@ -0,0 +1,1090 @@ +%!PS-Adobe-2.0 +%%Creator: dvips 5.521 Copyright 1986, 1993 Radical Eye Software +%%CreationDate: Sat Jan 15 16:05:04 1994 +%%Pages: 8 +%%PageOrder: Ascend +%%BoundingBox: 0 0 612 792 +%%EndComments +%DVIPSCommandLine: dvips -f +%DVIPSSource: TeX output 1994.01.15:1605 +%%BeginProcSet: tex.pro +/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N +/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 +mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} +ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale +isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div +hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul +TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get +round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{ +statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 +0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn +begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X +array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo +setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx +FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{ +pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get} +B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup +length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B +/ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type +/stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp +0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 +index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff +ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice +ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ +ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn +/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 +sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{cc 1 add D +}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0 +moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add +.99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage +userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook +known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X +/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for +65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 +0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V +{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 +getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} +ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley +false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley +scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave +transform round exch round exch itransform moveto rulex 0 rlineto 0 +ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta +0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail} +B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{ +3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p +-1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{ +3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end +%%EndProcSet +TeXDict begin 40258431 52099146 1000 300 300 () @start +/Fa 1 111 df<383C0044C6004702004602008E06000C06000C06000C0C00180C00180C +40181840181880300880300F00120E7F8D15>110 D E /Fb 3 111 +df<70F8F8F87005057C840D>58 D<70F8FCFC74040404080810102040060E7C840D>I<1E +07802318C023A06043C0704380704380708700E00700E00700E00700E00E01C00E01C00E +01C00E03821C03841C07041C07081C03083803101801E017147E931B>110 +D E /Fc 28 122 df<00003FE00000E01000018038000380780003007800070030000700 +000007000000070000000E0000000E0000000E000000FFFFE0000E00E0001C01C0001C01 +C0001C01C0001C01C0001C03800038038000380380003803800038070000380700007007 +000070071000700E2000700E2000700E2000E00E2000E0064000E0038000E0000000C000 +0001C0000001C000003180000079800000F3000000620000003C0000001D29829F1A>12 +D<7FF0FFE07FE00C037D8A10>45 D<01FFF800001F0000001E0000001E0000001E000000 +3C0000003C0000003C0000003C00000078000000780000007800000078000000F0000000 +F0000000F0000000F0000001E0000001E0000001E0000001E0008003C0010003C0010003 +C0030003C00200078006000780060007800C0007801C000F007800FFFFF800191F7D9E1D +>76 D<01FFFF80001E00E0001E0070001E0038001E003C003C003C003C003C003C003C00 +3C003C0078007800780078007800F0007800E000F003C000F00F0000FFFC0000F0000001 +E0000001E0000001E0000001E0000003C0000003C0000003C0000003C000000780000007 +80000007800000078000000F800000FFF000001E1F7D9E1F>80 D86 D<00F1800389C00707800E03801C03803C03 +80380700780700780700780700F00E00F00E00F00E00F00E20F01C40F01C40703C40705C +40308C800F070013147C9317>97 D<07803F8007000700070007000E000E000E000E001C +001C001CF01D0C3A0E3C0E380F380F700F700F700F700FE01EE01EE01EE01CE03CE03860 +7060E031C01F0010207B9F15>I<007E0001C1000300800E07801E07801C07003C020078 +0000780000780000F00000F00000F00000F00000F0000070010070020030040018380007 +C00011147C9315>I<0000780003F80000700000700000700000700000E00000E00000E0 +0000E00001C00001C000F1C00389C00707800E03801C03803C0380380700780700780700 +780700F00E00F00E00F00E00F00E20F01C40F01C40703C40705C40308C800F070015207C +9F17>I<007C01C207010E011C013C013802780C7BF07C00F000F000F000F00070007001 +70023804183807C010147C9315>I<00007800019C00033C00033C000718000700000700 +000E00000E00000E00000E00000E0001FFE0001C00001C00001C00001C00003800003800 +00380000380000380000700000700000700000700000700000700000E00000E00000E000 +00E00000C00001C00001C0000180003180007B0000F300006600003C00001629829F0E> +I<003C6000E27001C1E00380E00700E00F00E00E01C01E01C01E01C01E01C03C03803C03 +803C03803C03803C07003C07001C0F001C17000C2E0003CE00000E00000E00001C00001C +00301C00783800F0700060E0003F8000141D7E9315>I<01E0000FE00001C00001C00001 +C00001C000038000038000038000038000070000070000071E000763000E81800F01C00E +01C00E01C01C03801C03801C03801C0380380700380700380700380E10700E20700C2070 +1C20700C40E00CC060070014207D9F17>I<00C001E001E001C000000000000000000000 +000000000E003300230043804300470087000E000E000E001C001C001C00384038803080 +7080310033001C000B1F7C9E0E>I<0001800003C00003C0000380000000000000000000 +000000000000000000000000003C00004600008700008700010700010700020E00000E00 +000E00000E00001C00001C00001C00001C00003800003800003800003800007000007000 +00700000700000E00000E00030E00079C000F180006300003C00001228829E0E>I<01E0 +000FE00001C00001C00001C00001C0000380000380000380000380000700000700000703 +C00704200E08E00E11E00E21E00E40C01C80001D00001E00001FC00038E0003870003870 +00383840707080707080707080703100E03100601E0013207D9F15>I<03C01FC0038003 +800380038007000700070007000E000E000E000E001C001C001C001C0038003800380038 +007000700070007100E200E200E200E200640038000A207C9F0C>I<1C0F80F0002630C3 +18004740640C004780680E004700700E004700700E008E00E01C000E00E01C000E00E01C +000E00E01C001C01C038001C01C038001C01C038001C01C0708038038071003803806100 +380380E10038038062007007006600300300380021147C9325>I<1C0F802630C0474060 +4780604700704700708E00E00E00E00E00E00E00E01C01C01C01C01C01C01C0384380388 +3803083807083803107003303001C016147C931A>I<007C0001C3000301800E01C01E01 +C01C01E03C01E07801E07801E07801E0F003C0F003C0F003C0F00780F00700700F00700E +0030180018700007C00013147C9317>I<01C1E002621804741C04781C04701E04701E08 +E01E00E01E00E01E00E01E01C03C01C03C01C03C01C0380380780380700380E003C1C007 +2380071E000700000700000E00000E00000E00000E00001C00001C0000FFC000171D8093 +17>I<1C1E002661004783804787804707804703008E00000E00000E00000E00001C0000 +1C00001C00001C000038000038000038000038000070000030000011147C9313>114 +D<00FC030206010C030C070C060C000F800FF007F803FC003E000E700EF00CF00CE00840 +1020601F8010147D9313>I<018001C0038003800380038007000700FFF007000E000E00 +0E000E001C001C001C001C003800380038003820704070407080708031001E000C1C7C9B +0F>I<0E00C03300E02301C04381C04301C04701C08703800E03800E03800E03801C0700 +1C07001C07001C07101C0E20180E20180E201C1E200C264007C38014147C9318>I<0E03 +803307802307C04383C04301C04700C08700800E00800E00800E00801C01001C01001C01 +001C02001C02001C04001C04001C08000E300003C00012147C9315>I<0383800CC44010 +68E01071E02071E02070C040E00000E00000E00000E00001C00001C00001C00001C04063 +8080F38080F38100E5810084C60078780013147D9315>120 D<0E00C03300E02301C043 +81C04301C04701C08703800E03800E03800E03801C07001C07001C07001C07001C0E0018 +0E00180E001C1E000C3C0007DC00001C00001C00003800F03800F07000E06000C0C00043 +80003E0000131D7C9316>I E /Fd 10 117 df<03FF8000700000700000700000E00000 +E00000E00000E00001C00001C00001C00001C00003800003800003800003800007000007 +00100700100700200E00200E00600E00400E00C01C0380FFFF80141A7D9918>76 +D<03FFF800701C00700600700700E00700E00700E00700E00701C00E01C00E01C01C01C0 +3803807003FF800380000380000700000700000700000700000E00000E00000E00000E00 +001C0000FFC000181A7D991A>80 D<01E006181C08380870087010FFE0E000E000E000E0 +00E0086010602030C01F000D107C8F12>101 D<030706000000000000384C4E8E9C9C1C +3838707272E2E4643808197C980C>105 D<307C005986009E07009E07009C07009C0700 +380E00380E00380E00381C00701C80701C80703880703900E01900600E0011107C8F16> +110 D<01F006180C0C180E300E700E600EE00EE00EE00CE01CE018E030606030C01F000F +107C8F14>I<030F000590C009E0C009C06009C06009C0600380E00380E00380E00380E0 +0701C00701800703800703000E8E000E78000E00000E00001C00001C00001C00001C0000 +FF00001317808F14>I<30F059189E389C189C009C003800380038003800700070007000 +7000E00060000D107C8F10>114 D<03E004300830187018601C001F801FC00FE000E000 +60E060E06080C041803E000C107D8F10>I<06000E000E000E000E001C001C00FFC01C00 +38003800380038007000700070007000E100E100E100E200640038000A177C960D>I +E /Fe 24 124 df<00800100020004000C00080018003000300030006000600060006000 +E000E000E000E000E000E000E000E000E000E00060006000600060003000300030001800 +08000C00040002000100008009267D9B0F>40 D<8000400020001000180008000C000600 +060006000300030003000300038003800380038003800380038003800380038003000300 +030003000600060006000C0008001800100020004000800009267E9B0F>I<60F0F07010 +101020204080040B7D830B>44 D<60F0F06004047D830B>46 D<03000700FF0007000700 +070007000700070007000700070007000700070007000700070007000700070007000700 +FFF00C187D9713>49 D<0F80106020304038803CC01CE01C401C003C0038003800700060 +00C001800100020004040804100430083FF87FF8FFF80E187E9713>I<00300030007000 +F000F001700370027004700C7008701070307020704070C070FFFF007000700070007000 +70007007FF10187F9713>52 D<07801860303070306018E018E018E01CE01CE01C601C60 +3C303C185C0F9C001C00180018003870307060604021801F000E187E9713>57 +D68 D<007F000001C1C000070070000E0038001C001C003C +001E0038000E0078000F0070000700F0000780F0000780F0000780F0000780F0000780F0 +000780F0000780F000078078000F0078000F0038000E003C001E001C001C000E00380007 +00700001C1C000007F0000191A7E991E>79 D<7FFFFF00701C0700401C0100401C0100C0 +1C0180801C0080801C0080801C0080001C0000001C0000001C0000001C0000001C000000 +1C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C000000 +1C0000001C0000001C000003FFE000191A7F991C>84 D86 D<3F8070C070E0207000 +70007007F01C7030707070E070E071E071E0F171FB1E3C10107E8F13>97 +DI<07F80C1C381C30087000E000E000E000E000E000E000 +7000300438080C1807E00E107F8F11>I<07C01C3030187018600CE00CFFFCE000E000E0 +00E0006000300438080C1807E00E107F8F11>101 D<18003C003C001800000000000000 +000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C00 +FF80091A80990A>105 D109 DI<07E01C3830 +0C700E6006E007E007E007E007E007E0076006700E381C1C3807E010107F8F13>II114 D<0400040004000C000C001C003C00FFC01C001C001C001C001C001C001C +001C001C201C201C201C201C200E4003800B177F960F>116 D123 +D E /Ff 1 50 df<0C003C00CC000C000C000C000C000C000C000C000C000C000C000C00 +0C00FF8009107E8F0F>49 D E /Fg 30 121 df<0000600000E00000E00001C00001C000 +0380000380000380000700000700000700000E00000E00001C00001C00001C0000380000 +380000380000700000700000E00000E00000E00001C00001C00003800003800003800007 +00000700000700000E00000E00001C00001C00001C000038000038000038000070000070 +0000E00000E00000C00000132D7DA11A>47 D<387CFEFEFE7C38000000000000387CFEFE +FE7C3807147C930F>58 D<0000E000000000E000000001F000000001F000000001F00000 +0003F800000003F800000006FC00000006FC0000000EFE0000000C7E0000000C7E000000 +183F000000183F000000303F800000301F800000701FC00000600FC00000600FC00000C0 +07E00000FFFFE00001FFFFF000018003F000018003F000030001F800030001F800060001 +FC00060000FC000E0000FE00FFE00FFFE0FFE00FFFE0231F7E9E28>65 +D<0007FC02003FFF0E00FE03DE03F000FE07E0003E0FC0001E1F80001E3F00000E3F0000 +0E7F0000067E0000067E000006FE000000FE000000FE000000FE000000FE000000FE0000 +00FE0000007E0000007E0000067F0000063F0000063F00000C1F80000C0FC0001807E000 +3803F0007000FE01C0003FFF800007FC001F1F7D9E26>67 D69 D73 D77 D<03FC080FFF381E03F83800 +F8700078700038F00038F00018F00018F80000FC00007FC0007FFE003FFF801FFFE00FFF +F007FFF000FFF80007F80000FC00007C00003CC0003CC0003CC0003CE00038E00078F800 +70FE01E0E7FFC081FF00161F7D9E1D>83 D85 +D<07FC001FFF003F0F803F07C03F03E03F03E00C03E00003E0007FE007FBE01F03E03C03 +E07C03E0F803E0F803E0F803E0FC05E07E0DE03FF8FE0FE07E17147F9319>97 +D<01FE0007FF801F0FC03E0FC03E0FC07C0FC07C0300FC0000FC0000FC0000FC0000FC00 +00FC00007C00007E00003E00603F00C01F81C007FF0001FC0013147E9317>99 +D<0007F80007F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000 +F801F8F80FFEF81F83F83E01F87E00F87C00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00 +F8FC00F87C00F87C00F87E00F83E01F81F07F80FFEFF03F8FF18207E9F1D>I<01FE0007 +FF800F83C01E01E03E00F07C00F07C00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C +00007C00003E00181E00180F807007FFE000FF8015147F9318>I<001F8000FFC001F3E0 +03E7E003C7E007C7E007C3C007C00007C00007C00007C00007C000FFFC00FFFC0007C000 +07C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C000 +07C00007C00007C0003FFC003FFC0013207F9F10>I<01FC3C07FFFE0F079E1E03DE3E03 +E03E03E03E03E03E03E03E03E01E03C00F07800FFF0009FC001800001800001C00001FFF +800FFFF007FFF81FFFFC3C007C70003EF0001EF0001EF0001E78003C78003C3F01F80FFF +E001FF00171E7F931A>II<1C003E007F007F007F003E001C00000000000000000000000000FF00FF00 +1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE0 +0B217EA00E>I107 DIII<01FF00 +07FFC01F83F03E00F83E00F87C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007E +7C007C7C007C3E00F83E00F81F83F007FFC001FF0017147F931A>II114 D<0FE63FFE701E600EE006E006F800FFC07FF83FFC1FFE03FE00 +1FC007C007E007F006F81EFFFCC7F010147E9315>I<0180018001800380038003800780 +0F803F80FFFCFFFC0F800F800F800F800F800F800F800F800F800F800F860F860F860F86 +0F8607CC03F801F00F1D7F9C14>IIIII E /Fh 6 106 df0 D<01800180018001800180 +C183F18F399C0FF003C003C00FF0399CF18FC1830180018001800180018010147D9417> +3 D<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF0 +03C010127D9317>15 D<0000000400000000020000000002000000000100000000008000 +000000400000000020FFFFFFFFFCFFFFFFFFFC0000000020000000004000000000800000 +00010000000002000000000200000000040026107D922D>33 D<004000C0018001800180 +0300030003000600060006000C000C00180018001800300030003000600060006000C000 +C0006000600060003000300030001800180018000C000C00060006000600030003000300 +01800180018000C000400A2E7CA112>104 DI E /Fi 40 122 df<70F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F870 +000000000070F8F8F870051C779B18>33 D<030600078F00078F00078F00078F00078F00 +078F007FFFC0FFFFE0FFFFE07FFFC00F1E000F1E000F1E000F1E000F1E000F1E007FFFC0 +FFFFE0FFFFE07FFFC01E3C001E3C001E3C001E3C001E3C001E3C000C1800131C7E9B18> +35 D<387C7C7E3E0E0E0E1C1C38F8F0C0070E789B18>39 D<007000F001E003C007800F +001E001C00380038007000700070007000E000E000E000E000E000E000E000E000700070 +0070007000380038001C001E000F00078003C001F000F000700C24799F18>I<6000F000 +78003C001E000F000780038001C001C000E000E000E000E0007000700070007000700070 +0070007000E000E000E000E001C001C0038007800F001E003C007800F00060000C247C9F +18>I<01C00001C00001C00001C000C1C180F1C780F9CF807FFF001FFC0007F00007F000 +1FFC007FFF00F9CF80F1C780C1C18001C00001C00001C00001C00011147D9718>I<0060 +0000F00000F00000F00000F00000F00000F00000F0007FFFC0FFFFE0FFFFE07FFFC000F0 +0000F00000F00000F00000F00000F00000F00000600013147E9718>I<7FFF00FFFF80FF +FF807FFF0011047D8F18>45 D<3078FCFC78300606778518>I<03F0000FFE003FFF007C +0F807003C0E001C0F000E0F000E06000E00000E00000E00001C00001C00003C000078000 +0F00001E00003C0000780000F00001E00007C0000F80001E00E03C00E07FFFE0FFFFE07F +FFE0131C7E9B18>50 D<07F8001FFE003FFF007807807803C07801C03001C00001C00003 +C0000380000F0003FF0003FE0003FF000007800003C00001C00000E00000E00000E0F000 +E0F000E0F001C0F003C07C07803FFF001FFE0003F800131C7E9B18>I<1FFF803FFF803F +FF803800003800003800003800003800003800003800003800003BF8003FFE003FFF003C +07801803C00001C00000E00000E06000E0F000E0F000E0E001C07003C07C0F803FFF001F +FC0003F000131C7E9B18>53 D<007E0001FF0007FF800F83C01E03C01C03C03801803800 +00700000700000E1F800E7FE00FFFF00FE0780F803C0F001C0F000E0E000E0F000E07000 +E07000E07000E03801C03C03C01E07800FFF0007FE0001F800131C7E9B18>I<600000F0 +0000FC00007E00003F00001FC00007E00003F00001FC00007E00003F00001F80001F8000 +3F00007E0001FC0003F00007E0001FC0003F00007E0000FC0000F0000060000011187D99 +18>62 D<0FF0003FFC007FFF00700F00F00380F00380600780000F00003E00007C0001F0 +0001E00003C00003C00003C00003C00003C0000380000000000000000000000000000000 +0003800007C00007C00007C000038000111C7D9B18>I<007C0001FE0007FF000F87801E +03C03C1DC0387FC070FFE071E3E071C1E0E1C1E0E380E0E380E0E380E0E380E0E380E0E3 +80E0E1C1C071C1C071E3C070FF80387F003C1C001E00E00F83E007FFC001FF80007E0013 +1C7E9B18>I<1FE0003FF8007FFC00781E00300E0000070000070000FF0007FF001FFF00 +7F0700780700E00700E00700E00700F00F00781F003FFFF01FFBF007E1F014147D9318> +97 D<7E0000FE00007E00000E00000E00000E00000E00000E00000E3E000EFF800FFFC0 +0FC1E00F80E00F00700E00700E00380E00380E00380E00380E00380E00380F00700F0070 +0F80E00FC1E00FFFC00EFF80063E00151C809B18>I<01FE0007FF001FFF803E07803803 +00700000700000E00000E00000E00000E00000E00000E000007000007001C03801C03E03 +C01FFF8007FF0001FC0012147D9318>I<001F80003F80001F8000038000038000038000 +038000038003E3800FFB801FFF803C1F80380F80700780700380E00380E00380E00380E0 +0380E00380E00380700780700780380F803C1F801FFFF00FFBF803E3F0151C7E9B18>I< +01F00007FC001FFE003E0F00380780700380700380E001C0E001C0FFFFC0FFFFC0FFFFC0 +E000007000007001C03801C03E03C01FFF8007FF0001FC0012147D9318>I<001F80007F +C000FFE000E1E001C0C001C00001C00001C0007FFFC0FFFFC0FFFFC001C00001C00001C0 +0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0007FFF +007FFF007FFF00131C7F9B18>I<01E1F007FFF80FFFF81E1E301C0E0038070038070038 +07003807003807001C0E001E1E001FFC001FF80039E0003800001C00001FFE001FFFC03F +FFE07801F0700070E00038E00038E00038E000387800F07E03F01FFFC00FFF8001FC0015 +1F7F9318>I<7E0000FE00007E00000E00000E00000E00000E00000E00000E3E000EFF80 +0FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0 +0E00E00E00E00E00E07FC3FCFFE7FE7FC3FC171C809B18>I<03800007C00007C00007C0 +000380000000000000000000000000007FC000FFC0007FC00001C00001C00001C00001C0 +0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000FFFF00FFFF +80FFFF00111D7C9C18>I<0038007C007C007C003800000000000000000FFC1FFC0FFC00 +1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00 +1C001C001C001C6038F078FFF07FE03F800E277E9C18>I<7FE000FFE0007FE00000E000 +00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000 +00E00000E00000E00000E00000E00000E00000E00000E00000E0007FFFC0FFFFE07FFFC0 +131C7E9B18>108 D<7CE0E000FFFBF8007FFFF8001F1F1C001E1E1C001E1E1C001C1C1C +001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C +001C1C1C007F1F1F00FFBFBF807F1F1F001914819318>I<7E3E00FEFF807FFFC00FC1C0 +0F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0 +0E00E07FC3FCFFE7FE7FC3FC1714809318>I<01F0000FFE001FFF003E0F803803807001 +C07001C0E000E0E000E0E000E0E000E0E000E0F001E07001C07803C03C07803E0F801FFF +000FFE0001F00013147E9318>I<7E3E00FEFF807FFFC00FC1E00F80E00F00700E00700E +00380E00380E00380E00380E00380E00380F00700F00700F80E00FC1E00FFFC00EFF800E +3E000E00000E00000E00000E00000E00000E00000E00007FC000FFE0007FC000151E8093 +18>I<01E38007FB801FFF803E1F80380F80700780700780E00380E00380E00380E00380 +E00380E00380700780700780380F803C1F801FFF800FFB8003E380000380000380000380 +000380000380000380000380003FF8003FF8003FF8151E7E9318>I<7F87E0FF9FF07FBF +F803F87803F03003E00003C00003C0000380000380000380000380000380000380000380 +000380000380007FFE00FFFF007FFE0015147F9318>I<07F7003FFF007FFF00780F00E0 +0700E00700E007007C00007FE0001FFC0003FE00001F00600780E00380E00380F00380F8 +0F00FFFF00FFFC00E7F00011147D9318>I<0180000380000380000380000380007FFFC0 +FFFFC0FFFFC0038000038000038000038000038000038000038000038000038000038040 +0380E00380E00380E001C1C001FFC000FF80003E0013197F9818>I<7E07E0FE0FE07E07 +E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00 +E00E01E00F03E007FFFC03FFFE01FCFC1714809318>I<7F8FF0FF8FF87F8FF01E03C00E +03800E03800E0380070700070700070700038E00038E00038E00038E0001DC0001DC0001 +DC0000F80000F80000700015147F9318>II<7F8FF07F9FF07F8FF0070700078E00039E0001DC0001F8 +0000F80000700000F00000F80001DC00039E00038E000707000F07807F8FF0FF8FF87F8F +F015147F9318>I<7F8FF0FF8FF87F8FF00E01C00E03800E038007038007070007070003 +8700038600038E0001CE0001CE0000CC0000CC0000DC0000780000780000780000700000 +700000700000F00000E00079E0007BC0007F80003F00001E0000151E7F9318>I +E /Fj 73 123 df<001F83E000F06E3001C078780380F8780300F0300700700007007000 +0700700007007000070070000700700007007000FFFFFF80070070000700700007007000 +070070000700700007007000070070000700700007007000070070000700700007007000 +0700700007007000070070000700700007007000070070007FE3FF001D20809F1B>11 +D<003F0000E0C001C0C00381E00701E00701E00700000700000700000700000700000700 +00FFFFE00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700 +E00700E00700E00700E00700E00700E00700E00700E07FC3FE1720809F19>I<001F81F8 +0000F04F040001C07C06000380F80F000300F00F000700F00F0007007000000700700000 +0700700000070070000007007000000700700000FFFFFFFF000700700700070070070007 +007007000700700700070070070007007007000700700700070070070007007007000700 +700700070070070007007007000700700700070070070007007007000700700700070070 +070007007007007FE3FE3FF02420809F26>14 D<7038F87CFC7EFC7E743A040204020402 +0804080410081008201040200F0E7E9F17>34 D<70F8FCFC74040404080810102040060E +7C9F0D>39 D<0020004000800100020006000C000C001800180030003000300070006000 +60006000E000E000E000E000E000E000E000E000E000E000E000E0006000600060007000 +300030003000180018000C000C000600020001000080004000200B2E7DA112>I<800040 +002000100008000C00060006000300030001800180018001C000C000C000C000E000E000 +E000E000E000E000E000E000E000E000E000E000C000C000C001C0018001800180030003 +00060006000C00080010002000400080000B2E7DA112>I<70F8FCFC7404040408081010 +2040060E7C840D>44 DI<70F8F8F87005057C840D>I<03F0000E +1C001C0E00180600380700700380700380700380700380F003C0F003C0F003C0F003C0F0 +03C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C070038070038070038078 +07803807001806001C0E000E1C0003F000121F7E9D17>48 D<018003800F80F380038003 +800380038003800380038003800380038003800380038003800380038003800380038003 +80038003800380038007C0FFFE0F1E7C9D17>I<03F0000C1C00100E0020070040078080 +0780F007C0F803C0F803C0F803C02007C00007C0000780000780000F00000E00001C0000 +380000700000600000C0000180000300000600400C00401800401000803FFF807FFF80FF +FF80121E7E9D17>I<03F0000C1C00100E00200F00780F80780780780780380F80000F80 +000F00000F00000E00001C0000380003F000003C00000E00000F000007800007800007C0 +2007C0F807C0F807C0F807C0F00780400780400F00200E001C3C0003F000121F7E9D17> +I<000600000600000E00000E00001E00002E00002E00004E00008E00008E00010E00020E +00020E00040E00080E00080E00100E00200E00200E00400E00C00E00FFFFF0000E00000E +00000E00000E00000E00000E00000E0000FFE0141E7F9D17>I<1803001FFE001FFC001F +F8001FE00010000010000010000010000010000010000011F000161C00180E0010070010 +07800003800003800003C00003C00003C07003C0F003C0F003C0E0038040038040070020 +0600100E000C380003E000121F7E9D17>I<007C000182000701000E03800C07801C0780 +380300380000780000700000700000F1F000F21C00F40600F80700F80380F80380F003C0 +F003C0F003C0F003C0F003C07003C07003C07003803803803807001807000C0E00061C00 +01F000121F7E9D17>I<4000007FFFC07FFF807FFF804001008002008002008004000008 +0000080000100000200000200000400000400000C00000C00001C0000180000380000380 +00038000038000078000078000078000078000078000078000078000030000121F7D9D17 +>I<03F0000C0C001006003003002001806001806001806001807001807803003E03003F +06001FC8000FF00003F80007FC000C7E00103F00300F806003804001C0C001C0C000C0C0 +00C0C000C0C000806001802001001002000C0C0003F000121F7E9D17>I<03F0000E1800 +1C0C00380600380700700700700380F00380F00380F003C0F003C0F003C0F003C0F003C0 +7007C07007C03807C0180BC00E13C003E3C0000380000380000380000700300700780600 +780E00700C002018001070000FC000121F7E9D17>I<70F8F8F870000000000000000000 +0070F8F8F87005147C930D>I<70F8F8F8700000000000000000000070F0F8F878080808 +101010202040051D7C930D>I<0FC0307040384038E03CF03CF03C603C0038007000E000 +C001800180010003000200020002000200020002000000000000000000000007000F800F +800F8007000E207D9F15>63 D<000100000003800000038000000380000007C0000007C0 +000007C0000009E0000009E0000009E0000010F0000010F0000010F00000207800002078 +000020780000403C0000403C0000403C0000801E0000801E0000FFFE0001000F0001000F +0001000F00020007800200078002000780040003C00E0003C01F0007E0FFC03FFE1F207F +9F22>65 DI<000FC040007030C0 +01C009C0038005C0070003C00E0001C01E0000C01C0000C03C0000C07C0000407C000040 +78000040F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000 +F8000000780000007C0000407C0000403C0000401C0000401E0000800E00008007000100 +0380020001C0040000703800000FC0001A217D9F21>IIII<000FE0200078186000E004E0038002E0 +070001E00F0000E01E0000601E0000603C0000603C0000207C00002078000020F8000000 +F8000000F8000000F8000000F8000000F8000000F8000000F8007FFCF80003E0780001E0 +7C0001E03C0001E03C0001E01E0001E01E0001E00F0001E0070001E0038002E000E00460 +00781820000FE0001E217D9F24>III<0F +FFC0007C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C0000 +3C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00203C00F8 +3C00F83C00F83C00F0380040780040700030E0000F800012207E9E17>III78 +D<001F800000F0F00001C0380007801E000F000F000E0007001E0007803C0003C03C0003 +C07C0003E0780001E0780001E0F80001F0F80001F0F80001F0F80001F0F80001F0F80001 +F0F80001F0F80001F0F80001F0780001E07C0003E07C0003E03C0003C03C0003C01E0007 +800E0007000F000F0007801E0001C0380000F0F000001F80001C217D9F23>II82 D<07E0800C1980100780300380600180600180E00180E00080E0 +0080E00080F00000F000007800007F00003FF0001FFC000FFE0003FF00001F8000078000 +03C00003C00001C08001C08001C08001C08001C0C00180C00380E00300F00600CE0C0081 +F80012217D9F19>I<7FFFFFE0780F01E0600F0060400F0020400F0020C00F0030800F00 +10800F0010800F0010800F0010000F0000000F0000000F0000000F0000000F0000000F00 +00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F00 +00000F0000000F0000000F0000000F0000001F800007FFFE001C1F7E9E21>IIII<7FF83F +F80FE00FC007C0070003C0020001E0040001F00C0000F0080000781000007C1000003C20 +00003E4000001E4000000F8000000F8000000780000003C0000007E0000005E0000009F0 +000018F8000010780000207C0000603C0000401E0000801F0001800F0001000780020007 +C0070003C01F8007E0FFE01FFE1F1F7F9E22>I<08041008201020104020402080408040 +8040B85CFC7EFC7E7C3E381C0F0E7B9F17>92 D<081020204040808080B8FCFC7C38060E +7D9F0D>96 D<1FE000303000781800781C00300E00000E00000E00000E0000FE00078E00 +1E0E00380E00780E00F00E10F00E10F00E10F01E10781E103867200F83C014147E9317> +I<0E0000FE00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00 +000E3E000EC3800F01C00F00E00E00E00E00700E00700E00780E00780E00780E00780E00 +780E00780E00700E00700E00E00F00E00D01C00CC300083E0015207F9F19>I<03F80E0C +1C1E381E380C70007000F000F000F000F000F000F00070007000380138011C020E0C03F0 +10147E9314>I<000380003F800003800003800003800003800003800003800003800003 +8000038000038003E380061B801C0780380380380380700380700380F00380F00380F003 +80F00380F00380F003807003807003803803803807801C07800E1B8003E3F815207E9F19 +>I<03F0000E1C001C0E00380700380700700700700380F00380F00380FFFF80F00000F0 +0000F000007000007000003800801800800C010007060001F80011147F9314>I<007C00 +C6018F038F07060700070007000700070007000700FFF007000700070007000700070007 +00070007000700070007000700070007000700070007007FF01020809F0E>I<0000E003 +E3300E3C301C1C30380E00780F00780F00780F00780F00780F00380E001C1C001E380033 +E0002000002000003000003000003FFE001FFF800FFFC03001E0600070C00030C00030C0 +0030C000306000603000C01C038003FC00141F7F9417>I<0E0000FE00000E00000E0000 +0E00000E00000E00000E00000E00000E00000E00000E00000E3E000E43000E81800F01C0 +0F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 +0E01C00E01C00E01C0FFE7FC16207F9F19>I<1C003E003E003E001C0000000000000000 +00000000000E007E000E000E000E000E000E000E000E000E000E000E000E000E000E000E +000E000E000E00FFC00A1F809E0C>I<00E001F001F001F000E000000000000000000000 +0000007007F000F000700070007000700070007000700070007000700070007000700070 +00700070007000700070007000706070F060F0C061803F000C28829E0E>I<0E0000FE00 +000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0FF00E03 +C00E03000E02000E04000E08000E10000E30000E70000EF8000F38000E1C000E1E000E0E +000E07000E07800E03800E03C00E03E0FFCFF815207F9F18>I<0E00FE000E000E000E00 +0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 +0E000E000E000E000E000E000E000E00FFE00B20809F0C>I<0E1F01F000FE618618000E +81C81C000F00F00E000F00F00E000E00E00E000E00E00E000E00E00E000E00E00E000E00 +E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E0 +0E000E00E00E000E00E00E00FFE7FE7FE023147F9326>I<0E3E00FE43000E81800F01C0 +0F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 +0E01C00E01C00E01C0FFE7FC16147F9319>I<01F800070E001C03803801C03801C07000 +E07000E0F000F0F000F0F000F0F000F0F000F0F000F07000E07000E03801C03801C01C03 +80070E0001F80014147F9317>I<0E3E00FEC3800F01C00F00E00E00E00E00F00E00700E +00780E00780E00780E00780E00780E00780E00700E00F00E00E00F01E00F01C00EC3000E +3E000E00000E00000E00000E00000E00000E00000E00000E0000FFE000151D7F9319>I< +03E0800619801C05803C0780380380780380700380F00380F00380F00380F00380F00380 +F003807003807803803803803807801C0B800E138003E380000380000380000380000380 +000380000380000380000380003FF8151D7E9318>I<0E78FE8C0F1E0F1E0F0C0E000E00 +0E000E000E000E000E000E000E000E000E000E000E000E00FFE00F147F9312>I<1F9030 +704030C010C010C010E00078007F803FE00FF00070803880188018C018C018E030D0608F +800D147E9312>I<020002000200060006000E000E003E00FFF80E000E000E000E000E00 +0E000E000E000E000E000E000E080E080E080E080E080610031001E00D1C7F9B12>I<0E +01C0FE1FC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E +01C00E01C00E01C00E01C00E03C00603C0030DC001F1FC16147F9319>III<7FC3FC0F01E00701C007018003810001C20000E40000EC00007800003800003C +00007C00004E000087000107000303800201C00601E01E01E0FF07FE1714809318>II<3FFF380E200E201C40384078407000 +E001E001C00380078007010E011E011C0338027006700EFFFE10147F9314>I +E /Fk 3 54 df<03000700FF000700070007000700070007000700070007000700070007 +00070007000700070007007FF00C157E9412>49 D<00300030007000F001F00170027004 +7008701870107020704070C070FFFE0070007000700070007003FE0F157F9412>52 +D<20303FE03FC0240020002000200020002F8030E020700030003800384038E038E03880 +30406020C01F000D157E9412>I E /Fl 20 118 df<000E00001E00007E0007FE00FFFE +00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE +0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE +0000FE0000FE0000FE0000FE0000FE0000FE0000FE007FFFFE7FFFFE7FFFFE17277BA622 +>49 D<00FF800003FFF0000FFFFC001F03FE003800FF007C007F80FE003FC0FF003FC0FF +003FE0FF001FE0FF001FE07E001FE03C003FE000003FE000003FC000003FC000007F8000 +007F000000FE000000FC000001F8000003F0000003E00000078000000F0000001E000000 +3C00E0007000E000E000E001C001C0038001C0070001C00FFFFFC01FFFFFC03FFFFFC07F +FFFFC0FFFFFF80FFFFFF80FFFFFF801B277DA622>I<007F800001FFF00007FFF8000FE0 +FC001F807E003F803F007F003F007F001F80FF001F80FF001FC0FF001FC0FF001FC0FF00 +1FE0FF001FE0FF001FE0FF001FE07F001FE07F003FE03F003FE01F807FE00F807FE007C1 +DFE003FF9FE0007E1FE000001FE000001FC000001FC000001FC000003F801F003F803F80 +3F003F803F003F807E003F807C001F01F8001E03F0000FFFE00007FF800001FE00001B27 +7DA622>57 D<1C003E007F00FF80FF80FF807F003E001C00000000000000000000000000 +0000000000001C003E007F00FF80FF80FF807F003E001C00091B7B9A13>I<01FFFFF001 +FFFFF001FFFFF00001FE000001FE000001FE000001FE000001FE000001FE000001FE0000 +01FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE0000 +01FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE0000 +01FE000001FE001801FE007E01FE00FF01FE00FF01FE00FF01FE00FF01FC007E03F8007C +03F0003E0FE0000FFFC00003FE00001C297DA824>74 D77 +D<007F806003FFF0E007FFF9E00F807FE01F001FE03E0007E07C0003E07C0001E0FC0001 +E0FC0001E0FC0000E0FE0000E0FE0000E0FF000000FFC000007FFE00007FFFE0003FFFFC +001FFFFE000FFFFF8007FFFFC003FFFFE000FFFFE00007FFF000007FF000000FF8000007 +F8000003F8600001F8E00001F8E00001F8E00001F8F00001F0F00001F0F80003F0FC0003 +E0FF0007C0FFE01F80F3FFFF00E0FFFE00C01FF0001D297CA826>83 +D<7FFFFFFFFFC07FFFFFFFFFC07FFFFFFFFFC07F803FC03FC07E003FC007C078003FC003 +C078003FC003C070003FC001C0F0003FC001E0F0003FC001E0E0003FC000E0E0003FC000 +E0E0003FC000E0E0003FC000E0E0003FC000E000003FC0000000003FC0000000003FC000 +0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000 +0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000 +0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000 +0000003FC00000007FFFFFE000007FFFFFE000007FFFFFE0002B287EA730>I<001FF800 +00FFFE0003F01F0007E03F800FC03F801F803F803F801F007F800E007F0000007F000000 +FF000000FF000000FF000000FF000000FF000000FF000000FF0000007F0000007F000000 +7F8000003F8001C01F8001C00FC0038007E0070003F01E0000FFFC00001FE0001A1B7E9A +1F>99 D<003FE00001FFF80003F07E0007C01F000F801F801F800F803F800FC07F000FC0 +7F0007C07F0007E0FF0007E0FF0007E0FFFFFFE0FFFFFFE0FF000000FF000000FF000000 +7F0000007F0000007F0000003F8000E01F8000E00FC001C007E0038003F81F0000FFFE00 +001FF0001B1B7E9A20>101 D<0007F0003FFC00FE3E01F87F03F87F03F07F07F07F07F0 +3E07F00007F00007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F0 +0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0 +0007F00007F00007F00007F00007F00007F00007F0007FFF807FFF807FFF80182A7EA915 +>I<00FF81F003FFE7F80FC1FE7C1F80FC7C1F007C383F007E107F007F007F007F007F00 +7F007F007F007F007F007F007F003F007E001F007C001F80FC000FC1F8001FFFE00018FF +800038000000380000003C0000003E0000003FFFF8001FFFFF001FFFFF800FFFFFC007FF +FFE01FFFFFF03E0007F07C0001F8F80000F8F80000F8F80000F8F80000F87C0001F03C00 +01E01F0007C00FC01F8003FFFE00007FF0001E287E9A22>II<07000F801FC03FE03FE0 +3FE01FC00F8007000000000000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE0 +0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFE +FFFEFFFE0F2B7DAA14>I109 +DI<00 +3FE00001FFFC0003F07E000FC01F801F800FC03F800FE03F0007E07F0007F07F0007F07F +0007F0FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F87F +0007F07F0007F03F800FE03F800FE01F800FC00FC01F8007F07F0001FFFC00003FE0001D +1B7E9A22>I<03FE300FFFF01E03F03800F0700070F00070F00070F80070FC0000FFE000 +7FFE007FFF803FFFE01FFFF007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038 +F80038FC0070FF01E0F7FFC0C1FF00161B7E9A1B>115 D<007000007000007000007000 +00F00000F00000F00001F00003F00003F00007F0001FFFF0FFFFF0FFFFF007F00007F000 +07F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F038 +07F03807F03807F03807F03807F03803F03803F87001F86000FFC0001F8015267FA51B> +II +E end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 300dpi +TeXDict begin + +%%EndSetup +%%Page: 1 1 +1 0 bop 551 311 a Fl(The)23 b(Sc)n(heme)e(of)i(Things:)530 +407 y(The)f(June)h(1992)h(Meeting)1245 385 y Fk(1)751 +522 y Fj(Jonathan)15 b(Rees)715 579 y(Cornell)h(Univ)o(ersit)o(y)682 +635 y Fi(jar@cs.cornell.edu)220 796 y Fj(An)21 b(informally)i +(constituted)e(group)g(of)g(p)q(eople)h(in)o(terested)g(in)g(the)f +(future)g(of)149 852 y(the)f(Sc)o(heme)g(programming)f(language)h(met)g +(at)f(the)g(Xero)o(x)g(P)o(alo)h(Alto)f(Researc)o(h)149 +909 y(Cen)o(ter)d(on)f(25)h(June)g(1992.)k(The)c(main)h(purp)q(ose)f +(of)f(the)h(meeting)g(w)o(as)f(to)g(w)o(ork)g(on)149 +965 y(the)h(tec)o(hnical)g(con)o(ten)o(t)f(of)g(the)g(next)g(revision)i +(of)d(the)i(Sc)o(heme)g(rep)q(ort.)220 1021 y(W)l(e)f(made)h(progress)e +(on)h(sev)o(eral)h(fron)o(ts:)218 1112 y Fh(\017)22 b +Fj(Some)15 b(di\013erences)i(with)e(the)g(IEEE)h(Sc)o(heme)g(standard)e +(w)o(ere)h(resolv)o(ed.)218 1205 y Fh(\017)22 b Fj(Prop)q(osals)13 +b(for)g(m)o(ultiple)i(return)e(v)m(alues)i(and)e Fi(dynamic-wind)f +Fj(w)o(ere)h(adopted.)218 1297 y Fh(\017)22 b Fj(A)15 +b(prop)q(osal)h(for)e(an)h Fi(eval)g Fj(pro)q(cedure)h(w)o(as)f +(adopted.)218 1390 y Fh(\017)22 b Fj(The)d(high-lev)o(el)h(macro)e +(facilit)o(y)h(describ)q(ed)h(in)g(the)e(Revised)1354 +1373 y Fk(4)1394 1390 y Fj(Rep)q(ort's)g(ap-)263 1446 +y(p)q(endix)f(will)g(b)q(e)f(mo)o(v)o(ed)e(in)o(to)i(the)f(rep)q(ort)g +(prop)q(er.)220 1537 y(Tw)o(o)d(sub)q(committees)i(w)o(ere)e(formed:)19 +b(one)13 b(to)f(w)o(ork)g(on)h(exceptions,)h(and)f(one)g(to)149 +1593 y(c)o(harter)i(the)g(formation)f(of)h(a)g(standard)f(library)l(.) +21 b(The)16 b(sub)q(committees)f(will)i(rep)q(ort)149 +1650 y(bac)o(k)f(to)e(the)h(group)g(with)h(prop)q(osals)f(for)g +(inclusion)i(in)f(the)g(rep)q(ort.)220 1706 y(It)j(had)g(b)q(een)i(hop) +q(ed)f(that)e(there)h(w)o(ould)h(b)q(e)g(progress)e(on)h(some)g(other)g +(fron)o(ts)149 1763 y(\(user-de\014ned)e(t)o(yp)q(es,)e(dynamic)h +(binding,)h(impro)o(v)o(emen)o(ts)e(to)f(\\rest")g(parameters\),)149 +1819 y(but)20 b(after)e(inconclusiv)o(e)j(discussion)g(these)e(topics)g +(w)o(ere)g(dropp)q(ed.)32 b(These)19 b(topics)149 1876 +y(will)e(probably)f(b)q(e)g(tak)o(en)f(up)g(again)h(in)g(the)f(future.) +220 1932 y(Norman)e(Adams)g(w)o(as)f(app)q(oin)o(ted)i(the)f(Revised) +1068 1916 y Fk(5)1103 1932 y Fj(Rep)q(ort's)g(editor.)19 +b(It)13 b(is)h(hop)q(ed)149 1989 y(that)f(it)g(will)i(b)q(e)e(ready)g +(b)o(y)g(early)h(1993,)e(so)g(as)h(to)f(precede)i(the)f(reconstitution) +h(of)f(the)149 2045 y(IEEE)j(standard)f(group.)220 2102 +y(This)f(article)g(is)g(m)o(y)f(o)o(wn)g(in)o(terpretation)h(of)f(what) +g(transpired,)h(and)g(should)g(not)149 2158 y(b)q(e)i(construed)g(as)f +(de\014nitiv)o(e.)149 2277 y Fg(Agreemen)o(t)h(with)i(the)g(IEEE)g(Sc)o +(heme)f(standard)149 2363 y Fj(Un)o(til)e(no)o(w,)f(the)g(Sc)o(heme)h +(rep)q(orts)e(ha)o(v)o(e)h(encouraged)g(but)g(not)g(required)h(the)f +(empt)o(y)149 2420 y(list)j Fi(\(\))e Fj(and)h(the)f(b)q(o)q(olean)i +(false)f(v)m(alue)g Fi(#f)f Fj(to)g(b)q(e)i(distinct.)22 +b(It)15 b(has)g(b)q(een)i(the)f(in)o(ten)o(t)p 149 2453 +598 2 v 201 2480 a Ff(1)219 2496 y Fe(T)m(o)c(app)q(ear)i(in)g +Fd(Lisp)f(Pointers)e Fe(V\(4\),)h(Octob)q(er{Decem)o(b)q(er)j(1992.)885 +2620 y Fj(1)p eop +%%Page: 2 2 +2 1 bop 307 311 a Fj(ev)o(er)14 b(since)h(the)f(Revised)i(Revised)f +(Rep)q(ort,)g(ho)o(w)o(ev)o(er,)e(that)g(this)h(distinction)i(w)o(ould) +307 368 y(ev)o(en)o(tually)h(b)q(e)g(required.)25 b(The)16 +b(IEEE)h(Sc)o(heme)g(standard)f(bit)h(the)f(bullet)i(in)f(1990,)307 +424 y(and)f(no)o(w)e(the)i(Revised)721 408 y Fk(5)757 +424 y Fj(rep)q(ort)f(follo)o(ws.)378 482 y(The)20 b(standard)f(also)h +(dropp)q(ed)h(the)f(distinction)i(b)q(et)o(w)o(een)e(essen)o(tial)h +(and)f(not-)307 538 y(essen)o(tial)e(language)e(features;)h(most)f +(features)g(that)g(w)o(ere)g(formerly)h(not)f(essen)o(tial,)307 +595 y(suc)o(h)11 b(as)f(n-ary)g Fi(+)g Fj(and)g Fi(apply)p +Fj(,)g(are)g(no)o(w)g(required.)19 b(The)11 b(Revised)1427 +578 y Fk(5)1458 595 y Fj(Rep)q(ort)g(will)h(adopt)307 +651 y(this)18 b(stance,)g(at)f(least)h(as)g(regards)f(language)h +(features)f(that)g(are)h(shared)f(with)h(the)307 708 +y(IEEE)h(standard.)30 b(Non-essen)o(tial)20 b(non-IEEE)g(o)q(ddities)g +(suc)o(h)f(as)f Fi(transcript-on)307 764 y Fj(and)13 +b Fi(transcript-off)d Fj(and)i(the)h(prop)q(osed)f Fi +(interaction-environment)d Fj(\(see)k(b)q(e-)307 821 +y(lo)o(w\))20 b(w)o(ere)f(not)h(discussed)h(at)e(the)h(meeting,)h(ho)o +(w)o(ev)o(er,)f(and)g(consensus)g(on)g(their)307 877 +y(status)15 b(will)h(ha)o(v)o(e)f(to)g(b)q(e)h(reac)o(hed)f(via)h +(electronic)g(mail.)378 935 y(A)g(third)h(asp)q(ect)g(of)f(the)g +(standard)g(that)g(w)o(as)f(adopted)i(w)o(as)e(a)h(certain)h(obscure) +307 991 y(paragraph)11 b(regarding)h(assignmen)o(ts)f(to)g(top-lev)o +(el)i(v)m(ariables)g(\(section)f(6,)f(paragraph)307 1048 +y(2\).)19 b(The)12 b(e\013ect)h(of)f(this)h(is)g(that)f(if)i(a)e +(program)f(con)o(tains)i(an)g(assignmen)o(t)f(to)g(an)o(y)h(top-)307 +1104 y(lev)o(el)j(v)m(ariable,)g(then)f(the)f(program)g(m)o(ust)g(con)o +(tain)h(a)f Fi(define)g Fj(for)g(that)f(v)m(ariable;)j(it)307 +1161 y(is)e(not)f(su\016cien)o(t)i(that)d(the)i(v)m(ariable)h(b)q(e)f +(b)q(ound.)20 b(This)14 b(has)g(b)q(een)g(the)g(case)f(for)g(most)307 +1217 y(v)m(ariables,)22 b(but)e(the)h(rule)f(applies)i(as)e(w)o(ell)h +(to)e(v)m(ariables)i(suc)o(h)f(as)g Fi(car)g Fj(that)f(ha)o(v)o(e)307 +1274 y(built-in)h(bindings.)30 b(In)18 b(addition,)i(it)e(is)g +(clari\014ed)h(that)f(if)g(a)f(program)g(mak)o(es)g(suc)o(h)307 +1330 y(a)d(de\014nition)i(or)e(assignmen)o(t,)g(then)h(the)f(b)q(eha)o +(vior)h(of)f(built-in)j(pro)q(cedures)e(will)h(not)307 +1387 y(b)q(e)j(a\013ected.)28 b(F)l(or)17 b(example,)j(rede\014ning)f +Fi(length)e Fj(cannot)h(a\013ect)f(the)h(b)q(eha)o(vior)h(of)307 +1443 y(the)14 b(built-in)j Fi(list->vector)c Fj(pro)q(cedure.)20 +b(If)14 b(in)i(some)d(particular)i(implemen)o(tation)307 +1500 y Fi(list->vector)f Fj(is)j(written)e(in)i(Sc)o(heme)f(and)g +(calls)h Fi(length)p Fj(,)e(then)h(it)g(m)o(ust)f(b)q(e)h(sure)307 +1556 y(to)d(call)i(the)f(built-in)i Fi(length)d Fj(pro)q(cedure,)h(not) +f(whatev)o(er)g(happ)q(ens)i(to)e(b)q(e)i(the)e(v)m(alue)307 +1612 y(of)i(the)g(v)m(ariable)i Fi(length)p Fj(.)307 +1740 y Fg(Multiple)i(return)e(v)m(alues)307 1828 y Fj(The)d +Fi(call-with-values)d Fj(and)i Fi(values)f Fj(pro)q(cedures)i(w)o(ere)f +(describ)q(ed)i(in)f(an)g(earlier)307 1885 y(Sc)o(heme)e(of)e(Things)h +(\()p Fc(Lisp)h(Pointers)p Fj(,)e(v)o(olume)h(IV,)g(n)o(um)o(b)q(er)g +(1\),)g(but)g(I'll)h(review)g(them)307 1941 y(here.)20 +b(The)c(follo)o(wing)g(is)g(adapted)f(from)f(John)i(Ramsdell's)g +(concise)h(description:)421 2054 y Fi(\(values)23 b Fc(obje)n(ct)g +Fb(:)8 b(:)g(:)n Fi(\))600 b Fj(essen)o(tial)16 b(pro)q(cedure)421 +2132 y Fi(values)e Fj(deliv)o(ers)j(all)f(of)f(its)g(argumen)o(ts)f(to) +h(its)g(con)o(tin)o(uation.)421 2249 y Fi(\(call-with-values)21 +b Fc(thunk)j(r)n(e)n(c)n(eiver)o Fi(\))268 b Fj(essen)o(tial)16 +b(pro)q(cedure)421 2326 y Fi(call-with-values)c Fj(calls)j(its)f +Fc(thunk)g Fj(argumen)o(t)g(with)g(a)g(con)o(tin)o(uation)h(that,)421 +2383 y(when)h(passed)g(some)f(v)m(alues,)i(calls)g(the)f +Fc(r)n(e)n(c)n(eiver)e Fj(pro)q(cedure)j(with)f(those)g(v)m(al-)421 +2439 y(ues)22 b(as)g(argumen)o(ts.)40 b(The)23 b(con)o(tin)o(uation)f +(for)g(the)g(call)h(to)f Fc(r)n(e)n(c)n(eiver)f Fj(is)h(the)421 +2496 y(con)o(tin)o(uation)15 b(of)g(the)g(call)i(to)d +Fi(call-with-values)p Fj(.)1043 2620 y(2)p eop +%%Page: 3 3 +3 2 bop 220 311 a Fj(Except)17 b(for)g(con)o(tin)o(uations)h(created)f +(b)o(y)g(the)g Fi(call-with-values)e Fj(pro)q(cedure,)149 +368 y(all)21 b(con)o(tin)o(uations)g(tak)o(e)e(exactly)h(one)h(v)m +(alue,)h(as)d(no)o(w;)j(the)e(e\013ect)g(of)f(passing)i(no)149 +424 y(v)m(alue)i(or)e(more)g(than)g(one)g(v)m(alue)i(to)d(con)o(tin)o +(uations)i(that)f(w)o(ere)g(not)g(created)g(b)o(y)149 +481 y Fi(call-with-values)13 b Fj(is)j(unsp)q(eci\014ed)i(\(as)c +(indeed)j(it)f(is)g(unsp)q(eci\014ed)h(no)o(w\).)220 +537 y Fi(values)d Fj(migh)o(t)h(b)q(e)h(de\014ned)h(as)e(follo)o(ws:) +245 623 y Fi(\(define)23 b(\(values)g(.)g(things\))293 +679 y(\(call-with-current-cont)o(inuation)340 736 y(\(lambda)g +(\(cont\))g(\(apply)g(cont)h(things\)\)\)\))149 822 y +Fj(That)g(is,)j(the)d(pro)q(cedures)h(supplied)i(b)o(y)d +Fi(call-with-current-continua)o(tion)149 878 y Fj(m)o(ust)18 +b(b)q(e)h(passed)g(the)f(same)g(n)o(um)o(b)q(er)h(of)f(argumen)o(ts)f +(as)h(v)m(alues)i(exp)q(ected)f(b)o(y)g(the)149 934 y(con)o(tin)o +(uation.)220 991 y(Because)14 b(the)g(b)q(eha)o(vior)g(of)g(a)f(n)o(um) +o(b)q(er-of-v)m(alues)i(mismatc)o(h)f(b)q(et)o(w)o(een)g(a)f(con)o +(tin-)149 1047 y(uation)f(and)g(its)f(in)o(v)o(ok)o(er)h(is)g(unsp)q +(eci\014ed,)i(some)d(implemen)o(tations)i(ma)o(y)e(assign)g(some)149 +1104 y(sp)q(eci\014c)19 b(meaning)f(to)e(suc)o(h)h(situations;)h(for)f +(example,)g(extra)g(v)m(alues)h(migh)o(t)f(b)q(e)g(ig-)149 +1160 y(nored,)f(or)f(defaults)h(migh)o(t)g(b)q(e)g(supplied)i(for)d +(missing)i(v)m(alues.)22 b(Th)o(us)16 b(this)g(m)o(ultiple)149 +1217 y(return)k(v)m(alue)g(prop)q(osal)g(is)g(compatible)g(with)g +(Common)f(Lisp's)h(m)o(ultiple)h(v)m(alues,)149 1273 +y(but)e(strictly)g(more)f(conserv)m(ativ)o(e)i(than)e(it.)30 +b(The)19 b(b)q(eha)o(vior)g(of)g(programs)e(in)i(suc)o(h)149 +1330 y(situations)e(w)o(as)e(a)h(p)q(oin)o(t)g(of)g(con)o(ten)o(tion)g +(among)g(the)g(authors,)f(whic)o(h)i(is)f(wh)o(y)g(only)149 +1386 y(the)g(least)f(common)g(denominator)g(b)q(eha)o(vior)h(w)o(as)e +(sp)q(eci\014ed.)149 1505 y Fg(Un)o(wind/wind)19 b(protection)149 +1590 y Fi(dynamic-wind)p Fj(,)13 b(whic)o(h)i(w)o(as)e(describ)q(ed)j +(previously)f(in)g(this)g(column)g(\(when)f(it)h(w)o(as)149 +1647 y(The)k(Sc)o(heme)g(En)o(vironmen)o(t;)g Fc(Lisp)f(Pointers)p +Fj(,)g(v)o(olume)g(I,)h(n)o(um)o(b)q(er)f(2\),)g(is)h(already)149 +1703 y(implemen)o(ted)24 b(in)f(man)o(y)e(Sc)o(heme)h(dialects.)41 +b Fi(dynamic-wind)20 b Fj(tak)o(es)h(three)h(argu-)149 +1760 y(men)o(ts,)15 b(all)h(of)f(whic)o(h)h(are)f(th)o(unks)h(\(pro)q +(cedures)f(of)g(no)g(argumen)o(ts\).)k(It)d(b)q(eha)o(v)o(es)f(as)149 +1816 y(if)h(it)g(w)o(ere)e(de\014ned)j(with)245 1902 +y Fi(\(define)23 b(\(dynamic-wind)f(before)h(during)g(after\))293 +1958 y(\(before\))293 2015 y(\(call-with-values)e(during)340 +2071 y(\(lambda)i(results)388 2128 y(\(after\))388 2184 +y(\(apply)g(values)g(results\)\)\)\))149 2270 y Fj(except)17 +b(that)f(the)h(execution)g(of)f(the)h Fi(during)e Fj(th)o(unk)i(is)g +(\\protected")e(against)h(non-)149 2326 y(lo)q(cal)e(en)o(tries)f(and)g +(exits:)19 b(a)12 b(thro)o(w)g(out)g(of)g(the)h(execution)h(of)e +Fi(during)g Fj(will)i(cause)f(the)149 2383 y Fi(after)h +Fj(th)o(unk)g(to)f(b)q(e)i(in)o(v)o(ok)o(ed,)f(and)g(a)g(thro)o(w)e +(from)i(outside)g(bac)o(k)g(in)h(will)g(cause)g(the)149 +2439 y Fi(before)10 b Fj(th)o(unk)h(to)f(b)q(e)h(in)o(v)o(ok)o(ed.)19 +b(\(By)10 b(\\thro)o(w")f(I)i(mean)g(an)g(in)o(v)o(o)q(cation)g(of)f +(an)h(explicit)149 2496 y(con)o(tin)o(uation)16 b(as)f(obtained)h(from) +e Fi(call-with-current-continuati)o(on)p Fj(.\))885 2620 +y(3)p eop +%%Page: 4 4 +4 3 bop 378 311 a Fj(F)l(or)14 b(details,)h(the)f(earlier)i(Sc)o(heme)f +(En)o(vironmen)o(t)g(column)g(refers)f(the)h(reader)f(to)307 +368 y(F)l(riedman)19 b(and)f(Ha)o(ynes's)f(pap)q(er)h(\\Constraining)g +(Con)o(trol")f(in)i(POPL)f(1985,)f(but)307 424 y(to)h(sa)o(v)o(e)g(y)o +(ou)h(the)g(trouble)g(of)g(lo)q(oking)g(that)f(up,)i(I)f(ha)o(v)o(e)g +(supplied)i(a)d(more)h(direct)307 481 y(implemen)o(tation)e(of)d +Fi(dynamic-wind)g Fj(in)i(an)f(app)q(endix)i(to)e(the)g(presen)o(t)g +(column.)378 537 y Fi(dynamic-wind)9 b Fj(w)o(as)i(adopted)g(with)h +(the)f(follo)o(wing)i(clari\014cations:)19 b(The)11 b(seman-)307 +594 y(tics)18 b(of)g Fi(\(dynamic-wind)k Fc(b)n(efor)n(e)h(during)h +(after)p Fi(\))18 b Fj(should)h(lea)o(v)o(e)f(unsp)q(eci\014ed)i(what) +307 650 y(happ)q(ens)i(if)g(a)f(thro)o(w)f(o)q(ccurs)i(out)f(of)f +Fc(b)n(efor)n(e)h Fj(or)g Fc(after)5 b Fj(;)24 b(and)d(it)g(is)h(b)q +(est)g(to)e(defer)307 707 y(in)o(terrupts)c(during)g +Fc(b)n(efor)n(e)e Fj(and)i Fc(after)p Fj(.)307 827 y +Fg(Ev)m(aluating)k(computed)e(expressions)307 913 y Fj(The)f(original)g +(1975)f(memo)g(on)g(Sc)o(heme)h(describ)q(ed)h Fi(evaluate)p +Fj(,)e(whic)o(h)h(w)o(as)e(analo-)307 970 y(gous)g(to)f(Lisp's)i +(traditional)g Fi(eval)e Fj(function.)21 b Fi(evaluate)14 +b Fj(to)q(ok)g(a)h(single)i(argumen)o(t,)307 1026 y(an)e(S-expression,) +h(and)g(in)o(v)o(ok)o(ed)f(an)g(in)o(terpreter)h(on)f(it.)20 +b(F)l(or)15 b(example:)403 1121 y Fi(\(let)23 b(\(\(name)g('+\)\))g +(\(evaluate)g(\(list)g(name)g(2)h(3\)\)\))498 1177 y +Fh(\000)-7 b(!)48 b Fi(5)307 1271 y Fj(Sc)o(heme)11 b(b)q(eing)h +(lexically)h(scop)q(ed,)f(ho)o(w)o(ev)o(er,)e(there)g(w)o(as)g(some)g +(confusion)h(o)o(v)o(er)f(whic)o(h)307 1328 y(en)o(vironmen)o(t)16 +b(the)f(expression)h(w)o(as)e(to)h(b)q(e)h(ev)m(aluated)g(in.)21 +b(Should)403 1422 y Fi(\(let)i(\(\(name)g('+\)\))450 +1479 y(\(let)h(\(\(+)f(*\)\))498 1535 y(\(evaluate)g(\(list)g(name)g(2) +h(3\)\)\)\))307 1629 y Fj(ev)m(aluate)16 b(to)f(5)g(or)f(to)h(6?)378 +1686 y(T)l(o)c(clarify)i(matters,)d(the)i(Revised)h(Rep)q(ort)f +(replaced)h Fi(evaluate)e Fj(with)h Fi(enclose)p Fj(,)307 +1742 y(whic)o(h)k(to)q(ok)f(t)o(w)o(o)f(argumen)o(ts,)h(a)g +Fi(lambda)p Fj(-expression)g(and)h(a)f(represen)o(tation)h(of)f(an)307 +1799 y(en)o(vironmen)o(t)h(from)f(whic)o(h)h(to)f(supply)h(bindings)i +(of)d(the)g Fi(lambda)p Fj(-expression's)g(free)307 1855 +y(v)m(ariables.)21 b(F)l(or)15 b(example:)403 1950 y +Fi(\(let)23 b(\(\(name)g('+\)\))450 2006 y(\(let)h(\(\(+)f(*\)\))498 +2063 y(\(\(enclose)g(\(list)g('lambda)g('\(\))g(\(list)g(name)h(2)f +(3\)\))737 2119 y(\(list)g(\(cons)g('+)h(+\)\)\)\)\)\))498 +2176 y Fh(\000)-7 b(!)48 b Fi(6)307 2270 y Fj(This)20 +b(forced)g(the)g(programmer)e(to)h(b)q(e)i(explicit)h(ab)q(out)d(the)h +Fi(lambda)p Fj(-expression's)307 2326 y(enclosing)d(en)o(vironmen)o(t.) +378 2383 y(F)l(or)d(v)m(arious)h(tec)o(hnical)i(and)e(practical)g +(reasons,)f(there)h(w)o(as)f(no)h Fi(eval)f Fj(analogue)307 +2439 y(in)21 b(subsequen)o(t)g(Sc)o(heme)f(rep)q(orts.)34 +b(The)20 b(ma)s(jor)f(stum)o(bling)h(blo)q(c)o(ks)h(w)o(ere)f(ho)o(w)f +(to)307 2496 y(describ)q(e)j Fi(eval)d Fj(formally)h(and)g(ho)o(w)g(to) +f(de\014ne)i(something)f(that)f(mak)o(es)g(sense)i(in)1043 +2620 y(4)p eop +%%Page: 5 5 +5 4 bop 149 311 a Fj(all)17 b(extan)o(t)f(v)m(arian)o(ts)g(of)f(the)h +(language.)23 b(Some)16 b(Sc)o(heme)g(implemen)o(tations)i(con)o(tain) +149 368 y(a)e(distinguished)i(top-lev)o(el)f(en)o(vironmen)o(t,)e +(while)i(others)e(extend)h(the)g(language)g(b)o(y)149 +424 y(pro)o(viding)j(w)o(a)o(ys)e(to)g(create)g(m)o(ultiple)j(en)o +(vironmen)o(ts,)e(an)o(y)g(of)f(whic)o(h)h(migh)o(t)g(serv)o(e)149 +481 y(equally)f(w)o(ell.)220 537 y(The)12 b Fi(eval)g +Fj(prop)q(osal)g(adopted)g(at)g(the)g(June)h(meeting,)g(whic)o(h)f(I)h +(repro)q(duce)g(here,)149 594 y(is)j(one)f(that)g(comes)g(from)g(Bill)i +(Rozas.)263 702 y Fi(\(eval)23 b Fc(expr)n(ession)g(envir)n(onment-sp)n +(e)n(ci\014er)m Fi(\))190 b Fj(essen)o(tial)16 b(pro)q(cedure)263 +777 y Fi(eval)10 b Fj(ev)m(aluates)h Fc(expr)n(ession)e +Fj(in)h(the)h(en)o(vironmen)o(t)f(indicated)i(b)o(y)e +Fc(envir)n(onment-)263 834 y(sp)n(e)n(ci\014er)p Fj(.)21 +b Fc(envir)n(onment-sp)n(e)n(ci\014er)13 b Fj(ma)o(y)i(b)q(e)i(the)f +(return)g(v)m(alue)h(of)e(one)h(of)g(the)263 890 y(three)21 +b(pro)q(cedures)g(describ)q(ed)h(b)q(elo)o(w,)g(or)e(implemen)o +(tation-sp)q(eci\014c)j(exten-)263 947 y(sions.)31 b(No)19 +b(other)g(op)q(erations)g(on)f(en)o(vironmen)o(t)i(sp)q(eci\014ers)g +(are)f(de\014ned)h(b)o(y)263 1003 y(this)c(prop)q(osal.)263 +1079 y(Implemen)o(tations)g(ma)o(y)e(allo)o(w)h(non-expression)h +(programs)e(\(i.e.)g(de\014nitions\))263 1135 y(as)j(the)h(\014rst)f +(argumen)o(t)g(to)g Fi(eval)g Fc(only)h Fj(when)g(the)f(second)i +(argumen)o(t)e(is)h(the)263 1192 y(return)i(v)m(alue)h(of)f +Fi(interaction-environment)d Fj(or)j(some)f(implemen)o(tation)263 +1248 y(extension.)i(In)16 b(other)e(w)o(ords,)g Fi(eval)h +Fj(will)i(nev)o(er)e(create)g(new)h(bindings)h(in)f(the)263 +1305 y(return)f(v)m(alue)i(of)d Fi(null-environment)f +Fj(or)i Fi(scheme-report-environment)p Fj(.)263 1420 +y Fi(\(scheme-report-environment)20 b Fc(version)p Fi(\))193 +b Fj(essen)o(tial)16 b(pro)q(cedure)263 1495 y Fc(V)m(ersion)21 +b Fj(m)o(ust)i(b)q(e)g(an)g(exact)f(non-negativ)o(e)h(in)o(teger)g +(corresp)q(onding)h(to)e(a)263 1552 y(v)o(ersion)e(of)f(one)h(of)f(the) +h(Revised)857 1535 y Fa(n)902 1552 y Fj(Rep)q(orts)g(on)g(Sc)o(heme.)34 +b(This)20 b(pro)q(cedure)263 1608 y(returns)g(a)g(sp)q(eci\014er)h(for) +f(an)g(en)o(vironmen)o(t)g(that)f(con)o(tains)i(exactly)f(the)g(set)263 +1665 y(of)d(bindings)i(sp)q(eci\014ed)g(in)f(the)g(corresp)q(onding)g +(rep)q(ort)f(that)f(the)i(implemen-)263 1721 y(tation)h(supp)q(orts.)32 +b(Not)18 b(all)i(v)o(ersions)g(ma)o(y)e(b)q(e)i(a)o(v)m(ailable)h(in)f +(all)g(implemen-)263 1778 y(tations)g(at)f(all)i(times.)35 +b(Ho)o(w)o(ev)o(er,)20 b(an)g(implemen)o(tation)i(that)d(conforms)g(to) +263 1834 y(v)o(ersion)e Fb(n)g Fj(of)f(the)h(Revised)748 +1818 y Fa(n)789 1834 y Fj(Rep)q(orts)g(on)g(Sc)o(heme)g(m)o(ust)f +(accept)h(v)o(ersion)g Fb(n)p Fj(.)263 1891 y(If)e Fi +(scheme-report-environmen)o(t)d Fj(is)i(a)o(v)m(ailable,)i(but)f(the)f +(sp)q(eci\014ed)j(v)o(ersion)263 1947 y(is)f(not,)e(the)i(pro)q(cedure) +g(will)g(signal)h(an)e(error.)263 2023 y(The)e(e\013ect)g(of)f +(assigning)i(\(through)e(the)h(use)g(of)g Fi(eval)p Fj(\))f(a)g(v)m +(ariable)j(b)q(ound)e(in)h(a)263 2079 y Fi(scheme-report-environment)8 +b Fj(\(e.g.)j Fi(car)p Fj(\))f(is)i(unsp)q(eci\014ed.)22 +b(Th)o(us)11 b(the)h(en)o(vi-)263 2136 y(ronmen)o(ts)e(sp)q(eci\014ed)i +(b)o(y)e(the)g(return)g(v)m(alues)i(of)d Fi(scheme-report-environment) +263 2192 y Fj(ma)o(y)15 b(b)q(e)g(imm)o(utable.)263 2307 +y Fi(\(null-environment\))572 b Fj(essen)o(tial)16 b(pro)q(cedure)263 +2383 y(This)d(pro)q(cedure)h(returns)f(a)f(sp)q(eci\014er)j(for)d(an)h +(en)o(vironmen)o(t)g(that)f(con)o(tains)h(no)263 2439 +y(v)m(ariable)f(bindings,)g(but)f(con)o(tains)f(\(syn)o(tactic\))g +(bindings)i(for)d(all)j(the)e(syn)o(tactic)263 2496 y(k)o(eyw)o(ords)k +(de\014ned)j(in)f(the)f(rep)q(ort,)g(and)g(no)g(others.)885 +2620 y(5)p eop +%%Page: 6 6 +6 5 bop 421 311 a Fi(\(interaction-environment\))585 +b Fj(pro)q(cedure)421 387 y(This)20 b(pro)q(cedure)g(returns)g(a)f(sp)q +(eci\014er)i(for)e(an)h(en)o(vironmen)o(t)g(that)e(con)o(tains)421 +444 y(implementation-de\014ned)k(bindings,)e(t)o(ypically)g(a)f(sup)q +(erset)g(of)f(those)g(listed)421 500 y(in)h(the)g(rep)q(ort.)30 +b(The)19 b(in)o(ten)o(t)g(is)h(that)e(this)h(pro)q(cedure)g(will)i +(return)e(a)f(sp)q(eci-)421 557 y(\014er)f(for)e(the)i(en)o(vironmen)o +(t)g(in)g(whic)o(h)g(the)g(implemen)o(tation)h(w)o(ould)f(ev)m(aluate) +421 613 y(expressions)f(dynamically)h(t)o(yp)q(ed)e(b)o(y)h(the)f +(user.)378 722 y(Rozas)c(explains:)19 b(\\The)11 b(prop)q(osal)g(do)q +(es)g(not)g(imply)h(the)f(existence)h(or)f(supp)q(ort)g(of)307 +778 y(\014rst-class)j(en)o(vironmen)o(ts,)g(although)h(it)f(is)g +(compatible)h(with)g(them.)k(The)14 b(prop)q(osal)307 +835 y(only)22 b(requires)g(a)f(w)o(a)o(y)f(of)h(asso)q(ciating)h(tags)e +(with)i(a)f(\014nite)h(set)f(of)g(distinguished)307 891 +y(en)o(vironmen)o(ts)d(whic)o(h)g(the)f(implemen)o(tations)i(can)f +(main)o(tain)f(implicitl)q(y)j(\(without)307 947 y(rei\014cation\).)378 +1004 y(\\)7 b(`P)o(ascal-lik)o(e')k(implemen)o(tations)h(can)f(supp)q +(ort)f(b)q(oth)h Fi(null-environment)d Fj(and)307 1061 +y Fi(scheme-report-environment)f Fj(since)k(the)g(en)o(vironmen)o(ts)f +(sp)q(eci\014ed)i(b)o(y)e(the)h(return)307 1117 y(v)m(alues)j(of)e +(these)g(pro)q(cedures)i(need)f(not)f(share)h(an)o(y)f(bindings)i(with) +f(the)f(curren)o(t)h(pro-)307 1174 y(gram.)k(A)11 b(v)o(ersion)f(of)g +Fi(eval)f Fj(that)h(supp)q(orts)g(these)g(but)h(not)e +Fi(interaction-environment)307 1230 y Fj(can)j(b)q(e)g(written)g(p)q +(ortably)l(,)h(but)e(can)h(b)q(e)h(b)q(etter)e(written)h(b)o(y)g(the)g +(implemen)o(tor,)g(since)307 1287 y(it)k(can)f(share)g(co)q(de)h(with)f +(the)h(default)f(ev)m(aluator)h(or)e(compiler.")378 1343 +y(Here)f(\\P)o(ascal-lik)o(e")i(refers)e(to)g(implemen)o(tations)h +(that)f(are)g(restricted)h(to)f(static)307 1400 y(compilation)f(and)e +(linking.)20 b(Because)11 b(an)f Fi(eval)g Fj(that)f(do)q(esn't)h(supp) +q(ort)g Fi(interaction-)307 1456 y(environment)15 b Fj(can)i(b)q(e)h +(written)e(en)o(tirely)i(in)g(the)f(Sc)o(heme)g(language)g(describ)q +(ed)i(b)o(y)307 1513 y(the)g(rest)f(of)f(the)i(rep)q(ort,)f(it)h +(raises)f(no)h(troublesome)f(questions)h(ab)q(out)f(its)h(formal)307 +1569 y(seman)o(tics.)307 1692 y Fg(Macros)307 1778 y +Fj(The)11 b(consensus)g(of)f(the)g(meeting)h(w)o(as)e(that)h +Fi(define-syntax)p Fj(,)f Fi(syntax-rules)p Fj(,)g Fi(let-)307 +1835 y(syntax)p Fj(,)14 b(and)h Fi(letrec-syntax)f Fj(should)i(b)q(e)g +(mo)o(v)o(ed)f(out)f(of)h(the)g(rep)q(ort's)g(app)q(endix)307 +1891 y(in)o(to)e(the)h(main)g(b)q(o)q(dy)g(of)e(the)i(rep)q(ort.)19 +b(Although)14 b(ev)o(ery)o(one)f(agrees)g(that)f(a)h(lo)o(w-lev)o(el) +307 1948 y(macro)j(facilit)o(y)i(is)f(imp)q(ortan)o(t,)g(the)g(sub)s +(ject)f(is)h(to)q(o)g(con)o(ten)o(tious)f(at)g(presen)o(t,)h(with)307 +2004 y(three)h(or)f(more)g(comp)q(eting)h(prop)q(osals)f(at)g(presen)o +(t.)27 b(The)17 b(disp)q(osition)i(of)e(the)h(rest)307 +2061 y(of)f(the)h(app)q(endix)h(and)f(of)f(the)g(other)g(lo)o(w-lev)o +(el)i(prop)q(osals)f(will)h(b)q(e)f(left)g(up)g(to)e(the)307 +2117 y(rep)q(ort's)f(editor.)307 2240 y Fg(Committee)j(w)o(ork)307 +2326 y Fj(There)c(is)h(a)e(strong)g(sense)i(that)e(some)h(kind)h(of)e +(exception)i(system)f(is)g(needed.)21 b(Ho)o(w-)307 2383 +y(ev)o(er,)15 b(no)g(sp)q(eci\014c)i(prop)q(osal)e(w)o(as)f(ready)h(at) +g(the)g(time)g(of)g(the)g(meeting.)20 b(A)15 b(commit-)307 +2439 y(tee)k(has)g(b)q(een)g(formed)g(to)f(w)o(ork)g(on)g(one.)31 +b(What)18 b(seems)h(to)f(b)q(e)h(in)h(the)f(air)g(migh)o(t)307 +2496 y(b)q(e)d(describ)q(ed)h(as)d(a)h(highly)i(distilled)g(v)o(ersion) +f(of)e(the)h(condition)h(system)f(that)f(Ken)o(t)1043 +2620 y(6)p eop +%%Page: 7 7 +7 6 bop 149 311 a Fj(Pitman)18 b(dev)o(elop)q(ed)h(for)d(Common)h +(Lisp.)27 b(I)18 b(hop)q(e)g(that)f(I'll)h(b)q(e)g(able)g(to)f(rep)q +(ort)g(on)149 368 y(this)f(in)g(a)f(future)g(column.)220 +424 y(On)i(the)f(sub)s(ject)g(of)g(libraries,)i(Will)g(Clinger's)e(min) +o(utes)h(rep)q(ort)f(that)g(\\the)g(au-)149 481 y(thors)h(p)q(erceiv)o +(e)i(a)e(need)i(to)d(giv)o(e)i(some)f(library)i(o\016cial)f(status.)26 +b(In)18 b(fact,)f(w)o(e)g(need)149 537 y(to)e(giv)o(e)h(o\016cial)h +(sanction)f(to)f(m)o(ultiple)i(libraries.)23 b(There)16 +b(is)g(reason)g(to)f(distinguish)149 594 y(b)q(et)o(w)o(een)d(accepted) +f(\(or)g(standard\))f(libraries,)j(exp)q(erimen)o(tal)f(libraries,)i +(and)d(prop)q(os-)149 650 y(als.)26 b(The)17 b(accepted)h(libraries)g +(can)g(reduce)g(the)f(in)o(tellectual)i(size)f(of)e(the)i(language)149 +707 y(b)o(y)g(remo)o(ving)f(things)g(lik)o(e)h Fi(string->list)e +Fj(from)g(the)i(rep)q(ort.)25 b(The)17 b(exp)q(erimen)o(tal)149 +763 y(libraries)i(w)o(ould)f(con)o(tain)g(solid)g(implemen)o(tations)h +(of)e(exp)q(erimen)o(tal)i(features,)e(in-)149 819 y(cluding)i(things)e +(that)g(migh)o(t)f(nev)o(er)h(deserv)o(e)g(to)g(b)q(e)g(in)h(the)f(rep) +q(ort.)24 b(The)18 b(prop)q(osal)149 876 y(libraries)f(could)f(con)o +(tain)g(an)o(ything)f(implemen)o(ted)i(in)f(p)q(ortable)g(Sc)o(heme.") +220 932 y(Among)11 b(the)g(con)o(ten)o(t)g(of)g(the)g(accepted)h +(libraries,)h(some)e(features)g(\(suc)o(h)g(as)g(those)149 +989 y(that)18 b(ma)o(y)f(b)q(e)h(mo)o(v)o(ed)g(out)f(of)h(the)g(b)q(o)q +(dy)g(of)g(the)g(rep)q(ort\))f(ma)o(y)g(b)q(e)i(required)g(to)e(b)q(e) +149 1045 y(built)e(in)f(to)f(implemen)o(tations,)h(while)h(others)e +(will)i(b)q(e)f(exp)q(ected)g(to)f(b)q(e)h(a)o(v)m(ailable)h(on)149 +1102 y(demand)g(\(p)q(erhaps)f(using)h(something)g(similar)g(to,)e(but) +i(not)e(the)h(same)g(as,)g Fi(require)149 1158 y Fj(as)h(found)h(in)g +(Common)e(Lisp)j(and)e(GNU)g(Emacs\).)220 1215 y(A)f(librarian)h(w)o +(as)d(app)q(oin)o(ted)j(\(Rees\),)e(and)h(a)f(library)i(committee)e(is) +h(dev)o(eloping)149 1271 y(prop)q(osals)i(for)e(the)i(c)o(harter,)e +(structure,)g(and)i(con)o(ten)o(t)e(of)h(the)g(libraries.)817 +1394 y Fh(\003)45 b(\003)g(\003)220 1517 y Fj(I)17 b(w)o(ould)g(lik)o +(e)h(to)e(ac)o(kno)o(wledge)h(Will)h(Clinger,)g(who)e(prepared)h(the)g +(min)o(utes)g(of)149 1574 y(the)i(meeting,)g(and)g(the)g(v)m(arious)g +(p)q(eople)h(who)e(con)o(tributed)h(prop)q(osals,)g(including)149 +1630 y(Bill)f(Rozas)d(and)h(John)f(Ramsdell.)22 b(An)o(y)15 +b(errors)g(here)h(are)f(m)o(y)g(resp)q(onsibilit)o(y)l(,)i(ho)o(w-)149 +1687 y(ev)o(er.)j(Thanks)15 b(also)g(to)f(Norman)g(Adams)h(and)g(Ric)o +(hard)h(Kelsey)g(for)e(corrections)h(to)149 1743 y(a)g(draft)g(of)g +(this)g(article.)220 1799 y(I)i(w)o(ould)g(also)g(lik)o(e)h(to)f(b)q +(elatedly)h(ac)o(kno)o(wledge)f(Norman)g(Adams,)f(P)o(a)o(v)o(el)h +(Cur-)149 1856 y(tis,)g(Bruce)g(Donald,)f(and)h(Ric)o(hard)g(Kelsey)g +(for)f(their)h(commen)o(ts)f(on)g(drafts)f(of)h(m)o(y)149 +1912 y(previous)g(column.)220 1969 y(F)l(or)e(future)g(columns,)h(I)g +(am)f(en)o(tertaining)h(v)m(arious)g(topic)g(p)q(ossibilities,)i +(includ-)149 2025 y(ing)h Fi(eval)p Fj(,)e(threads,)g +Fi(amb)p Fj(,)g(and)h(monads.)24 b(If)17 b(y)o(ou)f(ha)o(v)o(e)h(other) +f(ideas,)h(and)g(particu-)149 2082 y(larly)f(if)g(y)o(ou)e(think)i(the) +f(written)h(record)f(on)g(the)g(language)g(is)h(particularly)g(p)q(o)q +(or)f(in)149 2138 y(certain)h(areas,)e(please)i(write)g(and)f(let)h(me) +f(kno)o(w.)149 2297 y Fg(App)q(endix:)23 b(An)17 b(implemen)o(tation)i +(of)f Fi(dynamic-wind)149 2383 y Fj(This)c(program)e(is)h(based)g(on)g +(m)o(y)g(v)m(ague)g(recollection)i(of)d(an)h(ancien)o(t)h(man)o +(uscript)f(b)o(y)149 2439 y(Chris)k(Hanson)f(and)h(John)g(Lamping.)24 +b(I)17 b(ap)q(ologize)g(for)f(the)g(lac)o(k)h(of)f(data)f(abstrac-)149 +2496 y(tion,)h(but)f(the)g(co)q(de)h(is)g(more)e(concise)j(this)e(w)o +(a)o(y)l(.)885 2620 y(7)p eop +%%Page: 8 8 +8 7 bop 378 311 a Fj(A)11 b(state)f(space)h(is)h(a)f(tree)g(with)g(the) +g(curren)o(t)g(state)f(at)h(the)g(ro)q(ot.)17 b(Eac)o(h)11 +b(no)q(de)h(other)307 368 y(than)i(the)f(ro)q(ot)g(is)h(a)g(triple)g +Fh(h)p Fc(b)n(efor)n(e)o Fb(;)8 b Fc(after)p Fb(;)g Fc(p)n(ar)n(ent)o +Fh(i)p Fj(,)13 b(represen)o(ted)h(in)g(this)h(implemen-)307 +424 y(tation)e(as)f(t)o(w)o(o)g(pairs)h Fi(\(\()p Fc(b)n(efor)n(e)23 +b Fi(.)h Fc(after)p Fi(\))g(.)g Fc(p)n(ar)n(ent)o Fi(\))p +Fj(.)19 b(Na)o(vigating)13 b(b)q(et)o(w)o(een)g(states)307 +481 y(requires)j(re-ro)q(oting)f(the)h(tree)f(b)o(y)g(rev)o(ersing)g +(paren)o(t-c)o(hild)i(links.)378 537 y(Since)c Fi(dynamic-wind)d +Fj(in)o(teracts)h(with)h Fi(call-with-current-continua)o(tion)p +Fj(,)307 594 y(this)k(implemen)o(tation)g(m)o(ust)f(replace)h(the)f +(usual)h(de\014nition)h(of)e(the)g(latter.)307 700 y +Fi(\(define)23 b(*here*)g(\(list)g(#f\)\))307 795 y(\(define)g +(original-cwcc)f(call-with-current-continuat)o(ion\))307 +891 y(\(define)h(\(call-with-current-continua)o(tion)e(proc\))355 +948 y(\(let)i(\(\(here)g(*here*\)\))403 1004 y(\(original-cwcc)f +(\(lambda)g(\(cont\))808 1060 y(\(proc)h(\(lambda)g(results)999 +1117 y(\(reroot!)g(here\))999 1173 y(\(apply)g(cont)h +(results\)\)\)\)\)\)\))307 1269 y(\(define)f(\(dynamic-wind)f(before)h +(during)g(after\))355 1325 y(\(let)g(\(\(here)g(*here*\)\))403 +1382 y(\(reroot!)f(\(cons)i(\(cons)f(before)g(after\))g(here\)\))403 +1438 y(\(call-with-values)e(during)450 1495 y(\(lambda)i(results)498 +1551 y(\(reroot!)g(here\))498 1608 y(\(apply)g(values)g +(results\)\)\)\)\))307 1703 y(\(define)g(\(reroot!)g(there\))355 +1760 y(\(if)g(\(not)h(\(eq?)f(*here*)g(there\)\))450 +1816 y(\(begin)g(\(reroot!)g(\(cdr)g(there\)\))617 1873 +y(\(let)h(\(\(before)e(\(caar)i(there\)\))761 1929 y(\(after)f(\(cdar)g +(there\)\)\))665 1986 y(\(set-car!)g(*here*)g(\(cons)g(after)g +(before\)\))665 2042 y(\(set-cdr!)g(*here*)g(there\))665 +2098 y(\(set-car!)g(there)g(#f\))665 2155 y(\(set-cdr!)g(there)g +('\(\)\))665 2211 y(\(set!)g(*here*)g(there\))665 2268 +y(\(before\)\)\)\)\))1043 2620 y Fj(8)p eop +%%Trailer +end +userdict /end-hook known{end-hook}if +%%EOF diff --git a/doc/module.ps b/doc/module.ps new file mode 100644 index 0000000..9ef281b --- /dev/null +++ b/doc/module.ps @@ -0,0 +1,1417 @@ +%!PS-Adobe-2.0 +%%Creator: dvips 5.521 Copyright 1986, 1993 Radical Eye Software +%%CreationDate: Sat Jan 15 16:16:41 1994 +%%Pages: 14 +%%PageOrder: Ascend +%%BoundingBox: 0 0 612 792 +%%EndComments +%DVIPSCommandLine: dvips -f +%DVIPSSource: TeX output 1994.01.15:1616 +%%BeginProcSet: tex.pro +/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N +/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 +mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} +ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale +isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div +hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul +TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get +round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{ +statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 +0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn +begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X +array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo +setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx +FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{ +pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get} +B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup +length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B +/ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type +/stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp +0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 +index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff +ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice +ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ +ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn +/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 +sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{cc 1 add D +}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0 +moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add +.99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage +userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook +known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X +/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for +65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 +0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V +{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 +getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} +ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley +false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley +scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave +transform round exch round exch itransform moveto rulex 0 rlineto 0 +ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta +0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail} +B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{ +3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p +-1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{ +3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end +%%EndProcSet +TeXDict begin 40258431 52099146 1000 300 300 () @start +/Fa 3 103 df<70F8F8F87005057C840D>58 D<0000FE0200078186001C004C0038003C +0060003C00C0001C01C0001803800018070000180F0000181E0000101E0000103C000000 +3C00000078000000780000007800000078000000F0000000F0000000F0000000F0000000 +F00000807000008070000080700001003800010038000200180004000C00180006002000 +0381C00000FE00001F217E9F21>67 D<00007C0000CE00019E00039E00030C0007000007 +00000700000700000E00000E00000E0000FFF0000E00000E00001C00001C00001C00001C +00001C0000380000380000380000380000380000700000700000700000700000700000E0 +0000E00000E00000E00000C00001C000318000798000F300006200003C000017297E9F16 +>102 D E /Fb 2 54 df<00300030007000F001F0017002700470087018701070207040 +70C070FFFE0070007000700070007003FE0F157F9412>52 D<20303FE03FC02400200020 +00200020002F8030E020700030003800384038E038E0388030406020C01F000D157E9412 +>I E /Fc 1 4 df<020002000200C218F2783AE00F800F803AE0F278C218020002000200 +0D0E7E8E12>3 D E /Fd 7 107 df0 +D<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003 +C010127D9317>15 D<000000040000000002000000000200000000010000000000800000 +0000400000000020FFFFFFFFFCFFFFFFFFFC000000002000000000400000000080000000 +010000000002000000000200000000040026107D922D>33 D<0000020000000003000000 +000300000000018000000000C000000000C00000000060007FFFFFF000FFFFFFFC000000 +000E00000000038000000001F0000000007C00000000F000000003C00000000700000000 +0C00FFFFFFF8007FFFFFF0000000006000000000C0000000018000000001800000000300 +0000000300000000020000261A7D972D>41 D<004000C001800180018003000300030006 +00060006000C000C00180018001800300030003000600060006000C000C0006000600060 +003000300030001800180018000C000C0006000600060003000300030001800180018000 +C000400A2E7CA112>104 DII E /Fe 41 123 df<70F8F8F8F8F8F8F8F8 +F8F8F8F8F8F8F8F870000000000070F8F8F870051C779B18>33 D<4010E038F078E038E0 +38E038E038E038E038E038E038E038E03860300D0E7B9C18>I<387C7C7E3E0E0E0E1C1C +38F8F0C0070E789B18>39 D<007000F001E003C007800F001E001C003800380070007000 +70007000E000E000E000E000E000E000E000E0007000700070007000380038001C001E00 +0F00078003C001F000F000700C24799F18>I<6000F00078003C001E000F000780038001 +C001C000E000E000E000E00070007000700070007000700070007000E000E000E000E001 +C001C0038007800F001E003C007800F00060000C247C9F18>I<01C00001C00001C00001 +C000C1C180F1C780F9CF807FFF001FFC0007F00007F0001FFC007FFF00F9CF80F1C780C1 +C18001C00001C00001C00001C00011147D9718>I<00600000F00000F00000F00000F000 +00F00000F00000F0007FFFC0FFFFE0FFFFE07FFFC000F00000F00000F00000F00000F000 +00F00000F00000600013147E9718>I<1C3E7E7F3F1F070E1E7CF860080C788518>I<7FFF +00FFFF80FFFF807FFF0011047D8F18>I<3078FCFC78300606778518>I<01800380038007 +800F803F80FF80FB80438003800380038003800380038003800380038003800380038003 +800380038003807FFCFFFE7FFC0F1C7B9B18>49 D<03F0000FFE003FFF007C0F807003C0 +E001C0F000E0F000E06000E00000E00000E00001C00001C00003C0000780000F00001E00 +003C0000780000F00001E00007C0000F80001E00E03C00E07FFFE0FFFFE07FFFE0131C7E +9B18>I<07F8001FFE003FFF007807807803C07801C03001C00001C00003C0000380000F +0003FF0003FE0003FF000007800003C00001C00000E00000E00000E0F000E0F000E0F001 +C0F003C07C07803FFF001FFE0003F800131C7E9B18>I<3078FCFC783000000000000000 +003078FCFC78300614779318>58 D<600000F00000FC00007E00003F00001FC00007E000 +03F00001FC00007E00003F00001F80001F80003F00007E0001FC0003F00007E0001FC000 +3F00007E0000FC0000F0000060000011187D9918>62 D<0FF0003FFC007FFF00700F00F0 +0380F00380600780000F00003E00007C0001F00001E00003C00003C00003C00003C00003 +C00003800000000000000000000000000000000003800007C00007C00007C00003800011 +1C7D9B18>I<1FE0003FF8007FFC00781E00300E0000070000070000FF0007FF001FFF00 +7F0700780700E00700E00700E00700F00F00781F003FFFF01FFBF007E1F014147D9318> +97 D<7E0000FE00007E00000E00000E00000E00000E00000E00000E3E000EFF800FFFC0 +0FC1E00F80E00F00700E00700E00380E00380E00380E00380E00380E00380F00700F0070 +0F80E00FC1E00FFFC00EFF80063E00151C809B18>I<01FE0007FF001FFF803E07803803 +00700000700000E00000E00000E00000E00000E00000E000007000007001C03801C03E03 +C01FFF8007FF0001FC0012147D9318>I<001F80003F80001F8000038000038000038000 +038000038003E3800FFB801FFF803C1F80380F80700780700380E00380E00380E00380E0 +0380E00380E00380700780700780380F803C1F801FFFF00FFBF803E3F0151C7E9B18>I< +01F00007FC001FFE003E0F00380780700380700380E001C0E001C0FFFFC0FFFFC0FFFFC0 +E000007000007001C03801C03E03C01FFF8007FF0001FC0012147D9318>I<001F80007F +C000FFE000E1E001C0C001C00001C00001C0007FFFC0FFFFC0FFFFC001C00001C00001C0 +0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0007FFF +007FFF007FFF00131C7F9B18>I<01E1F007FFF80FFFF81E1E301C0E0038070038070038 +07003807003807001C0E001E1E001FFC001FF80039E0003800001C00001FFE001FFFC03F +FFE07801F0700070E00038E00038E00038E000387800F07E03F01FFFC00FFF8001FC0015 +1F7F9318>I<7E0000FE00007E00000E00000E00000E00000E00000E00000E3E000EFF80 +0FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0 +0E00E00E00E00E00E07FC3FCFFE7FE7FC3FC171C809B18>I<03800007C00007C00007C0 +000380000000000000000000000000007FC000FFC0007FC00001C00001C00001C00001C0 +0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000FFFF00FFFF +80FFFF00111D7C9C18>I107 +D<7FE000FFE0007FE00000E00000E00000E00000E00000E00000E00000E00000E00000E0 +0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0 +0000E0007FFFC0FFFFE07FFFC0131C7E9B18>I<7CE0E000FFFBF8007FFFF8001F1F1C00 +1E1E1C001E1E1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C00 +1C1C1C001C1C1C001C1C1C001C1C1C007F1F1F00FFBFBF807F1F1F001914819318>I<7E +3E00FEFF807FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E +00E00E00E00E00E00E00E00E00E07FC3FCFFE7FE7FC3FC1714809318>I<01F0000FFE00 +1FFF003E0F803803807001C07001C0E000E0E000E0E000E0E000E0E000E0F001E07001C0 +7803C03C07803E0F801FFF000FFE0001F00013147E9318>I<7E3E00FEFF807FFFC00FC1 +E00F80E00F00700E00700E00380E00380E00380E00380E00380E00380F00700F00700F80 +E00FC1E00FFFC00EFF800E3E000E00000E00000E00000E00000E00000E00000E00007FC0 +00FFE0007FC000151E809318>I<01E38007FB801FFF803E1F80380F80700780700780E0 +0380E00380E00380E00380E00380E00380700780700780380F803C1F801FFF800FFB8003 +E380000380000380000380000380000380000380000380003FF8003FF8003FF8151E7E93 +18>I<7F87E0FF9FF07FBFF803F87803F03003E00003C00003C000038000038000038000 +0380000380000380000380000380000380007FFE00FFFF007FFE0015147F9318>I<07F7 +003FFF007FFF00780F00E00700E00700E007007C00007FE0001FFC0003FE00001F006007 +80E00380E00380F00380F80F00FFFF00FFFC00E7F00011147D9318>I<01800003800003 +80000380000380007FFFC0FFFFC0FFFFC003800003800003800003800003800003800003 +80000380000380000380400380E00380E00380E001C1C001FFC000FF80003E0013197F98 +18>I<7E07E0FE0FE07E07E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0 +0E00E00E00E00E00E00E00E00E01E00F03E007FFFC03FFFE01FCFC1714809318>I<7F8F +F0FF8FF87F8FF01E03C00E03800E03800E0380070700070700070700038E00038E00038E +00038E0001DC0001DC0001DC0000F80000F80000700015147F9318>II<7F8FF07F9FF07F8FF0070700 +078E00039E0001DC0001F80000F80000700000F00000F80001DC00039E00038E00070700 +0F07807F8FF0FF8FF87F8FF015147F9318>I<7F8FF0FF8FF87F8FF00E01C00E03800E03 +80070380070700070700038700038600038E0001CE0001CE0000CC0000CC0000DC000078 +0000780000780000700000700000700000F00000E00079E0007BC0007F80003F00001E00 +00151E7F9318>I<3FFFF07FFFF07FFFF07001E07003C0700780000F00001E00003C0000 +F80001F00003C0000780000F00701E00703C0070780070FFFFF0FFFFF0FFFFF014147F93 +18>I E /Ff 35 122 df<00003FE00000E0100001803800038078000300780007003000 +0700000007000000070000000E0000000E0000000E000000FFFFE0000E00E0001C01C000 +1C01C0001C01C0001C01C0001C0380003803800038038000380380003807000038070000 +7007000070071000700E2000700E2000700E2000E00E2000E0064000E0038000E0000000 +C0000001C0000001C000003180000079800000F3000000620000003C0000001D29829F1A +>12 D<1C3C3C3C3C040408081020204080060E7D840E>44 D<7FF0FFE07FE00C037D8A10 +>I<70F8F8F0E005057B840E>I<00000200000006000000060000000E0000001E0000001E +0000003F0000002F0000004F0000004F0000008F0000010F0000010F0000020F0000020F +0000040F00000C0F0000080F0000100F0000100F0000200F80003FFF800040078000C007 +800080078001000780010007800200078002000780060007801E000F80FF807FF81D207E +9F22>65 D<0000FE0200078186001C004C0038003C0060003C00C0001C01C00018038000 +18070000180F0000181E0000101E0000103C0000003C0000007800000078000000780000 +0078000000F0000000F0000000F0000000F0000000F00000807000008070000080700001 +003800010038000200180004000C001800060020000381C00000FE00001F217A9F21>67 +D<01FFFFFC001E0038001E0018001E0008001E0008003C0008003C0008003C0008003C00 +080078001000780800007808000078080000F0100000F0300000FFF00000F0300001E020 +0001E0200001E0200001E0200003C0000003C0000003C0000003C0000007800000078000 +0007800000078000000F800000FFF800001E1F7D9E1E>70 D<01FFF0001F00001E00001E +00001E00003C00003C00003C00003C0000780000780000780000780000F00000F00000F0 +0000F00001E00001E00001E00001E00003C00003C00003C00003C0000780000780000780 +000780000F8000FFF800141F7D9E12>73 D<01FFF800001F0000001E0000001E0000001E +0000003C0000003C0000003C0000003C00000078000000780000007800000078000000F0 +000000F0000000F0000000F0000001E0000001E0000001E0000001E0008003C0010003C0 +010003C0030003C00200078006000780060007800C0007801C000F007800FFFFF800191F +7D9E1D>76 D<01FE00007FC0001E0000FC00001E0000F800001700017800001700017800 +00270002F00000270004F00000270004F00000270008F00000470009E00000470011E000 +00470021E00000470021E00000870043C00000838043C00000838083C00000838083C000 +0103810780000103820780000103820780000103840780000203840F00000203880F0000 +0203900F00000203900F00000401E01E00000401E01E00000401C01E00000C01801E0000 +1C01803E0000FF8103FFC0002A1F7D9E29>I<01FFFF80001E00E0001E0070001E003800 +1E003C003C003C003C003C003C003C003C003C0078007800780078007800F0007800E000 +F003C000F00F0000FFFC0000F0000001E0000001E0000001E0000001E0000003C0000003 +C0000003C0000003C00000078000000780000007800000078000000F800000FFF000001E +1F7D9E1F>80 D<01FFFF00001E03C0001E00E0001E0070001E0078003C0078003C007800 +3C0078003C0078007800F0007800F0007801E0007801C000F0070000F01E0000FFF00000 +F0380001E01C0001E01E0001E00E0001E00F0003C01E0003C01E0003C01E0003C01E0007 +803C0007803C0807803C0807803C100F801C10FFF00C20000007C01D207D9E21>82 +D<0007E040001C18C0003005800060038000C0038001C001800180010003800100038001 +00038001000380000003C0000003C0000003F8000001FF800001FFE000007FF000001FF0 +000001F80000007800000078000000380000003800200038002000380020003000600070 +00600060006000E0007000C000E8038000C606000081F800001A217D9F1A>I<00F18003 +89C00707800E03801C03803C0380380700780700780700780700F00E00F00E00F00E00F0 +0E20F01C40F01C40703C40705C40308C800F070013147C9317>97 +D<07803F8007000700070007000E000E000E000E001C001C001CF01D0C3A0E3C0E380F38 +0F700F700F700F700FE01EE01EE01EE01CE03CE038607060E031C01F0010207B9F15>I< +007E0001C1000300800E07801E07801C07003C0200780000780000780000F00000F00000 +F00000F00000F0000070010070020030040018380007C00011147C9315>I<0000780003 +F80000700000700000700000700000E00000E00000E00000E00001C00001C000F1C00389 +C00707800E03801C03803C0380380700780700780700780700F00E00F00E00F00E00F00E +20F01C40F01C40703C40705C40308C800F070015207C9F17>I<007C01C207010E011C01 +3C013802780C7BF07C00F000F000F000F0007000700170023804183807C010147C9315> +I<00007800019C00033C00033C000718000700000700000E00000E00000E00000E00000E +0001FFE0001C00001C00001C00001C000038000038000038000038000038000070000070 +0000700000700000700000700000E00000E00000E00000E00000C00001C00001C0000180 +003180007B0000F300006600003C00001629829F0E>I<003C6000E27001C1E00380E007 +00E00F00E00E01C01E01C01E01C01E01C03C03803C03803C03803C03803C07003C07001C +0F001C17000C2E0003CE00000E00000E00001C00001C00301C00783800F0700060E0003F +8000141D7E9315>I<01E0000FE00001C00001C00001C00001C000038000038000038000 +038000070000070000071E000763000E81800F01C00E01C00E01C01C03801C03801C0380 +1C0380380700380700380700380E10700E20700C20701C20700C40E00CC060070014207D +9F17>I<00C001E001E001C000000000000000000000000000000E003300230043804300 +470087000E000E000E001C001C001C003840388030807080310033001C000B1F7C9E0E> +I<01E0000FE00001C00001C00001C00001C0000380000380000380000380000700000700 +000703C00704200E08E00E11E00E21E00E40C01C80001D00001E00001FC00038E0003870 +00387000383840707080707080707080703100E03100601E0013207D9F15>107 +D<03C01FC0038003800380038007000700070007000E000E000E000E001C001C001C001C +0038003800380038007000700070007100E200E200E200E200640038000A207C9F0C>I< +1C0F80F0002630C318004740640C004780680E004700700E004700700E008E00E01C000E +00E01C000E00E01C000E00E01C001C01C038001C01C038001C01C038001C01C070803803 +8071003803806100380380E10038038062007007006600300300380021147C9325>I<1C +0F802630C04740604780604700704700708E00E00E00E00E00E00E00E01C01C01C01C01C +01C01C03843803883803083807083803107003303001C016147C931A>I<007C0001C300 +0301800E01C01E01C01C01E03C01E07801E07801E07801E0F003C0F003C0F003C0F00780 +F00700700F00700E0030180018700007C00013147C9317>I<01C1E002621804741C0478 +1C04701E04701E08E01E00E01E00E01E00E01E01C03C01C03C01C03C01C0380380780380 +700380E003C1C0072380071E000700000700000E00000E00000E00000E00001C00001C00 +00FFC000171D809317>I<1C1E002661004783804787804707804703008E00000E00000E +00000E00001C00001C00001C00001C000038000038000038000038000070000030000011 +147C9313>114 D<00FC030206010C030C070C060C000F800FF007F803FC003E000E700E +F00CF00CE008401020601F8010147D9313>I<018001C0038003800380038007000700FF +F007000E000E000E000E001C001C001C001C003800380038003820704070407080708031 +001E000C1C7C9B0F>I<0E00C03300E02301C04381C04301C04701C08703800E03800E03 +800E03801C07001C07001C07001C07101C0E20180E20180E201C1E200C264007C3801414 +7C9318>I<0E00C1C03300E3C02301C3E04381C1E04301C0E04701C060870380400E0380 +400E0380400E0380401C0700801C0700801C0700801C0701001C0701001C0602001C0F02 +000C0F04000E13080003E1F0001B147C931E>119 D<0383800CC4401068E01071E02071 +E02070C040E00000E00000E00000E00001C00001C00001C00001C040638080F38080F381 +00E5810084C60078780013147D9315>I<0E00C03300E02301C04381C04301C04701C087 +03800E03800E03800E03801C07001C07001C07001C07001C0E00180E00180E001C1E000C +3C0007DC00001C00001C00003800F03800F07000E06000C0C0004380003E0000131D7C93 +16>I E /Fg 27 118 df<000FF000007FFC0001F80E0003E01F0007C03F000F803F000F +803F000F801E000F800C000F8000000F8000000F8000000F800000FFFFFF00FFFFFF000F +801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F +801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F007F +F0FFE07FF0FFE01B237FA21F>12 D45 +D<0003FE0080001FFF818000FF01E38001F8003F8003E0001F8007C0000F800F80000780 +1F800007803F000003803F000003807F000001807E000001807E00000180FE00000000FE +00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000000007E00 +0000007E000001807F000001803F000001803F000003801F800003000F8000030007C000 +060003F0000C0001F800380000FF00F000001FFFC0000003FE000021227DA128>67 +DI72 +DI77 +D<01FC0407FF8C1F03FC3C007C7C003C78001C78001CF8000CF8000CFC000CFC0000FF00 +00FFE0007FFF007FFFC03FFFF01FFFF80FFFFC03FFFE003FFE0003FF00007F00003F0000 +3FC0001FC0001FC0001FE0001EE0001EF0003CFC003CFF00F8C7FFE080FF8018227DA11F +>83 D<7FFFFFFF807FFFFFFF807E03F80F807803F807807003F803806003F80180E003F8 +01C0E003F801C0C003F800C0C003F800C0C003F800C0C003F800C00003F800000003F800 +000003F800000003F800000003F800000003F800000003F800000003F800000003F80000 +0003F800000003F800000003F800000003F800000003F800000003F800000003F8000000 +03F800000003F800000003F800000003F8000003FFFFF80003FFFFF80022227EA127>I< +07FC001FFF803F07C03F03E03F01E03F01F01E01F00001F00001F0003FF003FDF01FC1F0 +3F01F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF87F07E03F18167E951B> +97 D<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000FC0000FC0000FC0000 +FC0000FC0000FC00007C00007E00007E00003E00301F00600FC0E007FF8000FE0014167E +9519>99 D<0001FE000001FE0000003E0000003E0000003E0000003E0000003E0000003E +0000003E0000003E0000003E0000003E0000003E0001FC3E0007FFBE000F81FE001F007E +003E003E007E003E007C003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E +00FC003E00FC003E007C003E007C003E003E007E001E00FE000F83BE0007FF3FC001FC3F +C01A237EA21F>I<00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC00F8FC00F8FF +FFF8FFFFF8FC0000FC0000FC00007C00007C00007E00003E00181F00300FC07003FFC000 +FF0015167E951A>I<003F8000FFC001E3E003C7E007C7E00F87E00F83C00F80000F8000 +0F80000F80000F80000F8000FFFC00FFFC000F80000F80000F80000F80000F80000F8000 +0F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8000 +7FF8007FF80013237FA211>I<03FC1E0FFF7F1F0F8F3E07CF3C03C07C03E07C03E07C03 +E07C03E07C03E03C03C03E07C01F0F801FFF0013FC003000003000003800003FFF801FFF +F00FFFF81FFFFC3800FC70003EF0001EF0001EF0001EF0001E78003C7C007C3F01F80FFF +E001FF0018217E951C>II<1C003E007F007F007F003E001C000000000000000000 +000000000000FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F00 +1F001F001F001F001F00FFE0FFE00B247EA310>I107 DIII<00FE0007FFC00F83E01E00F03E00F87C007C7C007C7C00 +7CFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C3E00F81F01F00F83 +E007FFC000FE0017167E951C>II114 D<0FF3003FFF00781F00600700E00300E00300F00300FC00007FE0007F +F8003FFE000FFF0001FF00000F80C00780C00380E00380E00380F00700FC0E00EFFC00C7 +F00011167E9516>I<0180000180000180000180000380000380000780000780000F8000 +3F8000FFFF00FFFF000F80000F80000F80000F80000F80000F80000F80000F80000F8000 +0F80000F80000F81800F81800F81800F81800F81800F830007C30003FE0000F80011207F +9F16>II +E /Fh 81 125 df<001F83E000F06E3001C078780380F8780300F0300700700007007000 +0700700007007000070070000700700007007000FFFFFF80070070000700700007007000 +070070000700700007007000070070000700700007007000070070000700700007007000 +0700700007007000070070000700700007007000070070007FE3FF001D20809F1B>11 +D<003F0000E0C001C0C00381E00701E00701E00700000700000700000700000700000700 +00FFFFE00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700 +E00700E00700E00700E00700E00700E00700E00700E07FC3FE1720809F19>I<003FE000 +E0E001C1E00381E00700E00700E00700E00700E00700E00700E00700E00700E0FFFFE007 +00E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E007 +00E00700E00700E00700E00700E00700E07FE7FE1720809F19>I<001F81F80000F04F04 +0001C07C06000380F80F000300F00F000700F00F00070070000007007000000700700000 +070070000007007000000700700000FFFFFFFF0007007007000700700700070070070007 +007007000700700700070070070007007007000700700700070070070007007007000700 +700700070070070007007007000700700700070070070007007007000700700700070070 +07007FE3FE3FF02420809F26>I<7038F87CFC7EFC7E743A040204020402080408041008 +1008201040200F0E7E9F17>34 D<70F8FCFC74040404080810102040060E7C9F0D>39 +D<0020004000800100020006000C000C00180018003000300030007000600060006000E0 +00E000E000E000E000E000E000E000E000E000E000E00060006000600070003000300030 +00180018000C000C000600020001000080004000200B2E7DA112>I<8000400020001000 +08000C00060006000300030001800180018001C000C000C000C000E000E000E000E000E0 +00E000E000E000E000E000E000E000C000C000C001C00180018001800300030006000600 +0C00080010002000400080000B2E7DA112>I<70F8FCFC74040404080810102040060E7C +840D>44 DI<70F8F8F87005057C840D>I<000100030003000600 +060006000C000C000C00180018001800300030003000600060006000C000C000C0018001 +8001800300030003000600060006000C000C000C00180018001800300030003000600060 +006000C000C000C000102D7DA117>I<03F0000E1C001C0E001806003807007003807003 +80700380700380F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003 +C0F003C0F003C0F003C07003807003807003807807803807001806001C0E000E1C0003F0 +00121F7E9D17>I<018003800F80F3800380038003800380038003800380038003800380 +0380038003800380038003800380038003800380038003800380038007C0FFFE0F1E7C9D +17>I<03F0000C1C00100E00200700400780800780F007C0F803C0F803C0F803C02007C0 +0007C0000780000780000F00000E00001C0000380000700000600000C000018000030000 +0600400C00401800401000803FFF807FFF80FFFF80121E7E9D17>I<03F0000C1C00100E +00200F00780F80780780780780380F80000F80000F00000F00000E00001C0000380003F0 +00003C00000E00000F000007800007800007C02007C0F807C0F807C0F807C0F007804007 +80400F00200E001C3C0003F000121F7E9D17>I<000600000600000E00000E00001E0000 +2E00002E00004E00008E00008E00010E00020E00020E00040E00080E00080E00100E0020 +0E00200E00400E00C00E00FFFFF0000E00000E00000E00000E00000E00000E00000E0000 +FFE0141E7F9D17>I<1803001FFE001FFC001FF8001FE000100000100000100000100000 +10000010000011F000161C00180E001007001007800003800003800003C00003C00003C0 +7003C0F003C0F003C0E00380400380400700200600100E000C380003E000121F7E9D17> +I<007C000182000701000E03800C07801C0780380300380000780000700000700000F1F0 +00F21C00F40600F80700F80380F80380F003C0F003C0F003C0F003C0F003C07003C07003 +C07003803803803807001807000C0E00061C0001F000121F7E9D17>I<4000007FFFC07F +FF807FFF8040010080020080020080040000080000080000100000200000200000400000 +400000C00000C00001C00001800003800003800003800003800007800007800007800007 +8000078000078000078000030000121F7D9D17>I<03F0000C0C00100600300300200180 +6001806001806001807001807803003E03003F06001FC8000FF00003F80007FC000C7E00 +103F00300F806003804001C0C001C0C000C0C000C0C000C0C00080600180200100100200 +0C0C0003F000121F7E9D17>I<03F0000E18001C0C00380600380700700700700380F003 +80F00380F003C0F003C0F003C0F003C0F003C07007C07007C03807C0180BC00E13C003E3 +C0000380000380000380000700300700780600780E00700C002018001070000FC000121F +7E9D17>I<70F8F8F8700000000000000000000070F8F8F87005147C930D>I<70F8F8F870 +0000000000000000000070F0F8F878080808101010202040051D7C930D>I<7FFFFFE0FF +FFFFF00000000000000000000000000000000000000000000000000000000000000000FF +FFFFF07FFFFFE01C0C7D9023>61 D<000100000003800000038000000380000007C00000 +07C0000007C0000009E0000009E0000009E0000010F0000010F0000010F0000020780000 +2078000020780000403C0000403C0000403C0000801E0000801E0000FFFE0001000F0001 +000F0001000F00020007800200078002000780040003C00E0003C01F0007E0FFC03FFE1F +207F9F22>65 DI<000FC0400070 +30C001C009C0038005C0070003C00E0001C01E0000C01C0000C03C0000C07C0000407C00 +004078000040F8000000F8000000F8000000F8000000F8000000F8000000F8000000F800 +0000F8000000780000007C0000407C0000403C0000401C0000401E0000800E0000800700 +01000380020001C0040000703800000FC0001A217D9F21>IIII<000FE0200078186000E004E00380 +02E0070001E00F0000E01E0000601E0000603C0000603C0000207C00002078000020F800 +0000F8000000F8000000F8000000F8000000F8000000F8000000F8007FFCF80003E07800 +01E07C0001E03C0001E03C0001E01E0001E01E0001E00F0001E0070001E0038002E000E0 +046000781820000FE0001E217D9F24>II +I<0FFFC0007C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C +00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00203C +00F83C00F83C00F83C00F0380040780040700030E0000F800012207E9E17>IIIII<001F800000F0F00001C0380007801E000F000F00 +0E0007001E0007803C0003C03C0003C07C0003E0780001E0780001E0F80001F0F80001F0 +F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0780001E07C0003E0 +7C0003E03C0003C03C0003C01E0007800E0007000F000F0007801E0001C0380000F0F000 +001F80001C217D9F23>II<001F +800000F0F00001C0380007801E000F000F000E0007001E0007803C0003C03C0003C07C00 +03E07C0003E0780001E0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F800 +01F0F80001F0F80001F0780001E0780001E07C0003E03C0003C03C0F03C01E1087800E20 +C7000F20CF0007A0FE0001E0F80000F0F010001FF0100000701000007830000038700000 +3FF000003FE000001FE000000FC0000007801C297D9F23>II<07E0800C1980100780300380600180600180E001 +80E00080E00080E00080F00000F000007800007F00003FF0001FFC000FFE0003FF00001F +800007800003C00003C00001C08001C08001C08001C08001C0C00180C00380E00300F006 +00CE0C0081F80012217D9F19>I<7FFFFFE0780F01E0600F0060400F0020400F0020C00F +0030800F0010800F0010800F0010800F0010000F0000000F0000000F0000000F0000000F +0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F +0000000F0000000F0000000F0000000F0000000F0000001F800007FFFE001C1F7E9E21> +IIII<7FF83FF80FE00FC007C0070003C0020001E0040001F00C0000F0080000781000007C +1000003C2000003E4000001E4000000F8000000F8000000780000003C0000007E0000005 +E0000009F0000018F8000010780000207C0000603C0000401E0000801F0001800F000100 +0780020007C0070003C01F8007E0FFE01FFE1F1F7F9E22>II91 +D<080410082010201040204020804080408040B85CFC7EFC7E7C3E381C0F0E7B9F17>I< +FEFE06060606060606060606060606060606060606060606060606060606060606060606 +06060606060606FEFE072D7FA10D>I<1FE000303000781800781C00300E00000E00000E +00000E0000FE00078E001E0E00380E00780E00F00E10F00E10F00E10F01E10781E103867 +200F83C014147E9317>97 D<0E0000FE00000E00000E00000E00000E00000E00000E0000 +0E00000E00000E00000E00000E3E000EC3800F01C00F00E00E00E00E00700E00700E0078 +0E00780E00780E00780E00780E00780E00700E00700E00E00F00E00D01C00CC300083E00 +15207F9F19>I<03F80E0C1C1E381E380C70007000F000F000F000F000F000F000700070 +00380138011C020E0C03F010147E9314>I<000380003F80000380000380000380000380 +00038000038000038000038000038000038003E380061B801C0780380380380380700380 +700380F00380F00380F00380F00380F00380F003807003807003803803803807801C0780 +0E1B8003E3F815207E9F19>I<03F0000E1C001C0E00380700380700700700700380F003 +80F00380FFFF80F00000F00000F000007000007000003800801800800C010007060001F8 +0011147F9314>I<007C00C6018F038F07060700070007000700070007000700FFF00700 +070007000700070007000700070007000700070007000700070007000700070007007FF0 +1020809F0E>I<0000E003E3300E3C301C1C30380E00780F00780F00780F00780F00780F +00380E001C1C001E380033E0002000002000003000003000003FFE001FFF800FFFC03001 +E0600070C00030C00030C00030C000306000603000C01C038003FC00141F7F9417>I<0E +0000FE00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E +3E000E43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E +01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC16207F9F19>I<1C003E003E00 +3E001C000000000000000000000000000E007E000E000E000E000E000E000E000E000E00 +0E000E000E000E000E000E000E000E000E00FFC00A1F809E0C>I<00E001F001F001F000 +E0000000000000000000000000007007F000F00070007000700070007000700070007000 +700070007000700070007000700070007000700070007000706070F060F0C061803F000C +28829E0E>I<0E0000FE00000E00000E00000E00000E00000E00000E00000E00000E0000 +0E00000E00000E0FF00E03C00E03000E02000E04000E08000E10000E30000E70000EF800 +0F38000E1C000E1E000E0E000E07000E07800E03800E03C00E03E0FFCFF815207F9F18> +I<0E00FE000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E +000E000E000E000E000E000E000E000E000E000E000E000E000E00FFE00B20809F0C>I< +0E1F01F000FE618618000E81C81C000F00F00E000F00F00E000E00E00E000E00E00E000E +00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00 +E00E000E00E00E000E00E00E000E00E00E000E00E00E00FFE7FE7FE023147F9326>I<0E +3E00FE43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E +01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC16147F9319>I<01F800070E00 +1C03803801C03801C07000E07000E0F000F0F000F0F000F0F000F0F000F0F000F07000E0 +7000E03801C03801C01C0380070E0001F80014147F9317>I<0E3E00FEC3800F01C00F00 +E00E00E00E00F00E00700E00780E00780E00780E00780E00780E00780E00700E00F00E00 +E00F01E00F01C00EC3000E3E000E00000E00000E00000E00000E00000E00000E00000E00 +00FFE000151D7F9319>I<03E0800619801C05803C0780380380780380700380F00380F0 +0380F00380F00380F00380F003807003807803803803803807801C0B800E138003E38000 +0380000380000380000380000380000380000380000380003FF8151D7E9318>I<0E78FE +8C0F1E0F1E0F0C0E000E000E000E000E000E000E000E000E000E000E000E000E000E00FF +E00F147F9312>I<1F9030704030C010C010C010E00078007F803FE00FF0007080388018 +8018C018C018E030D0608F800D147E9312>I<020002000200060006000E000E003E00FF +F80E000E000E000E000E000E000E000E000E000E000E000E080E080E080E080E08061003 +1001E00D1C7F9B12>I<0E01C0FE1FC00E01C00E01C00E01C00E01C00E01C00E01C00E01 +C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E03C00603C0030DC001F1FC1614 +7F9319>II< +FF9FE1FC3C0780701C0300601C0380200E0380400E0380400E03C0400707C0800704C080 +0704E080038861000388710003C8730001D0320001D03A0000F03C0000E01C0000E01C00 +00601800004008001E147F9321>I<7FC3FC0F01E00701C007018003810001C20000E400 +00EC00007800003800003C00007C00004E000087000107000303800201C00601E01E01E0 +FF07FE1714809318>II<3FFF380E +200E201C40384078407000E001E001C00380078007010E011E011C0338027006700EFFFE +10147F9314>III +E /Fi 18 122 df<000003800000000007C00000000007C0000000000FE0000000000FE0 +000000000FE0000000001FF0000000001FF0000000003FF8000000003FF8000000003FF8 +0000000073FC0000000073FC00000000F3FE00000000E1FE00000000E1FE00000001C0FF +00000001C0FF00000003C0FF80000003807F80000007807FC0000007003FC0000007003F +C000000E003FE000000E001FE000001E001FF000001C000FF000001FFFFFF000003FFFFF +F800003FFFFFF80000780007FC0000700003FC0000700003FC0000E00001FE0000E00001 +FE0001E00001FF0001C00000FF0001C00000FF00FFFE001FFFFEFFFE001FFFFEFFFE001F +FFFE2F297EA834>65 D77 D82 D<007F806003FFF0E007FFF9E0 +0F807FE01F001FE03E0007E07C0003E07C0001E0FC0001E0FC0001E0FC0000E0FE0000E0 +FE0000E0FF000000FFC000007FFE00007FFFE0003FFFFC001FFFFE000FFFFF8007FFFFC0 +03FFFFE000FFFFE00007FFF000007FF000000FF8000007F8000003F8600001F8E00001F8 +E00001F8E00001F8F00001F0F00001F0F80003F0FC0003E0FF0007C0FFE01F80F3FFFF00 +E0FFFE00C01FF0001D297CA826>I<001FF80000FFFE0003F01F0007E03F800FC03F801F +803F803F801F007F800E007F0000007F000000FF000000FF000000FF000000FF000000FF +000000FF000000FF0000007F0000007F0000007F8000003F8001C01F8001C00FC0038007 +E0070003F01E0000FFFC00001FE0001A1B7E9A1F>99 D<00003FF80000003FF80000003F +F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8 +00000003F800000003F800000003F800000003F800000003F800001FE3F80000FFFBF800 +03F03FF80007E00FF8000FC007F8001F8003F8003F8003F8007F0003F8007F0003F8007F +0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF00 +03F8007F0003F8007F0003F8007F0003F8003F8003F8001F8003F8000F8007F80007C00F +F80003F03BFF8000FFF3FF80003FC3FF80212A7EA926>I<003FE00001FFF80003F07E00 +07C01F000F801F801F800F803F800FC07F000FC07F0007C07F0007E0FF0007E0FF0007E0 +FFFFFFE0FFFFFFE0FF000000FF000000FF0000007F0000007F0000007F0000003F8000E0 +1F8000E00FC001C007E0038003F81F0000FFFE00001FF0001B1B7E9A20>I<0007F0003F +FC00FE3E01F87F03F87F03F07F07F07F07F03E07F00007F00007F00007F00007F00007F0 +0007F000FFFFC0FFFFC0FFFFC007F00007F00007F00007F00007F00007F00007F00007F0 +0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0 +0007F0007FFF807FFF807FFF80182A7EA915>I104 D108 DII<003FE00001FFFC0003F07E000FC0 +1F801F800FC03F800FE03F0007E07F0007F07F0007F07F0007F0FF0007F8FF0007F8FF00 +07F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F87F0007F07F0007F03F800FE03F80 +0FE01F800FC00FC01F8007F07F0001FFFC00003FE0001D1B7E9A22>I114 D<03FE300FFFF01E03F03800F0700070F00070F00070F80070FC +0000FFE0007FFE007FFF803FFFE01FFFF007FFF800FFF80003FC0000FC60007CE0003CF0 +003CF00038F80038FC0070FF01E0F7FFC0C1FF00161B7E9A1B>I<007000007000007000 +00700000F00000F00000F00001F00003F00003F00007F0001FFFF0FFFFF0FFFFF007F000 +07F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F000 +07F03807F03807F03807F03807F03807F03803F03803F87001F86000FFC0001F8015267F +A51B>II121 D E +end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 300dpi +TeXDict begin + +%%EndSetup +%%Page: 1 1 +1 0 bop 424 311 a Fi(Another)23 b(Mo)r(dule)f(System)g(for)i(Sc)n(heme) +825 407 y Fh(Jonathan)16 b(Rees)542 463 y(3)f(Jan)o(uary)g(1993)f(\(up) +q(dated)i(15)e(Jan)o(uary)h(1994\))295 614 y(This)e(memo)g(describ)q +(es)h(a)f(mo)q(dule)h(system)e(for)g(the)h(Sc)o(heme)h(programming)e +(lan-)224 670 y(guage.)19 b(The)13 b(mo)q(dule)h(system)e(is)h(unique)i +(in)e(the)g(exten)o(t)g(to)f(whic)o(h)i(it)f(supp)q(orts)f(b)q(oth)224 +727 y(static)k(linking)i(and)f(rapid)g(turnaround)f(during)h(program)e +(dev)o(elopmen)o(t.)24 b(The)16 b(de-)224 783 y(sign)g(w)o(as)e +(in\015uenced)k(b)o(y)d(Standard)h(ML)f(mo)q(dules[4])g(and)h(b)o(y)f +(the)g(mo)q(dule)i(system)224 840 y(for)h(Sc)o(heme)g(Xero)o(x[3)o(].) +29 b(It)18 b(has)g(also)g(b)q(een)h(shap)q(ed)g(b)o(y)f(the)g(needs)h +(of)f(Sc)o(heme)g(48,)224 896 y(a)i(virtual-mac)o(hine-based)i(Sc)o +(heme)f(implemen)o(tation)g(designed)g(to)e(run)i(b)q(oth)f(on)224 +953 y(w)o(orkstations)g(and)h(on)f(relativ)o(ely)i(small)g(\(less)f +(than)g(1)f(Mb)o(yte\))g(em)o(b)q(edded)i(con-)224 1009 +y(trollers.)295 1065 y(Except)10 b(where)g(noted,)h(ev)o(erything)g +(describ)q(ed)h(here)f(is)f(implemen)o(ted)i(in)f(Sc)o(heme)g(48,)224 +1122 y(and)k(exercised)i(b)o(y)e(the)g(Sc)o(heme)h(48)e(implemen)o +(tation)j(and)e(a)g(few)g(application)i(pro-)224 1178 +y(grams.)295 1235 y(Unlik)o(e)g(the)e(Common)f(Lisp)j(pac)o(k)m(age)e +(system,)g(the)g(mo)q(dule)i(system)e(describ)q(ed)224 +1291 y(here)22 b(con)o(trols)g(the)f(mapping)i(of)e(names)h(to)f +(denotations,)i(not)e(the)h(mapping)g(of)224 1348 y(strings)15 +b(to)g(sym)o(b)q(ols.)224 1468 y Fg(In)n(tro)r(duction)224 +1553 y Fh(The)h(mo)q(dule)h(system)e(supp)q(orts)g(the)h(structured)f +(division)j(of)d(a)g(corpus)h(of)f(Sc)o(heme)224 1610 +y(soft)o(w)o(are)10 b(in)o(to)i(a)g(set)f(of)h(mo)q(dules.)20 +b(Eac)o(h)12 b(mo)q(dule)h(has)e(its)h(o)o(wn)g(isolated)h(namespace,) +224 1666 y(with)21 b(visibilit)o(y)i(of)d(bindings)i(con)o(trolled)f(b) +o(y)f(mo)q(dule)i(descriptions)f(written)g(in)g(a)224 +1723 y(sp)q(ecial)c Ff(c)n(on\014gur)n(ation)f(language.)295 +1779 y Fh(A)i(mo)q(dule)h(ma)o(y)e(b)q(e)i(instan)o(tiated)f(m)o +(ultiple)i(times,)e(pro)q(ducing)h(sev)o(eral)f Ff(p)n(ack-)224 +1836 y(ages)p Fh(,)c(just)f(as)h(a)f(lam)o(b)q(da-expression)j(can)e(b) +q(e)g(instan)o(tiated)g(m)o(ultiple)i(times)e(to)g(pro-)224 +1892 y(duce)20 b(sev)o(eral)e(di\013eren)o(t)h(pro)q(cedures.)31 +b(Since)21 b(single)f(instan)o(tiation)f(is)g(the)g(normal)224 +1949 y(case,)12 b(I)g(will)h(defer)f(discussion)h(of)e(m)o(ultiple)j +(instan)o(tiation)e(un)o(til)g(a)f(later)h(section.)19 +b(F)l(or)224 2005 y(no)o(w)c(y)o(ou)h(can)g(think)g(of)g(a)f(pac)o(k)m +(age)h(as)f(simply)j(a)d(mo)q(dule's)i(in)o(ternal)f(en)o(vironmen)o(t) +224 2061 y(mapping)g(names)f(to)g(denotations.)295 2118 +y(A)d(mo)q(dule)h(exp)q(orts)f(bindings)i(b)o(y)e(pro)o(viding)h(views) +g(on)o(to)e(the)h(underlying)i(pac)o(k-)224 2174 y(age.)19 +b(Suc)o(h)13 b(a)f(view)h(is)h(called)g(a)e Ff(structur)n(e)h +Fh(\(terminology)f(from)g(Standard)h(ML\).)f(One)224 +2231 y(mo)q(dule)17 b(ma)o(y)f(pro)o(vide)g(sev)o(eral)g(di\013eren)o +(t)g(views.)23 b(A)16 b(structure)g(is)g(just)g(a)g(subset)g(of)224 +2287 y(the)22 b(pac)o(k)m(age's)f(bindings.)40 b(The)22 +b(particular)g(set)f(of)g(names)g(whose)h(bindings)h(are)224 +2344 y(exp)q(orted)16 b(is)f(the)h(structure's)e Ff(interfac)n(e)p +Fh(.)295 2400 y(A)21 b(mo)q(dule)h(imp)q(orts)g(bindings)h(from)d +(other)h(mo)q(dules)i(b)o(y)e(either)h Ff(op)n(ening)e +Fh(or)224 2457 y Ff(ac)n(c)n(essing)9 b Fh(some)h(structures)h(that)f +(are)g(built)i(on)f(other)f(pac)o(k)m(ages.)18 b(When)11 +b(a)g(structure)960 2581 y(1)p eop +%%Page: 2 2 +2 1 bop 224 311 a Fh(is)11 b(op)q(ened,)h(all)f(of)f(its)g(exp)q(orted) +h(bindings)h(are)e(visible)i(in)g(the)e(clien)o(t)h(pac)o(k)m(age.)19 +b(On)10 b(the)224 368 y(other)15 b(hand,)h(bindings)i(from)d(an)g +(accessed)h(structure)g(require)g(explicitly)j(quali\014ed)224 +424 y(references)d(written)f(with)h(the)f Fe(structure-ref)e +Fh(op)q(erator.)295 481 y(F)l(or)h(example:)320 557 y +Fe(\(define-structure)21 b(foo)j(\(export)f(a)g(c)h(cons\))367 +613 y(\(open)g(scheme\))367 670 y(\(begin)f(\(define)g(a)h(1\))534 +726 y(\(define)f(\(b)h(x\))f(\(+)h(a)g(x\)\))534 782 +y(\(define)f(\(c)h(y\))f(\(*)h(\(b)g(a\))f(y\)\)\)\))320 +878 y(\(define-structure)e(bar)j(\(export)f(d\))367 935 +y(\(open)h(scheme)f(foo\))367 991 y(\(begin)g(\(define)g(\(d)h(w\))f +(\(+)h(a)g(\(c)f(w\)\)\)\)\))224 1067 y Fh(This)d(con\014guration)f +(de\014nes)h(t)o(w)o(o)d(structures,)i Fe(foo)f Fh(and)i +Fe(bar)p Fh(.)30 b Fe(foo)18 b Fh(is)i(a)e(view)i(on)224 +1123 y(a)c(pac)o(k)m(age)h(in)g(whic)o(h)h(the)f Fe(scheme)e +Fh(structure's)h(bindings)j(\(including)g Fe(define)c +Fh(and)224 1180 y Fe(+)p Fh(\))21 b(are)g(visible,)j(together)c(with)i +(bindings)h(for)d Fe(a)p Fh(,)i Fe(b)p Fh(,)h(and)e Fe(c)p +Fh(.)37 b Fe(foo)p Fh('s)21 b(in)o(terface)g(is)224 1236 +y Fe(\(export)i(a)h(c)g(cons\))p Fh(,)13 b(so)i(of)f(the)h(bindings)i +(in)f(its)f(underlying)i(pac)o(k)m(age,)d Fe(foo)h Fh(only)224 +1293 y(exp)q(orts)20 b(those)f(three.)33 b(Similarly)l(,)23 +b(structure)c Fe(bar)g Fh(consists)h(of)f(the)h(binding)i(of)d +Fe(d)224 1349 y Fh(from)13 b(a)f(pac)o(k)m(age)i(in)f(whic)o(h)h(b)q +(oth)g Fe(scheme)p Fh('s)e(and)h Fe(foo)p Fh('s)f(bindings)j(are)e +(visible.)21 b Fe(foo)p Fh('s)224 1406 y(binding)13 b(of)d +Fe(cons)g Fh(is)h(imp)q(orted)h(from)e(the)h(Sc)o(heme)g(structure)f +(and)h(then)g(re-exp)q(orted.)295 1462 y(A)22 b(mo)q(dule's)g(b)q(o)q +(dy)l(,)i(the)e(part)f(follo)o(wing)h Fe(begin)f Fh(in)i(the)f(ab)q(o)o +(v)o(e)f(example,)j(is)224 1519 y(ev)m(aluated)c(in)g(an)f(isolated)h +(lexical)h(scop)q(e)e(completely)h(sp)q(eci\014ed)i(b)o(y)c(the)i(pac)o +(k)m(age)224 1575 y(de\014nition's)d Fe(open)d Fh(and)i +Fe(access)e Fh(clauses.)21 b(In)16 b(particular,)g(the)f(binding)i(of)e +(the)g(syn-)224 1631 y(tactic)h(op)q(erator)e Fe(define-structure)f +Fh(is)j(not)f(visible)i(unless)g(it)e(comes)g(from)g(some)224 +1688 y(op)q(ened)i(structure.)j(Similarly)l(,)d(bindings)g(from)e(the)h +Fe(scheme)e Fh(structure)h(aren't)g(vis-)224 1744 y(ible)22 +b(unless)g(they)f(b)q(ecome)g(so)f(b)o(y)h Fe(scheme)f +Fh(\(or)f(an)i(equiv)m(alen)o(t)h(structure\))e(b)q(eing)224 +1801 y(op)q(ened.)224 1919 y Fg(The)f(con\014guration)f(language)224 +2005 y Fh(The)e(con\014guration)g(language)f(consists)h(of)f(top-lev)o +(el)i(de\014ning)g(forms)e(for)f(mo)q(dules)224 2061 +y(and)i(in)o(terfaces.)k(Its)15 b(syn)o(tax)f(is)i(giv)o(en)g(in)g +(\014gure)f(1.)295 2118 y(A)c Fe(define-structure)d Fh(form)i(in)o(tro) +q(duces)i(a)e(binding)j(of)d(a)h(name)g(to)f(a)g(structure.)224 +2174 y(A)i(structure)g(is)h(a)f(view)g(on)g(an)h(underlying)h(pac)o(k)m +(age)e(whic)o(h)h(is)f(created)h(according)f(to)224 2231 +y(the)i(clauses)h(of)f(the)g Fe(define-structure)e Fh(form.)19 +b(Eac)o(h)14 b(structure)g(has)g(an)g(in)o(terface)224 +2287 y(that)j(sp)q(eci\014es)j(whic)o(h)e(bindings)i(in)f(the)e +(structure's)h(underlying)h(pac)o(k)m(age)f(can)g(b)q(e)224 +2344 y(seen)e(via)f(that)g(structure)g(in)h(other)f(pac)o(k)m(ages.)295 +2400 y(An)c Fe(open)g Fh(clause)i(sp)q(eci\014es)g(whic)o(h)f +(structures)f(will)i(b)q(e)g(op)q(ened)f(up)g(for)f(use)h(inside)224 +2457 y(the)18 b(new)f(pac)o(k)m(age.)26 b(A)o(t)17 b(least)g(one)h(pac) +o(k)m(age)f(m)o(ust)g(b)q(e)h(sp)q(eci\014ed)h(or)e(else)h(it)g(will)h +(b)q(e)960 2581 y(2)p eop +%%Page: 3 3 +3 2 bop 224 355 a Fd(h)p Fh(con\014guration)p Fd(i)15 +b(\000)-7 b(!)15 b(h)p Fh(de\014nition)p Fd(i)845 339 +y Fc(\003)224 411 y Fd(h)p Fh(de\014nition)p Fd(i)i(\000)-8 +b(!)31 b Fe(\(define-structure)22 b Fd(h)p Fh(name)p +Fd(i)h(h)p Fh(in)o(terface)p Fd(i)g(h)p Fh(clause)p Fd(i)1543 +395 y Fc(\003)1562 411 y Fe(\))522 468 y Fd(j)30 b Fe +(\(define-structures)21 b(\(\()p Fd(h)p Fh(name)p Fd(i)i(h)p +Fh(in)o(terface)p Fd(i)p Fe(\))1460 451 y Fc(\003)1480 +468 y Fe(\))g Fd(h)p Fh(clause)p Fd(i)1682 451 y Fc(\003)1701 +468 y Fe(\))522 524 y Fd(j)30 b Fe(\(define-interface)22 +b Fd(h)p Fh(name)p Fd(i)h(h)p Fh(in)o(terface)p Fd(i)p +Fe(\))522 581 y Fd(j)30 b Fe(\(define-syntax)22 b Fd(h)p +Fh(name)p Fd(i)h(h)p Fh(transformer-sp)q(ec)p Fd(i)o +Fe(\))224 637 y Fd(h)p Fh(clause)p Fd(i)16 b(\000)-8 +b(!)31 b Fe(\(open)23 b Fd(h)p Fh(name)p Fd(i)782 621 +y Fc(\003)801 637 y Fe(\))454 694 y Fd(j)30 b Fe(\(access)23 +b Fd(h)p Fh(name)p Fd(i)829 677 y Fc(\003)849 694 y Fe(\))454 +750 y Fd(j)30 b Fe(\(begin)23 b Fd(h)p Fh(program)p Fd(i)n +Fe(\))454 807 y Fd(j)30 b Fe(\(files)23 b Fd(h)p Fh(\014lesp)q(ec)p +Fd(i)842 790 y Fc(\003)862 807 y Fe(\))454 863 y Fd(j)30 +b Fe(\(optimize)23 b Fd(h)p Fh(optimize-sp)q(ec)p Fd(i)1040 +847 y Fc(\003)1060 863 y Fe(\))454 920 y Fd(j)30 b Fe(\(for-syntax)23 +b Fd(h)p Fh(clause)p Fd(i)938 903 y Fc(\003)958 920 y +Fe(\))224 976 y Fd(h)p Fh(in)o(terface)p Fd(i)15 b(\000)-7 +b(!)31 b Fe(\(export)22 b Fd(h)p Fh(item)p Fd(i)862 960 +y Fc(\003)882 976 y Fe(\))505 1032 y Fd(j)30 b(h)p Fh(name)p +Fd(i)505 1089 y(j)g Fe(\(compound-interface)21 b Fd(h)p +Fh(in)o(terface)p Fd(i)1229 1072 y Fc(\003)1249 1089 +y Fe(\))224 1145 y Fd(h)p Fh(item)p Fd(i)15 b(\000)-7 +b(!)31 b(h)p Fh(name)p Fd(i)e(j)h Fe(\()p Fd(h)p Fh(name)p +Fd(i)23 b(h)p Fh(t)o(yp)q(e)p Fd(i)p Fe(\))h Fd(j)47 +b Fe(\(\()p Fd(h)p Fh(name)p Fd(i)1290 1129 y Fc(\003)1310 +1145 y Fe(\))24 b Fd(h)p Fh(t)o(yp)q(e)p Fd(i)o Fe(\))594 +1293 y Fh(Figure)15 b(1:)20 b(The)15 b(con\014guration)h(language.)224 +1428 y(imp)q(ossible)k(to)e(write)g(an)o(y)f(useful)j(programs)c +(inside)k(the)e(pac)o(k)m(age,)h(since)g Fe(define)p +Fh(,)224 1485 y Fe(lambda)p Fh(,)12 b Fe(cons)p Fh(,)h +Fe(structure-ref)p Fh(,)e(etc.)h(will)j(b)q(e)e(una)o(v)m(ailable.)22 +b(T)o(ypical)13 b(pac)o(k)m(ages)g(to)224 1541 y(list)h(in)g(the)f +Fe(open)f Fh(clause)i(are)e Fe(scheme)p Fh(,)g(whic)o(h)i(exp)q(orts)f +(all)h(bindings)g(appropriate)f(to)224 1598 y(Revised)376 +1581 y Fb(5)413 1598 y Fh(Sc)o(heme,)i(and)g Fe(structure-refs)p +Fh(,)e(whic)o(h)j(exp)q(orts)f(the)g Fe(structure-ref)224 +1654 y Fh(op)q(erator)h(\(see)g(b)q(elo)o(w\).)25 b(F)l(or)16 +b(building)j(structures)d(that)g(exp)q(ort)g(structures,)g(there)224 +1711 y(is)22 b(a)e Fe(defpackage)g Fh(pac)o(k)m(age)h(that)f(exp)q +(orts)h(the)g(op)q(erators)f(of)g(the)h(con\014guration)224 +1767 y(language.)29 b(Man)o(y)17 b(other)g(structures,)h(suc)o(h)h(as)e +(record)h(and)g(hash)g(table)h(facilities,)224 1823 y(are)c(also)g(a)o +(v)m(ailable)i(in)f(the)f(Sc)o(heme)h(48)f(implemen)o(tation.)295 +1880 y(An)e Fe(access)f Fh(clause)i(sp)q(eci\014es)h(whic)o(h)f +(bindings)h(of)e(names)g(to)f(structures)h(will)i(b)q(e)224 +1936 y(visible)e(inside)f(the)e(pac)o(k)m(age)h(b)q(o)q(dy)g(for)e(use) +i(in)g Fe(structure-ref)d Fh(forms.)18 b Fe(structure-)224 +1993 y(ref)d Fh(has)g(the)g(follo)o(wing)h(syn)o(tax:)315 +2084 y Fd(h)p Fh(expression)p Fd(i)f(\000)-7 b(!)31 b +Fe(\(structure-ref)22 b Fd(h)p Fh(struct-name)p Fd(i)h(h)p +Fh(name)p Fd(i)o Fe(\))224 2174 y Fh(The)14 b Fd(h)p +Fh(struct-name)p Fd(i)f Fh(m)o(ust)g(b)q(e)h(the)g(name)f(of)g(an)h +Fe(access)p Fh(ed)f(structure,)g(and)h Fd(h)p Fh(name)p +Fd(i)224 2231 y Fh(m)o(ust)20 b(b)q(e)i(something)f(that)f(the)h +(structure)f(exp)q(orts.)36 b(Only)22 b(structures)f(listed)h(in)224 +2287 y(an)17 b Fe(access)f Fh(clause)i(are)e(v)m(alid)j(in)f(a)e +Fe(structure-ref)p Fh(.)23 b(If)17 b(a)g(pac)o(k)m(age)g(accesses)g(an) +o(y)224 2344 y(structures,)g(it)g(should)h(probably)g(op)q(en)g(the)f +Fe(structure-refs)e Fh(structure)i(so)f(that)224 2400 +y(the)f Fe(structure-ref)f Fh(op)q(erator)g(itself)i(will)h(b)q(e)f(a)o +(v)m(ailable.)295 2457 y(The)g(pac)o(k)m(age's)g(b)q(o)q(dy)h(is)g(sp)q +(eci\014ed)i(b)o(y)d Fe(begin)g Fh(and/or)f Fe(files)h +Fh(clauses.)24 b Fe(begin)960 2581 y Fh(3)p eop +%%Page: 4 4 +4 3 bop 224 311 a Fh(and)15 b Fe(files)e Fh(ha)o(v)o(e)h(the)g(same)g +(seman)o(tics,)h(except)f(that)g(for)g Fe(begin)f Fh(the)h(text)g(is)h +(giv)o(en)224 368 y(directly)j(in)g(the)f(pac)o(k)m(age)g +(de\014nition,)i(while)g(for)d Fe(files)g Fh(the)h(text)g(is)g(stored)g +(some-)224 424 y(where)k(in)h(the)g(\014le)g(system.)37 +b(The)21 b(b)q(o)q(dy)h(consists)f(of)g(a)f(Sc)o(heme)i(program,)f +(that)224 481 y(is,)g(a)e(sequence)i(of)e(de\014nitions)i(and)e +(expressions)i(to)e(b)q(e)h(ev)m(aluated)g(in)g(order.)33 +b(In)224 537 y(practice,)14 b(I)h(alw)o(a)o(ys)e(use)h +Fe(files)f Fh(in)h(preference)h(to)e Fe(begin)p Fh(;)g +Fe(begin)g Fh(exists)h(mainly)h(for)224 594 y(exp)q(ository)g(purp)q +(oses.)295 650 y(A)g(name's)g(imp)q(orted)g(binding)j(ma)o(y)c(b)q(e)i +(lexically)i(o)o(v)o(erridden)d(or)g Ff(shadowe)n(d)h +Fh(b)o(y)224 707 y(simply)h(de\014ning)g(the)e(name)h(using)g(a)f +(de\014ning)i(form)d(suc)o(h)i(as)f Fe(define)g Fh(or)g +Fe(define-)224 763 y(syntax)p Fh(.)30 b(This)20 b(will)g(create)f(a)f +(new)i(binding)g(without)f(ha)o(ving)g(an)o(y)g(e\013ect)g(on)f(the)224 +819 y(binding)25 b(in)e(the)g(op)q(ened)h(pac)o(k)m(age.)43 +b(F)l(or)22 b(example,)j(one)e(can)f(do)h Fe(\(define)g(car)224 +876 y('chevy\))13 b Fh(without)h(a\013ecting)g(the)g(binding)h(of)f +(the)g(name)g Fe(car)f Fh(in)i(the)f Fe(scheme)e Fh(pac)o(k-)224 +932 y(age.)295 989 y(Assignmen)o(ts)17 b(\(using)h Fe(set!)p +Fh(\))e(to)h(imp)q(orted)h(and)f(unde\014ned)i(v)m(ariables)g(are)e +(not)224 1045 y(allo)o(w)o(ed.)22 b(In)17 b(order)f(to)f +Fe(set!)g Fh(a)h(top-lev)o(el)h(v)m(ariable,)g(the)f(pac)o(k)m(age)f(b) +q(o)q(dy)i(m)o(ust)e(con-)224 1102 y(tain)20 b(a)g Fe(define)f +Fh(form)g(de\014ning)i(that)e(v)m(ariable.)35 b(Applied)22 +b(to)e(bindings)h(from)e(the)224 1158 y Fe(scheme)12 +b Fh(structure,)h(this)g(restriction)g(is)h(compatible)g(with)f(the)g +(requiremen)o(ts)g(of)f(the)224 1215 y(Revised)376 1198 +y Fb(5)413 1215 y Fh(Sc)o(heme)k(rep)q(ort.)295 1271 +y(It)k(is)i(an)e(error)g(for)g(t)o(w)o(o)f(of)i(a)f(pac)o(k)m(age's)g +(op)q(ened)i(structures)e(to)g(exp)q(ort)h(t)o(w)o(o)224 +1328 y(di\013eren)o(t)14 b(bindings)i(for)e(the)g(same)g(name.)19 +b(Ho)o(w)o(ev)o(er,)13 b(the)h(curren)o(t)g(implemen)o(tation)224 +1384 y(do)q(es)h(not)f(c)o(hec)o(k)g(for)g(this)h(situation;)f(a)g +(name's)g(binding)j(is)d(alw)o(a)o(ys)g(tak)o(en)g(from)f(the)224 +1440 y(structure)18 b(that)g(is)h(listed)g(\014rst)f(within)h(the)g +Fe(open)e Fh(clause.)30 b(This)19 b(ma)o(y)f(b)q(e)h(\014xed)g(in)224 +1497 y(the)c(future.)295 1553 y(File)i(names)e(in)i(a)f +Fe(files)f Fh(clause)i(can)f(b)q(e)g(sym)o(b)q(ols,)g(strings,)g(or)f +(lists)i(\(Maclisp-)224 1610 y(st)o(yle)g(\\namelists"\).)24 +b(A)16 b(\\)p Fe(.scm)p Fh(")g(\014le)h(t)o(yp)q(e)g(su\016x)g(is)g +(assumed.)24 b(Sym)o(b)q(ols)17 b(are)f(con-)224 1666 +y(v)o(erted)f(to)e(\014le)j(names)e(b)o(y)h(con)o(v)o(erting)f(to)g +(upp)q(er)i(or)e(lo)o(w)o(er)g(case)g(as)h(appropriate)f(for)224 +1723 y(the)19 b(host)f(op)q(erating)h(system.)29 b(A)19 +b(namelist)h(is)f(an)f(op)q(erating-system-indep)q(eden)o(t)224 +1779 y(w)o(a)o(y)11 b(to)f(sp)q(ecify)j(a)e(\014le)i(obtained)f(from)f +(a)g(sub)q(directory)l(.)20 b(F)l(or)10 b(example,)j(the)f(namelist)224 +1836 y Fe(\(rts)23 b(record\))15 b Fh(sp)q(eci\014es)i(the)e(\014le)h +Fe(record.scm)e Fh(in)i(the)f Fe(rts)g Fh(sub)q(directory)l(.)295 +1892 y(If)i(the)g Fe(define-structure)d Fh(form)i(w)o(as)g(itself)i +(obtained)g(from)e(a)g(\014le,)i(then)f(\014le)224 1949 +y(names)c(in)g Fe(files)f Fh(clauses)i(are)f(in)o(terpreted)g(relativ)o +(e)g(to)f(the)h(directory)g(in)h(whic)o(h)f(the)224 2005 +y(\014le)h(con)o(taining)g(the)f Fe(define-structure)e +Fh(form)h(w)o(as)g(found.)20 b(Y)l(ou)13 b(can't)f(at)g(presen)o(t)224 +2061 y(put)j(an)h(absolute)f(path)g(name)g(in)h(the)g +Fe(files)e Fh(list.)224 2183 y Fg(In)n(terfaces)224 2269 +y Fh(An)i(in)o(terface)f(can)h(b)q(e)g(though)o(t)f(of)g(as)g(the)g(t)o +(yp)q(e)g(of)g(a)g(structure.)21 b(In)16 b(its)f(basic)h(form)224 +2325 y(it)g(is)f(just)g(a)g(list)h(of)f(v)m(ariable)i(names,)e(written) +g Fe(\(export)23 b Ff(name)h Fa(:)8 b(:)g(:)n Fe(\))p +Fh(.)20 b(Ho)o(w)o(ev)o(er,)14 b(in)224 2382 y(place)i(of)f(a)h(name)f +(one)g(ma)o(y)g(write)h Fe(\()p Ff(name)23 b(typ)n(e)p +Fe(\))p Fh(,)15 b(indicating)i(the)f(t)o(yp)q(e)f(of)g +Ff(name)p Fh('s)224 2438 y(binding.)31 b(Curren)o(tly)18 +b(the)g(t)o(yp)q(e)h(\014eld)g(is)g(ignored,)g(except)f(that)g(exp)q +(orted)g(macros)960 2581 y(4)p eop +%%Page: 5 5 +5 4 bop 224 311 a Fh(m)o(ust)15 b(b)q(e)h(indicated)h(with)e(t)o(yp)q +(e)g Fe(:syntax)p Fh(.)295 368 y(In)o(terfaces)g(ma)o(y)f(b)q(e)i +(either)g(anon)o(ymous,)e(as)h(in)h(the)f(example)h(in)g(the)g(in)o +(tro)q(duc-)224 424 y(tion,)d(or)e(they)h(ma)o(y)f(b)q(e)i(giv)o(en)f +(names)g(b)o(y)g(a)f Fe(define-interface)f Fh(form,)h(for)h(example)320 +518 y Fe(\(define-interface)21 b(foo-interface)h(\(export)h(a)h(c)g +(cons\)\))320 575 y(\(define-structure)d(foo)j(foo-interface)e +Fa(:)8 b(:)g(:)n Fe(\))224 668 y Fh(In)k(principle,)i(in)o(terfaces)d +(needn't)h(ev)o(er)f(b)q(e)g(named.)19 b(If)11 b(an)g(in)o(terface)h +(had)f(to)f(b)q(e)i(giv)o(en)224 725 y(at)17 b(the)g(p)q(oin)o(t)h(of)e +(a)h(structure's)g(use)g(as)g(w)o(ell)h(as)f(at)f(the)h(p)q(oin)o(t)h +(of)f(its)g(de\014nition,)i(it)224 781 y(w)o(ould)h(b)q(e)h(imp)q +(ortan)o(t)e(to)g(name)h(in)o(terfaces)g(in)h(order)e(to)h(a)o(v)o(oid) +f(ha)o(ving)h(to)f(write)224 838 y(them)13 b(out)f(t)o(wice,)h(with)g +(risk)g(of)g(mismatc)o(h)f(should)i(the)f(in)o(terface)g(ev)o(er)f(c)o +(hange.)19 b(But)224 894 y(they)c(don't.)295 951 y(Still,)h(there)g +(are)e(sev)o(eral)i(reasons)f(to)f(use)i Fe(define-interface)p +Fh(:)280 1044 y(1.)22 b(It)c(is)h(imp)q(ortan)o(t)f(to)g(separate)f +(the)i(in)o(terface)f(de\014nition)j(from)c(the)i(pac)o(k)m(age)338 +1101 y(de\014nitions)h(when)f(there)f(are)g(m)o(ultiple)i(distinct)g +(structures)e(that)f(ha)o(v)o(e)h(the)338 1157 y(same)g(in)o(terface)h +(|)h(that)e(is,)i(m)o(ultiple)g(implemen)o(tations)h(of)d(the)h(same)f +(ab-)338 1214 y(straction.)280 1308 y(2.)k(It)17 b(is)g(conceptually)h +(cleaner,)g(and)f(useful)h(for)e(do)q(cumen)o(tation)h(purp)q(oses,)g +(to)338 1364 y(separate)f(a)h(mo)q(dule's)h(sp)q(eci\014cation)h(\(in)o +(terface\))e(from)f(its)h(implemen)o(tation)338 1421 +y(\(pac)o(k)m(age\).)280 1514 y(3.)22 b(My)15 b(exp)q(erience)i(is)e +(that)g(con\014gurations)g(that)f(are)h(separated)g(in)o(to)g(in)o +(terface)338 1571 y(de\014nitions)i(and)f(pac)o(k)m(age)f +(de\014nitions)j(are)d(easier)h(to)f(read;)g(the)h(long)g(lists)g(of) +338 1627 y(exp)q(orted)f(bindings)i(just)e(get)g(in)h(the)f(w)o(a)o(y)g +(most)f(of)h(the)g(time.)295 1721 y(The)g Fe(compound-interface)d +Fh(op)q(erator)i(forms)g(an)g(in)o(terface)h(that)f(is)i(the)e(union) +224 1778 y(of)h(t)o(w)o(o)f(or)g(more)h(comp)q(onen)o(t)h(in)o +(terfaces.)k(F)l(or)14 b(example,)320 1871 y Fe(\(define-interface)21 +b(bar-interface)367 1928 y(\(compound-interface)h(foo-interface)g +(\(export)h(mumble\)\)\))224 2022 y Fh(de\014nes)15 b +Fe(bar-interface)c Fh(to)i(b)q(e)h Fe(foo-interface)e +Fh(with)i(the)f(name)h Fe(mumble)e Fh(added.)224 2143 +y Fg(Macros)224 2229 y Fh(Hygienic)20 b(macros,)e(as)g(describ)q(ed)i +(in)f([1)o(,)f(2],)g(are)g(implemen)o(ted.)31 b(Structures)18 +b(ma)o(y)224 2286 y(exp)q(ort)e(macros;)g(auxiliary)i(names)e(in)o(tro) +q(duced)h(in)o(to)g(the)f(expansion)h(are)f(resolv)o(ed)224 +2342 y(in)g(the)f(en)o(vironmen)o(t)h(of)f(the)g(macro's)f +(de\014nition.)295 2398 y(F)l(or)23 b(example,)k(the)d +Fe(scheme)f Fh(structure's)g Fe(delay)g Fh(macro)h(is)g(de\014ned)i(b)o +(y)d(the)224 2455 y(rewrite)15 b(rule)960 2581 y(5)p +eop +%%Page: 6 6 +6 5 bop 320 311 a Fe(\(delay)23 b Ff(exp)p Fe(\))47 b +Fh(=)-8 b Fd(\))49 b Fe(\(make-promise)23 b(\(lambda)f(\(\))i +Ff(exp)p Fe(\)\))p Fh(.)224 405 y(The)16 b(v)m(ariable)g +Fe(make-promise)e Fh(is)i(de\014ned)g(in)g(the)g Fe(scheme)e +Fh(structure's)h(underlying)224 462 y(pac)o(k)m(age,)j(but)g(is)g(not)f +(exp)q(orted.)28 b(A)18 b(use)g(of)f(the)h Fe(delay)f +Fh(macro,)g(ho)o(w)o(ev)o(er,)g(alw)o(a)o(ys)224 518 +y(accesses)f(the)g(correct)f(de\014nition)j(of)d Fe(make-promise)p +Fh(.)20 b(Similarly)l(,)e(the)e Fe(case)f Fh(macro)224 +575 y(expands)i(in)o(to)g(uses)g(of)f Fe(cond)p Fh(,)g +Fe(eqv?)p Fh(,)g(and)h(so)f(on.)25 b(These)17 b(names)f(are)h(exp)q +(orted)g(b)o(y)224 631 y Fe(scheme)p Fh(,)e(but)h(their)h(correct)e +(bindings)j(will)g(b)q(e)e(found)h(ev)o(en)f(if)g(they)g(are)g(shado)o +(w)o(ed)224 687 y(b)o(y)f(de\014nitions)i(in)f(the)g(clien)o(t)g(pac)o +(k)m(age.)224 809 y Fg(Higher-order)h(mo)r(dules)224 +895 y Fh(There)g(are)f Fe(define-module)e Fh(and)j Fe(define)e +Fh(forms)g(for)h(de\014ning)i(mo)q(dules)f(that)f(are)224 +951 y(in)o(tended)g(to)d(b)q(e)i(instan)o(tiated)f(m)o(ultiple)i +(times.)k(But)14 b(these)h(are)f(prett)o(y)f(kludgey)i(|)224 +1008 y(for)i(example,)h(compiled)g(co)q(de)g(isn't)f(shared)g(b)q(et)o +(w)o(een)h(the)f(instan)o(tiations)g(|)g(so)g(I)224 1064 +y(w)o(on't)d(describ)q(e)i(them)f(y)o(et.)k(If)c(y)o(ou)f(m)o(ust)g +(kno)o(w,)g(\014gure)h(it)g(out)f(from)g(the)h(follo)o(wing)224 +1121 y(grammar.)315 1215 y Fd(h)p Fh(de\014nition)p Fd(i)h(\000)-7 +b(!)31 b Fe(\(define-module)22 b(\()p Fd(h)p Fh(name)p +Fd(i)h Fe(\()p Fd(h)p Fh(name)p Fd(i)g(h)p Fh(in)o(terface)p +Fd(i)p Fe(\))1621 1198 y Fc(\003)1640 1215 y Fe(\))704 +1271 y Fd(h)p Fh(de\014nition)p Fd(i)926 1255 y Fc(\003)704 +1327 y Fd(h)p Fh(name)p Fd(i)o Fe(\))610 1384 y Fd(j)30 +b Fe(\(define)23 b Fd(h)p Fh(name)p Fd(i)g Fe(\()p Fd(h)p +Fh(name)p Fd(i)h(h)p Fh(name)p Fd(i)1340 1367 y Fc(\003)1360 +1384 y Fe(\)\))224 1506 y Fg(Compiling)17 b(and)i(linking)224 +1591 y Fh(Sc)o(heme)f(48)e(has)h(a)g(static)f(link)o(er)i(that)f(pro)q +(duces)g(stand-alone)h(heap)f(images)g(from)224 1648 +y(mo)q(dule)k(descriptions.)35 b(One)20 b(sp)q(eci\014es)i(a)d +(particular)h(pro)q(cedure)h(in)f(a)g(particular)224 +1704 y(structure)c(to)f(b)q(e)i(the)f(image's)f(startup)g(pro)q(cedure) +i(\(en)o(try)e(p)q(oin)o(t\),)h(and)g(the)g(link)o(er)224 +1761 y(traces)g(dep)q(endency)i(links)f(as)f(giv)o(en)g(b)o(y)g +Fe(open)f Fh(and)h Fe(access)f Fh(clauses)i(to)e(determine)224 +1817 y(the)g(comp)q(osition)h(of)f(the)h(heap)f(image.)295 +1874 y(There)i(is)g(not)g(curren)o(tly)g(an)o(y)g(pro)o(vision)h(for)e +(separate)g(compilation;)j(the)e(only)224 1930 y(input)j(to)f(the)g +(static)g(link)o(er)h(is)g(source)f(co)q(de.)32 b(Ho)o(w)o(ev)o(er,)19 +b(it)h(will)g(not)f(b)q(e)h(di\016cult)224 1987 y(to)15 +b(implemen)o(t)i(separate)f(compilation.)23 b(The)16 +b(unit)h(of)e(compilation)i(is)f(one)g(mo)q(dule)224 +2043 y(\(not)j(one)g(\014le\).)32 b(An)o(y)19 b(op)q(ened)h(or)f +(accessed)g(structures)g(from)g(whic)o(h)h(macros)e(are)224 +2100 y(obtained)13 b(m)o(ust)f(b)q(e)i(pro)q(cessed)f(to)f(the)h(exten) +o(t)f(of)g(extracting)g(its)h(macro)f(de\014nitions.)224 +2156 y(The)18 b(compiler)g(kno)o(ws)f(from)g(the)g(in)o(terface)h(of)f +(an)g(op)q(ened)i(or)e(accessed)h(structure)224 2212 +y(whic)o(h)24 b(of)e(its)h(exp)q(orts)f(are)g(macros.)42 +b(Except)23 b(for)f(macros,)h(a)f(mo)q(dule)i(ma)o(y)e(b)q(e)224 +2269 y(compiled)e(without)e(an)o(y)g(kno)o(wledge)h(of)e(the)i +(implemen)o(tation)g(of)f(its)g(op)q(ened)h(and)224 2325 +y(accessed)h(structures.)31 b(Ho)o(w)o(ev)o(er,)19 b(in)o(ter-mo)q +(dule)h(optimization)g(will)h(b)q(e)f(a)o(v)m(ailable)224 +2382 y(as)15 b(an)g(option.)960 2581 y(6)p eop +%%Page: 7 7 +7 6 bop 295 311 a Fh(The)17 b(main)g(di\016cult)o(y)h(with)f(separate)g +(compilation)h(is)f(resolution)h(of)e(auxiliary)224 368 +y(bindings)25 b(in)o(tro)q(duced)e(in)o(to)g(macro)f(expansions.)43 +b(The)22 b(mo)q(dule)i(compiler)g(m)o(ust)224 424 y(transmit)15 +b(to)f(the)h(loader)g(or)g(link)o(er)h(the)f(searc)o(h)f(path)h(b)o(y)g +(whic)o(h)h(suc)o(h)f(bindings)i(are)224 481 y(to)h(b)q(e)i(resolv)o +(ed.)31 b(In)19 b(the)g(case)f(of)h(the)g Fe(delay)f +Fh(macro's)f(auxiliary)j Fe(make-promise)224 537 y Fh(\(see)g(example)g +(ab)q(o)o(v)o(e\),)g(the)g(loader)g(or)f(link)o(er)i(needs)f(to)f(kno)o +(w)h(that)f(the)g(desired)224 594 y(binding)h(of)d Fe(make-promise)e +Fh(is)j(the)g(one)f(apparen)o(t)g(in)i Fe(delay)p Fh('s)d(de\014ning)j +(pac)o(k)m(age,)224 650 y(not)c(in)h(the)f(pac)o(k)m(age)g(b)q(eing)i +(loaded)f(or)f(link)o(ed.)295 707 y([I)g(need)h(to)f(describ)q(e)h +(structure)f(rei\014cation.])224 828 y Fg(Seman)n(tics)i(of)i +(con\014guration)g(m)n(utation)224 914 y Fh(During)c(program)f(dev)o +(elopmen)o(t)h(it)g(is)h(often)e(desirable)i(to)e(mak)o(e)h(c)o(hanges) +f(to)g(pac)o(k-)224 971 y(ages)k(and)h(in)o(terfaces.)31 +b(In)20 b(static)e(languages)h(it)g(ma)o(y)f(b)q(e)i(necessary)f(to)f +(recompile)224 1027 y(and)d(re-link)g(a)f(program)f(in)j(order)e(for)f +(suc)o(h)i(c)o(hanges)f(to)g(b)q(e)g(re\015ected)h(in)g(a)f(running)224 +1083 y(system.)35 b(Ev)o(en)20 b(in)i(in)o(teractiv)o(e)e(Common)g +(Lisp)h(implemen)o(tations,)i(a)d(c)o(hange)g(to)224 +1140 y(a)c(pac)o(k)m(age's)g(exp)q(orts)g(often)f(requires)i(reloading) +g(clien)o(ts)h(that)d(ha)o(v)o(e)h(already)g(men-)224 +1196 y(tioned)i(names)f(whose)g(bindings)i(c)o(hange.)25 +b(Once)18 b Fe(read)f Fh(resolv)o(es)g(a)g(use)g(of)g(a)f(name)224 +1253 y(to)i(a)g(sym)o(b)q(ol,)g(that)g(resolution)h(is)g(\014xed,)g(so) +f(a)f(c)o(hange)i(in)g(the)f(w)o(a)o(y)f(that)h(a)f(name)224 +1309 y(resolv)o(es)e(to)f(a)g(sym)o(b)q(ol)h(can)f(only)h(b)q(e)h +(re\015ected)f(b)o(y)f(re-)p Fe(read)p Fh(ing)h(all)g(suc)o(h)g +(references.)295 1366 y(The)g(Sc)o(heme)h(48)e(dev)o(elopmen)o(t)i(en)o +(vironmen)o(t)f(supp)q(orts)g(rapid)h(turnaround)f(in)224 +1422 y(mo)q(dular)j(program)f(dev)o(elopmen)o(t)i(b)o(y)e(allo)o(wing)i +(m)o(utations)e(to)g(a)h(program's)e(con-)224 1479 y(\014guration,)f +(and)g(giving)g(a)g(clear)g(seman)o(tics)g(to)f(suc)o(h)h(m)o +(utations.)k(The)c(rule)h(is)f(that)224 1535 y(v)m(ariable)23 +b(bindings)f(in)g(a)f(running)h(program)e(are)h(alw)o(a)o(ys)f(resolv)o +(ed)i(according)f(to)224 1592 y(curren)o(t)c(structure)g(and)g(in)o +(terface)h(bindings,)h(ev)o(en)e(when)h(these)f(bindings)i(c)o(hange) +224 1648 y(as)12 b(a)g(result)h(of)f(edits)h(to)f(the)h +(con\014guration.)19 b(F)l(or)12 b(example,)h(consider)h(the)e(follo)o +(wing:)320 1742 y Fe(\(define-interface)21 b(foo-interface)h(\(export)h +(a)h(c\)\))320 1798 y(\(define-structure)d(foo)j(foo-interface)367 +1855 y(\(open)g(scheme\))367 1911 y(\(begin)f(\(define)g(a)h(1\))534 +1968 y(\(define)f(\(b)h(x\))f(\(+)h(a)g(x\)\))534 2024 +y(\(define)f(\(c)h(y\))f(\(*)h(\(b)g(a\))f(y\)\)\)\))320 +2081 y(\(define-structure)e(bar)j(\(export)f(d\))367 +2137 y(\(open)h(scheme)f(foo\))367 2193 y(\(begin)g(\(define)g(\(d)h +(w\))f(\(+)h(\(b)g(w\))f(a\)\)\)\))224 2287 y Fh(This)18 +b(program)e(has)i(a)f(bug.)26 b(The)18 b(v)m(ariable)g +Fe(b)p Fh(,)g(whic)o(h)g(is)g(free)f(in)h(the)g(de\014nition)h(of)224 +2344 y Fe(d)p Fh(,)i(has)f(no)g(binding)i(in)f Fe(bar)p +Fh('s)e(pac)o(k)m(age.)35 b(Supp)q(ose)21 b(that)f Fe(b)g +Fh(w)o(as)f(supp)q(osed)i(to)f(b)q(e)224 2400 y(exp)q(orted)f(b)o(y)f +Fe(foo)p Fh(,)h(but)f(w)o(as)g(omitted)g(from)g Fe(foo-interface)e +Fh(b)o(y)i(mistak)o(e.)30 b(It)18 b(is)224 2457 y(not)f(necessary)h(to) +e(re-pro)q(cess)i Fe(bar)f Fh(or)g(an)o(y)g(of)g Fe(foo)p +Fh('s)f(other)h(clien)o(ts)i(at)e(this)g(p)q(oin)o(t.)960 +2581 y(7)p eop +%%Page: 8 8 +8 7 bop 224 311 a Fh(One)17 b(need)f(only)h(c)o(hange)f +Fe(foo-interface)e Fh(and)i(inform)g(the)f(dev)o(elopmen)o(t)i(system) +224 368 y(of)d(that)g(one)h(c)o(hange)f(\(using,)h(sa)o(y)l(,)f(an)g +(appropriate)h(Emacs)f(command\),)g(and)g Fe(foo)p Fh('s)224 +424 y(binding)j(of)e Fe(b)g Fh(will)i(b)q(e)f(found)f(when)h(pro)q +(cedure)g Fe(d)f Fh(is)h(called.)295 481 y(Similarly)l(,)e(it)e(is)f +(also)h(p)q(ossible)h(to)e(replace)h(a)f(structure;)h(clien)o(ts)h(of)e +(the)h(old)g(struc-)224 537 y(ture)g(will)i(b)q(e)e(mo)q(di\014ed)h(so) +f(that)f(they)h(see)g(bindings)i(from)d(the)h(new)g(one.)19 +b(Shado)o(wing)224 594 y(is)e(also)g(supp)q(orted)g(in)h(the)f(same)f +(w)o(a)o(y)l(.)24 b(Supp)q(ose)17 b(that)f(a)h(clien)o(t)h(pac)o(k)m +(age)f Fa(C)i Fh(op)q(ens)224 650 y(a)f(structure)f Fe(foo)h +Fh(that)f(exp)q(orts)g(a)h(name)f Fe(x)p Fh(,)h(and)g +Fe(foo)p Fh('s)f(implemen)o(tation)i(obtains)224 707 +y(the)d(binding)i(of)e Fe(x)f Fh(as)h(an)g(imp)q(ort)g(from)f(some)h +(other)f(structure)h Fe(bar)p Fh(.)22 b(Then)16 b Fa(C)j +Fh(will)224 763 y(see)f(the)g(binding)i(from)d Fe(bar)p +Fh(.)28 b(If)18 b(one)g(then)g(alters)g Fe(foo)f Fh(so)h(that)f(it)h +(shado)o(ws)f Fe(bar)p Fh('s)224 819 y(binding)e(of)d +Fe(x)g Fh(with)h(a)f(de\014nition)i(of)e(its)h(o)o(wn,)f(then)h(pro)q +(cedures)g(in)h Fa(C)h Fh(that)d(reference)224 876 y +Fe(x)19 b Fh(will)h(automatically)f(see)g Fe(foo)p Fh('s)f +(de\014nition)j(instead)e(of)f(the)h(one)g(from)f Fe(bar)g +Fh(that)224 932 y(they)d(sa)o(w)g(earlier.)295 989 y(This)c(seman)o +(tics)f(migh)o(t)g(app)q(ear)g(to)g(require)h(a)f(large)g(amoun)o(t)g +(of)f(computation)i(on)224 1045 y(ev)o(ery)j(v)m(ariable)i(reference:)k +(The)14 b(sp)q(eci\014ed)i(b)q(eha)o(vior)f(requires)f(scanning)h(the)f +(pac)o(k-)224 1102 y(age's)g(list)h(of)f(op)q(ened)i(structures,)e +(examining)i(their)f(in)o(terfaces,)f(on)h(ev)o(ery)f(v)m(ariable)224 +1158 y(reference,)h(not)f(just)g(at)f(compile)j(time.)k(Ho)o(w)o(ev)o +(er,)13 b(the)h(dev)o(elopmen)o(t)h(en)o(vironmen)o(t)224 +1215 y(uses)h(cac)o(hing)g(with)f(cac)o(he)h(in)o(v)m(alidation)h(to)e +(mak)o(e)f(v)m(ariable)j(references)f(fast.)224 1336 +y Fg(Command)h(pro)r(cessor)h(supp)r(ort)224 1422 y Fh(While)f(it)e(is) +g(p)q(ossible)i(to)e(use)g(the)g(Sc)o(heme)h(48)e(static)h(link)o(er)h +(for)f(program)e(dev)o(elop-)224 1479 y(men)o(t,)i(it)h(is)g(far)e +(more)h(con)o(v)o(enien)o(t)h(to)f(use)h(the)f(dev)o(elopmen)o(t)h(en)o +(vironmen)o(t,)g(whic)o(h)224 1535 y(supp)q(orts)21 b(rapid)g +(turnaround)f(for)g(program)f(c)o(hanges.)36 b(The)21 +b(programmer)e(in)o(ter-)224 1592 y(acts)13 b(with)i(the)e(dev)o +(elopmen)o(t)i(en)o(vironmen)o(t)f(through)f(a)h Ff(c)n(ommand)h(pr)n +(o)n(c)n(essor)p Fh(.)j(The)224 1648 y(command)d(pro)q(cessor)h(is)f +(lik)o(e)i(the)e(usual)i(Lisp)f(read-ev)m(al-prin)o(t)h(lo)q(op)f(in)g +(that)f(it)g(ac-)224 1704 y(cepts)k(Sc)o(heme)h(forms)e(to)g(ev)m +(aluate.)31 b(Ho)o(w)o(ev)o(er,)18 b(all)i(meta-lev)o(el)g(op)q +(erations,)f(suc)o(h)224 1761 y(as)e(exiting)h(the)f(Sc)o(heme)h +(system)f(or)g(requests)g(for)f(trace)h(output,)g(are)g(handled)i(b)o +(y)224 1817 y Ff(c)n(ommands,)f Fh(whic)o(h)h(are)e(lexically)j +(distinguished)g(from)d(Sc)o(heme)h(forms.)27 b(This)18 +b(ar-)224 1874 y(rangemen)o(t)11 b(is)h(b)q(orro)o(w)o(ed)e(from)h(the) +g(Sym)o(b)q(olics)i(Lisp)f(Mac)o(hine)g(system,)f(and)h(is)g(rem-)224 +1930 y(iniscen)o(t)19 b(of)d(non-Lisp)j(debuggers.)25 +b(Commands)17 b(are)g(a)f(little)j(easier)e(to)g(t)o(yp)q(e)g(than)224 +1987 y(Sc)o(heme)j(forms)f(\(no)g(paren)o(theses,)h(so)f(y)o(ou)g +(don't)g(ha)o(v)o(e)g(to)f(shift\),)i(but)g(more)f(im-)224 +2043 y(p)q(ortan)o(tly)l(,)14 b(making)h(them)f(distinct)h(from)f(Sc)o +(heme)h(forms)f(ensures)g(that)g(programs')224 2100 y(namespaces)f +(aren't)g(clutterred)g(with)g(inappropriate)h(bindings.)21 +b(Equiv)m(alen)o(tly)l(,)15 b(the)224 2156 y(command)h(set)h(is)g(a)o +(v)m(ailable)h(for)e(use)g(regardless)h(of)f(what)g(bindings)i(happ)q +(en)g(to)e(b)q(e)224 2213 y(visible)j(in)e(the)f(curren)o(t)g(program.) +22 b(This)16 b(is)h(esp)q(ecially)i(imp)q(ortan)o(t)c(in)i(conjunction) +224 2269 y(with)e(the)f(mo)q(dule)h(system,)e(whic)o(h)i(puts)f(strict) +g(con)o(trols)g(on)g(visibilit)o(y)i(of)e(bindings.)295 +2325 y(The)h(Sc)o(heme)h(48)e(command)h(pro)q(cessor)g(supp)q(orts)g +(the)g(mo)q(dule)i(system)d(with)i(a)224 2382 y(v)m(ariet)o(y)h(of)e +(sp)q(ecial)k(commands.)j(F)l(or)16 b(commands)g(that)g(require)h +(structure)f(names,)224 2438 y(these)h(names)f(are)g(resolv)o(ed)h(in)g +(a)f(designated)h(con\014guration)g(pac)o(k)m(age)f(that)g(is)h(dis-) +960 2581 y(8)p eop +%%Page: 9 9 +9 8 bop 224 311 a Fh(tinct)21 b(from)f(the)h(curren)o(t)f(pac)o(k)m +(age)h(for)f(ev)m(aluating)h(Sc)o(heme)h(forms)d(giv)o(en)i(to)f(the) +224 368 y(command)f(pro)q(cessor.)31 b(The)20 b(command)f(pro)q(cessor) +f(in)o(terprets)i(Sc)o(heme)f(forms)g(in)224 424 y(a)d(particular)h +(curren)o(t)f(pac)o(k)m(age,)g(and)g(there)h(are)e(commands)h(that)g +(mo)o(v)o(e)f(the)i(com-)224 481 y(mand)e(pro)q(cessor)g(b)q(et)o(w)o +(een)h(di\013eren)o(t)f(pac)o(k)m(ages.)295 537 y(Commands)h(are)h(in)o +(tro)q(duced)h(b)o(y)e(a)h(comma)f(\()p Fe(,)p Fh(\))h(and)g(end)g(at)f +(the)h(end)h(of)e(line.)224 594 y(The)f(command)f(pro)q(cessor's)f +(prompt)h(consists)h(of)f(the)g(name)g(of)g(the)g(curren)o(t)g(pac)o +(k-)224 650 y(age)h(follo)o(w)o(ed)g(b)o(y)h(a)e(greater-than)h(\()p +Fe(>)p Fh(\).)338 756 y Fe(,config)338 831 y Fh(The)e +Fe(,config)f Fh(command)h(sets)f(the)i(command)e(pro)q(cessor's)h +(curren)o(t)g(pac)o(k)m(age)338 888 y(to)j(b)q(e)h(the)g(curren)o(t)g +(con\014guration)g(pac)o(k)m(age.)25 b(F)l(orms)16 b(en)o(tered)h(at)f +(this)h(p)q(oin)o(t)338 944 y(are)22 b(in)o(terpreted)h(as)g(b)q(eing)h +(con\014guration)e(language)h(forms,)h(not)e(Sc)o(heme)338 +1001 y(forms.)338 1095 y Fe(,config)h Ff(c)n(ommand)338 +1170 y Fh(This)14 b(form)e(of)h(the)g Fe(,config)f Fh(command)h +(executes)h(another)e(command)h(in)h(the)338 1226 y(curren)o(t)h +(con\014guration)g(pac)o(k)m(age.)20 b(F)l(or)15 b(example,)433 +1320 y Fe(,config)23 b(,load)g(foo.scm)338 1414 y Fh(in)o(terprets)18 +b(con\014guration)g(language)h(forms)e(from)h(the)g(\014le)h +Fe(foo.scm)e Fh(in)i(the)338 1470 y(curren)o(t)c(con\014guration)g(pac) +o(k)m(age.)338 1564 y Fe(,in)23 b Ff(struct-name)338 +1639 y Fh(The)14 b Fe(,in)f Fh(command)g(mo)o(v)o(es)g(the)g(command)h +(pro)q(cessor)f(to)g(a)g(sp)q(eci\014ed)j(struc-)338 +1696 y(ture's)e(underlying)k(pac)o(k)m(age.)h(F)l(or)c(example:)433 +1790 y Fe(user>)23 b(,config)433 1846 y(config>)g(\(define-structure)f +(foo)h(\(export)g(a\))672 1902 y(\(open)g(scheme\)\))433 +1959 y(config>)g(,in)h(foo)433 2015 y(foo>)g(\(define)e(a)i(13\))433 +2072 y(foo>)g(a)433 2128 y(13)338 2222 y Fh(In)11 b(this)g(example)g +(the)g(command)f(pro)q(cessor)h(starts)e(in)j(a)e(pac)o(k)m(age)g +(called)i Fe(user)p Fh(,)338 2279 y(but)19 b(the)h Fe(,config)e +Fh(command)h(mo)o(v)o(es)f(it)i(in)o(to)f(the)g(con\014guration)h(pac)o +(k)m(age,)338 2335 y(whic)o(h)e(has)f(the)h(name)f Fe(config)p +Fh(.)26 b(The)17 b Fe(define-structure)e Fh(form)i(binds,)i(in)338 +2391 y Fe(config)p Fh(,)j(the)g(name)g Fe(foo)g Fh(to)f(a)h(structure)f +(that)h(exp)q(orts)f Fe(a)p Fh(.)40 b(Finally)l(,)25 +b(the)960 2581 y(9)p eop +%%Page: 10 10 +10 9 bop 338 311 a Fh(command)13 b Fe(,in)23 b(foo)13 +b Fh(mo)o(v)o(es)f(the)h(command)g(pro)q(cessor)g(in)o(to)g(structure)f +Fe(foo)p Fh('s)338 368 y(underlying)17 b(pac)o(k)m(age.)338 +443 y(A)11 b(pac)o(k)m(age's)f(b)q(o)q(dy)h(isn't)g(executed)h(\(ev)m +(aluated\))f(un)o(til)g(the)g(pac)o(k)m(age)g(is)g Ff(lo)n(ade)n(d)p +Fh(,)338 499 y(whic)o(h)16 b(is)g(accomplished)h(b)o(y)e(the)g +Fe(,load-package)e Fh(command.)338 593 y Fe(,in)23 b +Ff(struct-name)i(c)n(ommand)338 668 y Fh(This)e(form)e(of)h(the)g +Fe(,in)g Fh(command)g(executes)h(a)f(single)h(command)f(in)h(the)338 +725 y(sp)q(eci\014ed)f(pac)o(k)m(age)e(without)h(mo)o(ving)f(the)g +(command)g(pro)q(cessor)g(in)o(to)g(that)338 781 y(pac)o(k)m(age.)g +(Example:)433 875 y Fe(,in)k(mumble)f(\(cons)g(1)h(2\))433 +932 y(,in)g(mumble)f(,trace)g(foo)338 1025 y(,user)g +Fh([)p Ff(c)n(ommand)p Fh(])338 1100 y(This)d(is)h(similar)g(to)e(the)i +Fe(,config)e Fh(and)h Fe(,in)f Fh(commands.)34 b(It)20 +b(mo)o(v)o(es)g(to)f(or)338 1157 y(executes)14 b(a)f(command)g(in)h +(the)g(user)f(pac)o(k)m(age)g(\(whic)o(h)h(is)g(the)g(default)g(pac)o +(k)m(age)338 1213 y(when)h(the)h(Sc)o(heme)g(48)e(command)h(pro)q +(cessor)g(starts\).)338 1307 y Fe(,for-syntax)22 b Fh([)p +Ff(c)n(ommand)p Fh(])338 1382 y(This)e(is)h(similar)g(to)e(the)i +Fe(,config)e Fh(and)h Fe(,in)f Fh(commands.)34 b(It)20 +b(mo)o(v)o(es)g(to)f(or)338 1439 y(executes)h(a)f(command)g(in)i(the)e +(curren)o(t)h(pac)o(k)m(age's)f(\\pac)o(k)m(age)g(for)g(syn)o(tax,")338 +1495 y(whic)o(h)e(is)g(the)f(pac)o(k)m(age)g(in)h(whic)o(h)g(the)g +(forms)e Fa(f)22 b Fh(in)17 b Fe(\(define-syntax)22 b +Ff(name)338 1552 y Fa(f)5 b Fe(\))15 b Fh(are)g(ev)m(aluated.)338 +1645 y Fe(,load-package)22 b Ff(struct-name)338 1721 +y Fh(The)d Fe(,load-package)e Fh(command)h(ensures)i(that)e(the)g(sp)q +(eci\014ed)j(structure's)338 1777 y(underlying)g(pac)o(k)m(age's)d +(program)g(has)h(b)q(een)h(loaded.)32 b(This)20 b(consists)f(of)f +(\(1\))338 1834 y(recursiv)o(ely)13 b(ensuring)g(that)e(the)h(pac)o(k)m +(ages)f(of)h(an)o(y)f(op)q(ened)i(or)e(accessed)i(struc-)338 +1890 y(tures)f(are)g(loaded,)i(follo)o(w)o(ed)e(b)o(y)h(\(2\))e +(executing)j(the)e(pac)o(k)m(age's)g(b)q(o)q(dy)h(as)g(sp)q(ec-)338 +1946 y(i\014ed)j(b)o(y)f(its)h(de\014nition's)g Fe(begin)f +Fh(and)g Fe(files)g Fh(forms.)338 2040 y Fe(,reload-package)22 +b Ff(struct-name)338 2115 y Fh(This)f(command)f(re-executes)h(the)g +(structure's)f(pac)o(k)m(age's)g(program.)34 b(It)21 +b(is)338 2172 y(most)g(useful)i(if)g(the)f(program)e(comes)i(from)g(a)f +(\014le)i(or)f(\014les,)i(when)f(it)f(will)338 2228 y(up)q(date)16 +b(the)f(pac)o(k)m(age's)g(bindings)i(after)d(m)o(utations)h(to)f(its)i +(source)f(\014le.)338 2322 y Fe(,load)23 b Ff(\014lesp)n(e)n(c)f +Fa(:)8 b(:)g(:)338 2397 y Fh(The)22 b Fe(,load)f Fh(command)g(executes) +i(forms)e(from)g(the)h(sp)q(eci\014ed)i(\014le)e(or)g(\014les)338 +2454 y(in)16 b(the)g(curren)o(t)g(pac)o(k)m(age.)22 b +Fe(,load)h Ff(\014lesp)n(e)n(c)14 b Fh(is)i(similar)h(to)f +Fe(\(load)23 b(")p Ff(\014lesp)n(e)n(c)n Fe("\))949 2581 +y Fh(10)p eop +%%Page: 11 11 +11 10 bop 338 311 a Fh(except)18 b(that)e(the)h(name)h +Fe(load)e Fh(needn't)i(b)q(e)g(b)q(ound)g(in)g(the)f(curren)o(t)h(pac)o +(k)m(age)338 368 y(to)c(Sc)o(heme's)i Fe(load)e Fh(pro)q(cedure.)338 +457 y Fe(,structure)22 b Ff(name)i(interfac)n(e)338 530 +y Fh(The)15 b Fe(,structure)e Fh(command)h(de\014nes)i +Ff(name)e Fh(in)h(the)g(con\014guration)g(pac)o(k)m(age)338 +587 y(to)c(b)q(e)i(a)e(structure)h(with)g(in)o(terface)g +Ff(interfac)n(e)f Fh(based)h(on)g(the)g(curren)o(t)g(pac)o(k)m(age.)338 +676 y Fe(,open)23 b Ff(struct-name)717 660 y Fc(\003)338 +749 y Fh(The)13 b Fe(,open)g Fh(command)g(op)q(ens)h(a)f(new)h +(structure)f(in)h(the)f(curren)o(t)h(pac)o(k)m(age,)f(as)338 +806 y(if)i(the)h(pac)o(k)m(age's)e(de\014nition's)j Fe(open)e +Fh(clause)h(had)f(listed)i Ff(struct-name)p Fh(.)224 +926 y Fg(Con\014guration)i(pac)n(k)m(ages)224 1011 y +Fh(It)c(is)h(p)q(ossible)h(to)e(set)g(up)h(m)o(ultiple)h +(con\014guration)e(pac)o(k)m(ages.)20 b(The)15 b(default)h(con\014g-) +224 1068 y(uration)f(pac)o(k)m(age)h(op)q(ens)f(the)h(follo)o(wing)g +(structures:)292 1151 y Fd(\017)23 b Fe(module-system)p +Fh(,)11 b(whic)o(h)j(exp)q(orts)f Fe(define-structure)d +Fh(and)k(the)f(other)f(con-)338 1208 y(\014guration)i(language)g(k)o +(eyw)o(ords,)e(as)i(w)o(ell)h(as)e(standard)h(t)o(yp)q(es)f(and)h(t)o +(yp)q(e)g(con-)338 1264 y(structors)g(\()p Fe(:syntax)p +Fh(,)f Fe(:value)p Fh(,)h Fe(proc)p Fh(,)h(etc.\).)292 +1354 y Fd(\017)23 b Fe(built-in-structures)p Fh(,)18 +b(whic)o(h)j(exp)q(orts)f(structures)f(that)g(are)h(built)i(in)o(to)338 +1410 y(the)10 b(initial)i(Sc)o(heme)f(48)f(image;)h(these)g(include)h +Fe(scheme)p Fh(,)e Fe(tables)p Fh(,)g(and)g Fe(records)p +Fh(.)292 1500 y Fd(\017)23 b Fe(more-structures)p Fh(,)12 +b(whic)o(h)j(exp)q(orts)g(additional)g(structures)g(that)e(are)h(a)o(v) +m(ail-)338 1556 y(able)f(in)g(the)f(dev)o(elopmen)o(t)h(en)o(vironmen)o +(t;)g(these)f(include)j Fe(sort)p Fh(,)d Fe(random)p +Fh(,)f(and)338 1613 y Fe(threads)p Fh(.)224 1696 y(Note)k(that)f(it)i +(do)q(es)f(not)g(op)q(en)h Fe(scheme)p Fh(.)295 1752 +y(Y)l(ou)d(can)f(de\014ne)i(other)e(con\014guration)h(pac)o(k)m(ages)f +(b)o(y)h(simply)h(making)e(a)h(pac)o(k)m(age)224 1809 +y(that)k(op)q(ens)i Fe(module-system)d Fh(and,)j(optionally)l(,)h +Fe(built-in-structures)p Fh(,)15 b Fe(more-)224 1865 +y(structures)p Fh(,)f(or)g(other)h(structures)g(that)f(exp)q(ort)h +(structures)g(and)h(in)o(terfaces.)295 1922 y(F)l(or)e(example:)320 +2005 y Fe(>)23 b(,config)g(\(define-structure)f(foo)h(\(export)g(\))606 +2061 y(\(open)g(module-system)749 2118 y(built-in-structures)749 +2174 y(more-structures\)\))320 2231 y(>)g(,in)h(foo)320 +2287 y(foo>)f(\(define-structure)e(x)j(\(export)f(a)h(b\))487 +2344 y(\(open)f(scheme\))487 2400 y(\(files)g(x\)\))320 +2457 y(foo>)949 2581 y Fh(11)p eop +%%Page: 12 12 +12 11 bop 338 311 a Fe(,config-package-is)21 b Ff(struct-name)338 +384 y Fh(The)f Fe(,config-package-is)d Fh(command)i(designates)h(a)g +(new)f(con\014guration)338 441 y(pac)o(k)m(age)10 b(for)f(use)i(b)o(y)f +(the)g Fe(,config)f Fh(command)h(and)h(resolution)g(of)e +Ff(struct-name)q Fh(s)338 497 y(for)14 b(other)h(commands)g(suc)o(h)h +(as)f Fe(,in)f Fh(and)i Fe(,open)p Fh(.)224 617 y Fg(Discussion)224 +702 y Fh(This)j(mo)q(dule)f(system)g(w)o(as)f(not)g(designed)i(as)f +(the)f(b)q(e-all)j(and)e(end-all)h(of)f(Sc)o(heme)224 +759 y(mo)q(dule)e(systems;)e(it)g(w)o(as)g(only)h(in)o(tended)h(to)e +(help)i(Ric)o(hard)f(Kelsey)h(and)f(me)f(to)g(or-)224 +815 y(ganize)i(the)f(Sc)o(heme)h(48)f(system.)20 b(Not)14 +b(only)i(do)q(es)g(the)f(mo)q(dule)h(system)f(help)i(a)o(v)o(oid)224 +872 y(name)c(clashes)g(b)o(y)g(k)o(eeping)h(di\013eren)o(t)f +(subsystems)f(in)i(di\013eren)o(t)f(namespaces,)g(it)g(has)224 +928 y(also)j(help)q(ed)h(us)f(to)f(tigh)o(ten)g(up)h(and)g(generalize)h +(Sc)o(heme)f(48's)e(in)o(ternal)j(in)o(terfaces.)224 +985 y(Sc)o(heme)c(48)e(is)h(un)o(usual)g(among)f(Lisp)i(implemen)o +(tations)g(in)g(admitting)f(man)o(y)f(di\013er-)224 1041 +y(en)o(t)16 b(p)q(ossible)i(mo)q(des)f(of)e(op)q(eration.)24 +b(Examples)16 b(of)g(suc)o(h)h(m)o(ultiple)h(mo)q(des)e(include)224 +1098 y(the)f(follo)o(wing:)292 1180 y Fd(\017)23 b Fh(Linking)17 +b(can)e(b)q(e)h(either)g(static)f(or)g(dynamic.)292 1269 +y Fd(\017)23 b Fh(The)h(dev)o(elopmen)o(t)h(en)o(vironmen)o(t)g +(\(compiler,)i(debugger,)g(and)e(command)338 1325 y(pro)q(cessor\))18 +b(can)h(run)g(either)g(in)h(the)e(same)h(address)g(space)g(as)f(the)h +(program)338 1382 y(b)q(eing)c(dev)o(elop)q(ed)h(or)e(in)h(a)f +(di\013eren)o(t)h(address)f(space.)20 b(The)15 b(en)o(vironmen)o(t)f +(and)338 1438 y(user)g(program)e(ma)o(y)h(ev)o(en)i(run)f(on)f +(di\013eren)o(t)h(pro)q(cessors)g(under)g(di\013eren)o(t)g(op-)338 +1495 y(erating)h(systems[5)o(].)292 1584 y Fd(\017)23 +b Fh(The)18 b(virtual)g(mac)o(hine)h(can)f(b)q(e)h(supp)q(orted)f(b)o +(y)g(either)g(of)g(t)o(w)o(o)e(implemen)o(ta-)338 1640 +y(tions)f(of)g(its)g(implemen)o(tation)i(language,)e(Presc)o(heme.)224 +1723 y(The)e(mo)q(dule)g(system)f(has)g(b)q(een)h(helpful)i(in)e +(organizing)g(these)f(m)o(ultiple)i(mo)q(des.)19 b(By)224 +1779 y(forcing)g(us)f(to)g(write)g(do)o(wn)g(in)o(terfaces)h(and)g(mo)q +(dule)g(dep)q(endencies,)j(the)c(mo)q(dule)224 1836 y(system)12 +b(helps)i(us)e(to)g(k)o(eep)h(the)f(system)g(clean,)h(or)f(at)g(least)g +(to)g(k)o(eep)h(us)f(honest)h(ab)q(out)224 1892 y(ho)o(w)i(clean)h(or)f +(not)g(it)g(is.)295 1949 y(The)f(need)h(to)f(mak)o(e)g(structures)g +(and)g(in)o(terfaces)h(second-class)g(instead)g(of)f(\014rst-)224 +2005 y(class)19 b(results)f(from)g(the)g(requiremen)o(ts)h(of)e(static) +h(program)f(analysis:)27 b(it)18 b(m)o(ust)g(b)q(e)224 +2061 y(p)q(ossible)h(for)c(the)i(compiler)h(and)f(link)o(er)h(to)e +(expand)h(macros)f(and)g(resolv)o(e)h(v)m(ariable)224 +2118 y(bindings)12 b(b)q(efore)f(the)f(program)f(is)i(executed.)19 +b(Structures)11 b(could)g(b)q(e)g(made)f(\014rst-class)224 +2174 y(\(as)15 b(in)i(FX[6)o(]\))e(if)i(a)e(t)o(yp)q(e)h(system)g(w)o +(ere)g(added)g(to)f(Sc)o(heme)i(and)f(the)g(de\014nitions)i(of)224 +2231 y(exp)q(orted)d(macros)e(w)o(ere)h(de\014ned)i(in)f(in)o(terfaces) +f(instead)h(of)f(in)h(mo)q(dule)g(b)q(o)q(dies,)g(but)224 +2287 y(ev)o(en)h(in)g(that)e(case)h(t)o(yp)q(es)h(and)f(in)o(terfaces)g +(w)o(ould)h(remain)g(second-class.)295 2344 y(The)e(prohibition)i(on)e +(assignmen)o(t)f(to)h(imp)q(orted)g(bindings)i(mak)o(es)e(substitution) +224 2400 y(a)g(v)m(alid)i(optimization)f(when)f(a)g(mo)q(dule)h(is)g +(compiled)h(as)d(a)h(blo)q(c)o(k.)20 b(The)15 b(blo)q(c)o(k)g(com-)224 +2457 y(piler)f(\014rst)f(scans)g(the)g(en)o(tire)g(mo)q(dule)h(b)q(o)q +(dy)l(,)g(noting)f(whic)o(h)h(v)m(ariables)g(are)e(assigned.)949 +2581 y(12)p eop +%%Page: 13 13 +13 12 bop 224 311 a Fh(Those)14 b(that)g(aren't)f(assigned)i(\(only)g +Fe(define)p Fh(d\))e(ma)o(y)h(b)q(e)g(assumed)h(nev)o(er)f(assigned,) +224 368 y(ev)o(en)k(if)g(they)f(are)g(exp)q(orted.)27 +b(The)17 b(optimizer)i(can)e(then)h(p)q(erform)f(a)g(v)o(ery)g(simple-) +224 424 y(minded)h(analysis)f(to)e(determine)j(automatically)e(that)g +(some)g(pro)q(cedures)h(can)f(and)224 481 y(should)g(ha)o(v)o(e)f +(their)h(calls)g(compiled)h(in)f(line.)295 537 y(The)g(programming)g +(st)o(yle)h(encouraged)g(b)o(y)f(the)h(mo)q(dule)g(system)f(is)h +(consisten)o(t)224 594 y(with)e(the)g(unextended)h(Sc)o(heme)f +(language.)20 b(Because)15 b(mo)q(dule)h(system)e(features)h(do)224 +650 y(not)g(generally)i(sho)o(w)e(up)h(within)h(mo)q(dule)f(b)q(o)q +(dies,)h(an)f(individual)i(mo)q(dule)f(ma)o(y)e(b)q(e)224 +707 y(understo)q(o)q(d)f(b)o(y)f(someone)g(who)g(is)g(not)g(familiar)h +(with)f(the)g(mo)q(dule)i(system.)j(This)c(is)224 763 +y(a)i(great)e(aid)j(to)e(co)q(de)h(presen)o(tation)g(and)g(p)q +(ortabilit)o(y)l(.)22 b(If)16 b(a)g(few)f(simple)i(conditions)224 +819 y(are)k(met)f(\(no)g(name)h(con\015icts)h(b)q(et)o(w)o(een)f(pac)o +(k)m(ages,)h(no)e(use)h(of)g Fe(structure-ref)p Fh(,)224 +876 y(and)g(use)g(of)g Fe(files)f Fh(in)h(preference)h(to)e +Fe(begin)p Fh(\),)h(then)g(a)g(m)o(ulti-mo)q(dule)i(program)224 +932 y(can)f(b)q(e)h(loaded)g(in)o(to)f(a)f(Sc)o(heme)i(implemen)o +(tation)g(that)e(do)q(es)i(not)e(supp)q(ort)h(the)224 +989 y(mo)q(dule)17 b(system.)23 b(The)16 b(Sc)o(heme)h(48)e(static)h +(link)o(er)h(satis\014es)g(these)f(conditions,)h(and)224 +1045 y(can)e(therefore)f(run)h(in)h(other)e(Sc)o(heme)h(implemen)o +(tations.)21 b(Sc)o(heme)16 b(48's)d(b)q(o)q(otstrap)224 +1102 y(pro)q(cess,)h(whic)o(h)g(is)f(based)h(on)f(the)g(static)g(link)o +(er,)i(is)f(therefore)e(nonincestuous.)21 b(This)224 +1158 y(con)o(trasts)d(with)i(most)f(other)g(in)o(tegrated)g +(programming)g(en)o(vironmen)o(ts,)h(suc)o(h)g(as)224 +1215 y(Smalltalk-80,)d(where)g(the)g(system)f(can)g(only)h(b)q(e)g +(built)h(using)f(an)g(existing)g(v)o(ersion)224 1271 +y(of)e(the)g(system)g(itself.)295 1328 y(Lik)o(e)d(ML)f(mo)q(dules,)h +(but)g(unlik)o(e)g(Sc)o(heme)g(Xero)o(x)f(mo)q(dules,)h(this)g(mo)q +(dule)g(system)224 1384 y(is)f(comp)q(ositional.)19 b(That)10 +b(is,)h(structures)f(are)g(constructed)h(b)o(y)f(single)i(syn)o(tactic) +e(units)224 1440 y(that)i(comp)q(ose)h(existing)h(structures)e(with)h +(a)g(b)q(o)q(dy)g(of)g(co)q(de.)19 b(In)14 b(Sc)o(heme)f(Xero)o(x,)f +(the)224 1497 y(set)21 b(of)g(mo)q(dules)h(that)f(can)g(con)o(tribute)g +(to)g(an)g(in)o(terface)g(is)h(op)q(en-ended)h(|)f(an)o(y)224 +1553 y(mo)q(dule)f(can)f(con)o(tribute)g(bindings)i(to)d(an)o(y)g(in)o +(terface)h(whose)g(name)g(is)g(in)g(scop)q(e.)224 1610 +y(The)c(mo)q(dule)g(system)g(implemen)o(tation)g(is)g(a)f(cross-bar)g +(that)g(c)o(hannels)i(de\014nitions)224 1666 y(from)e(mo)q(dules)h(to)f +(in)o(terfaces.)21 b(The)16 b(mo)q(dule)h(system)e(describ)q(ed)i(here) +f(has)f(simpler)224 1723 y(seman)o(tics)g(and)f(mak)o(es)g(dep)q +(endencies)j(easier)e(to)f(trace.)19 b(It)14 b(also)g(allo)o(ws)h(for)f +(higher-)224 1779 y(order)h(mo)q(dules,)h(whic)o(h)g(Sc)o(heme)g(Xero)o +(x)f(considers)h(unimp)q(ortan)o(t.)224 1922 y Fi(References)247 +2024 y Fh([1])22 b(William)c(Clinger)g(and)e(Jonathan)h(Rees.)25 +b(Macros)15 b(that)h(w)o(ork.)23 b Ff(Principles)16 b(of)318 +2080 y(Pr)n(o)n(gr)n(amming)f(L)n(anguages)p Fh(,)f(Jan)o(uary)h(1991.) +247 2174 y([2])22 b(William)12 b(Clinger)g(and)f(Jonathan)f(Rees)i +(\(editors\).)g(Revised)1370 2158 y Fb(4)1402 2174 y +Fh(rep)q(ort)f(on)f(the)h(al-)318 2231 y(gorithmic)g(language)h(Sc)o +(heme.)i Ff(LISP)d(Pointers)g Fh(IV\(3\):1{55,)e(July-Septem)o(b)q(er) +318 2287 y(1991.)247 2381 y([3])22 b(P)o(a)o(v)o(el)17 +b(Curtis)h(and)g(James)g(Rauen.)29 b(A)18 b(mo)q(dule)h(system)f(for)f +(Sc)o(heme.)29 b Ff(A)o(CM)318 2437 y(Confer)n(enc)n(e)14 +b(on)i(Lisp)f(and)i(F)m(unctional)e(Pr)n(o)n(gr)n(amming,)f +Fh(pages)h(13{19,)e(1990.)949 2581 y(13)p eop +%%Page: 14 14 +14 13 bop 247 311 a Fh([4])22 b(Da)o(vid)11 b(MacQueen.)k(Mo)q(dules)e +(for)e(Standard)h(ML.)i Ff(A)o(CM)e(Confer)n(enc)n(e)f(on)i(Lisp)318 +368 y(and)j(F)m(unctional)f(Pr)n(o)n(gr)n(amming,)f Fh(1984.)247 +462 y([5])22 b(Jonathan)16 b(Rees)h(and)f(Bruce)h(Donald.)23 +b(Program)14 b(mobile)k(rob)q(ots)d(in)i(Sc)o(heme.)318 +518 y Ff(International)e(Confer)n(enc)n(e)f(on)i(R)n(ob)n(otics)g(and)g +(A)o(utomation,)f Fh(IEEE,)g(1992.)247 612 y([6])22 b(Mark)10 +b(A.)h(Sheldon)h(and)g(Da)o(vid)f(K.)g(Gi\013ord.)i(Static)e(dep)q +(enden)o(t)i(t)o(yp)q(es)e(for)g(\014rst-)318 668 y(class)i(mo)q +(dules.)18 b Ff(A)o(CM)13 b(Confer)n(enc)n(e)f(on)i(Lisp)g(and)g(F)m +(unctional)f(Pr)n(o)n(gr)n(amming,)318 725 y Fh(pages)i(20{29,)e(1990.) +949 2581 y(14)p eop +%%Trailer +end +userdict /end-hook known{end-hook}if +%%EOF diff --git a/doc/news.txt b/doc/news.txt new file mode 100644 index 0000000..c8eb269 --- /dev/null +++ b/doc/news.txt @@ -0,0 +1,700 @@ +-*- Mode: Indented-text; -*- + +Recent changes to Scheme 48. + +2/24/99 (version 0.53) + Additions: + DEFINE-FINITE-TYPE and DEFINE-ENUMERATED-TYPE (in structure + FINITE-TYPES; documented in doc/utilities.ps and + doc/html/utilities.html. + Added CHAR-SOURCE->INPUT-PORT, CHAR-SINK->OUTPUT-PORT, + MAKE-STRING-OUTPUT-PORT, STRING-OUTPUT-SOURCE-OUTPUT to + the extended-ports structure. + The structure BYTE-VECTORS is the same as CODE-VECTORS with `byte' + replacing `code' in all the names. The underlying datatype is the + same for both, and uses `byte' when printing. + There is a new and much improved interface to C code, thanks to + Mike Sperber. It is documented in in doc/external.ps and + doc/html/external.html. + Bug fixes: + Session-data and user-context records are no longer in the fluid env. + Lexical environments can now be nested up to 65k deep. + ,expand no longer prints `definition in expression context' warnings. + Added ARRAY? and SEARCH-TREE? to the array and search tree structures. + Flat environments work again. + Templates of the form `var ... ...' now work in syntax rules. + Reinstated caching of SCHEMIFY results to greatly reduce the space + used by debugging info. + Added argument checking to STRING->NUMBER and NUMBER->STRING. + Fixed space blow-up in LOAD. + Unused ports are closed more reliably. + Changes: + The heap, gc, and image code is now in three separate modules. + The symbol table is now held in a VM register. + Inlined SHOWING-FOCUS-VALUES into the main command loop and moved + the sentinal call to reduce the noise at the base of ,preview output. + The tables returned by MAKE-TABLE now use EQV? for comparison (instead + of EQ?). This makes these tables about 50% slower when numbers are + used as keys, but significantly more accurate. + Floating-point numbers are no longer double boxed. + The channels structure has been split into channels and low-channels. + +7/22/98 (version 0.52) + Bug fixes: + Fixed problems with unbound variables in SET! and the inliner. + Made macro expansion a bit less eager; this should reduce the amount + of heap space needed for compilation. + +6/29/98 (version 0.51) + Incompatible changes: + BIG-SCHEME no longer exports its version of DEFINE-RECORD-TYPE (but + it is available from the structure DEFRECORD). I am slowly removing + all uses of this version of DEFINE-RECORD-TYPE from the sources. + The version of DEFINE-RECORD-TYPE exported by DEFINE-RECORD-TYPES + checks that every constructor argument corresponds to a field. + Uses of LAP must list their free variables (see env/assem.scm). + Changes: + The functions exported by BIG-SCHEME that were not available elsewhere + are now exported by BIG-UTIL as well. + MAKE-RANDOM now checks its argument (but is still a fairly poor + source of pseudo-randomness). + SIGPIPE no longer kills the S48 process (this was done earlier but + not listed here). + The macro/module/compiler code has been reorganized. Hopefully + the only noticable difference is in the babble written when loading + files and packages. + Added CODE-QUOTE (in its own structure of the same name) for use + in writing hygienic macro-generating macros. CODE-QUOTE is the + same as QUOTE except that it does not strip off any of the macro + system's name annotations. + The FLOATNUMS package now exports FLOATNUM?. + Bug fixes: + Fixed phony stack-overflow bug. + Fixed a bug in thread time-debit mechanism. + Made floating point numbers always print as inexact. + Got rid of bogus type-error warnings when using floatnums. + Fixed declaration of call_startup_procedure in c/main.c. + +2/11/98 (version 0.50) + Fixed bug in closed-compiled version of READ-CHAR. + Fixed negative-key bug in integer tables. + +11/18/97 (version 0.49) + Removed some non-portable Kali code that had been accidentally + included in c/extension.c. + +10/29/97 (version 0.48) + The VM's calling convention now has the caller doing protocol checking, + instead of the callee. The *NARGS* register no longer exists. + Scheme's variable-arity procedures (APPLY, MAKE-VECTOR, +, -, etc.) + are usually handled without raising an exception. Calls with an + `atypical' number of arguments are now much faster. + Opcodes were added for >, <=, and >=. + Procedures can take up to about 8k arguments. The limit is determined + by the value of AVAILABLE-STACK-SPACE in scheme/vm/arch.scm. + Compiler detects wrong number of arguments in ((lambda ...) ...). + Removed the dynamic point from the dynamic environment to make + DYNAMIC-WIND behave reasonably with threads. + KILL-THREAD! should work more reliably. + The I/O primitives now pass OS error messages to the exception handlers. + I/O errors when flushing buffers no longer crash the system. + The Pre-Scheme compiler's hack for shadowing global variables with + local copies is no longer used. + Incompatible changes: + The internal thread interface was simplified. + There are some architecture changes; .image files will have to + be rebuilt. + ACCESS-SCHEME-48 and scheme/misc/slib-init.scm have been removed + (thanks to Mike Sperber's updating of slib). + +1/27/97 (version 0.47) + Fixed ,exit and added ,exit-when-done. + CASE now uses EQV? exclusively. + +11/5/96 (version 0.46) + Fixed a few minor thread problems. + opt/analyze.scm now writes to current-noise-port. + DELQ and DELETE now delete every instance, as the documentation claims. + There should be no more spurious heap-overflow interrupts. + Fixed bugs that caused the system to die if stdout blocked. + Template offsets have been increased to two bytes. + Disassembly of flat-lambda now works (fix from Michael Sperber). + +8/23/96 (version 0.45) + Fixed various problems with thread termination and nested schedulers. + Changed thread-internal interface to make schedulers easier to write. + BITWISE-{AND,IOR,XOR} now take an arbitrary number of arguments. + Output ports have their buffers flushed when Scheme 48 terminates. + In keeping with RnRS, CLOSE-{IN,OUT}PUT-PORT are now idempotent. + MODULO now handles negative arguments properly. + +6/20/96 (version 0.44) + The VM's byte-code interpreter and storage management code are + now compiled to separate C files. + The socket code works again. + +5/10/96 (version 0.42-0.43) + Various fixes to the thread and I/O systems. + The Unix interface code is more portable. + EOF (control-D) now resumes running all non-broken threads on + resumed command level. Thus EOF after a keyboard interrupt + (control-C) resumes running the interrupted thread. + +11/30/95 (version 0.41) + The distribution has been reorganized to reduce the number of files + in the top-level directory. + The threads implementation has been replaced with one based on engines + to allow for nested schedulers. + Threads are now included in the initial image. + The I/O system has been fixed and automatic periodic output buffer + flushing has been reinstalled. + Command levels have been integrated with the threads system to ensure + that at most one REPL is active at any time. + CONDVAR has been changed to PLACEHOLDER (condition variables being + something quite different). + ,profile no longer works, it will be fixed in a later version. + MIN and MAX now do inexact contagion. + +4/13/95 (version 0.40) + Renamed error-output-port to current-error-port. + Reinstated ".gdbinit"... + segment->template now takes parent templates debug data as an + argument. + Automatic periodic output buffer flushing has been + temporarily disabled. A future version of the I/O system + will fix it. + Fixed expansion of named LET. + The bummed-define-record-types structure is now gone; use + define-record-types instead. + There is somewhat better syntax checking now. + +8/12/94 (versions 0.38-0.39) + ,profile prints out profiling information + An interrupt is raised after ever GC; the default handler checks + to see if some reasonable amount of storage was reclaimed. + Some of the standard Scheme procedures, including LENGTH, FOR-EACH, + VECTOR, and ASSQ, are now significantly faster. + Making, accessing, and setting records is faster. + tar file now includes the top-level directory + The "scheme-level-2-internal" structure has been renamed to + "usual-resumer". + ` ( . ' is now illegal (as required by the R4RS grammar). + Made DELAY and FORCE comply with R4RS. + The EXPAND optimizer does a topological sort on definitions. + (optimize flat-environments) causes the compiler to produce + flat (instead of nested) lexical environments. + The I/O system has been rewritten to do its own buffering. There + are significant changes to unix.c to support this. See doc/io.txt. + (ERROR-OUTPUT) is now available from the structure i/o. + jar-defrecord has been replaced with a modified bummed-jar-defrecord + Files load about 25% faster, for a number of reasons. + Removed the copy of vm/arch.scm from the rts directory. + Threads and sockets work together; SOCKET-ACCEPT no longer blocks. + The compiler no longer prints out .'s as it compiles definitions. + +7/5/94 (version 0.37) + I/O opcodes now raise an interrupt instead of blocking (they still + block if no corresponding interrupt handler has been installed). + The threads code has been rewritten; threads that block on I/O + do not busy wait and THREAD-READ-CHAR and THREAD-PEEK-CHAR have + been removed. + Attempting to obtain a lock twice or to release an unowned lock + now signal errors. + READ-CHAR-WITH-TIMEOUT returns #F if the timeout occurs. + The socket structure is back in more-packages.scm. + Renamed .gdbinit to gdbinit + tar file now contains a top-level directory + +3/22/94 (version 0.36) + Removed doc/lsc.ps for copyright reasons. + Fixed (* 47123 46039) multiply bug. + Modified vm/README to make it easier to run the VM. + +3/16/94 (version 0.35) + Fixed (exact->inexact 0.1) -> 0..1. bug. + Fixed VM bug that permitted the creation of stored objects with + negative sizes. + +3/8/94 (version 0.34) + "make check" target tests out various features. + Fixes for SGI IRIX 4.0.5 and MIPS RISC/OS 4.51, courtesy + Bryan O'Sullivan. + debug/run.scm and the "medium system" work again now. + misc/static.scm should work on the 68000. + Command processor no longer fluid-binds (interaction-environment) + on recursive entry. + +2/24/94 (version 0.33) + Fixed bug in VM's interrupt system. + Made non-local srcdir work in Makefile. + Added (load-package 'bigbit) to vm/README. + +2/23/94 (version 0.32) + Some incompatible changes to the VM; .image files will have + to be rebuilt. + Improvements to configuration script and to unix.c to support + a wider variety of Unixes. The system should now work + under any Posix-compliant Unix (except maybe for + char-ready?; see comments in unix.c). + Upped the default heap size from 4 meg (2 per semispace) to 6 + meg (3 per semispace). + New command line argument -s for specifying size of + stack buffer. Default is 2500 (words). + $@ -> "$@" in script (thanks to Paul Stodghill for this fix). + Obscure interrupt/exception VM bug fixed. + It is now possible to put an initial heap image into static + memory (effectively allocated by OS process creation). + Immutable initial objects go into static read-only memory, + and mutable initial objects go into static read-write + memory. Initial objects not copied by the GC. There is no + documentation yet, but look at the rules for little and + debug/little.o in the Makefile if you're interested. + +2/13/94 (version 0.31) + Incompatible changes: + In interfaces, all exported syntactic keywords must be + given type :syntax. For example, + (define-interface my-macros + (export (my-macro :syntax) ...)) + Image entry procedures for the ,build command are now + passed a list of strings, not just a single string, for + the command line arguments following -a. + The names of the macros defined in scheme48.h + (pairp, car, string_length, etc.) are now all upper case. + New "configure" script generates Makefile from Makefile.in + and sysdep.h from sysdep.h.in (thanks to Gnu autoconf). + See INSTALL and doc/install.txt. + Bug fixes: + Can now make vectors (strings, etc.) as big as the amount + of heap space available (but you're still screwed if you + try to make one bigger than 2^23-1 bytes - don't do it). + Non-ANSI-ness fixed in scheme48vm.c (jump out of, then + back into, a block expected block-local variables to be + unchanged). + Fixed big/external.scm (had VECTOR-POSQ instead of ENUM). + In (define-syntax foo bar) you got an error if bar was a + variable reference. + Plugged a storage leak (file-environments table in + env/debug.scm). Images made with ,build were too large. + Flushed extraneous delay from make-reflective-tower. + Renamed variables in Makefile to resemble Gnu standards. + Fixed definition of LINKER_RUNNABLE in Makefile. + Added doc/call-back.txt. + Fixed define-enumerated documentation (doc/big-scheme.txt). + Environment maps no longer retained for things in initial.image + and scheme48.image. This makes scheme48.image about 170K + smaller. + +2/3/94 (version 0.30) + Faster EXPT. + FLOATNUMS improvement: (inexact->exact ) should now + work, e.g. + (inexact->exact (/ 1. 3.)) => 6004799503160661/18014398509481984 + Reinstated ACCESS-SCHEME-48 for the benefit of PSD (portable + scheme debugger) and a certain other software package that + shall remain nameless. It only knows about a small number of + procedures, including things like ERROR and FORCE-OUTPUT. + Various changes to support the Pre-Scheme compiler, notably + SET-REFLECTIVE-TOWER-MAKER!. + Incompatible change to the ENUMERATED structure: the names + foo/bar no longer become defined. Write (enum foo bar) + instead. This will macro expand into the correct small + integer. + +1/30/94 (version 0.29) + Fixed ps_run_time() to call sysconf() to find out how many + ticks there are per second. It used to assume 60. This + affects the output of the ,time command, so don't try + comparing numbers from this version with numbers from older + versions. + ,time command will now accept a command, e.g. + ,time ,load foo.scm. + It appears that if multiple arguments follow -a on the + argument line, they are concatenated together with spaces + separating them and passed to the startup procedure. I + don't know how long this has worked. This will change in + the future so that the startup procedure gets a list of + strings. + Installed what used to be called the GENERAL-TABLES structure + as the TABLES structure used by the system. This allows + the use of other comparison predicates besides EQ?, and + eliminates some code that had a restrictive copyright + notice. + ENUM, NAME->ENUMERAND, and ENUMERAND->NAME are all macros. + Enumerated types themselves are now macros as well. + +1/23/94 Fixed bad multiplication bug in VM: (* 214760876 10) was + returning 125112. + Moved RECORD-TYPE? and RECORD-TYPE-FIELD-NAMES from the + RECORDS-INTERNAL interface to the RECORDS interface, for + a somewhat closer approximation to MIT Scheme. + Various type system improvements. + Still no documentation for the ,exec package, but see + link/load-linker.exec for an example. + New generic function feature, exported by the METHODS + interface (see interfaces.scm), almost like in a certain + dynamic object-oriented language. + +1/11/94 (version 0.27) + Change: + The isomorphism used by CHAR->INTEGER and INTEGER->CHAR is + no longer ASCII. This change was introduced in order to + assist the development of portable programs. If you need + ASCII encoding, you should open the ASCII structure and + use the procedures CHAR->ASCII and ASCII->CHAR. + Features: + The help system is somewhat improved. + New form DEFINE-STRUCTURE defines a single structure. + Incompatible changes to package system: + Renamed DEFINE-PACKAGE to DEFINE-STRUCTURES + Renamed DEFINE-STRUCTURE to DEFINE + Renamed all the base types from FOO to :FOO. E.g. + :SYNTAX, :VALUE, :PAIR, etc. + Other: + Removed socket support due to restrictive copyright on some + of the C code that was in extension.c. + +12/21/93 ,take has been flushed in favor of ,exec ,load. Commands are + now accessed via a distinguished package instead of a table. + Documentation pending. + Postscript (.ps) files now included in doc/ subdirectory. (I + thought they had been there all along, but apparently I was + wrong.) + Enhanced, but still kludgey, floating point support. Use + ,open floatnum. + +12/12/93 (version 0.26) + NetBSD port. + Hacked write-level and write-depth for inspecting circular + structure. + Recursive FORCEs signal errors, e.g. + (force (letrec ((loser (delay (force loser)))) loser)) + +12/7/93 (version 0.25) + Bug fix: + filenames.make can now be remade using initial.image. This + means that you can snarf a distribution and then edit + USUAL-FEATURES before making scheme48.image. + + +12/6/93 Incompatible changes: + Change of terminology: "signature" --> "interface". + This means that DEFINE-SIGNATURE is now called + DEFINE-INTERFACE, etc. + Some structures have been renamed: + condition -> conditions + continuation -> continuations + exception -> exceptions + queue -> queues + port -> ports + record -> records, record-internal -> records-internal + table -> tables + template -> templates + The ,load-into command has been removed. Use ,in ... ,load + instead (see below), e.g. + ,in mumble ,load myfile.scm + The heap size for -h is specified in words, not bytes. As + before, the size must account for both semispaces; -h 2n + means n words per semispace. This change was actually + made a while ago, but I was confused as to what it meant. + Bug fixes: + #e1.7 reads as 17/10, (exact? 1+1.0i) => #f, and 1.0+i prints. + Features: + Things like ((structure-ref scheme if) 1 2 3) work. + The following commands now take arbitrary commands to execute + in the specified package, not just forms: + ,config ,user ,for-syntax ,in + For example, you can say + ,in mumble ,trace foo + This subsumes the functionality of the ,load-into and + ,load-config commands. + Dynamic loading of shared libraries for System V systems + (untested). + Documentation: + Somewhat improved. user-guide.txt now lists most of the + interesting built-in packages. lsc.ps is a draft of "A + Tractable Scheme Implementation," a paper submitted to Lisp + and Symbolic Computation. See also doc/big-scheme.txt, + doc/thread.txt, and doc/external.txt. + + +10/30/93 LET-SYNTAX and LETREC-SYNTAX. + Arrays (see big/array.scm). + Lots of internal changes. + +7/20/93 Features: + Type system. See doc/types.txt. + +7/4/93 Features: + New define-package clause (for-syntax *). + E.g. (define-package ((my-package ...)) + (open ...) + (for-syntax (open scheme my-utilities) + (files more-crud-for-syntax)) + ...) + A file name to package map is now used by the emacs + interface. Whenever you load a file, or zap from a file that + hasn't been previously loaded or zapped, the package in + which forms are being evaluated is remembered in a table. + The next time you zap some forms from the same file, they + will be evaluated in that package. + Sometimes you may get an association you don't want. In that + situation, you can use the ,forget command to delete an + entry in the table. + A new ,push command goes to a deeper command level. + Experimental "command preferred" command processor mode: if + you give the command ",form-preferred off", commands will + be "preferred" to forms, meaning that you don't need to + type a comma before giving a command. To see the value + of a variable FOO you have to say (begin foo). + Experimental "no levels" command processor mode: if you + give the command ",levels off", then an error will not + push a new command level. If you want to ignore an + error, you don't need to take any action - further + evaluations will happen at top level. If you want to + enter the inspector or get a preview, you can issue these + commands or a ,push command immediately after the error + occurs (more precisely, any time until the focus object + is set by some other command). + All of the mode-control commands (batch, bench, + break-on-warnings, form-preferred, and levels) take + an optional argument. When no argument is given, they + will toggle the corresponding mode. With an argument of + ON or OFF, they turn the mode on or off. + The ,flush and ,keep commands have been made more flexible + and verbose. + + +6/18/93 Incompatible changes: + The access-scheme48 procedure has gone away. Use ,open + or the module system instead. + The user, configuration, and for-syntax packages no longer + have variables bound to them in the configuration package. + Where previously you said: Now you should say: + ,in user
    ,user + ,in config ,config + ,in for-syntax ,for-syntax + ,load-into config ,load-config + ,load-into for-syntax ,for-syntax (load "file") + + Features: + There is an ,expand command for debugging macros. + The ,open command takes any number of structure names, and opens + them all (like ,new-package). + New procedure DEFINE-INDENTATION exported by the PP structure. + E.g. (define-indentation 'let-fluid 1) is like Gnu emacs's + (put 'let-fluid 'scheme-indent-hook 1). + The inspector simplifies generated names in continuation + source code display. E.g. when formerly it said + "Waiting for (#{Generated lambda} () (x->node (car exps)))" + now it says + "Waiting for (lambda () (x->node (car exps)))" + Macros can signal syntax errors by returning input expression + unchanged. (Comparison uses EQ?.) + + Documentation: + The doc/ directory contains a draft of a "Scheme 48 + Progress Report." + + Cleanup: + Procedure NULL-TERMINATE added to structure EXTERNALS's + signature. + "Vulgar Scheme" renamed to "Big Scheme". + Two new subdirectories, env/ (for programming environment) + and big/ (for Big Scheme), now contain most of what was + in the misc/ directory. + Several source files that were in the top level and link/ + directories have moved to the env/ and alt/ directories. + + +5/6/93 Bug fixes: + Fixed -h command line switch. The size was being improperly + divided by 4, so if you asked for an N megabyte heap, you'd + actually only get an N/4 megabyte heap. + Nested backquotes were broken for a while; should be fixed + now. + + Features: + Quoted structure is read-only: e.g. (set-car! '(a b) 3) will + produce an exception. + ,config [] and ,user [] are like ,in . + Unix socket support; see misc/socket.scm. + Now using gzip instead of compress for distributions. + ,open command offers to load packages. + A .gdbinit file sets a breakpoint at CM's exception raising + code, and defines a handy "preview" command. + +1/18/93 Feature: + Scheme 48 distributions now have version numbers. The + version number is printed in the image startup message. + Please include it in bug reports. + The module system is now documented. See doc/module.tex. + +12/17/92 Bug fixes: + Macro templates of the form (x ... y) are supported. + Macro templates are now less fussy about meta-variable + rank: you can do "(x y) ..." even when the rank of either + x or y (but not both) is too low; the low-ranking text + will be copied as many times as necessary. (A + meta-variable's "rank" is the number of ...'s it sits + under in the left-hand side of the rewrite rule.) + SYNTAX-RULES is now itself hygienic. This means you can + have a meta-variable named CAR, for instance. + + New development environment features: + Commands now start with comma (",") instead of colon + (":"). (Easier to type since it's not shifted.) + values, call-with-values, dynamic-wind, eval, + interaction-environment, and scheme-report-environment + added per upcoming Revised^5 Scheme report. See + doc/meeting.tex. + Modifications to quoted structure will now be detected and + reported as errors. + An interrupt will occur if an insufficient amount of memory + is reclaimed by a garbage collection. + Inspector now accepts arbitrary command processor commands + (with or without leading comma) + ,keep command controls retention of debugging information. + + Features removed: + #\page and #\tab. These aren't in the Scheme report. + Their absence in Scheme 48 will encourage portability. + access-scheme48 works with fewer names than before. Use the + package system instead. + Complex numbers not in the system, by default. Get them + back by changing usual-features in more-packages.scm. + + Features changed: + Many changes to package system. See doc/module.tex. + The :identify-image command is gone. Instead, supply a + second argument (optional) to the ,dump command. + The inspector's TEM command has been shortened to T. + + Internal changes and features: + Stored objects types are now part of the virtual machine + architecture, i.e. known to the byte-code compiler. + Run-time system is split up into many little modules. + File names are retained in debug database. (But not used for + anything yet...) + Tweaks to table package reduce standard image size by 50K + and increase compiler speed by 7%. + Immutability bit in object headers. + Weak pointers. + +7/18/92 Features removed: + Table package's default hash function no longer supports + string, pairs, or vectors. + +7/9/92 Bug fixes: + (- 0 -536870912) + Inspector now uses command i/o ports instead of current ones + Inexact integers print as N. instead of #iN + Throwing back into a call-with-....put-port now produces a + warning instead of an error + + Feature fixes: + In DEFINE-PACKAGE, OPEN no longer implies ACCESS. + misc/receive.scm renamed to rts/values.scm, made to conform + with Revised^5 Report, and installed internally. + + Features: + New :load-package command. Uses file names in (file ...) clause + of a define-package. These are interpreted relative to the + directory in which the file containing the define-package + was found. + #\tab and #\page now print this way. + + +6/17/92 Bug fixes: + Fixed bug in modulo. + Flushed LAST-PAIR (which disappeared between R^3 and R^4). + DEFINE-SYNTAX and SYNTAX-RULES now exist. + CEILING, FLOOR, and ROUND now exist. + GCD and LCM are now n-ary. + STRING-CI=? and STRING-COPY fixed. + STRING->SYMBOL now copies its argument before handing it to + INTERN. + =, <, etc. now work with more than two arguments. + CHAR-READY? exists. + Calls via APPLY are now tail-recursive. + DISPLAY of vectors and lists works (ugh). + + Development environment improvements: + Type ? at inspector to get list of inspector commands. + Inspector D command goes to next continuation. + Inspector M command shows more of a long menu. + Inspector TEM command goes to a continuation's or closure's + template. + For closures and continuations, inspector displays local + variables with their names. + For continuations, inspector displays source code for + expression into which control will return. + Multiple command loop levels. EOF (control-D) now only pops + out a single level. :reset pops all the way out. :level n + goes out to level n. + Can disable benchmark mode. + Procedures made with (let ((f (lambda ...))) ...) now print + with names. + + Features: + Package system: special forms define-package and package-ref; + command processor commands :set-package, :load-into, + :clear-package, :new-package, :export, :open-package, etc. + In misc directory: threads, queues, extended ports, format, etc. + + Changes to system environment: + user-initial-environment -> user-package + record-updator -> record-modifier + primitive-throw superseded by with-continuation + ash -> arithmetic-shift + New bootstrap regime. + Support for threads: alarm clock interrupt, etc. + + Etc.: + Liberal COPYRIGHT file, and a little notice in each source file. + INSTALL and NEWS split off from README. + doc.txt renamed to user-guide.txt. + The Makefile now provides two ways to make "s48" for + installation. One depends on the exec #! script execution + feature and the other doesn't. + "make" targets for testsys.image and little.image. + Runs Jaffer's test suite and library. + Flushed s48.el. Use cmuscheme instead. + + +9/5/90 Command processor argument parser revamped. + :load, :trace, and :untrace commands take arbitrary number + of arguments. Argument to :proceed is optional. + New (but undocumented) :identify-image command. + Better error messages: wrong number of arguments, undefined + variable. + +, *, min, max, apply are now n-ary; -, /, make-string, + make-vector, read-char, peek-char, write-char have + appropriate argument optionality. + Better internal support for macros; not yet ready for release. + Added STRING as per R^3.99RS. + More testing of Scheme version of bytecode interpreter. + Better scoping of ##; files can't see command processor context. + OR and CASE don't cons closures. + VM checks for non-existent heap image file, gives error + message instead of "bus error". + Numerous internal changes in compiler and exception system. + Fixed charnumber. + +8/26/90 Tested (link-system) inside of T; seems to work. + Benchmark mode available via :BENCH command. + System is 15K bigger due to new fatter global environment + representations. + Inspector abbreviation improved. + Disassembler now works on continuations, sort of. + +7/26/90 ((lambda ...) ...) no longer makes a closure + Features now in default system: + :inspect + :dis[assemble] + Generic arithmetic: bignums, rationals, complexes + rationalize + :time command is more verbose + MOREFILES variable in Makefile for loading extra stuff + Default heap size increased to 2 megabytes per semispace diff --git a/doc/no-leaf-env.txt b/doc/no-leaf-env.txt new file mode 100644 index 0000000..87a6967 --- /dev/null +++ b/doc/no-leaf-env.txt @@ -0,0 +1,175 @@ +Return-Path: +Date: Mon, 14 Jun 93 14:34:40 -0400 +To: jar@cs.cornell.edu +Subject: environments for leaf procedures +From: kelsey@flora.ccs.neu.edu +Sender: kelsey@ccs.neu.edu + + +I merged the no-leaf-environments code back into the system, and this +time it may be worth it. Loading pp.scm sped up by 2%, even though +the compiler is doing more work. Benchmark times (in seconds): + + old new speedup +quicksort 1.48 1.39 6% +towers 1.05 1.05 0% +matrix-multiply 3.32 3.10 7% +matrix-multiply2 1.94 1.80 7% + +Local variable names are screwed up: + + > (define (f x) (let ((y 4)) (+ x y))) + > (f 'a) + + Error: exception + (+ 'a 4) + 1> ,debug + '#{Continuation (pc 13) f} + + [0] 4 + [1: y] 'a + inspect: + +There is probably a simple fix for this. + +Here is the diff: + +% diff comp.scm comp.scm.save +26d25 +< (define $compiling-leaf (make-fluid 'no)) +28,33d26 +< (define (note-not-leaf!) +< (set-fluid! $compiling-leaf 'no)) +< +< (define (compiling-leaf?) +< (eq? 'yes (fluid $compiling-leaf))) +< +63,82c56,66 +< (deliver-value (if (env-ref? den) +< (local-variable den cenv depth #f) +< (instruction-with-variable op/global exp den #f)) +< cont))) +< +< (define (local-variable den cenv depth set?) +< (let ((back (env-ref-back den cenv)) +< (over (env-ref-over den))) +< (if (and (compiling-leaf?) +< (= back 0)) +< (instruction (if set? op/stack-set! op/stack-ref) +< (+ (- over 1) depth)) +< (let ((back (if (compiling-leaf?) (- back 1) back))) +< (if set? +< (instruction op/set-local! back over) +< (case back +< ((0) (instruction op/local0 over)) ;+++ +< ((1) (instruction op/local1 over)) ;+++ +< ((2) (instruction op/local2 over)) ;+++ +< (else (instruction op/local back over)))))))) +--- +> (if (env-ref? den) +> (let ((back (env-ref-back den cenv)) +> (over (env-ref-over den))) +> (deliver-value (case back +> ((0) (instruction op/local0 over)) ;+++ +> ((1) (instruction op/local1 over)) ;+++ +> ((2) (instruction op/local2 over)) ;+++ +> (else (instruction op/local back over))) +> cont)) +> (deliver-value (instruction-with-variable op/global exp den #f) +> cont)))) +143,145c127,132 +< (if (env-ref? den) +< (local-variable den cenv depth #t) +< (instruction-with-variable op/set-global! name den #t))) +--- +> (cond ((env-ref? den) +> (instruction op/set-local! +> (env-ref-back den cenv) +> (env-ref-over den))) +> (else +> (instruction-with-variable op/set-global! name den #t)))) +203d189 +< (note-not-leaf!) ; this isn't strictly necessary, but it keeps things simpler +222,231c208,215 +< (cond ((return-cont? cont) +< code) +< (else +< (note-not-leaf!) ; this isn't strictly necessary, but it keeps things simpler +< (sequentially (instruction-with-offset&byte op/make-cont +< (segment-size code) +< depth) +< (note-source-code (cont-source-info cont) +< code) +< (cont-segment cont))))) +--- +> (if (return-cont? cont) +> code +> (sequentially (instruction-with-offset&byte op/make-cont +> (segment-size code) +> depth) +> (note-source-code (cont-source-info cont) +> code) +> (cont-segment cont)))) +264d247 +< (note-not-leaf!) +280,315c263,284 +< (let-fluids $compiling-leaf 'maybe +< (lambda () +< (let ((code (really-compile-lambda-code formals body cenv name))) +< (if (eq? (fluid $compiling-leaf) 'maybe) +< (let-fluids $compiling-leaf 'yes +< (lambda () +< (really-compile-lambda-code formals body cenv name))) +< code))))) +< +< (define (really-compile-lambda-code formals body cenv name) +< (let* ((nargs (number-of-required-args formals)) +< (vars (normalize-formals formals)) +< (cenv (if (null? formals) +< cenv ;+++ +< (bind-vars vars cenv)))) +< (sequentially +< (cond ((n-ary? formals) +< (sequentially +< (instruction op/make-rest-list nargs) +< (instruction op/push) +< (if (compiling-leaf?) +< empty-segment +< (instruction op/make-env (+ nargs 1))))) +< ((null? formals) +< (note-not-leaf!) ; no point if no variables +< empty-segment) +< ((compiling-leaf?) +< empty-segment) +< (else +< (instruction op/make-env nargs))) +< (note-environment +< vars +< (compile-body body +< cenv +< 0 +< (return-cont name)))))) +--- +> (if (null? formals) +> (compile-body body ;+++ Don't make null environment +> cenv +> 0 +> (return-cont name)) +> (sequentially +> (let ((nargs (number-of-required-args formals))) +> (if (n-ary? formals) +> (sequentially +> (instruction op/make-rest-list nargs) +> (instruction op/push) +> (instruction op/make-env (+ nargs 1))) +> (instruction op/make-env nargs))) +> (let* ((vars (normalize-formals formals)) +> (cenv (bind-vars vars cenv))) +> (note-environment +> vars +> (compile-body body +> cenv +> 0 +> (return-cont name))))))) +> + diff --git a/doc/package.txt b/doc/package.txt new file mode 100644 index 0000000..0532411 --- /dev/null +++ b/doc/package.txt @@ -0,0 +1,81 @@ +-- this file is probably obsolete -- + +The package system interface. Much too complicated. + +Signatures + + make-simple-signature + make-compound-signature + signature? + signature-ref + signature-walk + +Structures + + make-structure + structure? + structure-signature + structure-package + structure-name + +Packages + + make-package + make-simple-package ;start.scm + +Lookup and definition operations + + package-lookup + package-lookup-type ;comp.scm + package-find-location ;rts/env.scm + package-lookup-location ;segment.scm + probe-package + package-check-assigned + package-check-variable + + package-define! + package-define-type! ;hmm. + package-ensure-defined! + +Things needed by the form/file/package scanner + + for-each-definition ;for integrate-all-primitives! + package-accesses ;for scan-package + package-clauses ;for scan-package + package-file-name ;for scan-package + package-opens ;for scan-package + package-evaluator ;for define-syntax + package-for-syntax ;for define-syntax + +Miscellaneous + + $note-undefined ;eval.scm + noting-undefined-variables ;eval.scm, etc. + package-uid ;eval.scm + set-shadow-action! ;eval.scm + verify-later! ;for the define-structures macro + reset-packages-state! ;Makefile - for linker + initialize-reified-package! ;for reification + transform-for-structure-ref ;for reification ? + +Inessential (for package mutation, programming environment) + + check-structure + package-integrate? ;env/debug.scm + set-package-integrate?! ;env/debug.scm + package-loaded? ;env/load-package.scm + set-package-loaded?! ;env/load-package.scm + package-name ;env/command.scm + package-name-table ;env/debuginfo.scm + package-open! ;env/debug.scm + package-system-sentinel ;env/command.scm + package-unstable? ;env/pacman.scm + package? ;env/command.scm + undefined-variables ;env/debug.scm + +Location names (also inessential) + + flush-location-names + location-name + location-name-table + location-package-name diff --git a/doc/scheme48.man b/doc/scheme48.man new file mode 100644 index 0000000..6463bae --- /dev/null +++ b/doc/scheme48.man @@ -0,0 +1,81 @@ +.TH LS48 1 +.\" File scheme48.man: Manual page template for Scheme 48. +.\" Replace LS48 with the name of your default image and LLIB with the +.\" directory containing scheme48vm and default image. +.SH NAME +LS48 \- a Scheme interpreter +.SH SYNOPSIS +.B LS48 +[-i image] [-h heapsize] [-a argument] +.SH DESCRIPTION +.B LS48 +is an implementation of the Scheme programming language as described in +the +.I "Revised^4 Report on the Algorithmic Language Scheme." +A runnable system requires two parts, an executable program that implements +the Scheme 48 virtual machine, and an image that is used to initialize +the store of the virtual machine. +.B LS48 +is a shell script that starts the virtual machine with an image that runs +in a Scheme command loop. +.PP +The +.B LS48 +command loop reads Scheme expressions, +evaluates them, and prints their results. +It also executes commands, which are identified by an initial comma character. +Type the command +.I ,help +to receive a list of available commands. +.PP +The +.B \-h +option causes +.IR heapsize +words to be allocated for both semispaces of the copying garbage +collector. One word is four bytes. Cons cells are currently 3 words, +so if you want to make sure you can allocate, say, a million cons +cells, you should specify +.B \-h +6000000 (actually a little more, to account for the initial heap +image and breathing room). +.PP +The +.I ,dump +and +.I ,build +commands put heap images in files. +The +.B \-i +option causes the initial heap image to be taken from file +.IR image . +The +.B \-a +option causes a list of strings to be passed as the argument +to an image generated using the +.I ,build +command. The first argument to +.I ,build +is a procedure that is passed +the arguments following +.B \-a +and which should return an integer (which is the +return value of the Scheme 48 process). +.PP +.nf + > ,build (lambda (a) (display a) (newline) 0) foo.image + > ,exit + $ LS48 -i foo.image -a mumble + mumble + $ +.PP +.fi +.SH FILES +.TP 40 +.B LLIB/scheme48vm +the virtual machine. +.TP +.B LLIB/LS48.image +the default image. +.SH BUGS +Procedure calls with more than 63 explicit arguments might not work. diff --git a/doc/src/code.tex b/doc/src/code.tex new file mode 100644 index 0000000..aa8de05 --- /dev/null +++ b/doc/src/code.tex @@ -0,0 +1,94 @@ +% Latex Macros for Lisp code in text. +% Based on macros found in C. Rich's library. + +\makeatletter + +% \vobeyspaces turns all spaces into non-breakable spaces. +% Note: this is like \@vobeyspaces except without spurious space in defn. + +{\catcode`\ =\active\gdef\vobeyspaces{\catcode`\ =\active\let =\@xobeysp}} + +% \def\vobeytabs turns all tabs into 8 non-breakable spaces + +{\catcode`\^^I=\active\gdef\vobeytabs{\catcode`\^^I=\active\let^^I=\xvobeytabs}} + +\def\xvobeytabs{\@xobeysp\@xobeysp\@xobeysp\@xobeysp\@xobeysp\@xobeysp\@xobeysp\@xobeysp} + +% \vobeylines turns all cr's into non-breakable \par's + +{\catcode`\^^M=\active\gdef\vobeylines{\catcode`\^^M=\active\let^^M=\xvobeylines}} + +\def\xvobeylines{\par\penalty10000} + +% \obeycrsp turns cr's into non-breakable spaces + +{\catcode`\^^M=\active\gdef\obeycrsp{\catcode`\^^M=\active\let^^M=\@xobeysp}} + +%% \@noligs prevents ?` and !` from being treated as ligatures +%% added 19 April 86 [copied from Latex sources] + +\begingroup +\catcode``=13 +\gdef\@noligs{\let`=\@lquote} +\endgroup + +% Set up code environment, in which most of the common special characters +% appearing in code are treated verbatim, namely: _ # & ^ $ ~ @ " % +% *** JAR NEEDED $ AND _ IN SOME CODE *** + +% Note: \ { } are still enabled so that macros can be called in this +% environment. Use \\, \{ and \} to use these characters verbatim +% in this environment. + +% Note: this environment allows no breaking of lines whatsoever; not +% at spaces or hypens. To arrange for a break use the standard \- macro, +% or the \= macro which breaks, but inserts nothing. This is useful, +% for example for allowing hypenated identifiers to be broken, e.g. +% FOO-\=BAR. + +\def\setupcode{\parsep=0pt\parindent=0pt + \tt\frenchspacing\catcode``=13\@noligs% + \def\\{\char`\\}% + \@makeother\#\@makeother\&\@makeother\^%\@makeother\_\@makeother\$% + \@makeother\`\@makeother\'% + \@makeother\~\@makeother\@\@makeother\"\@makeother\%\vobeytabs\vobeyspaces} + +% Code environment as described above. Note that blank lines are +% not preserved, and lines are not kept on one page. Code is +% indented by the same amount as quotes. +% Note: to increase left margin, use \leftmargini=1in. +% was {\list{}{\parsep=0pt}\item[]\setupcode\obeylines}% +% then {\list{\parsep=0pt\listparindent=0pt\leftmargin=0pt}{}\item[]\setupcode% + +\newenvironment{bigcode}% + {\list{}{\parsep=0pt\leftmargin=0pt\labelwidth=0pt\itemindent=0pt% +\listparindent=0pt}\item[]\setupcode% +\obeylines}% + {\endlist} + +% Code is just like bigcode, but everything inside is kept on one page +% Note: This actually works by setting a huge penalty for breaking +% between lines of code. +% was {\list{}{\parsep=0pt}\item[]\setupcode\vobeylines}% + +\newenvironment{code}% + {\list{}{\parsep=0pt\leftmargin=0pt\labelwidth=0pt\itemindent=0pt% +\listparindent=0pt}\item[]\setupcode% +\vobeylines}% + {\endlist} + +% Reasonable separation between lines of code + +\newcommand{\codeskip}{\penalty0\vspace{2ex}} + +% \cd is used to build a code environment in the middle of text. +% Note: only difference from display code is that cr's are taken +% as unbreakable spaces instead of \par's. + +\newcommand{\cd}{\begingroup\setupcode\obeycrsp\startcode} + +\newcommand{\startcode}[1]{#1\endgroup} + +%\setbox0\hbox{\@xobeysp}\hline{43\wd0} + +\makeatother diff --git a/doc/src/external.tex b/doc/src/external.tex new file mode 100644 index 0000000..024f8cb --- /dev/null +++ b/doc/src/external.tex @@ -0,0 +1,888 @@ +\documentclass{article} +\usepackage{hyperlatex} + +\include{proto} + +% Make each section be a separate HTML file. +\setcounter{htmldepth}{1} + +\W\newcommand{\langle}{<} +\W\newcommand{\rangle}{>} + +\newcommand{\meta}[1]{{\noindent\mbox{\textrm{$\langle$#1$\rangle$}}}} +\newcommand{\hyper}[1]{\meta{#1}} +\newcommand{\hyperi}[1]{\hyper{#1$_1$}} +\newcommand{\hyperii}[1]{\hyper{#1$_2$}} +\newcommand{\hyperj}[1]{\hyper{#1$_i$}} +\newcommand{\hypern}[1]{\hyper{#1$_n$}} +\renewcommand{\var}[1]{\noindent\mbox{\textit{#1}}} +\newcommand{\vari}[1]{\var{#1$_1$}} +\newcommand{\varii}[1]{\var{#1$_2$}} +\newcommand{\variii}[1]{\var{#1$_3$}} +\newcommand{\variv}[1]{\var{#1$_4$}} +\newcommand{\varj}[1]{\var{#1$_j$}} +\newcommand{\varn}[1]{\var{#1$_n$}} + +\W\newcommand{\frenchspacing}{} +\W\newcommand{\textnormal}[1]{#1} + +\newcommand{\defining}[1]{{\emph{#1}}} + +\newcommand{\exprtype}{syntax} + +\W\newcommand{\unskip}{} +\W\newcommand{\textrm}[1]{#1} + +\newcommand{\dotsfoo}{\ldots\texonly{\thinspace}} + +\htmltitle{Mixing Scheme 48 and C} +\htmladdress{\begin{rawhtml}Mike + Sperber, Richard Kelsey\end{rawhtml}} + +\title{Using C code with Scheme 48} +\author{Mike Sperber\\\texttt{\small sperber@informatik.uni-tuebingen.de}\\ + Richard Kelsey\\\texttt{\small kelsey@research.nj.nec.com} + } + +\makeindex + +\begin{document} + +\maketitle + +\begin{abstract} +This document describes an interface for calling C functions + from Scheme, calling Scheme functions from C, and allocating + storage in the Scheme heap. +These facilities are designed to link + existing C libraries into Scheme~48 in order to use them from Scheme. +To this end, Scheme~48 manages stub functions in C that + negotiate between the calling conventions of Scheme and C and the + memory allocation policies of both worlds. +No stub generator is available yet, but writing them is a straightforward task. + +\end{abstract} + +\section{Available Facilities} +\label{sec:facilities} + +The following facilities are available for interfacing between + Scheme~48 and C: +% +\begin{itemize} +\item Scheme code can call C functions. +\item The external interface provides full introspection for all + Scheme objects. External code may inspect, modify, and allocate + Scheme objects arbitrarily. +\item External code may raise exceptions back to Scheme~48 to + signal errors. +\item External code may call back into Scheme. Scheme~48 + correctly unrolls the process stack on non-local exits. +\item External modules may register bindings of names to values with a + central registry accessible from + Scheme. Conversely, Scheme code can register shared + bindings for access by C code. +\end{itemize} +% +This document has three parts: the first describes how bindings are + moved from Scheme to C and vice versa, the second tells how to call + C functions from Scheme, and the third covers the C interface + to Scheme objects, including calling Scheme procedures, using the + Scheme heap, and so forth. + +\subsection{Scheme structures} + +The structure \code{external-calls} has + most of the Scheme functions described here. +The others are in + \code{dynamic-externals}, which has the functions for dynamic loading and + name lookup from +\texonly{Section~\ref{dynamic-externals},} +\htmlonly{the section on \link{Dynamic Loading}{dynamic-externals},} + and \code{shared-bindings}, which has the additional shared-binding functions + described in +\texonly{Section~\ref{more-shared-bindings}.} +\htmlonly{the section on the \link{complete shared-binding interface}{more-shared-bindings}.} + +\subsection{C naming conventions} + +The names of all of Scheme~48's visible C bindings begin + with `\code{s48\_}' (for procedures and variables) or + `\code{S48\_}' (for macros). +Whenever a C name is derived from a Scheme identifier, we + replace `\code{-}' with `\code{\_}' and convert letters to lowercase + for procedures and uppercase for macros. +A final `\code{?}' converted to `\code{\_p}' (`\code{\_P}' in C macro names). +A final `\code{!}' is dropped. +Thus the C macro for Scheme's \code{pair?} is \code{S48\_PAIR\_P} and + the one for \code{set-car!} is \code{S48\_SET\_CAR}. +Procedures and macros that do not check the types of their arguments + have `\code{unsafe}' in their names. + +All of the C functions and macros described have prototypes or definitions + in the file \code{c/scheme48.h}. +The C type for Scheme values is defined there to be \code{s48\_value}. + +\section{Shared bindings} +\label{sec:shared-bindings} + +Shared bindings are the means by which named values are shared between Scheme + code and C code. +There are two separate tables of shared bindings, one for values defined in + Scheme and accessed from C and the other for values going the other way. +Shared bindings actually bind names to cells, to allow a name to be looked + up before it has been assigned. +This is necessary because C initialization code may be run before or after + the corresponding Scheme code, depending on whether the Scheme code is in + the resumed image or is run in the current session. + +\subsection{Exporting Scheme values to C} + +\begin{protos} +\proto{define-exported-binding}{ name value}{shared-binding} +\end{protos} + +\begin{protos} +\cproto{s48\_value s48\_get\_imported\_binding(char *name)} +\cproto{s48\_value S48\_SHARED\_BINDING\_REF(s48\_value shared\_binding)} +\end{protos} + +\noindent\code{Define-exported-binding} makes \cvar{value} available to C code + under as \cvar{name} which must be a \cvar{string}, creating a new shared + binding if necessary. +The C function \code{s48\_get\_imported\_binding} returns the shared binding + defined for \code{name}, again creating it if necessary. +The C macro \code{S48\_SHARED\_BINDING\_REF} dereferences a shared binding, + returning its current value. + +\subsection{Exporting C values to Scheme} + +\begin{protos} +\cproto{void s48\_define\_exported\_binding(char *name, s48\_value value)} +\end{protos} + +\begin{protos} +\proto{lookup-imported-binding}{ string}{shared-binding} +\proto{shared-binding-ref}{ shared-binding}{value} +\end{protos} + +\noindent These are used to define shared bindings from C and to access them + from Scheme. +Again, if a name is looked up before it has been defined, a new binding is + created for it. + +The common case of exporting a C function to Scheme can be done using + the macro \code{S48\_EXPORT\_FUNCTION(\emph{name})}. +This expands into + +\code{s48\_define\_exported\_binding("\cvar{name}", % + s48\_enter\_pointer(\cvar{name}))} + +\noindent which boxes the function into a Scheme byte vector and then + exports it. +Note that \code{s48\_enter\_pointer} allocates space in the Scheme heap + and might trigger a + \link{garbage collection}[; see Section~\ref{gc}]{gc}. + +\begin{protos} +\syntaxprotonoresult{import-definition}{ \cvar{name}} +\syntaxprotonoresult{import-definition}{ \cvar{name c-name}} +\end{protos} +These macros simplify importing definitions from C to Scheme. +They expand into + +\code{(define \cvar{name} (lookup-imported-binding \cvar{c-name}))} + +\noindent{}where \cvar{c-name} is as supplied for the second form. +For the first form \cvar{c-name} is derived from \cvar{name} by + replacing `\code{-}' with `\code{\_}' and converting letters to lowercase. +For example, \code{(import-definition my-foo)} expands into + +\code{(define my-foo (lookup-imported-binding "my\_foo"))} + +\subsection{Complete shared binding interface} +\label{more-shared-bindings} + +There are a number of other Scheme functions related to shared bindings; + these are in the structure \code{shared-bindings}. + +\begin{protos} +\proto{shared-binding?}{ x}{boolean} +\proto{shared-binding-name}{ shared-binding}{string} +\proto{shared-binding-is-import?}{ shared-binding}{boolean} +\protonoresult{shared-binding-set!}{ shared-binding value} +\protonoresult{define-imported-binding}{ string value} +\protonoresult{lookup-exported-binding}{ string} +\protonoresult{undefine-imported-binding}{ string}{} +\protonoresult{undefine-exported-binding}{ string}{} +\end{protos} + +\noindent\code{Shared-binding?} is the predicate for shared-bindings. +\code{Shared-binding-name} returns the name of a binding. +\code{Shared-binding-is-import?} is true if the binding was defined from C. +\code{Shared-binding-set!} changes the value of a binding. +\code{Define-imported-binding} and \code{lookup-exported-binding} are + Scheme versions of \code{s48\_define\_exported\_binding} + and \code{s48\_lookup\_imported\_binding}. +The two \code{undefine-} procedures remove bindings from the two tables. +They do nothing if the name is not found in the table. + +The following C macros correspond to the Scheme functions above. + +\begin{protos} +\cproto{int\ \ \ \ \ \ \ S48\_SHARED\_BINDING\_P(x)} +\cproto{int\ \ \ \ \ \ \ S48\_SHARED\_BINDING\_IS\_IMPORT\_P(s48\_value s\_b)} +\cproto{s48\_value S48\_SHARED\_BINDING\_NAME(s48\_value s\_b)} +\cproto{void\ \ \ \ \ \ S48\_SHARED\_BINDING\_SET(s48\_value s\_b, s48\_value value)} +\end{protos} + +\section{Calling C Functions from Scheme} +\label{sec:external-call} + +There are three different ways to call C functions from Scheme, depending on + how the C function was obtained. + +\begin{protos} +\proto{call-imported-binding}{ binding arg$_0$ \ldots}{value} +\proto{call-external}{ external arg$_0$ \ldots}{value} +\proto{call-external-value}{ value name arg$_0$ \ldots}{value} +\end{protos} +\noindent +Each of these applies its first argument, a C function, to the rest of + the arguments. +For \code{call-imported-binding} the function argument must be an + imported binding. +For \code{call-external} the function argument must be an external + bound in the current process + (see +\texonly{Section~\ref{dynamic-externals}).} +\htmlonly{the section on \link{Dynamic Loading}{dynamic-externals}).} +For \code{call-external-value} \cvar{value} must be a byte vector + whose contents is a pointer to a C function and \cvar{name} should be + a string naming the function. +The \cvar{name} argument is used only for printing error messages. + +For all of these, the C function is passed the \cvar{arg$_i$} values + and the value returned is that returned by C procedure. +Up to twelve arguments may be passed. +There is no method supplied for returning multiple values to + Scheme from C (or vice versa) (mainly because C does not have multiple return + values). + +Keyboard interrupts that occur during a call to a C function are ignored + until the function returns to Scheme (this is clearly a + problem; we are working on a solution). + +\begin{protos} +\syntaxprotonoresult{import-lambda-definition} +{ \cvar{name} (\cvar{formal} \ldots)} +\syntaxprotonoresult{import-lambda-definition} +{ \cvar{name} (\cvar{formal} \ldots)\ \cvar{c-name}} +\end{protos} +\noindent{}These macros simplify importing functions from C. +They define \cvar{name} to be a function with the given formals that + applies those formals to the corresponding C binding. +\cvar{C-name}, if supplied, should be a string. +These expand into + +\begin{example} +(define temp (lookup-imported-binding \cvar{c-name})) +(define \cvar{name} + (lambda (\cvar{formal} \ldots) + (external-apply temp \cvar{formal} \ldots))) +\end{example} + +\noindent{} +If \cvar{c-name} is not supplied, it is derived from \cvar{name} by converting + all letters to lowercase and replacing `\code{-}' with `\code{\_}'. + +\section{Adding external modules to the \code{Makefile}} +\label{sec:external-modules} + +Getting access to C bindings from Scheme requires that the C code be + compiled an linked in with the Scheme~48 virtual machine and that the + relevent shared-bindings be created. +The Scheme~48 makefile has rules for compiling and linking external code + and for specifying initialization functions that should be called on + startup. +There are three Makefile variables that control which external modules are + included in the executable for the virutal machine (\code{scheme48vm}). +\code{EXTERNAL\_OBJECTS} lists the object files to be included in + \code{scheme48vm}, +\code{EXTERNAL\_FLAGS} is a list of \code{ld} flags to be used when + creating \code{scheme48vm}, and + \code{EXTERNAL\_INITIALIZERS} is a list of C procedures to be called + on startup. +The procedures listed in \code{EXTERNAL\_INITIALIZERS} should take no + arguments and have a return type of \code{void}. +After changing the definitions of any of these variables you should + do \code{make scheme48vm} to rebuild the virtual machine. + +\section{Dynamic Loading} +\label{dynamic-externals} + +External code can be loaded into a running Scheme~48 process + and C object-file bindings can be dereferenced at runtime and + their values called + (although not all versions of Unix support all of this). +The required Scheme functions are in the structure \code{dynamic-externals}. + +\begin{protos} +\protonoresult{dynamic-load}{ string}{} +\end{protos} +\noindent +\code{Dynamic-load} loads the named file into the current + process, raising an exception if the file cannot be found or if dynamic + loading is not supported by the operating system. +The file must have been compiled and linked appropriately. +For Linux, the following commands compile \code{foo.c} into a + file \code{foo.so} that can be loaded dynamically. +\begin{example} +\% gcc -c -o foo.o foo.c +\% ld -shared -o foo.so foo.o +\end{example} + +\begin{protos} +\proto{get-external}{ string}{external} +\proto{external?}{ x}{boolean} +\proto{external-name}{ external}{string} +\proto{external-value}{ external}{byte-vector} +\end{protos} +\noindent +These functions give access to values bound in the current process, and + are used for retrieving values from dynamically-loaded files. +\code{Get-external} returns an \var{external} object that contains the + value of \cvar{name}, raising an exception if there is no such + value in the current process. +\code{External?} is the predicate for externals, and +\code{external-name} and \code{external-value} return the name and + value of an external. +The value is returned as byte vector of length four (on 32-bit + architectures). +The value is that which was extant when \code{get-external} was + called. +The following two functions can be used to update the values of + externals. + +\begin{protos} +\proto{lookup-external}{ external}{boolean} +\proto{lookup-all-externals}{}{boolean} +\end{protos} +\noindent +\code{Lookup-external} updates the value of \cvar{external} by looking its + name in the current process, returning \code{\#t} if it is bound and \code{\#f} + if it is not. +\code{Lookup-all-externals} calls \code{lookup-external} on all extant + externals, returning \code{\#f} any are unbound. + +\begin{protos} +\proto{call-external}{ external arg$_0$ \ldots}{value} +\end{protos} +\noindent +An external whose value is a C procedure can be called using + \code{call-external}. +See +\texonly{Section~\ref{sec:external-call}} +\htmlonly{the section on \link{calling C functions from Scheme}{sec:external-call}} +for more information. + +In some versions of Unix retrieving a value from the current + process may require a non-trivial amount of computation. +We recommend that a dynamically-loaded file contain a single initialization + procedure that creates shared bindings for the values exported by the file. + +\section{Compatibility} + +Scheme~48's old \code{external-call} function is still available in the structure + \code{externals}, which now also includes \code{external-name} and + \code{external-value}. +The old \code{scheme48.h} file has been renamed \code{old-scheme48.h}. + +\section{Accessing Scheme data from C} +\label{sec:scheme-data} + +The C header file \code{scheme48.h} provides + access to Scheme~48 data structures + (for compatibility, the old \code{scheme48.h} file is available + as \code{old-scheme48.h}). +The type \code{s48\_value} is used for Scheme values. +When the type of a value is known, such as the integer returned + by \code{vector-length} or the boolean returned by \code{pair?}, + the corresponding C procedure returns a C value of the appropriate + type, and not a \code{s48\_value}. +Predicates return \code{1} for true and \code{0} for false. + +\subsection{Constants} +\label{sec:constants} + +The following macros denote Scheme constants: +% +\begin{description} +\item[\code{S48\_FALSE}] is \verb|#f|. +\item[\code{S48\_TRUE}] is \verb|#t|. +\item[\code{S48\_NULL}] is the empty list. +\item[\code{S48\_UNSPECIFIC}] is a value used for functions which have no + meaningful return value + (in Scheme this value returned by the nullary procedure \code{unspecific} + in the structure \code{util}). +\item[\code{S48\_EOF}] is the end-of-file object + (in Scheme this value is returned by the nullary procedure \code{eof-object} + in the structure \code{i/o-internal}). +\end{description} + +\subsection{Converting values} + +The following functions convert values between Scheme and C + representations. +The `extract' ones convert from Scheme to C and the `enter's go the other + way. + +\begin{protos} +\cproto{unsigned char s48\_extract\_char(s48\_value)} +\cproto{char * \ \ \ s48\_extract\_string(s48\_value)} +\cproto{long \ \ \ \ \ s48\_extract\_integer(s48\_value)} +\cproto{double \ \ \ s48\_extract\_double(s48\_value)} +\cproto{s48\_value s48\_enter\_char(unsigned char)} +\cgcproto{s48\_value s48\_enter\_string(char *)} +\cgcproto{s48\_value s48\_enter\_integer(long)} +\cgcproto{s48\_value s48\_enter\_double(double)} +\end{protos} + +\noindent{}The value returned by \code{s48\_extract\_string} points to the actual + storage used by the string; it is valid only until the next + \link{garbage collection}[; see Section~\ref{gc}]{gc}. + +\code{s48\_enter\_integer()} needs to allocate storage when + its argument is too large to fit in a Scheme~48 fixnum. +In cases where the number is known to fit within a fixnum (currently 30 bits + including the sign), the following procedures can be used. +These have the disadvantage of only having a limited range, but + the advantage of never causing a garbage collection. + +\begin{protos} +\cproto{long \ \ \ \ \ s48\_extract\_fixnum(s48\_value)} +\cproto{s48\_value s48\_enter\_fixnum(long)} +\cproto{long \ \ \ \ \ S48\_MAX\_FIXNUM\_VALUE} +\cproto{long \ \ \ \ \ S48\_MIN\_FIXNUM\_VALUE} +\end{protos} + +\noindent An error is signalled if \code{s48\_extract\_fixnum}'s argument + is not a fixnum or if the argument to \code{s48\_enter\_fixnum} is less than + \code{S48\_MIN\_FIXNUM\_VALUE} or greater than \code{S48\_MAX\_FIXNUM\_VALUE} + ($-2^{29}$ and $2^{29}-1$ in the current system). + +\subsection{C versions of Scheme procedures} + +The following macros and procedures are C versions of Scheme procedures. +The names were derived by replacing `\code{-}' with `\code{\_}', + `\code{?}' with `\code{p}', and dropping `\code{!}. + +\begin{protos} +\cproto{int \ \ \ \ \ \ S48\_EQ\_P(s48\_value)} +\cproto{int \ \ \ \ \ \ S48\_CHAR\_P(s48\_value)} +\cproto{int \ \ \ \ \ \ S48\_INTEGER\_P(s48\_value)} +\end{protos} +\begin{protos} +\cproto{int \ \ \ \ \ \ S48\_PAIR\_P(s48\_value)} +\cproto{s48\_value S48\_CAR(s48\_value)} +\cproto{s48\_value S48\_CDR(s48\_value)} +\cproto{void \ \ \ \ \ S48\_SET\_CAR(s48\_value, s48\_value)} +\cproto{void \ \ \ \ \ S48\_SET\_CDR(s48\_value, s48\_value)} +\cgcproto{s48\_value s48\_cons(s48\_value, s48\_value)} +\cproto{long \ \ \ \ \ s48\_length(s48\_value)} +\end{protos} +\begin{protos} +\cproto{int \ \ \ \ \ \ S48\_VECTOR\_P(s48\_value)} +\cproto{long \ \ \ \ \ S48\_VECTOR\_LENGTH(s48\_value)} +\cproto{s48\_value S48\_VECTOR\_REF(s48\_value, long)} +\cproto{void \ \ \ \ \ S48\_VECTOR\_SET(s48\_value, long, s48\_value)} +\cgcproto{s48\_value s48\_make\_vector(long, s48\_value)} +\end{protos} +\begin{protos} +\cproto{int \ \ \ \ \ \ S48\_STRING\_P(s48\_value)} +\cproto{long \ \ \ \ \ S48\_STRING\_LENGTH(s48\_value)} +\cproto{char \ \ \ \ \ S48\_STRING\_REF(s48\_value, long)} +\cproto{void \ \ \ \ \ S48\_STRING\_SET(s48\_value, long, char)} +\cgcproto{s48\_value s48\_make\_string(long, char)} +\end{protos} +\begin{protos} +\cproto{int \ \ \ \ \ \ S48\_SYMBOL\_P(s48\_value)} +\cproto{s48\_value s48\_SYMBOL\_TO\_STRING(s48\_value)} +\end{protos} +\begin{protos} +\cproto{int \ \ \ \ \ \ S48\_BYTE\_VECTOR\_P(s48\_value)} +\cproto{long \ \ \ \ \ S48\_BYTE\_VECTOR\_LENGTH(s48\_value)} +\cproto{char \ \ \ \ \ S48\_BYTE\_VECTOR\_REF(s48\_value, long)} +\cproto{void \ \ \ \ \ S48\_BYTE\_VECTOR\_SET(s48\_value, long, int)} +\cgcproto{s48\_value s48\_make\_byte\_vector(long, int)} +\end{protos} + +\section{Calling Scheme functions from C} +\label{sec:external-callback} + +External code that has been called from Scheme can call back to Scheme + procedures using the following function. + +\begin{protos} +\cproto{scheme\_value s48\_call\_scheme(s48\_value proc, long nargs, \ldots)} +\end{protos} +\noindent{}This calls the Scheme procedure \code{proc} on \code{nargs} + arguments, which are passed as additional arguments to \code{s48\_call\_scheme}. +There may be at most ten arguments. +The value returned by the Scheme procedure is returned by the C procedure. +Invoking any Scheme procedure may potentially cause a garbage collection. + +There are some complications that occur when mixing calls from C to Scheme + with continuations and threads. +C only supports downward continuations (via \code{longjmp()}). +Scheme continuations that capture a portion of the C stack have to follow the + same restriction. +For example, suppose Scheme procedure \code{s0} captures continuation \code{a} + and then calls C procedure \code{c0}, which in turn calls Scheme procedure + \code{s1}. +Procedure \code{s1} can safely call the continuation \code{a}, because that + is a downward use. +When \code{a} is called Scheme~48 will remove the portion of the C stack used + by the call to \code{c0}. +On the other hand, if \code{s1} captures a continuation, that continuation + cannot be used from \code{s0}, because by the time control returns to + \code{s0} the C stack used by \code{c0} will no longer be valid. +An attempt to invoke an upward continuation that is closed over a portion + of the C stack will raise an exception. + +In Scheme~48 threads are implemented using continuations, so the downward + restriction applies to them as well. +An attempt to return from Scheme to C at a time when the appropriate + C frame is not on top of the C stack will cause the current thread to + block until the frame is available. +For example, suppose thread \code{t0} calls a C procedure which calls back + to Scheme, at which point control switches to thread \code{t1}, which also + calls C and then back to Scheme. +At this point both \code{t0} and \code{t1} have active calls to C on the + C stack, with \code{t1}'s C frame above \code{t0}'s. +If thread \code{t0} attempts to return from Scheme to C it will block, + as its frame is not accessable. +Once \code{t1} has returned to C and from there to Scheme, \code{t0} will + be able to resume. +The return to Scheme is required because context switches can only occur while + C code is running. +\code{T0} will also be able to resume if \code{t1} uses a continuation to + throw past its call to C. + +\section{Interacting with the Scheme Heap} +\label{sec:heap-allocation} +\label{gc} + +Scheme~48 uses a copying, precise garbage collector. +Any procedure that allocates objects within the Scheme~48 heap may trigger + a garbage collection. +Variables bound to values in the Scheme~48 heap need to be registered with + the garbage collector so that the value will be retained and so that the + variables will be updated if the garbage collector moves the object. +The garbage collector has no facility for updating pointers to the interiors + of objects, so such pointers, for example the ones returned by + \code{EXTRACT\_STRING}, will likely become invalid when a garbage collection + occurs. + +\subsection{Registering Objects with the GC} +\label{sec:gc-register} + +A set of macros are used to manage the registration of local variables with the + garbage collector. + +\begin{protos} +\cproto{S48\_DECLARE\_GC\_PROTECT($n$)} +\cproto{void S48\_GC\_PROTECT\_$n$(s48\_value$_1$, $\ldots$, s48\_value$_n$)} +\cproto{void S48\_GC\_UNPROTECT()} +\end{protos} + +\code{S48\_DECLARE\_GC\_PROTECT($n$)}, where $1\leq n\leq 9$, allocates + storage for registering $n$ variables. +At most one use of \code{S48\_DECLARE\_GC\_PROTECT} may occur in a block. +\code{S48\_GC\_PROTECT\_$n$($v_1$, $\ldots$, $v_n$)} registers the + $n$ variables (l-values) with the garbage collector. +It must be within scope of a \code{S48\_DECLARE\_GC\_PROTECT($n$)} + and be before any code which can cause a GC. +\code{S48\_GC\_UNPROTECT} removes the block's protected variables from + the garbage collectors list. +It must be called at the end of the block after + any code which may cause a garbage collection. +Omitting any of the three may cause serious and + hard-to-debug problems. +Notably, the garbage collector may relocate an object and + invalidate \code{s48\_value} variables which are not protected. + +A \code{gc-protection-mismatch} exception is raised if, when a C + procedure returns to Scheme, the calls + to \code{S48\_GC\_PROTECT()} have not been matched by an equal number of + calls to \code{S48\_GC\_UNPROTECT()}. + +Global variables may also be registered with the garbage collector. + +\begin{protos} +\cproto{void S48\_GC\_PROTECT\_GLOBAL(\cvar{value})} +\end{protos} + +\noindent{}\code{S48\_GC\_PROTECT\_GLOBAL} permanently registers the + variable \cvar{value} (an l-value) with the garbage collector. +There is no way to unregister the variable. + +\subsection{Keeping C data structures in the Scheme heap} +\label{sec:external-data} + +C data structures can be kept in the Scheme heap by embedding them + inside byte vectors. +The following macros can be used to create and access embedded C objects. + +\begin{protos} +\cgcproto{s48\_value S48\_MAKE\_VALUE(type)} +\cproto{type \ \ \ \ \ S48\_EXTRACT\_VALUE(s48\_value, type)} +\cproto{type * \ \ \ S48\_EXTRACT\_VALUE\_POINTER(s48\_value, type)} +\cproto{void \ \ \ \ \ S48\_SET\_VALUE(s48\_value, type, value)} +\end{protos} + +\noindent{} +\code{S48\_MAKE\_VALUE} makes a byte vector large enough to hold an object + whose type is \cvar{type}. +\code{S48\_EXTRACT\_VALUE} returns the contents of a byte vector cast to + \cvar{type}, and \code{S48\_EXTRACT\_VALUE\_POINTER} returns a pointer + to the contents of the byte vector. +The value returned by \code{S48\_EXTRACT\_VALUE\_POINTER} is valid only until + the next \link{garbage collection}[(see Section~\ref{gc})]{gc}. + +\code{S48\_SET\_VALUE} stores \code{value} into the byte vector. + +%There are some convenient macros for external objects that hold +% arrays: +% +%\begin{itemize} +%\item \code{S48\_MAKE\_ARRAY($b$, $s$)} returns an external object +% which holds an array with base type $b$ and size $s$. +%\item \code{S48\_EXTRACT\_ARRAY(\cvar{value}, $b$)} returns the address of the +% array with base type $b$ inside external object \cvar{value}. It does not +% check if \cvar{value} is actually an external object. Note that the address +% returned by \code{S48\_EXTRACT\_ARRAY} is only valid until the next +% \link{heap allocation}[ (see +% Sec.~\ref{sec:heap-allocation})]{sec:heap-allocation}. +%\end{itemize} + +\subsection{C code and heap images} +\label{sec:hibernation} + +Scheme~48 uses dumped heap images to restore a previous system state. +The Scheme~48 heap is written into a file in a machine-independent and + operating-system-independent format. +The procedures described above may be used to create objects in the + Scheme heap that contain information specific to the current + machine, operating system, or process. +A heap image containing such objects may not work correctly on + when resumed. + +To address this problem, a record type may be given a `resumer' + procedure. +On startup, the resumer procedure for a type is applied to each record of + that type in the image being restarted. +This procedure can update the record in a manner appropriate to + the machine, operating system, or process used to resume the + image. + +\begin{protos} +\protonoresult{define-record-resumer}{ record-type procedure} +\end{protos} + +\noindent{}\code{Define-record-resumer} defines \cvar{procedure}, + which should accept one argument, to be the resumer for + \var{record-type}. +The order in which resumer procedures are called is not specified. + +The \cvar{procedure} argument to \code{define-record-resumer} may + be \code{\#f}, in which case records of the given type are + not written out in heap images. +When writing a heap image any reference to such a record is replaced by + the value of the record's first field, and an exception is raised + after the image is written. + +\section{Using Scheme records in C code} + +External modules can create records and access their slots + positionally. + +\begin{protos} +\cgcproto{s48\_value S48\_MAKE\_RECORD(s48\_value)} +\cproto{int \ \ \ \ \ \ S48\_RECORD\_P(s48\_value)} +\cproto{s48\_value S48\_RECORD\_TYPE(s48\_value)} +\cproto{s48\_value S48\_RECORD\_REF(s48\_value, long)} +\cproto{void \ \ \ \ \ S48\_RECORD\_SET(s48\_value, long, s48\_value)} +\end{protos} +% +The argument to \code{S48\_MAKE\_RECORD} should be a shared binding + whose value is a record type. +In C the fields of Scheme records are only accessible via offsets, + with the first field having offset zero, the second offset one, and + so forth. +If the order of the fields is changed in the Scheme definition of the + record type the C code must be updated as well. + +For example, given the following record-type definition +\begin{example} +(define-record-type thing :thing + (make-thing a b) + thing? + (a thing-a) + (b thing-b)) +\end{example} + the identifier \code{:thing} is bound to the record type and can + be exported to C: +\begin{example} +(define-exported-binding "thing-record-type" :thing) +\end{example} +\code{Thing} records can then be made in C: +\begin{example} +static scheme_value thing_record_type_binding = SCHFALSE; + +void initialize_things(void) +\{ + S48_GC_PROTECT_GLOBAL(thing_record_type_binding); + thing_record_type_binding = + s48_get_imported_binding("thing-record-type"); +\} + +scheme_value make_thing(scheme_value a, scheme_value b) +\{ + s48_value thing; + s48_DECLARE_GC_PROTECT(2); + + S48_GC_PROTECT_2(a, b); + + thing = s48_make_record(thing_record_type_binding); + S48_RECORD_SET(thing, 0, a); + S48_RECORD_SET(thing, 1, b); + + S48_GC_UNPROTECT(); + + return thing; +\} +\end{example} +Note that the variables \code{a} and \code{b} must be protected + against the possibility of a garbage collection occuring during + the call to \code{s48\_make\_record()}. + +\section{Raising exceptions from external code} +\label{sec:exceptions} + +The following macros explicitly raise certain errors, immediately + returning to Scheme~48. +Raising an exception performs all + necessary clean-up actions to properly return to Scheme~48, including + adjusting the stack of protected variables. + +\begin{protos} +\cproto{s48\_raise\_scheme\_exception(int type, int nargs, \ldots)} +\end{protos} + +\noindent{}\code{s48\_raise\_scheme\_exception} is the base procedure for + raising exceptions. +\code{type} is the type of exception, and should be one of the + \code{S48\_EXCEPTION\_}\ldots constants defined in \code{scheme48arch.h}. +\code{nargs} is the number of additional values to be included in the + exception; these follow the \code{nargs} argument and should all have + type \code{s48\_value}. +\code{s48\_raise\_scheme\_exception} never returns. + +The following procedures are available for raising particular + types of exceptions. +Like \code{s48\_raise\_scheme\_exception} these never return. + +\begin{protos} +\cproto{s48\_raise\_argument\_type\_error(scheme\_value)} +\cproto{s48\_raise\_argument\_number\_error(int nargs, int min, int max)} +\cproto{s48\_raise\_index\_range\_error(long value, long min, long max)} +\cproto{s48\_raise\_closed\_channel\_error()} +\cproto{s48\_raise\_os\_error(int errno)} +\cproto{s48\_raise\_out\_of\_memory\_error()} +\end{protos} + +\noindent{}An argument type error indicates that the given value is of the wrong + type. +An argument number error is raised when the number of arguments, \code{nargs}, + should be, but isn't, between \code{min} and \code{max}, inclusive. +Similarly, and index range error is raised when \code{value} is not between + between \code{min} and \code{max}, inclusive. + +The following macros raise argument type errors if their argument does not + have the required type. + +\begin{protos} +\cproto{void S48\_CHECK\_SYMBOL(s48\_value)} +\cproto{void S48\_CHECK\_PAIR(s48\_value)} +\cproto{void S48\_CHECK\_STRING(s48\_value)} +\cproto{void S48\_CHECK\_INTEGER(s48\_value)} +\cproto{void S48\_CHECK\_CHANNEL(s48\_value)} +\cproto{void S48\_CHECK\_BYTE\_VECTOR(s48\_value)} +\cproto{void S48\_CHECK\_RECORD(s48\_value)} +\cproto{void S48\_CHECK\_SHARED\_BINDING(s48\_value)} +\end{protos} + +\section{Unsafe functions and macros} + +All of the C procedures and macros described above check that their + arguments have the appropriate types and that indexes are in range. +The following procedures and macros are identical to those described + above, except that they do not perform type and range checks. +They are provided for the purpose of writing more efficient code; + their general use is not recommended. + +\begin{protos} +\cproto{char \ \ \ \ \ S48\_UNSAFE\_EXTRACT\_CHAR(s48\_value)} +\cproto{char * \ \ \ S48\_UNSAFE\_EXTRACT\_STRING(s48\_value)} +\cproto{long \ \ \ \ \ S48\_UNSAFE\_EXTRACT\_INTEGER(s48\_value)} +\cproto{long \ \ \ \ \ S48\_UNSAFE\_EXTRACT\_DOUBLE(s48\_value)} +\end{protos} +\begin{protos} +\cproto{long \ \ \ \ \ S48\_UNSAFE\_EXTRACT\_FIXNUM(s48\_value)} +\cproto{s48\_value S48\_UNSAFE\_ENTER\_FIXNUM(long)} +\end{protos} +\begin{protos} +\cproto{s48\_value S48\_UNSAFE\_CAR(s48\_value)} +\cproto{s48\_value S48\_UNSAFE\_CDR(s48\_value)} +\cproto{void \ \ \ \ \ S48\_UNSAFE\_SET\_CAR(s48\_value, s48\_value)} +\cproto{void \ \ \ \ \ S48\_UNSAFE\_SET\_CDR(s48\_value, s48\_value)} +\end{protos} +\begin{protos} +\cproto{long \ \ \ \ \ S48\_UNSAFE\_VECTOR\_LENGTH(s48\_value)} +\cproto{s48\_value S48\_UNSAFE\_VECTOR\_REF(s48\_value, long)} +\cproto{void \ \ \ \ \ S48\_UNSAFE\_VECTOR\_SET(s48\_value, long, s48\_value)} +\end{protos} +\begin{protos} +\cproto{long \ \ \ \ \ S48\_UNSAFE\_STRING\_LENGTH(s48\_value)} +\cproto{char \ \ \ \ \ S48\_UNSAFE\_STRING\_REF(s48\_value, long)} +\cproto{void \ \ \ \ \ S48\_UNSAFE\_STRING\_SET(s48\_value, long, char)} +\end{protos} +\begin{protos} +\cproto{s48\_value S48\_UNSAFE\_SYMBOL\_TO\_STRING(s48\_value)} +\end{protos} +\begin{protos} +\cproto{long \ \ \ \ \ S48\_UNSAFE\_BYTE\_VECTOR\_LENGTH(s48\_value)} +\cproto{char \ \ \ \ \ S48\_UNSAFE\_BYTE\_VECTOR\_REF(s48\_value, long)} +\cproto{void \ \ \ \ \ S48\_UNSAFE\_BYTE\_VECTOR\_SET(s48\_value, long, int)} +\end{protos} +\begin{protos} +\cproto{s48\_value S48\_UNSAFE\_SHARED\_BINDING\_REF(s48\_value s\_b)} +\cproto{int\ \ \ \ \ \ \ S48\_UNSAFE\_SHARED\_BINDING\_P(x)} +\cproto{int\ \ \ \ \ \ \ S48\_UNSAFE\_SHARED\_BINDING\_IS\_IMPORT\_P(s48\_value s\_b)} +\cproto{s48\_value S48\_UNSAFE\_SHARED\_BINDING\_NAME(s48\_value s\_b)} +\cproto{void\ \ \ \ \ \ S48\_UNSAFE\_SHARED\_BINDING\_SET(s48\_value s\_b, s48\_value value)} +\end{protos} +\begin{protos} +\cproto{s48\_value S48\_UNSAFE\_RECORD\_TYPE(s48\_value)} +\cproto{s48\_value S48\_UNSAFE\_RECORD\_REF(s48\_value, long)} +\cproto{void \ \ \ \ \ S48\_UNSAFE\_RECORD\_SET(s48\_value, long, s48\_value)} +\end{protos} +\begin{protos} +\cproto{type \ \ \ \ \ S48\_UNSAFE\_EXTRACT\_VALUE(s48\_value, type)} +\cproto{type * \ \ \ S48\_UNSAFE\_EXTRACT\_VALUE\_POINTER(s48\_value, type)} +\cproto{void \ \ \ \ \ S48\_UNSAFE\_SET\_VALUE(s48\_value, type, value)} +\end{protos} + +\end{document} + diff --git a/doc/src/hyperlatex.sty b/doc/src/hyperlatex.sty new file mode 100644 index 0000000..b6ef1b3 --- /dev/null +++ b/doc/src/hyperlatex.sty @@ -0,0 +1,253 @@ +%% +%% LaTeX style to handle hyperlatex files, version 2.3 +%% +%% $Modified: Fri May 9 13:40:27 1997 by otfried $ +%% +%% This code has GNU copyleft, 1994-1998 Otfried Cheong +%% +\NeedsTeXFormat{LaTeX2e} + +\ProvidesPackage{hyperlatex} +[1998/09/08 v2.3 LaTeX2e package for Hyperlatex mode] + +\typeout{Package: 'hyperlatex' v2.3 Otfried Cheong} + +\RequirePackage{verbatim} +\chardef\other=12 + +%% +%% Comments, +%% +{\obeylines\gdef\Hlx@W#1^^M{\endgroup\ignorespaces}} +\def\W{\begingroup\obeylines\catcode`\{=\other\catcode`\}=\other\Hlx@W} + +\newcommand{\htmlonly}[1]{} +\newcommand{\texorhtml}[2]{#1} +\newenvironment{iftex}{}{} +\newenvironment{latexonly}{}{} +\newcommand{\texonly}[1]{#1} +\newcommand{\T}{} + +%% +%% Treatment of special characters +%% + +\def\Hlx@nonspecials{} +\def\NotSpecial{\def\Hlx@nonspecials} +\def\Hlx@turnon{\let\do=\@makeother\Hlx@nonspecials} +\AtBeginDocument{\Hlx@turnon} + +\let\htmltab=& + +%% +%% \begin{tex} ... \end{tex} escapes into raw Tex temporarily. +%% you can write {\tex .....} as well, if already escaped from Html +%% +\newenvironment{tex}{\catcode `\$=3 \catcode `\&=4 \catcode `\#=6 +\catcode `\^=7 \catcode `\_=8 \catcode `\%=14}{} + +%% +%% \back +%% + +\newcommand{\back}{{\tt\char`\\}} + +%% +%% \math +%% + +\def\math{\@ifnextchar [{\@math}{\@math[]}} +\def\@math[#1]{\begingroup\tex\@@math} +\def\@@math#1{$#1$\endgroup} + +%% +%% Commands that don't do anything interesting in Latex +%% + +\def\Hlx@pass{\begingroup\let\protect\@unexpandable@noexpand\@sanitize} + +\def\Hlx@directory{.} + +\newcommand{\htmldirectory}[1]{\gdef\Hlx@directory{#1}} +\newcommand{\htmlname}[1]{} +\newcommand{\htmldepth}[1]{} +\newcommand{\htmltopname}[1]{} +\newcounter{htmldepth} +\newcommand{\htmltitle}[1]{} +\newcommand{\htmladdress}[1]{} +\newcommand{\html}{\Hlx@pass\@html} +\def\@html#1{\endgroup} + +\newcommand{\htmlsym}[1]{} +\def\htmlrule{\@ifnextchar [{\@htmlrule}{\@htmlrule[]}} +\def\@htmlrule{\Hlx@pass\@@htmlrule} +\def\@@htmlrule[#1]{\endgroup} + +\newcommand{\htmllevel}[1]{} +\newcommand{\htmlmenu}[1]{} +\newcommand{\htmlautomenu}[1]{} +\newcounter{htmlautomenu} +\newcommand{\htmlprintindex}{} +\newcommand{\htmlfootnotes}{} +\newcommand{\htmlmathitalic}[1]{} + +\def\htmlimage{\@ifnextchar [{\@htmlimage}{\@htmlimage[]}} +\def\@htmlimage{\Hlx@pass\@@htmlimage} +\def\@@htmlimage[#1]#2{\endgroup} + +\newcommand{\xname}{\Hlx@pass\Hlx@ignore} +\def\Hlx@ignore#1{\endgroup} + +\newcommand{\htmlpanel}[1]{} +\newcommand{\htmlheading}{\@ifnextchar[{\@htmlheading}{\@htmlheading[]}} +\def\@htmlheading[#1]#2{} + +\newcommand{\htmlcaption}[1]{} + +\def\htmlattributes{\@ifstar{\@htmlattributes}{\@htmlattributes}} +\def\@htmlattributes{\Hlx@pass\@@htmlattributes} +\def\@@htmlattributes#1#2{\endgroup} + +%% +%% GIF environment, +%% will generate bitmaps when `\makegifs' is defined +%% + +\newif\if@makegifs +\@ifundefined{makegifs}{\@makegifsfalse}{\@makegifstrue} + +\def\gif{\@ifnextchar[{\@gif}{\@gif[b]}} +\def\@gif[#1]{\@ifnextchar[{\@@gif}{\@@gif[100]}} +\def\@@gif[#1]{\gdef\gif@resolution{#1}\@ifnextchar[{\@@@gif}{\@@@gif[300]}} +\def\@@@gif[#1]#2{\gdef\gif@dpi{#1}\gdef\gif@name{#2}\@@@@gif} + +\if@makegifs +\typeout{**********************************************} +\typeout{* Making GIF bitmaps from Hyperlatex source! *} +\typeout{**********************************************} +\newwrite\@makegifcmds +\immediate\openout\@makegifcmds=\jobname.makegif +\newbox\@gifbox +\newcount\@gifcount\@gifcount=10000 +\def\@@@@gif{\setbox\@gifbox=\vbox\bgroup\tex} +\def\endgif{\egroup + {\global\advance\@gifcount by 1\count0=\@gifcount + \immediate\write\@makegifcmds{dvips\space -f\space -p\space + \the\@gifcount\space -n\space 1\space -E\space -D\space \gif@dpi\space + \jobname.dvi\space>\space\gif@name.ps^^J% + ps2gif\space -res\space \gif@resolution\space \gif@name.ps^^J% + mv\space \gif@name.gif\space \Hlx@directory^^J} + \shipout\copy\@gifbox}\unvbox\@gifbox} +\else +\def\@@@@gif{\tex} +\def\endgif{} +\fi +%% +%% Font style definitions +%% + +\let\cit=\textit +\let\code=\texttt +\let\kbd=\texttt +\let\samp=\texttt +\let\strong=\textbf +\let\var=\textsl +\let\dfn=\textit +\let\file=\textit + +%% +%% \begin{example} ... \end{example} obeys spaces and lines +%% +%% the indent can be controlled by \exampleindent +%% +\newdimen\exampleindent +\setlength{\exampleindent}{7mm} +\def\Hlx@example{\do\$\do\&\do\#\do\^\do\_\do\~} +{\obeyspaces + \gdef\turnon@spaces{\let =\ \obeyspaces\catcode``=\active\@noligs}} +{\obeylines% + \gdef\turnon@lines{\obeylines\def^^M{\par\def^^M{\leavevmode\par}}}} + +\def\example{\list{}{\leftmargin\exampleindent + \itemindent\z@ \rightmargin\z@ \parsep \z@ plus\p@}\item[]\tt + \turnon@spaces\turnon@lines\let\do\@makeother\Hlx@example} +\let\endexample=\endlist + +%% +%% font problem: math in example environment seems to need this: +%% +\DeclareFontFamily{OMS}{cmtt}{} +\DeclareFontShape{OMS}{cmtt}{m}{n}{ <-> ssub * cmsy/m/n }{} + +\newenvironment{menu}{\list{$\bullet$}{\itemsep0pt\parsep0pt}}{\endlist} +\newenvironment{ifhtml}{\comment}{\endcomment} +\newenvironment{rawhtml}{\comment}{\endcomment} + +\def\htmlinclude#1{} + +\def\Hlx@empty{} +\def\Hlx@zero{0} +\newif\if@Hlx + +\def\Hlx@setclear#1{\@ifundefined{#1}{\@Hlxfalse}{% + \expandafter\ifx\csname#1\endcsname\Hlx@empty\@Hlxfalse + \else\expandafter\ifx\csname#1\endcsname\Hlx@zero\@Hlxfalse + \else\@Hlxtrue\fi\fi}} + +\def\ifclear#1{\Hlx@setclear{#1} + \if@Hlx + %% arg empty -> skip + \let\endifset\endcomment\let\Hlx@comment\comment + \else + %% arg set -> ignore begin and end + \let\endifset\relax\let\Hlx@comment\relax + \fi\Hlx@comment} + +\def\ifset#1{\Hlx@setclear{#1} + \if@Hlx + % arg empty -> ignore begin and end + \let\endifclear\relax\let\Hlx@comment\relax + \else + % arg set -> skip environment + \let\endifclear\endcomment\let\Hlx@comment\comment + \fi\Hlx@comment} + +%% +%% Define \link and \xlink macros +%% +\newcommand{\Hlx@label}{} + +\newcommand{\Ref}{\ref{\Hlx@label}} +\newcommand{\Pageref}{\pageref{\Hlx@label}} +\newcommand{\Cite}{\cite{\Hlx@label}} + +\newenvironment{Label}[1]{\def\Hlx@Label@label{\label{#1}}\ignorespaces}% +{\Hlx@Label@label\ignorespaces} + +\newcommand{\htmlcite}[1]{\cite{#1}} + +\def\link{\@ifstar{\@star@link}{\@@link}} +\def\@@link#1{#1\@@@link} +\def\@star@link#1{\@@@link} +\def\@@@link{\@ifnextchar [{\@link}% ] balance + {\@link[]}} +\def\@link[#1]#2{\gdef\Hlx@label{#2}#1} + +\def\xlink{\@ifstar{\@star@xlink}{\@@xlink}} +\def\@@xlink#1{\@@@xlink{#1}} +\def\@star@xlink#1{\@@@xlink{}} +\def\@@@xlink#1{\@ifnextchar [{\@xlink{#1}}{\@xlink{#1}[]}} +\def\@xlink#1[#2]#3{\formatxlink{#1#2}{#3}} +\newcommand{\formatxlink}[2]{#1} + +% +% index from latex.tex, and changed to include optional argument +% +\def\cindex{\@bsphack\begingroup + \let\protect\@unexpandable@noexpand + \@sanitize + \@ifnextchar [{\Hlx@argwrindex}% balance ] + {\@wrindex}} +\def\Hlx@argwrindex[#1]#2{\@wrindex{#1@#2}} + +%% end of hyperlatex.sty diff --git a/doc/src/meeting.tex b/doc/src/meeting.tex new file mode 100644 index 0000000..4a696cb --- /dev/null +++ b/doc/src/meeting.tex @@ -0,0 +1,439 @@ +\documentstyle[11pt,twoside]{article} + +\input{code} +\input{latex-stuff} + +\advance \textheight by 2ex + +\begin{document} + +\begin{center} +{\Large\bf The Scheme of Things:} \\ +\vspace{2ex} +{\Large\bf The June 1992 Meeting$^{\hbox{\scriptsize 1}}$} \\ +\vspace{3ex} +Jonathan Rees \\ +Cornell University \\ +{\tt jar@cs.cornell.edu} +\end{center} + +\vspace{3ex} + +\footnotetext[1]{To appear in {\em Lisp Pointers} V(4), +October--December 1992.} + + +An informally constituted group of people interested in the future of +the Scheme programming language met at the Xerox Palo Alto Research +Center on 25 June 1992. The main purpose of the meeting was to work +on the technical content of the next revision of the Scheme report. + +We made progress on several fronts: +\begin{itemize} +\item Some differences with the IEEE Scheme standard were resolved. + +\item Proposals for multiple return values and {\tt dynamic-wind} were +adopted. + +\item A proposal for an {\tt eval} procedure was adopted. + +\item The high-level macro facility described in the +Revised$^4$ Report's appendix will be moved into the report proper. +\end{itemize} + +Two subcommittees were formed: one to work on exceptions, and one to +charter the formation of a standard library. The subcommittees will +report back to the group with proposals for inclusion in the report. + +It had been hoped that there would be progress on some other fronts +(user-defined types, dynamic binding, improvements to ``rest'' +parameters), but after inconclusive discussion these topics were +dropped. These topics will probably be taken up again in the future. + +Norman Adams was appointed the Revised$^5$ Report's editor. It is +hoped that it will be ready by early 1993, so as to precede the +reconstitution of the IEEE standard group. + +This article is my own interpretation of what transpired, and should +not be construed as definitive. + + +\piece{Agreement with the IEEE Scheme standard} + +Until now, the Scheme reports have encouraged but not required the +empty list {\tt()} and the boolean false value {\tt\#f} to be +distinct. It has been the intent ever since the Revised Revised +Report, however, that this distinction would eventually be required. +The IEEE Scheme standard bit the bullet in 1990, and now the +Revised$^5$ report follows. + +The standard also dropped the distinction between essential and +not-essential language features; most features that were formerly not +essential, such as n-ary {\tt+} and {\tt apply}, are now required. +The Revised$^5$ Report will adopt this stance, at least as regards +language features that are shared with the IEEE standard. +Non-essential non-IEEE oddities such as {\tt transcript-on} and {\tt +transcript-off} and the proposed {\tt interaction-\ok{}environment} (see +below) were not discussed at the meeting, however, and consensus on +their status will have to be reached via electronic mail. + +A third aspect of the standard that was adopted was a certain obscure +paragraph regarding assignments to top-level variables (section 6, +paragraph 2). The effect of this is that if a program contains an +assignment to any top-level variable, then the program must contain a +{\tt define} for that variable; it is not sufficient that the variable +be bound. This has been the case for most variables, but the rule +applies as well to variables such as {\tt car} that have built-in +bindings. In addition, it is clarified that if a program makes such a +definition or assignment, then the behavior of built-in procedures +will not be affected. For example, redefining {\tt length} cannot +affect the behavior of the built-in {\tt list->vector} procedure. +If in some particular implementation {\tt list->vector} is written +in Scheme and calls {\tt length}, then it must be sure to call the +built-in {\tt length} procedure, not whatever happens to be the value +of the variable {\tt length}. + + +\piece{Multiple return values} + +The {\tt call-with-values} and {\tt values} procedures were described +in an earlier Scheme of Things ({\em Lisp Pointers}, volume IV, number +1), but I'll review them here. The following is adapted from John Ramsdell's +concise description: + +\begin{list}{}{}{}\item + {\tt(values \var{object} $\ldots$)} + \hfill {\rm essential procedure} + + {\tt values} delivers all of its arguments to its continuation. + + \vspace{2ex} + + {\tt(call-with-values \var{thunk} \var{receiver})} + \hfill {\rm essential procedure} + + {\tt call-with-values} calls its \var{thunk} argument with a + continuation that, when passed some values, calls the + \var{receiver} procedure with those values as arguments. + The continuation for the call to \var{receiver} is the + continuation of the call to {\tt call-with-values}. +\end{list} + +Except for continuations created by the {\tt call-with-values} +procedure, all continuations take exactly one value, as now; the +effect of passing no value or more than one value to continuations +that were not created by {\tt call-with-values} is unspecified (as +indeed it is unspecified now). + +{\tt values} might be defined as follows: +\begin{code} + (define (values . things) + (call-with-current-continuation + (lambda (cont) (apply cont things)))) +\end{code} +That is, the procedures supplied by {\tt +call-with-current-continuation} must be passed the same number of +arguments as values expected by the continuation. + +Because the behavior of a number-of-values mismatch between a +continuation and its invoker is unspecified, some implementations may +assign some specific meaning to such situations; for example, extra +values might be ignored, or defaults might be supplied for missing +values. Thus this multiple return value proposal is compatible with +Common Lisp's multiple values, but strictly more conservative than it. +The behavior of programs in such situations was a point of contention +among the authors, which is why only the least common denominator +behavior was specified. + + +\piece{Unwind/wind protection} + +{\tt dynamic-wind}, which was described previously in this column (when it +was The Scheme Environment; {\em Lisp Pointers}, volume I, number 2), +is already implemented in many Scheme dialects. {\tt dynamic-wind} +takes three arguments, all of which are thunks (procedures of no arguments). +It behaves as if it were defined with +\begin{code} + (define (dynamic-wind before during after) + (before) + (call-with-values during + (lambda results + (after) + (apply values results)))) +\end{code} +except that the execution of the {\tt during} thunk is ``protected'' +against non-local entries and exits: a throw out of the execution +of {\tt during} will cause the {\tt after} thunk to be invoked, and a +throw from outside back in will cause the {\tt before} thunk to be +invoked. (By ``throw'' I mean an invocation of an explicit +continuation as obtained from {\tt call-with-current-continuation}.) + +For details, the earlier Scheme Environment column refers the reader +to Friedman and Haynes's paper ``Constraining Control'' in POPL 1985, +but to save you the trouble of looking that up, I have supplied a more +direct implementation of {\tt dynamic-wind} in an appendix to the +present column. + +{\tt dynamic-wind} was adopted with the following clarifications: The +semantics of {\tt(dynamic-wind \var{before} \var{during} \var{after})} +should leave unspecified what happens if a throw occurs out of {\em +before} or {\em after}\/; and it is best to defer interrupts during {\em +before} and {\em after}. + + + +\piece{Evaluating computed expressions} + +The original 1975 memo on Scheme described {\tt evaluate}, +which was analogous to Lisp's traditional {\tt eval} function. {\tt +evaluate} took a single argument, an S-expression, and invoked an +interpreter on it. For example: +\begin{code} + (let ((name '+)) (evaluate (list name 2 3))) + \ev 5 +\end{code} +Scheme being lexically scoped, however, there was some confusion over +which environment the expression was to be evaluated in. Should +\begin{code} + (let ((name '+)) + (let ((+ *)) + (evaluate (list name 2 3)))) +\end{code} +evaluate to 5 or to 6? + +To clarify matters, the Revised Report replaced {\tt evaluate} with +{\tt enclose}, which took two arguments, a {\tt lambda}-expression and +a representation of an environment from which to supply bindings of the +{\tt lambda}-expression's free variables. For example: +\begin{code} + (let ((name '+)) + (let ((+ *)) + ((enclose (list 'lambda '() (list name 2 3)) + (list (cons '+ +)))))) + \ev 6 +\end{code} +This forced the programmer to be explicit about the {\tt +lambda}-expression's enclosing environment. + +For various technical and practical reasons, there was no {\tt eval} +analogue in subsequent Scheme reports. The major stumbling blocks +were how to describe {\tt eval} formally and how to define something +that makes sense in all extant variants of the language. Some Scheme +implementations contain a distinguished top-level environment, while +others extend the language by providing ways to create multiple +environments, any of which might serve equally well. + +The {\tt eval} proposal adopted at the June meeting, which I reproduce +here, is one that comes from Bill Rozas. + +\begin{list}{}{}{}\item + + {\tt(eval \var{expression} \var{environment-specifier})} + \hfill {\rm essential procedure} + + {\tt eval} evaluates \var{expression} in the environment indicated + by {\em environment-\discretionary{}{}{}specifier}. {\em + environment-specifier} may be the return value of one of the three + procedures described below, or implementation-specific extensions. + No other operations on environment specifiers are defined by this + proposal. + + Implementations may allow non-expression programs (i.e.\ + definitions) as the first argument to {\tt eval} \var{only} when + the second argument is the return value of {\tt interaction-environment} + or some implementation extension. In other words, {\tt eval} will never + create new bindings in the return value of {\tt null-environment} or + {\tt scheme-report-environment}. + + \vspace{2ex} + + {\tt(scheme-report-environment \var{version})} + \hfill {\rm essential procedure} + + {\em Version} must be an exact non-negative integer corresponding to a + version of one of the Revised$^n$ Reports on Scheme. This procedure + returns a specifier for an environment that contains exactly the + set of bindings specified in the corresponding report that the + implementation supports. Not all versions may be available in all + implementations at all times. However, an implementation that + conforms to version $n$ of the Revised$^n$ Reports on Scheme must + accept version $n$. If {\tt scheme-report-environment} is + available, but the specified version is not, the procedure will + signal an error. + + The effect of assigning (through the use of {\tt eval}) a variable + bound in a {\tt scheme-report-environment} (e.g.\ {\tt car}) is + unspecified. Thus the environments specified by the return + values of {\tt scheme-report-environment} may be immutable. + + \vspace{2ex} + + {\tt(null-environment)} + \hfill {\rm essential procedure} + + This procedure returns a specifier for an environment that contains no + variable bindings, but contains (syntactic) bindings for all the + syntactic keywords defined in the report, and no others. + + \vspace{2ex} + %\newpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + {\tt(interaction-environment)} + \hfill {\rm procedure} + + This procedure returns a specifier for an environment that + contains imple\-men\-ta\-tion-defined bindings, typically a superset of + those listed in the report. The intent is that this procedure + will return a specifier for the environment in which the + implementation would evaluate expressions dynamically typed by the + user. + +\end{list} + +Rozas explains: +``The proposal does not imply the existence or support of first-class +environments, although it is compatible with them. +The proposal only requires a way of associating tags with a finite set +of distinguished environments which the implementations can maintain +implicitly (without reification). + +``\,`Pascal-like' implementations can support both {\tt null-environment} and +%\penalty0 +{\tt scheme-report-environment} since the environments specified by +the return values of these procedures need not share any bindings with +the current program. A version of {\tt eval} that supports these but +not {\tt interaction-environment} can be written portably, +but can be better written by the implementor, since it can share code +with the default evaluator or compiler.'' + +Here ``Pascal-like'' refers to implementations that are restricted to +static compilation and linking. Because an {\tt eval} that doesn't +support +\penalty0 +{\tt interaction-\discretionary{}{}{}environment} can be written +entirely in the Scheme language described by the rest of the report, +it raises no troublesome questions about its formal semantics. + + +\piece{Macros} + +The consensus of the meeting was that {\tt define-syntax}, {\tt +syntax-rules}, {\tt let-\discretionary{}{}{}syntax}, and {\tt +letrec-syntax} should be moved out of the report's appendix into the +main body of the report. Although everyone agrees that a low-level +macro facility is important, the subject is too contentious at +present, with three or more competing proposals at present. The +disposition of the rest of the appendix and of the other low-level +proposals will be left up to the report's editor. + + +\piece{Committee work} + +There is a strong sense that some kind of exception system is needed. +However, no specific proposal was ready at the time of the meeting. A +committee has been formed to work on one. What seems to be in the +air might be described as a highly distilled version of the condition +system that Kent Pitman developed for Common Lisp. I hope that I'll +be able to report on this in a future column. + + +On the subject of libraries, Will Clinger's minutes report that +``the authors perceive a need to give some library official status. In +fact, we need to give official sanction to multiple libraries. There +is reason to distinguish between accepted (or standard) libraries, +experimental libraries, and proposals. The accepted libraries can +reduce the intellectual size of the language by removing things like +{\tt string->list} from the report. The experimental libraries would +contain solid implementations of experimental features, including +things that might never deserve to be in the report. The proposal +libraries could contain anything implemented in portable Scheme.'' + + +Among the content of the accepted libraries, some features (such as +those that may be moved out of the body of the report) may be required +to be built in to implementations, while others will be expected to be +available on demand (perhaps using something similar to, but not the +same as, {\tt require} as found in Common Lisp and GNU Emacs). + +A librarian was appointed (Rees), and a library committee is +developing proposals for the charter, structure, and content of the +libraries. + + +\separator + +I would like to acknowledge Will Clinger, who prepared the minutes of +the meeting, and the various people who contributed proposals, +including Bill Rozas and John Ramsdell. Any errors here are my +responsibility, however. Thanks also to Norman Adams and Richard +Kelsey for corrections to a draft of this article. + +I would also like to belatedly acknowledge Norman Adams, Pavel +Curtis, Bruce Donald, and Richard Kelsey for their comments on drafts of +my previous column. + +For future columns, I am entertaining various topic possibilities, +including {\tt eval}, threads, {\tt amb}, and monads. +If you have other ideas, and particularly if you think the written +record on the language is particularly poor in certain areas, please +write and let me know. + +\vspace{2ex} + +%\newpage + +%\bgroup \small + +\piece{Appendix: An implementation of {\tt dynamic-wind}} + +This program is based on my vague recollection of an ancient +manuscript by Chris Hanson and John Lamping. I apologize for the lack +of data abstraction, but the code is more concise this way. + +A state space is a tree with the current state at the root. Each node other +than the root is a triple $\langle\var{before}, \var{after}, +\var{parent}\rangle$, represented in this implementation as two pairs +{\tt((\var{before} .\ \var{after}) .\ \var{parent})}. +Navigating between states requires re-rooting the tree by reversing +parent-child links. + +Since {\tt dynamic-wind} interacts with {\tt +call-with-current-continuation}, this implementation must replace the +usual definition of the latter. + +\begin{code} +(define *here* (list #f)) +\codeskip +(define original-cwcc call-with-current-continuation) +\codeskip +(define (call-with-current-continuation proc) + (let ((here *here*)) + (original-cwcc (lambda (cont) + (proc (lambda results + (reroot! here) + (apply cont results))))))) +\codeskip +(define (dynamic-wind before during after) + (let ((here *here*)) + (reroot! (cons (cons before after) here)) + (call-with-values during + (lambda results + (reroot! here) + (apply values results))))) +\codeskip +(define (reroot! there) + (if (not (eq? *here* there)) + (begin (reroot! (cdr there)) + (let ((before (caar there)) + (after (cdar there))) + (set-car! *here* (cons after before)) + (set-cdr! *here* there) + (set-car! there #f) + (set-cdr! there '()) + (set! *here* there) + (before))))) +\end{code} + +%\egroup + +\end{document} diff --git a/doc/src/module.tex b/doc/src/module.tex new file mode 100644 index 0000000..212d948 --- /dev/null +++ b/doc/src/module.tex @@ -0,0 +1,728 @@ +\documentstyle[11pt]{article} + +\include{code} +\include{latex-stuff} + +\newcommand{\goesto}{\hbox{$\longrightarrow$}} +\newcommand{\alt}{$\vert$} +\newcommand{\arbno}[1]{{{#1}$^*$}} +\newcommand{\hack}{Scheme~48} + +\begin{document} + +\begin{center} +{\Large\bf Another Module System for Scheme} + +\vspace{2ex} +Jonathan Rees \\ +3 January 1993 (updated 15 January 1994) +\end{center} + +\vspace{3ex} + +This memo describes a module system for the Scheme programming +language. The module system is unique in the extent to which it +supports both static linking and rapid turnaround during program +development. The design was influenced by Standard ML +modules\cite{MacQueen:Modules} and by the module system for Scheme +Xerox\cite{Curtis-Rauen:Modules}. It has also been shaped by the +needs of \hack{}, a virtual-machine-based Scheme implementation +designed to run both on workstations and on relatively small (less +than 1 Mbyte) embedded controllers. + +Except where noted, everything described here is implemented in +\hack{}, and exercised by the \hack{} implementation and a few +application programs. + +Unlike the Common Lisp package system, the module system described +here controls the mapping of names to denotations, not the +mapping of strings to symbols. + + +\subsection*{Introduction} + +The module system supports the structured division of a corpus of +Scheme software into a set of modules. Each module has its own +isolated namespace, with visibility of bindings controlled by module +descriptions written in a special {\em configuration language.} + +A module may be instantiated multiple times, producing several {\em +packages}, just as a lambda-expression can be instantiated multiple +times to produce several different procedures. Since single +instantiation is the normal case, I will defer discussion of multiple +instantiation until a later section. For now you can think of a +package as simply a module's internal environment mapping names to +denotations. + +A module exports bindings by providing views onto the underlying +package. Such a view is called a {\em structure} (terminology from +Standard ML). One module may provide several different views. A +structure is just a subset of the package's bindings. The particular +set of names whose bindings are exported is the structure's {\em +interface}. + +A module imports bindings from other modules by either {\em opening} +or {\em accessing} some structures that are built on other packages. +When a structure is opened, all of its exported bindings are visible +in the client package. On the other hand, bindings from an accessed +structure require explicitly qualified references written with the +{\tt structure-ref} operator. + +For example: +\begin{code} + (define-structure foo (export a c cons) + (open scheme) + (begin (define a 1) + (define (b x) (+ a x)) + (define (c y) (* (b a) y)))) +\codeskip + (define-structure bar (export d) + (open scheme foo) + (begin (define (d w) (+ a (c w))))) +\end{code} +This configuration defines two structures, {\tt foo} and {\tt bar}. +{\tt foo} is a view on a package in which the {\tt scheme} structure's +bindings (including {\tt define} and {\tt +}) are visible, together +with bindings for {\tt a}, {\tt b}, +and {\tt c}. {\tt foo}'s interface is {\tt (export a c cons)}, so of +the bindings in its underlying package, {\tt foo} only exports those +three. Similarly, structure {\tt bar} consists of the binding of {\tt +d} from a package in which both {\tt scheme}'s and {\tt foo}'s +bindings are visible. {\tt foo}'s binding of {\tt cons} is imported +from the Scheme structure and then re-exported. + +A module's body, the part following {\tt begin} in the above example, +is evaluated in an isolated lexical scope completely specified by the +package definition's {\tt open} and {\tt access} clauses. In +particular, the binding of the syntactic operator {\tt define-structure} +is not visible unless it comes from some opened structure. Similarly, +bindings from the {\tt scheme} structure aren't visible unless they +become so by {\tt scheme} (or an equivalent structure) being opened. + + +\subsection*{The configuration language} + +The configuration language consists of top-level defining forms for +modules and interfaces. Its syntax is given in figure~1. + +\setbox0\hbox{\goesto} +\newcommand{\altz}{\hbox to 1\wd0{\hfil\alt}} + +%%%%% Put the figure inside a box ? + +\begin{figure} +%\begin{frameit} +\begin{tabbing} + \syn{configuration} \=\goesto{}~\arbno{\syn{definition}} \\ + \syn{definition} \=\goesto{}~ + \tt(define-structure \syn{name} \syn{interface} + \arbno{\syn{clause}}) \\ + \>\altz{}~ \tt(define-structures (\arbno{(\syn{name} \syn{interface})}) + \arbno{\syn{clause}}) \\ + \>\altz{}~ \tt(define-interface \syn{name} \syn{interface}) \\ + \>\altz{}~ \tt(define-syntax \syn{name} \syn{transformer-spec}) \\ + \syn{clause} \=\goesto{}~ \tt(open \arbno{\syn{name}}) \\ + \>\altz{}~ \tt(access \arbno{\syn{name}}) \\ + \>\altz{}~ \tt(begin \syn{program}) \\ + \>\altz{}~ \tt(files \arbno{\syn{filespec}}) \\ + \>\altz{}~ \tt(optimize \arbno{\syn{optimize-spec}}) \\ + \>\altz{}~ \tt(for-syntax \arbno{\syn{clause}}) \\ + \syn{interface} \=\goesto{}~ \tt(export \arbno{\syn{item}}) \\ + \>\altz{}~ \syn{name} \\ + \>\altz{}~ \tt(compound-interface \arbno{\syn{interface}}) \\ + \syn{item} \=\goesto{}~ \syn{name}~ + \alt{}~ \tt(\syn{name} \syn{type}) + \alt{}~ \tt((\arbno{\syn{name}}) \syn{type}) +\end{tabbing} +\caption{The configuration language.} +%\end{frameit} +\end{figure} + + +A {\tt define-structure} form introduces a binding of a name to a +structure. A structure is a view on an underlying package which is +created according to the clauses of the {\tt define-structure} form. +Each structure has an interface that specifies which bindings in the +structure's underlying package can be seen via that structure in other +packages. + +An {\tt open} clause specifies which structures will be opened up for +use inside the new package. At least one package must be specified or +else it will be impossible to write any useful programs inside the +package, since {\tt define}, {\tt lambda}, {\tt cons}, {\tt +structure-ref}, etc.\ will be unavailable. Typical packages to list +in the {\tt open} clause are {\tt scheme}, which exports all bindings +appropriate to Revised$^5$ Scheme, and {\tt structure-refs}, which +exports the {\tt structure-ref} operator (see below). For building +structures that export structures, there is a {\tt defpackage} package +that exports the operators of the configuration language. Many other +structures, such as record and hash table facilities, are also +available in the \hack{} implementation. + +An {\tt access} clause specifies which bindings of names to structures +will be visible inside the package body for use in {\tt structure-ref} +forms. {\tt structure-\ok{}ref} has the following syntax: +\begin{tabbing} +\qquad \syn{expression} \goesto{}~ + \tt(structure-ref \syn{struct-name} \syn{name}) +\end{tabbing} +The \syn{struct-name} must be the name of an {\tt access}ed structure, +and \syn{name} must be something that the structure exports. Only +structures listed in an {\tt access} clause are valid in a {\tt +structure-ref}. If a package accesses any structures, it should +probably open the {\tt structure-refs} structure so that the {\tt +structure-ref} operator itself will be available. + +The package's body is specified by {\tt begin} and/or {\tt files} +clauses. {\tt begin} and {\tt files} have the same semantics, except +that for {\tt begin} the text is given directly in the package +definition, while for {\tt files} the text is stored somewhere in the +file system. The body consists of a Scheme program, that is, a +sequence of definitions and expressions to be evaluated in order. In +practice, I always use {\tt files} in preference to {\tt begin}; {\tt +begin} exists mainly for expository purposes. + +A name's imported binding may be lexically overridden or {\em shadowed} +by simply defining the name using a defining form such as {\tt define} +or {\tt define-\ok{}syntax}. This will create a new binding without having +any effect on the binding in the opened package. For example, one can +do {\tt(define car 'chevy)} without affecting the binding of the name +{\tt car} in the {\tt scheme} package. + +Assignments (using {\tt set!})\ to imported and undefined variables +are not allowed. In order to {\tt set!}\ a top-level variable, the +package body must contain a {\tt define} form defining that variable. +Applied to bindings from the {\tt scheme} structure, this restriction +is compatible with the requirements of the Revised$^5$ Scheme report. + +It is an error for two of a package's opened structures to export two +different bindings for the same name. However, the current +implementation does not check for this situation; a name's binding is +always taken from the structure that is listed first within the {\tt +open} clause. This may be fixed in the future. + +File names in a {\tt files} clause can be symbols, strings, or lists +(Maclisp-style ``namelists''). A ``{\tt.scm}'' file type suffix is +assumed. Symbols are converted to file names by converting to upper +or lower case as appropriate for the host operating system. A +namelist is an operating-system-indepedent way to specify a file +obtained from a subdirectory. For example, the namelist {\tt(rts +record)} specifies the file {\tt record.scm} in the {\tt rts} +subdirectory. + +If the {\tt define-structure} form was itself obtained from a file, +then file names in {\tt files} clauses are interpreted relative to the +directory in which the file containing the {\tt define-structure} form +was found. You can't at present put an absolute path name in the {\tt +files} list. + + +\subsection*{Interfaces} + +An interface can be thought of as the type of a structure. In its +basic form it is just a list of variable names, written {\tt(export +\var{name} \etc)}. However, in place of +a name one may write {\tt(\var{name} \var{type})}, indicating the type +of \var{name}'s binding. Currently the type field is ignored, except +that exported macros must be indicated with type {\tt :syntax}. + +Interfaces may be either anonymous, as in the example in the +introduction, or they may be given names by a {\tt define-interface} +form, for example +\begin{code} + (define-interface foo-interface (export a c cons)) + (define-structure foo foo-interface \etc) +\end{code} +In principle, interfaces needn't ever be named. If an interface +had to be given at the point of a structure's use as well as at the +point of its definition, it would be important to name interfaces in +order to avoid having to write them out twice, with risk of mismatch +should the interface ever change. But they don't. + +Still, there are several reasons to use {\tt define-interface}: +\begin{enumerate} +\item It is important to separate the interface definition from the +package definitions when there are multiple distinct structures that +have the same interface --- that is, multiple implementations of the +same abstraction. + +\item It is conceptually cleaner, and useful for documentation +purposes, to separate a module's specification (interface) from its +implementation (package). + +\item My experience is that configurations that are separated into +interface definitions and package definitions are easier to read; the +long lists of exported bindings just get in the way most of the time. +\end{enumerate} + +The {\tt compound-interface} operator forms an interface that is the +union of two or more component interfaces. For example, +\begin{code} + (define-interface bar-interface + (compound-interface foo-interface (export mumble))) +\end{code} +defines {\tt bar-interface} to be {\tt foo-interface} with the name +{\tt mumble} added. + + +\subsection*{Macros} + +Hygienic macros, as described in +\cite{Clinger-Rees:Macros,Clinger-Rees:R4RS}, are implemented. +Structures may export macros; auxiliary names introduced into the +expansion are resolved in the environment of the macro's definition. + +For example, the {\tt scheme} structure's {\tt delay} macro +is defined by the rewrite rule +\begin{code} + (delay \var{exp}) \xform (make-promise (lambda () \var{exp}))\rm. +\end{code} +The variable {\tt make-promise} is defined in the {\tt scheme} +structure's underlying package, but is not exported. A use of the +{\tt delay} macro, however, always accesses the correct definition +of {\tt make-promise}. Similarly, the {\tt case} macro expands into +uses of {\tt cond}, {\tt eqv?}, and so on. These names are exported +by {\tt scheme}, but their correct bindings will be found even if they +are shadowed by definitions in the client package. + + +\subsection*{Higher-order modules} + +There are {\tt define-module} and {\tt define} forms for +defining modules that are intended to be instantiated multiple times. +But these are pretty kludgey --- for example, compiled code isn't +shared between the instantiations --- so I won't describe them yet. +If you must know, figure it out from the following grammar. +\begin{tabbing} +\qquad + \syn{definition} \=\goesto{}~ + \tt(d\=\tt{}efine-module (\syn{name} \arbno{(\syn{name} \syn{interface})}) \\ + \> \>\arbno{\syn{definition}} \\ + \> \>\syn{name}\tt) \\ + \>\altz{}~ \tt(define \syn{name} + (\syn{name} \arbno{\syn{name}})) +\end{tabbing} + + +\subsection*{Compiling and linking} + +\hack{} has a static linker that produces stand-alone heap images +from module descriptions. One specifies a particular procedure in a +particular structure to be the image's startup procedure (entry +point), and the linker traces dependency links as given by {\tt open} +and {\tt access} clauses to determine the composition of the heap +image. + +There is not currently any provision for separate compilation; the +only input to the static linker is source code. However, it will not +be difficult to implement separate compilation. The unit of +compilation is one module (not one file). Any opened or accessed +structures from which macros are obtained must be processed to the +extent of extracting its macro definitions. The compiler knows from +the interface of an opened or accessed structure which of its exports +are macros. Except for macros, a module may be compiled without any +knowledge of the implementation of its opened and accessed structures. +However, inter-module optimization will be available as an option. + +The main difficulty with separate compilation is resolution of +auxiliary bindings introduced into macro expansions. The module +compiler must transmit to the loader or linker the search path by +which such bindings are to be resolved. In the case of the {\tt delay} +macro's auxiliary {\tt make-promise} (see example above), the loader +or linker needs to know that the desired binding of {\tt make-promise} +is the one apparent in {\tt delay}'s defining package, not in the +package being loaded or linked. + +[I need to describe structure reification.] + + +\subsection*{Semantics of configuration mutation} + +During program development it is often desirable to make changes to +packages and interfaces. In static languages it may be necessary to +recompile and re-link a program in order for such changes to be +reflected in a running system. Even in interactive Common Lisp +implementations, a change to a package's exports often requires +reloading clients that have already mentioned names whose bindings +change. Once {\tt read} resolves a use of a name to a symbol, that +resolution is fixed, so a change in the way that a name resolves to a +symbol can only be reflected by re-{\tt read}ing all such references. + +The \hack{} development environment supports rapid turnaround in +modular program development by allowing mutations to a program's +configuration, and giving a clear semantics to such mutations. The +rule is that variable bindings in a running program are always +resolved according to current structure and interface bindings, even +when these bindings change as a result of edits to the configuration. +For example, consider the following: +\begin{code} + (define-interface foo-interface (export a c)) + (define-structure foo foo-interface + (open scheme) + (begin (define a 1) + (define (b x) (+ a x)) + (define (c y) (* (b a) y)))) + (define-structure bar (export d) + (open scheme foo) + (begin (define (d w) (+ (b w) a)))) +\end{code} +This program has a bug. The variable {\tt b}, which is free in the +definition of {\tt d}, has no binding in {\tt bar}'s package. Suppose +that {\tt b} was supposed to be exported by {\tt foo}, but was omitted +from {\tt foo-interface} by mistake. It is not necessary to +re-process {\tt bar} or any of {\tt foo}'s other clients at this point. +One need only change {\tt foo-interface} and inform the development +system of that one change (using, say, an appropriate Emacs command), +and {\tt foo}'s binding of {\tt b} will be found when procedure {\tt +d} is called. + +Similarly, it is also possible to replace a structure; clients of the +old structure will be modified so that they see bindings from the new +one. Shadowing is also supported in the same way. Suppose that a +client package $C$ opens a structure {\tt foo} that exports a name +{\tt x}, and {\tt foo}'s implementation obtains the binding of {\tt x} +as an import from some other structure {\tt bar}. Then $C$ will see +the binding from {\tt bar}. If one then alters {\tt foo} so that it +shadows {\tt bar}'s binding of {\tt x} with a definition of its own, +then procedures in $C$ that reference {\tt x} will automatically see +{\tt foo}'s definition instead of the one from {\tt bar} that they saw +earlier. + +This semantics might appear to require a large amount of computation +on every variable reference: The specified behavior requires scanning +the package's list of opened structures, examining their interfaces, +on every variable reference, not just at compile time. However, the +development environment uses caching with cache invalidation to make +variable references fast. + + +\subsection*{Command processor support} + +While it is possible to use the \hack{} static linker for program +development, it is far more convenient to use the development +environment, which supports rapid turnaround for program changes. The +programmer interacts with the development environment through a {\em +command processor}. The command processor is like the usual Lisp +read-eval-print loop in that it accepts Scheme forms to evaluate. +However, all meta-level operations, such as exiting the Scheme system +or requests for trace output, are handled by {\em commands,} which are +lexically distinguished from Scheme forms. This arrangement is +borrowed from the Symbolics Lisp Machine system, and is reminiscent of +non-Lisp debuggers. Commands are a little easier to type than Scheme +forms (no parentheses, so you don't have to shift), but more +importantly, making them distinct from Scheme forms ensures that +programs' namespaces aren't clutterred with inappropriate bindings. +Equivalently, the command set is available for use regardless of what +bindings happen to be visible in the current program. This is +especially important in conjunction with the module system, which puts +strict controls on visibility of bindings. + +The \hack{} command processor supports the module system with a +variety of special commands. For commands that require structure +names, these names are resolved in a designated configuration package +that is distinct from the current package for evaluating Scheme forms +given to the command processor. The command processor interprets +Scheme forms in a particular current package, and there are commands +that move the command processor between different packages. + +Commands are introduced by a comma ({\tt,}) and end at the end of +line. The command processor's prompt consists of the name of the +current package followed by a greater-than ({\tt>}). + +\begin{list}{}{}{} + +\item +\begin{code} +,config +\end{code} + The {\tt,config} command sets the command processor's current + package to be the current configuration package. Forms entered at + this point are interpreted as being configuration language forms, + not Scheme forms. + +\item +\begin{code} +,config \var{command} +\end{code} + This form of the {\tt,config} command executes another command in + the current configuration package. For example, +\begin{code} + ,config ,load foo.scm +\end{code} + interprets configuration language forms from the file {\tt + foo.scm} in the current configuration package. + +\item +\begin{code} +,in \var{struct-name} +\end{code} + The {\tt ,in} command moves the command processor to a specified + structure's underlying package. For example: +\begin{code} + user> ,config + config> (define-structure foo (export a) + (open scheme)) + config> ,in foo + foo> (define a 13) + foo> a + 13 +\end{code} + In this example the command processor starts in a package called + {\tt user}, but the {\tt ,config} command moves it into the + configuration package, which has the name {\tt config}. The {\tt + define-structure} form binds, in {\tt config}, the name {\tt foo} to + a structure that exports {\tt a}. Finally, the command {\tt ,in + foo} moves the command processor into structure {\tt foo}'s + underlying package. + + A package's body isn't executed (evaluated) until the package is + {\em loaded}, which is accomplished by the {\tt ,load-package} + command. + +\item +\begin{code} +,in \var{struct-name} \var{command} +\end{code} + This form of the {\tt,in} command executes a single command in the + specified package without moving the command processor into that + package. Example: +\begin{code} + ,in mumble (cons 1 2) + ,in mumble ,trace foo +\end{code} + +\item +\begin{code} +,user $[$\var{command}$]$ +\end{code} + This is similar to the {\tt ,config} and {\tt ,in} commands. It + moves to or executes a command in the user package (which is the + default package when the \hack{} command processor starts). + +\item +\begin{code} +,for-syntax $[$\var{command}$]$ +\end{code} + This is similar to the {\tt ,config} and {\tt ,in} commands. It + moves to or executes a command in the current package's ``package + for syntax,'' which is the package in which the forms $f$ in + {\tt (define-syntax \var{name} $f$)} are evaluated. + +\item +\begin{code} +,load-package \var{struct-name} +\end{code} + The {\tt,load-package} command ensures that the specified structure's + underlying package's program has been loaded. This + consists of (1) recursively ensuring that the packages of any + opened or accessed structures are loaded, followed by (2) + executing the package's body as specified by its definition's {\tt + begin} and {\tt files} forms. + +\item +\begin{code} +,reload-package \var{struct-name} +\end{code} + This command re-executes the structure's package's program. It + is most useful if the program comes from a file or files, when + it will update the package's bindings after mutations to its + source file. + +\item +\begin{code} +,load \var{filespec} \etc +\end{code} + The {\tt,load} command executes forms from the specified file or + files in the current package. {\tt,load \var{filespec}} is similar + to {\tt(load "\var{filespec}")} + except that the name {\tt load} needn't be bound in the current + package to Scheme's {\tt load} procedure. + +\item +\begin{code} +,structure \var{name} \var{interface} +\end{code} + The {\tt,structure} command defines \var{name} in the + configuration package to be a structure with interface + \var{interface} based on the current package. + +\item +\begin{code} +,open \arbno{\var{struct-name}} +\end{code} + The {\tt,open} command opens a new structure in the current + package, as if the package's definition's {\tt open} clause + had listed \var{struct-name}. + +\end{list} + + + +\subsection*{Configuration packages} + +It is possible to set up multiple configuration packages. The default +configuration package opens the following structures: +\begin{itemize} +\item {\tt module-system}, which exports {\tt define-structure} and the + other configuration language keywords, as well as standard types + and type constructors ({\tt :syntax}, {\tt :value}, {\tt proc}, etc.). +\item {\tt built-in-structures}, which exports structures that are + built into the initial \hack{} image; these include {\tt + scheme}, {\tt tables}, and {\tt records}. +\item {\tt more-structures}, which exports additional structures that + are available in the development environment; these include + {\tt sort}, {\tt random}, and {\tt threads}. +\end{itemize} +Note that it does not open {\tt scheme}. + +You can define other configuration packages by simply making a package +that opens {\tt module-system} and, optionally, {\tt +built-in-\ok{}structures}, {\tt more-\ok{}structures}, or other structures that +export structures and interfaces. + +For example: +\begin{code} + > ,config (define-structure foo (export ) + (open module-system + built-in-structures + more-structures)) + > ,in foo + foo> (define-structure x (export a b) + (open scheme) + (files x)) + foo> +\end{code} + +\begin{list}{}{}{} +\item +\begin{code} +,config-package-is \var{struct-name} +\end{code} + The {\tt,config-package-is} command designates a new configuration + package for use by the {\tt,config} command and resolution of + \var{struct-name}s for other commands such as {\tt,in} and + {\tt,open}. +\end{list} + + + +\subsection*{Discussion} + +This module system was not designed as the be-all and end-all of +Scheme module systems; it was only intended to help Richard Kelsey and +me to organize the \hack{} system. Not only does the module system +help avoid name clashes by keeping different subsystems in different +namespaces, it has also helped us to tighten up and generalize +\hack{}'s internal interfaces. \hack{} is unusual among Lisp +implementations in admitting many different possible modes of +operation. Examples of such multiple modes include the following: +\begin{itemize} + \item Linking can be either static or dynamic. + + \item The development environment (compiler, debugger, and command + processor) can run either in the same address space as the program + being developed or in a different address space. The environment and + user program may even run on different processors under different + operating systems\cite{Rees-Donald:Program}. + + \item The virtual machine can be supported by either + of two implementations of its implementation language, Prescheme. +\end{itemize} +The module system has been helpful in organizing these multiple modes. +By forcing us to write down interfaces and module dependencies, the +module system helps us to keep the system clean, or at least to keep +us honest about how clean or not it is. + +The need to make structures and interfaces second-class instead of +first-class results from the requirements of static program analysis: +it must be possible for the compiler and linker to expand macros and +resolve variable bindings before the program is executed. Structures +could be made first-class (as in FX\cite{Sheldon-Gifford:Static}) if a +type system were added to Scheme and the definitions of exported +macros were defined in interfaces instead of in module bodies, but +even in that case types and interfaces would remain second-class. + +The prohibition on assignment to imported bindings makes substitution +a valid optimization when a module is compiled as a block. The block +compiler first scans the entire module body, noting which variables +are assigned. Those that aren't assigned (only {\tt define}d) may be +assumed never assigned, even if they are exported. The optimizer can +then perform a very simple-minded analysis to determine automatically +that some procedures can and should have their calls compiled in line. + +The programming style encouraged by the module system is consistent +with the unextended Scheme language. Because module system features +do not generally show up within module bodies, an individual module +may be understood by someone who is not familiar with the module +system. This is a great aid to code presentation and portability. If +a few simple conditions are met (no name conflicts between packages, +no use of {\tt structure-ref}, and use of {\tt files} in preference to +{\tt begin}), then a multi-module program can be loaded into a Scheme +implementation that does not support the module system. The \hack{} +static linker satisfies these conditions, and can therefore run in +other Scheme implementations. \hack{}'s bootstrap process, which is +based on the static linker, is therefore nonincestuous. This +contrasts with most other integrated programming environments, such as +Smalltalk-80, where the system can only be built using an existing +version of the system itself. + +Like ML modules, but unlike Scheme Xerox modules, this module system +is compositional. That is, structures are constructed by single +syntactic units that compose existing structures with a body of code. +In Scheme Xerox, the set of modules that can contribute to an +interface is open-ended --- any module can contribute bindings to any +interface whose name is in scope. The module system implementation is +a cross-bar that channels definitions from modules to interfaces. The +module system described here has simpler semantics and makes +dependencies easier to trace. It also allows for higher-order +modules, which Scheme Xerox considers unimportant. + +%[Discuss use of module system in the \hack{} implementation? Maybe +%give an extended excerpt from \hack{}'s configuration files?] +% +%[Discuss or flush OPTIMIZE clause.] +% +%[Future work: ideas for anonymous structures and more of a module +%calculus; dealing with name conflicts; interface subtraction.] + + +\begin{thebibliography}{10} + +\bibitem{Clinger-Rees:Macros} +William Clinger and Jonathan~Rees. +\newblock Macros that work. +\newblock {\em Principles of Programming Languages}, January 1991. + +\bibitem{Clinger-Rees:R4RS} +William Clinger and Jonathan~Rees (editors). +\newblock Revised${}^4$ report on the algorithmic language {S}cheme. +\newblock {\em LISP Pointers} IV(3):1--55, July-September 1991. + +\bibitem{Curtis-Rauen:Modules} +Pavel Curtis and James Rauen. +\newblock A module system for Scheme. +\newblock {\em ACM Conference on Lisp and Functional Programming,} +pages 13--19, 1990. + +\bibitem{MacQueen:Modules} +David MacQueen. +\newblock Modules for Standard ML. +\newblock {\em ACM Conference on Lisp and Functional Programming,} +1984. + +\bibitem{Rees-Donald:Program} +Jonathan Rees and Bruce Donald. +\newblock Program mobile robots in Scheme. +\newblock {\em International Conference on Robotics and +Automation,} IEEE, 1992. + +\bibitem{Sheldon-Gifford:Static} +Mark A.~Sheldon and David K.~Gifford. +\newblock Static dependent types for first-class modules. +\newblock {\em ACM Conference on Lisp and Functional Programming,} +pages 20--29, 1990. + +\end{thebibliography} + + +\end{document} diff --git a/doc/src/proto.tex b/doc/src/proto.tex new file mode 100644 index 0000000..9123f3e --- /dev/null +++ b/doc/src/proto.tex @@ -0,0 +1,97 @@ +\newcommand{\xsubsection}[1]{% +\texonly{\subsection{#1}}% +\htmlonly{\strong{#1}\\}% +} + +\newcommand{\evalsto}{% +\texonly{$\rightarrow$}% +\htmlonly{\code{->}}% +} + +\newcommand{\cvar}[1]{% +\texonly{{\rm\em{#1}}}% +\htmlonly{\code{\var{#1}}}% +} + +%%%%%%%%%%%%%%%% Latex prototypes +\texonly{ +\newenvironment{protos}{\list{$\bullet$} +{\leftmargin1.2em\rightmargin0pt\itemsep0pt\parsep0pt\partopsep-2pt}} +{\endlist} + +% The following is for prototypes that have return types. +% (foo int int) -> int + +\newcommand{\proto}[3]{\item\noindent\unskip% +\cindex{\code{#1}}% +\hbox{\spaceskip=0.5em\code{({#1}{\it#2\/})} {$\rightarrow$} {\it#3}}} + +\newcommand{\cproto}[1]{\item\noindent\unskip% +\hbox{\spaceskip=0.5em\code{{#1}}}} + +\newcommand{\cgcproto}[1]{\item\noindent\unskip% +\hbox{\spaceskip=0.5em\code{{#1}}}\hfill\penalty 0% +\hbox{ }\nobreak\hfill\hbox{\rm (may GC)}} + +\newcommand{\protonoresult}[2]{\item\noindent\unskip% +\hbox{\spaceskip=0.5em\code{(\hbox{#1}{\it#2\/})}}} + +% Syntax prototypes + +\newcommand{\syntaxprotonoresult}[2]{\item\noindent\unskip% +\hbox{\spaceskip=0.5em\code{(\hbox{#1}{#2})}}\hfill\penalty 0% +\hbox{ }\nobreak\hfill\hbox{\rm syntax}} + +\newcommand{\syntaxproto}[3]{\syntaxprotonoresult{#1}{#2}% +\hspace*{24pt}{$\rightarrow$} {\it#3}} + +% This can be reduced + +\newcommand{\pconstproto}[2]{\item\noindent\unskip% +\hbox{\spaceskip=0.5em#1}\code\hfill\penalty 0% +\hbox{ }\nobreak\hfill\hbox{\rm #2}} + +% Variable prototype +\newcommand{\constproto}[2]{\pconstproto{#1}{#2}} + +} +%%%%%%%%%%%%%%%% end of Latex proto definitions + +%%%%%%%%%%%%%%%% HTML prototypes +\htmlonly{ +\newenvironment{protos}{\begin{itemize}}{\end{itemize}} + +% The following is for prototypes that have return types. +% (foo int int) -> int + +\newcommand{\proto}[3]{% +%\cindex{\code{#1}}% +\item\noindent\code{({#1}{\var{#2}\/})~-->~{\var{#3}}}} + +\newcommand{\protonoresult}[2]{% +%\cindex{\code{#1}}% +\item\noindent\code{({#1}{\var{#2}\/})}} + +\newcommand{\constproto}[2]{% +\item\noindent\prototagstart\code{{#1}}\prototag{{#2}}} + +\newcommand{\cproto}[1]{% +\item\noindent\code{{#1}}} + +\newcommand{\cgcproto}[1]{% +\item\noindent\prototagstart\code{{#1}}\prototag{(may GC)}} + +\newcommand{\syntaxprotonoresult}[2]{% +\item\noindent\prototagstart\code{({#1}{#2})}\prototag{syntax}} + +\newcommand{\prototagstart}{% +\begin{rawhtml} +
    \end{rawhtml}} + +\newcommand{\prototag}[1]{% +\begin{rawhtml} \end{rawhtml}% +{#1}% +\begin{rawhtml}
    \end{rawhtml}} + +} +%%%%%%%%%%%%%%%% end of HTML proto definitions diff --git a/doc/src/summary.tex b/doc/src/summary.tex new file mode 100644 index 0000000..17c8555 --- /dev/null +++ b/doc/src/summary.tex @@ -0,0 +1,83 @@ +\documentstyle[11pt]{article} + +\pagestyle{empty} +\setlength{\textheight}{9in} +\setlength{\footheight}{0.0in} +\setlength{\topmargin}{0in} + +%Defaults from art10.sty: +%\textwidth 345pt \columnsep 10pt \columnseprule 0pt +%\oddsidemargin 63pt + +\advance\textwidth by 0.5in +\advance\oddsidemargin by -0.25in + + +\begin{document} + +\vspace*{-0.3in} + +\begin{center} +{\large\bf Scheme 48} \\ +\vspace{1ex} +Richard Kelsey ({\tt kelsey@corwin.ccs.northeastern.edu}) \\ +Jonathan Rees ({\tt jar@cs.cornell.edu}) \\ +June 1992 +\end{center} + +\vspace{1ex} + +Scheme 48 is an implementation of the Scheme programming language based +on a virtual machine architecture. The following is an overview of +the project. + +\paragraph{Goals} + +\begin{itemize} +\setlength{\itemsep}{0pt} +\item Straightforward, minimal implementation. +\item Flexible experimental apparatus for research in programming + language design and implementation. +\item Easy to make changes to internal data representations, memory + management, and compilation strategy. +\item High reliability. +\item Fast and complete enough to be a good + development environment for Scheme programs. +\end{itemize} + + +\paragraph{Virtual machine} + +The virtual machine executes a simple byte-code instruction set +similar to the target of the Scheme 311 compiler [Clinger, LFP 1984]. +The interpreter for the virtual instruction set is itself written in +PreScheme, a systems programming dialect of Scheme. A PreScheme +compiler applies intensive source-to-source rewrites to the +interpreter source code and emits low-level C code. When the output +is then compiled by an optimizing C compiler such as gcc, the result +is a very efficient and portable emulator. + +\paragraph{Run-time system} + +The virtual machine is initialized from a specified memory image +containing byte-compiled Scheme code and data. Images (including +small stand-alone applications) are built either by a linker or by +writing out the state of an executing program. A standard memory +image contains a Scheme run-time library ({\tt append}, {\tt read}, +{\tt write}, etc.), a compiler from Scheme to the virtual instruction +set, and a command processor and debugger. In this way Scheme 48 can +be configured to look like a conventional Lisp interpreter. + +In addition to the Scheme run-time library and development +environment, library software includes support for multitasking, +modules (packages), hygienic macros (as described in the Revised$^4$ +Scheme report), records, and exception handling. + +\paragraph{Applications} + +The Scheme 48 system is being used at several sites for research in +memory management, embedded systems, multiprocessing, and computer +system verification. Scheme 48 was chosen as the platform for these +projects because of its internal tractability and flexibility. + +\end{document} diff --git a/doc/src/utilities.tex b/doc/src/utilities.tex new file mode 100644 index 0000000..08f6da1 --- /dev/null +++ b/doc/src/utilities.tex @@ -0,0 +1,383 @@ +\documentclass{article} +\usepackage{hyperlatex} + +\include{proto} + +% Make a few big HTML files, and not a lot of small ones. +\setcounter{htmldepth}{1} + +\makeindex + +\title{Scheme 48 User's Guide} +\author{Richard A. Kelsey} + +%\date{} + +\begin{document} + +\maketitle + +\section{ASCII character encoding} + +These are in the structure \code{ascii}. + +\begin{protos} +\proto{char->ascii}{ char}{integer} +\proto{ascii->char}{ integer}{char} +\end{protos} +\noindent +These are identical to \code{char->integer} and \code{integer->char} except that + they use the ASCII encoding. + +\begin{protos} +\constproto{ascii-limit}{integer} +\constproto{ascii-whitespaces}{list of integers} +\end{protos} +\code{Ascii-limit} is one more than the largest value that \code{char->ascii} + may return. +\code{Ascii-whitespaces} is a list of the ASCII values of whitespace characters + (space, tab, line feed, form feed, and carriage return). + +\section{Bitwise integer operations} + +These functions use the two's-complement representation for integers. +There is no limit to the number of bits in an integer. +They are in the structures \code{bitwise} and \code{big-scheme}. + +\begin{protos} +\proto{bitwise-and}{ integer integer}{integer} +\proto{bitwise-ior}{ integer integer}{integer} +\proto{bitwise-xor}{ integer integer}{integer} +\proto{bitwise-not}{ integer} {integer} +\end{protos} +\noindent +These perform various logical operations on integers on a bit-by-bit +basis. `\code{ior}' is inclusive OR and `\code{xor}' is exclusive OR. + +\begin{protos} +\proto{arithmetic-shift}{ integer bit-count}{integer} +\end{protos} +\noindent Shifts the integer by the given bit count, which must be an integer, + shifting left for positive counts and right for negative ones. +Shifting preserves the integer's sign. + +\section{Arrays} + +These are N-dimensional, zero-based arrays and + are in the structure \code{arrays}. + +The array interface is derived from one written by Alan Bawden. + +\begin{protos} +\proto{make-array}{ value dimension$_0$ \ldots}{array} +\proto{array}{ dimensions element$_0$ \ldots}{array} +\proto{copy-array}{ array}{array} +\end{protos} +\noindent +\code{Make-array} makes a new array with the given dimensions, each of which + must be a non-negative integer. +Every element is initially set to \cvar{value}. +\code{Array} Returns a new array with the given dimensions and elements. +\cvar{Dimensions} must be a list of non-negative integers, +The number of elements should be the equal to the product of the + dimensions. +The elements are stored in row-major order. +\begin{example} +(make-array 'a 2 3) \evalsto \{Array 2 3\} + +(array '(2 3) 'a 'b 'c 'd 'e 'f) + \evalsto \{Array 2 3\} +\end{example} + +\code{Copy-array} returns a copy of \cvar{array}. +The copy is identical to the \cvar{array} but does not share storage with it. + + +\begin{protos} +\proto{array?}{ value}{boolean} +\end{protos} +\noindent +Returns \code{\#t} if \cvar{value} is an array. + +\begin{protos} +\proto{array-ref}{ array index$_0$ \ldots}{value} +\protonoresult{array-set!}{ array value index$_0$ \ldots} +\proto{array->vector}{ array}{vector} +\proto{array-dimensions}{ array}{list} +\end{protos} +\noindent +\code{Array-ref} returns the specified array element and \code{array-set!} + replaces the element with \cvar{value}. +\begin{example} +(let ((a (array '(2 3) 'a 'b 'c 'd 'e 'f))) + (let ((x (array-ref a 0 1))) + (array-set! a 'g 0 1) + (list x (array-ref a 0 1)))) + \evalsto '(b g) +\end{example} + +\code{Array->vector} returns a vector containing the elements of \cvar{array} + in row-major order. +\code{Array-dimensions} returns the dimensions of + the array as a list. + +\begin{protos} +\proto{make-shared-array}{ array linear-map dimension$_0$ \ldots}{array} +\end{protos} +\noindent +\code{Make-shared-array} makes a new array that shares storage with \cvar{array} + and uses \cvar{linear-map} to map indicies to elements. +\cvar{Linear-map} must accept as many arguments as the number of + \cvar{dimension}s given and must return a list of non-negative integers + that are valid indicies into \cvar{array}. +\begin{example} +(array-ref (make-shared-array a f i0 i1 ...) + j0 j1 ...) +\end{example} +is equivalent to +\begin{example} +(apply array-ref a (f j0 j1 ...)) +\end{example} + +As an example, the following function makes the transpose of a two-dimensional + array: +\begin{example} +(define (transpose array) + (let ((dimensions (array-dimensions array))) + (make-shared-array array + (lambda (x y) + (list y x)) + (cadr dimensions) + (car dimensions)))) + +(array->vector + (transpose + (array '(2 3) 'a 'b 'c 'd 'e 'f))) + \evalsto '(a d b e c f) +\end{example} + +\section{Records} + +New types can be constructed using the \code{define-record-type} macro + from the \code{define-record-types} structure +The general syntax is: +\begin{example} +(define-record-type \cvar{tag} \cvar{type-name} + (\cvar{constructor-name} \cvar{field-tag} \ldots) + \cvar{predicate-name} + (\cvar{field-tag} \cvar{accessor-name} [\cvar{modifier-name}]) + \ldots) +\end{example} +This makes the following definitions: +\begin{protos} +\constproto{\cvar{type-name}}{type} +\proto{\cvar{constructor-name}}{ field-init \ldots}{type-name} +\proto{\cvar{predicate-name}}{ value}{boolean} +\proto{\cvar{accessor-name}}{ type-name}{value} +\protonoresult{\cvar{modifier-name}}{ type-name value} +\end{protos} +\noindent +\cvar{Type-name} is the record type itself, and can be used to + specify a print method (see below). +\cvar{Constructor-name} is a constructor that accepts values + for the fields whose tags are specified. +\cvar{Predicate-name} to a predicate that can returns \code{\#t} for + elements of the type and \code{\#f} for everything else. +The \cvar{accessor-name}s retrieve the values of fields, + and the \cvar{modifier-name}'s update them. +The \cvar{tag} is used in printing instances of the record type and + the field tags are used in the inspector and to match + constructor arguments with fields. + +\begin{protos} +\protonoresult{define-record-discloser}{ type discloser} +\end{protos} +\noindent +\code{Define-record-discloser} determines how + records of type \cvar{type} are printed. +\cvar{Discloser} should be procedure which takes a single + record of type \cvar{type} and returns a list whose car is + a symbol. +The record will be printed as the value returned by \cvar{discloser} + with curly braces used instead of the usual parenthesis. + +For example +\begin{example} +(define-record-type pare :pare + (kons x y) + pare? + (x kar set-kar!) + (y kdr)) +\end{example} + defines \code{kons} to be a constructor, \code{kar} and \code{kdr} to be + accessors, \code{set-kar!} to be a modifier, and \code{pare?} to be a predicate + for a new type of object. +The type itself is named \code{:pare}. +\code{Pare} is a tag used in printing the new objects. + +By default, the new objects print as \code{\#{Pare}}. +The print method can be modified using DEFINE-RECORD-DISCLOSER: +\begin{example} +(define-record-discloser :pare + (lambda (p) `(pare ,(kar p) ,(kdr p)))) +\end{example} + will cause the result of \code{(kons 1 2)} to print as + \code{\#\{pare 1 2\}}. + +\section{Finite record types} + +The structure \code{finite-types} has + two macros for defining `finite' record types. +These are record types for which there are a fixed number of instances, + which are created when the record type is defined. +The syntax for the defining a finite type is: +\begin{example} +(define-finite-type \cvar{tag} \cvar{type-name} + (\cvar{field-tag} \ldots) + \cvar{predicate-name} + \cvar{vector-of-elements-name} + \cvar{name-accessor} + \cvar{index-accessor} + (\cvar{field-tag} \cvar{accessor-name} [\cvar{modifier-name}]) + \ldots + ((\cvar{element-name} \cvar{field-value} \ldots) + \ldots)) +\end{example} +This differs from \code{define-record-type} in the following ways: +\begin{itemize} +\item No name is specified for the constructor, but the field arguments + to the constructor are listed. +\item The \cvar{vector-of-elements-name} is added; it will be bound + to a vector containing all of the elements of the type. +These are constructed by applying the (unnamed) constructor to the + initial field values at the end of the form. +\item There are names for accessors for two required fields, name + and index. +These fields are not settable, and are not to be included + in the argument list for the constructor. +\item The form ends with the names and the initial field values for + the elements of the type. +The name must be first. +The remaining values must match the \cvar{field-tag}s in the constructor's + argument list. +\item \cvar{Tag} is bound to a macro that maps \cvar{element-name}s to the + the corresponding element of the vector. +The name lookup is done at macro-expansion time. +\end{itemize} + +\begin{example} +(define-finite-type color :color + (red green blue) + color? + colors + color-name + color-index + (red color-red) + (green color-green) + (blue color-blue) + ((white 255 255 255) + (black 0 0 0) + (yellow 255 255 0) + (maroon 176 48 96))) + +(color-name (vector-ref colors 0)) \evalsto white +(color-name (color black)) \evalsto black +(color-index (color yellow)) \evalsto 2 +(color-red (color maroon)) \evalsto 176 +\end{example} + +Enumerated types are finite types whose only fields are the name + and the index. +The syntax for defining an enumerated type is: +\begin{example} +(define-enumerated-type \cvar{tag} \cvar{type-name} + \cvar{predicate-name} + \cvar{vector-of-elements-name} + \cvar{name-accessor} + \cvar{index-accessor} + (\cvar{element-name} \ldots)) +\end{example} +In the absence of any additional fields, both the constructor argument + list and the initial field values are not required. + +The above example of a finite type can be pared down to the following + enumerated type: +\begin{example} +(define-enumerated-type color :color + color? + colors + color-name + color-index + (white black yellow maroon)) + +(color-name (vector-ref colors 0)) \evalsto white +(color-name (color black)) \evalsto black +(color-index (color yellow)) \evalsto 2 +\end{example} + +\section{Hash tables} + +These are generic hash tables, and are in the structure \code{tables}. +Strictly speaking they are more maps than tables, as every table has a + value for every possible key (for that type of table). +All but a finite number of those values are \code{\#f}. + +\begin{protos} +\proto{make-table}{}{table} +\proto{make-symbol-table}{}{symbol-table} +\proto{make-string-table}{}{string-table} +\proto{make-integer-table}{}{integer-table} +\proto{make-table-maker}{ compare-proc hash-proc}{procedure} +\protonoresult{make-table-immutable!}{ table} +\end{protos} +\noindent +The first four functions listed make various kinds of tables. +\code{Make-table} returns a table whose keys may be symbols, integer, + characters, booleans, or the empty list (these are also the values + that may be used in \code{case} expressions). +As with \code{case}, comparison is done using \code{eqv?}. +The comparison procedures used in symbol, string, and integer tables are + \code{eq?}, \code{string=?}, and \code{=}. + +\code{Make-table-maker} takes two procedures as arguments and returns + a nullary table-making procedure. +\cvar{Compare-proc} should be a two-argument equality predicate. +\cvar{Hash-proc} should be a one argument procedure that takes a key + and returns a non-negative integer hash value. +If \code{(\cvar{compare-proc} \cvar{x} \cvar{y})} returns true, + then \code{(= (\cvar{hash-proc} \cvar{x}) (\cvar{hash-proc} \cvar{y}))} + must also return true. +For example, \code{make-integer-table} could be defined + as \code{(make-table-maker = abs)}. + +\code{Make-table-immutable!} prohibits future modification to its argument. + +\begin{protos} +\proto{table?}{ value}{boolean} +\proto{table-ref}{ table key}{value or \code{\#f}} +\protonoresult{table-set!}{ table key value} +\protonoresult{table-walk}{ procedure table} +\end{protos} +\noindent +\code{Table?} is the predicate for tables. +\code{Table-ref} and \code{table-set!} access and modify the value of \cvar{key} + in \cvar{table}. +\code{Table-walk} applies \cvar{procedure}, which must accept two arguments, + to every associated key and non-\code{\#f} value in \code{table}. + +\begin{protos} +\proto{default-hash-function}{ value}{integer} +\proto{string-hash}{ string}{integer} +\end{protos} +\noindent +\code{default-hash-function} is the hash function used in the tables + returned by \code{make-table}, and \code{string-hash} it the one used + by \code{make-string-table}. + +%\W \chapter*{Index} +%\W \htmlprintindex +%\T \input{doc.ind} + +\end{document} + + diff --git a/doc/threads.txt b/doc/threads.txt new file mode 100644 index 0000000..393f006 --- /dev/null +++ b/doc/threads.txt @@ -0,0 +1,87 @@ + + Threads + +The following are exported by the THREADS structure. + +(SPAWN thunk) +(SPAWN thunk name) + Create and schedule a new thread that will execute . The optional + name is used when printing the thread. + +(RELINQUISH-TIMESLICE) + Let other threads run for a while. + +(SLEEP time) + Sleep for