From 606245fc41918819dcb9c9278a61bf62373b8f19 Mon Sep 17 00:00:00 2001 From: marting Date: Tue, 14 Sep 1999 12:45:02 +0000 Subject: [PATCH] *** empty log message *** --- .gitignore | 28 + COPYING | 46 + INSTALL | 120 + Makefile.in | 535 + README | 93 + acconfig.h | 32 + build/build-external-modules | 28 + build/build-usual-image | 33 + build/filenames.make | 7 + build/filenames.scm | 47 + build/initial.debug | 6351 ++++++++++ build/initial.image | Bin 0 -> 590765 bytes build/initial.scm | 58 + build/load-linker.exec | 90 + build/lucid-script.lisp | 82 + build/minor-version-number | 1 + c/c-mods.h | 4 + c/event.h | 33 + c/extension.c | 236 + c/external.c | 947 ++ c/fake/dlfcn.h | 11 + c/fake/libdl1.c | 101 + c/fake/libdl2.c | 43 + c/fake/sigact.h | 15 + c/fake/strerror.c | 22 + c/fake/strerror.h | 8 + c/fake/sys-select.h | 9 + c/fd-io.h | 16 + c/io.h | 12 + c/main.c | 181 + c/old-scheme48.h | 110 + c/prescheme.h | 59 + c/scheme48.h | 459 + c/scheme48.h.in | 202 + c/scheme48heap.c | 2357 ++++ c/scheme48heap.h | 53 + c/scheme48vm-prelude.h | 41 + c/scheme48vm.c | 10513 ++++++++++++++++ c/scheme48vm.h | 61 + c/sysdep.h.in | 99 + c/unix/dynamo-test.c | 40 + c/unix/dynamo.c | 185 + c/unix/event.c | 589 + c/unix/fd-io.c | 181 + c/unix/io.c | 296 + c/unix/misc.c | 129 + c/unix/socket.c | 376 + c/unix/test.c | 12 + c/write-barrier.h | 2 + configure | 1925 +++ configure.in | 130 + doc/big-scheme.txt | 309 + doc/external.ps | 4430 +++++++ doc/hacking.txt | 290 + doc/html/external.html | 690 + doc/html/utilities.html | 315 + doc/install.txt | 159 + doc/io.txt | 201 + doc/meeting.ps | 1090 ++ doc/module.ps | 1417 +++ doc/news.txt | 700 + doc/no-leaf-env.txt | 175 + doc/package.txt | 81 + doc/scheme48.man | 81 + doc/src/code.tex | 94 + doc/src/external.tex | 888 ++ doc/src/hyperlatex.sty | 253 + doc/src/meeting.tex | 439 + doc/src/module.tex | 728 ++ doc/src/proto.tex | 97 + doc/src/summary.tex | 83 + doc/src/utilities.tex | 383 + doc/threads.txt | 87 + doc/todo.txt | 243 + doc/type.txt | 240 + doc/user-guide.txt | 709 ++ doc/utilities.ps | 2536 ++++ emacs/README | 47 + emacs/cmulisp.el | 693 + emacs/cmuscheme.el | 433 + emacs/cmuscheme48.el | 99 + emacs/cmushell.el | 594 + emacs/comint.el | 1372 ++ emacs/jar-hacks.el | 91 + gdbinit | 98 + install-sh | 238 + ps-compiler/compile-gc.scm | 18 + ps-compiler/compile-vm-no-gc.scm | 27 + ps-compiler/compile-vm.scm | 29 + ps-compiler/doc/node.txt | 340 + ps-compiler/doc/todo.txt | 15 + ps-compiler/front/cps.scm | 124 + ps-compiler/front/jump.scm | 319 + ps-compiler/front/special.scm | 224 + ps-compiler/front/top.scm | 91 + ps-compiler/interfaces.scm | 258 + ps-compiler/load-ps-compiler.scm | 40 + ps-compiler/load-scheme.scm | 11 + ps-compiler/minor-version-number | 1 + ps-compiler/node/arch.scm | 40 + ps-compiler/node/leftovers.scm | 23 + ps-compiler/node/let-nodes.scm | 280 + ps-compiler/node/node-equal.scm | 77 + ps-compiler/node/node-util.scm | 723 ++ ps-compiler/node/node.scm | 544 + ps-compiler/node/pp-cps.scm | 355 + ps-compiler/node/primop.scm | 128 + ps-compiler/node/vector.scm | 212 + ps-compiler/package-defs.scm | 235 + ps-compiler/param.scm | 42 + ps-compiler/prescheme/c-call.scm | 353 + ps-compiler/prescheme/c-decl.scm | 385 + ps-compiler/prescheme/c-stuff | 131 + ps-compiler/prescheme/c.scm | 467 + ps-compiler/prescheme/display.scm | 224 + ps-compiler/prescheme/eval.scm | 214 + ps-compiler/prescheme/expand.scm | 77 + ps-compiler/prescheme/flatten.scm | 406 + ps-compiler/prescheme/form.scm | 666 + ps-compiler/prescheme/front-end.scm | 133 + ps-compiler/prescheme/hoist.scm | 162 + ps-compiler/prescheme/infer-early.scm | 341 + ps-compiler/prescheme/inference.scm | 94 + ps-compiler/prescheme/interfaces.scm | 215 + ps-compiler/prescheme/linking.scm | 236 + ps-compiler/prescheme/merge.scm | 296 + ps-compiler/prescheme/node-type.scm | 78 + ps-compiler/prescheme/package-defs.scm | 310 + ps-compiler/prescheme/primitive.scm | 46 + ps-compiler/prescheme/primop/arith.scm | 250 + ps-compiler/prescheme/primop/base.scm | 159 + ps-compiler/prescheme/primop/c-arith.scm | 93 + ps-compiler/prescheme/primop/c-base.scm | 343 + ps-compiler/prescheme/primop/c-io.scm | 169 + ps-compiler/prescheme/primop/c-primop.scm | 29 + ps-compiler/prescheme/primop/c-record.scm | 42 + ps-compiler/prescheme/primop/c-vector.scm | 242 + ps-compiler/prescheme/primop/io.scm | 38 + ps-compiler/prescheme/primop/primop.scm | 163 + ps-compiler/prescheme/primop/scm-arith.scm | 187 + ps-compiler/prescheme/primop/scm-memory.scm | 122 + ps-compiler/prescheme/primop/scm-record.scm | 46 + ps-compiler/prescheme/primop/scm-scheme.scm | 403 + ps-compiler/prescheme/primop/vector.scm | 82 + ps-compiler/prescheme/ps-syntax.scm | 116 + ps-compiler/prescheme/record.scm | 122 + ps-compiler/prescheme/spec.scm | 101 + ps-compiler/prescheme/substitute.scm | 324 + ps-compiler/prescheme/test/boolean.scm | 25 + ps-compiler/prescheme/test/buffer.scm | 72 + ps-compiler/prescheme/test/bvector.scm | 11 + ps-compiler/prescheme/test/cell.scm | 18 + ps-compiler/prescheme/test/coerce.scm | 29 + ps-compiler/prescheme/test/dispatch.scm | 64 + ps-compiler/prescheme/test/dispatch2.scm | 57 + ps-compiler/prescheme/test/eval.scm | 18 + ps-compiler/prescheme/test/eval2.scm | 12 + ps-compiler/prescheme/test/eval3.scm | 38 + ps-compiler/prescheme/test/external.scm | 10 + ps-compiler/prescheme/test/fact.cps | 27 + ps-compiler/prescheme/test/fact.scm | 14 + ps-compiler/prescheme/test/fact2.scm | 85 + ps-compiler/prescheme/test/goto.scm | 20 + ps-compiler/prescheme/test/hoist.scm | 15 + ps-compiler/prescheme/test/integers.scm | 11 + ps-compiler/prescheme/test/letrec.scm | 44 + ps-compiler/prescheme/test/list.scm | 236 + ps-compiler/prescheme/test/loop.scm | 54 + ps-compiler/prescheme/test/memory.scm | 8 + ps-compiler/prescheme/test/package-defs.scm | 67 + ps-compiler/prescheme/test/poly.scm | 11 + ps-compiler/prescheme/test/prescheme.h | 70 + ps-compiler/prescheme/test/record.scm | 29 + ps-compiler/prescheme/test/select.scm | 69 + ps-compiler/prescheme/test/simp.scm | 19 + ps-compiler/prescheme/test/string.scm | 54 + ps-compiler/prescheme/test/test.scm | 72 + ps-compiler/prescheme/test/values.scm | 11 + ps-compiler/prescheme/test/vector.scm | 32 + ps-compiler/prescheme/test/vector2.scm | 34 + ps-compiler/prescheme/test/write.scm | 19 + ps-compiler/prescheme/to-cps.scm | 631 + ps-compiler/prescheme/top.scm | 318 + ps-compiler/prescheme/type-scheme.scm | 107 + ps-compiler/prescheme/type-var.scm | 149 + ps-compiler/prescheme/type.scm | 233 + ps-compiler/prescheme/unused/Notes | 46 + ps-compiler/prescheme/unused/assert.scm | 152 + .../prescheme/unused/cps-to-scheme.scm | 340 + ps-compiler/prescheme/unused/data.scm | 193 + ps-compiler/prescheme/unused/data.txt | 73 + ps-compiler/prescheme/unused/dispatch.scm | 169 + ps-compiler/prescheme/unused/infer-data.scm | 381 + ps-compiler/prescheme/unused/ps-syntax.scm | 116 + ps-compiler/prescheme/unused/record.scm | 19 + ps-compiler/prescheme/unused/track-read.scm | 285 + ps-compiler/prescheme/unused/user.scm | 104 + ps-compiler/simp/call.scm | 251 + ps-compiler/simp/join.scm | 223 + ps-compiler/simp/let.scm | 155 + ps-compiler/simp/pattern.scm | 414 + ps-compiler/simp/simplify.scm | 93 + ps-compiler/util/byte-vector.scm | 93 + ps-compiler/util/dominators.scm | 273 + ps-compiler/util/expand-vec.scm | 124 + ps-compiler/util/separators.scm | 195 + ps-compiler/util/ssa.scm | 177 + ps-compiler/util/strong.scm | 147 + ps-compiler/util/syntax.scm | 61 + ps-compiler/util/transitive.scm | 401 + ps-compiler/util/util.scm | 187 + ps-compiler/util/z-set.scm | 38 + scheme/alt-packages.scm | 135 + scheme/alt/ascii.scm | 69 + scheme/alt/bitwise-tests.scm | 58 + scheme/alt/bitwise.scm | 44 + scheme/alt/closure.scm | 11 + scheme/alt/code-vector.scm | 19 + scheme/alt/config.scm | 199 + scheme/alt/contin.scm | 20 + scheme/alt/environments.scm | 7 + scheme/alt/escape.scm | 32 + scheme/alt/features-packages.scm | 29 + scheme/alt/features.scm | 53 + scheme/alt/fluid.scm | 33 + scheme/alt/init-defpackage.scm | 14 + scheme/alt/jar-defrecord.scm | 47 + scheme/alt/locations.scm | 31 + scheme/alt/loophole.scm | 9 + scheme/alt/low-packages.scm | 28 + scheme/alt/low.scm | 25 + scheme/alt/primitives.scm | 181 + scheme/alt/pseudoscheme-features.scm | 111 + scheme/alt/pseudoscheme-record.scm | 19 + scheme/alt/queue.scm | 28 + scheme/alt/record.scm | 96 + scheme/alt/reroot.scm | 54 + scheme/alt/schemetoc-features.scm | 121 + scheme/alt/schemetoc-record.scm | 120 + scheme/alt/silly.scm | 10 + scheme/alt/syntax.scm | 204 + scheme/alt/t-features.scm | 118 + scheme/alt/t-record.scm | 57 + scheme/alt/table.scm | 15 + scheme/alt/template.scm | 21 + scheme/alt/values.scm | 19 + scheme/alt/weak.scm | 8 + scheme/bcomp/binding.scm | 97 + scheme/bcomp/cenv.scm | 91 + scheme/bcomp/comp-exp.scm | 697 + scheme/bcomp/comp-package.scm | 92 + scheme/bcomp/comp-prim.scm | 792 ++ scheme/bcomp/comp.scm | 152 + scheme/bcomp/config.scm | 34 + scheme/bcomp/ddata.scm | 36 + scheme/bcomp/for-reify.scm | 55 + scheme/bcomp/interface.scm | 87 + scheme/bcomp/module-language.scm | 220 + scheme/bcomp/mtype.scm | 823 ++ scheme/bcomp/name.scm | 165 + scheme/bcomp/node.scm | 143 + scheme/bcomp/optimize.scm | 28 + scheme/bcomp/package-undef.scm | 207 + scheme/bcomp/package.scm | 418 + scheme/bcomp/primop.scm | 33 + scheme/bcomp/read-form.scm | 31 + scheme/bcomp/recon.scm | 323 + scheme/bcomp/rules.scm | 278 + scheme/bcomp/scan-package.scm | 126 + scheme/bcomp/schemify.scm | 141 + scheme/bcomp/segment.scm | 331 + scheme/bcomp/stack-check.scm | 284 + scheme/bcomp/state.scm | 106 + scheme/bcomp/syntax.scm | 628 + scheme/bcomp/thingie.scm | 16 + scheme/bcomp/transform.scm | 108 + scheme/bcomp/type.scm | 53 + scheme/bcomp/usual.scm | 302 + scheme/bcomp/var-util.scm | 21 + scheme/big/array.scm | 319 + scheme/big/big-util.scm | 204 + scheme/big/bigbit.scm | 207 + scheme/big/callback.scm | 293 + scheme/big/compose-cont.scm | 44 + scheme/big/defrecord.scm | 147 + scheme/big/destructure.scm | 63 + scheme/big/dump.scm | 429 + scheme/big/external.scm | 127 + scheme/big/filename.scm | 115 + scheme/big/finite-type.scm | 164 + scheme/big/format.scm | 154 + scheme/big/general-table.scm | 270 + scheme/big/import-def.scm | 67 + scheme/big/linked-queue.scm | 74 + scheme/big/lu-decomp.scm | 144 + scheme/big/more-port.scm | 329 + scheme/big/pipe.scm | 413 + scheme/big/placeholder.scm | 49 + scheme/big/pp.scm | 431 + scheme/big/queue.scm | 92 + scheme/big/random.scm | 61 + scheme/big/receive.scm | 8 + scheme/big/search-tree.scm | 441 + scheme/big/socket.scm | 117 + scheme/big/sort.scm | 151 + scheme/big/strong.scm | 152 + scheme/comp-packages.scm | 338 + scheme/debug-packages.scm | 133 + scheme/debug/bench.scm | 23 + scheme/debug/byte-code-test.scm | 85 + scheme/debug/check.scm | 315 + scheme/debug/describe.scm | 41 + scheme/debug/fact.scm | 9 + scheme/debug/fix-low.scm | 72 + scheme/debug/for-debugging.scm | 59 + scheme/debug/graph.scm | 142 + scheme/debug/level-0.scm | 30 + scheme/debug/link-debug.scm | 36 + scheme/debug/linker.scm | 34 + scheme/debug/low-test-packages.scm | 7 + scheme/debug/low-test.scm | 312 + scheme/debug/mini-command.scm | 67 + scheme/debug/mini-eval.scm | 113 + scheme/debug/mini-package.scm | 75 + scheme/debug/mini-start.scm | 19 + scheme/debug/mumble-packages.scm | 73 + scheme/debug/mutation.scm | 130 + scheme/debug/profile.scm | 107 + scheme/debug/r5-system.scm | 22 + scheme/debug/read-image.scm | 223 + scheme/debug/run.scm | 281 + scheme/debug/small-packages.scm | 8 + scheme/debug/small.scm | 153 + scheme/debug/spatial-hack.scm | 63 + scheme/debug/test-generic.scm | 34 + scheme/debug/test-methods.scm | 37 + scheme/debug/test.scm | 34 + scheme/debug/thread-socket.scm | 60 + scheme/debug/tiny-packages.scm | 7 + scheme/debug/tiny.scm | 66 + scheme/debug/vector-space.scm | 132 + scheme/debug/wind-test.scm | 52 + scheme/env/assem.scm | 420 + scheme/env/basic-command.scm | 68 + scheme/env/build.scm | 74 + scheme/env/command-level.scm | 530 + scheme/env/command.scm | 487 + scheme/env/debug.scm | 571 + scheme/env/debuginfo.scm | 76 + scheme/env/disasm.scm | 249 + scheme/env/disclosers.scm | 349 + scheme/env/dispcond.scm | 77 + scheme/env/flatload.scm | 107 + scheme/env/init-defpackage.scm | 30 + scheme/env/inspect.scm | 479 + scheme/env/jar-assem.scm | 132 + scheme/env/list-interface.scm | 46 + scheme/env/load-package.scm | 22 + scheme/env/pacman.scm | 328 + scheme/env/pedit.scm | 355 + scheme/env/profile.scm | 173 + scheme/env/read-command.scm | 194 + scheme/env/shadow.scm | 73 + scheme/env/space.scm | 206 + scheme/env/start.scm | 67 + scheme/env/traverse.scm | 213 + scheme/env/version-info.scm | 3 + scheme/infix/packages.scm | 29 + scheme/infix/pratt.scm | 308 + scheme/infix/sgol-runtime.scm | 11 + scheme/infix/sgol.scm | 213 + scheme/infix/tokenize.scm | 154 + scheme/initial-packages.scm | 105 + scheme/interfaces.scm | 1185 ++ scheme/link-packages.scm | 86 + scheme/link/data.scm | 139 + scheme/link/generate-c-header.scm | 283 + scheme/link/generate-old-c-header.scm | 160 + scheme/link/link.scm | 150 + scheme/link/loadc.scm | 21 + scheme/link/reify.scm | 283 + scheme/link/transport.scm | 283 + scheme/link/write-image.scm | 66 + scheme/low-packages.scm | 34 + scheme/misc/annotate.scm | 39 + scheme/misc/doodl.scm | 299 + scheme/misc/either.scm | 90 + scheme/misc/engine.scm | 70 + scheme/misc/getenv.scm | 15 + scheme/misc/hilbert.scm | 107 + scheme/misc/ilength.scm | 33 + scheme/misc/integertostring.scm | 66 + scheme/misc/load-static.scm | 42 + scheme/misc/mail.scm | 34 + scheme/misc/packages.scm | 134 + scheme/misc/pipe.scm | 51 + scheme/misc/psd-s48.scm | 129 + scheme/misc/remote.scm | 148 + scheme/misc/require.scm | 40 + scheme/misc/separate.scm | 140 + scheme/misc/shift-reset.scm | 155 + scheme/misc/sicp.scm | 112 + scheme/misc/static.scm | 216 + scheme/misc/syscall.scm | 93 + scheme/misc/test-doodl.scm | 52 + scheme/more-interfaces.scm | 384 + scheme/more-packages.scm | 726 ++ scheme/opt/analyze.scm | 299 + scheme/opt/flatten.scm | 350 + scheme/opt/inline.scm | 216 + scheme/opt/sort.scm | 117 + scheme/opt/tst.scm | 26 + scheme/opt/usage.scm | 230 + scheme/packages.scm | 383 + scheme/prescheme/interface.scm | 88 + scheme/prescheme/load.scm | 8 + scheme/prescheme/memory.scm | 255 + scheme/prescheme/memory2.scm | 244 + scheme/prescheme/package-defs.scm | 38 + scheme/prescheme/prescheme.scm | 138 + scheme/prescheme/ps-defenum.scm | 98 + scheme/rts-packages.scm | 332 + scheme/rts/base.scm | 424 + scheme/rts/bignum.scm | 343 + scheme/rts/channel-io.scm | 160 + scheme/rts/channel-port.scm | 228 + scheme/rts/channel.scm | 39 + scheme/rts/condition.scm | 77 + scheme/rts/continuation.scm | 83 + scheme/rts/current-port.scm | 65 + scheme/rts/defenum.scm | 72 + scheme/rts/env.scm | 108 + scheme/rts/eval.scm | 58 + scheme/rts/exception.scm | 169 + scheme/rts/floatnum.scm | 284 + scheme/rts/fluid.scm | 94 + scheme/rts/init.scm | 39 + scheme/rts/innum.scm | 108 + scheme/rts/interrupt.scm | 118 + scheme/rts/jar-defrecord.scm | 105 + scheme/rts/lize.scm | 35 + scheme/rts/lock.scm | 56 + scheme/rts/low.scm | 193 + scheme/rts/method.scm | 515 + scheme/rts/number.scm | 82 + scheme/rts/numio.scm | 196 + scheme/rts/population.scm | 37 + scheme/rts/port.scm | 603 + scheme/rts/ratnum.scm | 141 + scheme/rts/read.scm | 286 + scheme/rts/recnum.scm | 117 + scheme/rts/record.scm | 208 + scheme/rts/root-scheduler.scm | 147 + scheme/rts/scheduler.scm | 140 + scheme/rts/session.scm | 25 + scheme/rts/signal.scm | 35 + scheme/rts/sleep.scm | 45 + scheme/rts/template.scm | 27 + scheme/rts/thread.scm | 671 + scheme/rts/time.scm | 7 + scheme/rts/util.scm | 99 + scheme/rts/wind.scm | 94 + scheme/rts/write.scm | 154 + scheme/rts/xnum.scm | 320 + scheme/rts/xprim.scm | 34 + scheme/vm/arch.scm | 457 + scheme/vm/arith.scm | 134 + scheme/vm/bignum-low.scm | 42 + scheme/vm/bignum.scm | 156 + scheme/vm/bug.scm | 12 + scheme/vm/call.scm | 628 + scheme/vm/data.scm | 267 + scheme/vm/debug-package.scm | 78 + scheme/vm/defdata.scm | 146 + scheme/vm/define-primitive.scm | 138 + scheme/vm/disasm.scm | 164 + scheme/vm/env.scm | 98 + scheme/vm/error-util.scm | 13 + scheme/vm/external-call.scm | 215 + scheme/vm/external.scm | 18 + scheme/vm/fixnum-op.scm | 140 + scheme/vm/gc-package-defs.scm | 30 + scheme/vm/gc-root.scm | 134 + scheme/vm/gc.scm | 325 + scheme/vm/generic-arith.scm | 366 + scheme/vm/heap.scm | 277 + scheme/vm/image.scm | 328 + scheme/vm/integer-op.scm | 193 + scheme/vm/integer.scm | 63 + scheme/vm/interfaces.scm | 506 + scheme/vm/interp-gc.scm | 107 + scheme/vm/interp.scm | 699 + scheme/vm/interrupt.scm | 257 + scheme/vm/load-vm.scm | 111 + scheme/vm/macro-package-defs.scm | 8 + scheme/vm/memory.scm | 87 + scheme/vm/no-gc-package-defs.scm | 84 + scheme/vm/package-defs.scm | 217 + scheme/vm/prim-arith.scm | 2 + scheme/vm/prim-io.scm | 427 + scheme/vm/prim.scm | 528 + scheme/vm/ps-channel.scm | 110 + scheme/vm/ps-package-defs.scm | 42 + scheme/vm/resume.scm | 60 + scheme/vm/s48-channel.scm | 152 + scheme/vm/s48-package-defs.scm | 35 + scheme/vm/stack.scm | 509 + scheme/vm/stob.scm | 98 + scheme/vm/struct.scm | 157 + scheme/vm/symbol.scm | 63 + scheme/vm/vm-tables.scm | 109 + scheme/vm/vm-utilities.scm | 47 + scheme/vm/vmio.scm | 341 + 513 files changed, 115190 insertions(+) create mode 100644 .gitignore create mode 100644 COPYING create mode 100644 INSTALL create mode 100644 Makefile.in create mode 100644 README create mode 100644 acconfig.h create mode 100755 build/build-external-modules create mode 100755 build/build-usual-image create mode 100644 build/filenames.make create mode 100644 build/filenames.scm create mode 100644 build/initial.debug create mode 100644 build/initial.image create mode 100644 build/initial.scm create mode 100644 build/load-linker.exec create mode 100644 build/lucid-script.lisp create mode 100644 build/minor-version-number create mode 100644 c/c-mods.h create mode 100644 c/event.h create mode 100644 c/extension.c create mode 100644 c/external.c create mode 100644 c/fake/dlfcn.h create mode 100644 c/fake/libdl1.c create mode 100644 c/fake/libdl2.c create mode 100644 c/fake/sigact.h create mode 100644 c/fake/strerror.c create mode 100644 c/fake/strerror.h create mode 100644 c/fake/sys-select.h create mode 100644 c/fd-io.h create mode 100644 c/io.h create mode 100644 c/main.c create mode 100644 c/old-scheme48.h create mode 100644 c/prescheme.h create mode 100644 c/scheme48.h create mode 100644 c/scheme48.h.in create mode 100644 c/scheme48heap.c create mode 100644 c/scheme48heap.h create mode 100644 c/scheme48vm-prelude.h create mode 100644 c/scheme48vm.c create mode 100644 c/scheme48vm.h create mode 100644 c/sysdep.h.in create mode 100644 c/unix/dynamo-test.c create mode 100644 c/unix/dynamo.c create mode 100644 c/unix/event.c create mode 100644 c/unix/fd-io.c create mode 100644 c/unix/io.c create mode 100644 c/unix/misc.c create mode 100644 c/unix/socket.c create mode 100644 c/unix/test.c create mode 100644 c/write-barrier.h create mode 100755 configure create mode 100644 configure.in create mode 100644 doc/big-scheme.txt create mode 100644 doc/external.ps create mode 100644 doc/hacking.txt create mode 100644 doc/html/external.html create mode 100644 doc/html/utilities.html create mode 100644 doc/install.txt create mode 100644 doc/io.txt create mode 100644 doc/meeting.ps create mode 100644 doc/module.ps create mode 100644 doc/news.txt create mode 100644 doc/no-leaf-env.txt create mode 100644 doc/package.txt create mode 100644 doc/scheme48.man create mode 100644 doc/src/code.tex create mode 100644 doc/src/external.tex create mode 100644 doc/src/hyperlatex.sty create mode 100644 doc/src/meeting.tex create mode 100644 doc/src/module.tex create mode 100644 doc/src/proto.tex create mode 100644 doc/src/summary.tex create mode 100644 doc/src/utilities.tex create mode 100644 doc/threads.txt create mode 100644 doc/todo.txt create mode 100644 doc/type.txt create mode 100644 doc/user-guide.txt create mode 100644 doc/utilities.ps create mode 100644 emacs/README create mode 100644 emacs/cmulisp.el create mode 100644 emacs/cmuscheme.el create mode 100644 emacs/cmuscheme48.el create mode 100644 emacs/cmushell.el create mode 100644 emacs/comint.el create mode 100644 emacs/jar-hacks.el create mode 100644 gdbinit create mode 100755 install-sh create mode 100644 ps-compiler/compile-gc.scm create mode 100644 ps-compiler/compile-vm-no-gc.scm create mode 100644 ps-compiler/compile-vm.scm create mode 100644 ps-compiler/doc/node.txt create mode 100644 ps-compiler/doc/todo.txt create mode 100644 ps-compiler/front/cps.scm create mode 100644 ps-compiler/front/jump.scm create mode 100644 ps-compiler/front/special.scm create mode 100644 ps-compiler/front/top.scm create mode 100644 ps-compiler/interfaces.scm create mode 100644 ps-compiler/load-ps-compiler.scm create mode 100644 ps-compiler/load-scheme.scm create mode 100644 ps-compiler/minor-version-number create mode 100644 ps-compiler/node/arch.scm create mode 100644 ps-compiler/node/leftovers.scm create mode 100644 ps-compiler/node/let-nodes.scm create mode 100644 ps-compiler/node/node-equal.scm create mode 100644 ps-compiler/node/node-util.scm create mode 100644 ps-compiler/node/node.scm create mode 100644 ps-compiler/node/pp-cps.scm create mode 100644 ps-compiler/node/primop.scm create mode 100644 ps-compiler/node/vector.scm create mode 100644 ps-compiler/package-defs.scm create mode 100644 ps-compiler/param.scm create mode 100644 ps-compiler/prescheme/c-call.scm create mode 100644 ps-compiler/prescheme/c-decl.scm create mode 100644 ps-compiler/prescheme/c-stuff create mode 100644 ps-compiler/prescheme/c.scm create mode 100644 ps-compiler/prescheme/display.scm create mode 100644 ps-compiler/prescheme/eval.scm create mode 100644 ps-compiler/prescheme/expand.scm create mode 100644 ps-compiler/prescheme/flatten.scm create mode 100644 ps-compiler/prescheme/form.scm create mode 100644 ps-compiler/prescheme/front-end.scm create mode 100644 ps-compiler/prescheme/hoist.scm create mode 100644 ps-compiler/prescheme/infer-early.scm create mode 100644 ps-compiler/prescheme/inference.scm create mode 100644 ps-compiler/prescheme/interfaces.scm create mode 100644 ps-compiler/prescheme/linking.scm create mode 100644 ps-compiler/prescheme/merge.scm create mode 100644 ps-compiler/prescheme/node-type.scm create mode 100644 ps-compiler/prescheme/package-defs.scm create mode 100644 ps-compiler/prescheme/primitive.scm create mode 100644 ps-compiler/prescheme/primop/arith.scm create mode 100644 ps-compiler/prescheme/primop/base.scm create mode 100644 ps-compiler/prescheme/primop/c-arith.scm create mode 100644 ps-compiler/prescheme/primop/c-base.scm create mode 100644 ps-compiler/prescheme/primop/c-io.scm create mode 100644 ps-compiler/prescheme/primop/c-primop.scm create mode 100644 ps-compiler/prescheme/primop/c-record.scm create mode 100644 ps-compiler/prescheme/primop/c-vector.scm create mode 100644 ps-compiler/prescheme/primop/io.scm create mode 100644 ps-compiler/prescheme/primop/primop.scm create mode 100644 ps-compiler/prescheme/primop/scm-arith.scm create mode 100644 ps-compiler/prescheme/primop/scm-memory.scm create mode 100644 ps-compiler/prescheme/primop/scm-record.scm create mode 100644 ps-compiler/prescheme/primop/scm-scheme.scm create mode 100644 ps-compiler/prescheme/primop/vector.scm create mode 100644 ps-compiler/prescheme/ps-syntax.scm create mode 100644 ps-compiler/prescheme/record.scm create mode 100644 ps-compiler/prescheme/spec.scm create mode 100644 ps-compiler/prescheme/substitute.scm create mode 100644 ps-compiler/prescheme/test/boolean.scm create mode 100644 ps-compiler/prescheme/test/buffer.scm create mode 100644 ps-compiler/prescheme/test/bvector.scm create mode 100644 ps-compiler/prescheme/test/cell.scm create mode 100644 ps-compiler/prescheme/test/coerce.scm create mode 100644 ps-compiler/prescheme/test/dispatch.scm create mode 100644 ps-compiler/prescheme/test/dispatch2.scm create mode 100644 ps-compiler/prescheme/test/eval.scm create mode 100644 ps-compiler/prescheme/test/eval2.scm create mode 100644 ps-compiler/prescheme/test/eval3.scm create mode 100644 ps-compiler/prescheme/test/external.scm create mode 100644 ps-compiler/prescheme/test/fact.cps create mode 100644 ps-compiler/prescheme/test/fact.scm create mode 100644 ps-compiler/prescheme/test/fact2.scm create mode 100644 ps-compiler/prescheme/test/goto.scm create mode 100644 ps-compiler/prescheme/test/hoist.scm create mode 100644 ps-compiler/prescheme/test/integers.scm create mode 100644 ps-compiler/prescheme/test/letrec.scm create mode 100644 ps-compiler/prescheme/test/list.scm create mode 100644 ps-compiler/prescheme/test/loop.scm create mode 100644 ps-compiler/prescheme/test/memory.scm create mode 100644 ps-compiler/prescheme/test/package-defs.scm create mode 100644 ps-compiler/prescheme/test/poly.scm create mode 100644 ps-compiler/prescheme/test/prescheme.h create mode 100644 ps-compiler/prescheme/test/record.scm create mode 100644 ps-compiler/prescheme/test/select.scm create mode 100644 ps-compiler/prescheme/test/simp.scm create mode 100644 ps-compiler/prescheme/test/string.scm create mode 100644 ps-compiler/prescheme/test/test.scm create mode 100644 ps-compiler/prescheme/test/values.scm create mode 100644 ps-compiler/prescheme/test/vector.scm create mode 100644 ps-compiler/prescheme/test/vector2.scm create mode 100644 ps-compiler/prescheme/test/write.scm create mode 100644 ps-compiler/prescheme/to-cps.scm create mode 100644 ps-compiler/prescheme/top.scm create mode 100644 ps-compiler/prescheme/type-scheme.scm create mode 100644 ps-compiler/prescheme/type-var.scm create mode 100644 ps-compiler/prescheme/type.scm create mode 100644 ps-compiler/prescheme/unused/Notes create mode 100644 ps-compiler/prescheme/unused/assert.scm create mode 100644 ps-compiler/prescheme/unused/cps-to-scheme.scm create mode 100644 ps-compiler/prescheme/unused/data.scm create mode 100644 ps-compiler/prescheme/unused/data.txt create mode 100644 ps-compiler/prescheme/unused/dispatch.scm create mode 100644 ps-compiler/prescheme/unused/infer-data.scm create mode 100644 ps-compiler/prescheme/unused/ps-syntax.scm create mode 100644 ps-compiler/prescheme/unused/record.scm create mode 100644 ps-compiler/prescheme/unused/track-read.scm create mode 100644 ps-compiler/prescheme/unused/user.scm create mode 100644 ps-compiler/simp/call.scm create mode 100644 ps-compiler/simp/join.scm create mode 100644 ps-compiler/simp/let.scm create mode 100644 ps-compiler/simp/pattern.scm create mode 100644 ps-compiler/simp/simplify.scm create mode 100644 ps-compiler/util/byte-vector.scm create mode 100644 ps-compiler/util/dominators.scm create mode 100644 ps-compiler/util/expand-vec.scm create mode 100644 ps-compiler/util/separators.scm create mode 100644 ps-compiler/util/ssa.scm create mode 100644 ps-compiler/util/strong.scm create mode 100644 ps-compiler/util/syntax.scm create mode 100644 ps-compiler/util/transitive.scm create mode 100644 ps-compiler/util/util.scm create mode 100644 ps-compiler/util/z-set.scm create mode 100644 scheme/alt-packages.scm create mode 100644 scheme/alt/ascii.scm create mode 100644 scheme/alt/bitwise-tests.scm create mode 100644 scheme/alt/bitwise.scm create mode 100644 scheme/alt/closure.scm create mode 100644 scheme/alt/code-vector.scm create mode 100644 scheme/alt/config.scm create mode 100644 scheme/alt/contin.scm create mode 100644 scheme/alt/environments.scm create mode 100644 scheme/alt/escape.scm create mode 100644 scheme/alt/features-packages.scm create mode 100644 scheme/alt/features.scm create mode 100644 scheme/alt/fluid.scm create mode 100644 scheme/alt/init-defpackage.scm create mode 100644 scheme/alt/jar-defrecord.scm create mode 100644 scheme/alt/locations.scm create mode 100644 scheme/alt/loophole.scm create mode 100644 scheme/alt/low-packages.scm create mode 100644 scheme/alt/low.scm create mode 100644 scheme/alt/primitives.scm create mode 100644 scheme/alt/pseudoscheme-features.scm create mode 100644 scheme/alt/pseudoscheme-record.scm create mode 100644 scheme/alt/queue.scm create mode 100644 scheme/alt/record.scm create mode 100644 scheme/alt/reroot.scm create mode 100644 scheme/alt/schemetoc-features.scm create mode 100644 scheme/alt/schemetoc-record.scm create mode 100644 scheme/alt/silly.scm create mode 100644 scheme/alt/syntax.scm create mode 100644 scheme/alt/t-features.scm create mode 100644 scheme/alt/t-record.scm create mode 100644 scheme/alt/table.scm create mode 100644 scheme/alt/template.scm create mode 100644 scheme/alt/values.scm create mode 100644 scheme/alt/weak.scm create mode 100644 scheme/bcomp/binding.scm create mode 100644 scheme/bcomp/cenv.scm create mode 100644 scheme/bcomp/comp-exp.scm create mode 100644 scheme/bcomp/comp-package.scm create mode 100644 scheme/bcomp/comp-prim.scm create mode 100644 scheme/bcomp/comp.scm create mode 100644 scheme/bcomp/config.scm create mode 100644 scheme/bcomp/ddata.scm create mode 100644 scheme/bcomp/for-reify.scm create mode 100644 scheme/bcomp/interface.scm create mode 100644 scheme/bcomp/module-language.scm create mode 100644 scheme/bcomp/mtype.scm create mode 100644 scheme/bcomp/name.scm create mode 100644 scheme/bcomp/node.scm create mode 100644 scheme/bcomp/optimize.scm create mode 100644 scheme/bcomp/package-undef.scm create mode 100644 scheme/bcomp/package.scm create mode 100644 scheme/bcomp/primop.scm create mode 100644 scheme/bcomp/read-form.scm create mode 100644 scheme/bcomp/recon.scm create mode 100644 scheme/bcomp/rules.scm create mode 100644 scheme/bcomp/scan-package.scm create mode 100644 scheme/bcomp/schemify.scm create mode 100644 scheme/bcomp/segment.scm create mode 100644 scheme/bcomp/stack-check.scm create mode 100644 scheme/bcomp/state.scm create mode 100644 scheme/bcomp/syntax.scm create mode 100644 scheme/bcomp/thingie.scm create mode 100644 scheme/bcomp/transform.scm create mode 100644 scheme/bcomp/type.scm create mode 100644 scheme/bcomp/usual.scm create mode 100644 scheme/bcomp/var-util.scm create mode 100644 scheme/big/array.scm create mode 100644 scheme/big/big-util.scm create mode 100644 scheme/big/bigbit.scm create mode 100644 scheme/big/callback.scm create mode 100644 scheme/big/compose-cont.scm create mode 100644 scheme/big/defrecord.scm create mode 100644 scheme/big/destructure.scm create mode 100644 scheme/big/dump.scm create mode 100644 scheme/big/external.scm create mode 100644 scheme/big/filename.scm create mode 100644 scheme/big/finite-type.scm create mode 100644 scheme/big/format.scm create mode 100644 scheme/big/general-table.scm create mode 100644 scheme/big/import-def.scm create mode 100644 scheme/big/linked-queue.scm create mode 100644 scheme/big/lu-decomp.scm create mode 100644 scheme/big/more-port.scm create mode 100644 scheme/big/pipe.scm create mode 100644 scheme/big/placeholder.scm create mode 100644 scheme/big/pp.scm create mode 100644 scheme/big/queue.scm create mode 100644 scheme/big/random.scm create mode 100644 scheme/big/receive.scm create mode 100644 scheme/big/search-tree.scm create mode 100644 scheme/big/socket.scm create mode 100644 scheme/big/sort.scm create mode 100644 scheme/big/strong.scm create mode 100644 scheme/comp-packages.scm create mode 100644 scheme/debug-packages.scm create mode 100644 scheme/debug/bench.scm create mode 100644 scheme/debug/byte-code-test.scm create mode 100644 scheme/debug/check.scm create mode 100644 scheme/debug/describe.scm create mode 100644 scheme/debug/fact.scm create mode 100644 scheme/debug/fix-low.scm create mode 100644 scheme/debug/for-debugging.scm create mode 100644 scheme/debug/graph.scm create mode 100644 scheme/debug/level-0.scm create mode 100644 scheme/debug/link-debug.scm create mode 100644 scheme/debug/linker.scm create mode 100644 scheme/debug/low-test-packages.scm create mode 100644 scheme/debug/low-test.scm create mode 100644 scheme/debug/mini-command.scm create mode 100644 scheme/debug/mini-eval.scm create mode 100644 scheme/debug/mini-package.scm create mode 100644 scheme/debug/mini-start.scm create mode 100644 scheme/debug/mumble-packages.scm create mode 100644 scheme/debug/mutation.scm create mode 100644 scheme/debug/profile.scm create mode 100644 scheme/debug/r5-system.scm create mode 100644 scheme/debug/read-image.scm create mode 100644 scheme/debug/run.scm create mode 100644 scheme/debug/small-packages.scm create mode 100644 scheme/debug/small.scm create mode 100644 scheme/debug/spatial-hack.scm create mode 100644 scheme/debug/test-generic.scm create mode 100644 scheme/debug/test-methods.scm create mode 100644 scheme/debug/test.scm create mode 100644 scheme/debug/thread-socket.scm create mode 100644 scheme/debug/tiny-packages.scm create mode 100644 scheme/debug/tiny.scm create mode 100644 scheme/debug/vector-space.scm create mode 100644 scheme/debug/wind-test.scm create mode 100644 scheme/env/assem.scm create mode 100644 scheme/env/basic-command.scm create mode 100644 scheme/env/build.scm create mode 100644 scheme/env/command-level.scm create mode 100644 scheme/env/command.scm create mode 100644 scheme/env/debug.scm create mode 100644 scheme/env/debuginfo.scm create mode 100644 scheme/env/disasm.scm create mode 100644 scheme/env/disclosers.scm create mode 100644 scheme/env/dispcond.scm create mode 100644 scheme/env/flatload.scm create mode 100644 scheme/env/init-defpackage.scm create mode 100644 scheme/env/inspect.scm create mode 100644 scheme/env/jar-assem.scm create mode 100644 scheme/env/list-interface.scm create mode 100644 scheme/env/load-package.scm create mode 100644 scheme/env/pacman.scm create mode 100644 scheme/env/pedit.scm create mode 100644 scheme/env/profile.scm create mode 100644 scheme/env/read-command.scm create mode 100644 scheme/env/shadow.scm create mode 100644 scheme/env/space.scm create mode 100644 scheme/env/start.scm create mode 100644 scheme/env/traverse.scm create mode 100644 scheme/env/version-info.scm create mode 100644 scheme/infix/packages.scm create mode 100644 scheme/infix/pratt.scm create mode 100644 scheme/infix/sgol-runtime.scm create mode 100644 scheme/infix/sgol.scm create mode 100644 scheme/infix/tokenize.scm create mode 100644 scheme/initial-packages.scm create mode 100644 scheme/interfaces.scm create mode 100644 scheme/link-packages.scm create mode 100644 scheme/link/data.scm create mode 100644 scheme/link/generate-c-header.scm create mode 100644 scheme/link/generate-old-c-header.scm create mode 100644 scheme/link/link.scm create mode 100644 scheme/link/loadc.scm create mode 100644 scheme/link/reify.scm create mode 100644 scheme/link/transport.scm create mode 100644 scheme/link/write-image.scm create mode 100644 scheme/low-packages.scm create mode 100644 scheme/misc/annotate.scm create mode 100644 scheme/misc/doodl.scm create mode 100644 scheme/misc/either.scm create mode 100644 scheme/misc/engine.scm create mode 100644 scheme/misc/getenv.scm create mode 100644 scheme/misc/hilbert.scm create mode 100644 scheme/misc/ilength.scm create mode 100644 scheme/misc/integertostring.scm create mode 100644 scheme/misc/load-static.scm create mode 100644 scheme/misc/mail.scm create mode 100644 scheme/misc/packages.scm create mode 100644 scheme/misc/pipe.scm create mode 100644 scheme/misc/psd-s48.scm create mode 100644 scheme/misc/remote.scm create mode 100644 scheme/misc/require.scm create mode 100644 scheme/misc/separate.scm create mode 100644 scheme/misc/shift-reset.scm create mode 100644 scheme/misc/sicp.scm create mode 100644 scheme/misc/static.scm create mode 100644 scheme/misc/syscall.scm create mode 100644 scheme/misc/test-doodl.scm create mode 100644 scheme/more-interfaces.scm create mode 100644 scheme/more-packages.scm create mode 100644 scheme/opt/analyze.scm create mode 100644 scheme/opt/flatten.scm create mode 100644 scheme/opt/inline.scm create mode 100644 scheme/opt/sort.scm create mode 100644 scheme/opt/tst.scm create mode 100644 scheme/opt/usage.scm create mode 100644 scheme/packages.scm create mode 100644 scheme/prescheme/interface.scm create mode 100644 scheme/prescheme/load.scm create mode 100644 scheme/prescheme/memory.scm create mode 100644 scheme/prescheme/memory2.scm create mode 100644 scheme/prescheme/package-defs.scm create mode 100644 scheme/prescheme/prescheme.scm create mode 100644 scheme/prescheme/ps-defenum.scm create mode 100644 scheme/rts-packages.scm create mode 100644 scheme/rts/base.scm create mode 100644 scheme/rts/bignum.scm create mode 100644 scheme/rts/channel-io.scm create mode 100644 scheme/rts/channel-port.scm create mode 100644 scheme/rts/channel.scm create mode 100644 scheme/rts/condition.scm create mode 100644 scheme/rts/continuation.scm create mode 100644 scheme/rts/current-port.scm create mode 100644 scheme/rts/defenum.scm create mode 100644 scheme/rts/env.scm create mode 100644 scheme/rts/eval.scm create mode 100644 scheme/rts/exception.scm create mode 100644 scheme/rts/floatnum.scm create mode 100644 scheme/rts/fluid.scm create mode 100644 scheme/rts/init.scm create mode 100644 scheme/rts/innum.scm create mode 100644 scheme/rts/interrupt.scm create mode 100644 scheme/rts/jar-defrecord.scm create mode 100644 scheme/rts/lize.scm create mode 100644 scheme/rts/lock.scm create mode 100644 scheme/rts/low.scm create mode 100644 scheme/rts/method.scm create mode 100644 scheme/rts/number.scm create mode 100644 scheme/rts/numio.scm create mode 100644 scheme/rts/population.scm create mode 100644 scheme/rts/port.scm create mode 100644 scheme/rts/ratnum.scm create mode 100644 scheme/rts/read.scm create mode 100644 scheme/rts/recnum.scm create mode 100644 scheme/rts/record.scm create mode 100644 scheme/rts/root-scheduler.scm create mode 100644 scheme/rts/scheduler.scm create mode 100644 scheme/rts/session.scm create mode 100644 scheme/rts/signal.scm create mode 100644 scheme/rts/sleep.scm create mode 100644 scheme/rts/template.scm create mode 100644 scheme/rts/thread.scm create mode 100644 scheme/rts/time.scm create mode 100644 scheme/rts/util.scm create mode 100644 scheme/rts/wind.scm create mode 100644 scheme/rts/write.scm create mode 100644 scheme/rts/xnum.scm create mode 100644 scheme/rts/xprim.scm create mode 100644 scheme/vm/arch.scm create mode 100644 scheme/vm/arith.scm create mode 100644 scheme/vm/bignum-low.scm create mode 100644 scheme/vm/bignum.scm create mode 100644 scheme/vm/bug.scm create mode 100644 scheme/vm/call.scm create mode 100644 scheme/vm/data.scm create mode 100644 scheme/vm/debug-package.scm create mode 100644 scheme/vm/defdata.scm create mode 100644 scheme/vm/define-primitive.scm create mode 100644 scheme/vm/disasm.scm create mode 100644 scheme/vm/env.scm create mode 100644 scheme/vm/error-util.scm create mode 100644 scheme/vm/external-call.scm create mode 100644 scheme/vm/external.scm create mode 100644 scheme/vm/fixnum-op.scm create mode 100644 scheme/vm/gc-package-defs.scm create mode 100644 scheme/vm/gc-root.scm create mode 100644 scheme/vm/gc.scm create mode 100644 scheme/vm/generic-arith.scm create mode 100644 scheme/vm/heap.scm create mode 100644 scheme/vm/image.scm create mode 100644 scheme/vm/integer-op.scm create mode 100644 scheme/vm/integer.scm create mode 100644 scheme/vm/interfaces.scm create mode 100644 scheme/vm/interp-gc.scm create mode 100644 scheme/vm/interp.scm create mode 100644 scheme/vm/interrupt.scm create mode 100644 scheme/vm/load-vm.scm create mode 100644 scheme/vm/macro-package-defs.scm create mode 100644 scheme/vm/memory.scm create mode 100644 scheme/vm/no-gc-package-defs.scm create mode 100644 scheme/vm/package-defs.scm create mode 100644 scheme/vm/prim-arith.scm create mode 100644 scheme/vm/prim-io.scm create mode 100644 scheme/vm/prim.scm create mode 100644 scheme/vm/ps-channel.scm create mode 100644 scheme/vm/ps-package-defs.scm create mode 100644 scheme/vm/resume.scm create mode 100644 scheme/vm/s48-channel.scm create mode 100644 scheme/vm/s48-package-defs.scm create mode 100644 scheme/vm/stack.scm create mode 100644 scheme/vm/stob.scm create mode 100644 scheme/vm/struct.scm create mode 100644 scheme/vm/symbol.scm create mode 100644 scheme/vm/vm-tables.scm create mode 100644 scheme/vm/vm-utilities.scm create mode 100644 scheme/vm/vmio.scm 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 0000000000000000000000000000000000000000..4d5a55fa96fc1ca554ababf308beb3dccf0d9541 GIT binary patch literal 590765 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ΜBU0&kUIW-+ToMspoD)KbQx~_ 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 I_`2)=1w9$Z1poj5 literal 0 HcmV?d00001 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