~ chicken-core (chicken-5) ae5ec1dda65c33d78fe5744311a41d59f6fd5f80


commit ae5ec1dda65c33d78fe5744311a41d59f6fd5f80
Author:     unknown <felix@.(none)>
AuthorDate: Tue Nov 3 14:40:25 2009 +0100
Commit:     unknown <felix@.(none)>
CommitDate: Tue Nov 3 14:40:25 2009 +0100

    removed elisp files and unused stuff

diff --git a/README b/README
index 942d318d..0d3101ff 100644
--- a/README
+++ b/README
@@ -307,53 +307,14 @@
 
  6. Emacs support:
 
-        An emacs mode is provided in the file `hen.el'. To use it,
-        copy it somewhere into a location you normally use for emacs
-        extensions. If you want to add a specific location permanently
-        to the list of paths emacs should search for extensions, add
-        the following line to your `.emacs' file:
-
-          (setq load-path 
-            (cons
-              "<directory-where-your-emacs-lisp-files-live>" 
-              load-path))
-
-        Add 
-
-          (require 'hen)
-        
-        To make "hen-mode" available, and enter it by issuing the
-        command M-x hen-mode.
-
-        A copy of Alex Shinn's highly useful tab-completion code is
-        also included in `scheme-complete.el'. Install it like `hen.el'
-        and add this code to your `.emacs':
-
-          (autoload 'scheme-smart-complete "scheme-complete" nil t)
-          (eval-after-load 'scheme
-            '(progn (define-key scheme-mode-map "\e\t" 'scheme-smart-complete)))
-
-        Or:
-
-          (eval-after-load 'scheme
-            '(progn (define-key scheme-mode-map "\t" 'scheme-complete-or-indent)))
-
-        If you use eldoc-mode (included in Emacs), you can also get live
-        scheme documentation with:
-
-        (add-hook 'scheme-mode-hook
-          (lambda ()
-              (setq eldoc-info-function 'scheme-get-current-symbol-info)
-                  (eldoc-mode)))
-
-        Replace "'scheme" in the elisp expressions above with "'hen", if
-        you want to add tab-completion to CHICKEN's own emacs mode.
+        See http://chicken.wiki.br/emacs for tips and links to emacs
+	extensions for Scheme and CHICKEN programming.
 
 
  7. Compatibility notes
 
         CHICKEN 4 uses a completely reimplemented hygienic macro and
-	module system, which has considerably more felixbility and power,
+	module system, which has considerably more flexibility and power,
 	but will require rewriting macros in code that previously was
 	used with CHICKEN 3. Notably, `define-macro' is not available
 	anymore. See the manual on how to translate such macros to
diff --git a/hen.el b/hen.el
deleted file mode 100644
index 00b3ec90..00000000
--- a/hen.el
+++ /dev/null
@@ -1,567 +0,0 @@
-;;; HEN.EL ---  mode for editing chicken code
-
-;; Copyright (C) 2004 Linh Dang
-
-;; Author: Linh Dang <linhd@>
-;; Maintainer: Linh Dang <linhd@>
-;; Created: 19 Apr 2004
-;; Version: 1
-;; Keywords:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 1, or (at your option)
-;; any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; A copy of the GNU General Public License can be obtained from this
-;; program's author (send electronic mail to <linhd@>) or from the
-;; Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
-;; USA.
-
-;; LCD Archive Entry:
-;; hen|Linh Dang|<linhd@>
-;; | mode for editing chicken code
-;; |$Date: 2004/11/22 22:36:11 $|$Revision: 1.13 $|~/packages/hen.el
-
-;;; Commentary:
-;; Hen is a mode derived from scheme-mode and is specialized for
-;; editing chicken scheme.
-;; This mode assumes:
-;;     - the user has chicken.info install
-;;     - the csi executable can be launch as "csi"
-
-;;
-;; Changes by Micky Latowicki:
-;;
-;; * Added implementation of with-temp-message, which is missing from xemacs 21.4.
-;; * Added trivial display-mouse-p, which is similarly missing.
-;; * fixed font-lock problems.
-;; * removed most calls to accept-process-output, which made
-;; hen unacceptably slow.
-;; * removed (apparently) redundant call to hen-proc-wait-prompt in
-;; hen-proc-send
-;; * updated prompt regexp pattern to include the running number.
-;; * start csi with -quiet
-;; * fixed completions, made them more like emacs lisp behaviour.
-;; Note: completions were fixed at the cost of feeding csi the commands
-;; (require 'srfi-1) and (require 'regex) before matching strings are
-;; searched for. This was done because the completions-searching code
-;; relies on these libraries. A true fix would be to statically link these
-;; libraries into csi, because the way it works now the user cannot choose
-;; to keep srfi-1 and regex out of her csi environment.
-
-;; Changes by felix:
-;;
-;; * removed hen-describe-symbol
-;; * various cleaning up
-;; * still pretty bad...
-
-;; Changes by Adhi Hargo:
-;; 
-;; * automatically raise *csi* buffer on any relevant operations, and
-;;   made it a read-only buffer.
-;; * changes definition-at-point evaluation command.
-;; * s-exp evaluation no longer shown in minibuffer.
-;; * added : + Hen-mode customization group.
-;;           + Buffer evaluation command.
-;;           + csi process-terminating command, partly so I can erase
-;;             previous definitions and start anew.
-;;           + close-parens-at-point command, from SLIME.
-;;           + modification-check before compilation.
-
-;;; Code:
-
-(defconst hen-version (substring "$Revision: 1.13 $" 11 -2)
- "$Id: hen.el,v 1.13 2004/11/22 22:36:11 flw Exp $
-
-Report bugs to: Felix Winkelmann <bunny351@gmail.com>")
-
-(require 'scheme)
-(require 'compile)
-
-;;; GROUP DECLARATION ================================================
-
-(defgroup hen nil
-  "Major mode for editing Scheme programs using Chicken."
-  :version "21.3"
-  :group 'scheme
-  :prefix "hen-")
-(defgroup hen-font-face nil
-  "Various font face configurations."
-  :group 'hen)
-
-(defun hen-version ()
-  "Outputs Hen's current version to the minibuffer."
-  (interactive)
-  (message "Hen %s" hen-version))
-
-;;; USER-CONFIGURABLE COMMANDS =======================================
-
-(defcustom hen-csc-program "csc"
-  "*Chicken compiler executable's filename."
-  :group 'hen
-  :type 'string)
-(defcustom hen-csi-program "csi"
-  "*Chicken interpreter executable's filename."
-  :group 'hen
-  :type 'string)
-(defcustom hen-build-exec-arg ""
-  "*Compiler-argument when building an executable file."
-  :group 'hen
-  :type 'string)
-(defcustom hen-build-obj-arg ""
-  "*Compiler-argument when building an object file."
-  :group 'hen
-  :type 'string)
-(defcustom hen-eval-init-arg ""
-  "*Additional interpreter argument."
-  :group 'hen
-  :type 'string)
-
-(defcustom hen-autosave-buffer-before-compile nil
-  "*Save modified file automatically before compilation.
-The default behavior is to ask the user whether to save or not."
-  :group 'hen
-  :type 'boolean)
-
-(defcustom hen-load-hook nil
-  "Hook run after entering Hen mode."
-  :group 'hen
-  :type 'hook)
-
-
-;; with-temp-message pasted from a mailing list. It's not available in my xemacs 21.4
-(unless (functionp 'with-temp-message)
- (defmacro with-temp-message (message &rest body)
-   "Display MESSAGE temporarily while BODY is evaluated.
-The original message is restored to the echo area after BODY has finished.
-The value returned is the value of the last form in BODY."
-   (let ((current-message (make-symbol "current-message"))
-         (temp-message (make-symbol "with-temp-message")))
-     `(let ((,temp-message ,message)
-            (,current-message))
-        (unwind-protect
-            (progn
-              (when ,temp-message
-                (setq ,current-message (current-message))
-                (message "%s" ,temp-message))
-              ,@body)
-          (and ,temp-message ,current-message
-               (message "%s" ,current-message)))))))
-
-;; display-mouse-p not available in xemacs 21.4, so here's a quick fix, sort of.
-(unless (functionp 'display-mouse-p)
- (defun display-mouse-p (&optional display) t))
-
-(defconst hen-syntax-table
- (let ((tab (copy-syntax-table scheme-mode-syntax-table)))
-   (modify-syntax-entry ?# "_   " tab)
-   (modify-syntax-entry ?: "_   " tab)
-   (modify-syntax-entry ?\[ "(]  " tab)
-   (modify-syntax-entry ?\] ")[  " tab)
-
-   tab))
-
-(defconst hen-font-lock-keywords-1
- (eval-when-compile
-   (list
-    ;; Declarations
-    (list (concat "\\(?:(\\|\\[\\)"
-                  "\\(" (regexp-opt
-                         '("define"
-                           "define-class"
-                           "define-external"
-                           "define-constant"
-                           "define-datatype"
-                           "define-foreign-type"
-                           "define-foreign-variable"
-                           "define-foreign-record"
-                           "define-generic"
-                           "define-inline"
-                           "define-macro"
-                           "define-method"
-                           "define-reader-ctor"
-                           "define-record"
-                           "defstruct"
-                           "define-record-printer"
-                           "define-record-type"
-			   "define-compiler-macro"
-                           "define-syntax"
-                           "define-for-syntax"
-                           "define-values") 1) "\\)"
-                           "\\s-+(?\\(\\(\\sw\\|\\s_\\)+\\)")
-
-          '(1 font-lock-keyword-face t t)
-          '(2 font-lock-function-name-face t t))))
- "Basic font-locking for Hen mode.")
-
-(defconst hen-font-lock-keywords-2
- (append hen-font-lock-keywords-1
-  (eval-when-compile
-    (list
-     ;;
-     ;; Control structures.
-     (cons
-      (concat
-       "\\<" (regexp-opt
-            '("begin" "begin0" "else"
-              "else"
-              "foreign-lambda*" "foreign-safe-lambda*" "foreign-primitive"
-	      "foreign-declare" "foreign-parse" "foreign-parse/declare"
-              "foreign-lambda" "foreign-safe-lambda" "foreign-code"
-              "match" "match-lambda" "match-lambda*" "match-define" "match-let" "match-let*"
-
-              "case" "case-lambda" "cond" "cond-expand" "condition-case" "select"
-	      "handle-exceptions"
-              "cut" "cute" "time" "regex-case"
-
-              "do" "else" "if" "lambda" "when" "while" "if*" "unless"
-
-	      "let-location" "location" "rec"
-              "let" "let*" "let-syntax" "letrec" "letrec-syntax" "set!-values"
-              "and-let*" "let-optionals" "let-optionals*" "optional"
-              "fluid-let" "let-values" "let*-values" "letrec-values"
-              "parameterize"
-              "module" "import-only" "import" "import*"
-
-              "and" "or" "delay" "receive"
-
-              "assert" "ignore-errors" "ensure" "eval-when"
-
-	      "loop" "sc-macro-transformer"
-
-              "declare" "include" "require-extension" "require" "require-for-syntax" "use" "quasiquote"
-
-              "syntax" "with-syntax" "syntax-case" "identifier-syntax" "syntax-rules") t)
-       "\\>") 'font-lock-keyword-face)
-     '("\\<set!" . font-lock-keyword-face)
-     ;;
-     ;;  `:' keywords as builtins.
-     '("#?\\<:\\sw+\\>" . font-lock-builtin-face)
-     '("\\<\\sw+:\\>" . font-lock-builtin-face)
-     '(",@?\\|`" . font-lock-builtin-face)
-     '("\\(##\\sw+#\\)" (1 font-lock-builtin-face t nil))
-     '("#\\\\?\\sw+"  (0 font-lock-constant-face nil t))
-;?      '("(\\(declare\\|require\\(-extension\\)?\\)" . font-lock-keyword-face)
-     )))
- "Gaudy expressions to highlight in Hen mode.")
-
-(defconst hen-font-lock-keywords hen-font-lock-keywords-2)
-
-(mapc (lambda (cell)
-       (put (car cell) 'scheme-indent-function (cdr cell)))
-     '((begin0 . 0)
-
-       (when . 1) (while . 1) (unless . 1)
-       (and-let* . 1) (fluid-let . 1)
-
-       (call-with-input-pipe . 1)
-       (call-with-ouput-pipe . 1)
-       (call-with-input-string . 1)
-       (call-with-input-string . 1)
-
-       (call-with-values . 1)
-
-       (with-input-from-pipe . 1)
-       (with-ouput-to-pipe . 0)
-       (with-input-from-string . 1)
-       (with-output-to-string . 0)
-
-       (if* . 2)))
-
-(defun hen-identifier-at-point ()
- "Return the identifier close to the cursor."
- (save-excursion
-   (save-match-data
-     (let ((beg (line-beginning-position))
-           (end (line-end-position))
-           (pos (point)))
-     (cond ((progn (goto-char pos)
-                   (skip-chars-forward " \t" end)
-                   (skip-syntax-backward "w_" beg)
-                   (memq (char-syntax (following-char)) '(?w ?_)))
-            (buffer-substring-no-properties (point) (progn (forward-sexp 1) (point))))
-           ((progn (goto-char pos)
-                   (skip-chars-backward " \t" beg)
-                   (skip-syntax-forward "w_" end)
-                   (memq (char-syntax (preceding-char)) '(?w ?_)))
-            (buffer-substring-no-properties (point) (progn (forward-sexp -1) (point))))
-           (t nil))))))
-
-(defun hen-build (cmd args)
-  (when (and (buffer-modified-p)
-	     (or hen-autosave-buffer-before-compile
-		 (progn (beep)
-			(y-or-n-p "File modified. Save it? "))))
-    (save-buffer))
- (compile-internal (mapconcat 'identity (cons cmd args) " ")
-                   "No more errors" "csc" nil
-                   `(("Error:.+in line \\([0-9]+\\):" 0 1 nil ,(buffer-file-name)))
-                   (lambda (ignored) "*csc*")))
-
-(defun hen-build-extension ()
-  (interactive)
-  (let* ((file-name (file-name-nondirectory
-		     (buffer-file-name))))
-    (hen-build hen-csc-program (list "-s" file-name hen-build-obj-arg))))
-
-(defun hen-build-program ()
- (interactive)
- (let* ((file-name (file-name-nondirectory
-                     (buffer-file-name))))
-    (hen-build hen-csc-program (list file-name hen-build-exec-arg))))
-
-(define-derived-mode hen-mode scheme-mode "Hen"
- "Mode for editing chicken Scheme code.
-\\[hen-csi-eval-last-sexp] evaluates the sexp at/preceding point in csi.
-\\[hen-csi-eval-region] evaluates the region in csi.
-\\[hen-csi-eval-buffer] evaluates current buffer in csi.
-\\[hen-csi-eval-definition] evaluates the toplevel definition at point in csi.
-\\[hen-csi-send] reads a sexp from the user and evaluates it csi.
-\\[hen-csi-proc-delete] terminates csi subprocess.
-\\[hen-close-parens-at-point] closes parentheses for top-level sexp at point.
-\\[hen-build-extension] compiles the current file as a shared object
-\\[hen-build-program] compiles the current file as a program
-"
-
- (set-syntax-table hen-syntax-table)
- (setq local-abbrev-table scheme-mode-abbrev-table)
-
-  (define-key hen-mode-map (kbd "C-c C-e") 'hen-csi-eval-last-sexp)
-  (define-key hen-mode-map (kbd "C-c C-r") 'hen-csi-eval-region)
-  (define-key hen-mode-map (kbd "C-c C-b") 'hen-csi-eval-buffer)
-  (define-key hen-mode-map (kbd "C-c C-d") 'hen-csi-eval-definition)
-  (define-key hen-mode-map (kbd "C-c C-l") 'hen-build-unit)
-  (define-key hen-mode-map (kbd "C-c C-x") 'hen-csi-send)
-  (define-key hen-mode-map (kbd "C-c C-q") 'hen-csi-proc-delete)
-  (define-key hen-mode-map (kbd "C-c C-l") 'hen-build-extension)
-  (define-key hen-mode-map (kbd "C-c C-c") 'hen-build-program)
-  (define-key hen-mode-map (kbd "C-c C-]") 'hen-close-parens-at-point)
-
-  (define-key hen-mode-map [menu-bar scheme run-scheme] nil)
-  (define-key hen-mode-map [menu-bar shared build-prog] '("Compile File" hen-build-program))
-  (define-key hen-mode-map [menu-bar shared send-to-csi] '("Evaluate" . hen-csi-send))
-  (define-key hen-mode-map [menu-bar scheme build-as-extension]
-    '("Compile File as Extension" . hen-build-extension))
-  (define-key hen-mode-map [menu-bar scheme eval-buffer] '("Eval Buffer" . hen-csi-eval-buffer))
-  (define-key hen-mode-map [menu-bar scheme eval-region] '("Eval Region" . hen-csi-eval-region))
-  (define-key hen-mode-map [menu-bar scheme eval-last-sexp]
-    '("Eval Last S-Expression" . hen-csi-eval-last-sexp))
-
-  (setq font-lock-defaults
-	'((hen-font-lock-keywords
-	   hen-font-lock-keywords-1 hen-font-lock-keywords-2)
-	  nil t
-	  ((?+ . "w") (?- . "w") (?* . "w") (?/ . "w")
-	   (?. . "w") (?< . "w") (?> . "w") (?= . "w")
-	   (?? . "w") (?$ . "w") (?% . "w") (?_ . "w")
-	   (?& . "w") (?~ . "w") (?^ . "w") (?: . "w"))
-	  beginning-of-defun
-	  (font-lock-mark-block-function . mark-defun)))
-  (make-local-variable 'paragraph-start)
-  (setq paragraph-start (concat page-delimiter "\\|$" ))
-
-  (make-local-variable 'paragraph-separate)
-  (setq paragraph-separate paragraph-start)
-
-  (make-local-variable 'paragraph-ignore-fill-prefix)
-  (setq paragraph-ignore-fill-prefix t)
-
-  (make-local-variable 'adaptive-fill-mode)
-  (setq adaptive-fill-mode nil)
-
-  (make-local-variable 'parse-sexp-ignore-comments)
-  (setq parse-sexp-ignore-comments t)
-
-  (make-local-variable 'outline-regexp)
-  (setq outline-regexp ";;;;* \\|(")
-
-  (make-local-variable 'comment-start)
-  (setq comment-start ";")
-
-  (make-local-variable 'comment-column)
-  (setq comment-column 40)
-
-  (make-local-variable 'comment-add)
-  (setf comment-add 1)
-  )
-
-;;stolen from cxref
-(defun hen-looking-backward-at (regexp)
- "Return t if text before point matches regular expression REGEXP.
-This function modifies the match data that `match-beginning',
-`match-end' and `match-data' access; save and restore the match
-data if you want to preserve them."
- (save-excursion
-   (let ((here (point)))
-     (if (re-search-backward regexp (point-min) t)
-         (if (re-search-forward regexp here t)
-             (= (point) here))))))
-
-(defun hen-proc-wait-prompt (proc prompt-re &optional timeout msg)
-  "Wait for the prompt of interactive process PROC. PROMPT-RE must be
-a regexp matching the prompt. TIMEOUT is the amount of time to wait in
-secs before giving up. MSG is the message to display while waiting."
-  (setq timeout (if (numberp timeout) (* timeout 2) 60))
-  (unless (stringp msg)
-    (setq msg (concat "wait for " hen-csi-proc-name "'s prompt")))
-  (goto-char (process-mark proc))
-  (if (hen-looking-backward-at prompt-re)
-      t
-    (while (and (> timeout 0) (not (hen-looking-backward-at prompt-re)))
-      (with-temp-message (setq msg (concat msg "."))
-	(accept-process-output proc 0 timeout))
-      (setq timeout (1- timeout))
-      (goto-char (process-mark proc)))
-    (with-temp-message (concat msg (if (> timeout 0)
-				       " got it!" " timeout!"))
-      (sit-for 0 100))
-    (> timeout 0))
-  )
-
-(defun hen-proc-send (question proc prompt-re &optional timeout msg)
- "Send the string QUESTION to interactive process proc. PROMPT-RE is
-the regexp matching PROC's prompt. TIMEOUT is the amount of time to
-wait in secs before giving up. MSG is the message to display while
-waiting."
-  (setq timeout (if (numberp timeout) (* timeout 2) 60))
-  (save-excursion
-    (set-buffer (process-buffer proc))
-    (widen)
-    (save-match-data
-      (goto-char (process-mark proc))
-      (if (hen-looking-backward-at prompt-re)
-	  (let ((start (match-end 0)))
-	    (narrow-to-region start (point-max))
-	    (process-send-string proc (concat question "\n"))
-	    (hen-proc-wait-prompt proc prompt-re timeout msg)
-	    (narrow-to-region start (match-beginning 0))
-	    (current-buffer))))))
-
-(defconst hen-csi-prompt-pattern "#;[0-9]*> ")
-(defconst hen-csi-proc-name "csi")
-(defconst hen-csi-buffer-name "*csi*")
-
-(defun hen-csi-buffer-create ()
-  "Creates a new buffer for csi, make it read-only."
-  (let ((buffer (get-buffer-create hen-csi-buffer-name)))
-    (with-current-buffer buffer
-      (make-local-variable 'buffer-read-only)
-      (setf buffer-read-only t))
-    buffer))
-
-(defun hen-csi-buffer-erase ()
-  "Erases csi buffer's content, used mainly when its process was being
-reset."
-  (let ((buffer (get-buffer hen-csi-buffer-name)))
-    (unless (null buffer) (with-current-buffer buffer
-			    (setf buffer-read-only '())
-			    (erase-buffer)
-			    (setf buffer-read-only t)))))
-
-(defun hen-csi-buffer ()
-  (let ((buffer (or (get-buffer hen-csi-buffer-name) ;check if exists
-		    (hen-csi-buffer-create)))) ;... or create one
-    (display-buffer buffer)
-    buffer))
-
-(defun hen-csi-proc ()
-  (let ((proc (get-process hen-csi-proc-name)))
-    (if (and (processp proc)
-	     (eq (process-status proc) 'run))
-	proc
-      (setq proc
-	    (eval `(start-process hen-csi-proc-name (hen-csi-buffer)
-				  hen-csi-program
-				  "-no-init" "-quiet" "-:c" "-R" "srfi-1" "-R" "regex" "-R" "utils"
-				  ,@(split-string hen-eval-init-arg))))
-      (with-current-buffer (hen-csi-buffer)
-	(hen-proc-wait-prompt proc hen-csi-prompt-pattern)
-	proc))))
-
-(defun hen-csi-proc-delete ()
-  (interactive)
-  (let ((proc (get-process hen-csi-proc-name)))
-    (when (and (processp proc)
-	       (eq (process-status proc) 'run))
-      (delete-process proc))
-    (hen-csi-buffer-erase)
-    ()))
-
-(defun hen-csi-send (sexp)
-  "Evaluate SEXP in CSI"
-  (interactive
-   (let ((sexp (read-string "Evaluate S-expression: "))
-	 (send-sexp-p nil))
-     (unwind-protect
-	 (progn
-	   (let ((obarray (make-vector 11 0)))
-	     (read sexp)
-	     (setq send-sexp-p t)))
-       (unless send-sexp-p
-	 (setq send-sexp-p
-	       (y-or-n-p (format "`%s' is not a valid sexp! evaluate anyway? " sexp)))))
-     (list (if send-sexp-p sexp nil))))
-  (when (stringp sexp)
-    (let* ((proc (hen-csi-proc))
-	   (buf (hen-proc-send (concat sexp "\n") proc hen-csi-prompt-pattern))
-	   result len)
-      (unless (buffer-live-p buf)
-	(error "Internal hen-mode failure"))
-
-      (save-excursion
-	(with-current-buffer buf
-	  (setq result (buffer-string))
-	  (setq len (length result))
-	  (if (and (> len 0)
-		   (eq (aref result (1- len)) ?\n))
-	      (setq result (substring result 0 -1)))
-	  result)))))
-
-(defun hen-csi-eval-buffer ()
-  "Evaluate the current buffer in CSI"
-  (interactive)
-  (hen-csi-send (buffer-string)))
-
-(defun hen-csi-eval-region (beg end)
-  "Evaluate the current region in CSI."
-  (interactive "r")
-  (hen-csi-send (buffer-substring beg end)))
-
-(defun hen-csi-eval-last-sexp ()
-  "Evaluate the s-expression at point in CSI"
-  (interactive)
-  (hen-csi-eval-region (save-excursion (backward-sexp) (point))
-		       (point)))
-
-(defun hen-csi-eval-definition ()
-  "Evaluate the enclosing top-level form in CSI."
-  (interactive)
-  (hen-csi-eval-region (save-excursion
-			 (end-of-defun) (beginning-of-defun)
-			 (point))
-		       (save-excursion
-			 (end-of-defun) (point))))
-
-;; from SLIME
-(defun hen-close-parens-at-point ()
-  "Close parenthesis at point to complete the top-level-form.  Simply
-inserts ')' characters at point until `beginning-of-defun' and
-`end-of-defun' execute without errors, or internal variable
-`close-parens-limit' is exceeded."
-  (interactive)
-  (let ((close-parens-limit 16))
-    (loop for i from 1 to close-parens-limit
-	  until (save-excursion
-		  (beginning-of-defun)
-		  (ignore-errors (end-of-defun) t))
-	  do (insert ")"))))
-
-(provide 'hen)
-(run-hooks 'hen-load-hook)
-;;; HEN.EL ends here
diff --git a/misc/cconv-sample.c b/misc/cconv-sample.c
index 56325686..f169b700 100644
--- a/misc/cconv-sample.c
+++ b/misc/cconv-sample.c
@@ -1,4 +1,4 @@
-/* cconv-sample.c */
+/* cconv-sample.c - code to disassemble if you want to figure out calling conventions */
 
 
 #include "chicken.h"
diff --git a/misc/linux-runner.c b/misc/linux-runner.c
deleted file mode 100644
index 8a3205a7..00000000
--- a/misc/linux-runner.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * getexename.c
- *
- * written by Nicolai Haehnle <prefect_@gmx.net>
- * I hereby release this trivial piece of code to the public domain.
- *
- * The function getexename() returns the filename of the currently loaded
- * executable.
- *
- * Intended use of this function is to facilitate easier packaging of 
- * third-party software for the Linux operating system. The FHS mandates
- * that files that belong to one package are scattered throughout the
- * file system. This works as long as packages are maintained by a 
- * package management program. However, it is impossible for application
- * developers to provide packages for every Linux distribution out there.
- * Finding the file locations is also difficult when an application is
- * installed locally by a user inside her own home directory.
- *
- * The simplest and most straight-forward solution to this problem is to
- * put all files belonging to a package into the same directory. The program
- * executable can then reference the necessary data files by using paths
- * relative to the executable location.
- * To give an example:
- *
- *  A simple game, consisting of an executable and a number of data files
- *  (e.g. images), resides entirely in one directory, with absolute filenames
- *  like this:
- *    /the/path/foogame
- *    /the/path/images/hero.png
- *    /the/path/images/badass.png
- *  The game executable can use getexename() to find its own location, strip
- *  off the last component to get the directory the executable is located in,
- *  and append the relative paths "images/hero.png" and "images/badass.png"
- *  to reference the data files.
- *  The game will be completely position independent. The user is free to 
- *  move it somewhere else in the filesystem, and it will just work; it will
- *  no longer be necessary to change configuration files or even recompile the
- *  executable.
- *
- * If you are concerned about executables showing up in a user's PATH, you 
- * should somehow arrange for symlinks to be made. For example, if 
- * /usr/games/foogame is a symlink to /the/path/foogame, the user can run the
- * game simply by typing "foogame" in the shell (provided that /usr/games is in
- * the user's PATH); since symlinks cannot fool getexename(), the game will
- * still work. (Do note that a hard link will defeat getexename()).
- *
- * Note that while it is possible to reference data files based on the current
- * working directory, this technique only works if the user explicitly sets
- * the CWD to the application's base directory. Therefore, using the executable
- * name as a base is more robust.
- *
- * Also note that while argv[0] can be used as the executable name in many 
- * cases as well, it is easily fooled by symlinks and may not contain an 
- * absolute filename. argv[0] can also be set to something entirely different
- * from the executable filename by the executing process, either delibaretly
- * or by invoking scripts.
- *
- * Note that this function relies on the layout of the /proc file system, so
- * portability is an issue. While I assume that this part of /proc is fairly
- * stable, I have no documentation whatsoever about potential differences
- * between Linux kernel versions in this area.
- *
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-
-#include <sys/types.h>
-#include <unistd.h>
-
-#ifndef PROGRAM
-# define PROGRAM   "main"
-#endif
-
-
-/*
- * getexename - Get the filename of the currently running executable
- *
- * The getexename() function copies an absolute filename of the currently 
- * running executable to the array pointed to by buf, which is of length size.
- *
- * If the filename would require a buffer longer than size elements, NULL is
- * returned, and errno is set to ERANGE; an application should check for this
- * error, and allocate a larger buffer if necessary.
- *
- * Return value:
- * NULL on failure, with errno set accordingly, and buf on success. The 
- * contents of the array pointed to by buf is undefined on error.
- *
- * Notes:
- * This function is tested on Linux only. It relies on information supplied by
- * the /proc file system.
- * The returned filename points to the final executable loaded by the execve()
- * system call. In the case of scripts, the filename points to the script 
- * handler, not to the script.
- * The filename returned points to the actual exectuable and not a symlink.
- *
- */
-char* getexename(char* buf, size_t size)
-{
-  char linkname[64]; /* /proc/<pid>/exe */
-  pid_t pid;
-  int ret;
-	
-  /* Get our PID and build the name of the link in /proc */
-  pid = getpid();
-	
-  if (snprintf(linkname, sizeof(linkname), "/proc/%i/exe", pid) < 0)
-    {
-      /* This should only happen on large word systems. I'm not sure
-	 what the proper response is here.
-	 Since it really is an assert-like condition, aborting the
-	 program seems to be in order. */
-      abort();
-    }
-
-	
-  /* Now read the symbolic link */
-  ret = readlink(linkname, buf, size);
-	
-  /* In case of an error, leave the handling up to the caller */
-  if (ret == -1)
-    return NULL;
-	
-  /* Report insufficient buffer size */
-  if (ret >= size)
-    {
-      errno = ERANGE;
-      return NULL;
-    }
-	
-  /* Ensure proper NUL termination */
-  buf[ret] = 0;
-	
-  return buf;
-}
-
-
-int main(int argc, char *argv[], char *envp[])
-{
-  char* buf, buf2[ 256 ], buf3[ 256 ];
-  int size;
-  static char *env2[ 1024 ];
-  char **ep, *cp;
-	
-  buf = NULL;
-  size = 32; /* Set an initial size estimate */
-
-  for(;;)	
-    {
-      char* res;
-		
-      /* Allocate and fill the buffer */
-      buf = (char*)malloc(size);
-      res = getexename(buf, size);
-		
-      /* Get out of the loop on success */
-      if (res)
-	break;
-		
-      /* Anything but ERANGE indicates a real error */
-      if (errno != ERANGE)
-	{
-	  perror("getexename() failed");
-	  free(buf);
-	  buf = NULL;
-	  break;
-	}
-		
-      /* ERANGE means the buffer was too small. Free the current
-	 buffer and retry with a bigger one. */
-      free(buf);
-      size *= 2;
-    }
-	
-  /* Exit on failure */
-  if (buf == NULL)
-    return -1;
-	
-  cp = strrchr(buf, '/');
-
-  if(cp != NULL) *cp = '\0';
-
-  ep = env2; 
-  sprintf(buf2, "LD_LIBRARY_PATH=%s", buf);
-  *(ep++) = buf2;
-  sprintf(buf3, "CHICKEN_REPOSITORY=%s", buf);
-  *(ep++) = buf3;
-  
-  while(*envp != NULL) {
-    char *p2 = strchr(*envp, '=');
-
-    if(!strncmp(p2, "CHICKEN_REPOSITORY", strlen("CHICKEN_REPOSITORY")) ||
-       !strncmp(p2, "LD_LIBRARY_PATH", strlen("LD_LIBRARY_PATH")))
-      ++envp;
-    else {
-      *ep = *(envp++);
-    
-      if(*(ep++) == NULL) break;
-    }
-  }
-
-  *ep = NULL;
-  strcat(buf, "/");
-  strcat(buf, PROGRAM);
-
-  if(execve(buf, argv + 1, env2) == -1)
-    perror("execve failed");
-		
-  return 0; /* Indicate success */
-}
diff --git a/misc/mini-runtime/Makefile b/misc/mini-runtime/Makefile
deleted file mode 100644
index c32bc888..00000000
--- a/misc/mini-runtime/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-.PHONY: all clean
-
-CC=gcc
-LD=gcc
-CFLAGS=-Os -fomit-frame-pointer -fno-strict-aliasing
-LDFLAGS=-s
-LIBS=-lm
-
-all: mini
-
-mini: lib.o runtime.o
-	$(LD) $(LDFLAGS) $^ -o $@ $(LIBS)
-
-runtime.o: ../../runtime.c ../../chicken.h
-	$(CC) -c $< -o $@ $(CFLAGS)
-
-lib.o: lib.scm ../../chicken.h
-	csc -cx -I../.. $< -o $@ -O2 -d0 -kv -raw -C "$(CFLAGS)"
-
-clean:
-	rm -f *.o mini
diff --git a/misc/mini-runtime/lib.scm b/misc/mini-runtime/lib.scm
deleted file mode 100644
index cae0319c..00000000
--- a/misc/mini-runtime/lib.scm
+++ /dev/null
@@ -1,7 +0,0 @@
-;;;; lib.scm
-
-
-(define (##sys#interrupt-hook reason state) #f)
-(define (##sys#error-hook code loc . args) (##core#inline "C_halt" "error"))
-
-(##core#inline "C_halt" "yo!")
diff --git a/scheme-complete.el b/scheme-complete.el
deleted file mode 100644
index 24814fab..00000000
--- a/scheme-complete.el
+++ /dev/null
@@ -1,4412 +0,0 @@
-;;; scheme-complete.el              -*- Emacs-Lisp -*-
-
-;;; Smart tab completion for Emacs
-
-;;; This code is written by Alex Shinn and placed in the Public
-;;; Domain.  All warranties are disclaimed.
-
-;;; This file provides a single function, `scheme-smart-complete',
-;;; which you can use for intelligent, context-sensitive completion
-;;; for any Scheme implementation.  To use it just load this file and
-;;; bind that function to a key in your preferred mode:
-;;;
-;;; (autoload 'scheme-smart-complete "scheme-complete" nil t)
-;;; (eval-after-load 'scheme
-;;;   '(define-key scheme-mode-map "\e\t" 'scheme-smart-complete))
-;;;
-;;; Alternately, you may want to just bind TAB to the
-;;; `scheme-complete-or-indent' function, which indents at the start
-;;; of a line and otherwise performs the smart completion:
-;;;
-;;; (eval-after-load 'scheme
-;;;   '(define-key scheme-mode-map "\t" 'scheme-complete-or-indent))
-;;;
-;;;   Note: the completion uses a somewhat less common style than
-;;;   typically found in other modes.  The first tab will complete the
-;;;   longest prefix common to all possible completions.  The second
-;;;   tab will show a list of those completions.  Subsequent tabs will
-;;;   scroll that list.  You can't use the mouse to select from the
-;;;   list - when you see what you want, just type the next one or
-;;;   more characters in the symbol you want and hit tab again to
-;;;   continue completing it.  Any key typed will bury the completion
-;;;   list.  This ensures you can achieve a completion with the
-;;;   minimal number of keystrokes without the completions window
-;;;   lingering and taking up space.
-;;;
-;;; If you use eldoc-mode (included in Emacs), you can also get live
-;;; scheme documentation with:
-;;;
-;;; (autoload 'scheme-get-current-symbol-info "scheme-complete" nil t)
-;;; (add-hook 'scheme-mode-hook
-;;;   (lambda ()
-;;;     (make-local-variable 'eldoc-documentation-function)
-;;;     (setq eldoc-documentation-function 'scheme-get-current-symbol-info)
-;;;     (eldoc-mode)))
-;;;
-;;; You can enable slightly smarter indentation with
-;;;
-;;; (setq lisp-indent-function 'scheme-smart-indent-function)
-;;;
-;;; which basically ignores the scheme-indent-function property for
-;;; locally overridden symbols (e.g. if you use the (let loop () ...)
-;;; idiom it won't use the special loop indentation inside).
-;;;
-;;; There's a single custom variable, `scheme-default-implementation',
-;;; which you can use to specify your preferred implementation when we
-;;; can't infer it from the source code.
-;;;
-;;; That's all there is to it.
-
-;;; History:
-;;; 0.8.6: 2009/05/03 - fixing support for chicken 4 w/ unbalanced parens
-;;; 0.8.5: 2009/04/30 - full support for chicken 4, fixed bug in caching
-;;; 0.8.4: 2008/12/26 - numerous small bugfixes (Merry Christmas!)
-;;; 0.8.3: 2008/10/06 - smart indent, inferring types from imported modules,
-;;;                     optionally caching exports, chicken 4 support
-;;; 0.8.2: 2008/07/04 - both TAB and M-TAB scroll results (thanks Peter Bex),
-;;;                     better MATCH handling, fixed SRFI-55, other bugfixes
-;;; 0.8.1: 2008/04/17 - great renaming, everthing starts with `scheme-'
-;;;                     also, don't scan imported modules multiple times
-;;;   0.8: 2008/02/08 - several parsing bugfixes on unclosed parenthesis
-;;;                       (thanks to Kazushi NODA)
-;;;                     filename completion works properly on absolute paths
-;;;                     eldoc works properly on dotted lambdas
-;;;   0.7: 2008/01/18 - handles higher-order types (for apply, map, etc.)
-;;;                     smarter string completion (hostname, username, etc.)
-;;;                     smarter type inference, various bugfixes
-;;;   0.6: 2008/01/06 - more bugfixes (merry christmas)
-;;;   0.5: 2008/01/03 - handling internal defines, records, smarter
-;;;                     parsing
-;;;   0.4: 2007/11/14 - silly bugfix plus better repo env support
-;;;                     for searching chicken and gauche modules
-;;;   0.3: 2007/11/13 - bugfixes, better inference, smart strings
-;;;   0.2: 2007/10/15 - basic type inference
-;;;   0.1: 2007/09/11 - initial release
-;;;
-;;;   What is this talk of 'release'? Klingons do not make software
-;;;   'releases'. Our software 'escapes' leaving a bloody trail of
-;;;   designers and quality assurance people in its wake.
-
-(require 'cl)
-
-;; this is just to eliminate some warnings when compiling - this file
-;; should be loaded after 'scheme
-(eval-when (compile)
-  (require 'scheme))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; info
-;;
-;; identifier type [doc-string no-type-display?]
-;;
-;; types:
-;;
-;;   pair, number, symbol, etc.
-;;   (lambda (param-types) [return-type])
-;;   (syntax (param-types) [return-type])
-;;   (set name values ...)
-;;   (flags name values ...)
-;;   (list type)
-;;   (string expander)
-;;   (special type function [outer-function])
-
-(defvar *scheme-r5rs-info*
-  '((define (syntax (identifier value) undefined) "define a new variable")
-    (set! (syntax (identifier value) undefined) "set the value of a variable")
-    (let (syntax (vars body \.\.\.)) "bind new local variables in parallel")
-    (let* (syntax (vars body \.\.\.)) "bind new local variables sequentially")
-    (letrec (syntax (vars body \.\.\.)) "bind new local variables recursively")
-    (lambda (syntax (params body \.\.\.)) "procedure syntax")
-    (if (syntax (cond then else)) "conditional evaluation")
-    (cond (syntax (clause \.\.\.)) "try each clause until one succeeds")
-    (case (syntax (expr clause \.\.\.)) "look for EXPR among literal lists")
-    (delay (syntax (expr)) "create a promise to evaluate EXPR")
-    (and (syntax (expr \.\.\.)) "evaluate EXPRs while true, return last")
-    (or (syntax (expr \.\.\.)) "return the first true EXPR")
-    (begin (syntax (expr \.\.\.)) "evaluate each EXPR in turn and return the last")
-    (do (syntax (vars finish body \.\.\.)) "simple iterator")
-    (quote (syntax (expr)) "represent EXPR literally without evaluating it")
-    (quasiquote (syntax (expr)) "quote literals allowing escapes")
-    (unquote (syntax (expr)) "escape an expression inside quasiquote")
-    (unquote-splicing (syntax (expr)) "escape and splice a list expression inside quasiquote")
-    (define-syntax (syntax (identifier body \.\.\.) undefined) "create a macro")
-    (let-syntax (syntax (syntaxes body \.\.\.)) "a local macro")
-    (letrec-syntax (syntax (syntaxes body \.\.\.)) "a local macro")
-    (syntax-rules (syntax (literals clauses \.\.\.) undefined) "simple macro language")
-    (eqv? (lambda (obj1 obj2) bool) "returns #t if OBJ1 and OBJ2 are the same object")
-    (eq? (lambda (obj1 obj2) bool) "finer grained version of EQV?")
-    (equal? (lambda (obj1 obj2) bool) "recursive equivalence")
-    (not (lambda (obj) bool) "returns #t iff OBJ is false")
-    (boolean? (lambda (obj) bool) "returns #t iff OBJ is #t or #f")
-    (number? (lambda (obj) bool) "returns #t iff OBJ is a number")
-    (complex? (lambda (obj) bool) "returns #t iff OBJ is a complex number")
-    (real? (lambda (obj) bool) "returns #t iff OBJ is a real number")
-    (rational? (lambda (obj) bool) "returns #t iff OBJ is a rational number")
-    (integer? (lambda (obj) bool) "returns #t iff OBJ is an integer")
-    (exact? (lambda (z) bool) "returns #t iff Z is exact")
-    (inexact? (lambda (z) bool) "returns #t iff Z is inexact")
-    (= (lambda (z1 z2 \.\.\.) bool) "returns #t iff the arguments are all equal")
-    (< (lambda (x1 x2 \.\.\.) bool) "returns #t iff the arguments are monotonically increasing")
-    (> (lambda (x1 x2 \.\.\.) bool) "returns #t iff the arguments are monotonically decreasing")
-    (<= (lambda (x1 x2 \.\.\.) bool) "returns #t iff the arguments are monotonically nondecreasing")
-    (>= (lambda (x1 x2 \.\.\.) bool) "returns #t iff the arguments are monotonically nonincreasing")
-    (zero? (lambda (z) bool))
-    (positive? (lambda (x1) bool))
-    (negative? (lambda (x1) bool))
-    (odd? (lambda (n) bool))
-    (even? (lambda (n) bool))
-    (max (lambda (x1 x2 \.\.\.) x3) "returns the maximum of the arguments")
-    (min (lambda (x1 x2 \.\.\.) x3) "returns the minimum of the arguments")
-    (+ (lambda (z1 \.\.\.) z))
-    (* (lambda (z1 \.\.\.) z))
-    (- (lambda (z1 \.\.\.) z))
-    (/ (lambda (z1 \.\.\.) z))
-    (abs (lambda (x1) x2) "returns the absolute value of X")
-    (quotient (lambda (n1 n2) n) "integer division")
-    (remainder (lambda (n1 n2) n) "same sign as N1")
-    (modulo (lambda (n1 n2) n) "same sign as N2")
-    (gcd (lambda (n1 \.\.\.) n) "greatest common divisor")
-    (lcm (lambda (n2 \.\.\.) n) "least common multiple")
-    (numerator (lambda (rational) n))
-    (denominator (lambda (rational) n))
-    (floor (lambda (x1) n) "largest integer not larger than X")
-    (ceiling (lambda (x1) n) "smallest integer not smaller than X")
-    (truncate (lambda (x1) n) "drop fractional part")
-    (round (lambda (x1) n) "round to even (banker's rounding)")
-    (rationalize (lambda (x1 y) n) "rational number differing from X by at most Y")
-    (exp (lambda (z) z) "e^Z")
-    (log (lambda (z) z) "natural logarithm of Z")
-    (sin (lambda (z) z) "sine function")
-    (cos (lambda (z) z) "cosine function")
-    (tan (lambda (z) z) "tangent function")
-    (asin (lambda (z) z) "arcsine function")
-    (acos (lambda (z) z) "arccosine function")
-    (atan (lambda (z) z) "arctangent function")
-    (sqrt (lambda (z) z) "principal square root of Z")
-    (expt (lambda (z1 z2) z) "returns Z1 raised to the Z2 power")
-    (make-rectangular (lambda (x1 x2) z) "create a complex number")
-    (make-polar (lambda (x1 x2) z) "create a complex number")
-    (real-part (lambda (z) x1))
-    (imag-part (lambda (z) x1))
-    (magnitude (lambda (z) x1))
-    (angle (lambda (z) x1))
-    (exact->inexact (lambda (z) z))
-    (inexact->exact (lambda (z) z))
-    (number->string (lambda (z :optional radix) str))
-    (string->number (lambda (str :optional radix) z))
-    (pair? (lambda (obj) bool) "returns #t iff OBJ is a pair")
-    (cons (lambda (obj1 obj2) pair) "create a newly allocated pair")
-    (car (lambda (pair) obj))
-    (cdr (lambda (pair) obj))
-    (set-car! (lambda (pair obj) undefined))
-    (set-cdr! (lambda (pair obj) undefined))
-    (caar (lambda (pair) obj))
-    (cadr (lambda (pair) obj))
-    (cdar (lambda (pair) obj))
-    (cddr (lambda (pair) obj))
-    (caaar (lambda (pair) obj))
-    (caadr (lambda (pair) obj))
-    (cadar (lambda (pair) obj))
-    (caddr (lambda (pair) obj))
-    (cdaar (lambda (pair) obj))
-    (cdadr (lambda (pair) obj))
-    (cddar (lambda (pair) obj))
-    (cdddr (lambda (pair) obj))
-    (caaaar (lambda (pair) obj))
-    (caaadr (lambda (pair) obj))
-    (caadar (lambda (pair) obj))
-    (caaddr (lambda (pair) obj))
-    (cadaar (lambda (pair) obj))
-    (cadadr (lambda (pair) obj))
-    (caddar (lambda (pair) obj))
-    (cadddr (lambda (pair) obj))
-    (cdaaar (lambda (pair) obj))
-    (cdaadr (lambda (pair) obj))
-    (cdadar (lambda (pair) obj))
-    (cdaddr (lambda (pair) obj))
-    (cddaar (lambda (pair) obj))
-    (cddadr (lambda (pair) obj))
-    (cdddar (lambda (pair) obj))
-    (cddddr (lambda (pair) obj))
-    (null? (lambda (obj) bool) "returns #t iff OBJ is the empty list")
-    (list? (lambda (obj) bool) "returns #t iff OBJ is a proper list")
-    (list (lambda (obj \.\.\.) list) "returns a newly allocated list")
-    (length (lambda (list) n))
-    (append (lambda (list \.\.\.) list) "concatenates the list arguments")
-    (reverse (lambda (list) list))
-    (list-tail (lambda (list k) list) "returns the Kth cdr of LIST")
-    (list-ref (lambda (list k) obj) "returns the Kth element of LIST")
-    (memq (lambda (obj list)) "the sublist of LIST whose car is eq? to OBJ")
-    (memv (lambda (obj list)) "the sublist of LIST whose car is eqv? to OBJ")
-    (member (lambda (obj list)) "the sublist of LIST whose car is equal? to OBJ")
-    (assq (lambda (obj list)) "the element of LIST whose car is eq? to OBJ")
-    (assv (lambda (obj list)) "the element of LIST whose car is eqv? to OBJ")
-    (assoc (lambda (obj list)) "the element of LIST whose car is equal? to OBJ")
-    (symbol? (lambda (obj) bool) "returns #t iff OBJ is a symbol")
-    (symbol->string (lambda (symbol) str))
-    (string->symbol (lambda (str) symbol))
-    (char? (lambda (obj) bool) "returns #t iff OBJ is a character")
-    (char=? (lambda (ch1 ch2) bool))
-    (char<? (lambda (ch1 ch2) bool))
-    (char>? (lambda (ch1 ch2) bool))
-    (char<=? (lambda (ch1 ch2) bool))
-    (char>=? (lambda (ch1 ch2) bool))
-    (char-ci=? (lambda (ch1 ch2) bool))
-    (char-ci<? (lambda (ch1 ch2) bool))
-    (char-ci>? (lambda (ch1 ch2) bool))
-    (char-ci<=? (lambda (ch1 ch2) bool))
-    (char-ci>=? (lambda (ch1 ch2) bool))
-    (char-alphabetic? (lambda (ch) bool))
-    (char-numeric? (lambda (ch) bool))
-    (char-whitespace? (lambda (ch) bool))
-    (char-upper-case? (lambda (ch) bool))
-    (char-lower-case? (lambda (ch) bool))
-    (char->integer (lambda (ch) int))
-    (integer->char (lambda (int) ch))
-    (char-upcase (lambda (ch) ch))
-    (char-downcase (lambda (ch) ch))
-    (string? (lambda (obj) bool) "returns #t iff OBJ is a string")
-    (make-string (lambda (k :optional ch) str) "a new string of length k")
-    (string (lambda (ch \.\.\.) str) "a new string made of the char arguments")
-    (string-length (lambda (str) n) "the number of characters in STR")
-    (string-ref (lambda (str i) ch) "the Ith character of STR")
-    (string-set! (lambda (str i ch) undefined) "set the Ith character of STR to CH")
-    (string=? (lambda (str1 str2) bool))
-    (string-ci=? (lambda (str1 str2) bool))
-    (string<? (lambda (str1 str2) bool))
-    (string>? (lambda (str1 str2) bool))
-    (string<=? (lambda (str1 str2) bool))
-    (string>=? (lambda (str1 str2) bool))
-    (string-ci<? (lambda (str1 str2) bool))
-    (string-ci>? (lambda (str1 str2) bool))
-    (string-ci<=? (lambda (str1 str2) bool))
-    (string-ci>=? (lambda (str1 str2) bool))
-    (substring (lambda (str start end) str))
-    (string-append (lambda (str \.\.\.) str) "concatenate the string arguments")
-    (string->list (lambda (str) list))
-    (list->string (lambda (list) str))
-    (string-copy (lambda (str) str))
-    (string-fill! (lambda (str ch) undefined) "set every char in STR to CH")
-    (vector? (lambda (obj) bool) "returns #t iff OBJ is a vector")
-    (make-vector (lambda (len :optional fill) vec) "a new vector of K elements")
-    (vector (lambda (obj \.\.\.) vec))
-    (vector-length (lambda (vec) n) "the number of elements in VEC")
-    (vector-ref (lambda (vec i) obj) "the Ith element of VEC")
-    (vector-set! (lambda (vec i obj) undefined) "set the Ith element of VEC to OBJ")
-    (vector->list (lambda (vec) list))
-    (list->vector (lambda (list) vec))
-    (vector-fill! (lambda (vec obj) undefined) "set every element in VEC to OBJ")
-    (procedure? (lambda (obj) bool) "returns #t iff OBJ is a procedure")
-    (apply (lambda ((lambda obj a) obj \.\.\.) a) "procedure application")
-    (map (lambda ((lambda (obj1 . obj2) a) list \.\.\.) (list a)) "a new list of PROC applied to every element of LIST")
-    (for-each (lambda ((lambda obj a) obj \.\.\.) undefined) "apply PROC to each element of LIST in order")
-    (force (lambda (promise) obj) "force the delayed value of PROMISE")
-    (call-with-current-continuation (lambda (proc) obj) "goto on steroids")
-    (values (lambda (obj \.\.\.)) "send multiple values to the calling continuation")
-    (call-with-values (lambda (producer consumer) obj))
-    (dynamic-wind (lambda (before-thunk thunk after-thunk) obj))
-    (scheme-report-environment (lambda (int) env) "INT should be 5")
-    (null-environment (lambda (int) env) "INT should be 5")
-    (call-with-input-file (lambda (path proc) input-port))
-    (call-with-output-file (lambda (path proc) output-port))
-    (input-port? (lambda (obj) bool) "returns #t iff OBJ is an input port")
-    (output-port? (lambda (obj) bool) "returns #t iff OBJ is an output port")
-    (current-input-port (lambda () input-port) "the default input for read procedures")
-    (current-output-port (lambda () output-port) "the default output for write procedures")
-    (with-input-from-file (lambda (path thunk) obj))
-    (with-output-to-file (lambda (path thunk) obj))
-    (open-input-file (lambda (path) input-port))
-    (open-output-file (lambda (path) output-port))
-    (close-input-port (lambda (input-port)))
-    (close-output-port (lambda (output-port)))
-    (read (lambda (:optional input-port) obj) "read a datum")
-    (read-char (lambda (:optional input-port) ch) "read a single character")
-    (peek-char (lambda (:optional input-port) ch))
-    (eof-object? (lambda (obj) bool) "returns #t iff OBJ is the end-of-file object")
-    (char-ready? (lambda (:optional input-port) bool))
-    (write (lambda (object :optional output-port) undefined) "write a datum")
-    (display (lambda (object :optional output-port) undefined) "display")
-    (newline (lambda (:optional output-port) undefined) "send a linefeed")
-    (write-char (lambda (char :optional output-port) undefined) "write a single character")
-    (load (lambda (filename) undefined) "evaluate expressions from a file")
-    (eval (lambda (expr env)))
-  ))
-
-(defvar *scheme-srfi-info*
-  [
-   ;; SRFI 0
-   ("Feature-based conditional expansion construct"
-    (cond-expand (syntax (clause \.\.\.))))
-   
-   ;; SRFI 1
-   ("List Library"
-    (xcons (lambda (object object) pair))
-    (cons* (lambda (object \.\.\.) pair))
-    (make-list (lambda (integer :optional object) list))
-    (list-tabulate (lambda (integer procedure) list))
-    (list-copy (lambda (list) list))
-    (circular-list (lambda (object \.\.\.) list))
-    (iota (lambda (integer :optional integer integer) list))
-    (proper-list? (lambda (object) bool))
-    (circular-list? (lambda (object) bool))
-    (dotted-list? (lambda (object) bool))
-    (not-pair? (lambda (object) bool))
-    (null-list? (lambda (object) bool))
-    (list= (lambda (procedure list \.\.\.) bool))
-    (first (lambda (pair)))
-    (second (lambda (pair)))
-    (third (lambda (pair)))
-    (fourth (lambda (pair)))
-    (fifth (lambda (pair)))
-    (sixth (lambda (pair)))
-    (seventh (lambda (pair)))
-    (eighth (lambda (pair)))
-    (ninth (lambda (pair)))
-    (tenth (lambda (pair)))
-    (car+cdr (lambda (pair)))
-    (take (lambda (pair integer) list))
-    (drop (lambda (pair integer) list))
-    (take-right (lambda (pair integer) list))
-    (drop-right (lambda (pair integer) list))
-    (take! (lambda (pair integer) list))
-    (drop-right! (lambda (pair integer) list))
-    (split-at (lambda (pair integer) list))
-    (split-at! (lambda (pair integer) list))
-    (last (lambda (pair) obj))
-    (last-pair (lambda (pair) pair))
-    (length+ (lambda (object) n))
-    (concatenate (lambda (list) list))
-    (append! (lambda (list \.\.\.) list))
-    (concatenate! (lambda (list) list))
-    (reverse! (lambda (list) list))
-    (append-reverse (lambda (list list) list))
-    (append-reverse! (lambda (list list) list))
-    (zip (lambda (list \.\.\.) list))
-    (unzip1 (lambda (list) list))
-    (unzip2 (lambda (list) list))
-    (unzip3 (lambda (list) list))
-    (unzip4 (lambda (list) list))
-    (unzip5 (lambda (list) list))
-    (count (lambda ((lambda (obj1 . obj2)) list \.\.\.) n))
-    (fold (lambda ((lambda (obj1 obj2 . obj3) a) object list \.\.\.) a))
-    (unfold (lambda (procedure procedure procedure object :optional procedure) obj))
-    (pair-fold (lambda ((lambda obj a) object list \.\.\.) a))
-    (reduce (lambda ((lambda (obj1 obj2 . obj3) a) object list \.\.\.) a))
-    (fold-right (lambda ((lambda (obj1 obj2 . obj3) a) object list \.\.\.) a))
-    (unfold-right (lambda (procedure procedure procedure object :optional object) obj))
-    (pair-fold-right (lambda ((lambda (obj1 obj2 . obj3) a) object list \.\.\.) a))
-    (reduce-right (lambda ((lambda (obj1 obj2 . obj3) a) object list \.\.\.) a))
-    (append-map (lambda ((lambda (obj1 . obj2)) list \.\.\.) list))
-    (append-map! (lambda ((lambda (obj1 . obj2)) list \.\.\.) list))
-    (map! (lambda ((lambda (obj1 . obj2)) list \.\.\.) list))
-    (pair-for-each (lambda ((lambda (obj1 . obj2)) list \.\.\.) undefined))
-    (filter-map (lambda ((lambda (obj1 . obj2)) list \.\.\.) list))
-    (map-in-order (lambda ((lambda (obj1 . obj2)) list \.\.\.) list))
-    (filter (lambda ((lambda (obj1 . obj2)) list) list))
-    (partition (lambda ((lambda (obj) bool) list) list))
-    (remove (lambda ((lambda (obj1) bool) list) list))
-    (filter! (lambda ((lambda (obj1) bool) list) list))
-    (partition! (lambda ((lambda (obj1) bool) list) list))
-    (remove! (lambda ((lambda (obj1) bool) list) list))
-    (find (lambda ((lambda (obj1) bool) list) obj))
-    (find-tail (lambda ((lambda (obj1) bool) list) obj))
-    (any (lambda ((lambda (obj1 . obj2) a) list \.\.\.) a))
-    (every (lambda ((lambda (obj1 . obj2) a) list \.\.\.) a))
-    (list-index (lambda ((lambda (obj1 . obj2)) list \.\.\.) (or bool integer)))
-    (take-while (lambda ((lambda (obj)) list) list))
-    (drop-while (lambda ((lambda (obj)) list) list))
-    (take-while! (lambda ((lambda (obj)) list) list))
-    (span (lambda ((lambda (obj)) list) list))
-    (break (lambda ((lambda (obj)) list) list))
-    (span! (lambda ((lambda (obj)) list) list))
-    (break! (lambda ((lambda (obj)) list) list))
-    (delete (lambda (object list :optional procedure) list))
-    (delete-duplicates (lambda (list :optional procedure) list))
-    (delete! (lambda (obj list :optional procedure) list))
-    (delete-duplicates! (lambda (list :optional procedure) list))
-    (alist-cons (lambda (obj1 obj2 alist) alist))
-    (alist-copy (lambda (alist) alist))
-    (alist-delete (lambda (obj alist) alist))
-    (alist-delete! (lambda (obj alist) alist))
-    (lset<= (lambda (procedure list \.\.\.) bool))
-    (lset= (lambda (procedure list \.\.\.) bool))
-    (lset-adjoin (lambda (procedure list object \.\.\.) list))
-    (lset-union (lambda (procedure list \.\.\.) list))
-    (lset-union! (lambda (procedure list \.\.\.) list))
-    (lset-intersection (lambda (procedure list \.\.\.) list))
-    (lset-intersection! (lambda (procedure list \.\.\.) list))
-    (lset-difference (lambda (procedure list \.\.\.) list))
-    (lset-difference! (lambda (procedure list \.\.\.) list))
-    (lset-xor (lambda (procedure list \.\.\.) list))
-    (lset-xor! (lambda (procedure list \.\.\.) list))
-    (lset-diff+intersection (lambda (procedure list \.\.\.) list))
-    (lset-diff+intersection! (lambda (procedure list \.\.\.) list))
-
-    )
-
-   ;; SRFI 2
-   ("AND-LET*: an AND with local bindings, a guarded LET* special form"
-    (and-let* (syntax (bindings body \.\.\.))))
-
-   ()
-
-   ;; SRFI 4
-   ("Homogeneous numeric vector datatypes"
-
-    (u8vector? (lambda (obj) bool))
-    (make-u8vector (lambda (size integer) u8vector))
-    (u8vector (lambda (integer \.\.\.) u8vector))
-    (u8vector-length (lambda (u8vector) n))
-    (u8vector-ref (lambda (u8vector i) int))
-    (u8vector-set! (lambda (u8vector i u8value) undefined))
-    (u8vector->list (lambda (u8vector) list))
-    (list->u8vector (lambda (list) u8vector))
-
-    (s8vector? (lambda (obj) bool))
-    (make-s8vector (lambda (size integer) s8vector))
-    (s8vector (lambda (integer \.\.\.) s8vector))
-    (s8vector-length (lambda (s8vector) n))
-    (s8vector-ref (lambda (s8vector i) int))
-    (s8vector-set! (lambda (s8vector i s8value) undefined))
-    (s8vector->list (lambda (s8vector) list))
-    (list->s8vector (lambda (list) s8vector))
-
-    (u16vector? (lambda (obj) bool))
-    (make-u16vector (lambda (size integer) u16vector))
-    (u16vector (lambda (integer \.\.\.)))
-    (u16vector-length (lambda (u16vector) n))
-    (u16vector-ref (lambda (u16vector i) int))
-    (u16vector-set! (lambda (u16vector i u16value) undefined))
-    (u16vector->list (lambda (u16vector) list))
-    (list->u16vector (lambda (list) u16vector))
-
-    (s16vector? (lambda (obj) bool))
-    (make-s16vector (lambda (size integer) s16vector))
-    (s16vector (lambda (integer \.\.\.) s16vector))
-    (s16vector-length (lambda (s16vector) n))
-    (s16vector-ref (lambda (s16vector i) int))
-    (s16vector-set! (lambda (s16vector i s16value) undefined))
-    (s16vector->list (lambda (s16vector) list))
-    (list->s16vector (lambda (list) s16vector))
-
-    (u32vector? (lambda (obj) bool))
-    (make-u32vector (lambda (size integer) u32vector))
-    (u32vector (lambda (integer \.\.\.) u32vector))
-    (u32vector-length (lambda (u32vector) n))
-    (u32vector-ref (lambda (u32vector i) int))
-    (u32vector-set! (lambda (u32vector i u32value) undefined))
-    (u32vector->list (lambda (u32vector) list))
-    (list->u32vector (lambda (list) u32vector))
-
-    (s32vector? (lambda (obj) bool))
-    (make-s32vector (lambda (size integer) s32vector))
-    (s32vector (lambda (integer \.\.\.) s32vector))
-    (s32vector-length (lambda (s32vector) n))
-    (s32vector-ref (lambda (s32vector i) int))
-    (s32vector-set! (lambda (s32vector i s32value) undefined))
-    (s32vector->list (lambda (s32vector) list))
-    (list->s32vector (lambda (list) s32vector))
-
-    (u64vector? (lambda (obj) bool))
-    (make-u64vector (lambda (size integer) u64vector))
-    (u64vector (lambda (integer \.\.\.) u64vector))
-    (u64vector-length (lambda (u64vector) n))
-    (u64vector-ref (lambda (u64vector i) int))
-    (u64vector-set! (lambda (u64vector i u64value) undefined))
-    (u64vector->list (lambda (u64vector) list))
-    (list->u64vector (lambda (list) u64vector))
-
-    (s64vector? (lambda (obj) bool))
-    (make-s64vector (lambda (size integer) s64vector))
-    (s64vector (lambda (integer \.\.\.) s64vector))
-    (s64vector-length (lambda (s64vector) n))
-    (s64vector-ref (lambda (s64vector i) int))
-    (s64vector-set! (lambda (s64vector i s64value) undefined))
-    (s64vector->list (lambda (s64vector) list))
-    (list->s64vector (lambda (list) s64vector))
-
-    (f32vector? (lambda (obj) bool))
-    (make-f32vector (lambda (size integer) f32vector))
-    (f32vector (lambda (number \.\.\.) f32vector))
-    (f32vector-length (lambda (f32vector) n))
-    (f32vector-ref (lambda (f32vector i) int))
-    (f32vector-set! (lambda (f32vector i f32value) undefined))
-    (f32vector->list (lambda (f32vector) list))
-    (list->f32vector (lambda (list) f32vector))
-
-    (f64vector? (lambda (obj) bool))
-    (make-f64vector (lambda (size integer) f64vector))
-    (f64vector (lambda (number \.\.\.) f64vector))
-    (f64vector-length (lambda (f64vector) n))
-    (f64vector-ref (lambda (f64vector i) int))
-    (f64vector-set! (lambda (f64vector i f64value) undefined))
-    (f64vector->list (lambda (f64vector) list))
-    (list->f64vector (lambda (list) f64vector))
-    )
-
-   ;; SRFI 5
-   ("A compatible let form with signatures and rest arguments"
-    (let (syntax (bindings body \.\.\.))))
-
-   ;; SRFI 6
-   ("Basic String Ports"
-    (open-input-string (lambda (str) input-port))
-    (open-output-string (lambda () output-port))
-    (get-output-string (lambda (output-port) str)))
-
-   ;; SRFI 7
-   ("Feature-based program configuration language"
-    (program (syntax (clause \.\.\.)))
-    (feature-cond (syntax (clause))))
-
-   ;; SRFI 8
-   ("receive: Binding to multiple values"
-    (receive (syntax (identifiers producer body \.\.\.))))
-
-   ;; SRFI 9
-   ("Defining Record Types"
-    (define-record-type (syntax (name constructor-name pred-name fields \.\.\.))))
-
-   ;; SRFI 10
-   ("Sharp-Comma External Form"
-    (define-reader-ctor (syntax (name proc) undefined)))
-
-   ;; SRFI 11
-   ("Syntax for receiving multiple values"
-    (let-values (syntax (bindings body \.\.\.)))
-    (let-values* (syntax (bindings body \.\.\.))))
-
-   ()
-
-   ;; SRFI 13
-   ("String Library"
-    (string-map (lambda (proc str :optional start end) str))
-    (string-map! (lambda (proc str :optional start end) undefined))
-    (string-fold (lambda (kons knil str :optional start end) obj))
-    (string-fold-right (lambda (kons knil str :optional start end) obj))
-    (string-unfold (lambda (p f g seed :optional base make-final) str))
-    (string-unfold-right (lambda (p f g seed :optional base make-final) str))
-    (string-tabulate (lambda (proc len) str))
-    (string-for-each (lambda (proc str :optional start end) undefined))
-    (string-for-each-index (lambda (proc str :optional start end) undefined))
-    (string-every (lambda (pred str :optional start end) obj))
-    (string-any (lambda (pred str :optional start end) obj))
-    (string-hash (lambda (str :optional bound start end) int))
-    (string-hash-ci (lambda (str :optional bound start end) int))
-    (string-compare (lambda (string1 string2 lt-proc eq-proc gt-proc :optional start end) obj))
-    (string-compare-ci (lambda (string1 string2 lt-proc eq-proc gt-proc :optional start end) obj))
-    (string= (lambda (string1 string2 :optional start1 end1 start2 end2) bool))
-    (string<> (lambda (string1 string2 :optional start1 end1 start2 end2) bool))
-    (string< (lambda (string1 string2 :optional start1 end1 start2 end2) bool))
-    (string> (lambda (string1 string2 :optional start1 end1 start2 end2) bool))
-    (string<= (lambda (string1 string2 :optional start1 end1 start2 end2) bool))
-    (string>= (lambda (string1 string2 :optional start1 end1 start2 end2) bool))
-    (string-ci= (lambda (string1 string2 :optional start1 end1 start2 end2) bool))
-    (string-ci<> (lambda (string1 string2 :optional start1 end1 start2 end2) bool))
-    (string-ci< (lambda (string1 string2 :optional start1 end1 start2 end2) bool))
-    (string-ci> (lambda (string1 string2 :optional start1 end1 start2 end2) bool))
-    (string-ci<= (lambda (string1 string2 :optional start1 end1 start2 end2) bool))
-    (string-ci>= (lambda (string1 string2 :optional start1 end1 start2 end2) bool))
-    (string-titlecase (lambda (string :optional start end) str))
-    (string-upcase (lambda (string :optional start end) str))
-    (string-downcase (lambda (string :optional start end) str))
-    (string-titlecase! (lambda (string :optional start end) undefined))
-    (string-upcase! (lambda (string :optional start end) undefined))
-    (string-downcase! (lambda (string :optional start end) undefined))
-    (string-take (lambda (string nchars) str))
-    (string-drop (lambda (string nchars) str))
-    (string-take-right (lambda (string nchars) str))
-    (string-drop-right (lambda (string nchars) str))
-    (string-pad (lambda (string k :optional char start end) str))
-    (string-pad-right (lambda (string k :optional char start end) str))
-    (string-trim (lambda (string :optional char/char-set/pred start end) str))
-    (string-trim-right (lambda (string :optional char/char-set/pred start end) str))
-    (string-trim-both (lambda (string :optional char/char-set/pred start end) str))
-    (string-filter (lambda (char/char-set/pred string :optional start end) str))
-    (string-delete (lambda (char/char-set/pred string :optional start end) str))
-    (string-index (lambda (string char/char-set/pred :optional start end) (or integer bool)))
-    (string-index-right (lambda (string char/char-set/pred :optional end start) (or integer bool)))
-    (string-skip (lambda (string char/char-set/pred :optional start end) (or integer bool)))
-    (string-skip-right (lambda (string char/char-set/pred :optional end start) (or integer bool)))
-    (string-count (lambda (string char/char-set/pred :optional start end) n))
-    (string-prefix-length (lambda (string1 string2 :optional start1 end1 start2 end2) n))
-    (string-suffix-length (lambda (string1 string2 :optional start1 end1 start2 end2) n))
-    (string-prefix-length-ci (lambda (string1 string2 :optional start1 end1 start2 end2) n))
-    (string-suffix-length-ci (lambda (string1 string2 :optional start1 end1 start2 end2) n))
-    (string-prefix? (lambda (string1 string2 :optional start1 end1 start2 end2) bool))
-    (string-suffix? (lambda (string1 string2 :optional start1 end1 start2 end2) bool))
-    (string-prefix-ci? (lambda (string1 string2 :optional start1 end1 start2 end2) bool))
-    (string-suffix-ci? (lambda (string1 string2 :optional start1 end1 start2 end2) bool))
-    (string-contains (lambda (string pattern :optional s-start s-end p-start p-end) obj))
-    (string-contains-ci (lambda (string pattern :optional s-start s-end p-start p-end) obj))
-    (string-fill! (lambda (string char :optional start end) undefined))
-    (string-copy! (lambda (to tstart from :optional fstart fend) undefined))
-    (string-copy (lambda (str :optional start end) str))
-    (substring/shared (lambda (str start :optional end) str))
-    (string-reverse (lambda (str :optional start end) str))
-    (string-reverse! (lambda (str :optional start end) undefined))
-    (reverse-list->string (lambda (char-list) str))
-    (string->list (lambda (str :optional start end) list))
-    (string-concatenate (lambda (string-list) str))
-    (string-concatenate/shared (lambda (string-list) str))
-    (string-append/shared (lambda (str \.\.\.) str))
-    (string-concatenate-reverse (lambda (string-list :optional final-string end) str))
-    (string-concatenate-reverse/shared (lambda (string-list :optional final-string end) str))
-    (xsubstring (lambda (str from :optional to start end) str))
-    (string-xcopy! (lambda (target tstart str from :optional to start end) undefined))
-    (string-null? (lambda (str) bool))
-    (string-join (lambda (string-list :optional delim grammar) str))
-    (string-tokenize (lambda (string :optional token-chars start end) str))
-    (string-replace (lambda (str1 str2 start1 end1 :optional start2 end2) str))
-    (string-kmp-partial-search (lambda (pat rv str i :optional c= p-start s-start s-end) n))
-    (make-kmp-restart-vector (lambda (str :optional c= start end) vec))
-    (kmp-step (lambda (pat rv c i c= p-start) n))
-    )
-
-   ;; SRFI 14
-   ("Character-Set Library"
-    (char-set? (lambda (cset) bool))
-    (char-set= (lambda (cset \.\.\.) bool))
-    (char-set<= (lambda (cset \.\.\.) bool))
-    (char-set-hash (lambda (cset :optional int) int))
-    (char-set-cursor (lambda (cset) cursor))
-    (char-set-ref (lambda (cset cursor) ch))
-    (char-set-cursor-next (lambda (cset cursor) int))
-    (end-of-char-set? (lambda (cursor) bool))
-    (char-set-fold (lambda (proc obj cset) obj))
-    (char-set-unfold (lambda (proc proc proc obj :optional obj) cset))
-    (char-set-unfold! (lambda (proc proc proc obj obj) cset))
-    (char-set-for-each (lambda (proc cset) undefined))
-    (char-set-map (lambda (proc cset) cset))
-    (char-set-copy (lambda (cset) cset))
-    (char-set (lambda (ch \.\.\.) cset))
-    (list->char-set (lambda (list :optional obj) cset))
-    (list->char-set! (lambda (list cset) cset))
-    (string->char-set (lambda (str :optional cset) cset))
-    (string->char-set! (lambda (str cset) cset))
-    (ucs-range->char-set (lambda (int int :optional bool cset) cset))
-    (ucs-range->char-set! (lambda (int int bool cset) cset))
-    (char-set-filter (lambda (proc cset :optional base-cset) cset))
-    (char-set-filter! (lambda (proc cset base-cset) cset))
-    (->char-set (lambda (obj) cset))
-    (char-set-size (lambda (cset) n))
-    (char-set-count (lambda (proc cset) n))
-    (char-set-contains? (lambda (cset ch) bool))
-    (char-set-every (lambda (proc cset) obj))
-    (char-set-any (lambda (proc cset) obj))
-    (char-set-adjoin (lambda (cset ch \.\.\.) cset))
-    (char-set-delete (lambda (cset ch \.\.\.) cset))
-    (char-set-adjoin! (lambda (cset ch \.\.\.) cset))
-    (char-set-delete! (lambda (cset ch \.\.\.) cset))
-    (char-set->list (lambda (cset) list))
-    (char-set->string (lambda (cset) str))
-    (char-set-complement (lambda (cset) cset))
-    (char-set-union (lambda (cset \.\.\.) cset))
-    (char-set-intersection (lambda (cset \.\.\.) cset))
-    (char-set-xor (lambda (cset \.\.\.) cset))
-    (char-set-difference (lambda (cset \.\.\.) cset))
-    (char-set-diff+intersection (lambda (cset \.\.\.) cset))
-    (char-set-complement! (lambda (cset) cset))
-    (char-set-union! (lambda (cset \.\.\.) cset))
-    (char-set-intersection! (lambda (cset \.\.\.) cset))
-    (char-set-xor! (lambda (cset \.\.\.) cset))
-    (char-set-difference! (lambda (cset \.\.\.) cset))
-    (char-set-diff+intersection! (lambda (cset \.\.\.) cset))
-    (char-set:lower-case char-set)
-    (char-set:upper-case char-set)
-    (char-set:letter char-set)
-    (char-set:digit char-set)
-    (char-set:letter+digit char-set)
-    (char-set:graphic char-set)
-    (char-set:printing char-set)
-    (char-set:whitespace char-set)
-    (char-set:blank char-set)
-    (char-set:iso-control char-set)
-    (char-set:punctuation char-set)
-    (char-set:symbol char-set)
-    (char-set:hex-digit char-set)
-    (char-set:ascii char-set)
-    (char-set:empty char-set)
-    (char-set:full char-set)
-    )
-
-   ()
-
-   ;; SRFI 16
-   ("Syntax for procedures of variable arity"
-    (case-lambda (syntax (clauses \.\.\.) procedure)))
-
-   ;; SRFI 17
-   ("Generalized set!"
-    (set! (syntax (what value) undefined)))
-
-   ;; SRFI 18
-   ("Multithreading support"
-    (current-thread (lambda () thread))
-    (thread? (lambda (obj) bool))
-    (make-thread (lambda (thunk :optional name) thread))
-    (thread-name (lambda (thread) name))
-    (thread-specific (lambda (thread)))
-    (thread-specific-set! (lambda (thread obj)))
-    (thread-base-priority (lambda (thread)))
-    (thread-base-priority-set! (lambda (thread number)))
-    (thread-priority-boost (lambda (thread)))
-    (thread-priority-boost-set! (lambda (thread number)))
-    (thread-quantum (lambda (thread)))
-    (thread-quantum-set! (lambda (thread number)))
-    (thread-start! (lambda (thread)))
-    (thread-yield! (lambda ()))
-    (thread-sleep! (lambda (number)))
-    (thread-terminate! (lambda (thread)))
-    (thread-join! (lambda (thread :optional timeout timeout-val)))
-    (mutex? (lambda (obj) bool))
-    (make-mutex (lambda (:optional name) mutex))
-    (mutex-name (lambda (mutex) name))
-    (mutex-specific (lambda (mutex)))
-    (mutex-specific-set! (lambda (mutex obj)))
-    (mutex-state (lambda (mutex)))
-    (mutex-lock! (lambda (mutex :optional timeout thread)))
-    (mutex-unlock! (lambda (mutex :optional condition-variable timeout)))
-    (condition-variable? (lambda (obj) bool))
-    (make-condition-variable (lambda (:optional name) condition-variable))
-    (condition-variable-name (lambda (condition-variable) name))
-    (condition-variable-specific (lambda (condition-variable)))
-    (condition-variable-specific-set! (lambda (condition-variable obj)))
-    (condition-variable-signal! (lambda (condition-variable)))
-    (condition-variable-broadcast! (lambda (condition-variable)))
-    (current-time (lambda () time))
-    (time? (lambda (obj) bool))
-    (time->seconds (lambda (time) x1))
-    (seconds->time (lambda (x1) time))
-    (current-exception-handler (lambda () handler))
-    (with-exception-handler (lambda (handler thunk)))
-    (raise (lambda (obj)))
-    (join-timeout-exception? (lambda (obj) bool))
-    (abandoned-mutex-exception? (lambda (obj) bool))
-    (terminated-thread-exception? (lambda (obj) bool))
-    (uncaught-exception? (lambda (obj) bool))
-    (uncaught-exception-reason (lambda (exc) obj))
-    )
-
-   ;; SRFI 19
-   ("Time Data Types and Procedures"
-    (current-date (lambda (:optional tz-offset)) date)
-    (current-julian-day (lambda ()) jdn)
-    (current-modified-julian-day (lambda ()) mjdn)
-    (current-time (lambda (:optional time-type)) time)
-    (time-resolution (lambda (:optional time-type)) nanoseconds)
-    (make-time (lambda (type nanosecond second)))
-    (time? (lambda (obj)))
-    (time-type (lambda (time)))
-    (time-nanosecond (lambda (time)))
-    (time-second (lambda (time)))
-    (set-time-type! (lambda (time)))
-    (set-time-nanosecond! (lambda (time)))
-    (set-time-second! (lambda (time)))
-    (copy-time (lambda (time)))
-    (time<=? (lambda (time1 time2)))
-    (time<? (lambda (time1 time2)))
-    (time=? (lambda (time1 time2)))
-    (time>=? (lambda (time1 time2)))
-    (time>? (lambda (time1 time2)))
-    (time-difference (lambda (time1 time2)))
-    (time-difference! (lambda (time1 time2)))
-    (add-duration (lambda (time duration)))
-    (add-duration! (lambda (time duration)))
-    (subtract-duration (lambda (time duration)))
-    (subtract-duration! (lambda (time duration)))
-    (make-date (lambda (nanosecond second minute hour day month year zone-offset)))
-    (date? (lambda (obj)))
-    (date-nanosecond (lambda (date)))
-    (date-second (lambda (date)))
-    (date-minute (lambda (date)))
-    (date-hour (lambda (date)))
-    (date-day (lambda (date)))
-    (date-month (lambda (date)))
-    (date-year (lambda (date)))
-    (date-zone-offset (lambda (date)))
-    (date-year-day (lambda (date)))
-    (date-week-day (lambda (date)))
-    (date-week-number (lambda (date)))
-    (date->julian-day (lambda (date)))
-    (date->modified-julian-day (lambda (date)))
-    (date->time-monotonic (lambda (date)))
-    (date->time-tai (lambda (date)))
-    (date->time-utc (lambda (date)))
-    (julian-day->date (lambda (date)))
-    (julian-day->time-monotonic (lambda (date)))
-    (julian-day->time-tai (lambda (date)))
-    (julian-day->time-utc (lambda (date)))
-    (modified-julian-day->date (lambda (date)))
-    (modified-julian-day->time-monotonic (lambda (date)))
-    (modified-julian-day->time-tai (lambda (date)))
-    (modified-julian-day->time-utc (lambda (date)))
-    (time-monotonic->date (lambda (date)))
-    (time-monotonic->julian-day (lambda (date)))
-    (time-monotonic->modified-julian-day (lambda (date)))
-    (time-monotonic->time-monotonic (lambda (date)))
-    (time-monotonic->time-tai (lambda (date)))
-    (time-monotonic->time-tai! (lambda (date)))
-    (time-monotonic->time-utc (lambda (date)))
-    (time-monotonic->time-utc! (lambda (date)))
-    (time-tai->date (lambda (date)))
-    (time-tai->julian-day (lambda (date)))
-    (time-tai->modified-julian-day (lambda (date)))
-    (time-tai->time-monotonic (lambda (date)))
-    (time-tai->time-monotonic! (lambda (date)))
-    (time-tai->time-utc (lambda (date)))
-    (time-tai->time-utc! (lambda (date)))
-    (time-utc->date (lambda (date)))
-    (time-utc->julian-day (lambda (date)))
-    (time-utc->modified-julian-day (lambda (date)))
-    (time-utc->time-monotonic (lambda (date)))
-    (time-utc->time-monotonic! (lambda (date)))
-    (time-utc->time-tai (lambda (date)))
-    (time-utc->time-tai! (lambda (date)))
-    (date->string (lambda (date :optional format-string)))
-    (string->date (lambda (input-string template-string)))
-    )
-
-   ()
-
-   ;; SRFI 21
-   ("Real-time multithreading support"
-    srfi-18)                            ; same as srfi-18
-
-   ;; SRFI 22
-   ("Running Scheme Scripts on Unix"
-    )
-
-   ;; SRFI 23
-   ("Error reporting mechanism"
-    (error (lambda (reason-string arg \.\.\.))))
-
-   ()
-
-   ;; SRFI 25
-   ("Multi-dimensional Array Primitives"
-    (array? (lambda (obj)))
-    (make-array (lambda (shape :optional init)))
-    (shape (lambda (bound \.\.\.)))
-    (array (lambda (shape obj \.\.\.)))
-    (array-rank (lambda (array)))
-    (array-start (lambda (array)))
-    (array-end (lambda (array)))
-    (array-shape (lambda (array)))
-    (array-ref (lambda (array i \.\.\.)))
-    (array-set! (lambda (array obj \.\.\.) undefined))
-    (share-array (lambda (array shape proc)))
-    )
-
-   ;; SRFI 26
-   ("Notation for Specializing Parameters without Currying"
-    (cut (syntax (obj \.\.\.)))
-    (cute (lambda (obj \.\.\.))))
-
-   ;; SRFI 27
-   ("Sources of Random Bits"
-    (random-integer (lambda (n)))
-    (random-real (lambda ()))
-    (default-random-source (lambda ()))
-    (make-random-source (lambda ()))
-    (random-source? (lambda (obj)))
-    (random-source-state-ref (lambda (random-source)))
-    (random-source-state-set! (lambda (random-source state)))
-    (random-source-randomize! (lambda (random-source)))
-    (random-source-pseudo-randomize! (lambda (random-source i j)))
-    (random-source-make-integers (lambda (random-source)))
-    (random-source-make-reals (lambda (random-source)))
-    )
-
-   ;; SRFI 28
-   ("Basic Format Strings"
-    (format (lambda (port-or-boolean format-string arg \.\.\.))))
-
-   ;; SRFI 29
-   ("Localization"
-    (current-language (lambda (:optional symbol)))
-    (current-country (lambda (:optional symbol)))
-    (current-locale-details (lambda (:optional list)))
-    (declare-bundle! (lambda (bundle-name association-list)))
-    (store-bundle (lambda (bundle-name)))
-    (load-bundle! (lambda (bundle-name)))
-    (localized-template (lambda (package-name message-template-name)))
-    )
-
-   ;; SRFI 30
-   ("Nested Multi-line Comments"
-    )
-
-   ;; SRFI 31
-   ("A special form for recursive evaluation"
-    (rec (syntax (name body \.\.\.) procedure)))
-
-   ()
-
-   ()
-
-   ;; SRFI 34
-   ("Exception Handling for Programs"
-    (guard (syntax (clauses \.\.\.)))
-    (raise (lambda (obj)))
-    )
-
-   ;; SRFI 35
-   ("Conditions"
-    (make-condition-type (lambda (id parent field-name-list)))
-    (condition-type? (lambda (obj)))
-    (make-condition (lambda (condition-type)))
-    (condition? (lambda (obj)))
-    (condition-has-type? (lambda (condition condition-type)))
-    (condition-ref (lambda (condition field-name)))
-    (make-compound-condition (lambda (condition \.\.\.)))
-    (extract-condition (lambda (condition condition-type)))
-    (define-condition-type (syntax (name parent pred-name fields \.\.\.)))
-    (condition (syntax (type-field-binding \.\.\.)))
-    )
-
-   ;; SRFI 36
-   ("I/O Conditions"
-    (&error condition)
-    (&i/o-error condition)
-    (&i/o-port-error condition)
-    (&i/o-read-error condition)
-    (&i/o-write-error condition)
-    (&i/o-closed-error condition)
-    (&i/o-filename-error condition)
-    (&i/o-malformed-filename-error condition)
-    (&i/o-file-protection-error condition)
-    (&i/o-file-is-read-only-error condition)
-    (&i/o-file-already-exists-error condition)
-    (&i/o-no-such-file-error condition)
-    )
-
-   ;; SRFI 37
-   ("args-fold: a program argument processor"
-    (args-fold
-     (arg-list option-list unrecognized-option-proc operand-proc seed \.\.\.))
-    (option-processor (lambda (option name arg seeds \.\.\.)))
-    (operand-processor (lambda (operand seeds \.\.\.)))
-    (option (lambda (name-list required-arg? optional-arg? option-proc)))
-    (option-names (lambda (option)))
-    (option-required-arg? (lambda (option)))
-    (option-optional-arg? (lambda (option)))
-    (option-processor (lambda (option)))
-    )
-
-   ;; SRFI 38
-   ("External Representation for Data With Shared Structure"
-    (write-with-shared-structure (lambda (obj :optional port optarg)))
-    (read-with-shared-structure (lambda (:optional port)))
-    )
-
-   ;; SRFI 39
-   ("Parameter objects"
-    (make-parameter (lambda (init-value :optional converter)))
-    (parameterize (syntax (bindings body \.\.\.))))
-
-   ;; SRFI 40
-   ("A Library of Streams"
-    (stream-null stream)
-    (stream-cons (syntax (obj stream)))
-    (stream? (lambda (obj)))
-    (stream-null? (lambda (obj)))
-    (stream-pair? (lambda (obj)))
-    (stream-car (lambda (stream)))
-    (stream-cdr (lambda (stream)))
-    (stream-delay (syntax (expr)))
-    (stream (lambda (obj \.\.\.)))
-    (stream-unfoldn (lambda (generator-proc seed n)))
-    (stream-map (lambda (proc stream \.\.\.)))
-    (stream-for-each (lambda (proc stream \.\.\.) undefined))
-    (stream-filter (lambda (pred stream)))
-    )
-
-   ()
-
-   ;; SRFI 42
-   ("Eager Comprehensions"
-    (list-ec (syntax))
-    (append-ec (syntax))
-    (sum-ec (syntax))
-    (min-ec (syntax))
-    (max-ec (syntax))
-    (any?-ec (syntax))
-    (every?-ec (syntax))
-    (first-ec (syntax))
-    (do-ec (syntax))
-    (fold-ec (syntax))
-    (fold3-ec (syntax))
-    (:list (syntax () undefined))
-    (:string (syntax () undefined))
-    (:vector (syntax () undefined))
-    (:integers (syntax () undefined))
-    (:range (syntax () undefined))
-    (:real-range (syntax () undefined))
-    (:char-range (syntax () undefined))
-    (:port (syntax () undefined))
-    (:do (syntax () undefined))
-    (:let (syntax () undefined))
-    (:parallel (syntax () undefined))
-    (:while (syntax () undefined))
-    (:until (syntax () undefined))
-    )
-
-   ;; SRFI 43
-   ("Vector Library"
-    (vector-unfold (f length initial-seed \.\.\.))
-    (vector-unfold-right (lambda (f length initial-seed \.\.\.)))
-    (vector-tabulate (lambda (f size)))
-    (vector-copy (lambda (vec :optional start end fill)))
-    (vector-reverse-copy (lambda (vec :optional start end)))
-    (vector-append (lambda (vec \.\.\.)))
-    (vector-concatenate (lambda (vector-list)))
-    (vector-empty? (lambda (obj)))
-    (vector= (lambda (eq-proc vec \.\.\.)))
-    (vector-fold (lambda (kons knil vec \.\.\.)))
-    (vector-fold-right (lambda (kons knil vec \.\.\.)))
-    (vector-map (lambda (f vec \.\.\.)))
-    (vector-map! (lambda (f vec \.\.\.)))
-    (vector-for-each (lambda (f vec \.\.\.) undefined))
-    (vector-count (lambda (pred vec \.\.\.)))
-    (vector-index (lambda (pred vec \.\.\.)))
-    (vector-index-right (lambda (pred vec \.\.\.)))
-    (vector-skip (lambda (pred vec \.\.\.)))
-    (vector-skip-right (lambda (pred vec \.\.\.)))
-    (vector-binary-search (lambda (vec value cmp-proc)))
-    (vector-any (lambda (pred vec \.\.\.)))
-    (vector-every (lambda (pred vec \.\.\.)))
-    (vector-swap! (lambda (vec i j) undefined))
-    (vector-reverse! (lambda (vec :optional start end) undefined))
-    (vector-copy! (lambda (target-vec t-start source-vec :optional start end) undefined))
-    (vector-reverse-copy! (lambda (target-vec t-start source-vec :optional start end) undefined))
-    (reverse-vector-to-list (lambda (vec :optional start end)))
-    (reverse-list-to-vector (lambda (list)))
-    )
-
-   ;; SRFI 44
-   ("Collections"
-    )
-
-   ;; SRFI 45
-   ("Primitives for expressing iterative lazy algorithms"
-    (delay (syntax (expr)))
-    (lazy (syntax (expr)))
-    (force (lambda (promise)))
-    (eager (lambda (promise)))
-    )
-
-   ;; SRFI 46
-   ("Basic Syntax-rules Extensions"
-    (syntax-rules (syntax () undefined)))
-
-   ;; SRFI 47
-   ("Array"
-    (make-array (lambda (prototype k \.\.\.)))
-    (ac64 (lambda (:optional z)))
-    (ac32 (lambda (:optional z)))
-    (ar64 (lambda (:optional x1)))
-    (ar32 (lambda (:optional x1)))
-    (as64 (lambda (:optional n)))
-    (as32 (lambda (:optional n)))
-    (as16 (lambda (:optional n)))
-    (as8 (lambda (:optional n)))
-    (au64 (lambda (:optional n)))
-    (au32 (lambda (:optional n)))
-    (au16 (lambda (:optional n)))
-    (au8 (lambda (:optional n)))
-    (at1 (lambda (:optional bool)))
-    (make-shared-array (lambda (array mapper k \.\.\.)))
-    (array-rank (lambda (obj)))
-    (array-dimensions (lambda (array)))
-    (array-in-bounds? (lambda (array k \.\.\.)))
-    (array-ref (lambda (array k \.\.\.)))
-    (array-set! (lambda (array obj k \.\.\.)))
-    )
-
-   ;; SRFI 48
-   ("Intermediate Format Strings"
-    (format (lambda (port-or-boolean format-string arg \.\.\.))))
-
-   ;; SRFI 49
-   ("Indentation-sensitive syntax"
-    )
-
-   ()
-
-   ;; SRFI 51
-   ("Handling rest list"
-    (rest-values (lambda (caller rest-list :optional args-number-limit default)))
-    (arg-and (syntax))
-    (arg-ands (syntax))
-    (err-and (syntax))
-    (err-ands (syntax))
-    (arg-or (syntax))
-    (arg-ors (syntax))
-    (err-or (syntax))
-    (err-ors (syntax))
-    )
-
-   ()
-
-   ()
-
-   ;; SRFI 54
-   ("Formatting"
-    (cat (lambda (obj \.\.\.))))
-
-   ;; SRFI 55
-   ("require-extension"
-    (require-extension (syntax)))
-
-   ()
-
-   ;; SRFI 57
-   ("Records"
-    (define-record-type (syntax))
-    (define-record-scheme (syntax))
-    (record-update (syntax))
-    (record-update! (syntax))
-    (record-compose (syntax)))
-
-   ;; SRFI 58
-   ("Array Notation"
-    )
-
-   ;; SRFI 59
-   ("Vicinity"
-    (program-vicinity (lambda ()))
-    (library-vicinity (lambda ()))
-    (implementation-vicinity (lambda ()))
-    (user-vicinity (lambda ()))
-    (home-vicinity (lambda ()))
-    (in-vicinity (lambda (vicinity filename)))
-    (sub-vicinity (lambda (vicinity name)))
-    (make-vicinity (lambda (dirname)))
-    (path-vicinity (lambda (path)))
-    (vicinity:suffix? (lambda (ch)))
-    )
-
-   ;; SRFI 60
-   ("Integers as Bits"
-    (bitwise-and (lambda (n \.\.\.) int))
-    (bitwise-ior (lambda (n \.\.\.) int))
-    (bitwise-xor (lambda (n \.\.\.) int))
-    (bitwise-not (lambda (n) int))
-    (bitwise-if (lambda (mask n m) int))
-    (any-bits-set? (lambda (n m) bool))
-    (bit-count (lambda (n) int))
-    (integer-length (lambda (n) int))
-    (first-bit-set (lambda (n) int))
-    (bit-set? (lambda (i n) bool))
-    (copy-bit (lambda (index n bool) int))
-    (bit-field (lambda (n start end) int))
-    (copy-bit-field (lambda (to-int from-int start end) int))
-    (arithmetic-shift (lambda (n count) int))
-    (rotate-bit-field (lambda (n count start end) int))
-    (reverse-bit-field (lambda (n start end) int))
-    (integer->list (lambda (k :optional len) list))
-    (list->integer (lambda (list) int))
-    )
-
-   ;; SRFI 61
-   ("A more general cond clause"
-    (cond (syntax)))
-
-   ;; SRFI 62
-   ("S-expression comments"
-    )
-
-   ;; SRFI 63
-   ("Homogeneous and Heterogeneous Arrays"
-    )
-
-   ;; SRFI 64
-   ("A Scheme API for test suites"
-    (test-assert (syntax))
-    (test-eqv (syntax))
-    (test-equal (syntax))
-    (test-eq (syntax))
-    (test-approximate (syntax))
-    (test-error (syntax))
-    (test-read-eval-string (lambda (string)))
-    (test-begin (syntax (suite-name :optional count)))
-    (test-end (syntax (suite-name)))
-    (test-group (syntax (suite-name decl-or-expr \.\.\.)))
-    (test-group-with-cleanup (syntax (suite-name decl-or-expr \.\.\.)))
-    (test-match-name (lambda (name)))
-    (test-match-nth (lambda (n :optional count)))
-    (test-match-any (lambda (specifier \.\.\.)))
-    (test-match-all (lambda (specifier \.\.\.)))
-    (test-skip (syntax (specifier)))
-    (test-expect-fail (syntax (specifier)))
-    (test-runner? (lambda (obj)))
-    (test-runner-current (lambda (:optional runner)))
-    (test-runner-get (lambda ()))
-    (test-runner-simple (lambda ()))
-    (test-runner-null (lambda ()))
-    (test-runner-create (lambda ()))
-    (test-runner-factory (lambda (:optional factory)))
-    (test-apply (syntax (runner specifier \.\.\.)))
-    (test-with-runner (syntax (runner decl-or-expr \.\.\.)))
-    (test-result-kind (lambda (:optional runner)))
-    (test-passed? (lambda (:optional runner)))
-    (test-result-ref (lambda (runner prop-name (:optional default))))
-    (test-result-set! (lambda (runner prop-name value)))
-    (test-result-remove (lambda (runner prop-name)))
-    (test-result-clear (lambda (runner)))
-    (test-result-alist (lambda (runner)))
-    (test-runner-on-test-begin (lambda (runner :optional proc)))
-    (test-runner-on-test-begin! (lambda (runner :optional proc)))
-    (test-runner-on-test-end (lambda (runner :optional proc)))
-    (test-runner-on-test-end! (lambda (runner :optional proc)))
-    (test-runner-on-group-begin (lambda (runner :optional proc)))
-    (test-runner-on-group-begin! (lambda (runner :optional proc)))
-    (test-runner-on-group-end (lambda (runner :optional proc)))
-    (test-runner-on-group-end! (lambda (runner :optional proc)))
-    (test-runner-on-bad-count (lambda (runner :optional proc)))
-    (test-runner-on-bad-count! (lambda (runner :optional proc)))
-    (test-runner-on-bad-end-name (lambda (runner :optional proc)))
-    (test-runner-on-bad-end-name! (lambda (runner :optional proc)))
-    (test-runner-on-final (lambda (runner :optional proc)))
-    (test-runner-on-final! (lambda (runner :optional proc)))
-    (test-runner-pass-count (lambda (runner)))
-    (test-runner-fail-count (lambda (runner)))
-    (test-runner-xpass-count (lambda (runner)))
-    (test-runner-skip-count (lambda (runner)))
-    (test-runner-test-name (lambda (runner)))
-    (test-runner-group-path (lambda (runner)))
-    (test-runner-group-stack (lambda (runner)))
-    (test-runner-aux-value (lambda (runner)))
-    (test-runner-aux-value! (lambda (runner)))
-    (test-runner-reset (lambda (runner)))
-    )
-
-   ()
-
-   ;; SRFI 66
-   ("Octet Vectors"
-    (make-u8vector (lambda (len n)))
-    (u8vector (lambda (n \.\.\.)))
-    (u8vector->list (lambda (u8vector)))
-    (list->u8vector (lambda (octet-list)))
-    (u8vector-length u8vector)
-    (u8vector-ref (lambda (u8vector k)))
-    (u8vector-set! (lambda (u8vector k n)))
-    (u8vector=? (lambda (u8vector-1 u8vector-2)))
-    (u8vector-compare (lambda (u8vector-1 u8vector-2)))
-    (u8vector-copy! (lambda (source source-start target target-start n)))
-    (u8vector-copy (lambda (u8vector)))
-    )
-
-   ;; SRFI 67
-   ("Compare Procedures"
-    )
-
-   ()
-
-   ;; SRFI 69
-   ("Basic hash tables"
-    (alist->hash-table (lambda (alist) hash-table))
-    (hash (lambda (obj :optional n) int))
-    (hash-by-identity (lambda (obj :optional n) int))
-    (hash-table->alist (lambda (hash-table) alist))
-    (hash-table-copy (lambda (hash-table) hash-table))
-    (hash-table-delete! (lambda (hash-table key) undefined))
-    (hash-table-equivalence-function (lambda (hash-table) pred))
-    (hash-table-exists? (lambda (hash-table key) bool))
-    (hash-table-fold (lambda (hash-table f init-value)))
-    (hash-table-hash-function (lambda (hash-table) f))
-    (hash-table-keys (lambda (hash-table) list))
-    (hash-table-merge! (lambda (hash-table1 hash-table2) undefined))
-    (hash-table-ref (lambda (hash-table key :optional thunk)))
-    (hash-table-ref/default (lambda (hash-table key default)))
-    (hash-table-remove! (lambda (hash-table proc) undefined))
-    (hash-table-set! (lambda (hash-table key value) undefined))
-    (hash-table-size (lambda (hash-table) n))
-    (hash-table-update! (lambda (hash-table key proc :optional thunk) undefined))
-    (hash-table-update!/default (lambda (hash-table key proc default) undefined))
-    (hash-table-values (lambda (hash-table) list))
-    (hash-table-walk (lambda (hash-table proc) undefined))
-    (hash-table? (lambda (obj) bool))
-    (make-hash-table (lambda (:optional eq-fn hash-fn) hash-table))
-    (string-ci-hash (lambda (str :optional n) n))
-    (string-hash (lambda (str1 :optional n) n))
-    )
-
-   ;; SRFI 70
-   ("Numbers"
-    )
-
-   ;; SRFI 71
-   ("LET-syntax for multiple values"
-    )
-
-   ;; SRFI 72
-   ("Simple hygienic macros"
-    )
-
-   ()
-
-   ;; SRFI 74
-   ("Octet-Addressed Binary Blocks"
-    )
-
-   ])
-
-(defvar *scheme-chicken-modules*
-  '((extras
-     (->string (lambda (obj) str))
-     (alist->hash-table (lambda (alist) hash-table))
-     (alist-ref (lambda (alist key :optional eq-fn default)))
-     (alist-update! (lambda (key value alist :optional eq-fn) undefined))
-     (atom? (lambda (obj) bool))
-     (binary-search (lambda (vec proc)))
-     (butlast (lambda (list) list) "drops the last element of list")
-     (call-with-input-string (lambda (string proc)))
-     (call-with-output-string (lambda (proc) str))
-     (chop (lambda (list k) list))
-     (complement (lambda (f) f2))
-     (compose (lambda (f1 f2 \.\.\.) f))
-     (compress (lambda (boolean-list list)))
-     (conc (lambda (obj \.\.\.)))
-     (conjoin (lambda (pred \.\.\.) pred))
-     (constantly (lambda (obj \.\.\.) f))
-     (disjoin (lambda (pred \.\.\.) pred))
-     (each (lambda (proc \.\.\.) proc))
-     (flatten (lambda (list1 \.\.\.) list))
-     (flip (lambda (proc) proc))
-     (format (lambda (format-string arg \.\.\.)))
-     (fprintf (lambda (port format-string arg \.\.\.)))
-     (hash (lambda (obj :optional n) int))
-     (hash-by-identity (lambda (obj :optional n) int))
-     (hash-table->alist (lambda (hash-table) alist))
-     (hash-table-copy (lambda (hash-table) hash-table))
-     (hash-table-delete! (lambda (hash-table key) undefined))
-     (hash-table-equivalence-function (lambda (hash-table) pred))
-     (hash-table-exists? (lambda (hash-table key) bool))
-     (hash-table-fold (lambda (hash-table f init-value)))
-     (hash-table-hash-function (lambda (hash-table) f))
-     (hash-table-keys (lambda (hash-table) list))
-     (hash-table-merge! (lambda (hash-table1 hash-table2) undefined))
-     (hash-table-ref (lambda (hash-table key :optional thunk)))
-     (hash-table-ref/default (lambda (hash-table key default)))
-     (hash-table-remove! (lambda (hash-table proc) undefined))
-     (hash-table-set! (lambda (hash-table key value) undefined))
-     (hash-table-size (lambda (hash-table) n))
-     (hash-table-update! (lambda (hash-table key proc :optional thunk) undefined))
-     (hash-table-update!/default (lambda (hash-table key proc default) undefined))
-     (hash-table-values (lambda (hash-table) list))
-     (hash-table-walk (lambda (hash-table proc) undefined))
-     (hash-table? (lambda (obj) bool))
-     (identity (lambda (obj)))
-     (intersperse (lambda (list obj) list))
-     (join (lambda (list-of-lists :optional list) list))
-     (list->queue (lambda (list) queue))
-     (list-of (lambda (pred)))
-     (make-hash-table (lambda (:optional eq-fn hash-fn size) hash-table))
-     (make-input-port (lambda (read-proc ready?-pred close-proc :optional peek-proc) input-port))
-     (make-output-port (lambda (write-proc close-proc :optional flush-proc) output-port))
-     (make-queue (lambda () queue))
-     (merge (lambda (list1 list2 less-fn) list))
-     (merge! (lambda (list1 list2 less-fn) list))
-     (noop (lambda (obj \.\.\.) undefined))
-     (pp (lambda (obj :optional output-port) undefined))
-     (pretty-print (lambda (obj :optional output-port) undefined))
-     (pretty-print-width (lambda (:optional new-width) n))
-     (printf (lambda (format-string arg \.\.\.) undefined))
-     (project (lambda (n) proc))
-     (queue->list (lambda (queue) list))
-     (queue-add! (lambda (queue obj) undefined))
-     (queue-empty? (lambda (queue) bool))
-     (queue-first (lambda (queue)))
-     (queue-last (lambda (queue)))
-     (queue-push-back! (lambda (queue obj) undefined))
-     (queue-push-back-list! (lambda (queue list) undefined))
-     (queue-remove! (lambda (queue) undefined))
-     (queue? (lambda (obj) bool))
-     (random (lambda (n) n))
-     (randomize (lambda (:optional x1) undefined))
-     (rassoc (lambda (key list :optional eq-fn)))
-     (read-file (lambda (:optional file-or-port reader-fn max-count) str))
-     (read-line (lambda (:optional port limit) str))
-     (read-lines (lambda (:optional port max) list))
-     (read-string (lambda (:optional n port) str))
-     (read-string! (lambda (n dest :optional port start) n))
-     (read-token (lambda (predicate :optional port) str))
-     (shuffle (lambda (list) list))
-     (sort (lambda ((or list vector) less-fn) (or list vector)))
-     (sort! (lambda ((or list vector) less-fn) (or list vector)))
-     (sorted? (lambda ((or list vector) less-fn) bool))
-     (sprintf (lambda (format-string arg \.\.\.) str))
-     (string-chomp (lambda (str :optional suffix-str) str))
-     (string-chop (lambda (str length) list))
-     (string-ci-hash (lambda (str :optional n) n))
-     (string-compare3 (lambda (str1 str2) n))
-     (string-compare3-ci (lambda (str1 str2) n))
-     (string-hash (lambda (str1 :optional n) n))
-     (string-intersperse (lambda (list :optional seperator-string) str))
-     (string-split (lambda (str :optional delimiter-str keep-empty?) list))
-     (string-translate (lambda (str from-str :optional to-str) str))
-     (string-translate* (lambda (str list) str))
-     (substring-ci=? (lambda (str1 str2 :optional start1 start2 length) str))
-     (substring-index (lambda (which-str where-str :optional start) i))
-     (substring-index-ci (lambda (which-str where-str :optional start) i))
-     (substring=? (lambda (str1 str2 :optional start1 start2 length) bool))
-     (tail? (lambda (obj list) bool))
-     (with-error-output-to-port (lambda (output-port thunk)))
-     (with-input-from-port (lambda (port thunk)))
-     (with-input-from-string (lambda (str thunk)))
-     (with-output-to-port (lambda (port thunk)))
-     (with-output-to-string (lambda (thunk) str))
-     (write-line (lambda (str :optional port) undefined))
-     (write-string (lambda (str :optional num port) undefined))
-     )
-    (lolevel
-     (address->pointer (lambda (n) ptr))
-     (align-to-word (lambda (ptr-or-int) ptr))
-     (allocate (lambda (size) block))
-     (block-ref (lambda (block index) int))
-     (block-set! (lambda (block index obj) undefined))
-     (byte-vector (lambda (n \.\.\.) byte-vector))
-     (byte-vector->list (lambda (byte-vector) list))
-     (byte-vector->string (lambda (byte-vector) string))
-     (byte-vector-fill! (lambda (byte-vector n) undefined))
-     (byte-vector-length (lambda (byte-vector) n))
-     (byte-vector-ref (lambda (byte-vector i) int))
-     (byte-vector-set! (lambda (byte-vector i n) undefined))
-     (byte-vector? (lambda (obj) bool))
-     (extend-procedure (lambda (proc x1) proc))
-     (extended-procedure? (lambda (proc) bool))
-     (free (lambda (pointer) undefined))
-     (global-bound? (lambda (sym) bool))
-     (global-make-unbound! (lambda (sym) undefined))
-     (global-ref (lambda (sym)))
-     (global-set! (lambda (sym val) undefined))
-     (list->byte-vector (lambda (list) byte-vector))
-     (locative->object (lambda (locative) obj))
-     (locative-ref (lambda (locative)))
-     (locative-set! (lambda (locative val) undefined))
-     (locative? (lambda (obj) bool))
-     (make-byte-vector (lambda (size :optional init-n) byte-vector))
-     (make-locative (lambda (obj :optional index) locative))
-     (make-record-instance (lambda (sym arg \.\.\.)))
-     (make-static-byte-vector (lambda (size :optional init-n)))
-     (make-weak-locative (lambda (obj :optional index) locative))
-     (move-memory! (lambda (from to :optional bytes from-offset to-offset) undefined))
-     (mutate-procedure (lambda (proc proc) proc))
-     (null-pointer (lambda () pointer))
-     (null-pointer? (lambda (pointer) bool))
-     (number-of-bytes (lambda (block) int))
-     (number-of-slots (lambda (block) int))
-     (object->pointer (lambda (obj) ptr))
-     (object-become! (lambda (alist) undefined))
-     (object-copy (lambda (obj)))
-     (object-evict (lambda (obj :optional allocator-proc)))
-     (object-evict-to-location (lambda (obj ptr :optional limit)))
-     (object-evicted? (lambda (obj) bool))
-     (object-release (lambda (obj :optional releaser-proc)))
-     (object-size (lambda (obj) int))
-     (object-unevict (lambda (obj :optional full)))
-     (pointer->address (lambda (ptr) n))
-     (pointer->object (lambda (ptr)))
-     (pointer-f32-ref (lambda (ptr) real))
-     (pointer-f32-set! (lambda (ptr x1) undefined))
-     (pointer-f64-ref (lambda (ptr) real))
-     (pointer-f64-set! (lambda (ptr x1) undefined))
-     (pointer-offset (lambda (ptr n) n))
-     (pointer-s16-ref (lambda (ptr) int))
-     (pointer-s16-set! (lambda (ptr n) undefined))
-     (pointer-s32-ref (lambda (ptr) int))
-     (pointer-s32-set! (lambda (ptr n) undefined))
-     (pointer-s8-ref (lambda (ptr) int))
-     (pointer-s8-set! (lambda (ptr n) undefined))
-     (pointer-tag (lambda (ptr) tag))
-     (pointer-u16-ref (lambda (ptr) int))
-     (pointer-u16-set! (lambda (ptr n) undefined))
-     (pointer-u32-ref (lambda (ptr) int))
-     (pointer-u32-set! (lambda (ptr n) undefined))
-     (pointer-u8-ref (lambda (ptr) int))
-     (pointer-u8-set! (lambda (ptr n) undefined))
-     (pointer=? (lambda (ptr1 ptr2) bool))
-     (pointer? (lambda (obj) bool))
-     (procedure-data (lambda (proc)))
-     (record->vector (lambda (block) vector))
-     (record-instance? (lambda (obj) bool))
-     (set-invalid-procedure-call-handler! (lambda (proc) undefined))
-     (set-procedure-data! (lambda (proc obj) undefined))
-     (static-byte-vector->pointer (lambda (byte-vector) pointer))
-     (string->byte-vector (lambda (str) byte-vector))
-     (tag-pointer (lambda (ptr tag)))
-     (tagged-pointer? (lambda (obj tag) bool))
-     (unbound-variable-value (lambda (:optional value)))
-     )
-    (posix
-     (_exit (lambda (:optional n) undefined))
-     (call-with-input-pipe (lambda (cmdline-string proc :optional mode)))
-     (call-with-output-pipe (lambda (cmdline-string proc :optional mode)))
-     (change-directory (lambda (dir)))
-     (change-file-mode (lambda (filename mode)))
-     (change-file-owner (lambda (filename user-n group-n)))
-     (close-input-pipe (lambda (input-port)))
-     (close-output-pipe (lambda (output-port)))
-     (create-directory (lambda (filename)))
-     (create-fifo (lambda (filename :optional mode)))
-     (create-pipe (lambda ()))
-     (create-session (lambda ()))
-     (create-symbolic-link (lambda (old-filename new-filename)))
-     (current-directory (lambda (:optional new-dir)))
-     (current-effective-group-id (lambda () int))
-     (current-effective-user-id (lambda () int))
-     (current-environment (lambda ()))
-     (current-group-id (lambda ()))
-     (current-process-id (lambda ()))
-     (current-user-id (lambda ()))
-     (delete-directory (lambda (dir)))
-     (directory (lambda (:optional dir show-dotfiles?) list))
-     (directory? (lambda (filename) bool))
-     (duplicate-fileno (lambda (old-n :optional new-n)))
-;;      (errno/acces integer)
-;;      (errno/again integer)
-;;      (errno/badf integer)
-;;      (errno/busy integer)
-;;      (errno/child integer)
-;;      (errno/exist integer)
-;;      (errno/fault integer)
-;;      (errno/intr integer)
-;;      (errno/inval integer)
-;;      (errno/io integer)
-;;      (errno/isdir integer)
-;;      (errno/mfile integer)
-;;      (errno/noent integer)
-;;      (errno/noexec integer)
-;;      (errno/nomem integer)
-;;      (errno/nospc integer)
-;;      (errno/notdir integer)
-;;      (errno/perm integer)
-;;      (errno/pipe integer)
-;;      (errno/rofs integer)
-;;      (errno/spipe integer)
-;;      (errno/srch integer)
-;;      (errno/wouldblock integer)
-     (fifo? (lambda (filename) bool))
-     (file-access-time (lambda (filename) real))
-     (file-change-time (lambda (filename) real))
-     (file-close (lambda (fileno)))
-     (file-execute-access? (lambda (filename) bool))
-     (file-link (lambda (old-filename new-filename)))
-     (file-lock (lambda (port :optional start len)))
-     (file-lock/blocking (lambda (port :optional start len)))
-     (file-mkstemp (lambda (template-filename)))
-     (file-modification-time (lambda (filename) real))
-     (file-open (lambda (filename (flags open-mode open/binary open/excl open/fsync open/noctty open/nonblock open/rdonly open/rdwr open/read open/sync open/text) :optional mode) fileno))
-     (file-owner (lambda (filename)))
-     (file-permissions (lambda (filename) int))
-     (file-position (lambda (port-or-fileno) int))
-     (file-read (lambda (fileno size :optional buffer-string)))
-     (file-read-access? (lambda (filename) bool))
-     (file-select (lambda (read-fd-list write-fd-list :optional timeout)))
-     (file-size (lambda (filename) int))
-     (file-stat (lambda (filename :optional follow-link?)))
-     (file-test-lock (lambda (port :optional start len)))
-     (file-truncate (lambda (filename-or-fileno offset)))
-     (file-unlock (lambda (lock)))
-     (file-write (lambda (fileno buffer-string :optional size)))
-     (file-write-access? (lambda (filename)))
-     (fileno/stderr integer)
-     (fileno/stdin integer)
-     (fileno/stdout integer)
-     (find-files (lambda (dir pred :optional action-proc identity limit)))
-     (get-groups (lambda ()))
-     (get-host-name (lambda ()))
-     (glob (lambda (pattern1 \.\.\.)))
-     (group-information (lambda (group-name-or-n)))
-     (initialize-groups (lambda (user-name base-group-n)))
-     (local-time->seconds (lambda (vector)))
-     (local-timezone-abbreviation (lambda ()))
-     (map-file-to-memory (lambda (address len protection flag fileno :optional offset)))
-     (memory-mapped-file-pointer (lambda (mmap)))
-     (memory-mapped-file? (lambda (obj)))
-     (open-input-file* (lambda (fileno :optional (flags open-mode open/binary open/excl open/fsync open/noctty open/nonblock open/rdonly open/rdwr open/read open/sync open/text))))
-     (open-input-pipe (lambda (cmdline-string :optional mode)))
-     (open-output-file* (lambda (fileno :optional (flags open-mode open/append open/binary open/creat open/excl open/fsync open/noctty open/nonblock open/rdwr open/sync open/text open/trunc open/write open/wronly))))
-     (open-output-pipe (lambda (cmdline-string :optional mode)))
-;;      (open/append integer)
-;;      (open/binary integer)
-;;      (open/creat integer)
-;;      (open/excl integer)
-;;      (open/fsync integer)
-;;      (open/noctty integer)
-;;      (open/nonblock integer)
-;;      (open/rdonly integer)
-;;      (open/rdwr integer)
-;;      (open/read integer)
-;;      (open/sync integer)
-;;      (open/text integer)
-;;      (open/trunc integer)
-;;      (open/write integer)
-;;      (open/wronly integer)
-     (parent-process-id (lambda ()))
-;;      (perm/irgrp integer)
-;;      (perm/iroth integer)
-;;      (perm/irusr integer)
-;;      (perm/irwxg integer)
-;;      (perm/irwxo integer)
-;;      (perm/irwxu integer)
-;;      (perm/isgid integer)
-;;      (perm/isuid integer)
-;;      (perm/isvtx integer)
-;;      (perm/iwgrp integer)
-;;      (perm/iwoth integer)
-;;      (perm/iwusr integer)
-;;      (perm/ixgrp integer)
-;;      (perm/ixoth integer)
-;;      (perm/ixusr integer)
-;;      (pipe/buf integer)
-     (port->fileno (lambda (port)))
-     (process (lambda (cmdline-string :optional arg-list env-list)))
-     (process-execute (lambda (filename :optional arg-list env-list)))
-     (process-fork (lambda (:optional thunk)))
-     (process-group-id (lambda ()))
-     (process-run (lambda (filename :optional list)))
-     (process-signal (lambda (pid :optional signal)))
-     (process-wait (lambda (:optional pid nohang?)))
-     (read-symbolic-link (lambda (filename) filename))
-     (regular-file? (lambda (filename)))
-     (seconds->local-time (lambda (seconds)))
-     (seconds->string (lambda (seconds)))
-     (seconds->utc-time (lambda (seconds)))
-     (set-alarm! (lambda (seconds)))
-     (set-buffering-mode! (lambda (port mode :optional buf-size)))
-     (set-file-position! (lambda (port-or-fileno pos :optional whence)))
-     (set-group-id! (lambda (n)))
-     (set-groups! (lambda (group-n-list)))
-     (set-process-group-id! (lambda (process-n n)))
-     (set-root-directory! (lambda (dir)) "chroot")
-     (set-signal-handler! (lambda (sig-n proc)))
-     (set-signal-mask! (lambda (sig-n-list)))
-     (set-user-id! (lambda (n)))
-     (setenv (lambda (name value-string)))
-;;      (signal/abrt integer)
-;;      (signal/alrm integer)
-;;      (signal/chld integer)
-;;      (signal/cont integer)
-;;      (signal/fpe integer)
-;;      (signal/hup integer)
-;;      (signal/ill integer)
-;;      (signal/int integer)
-;;      (signal/io integer)
-;;      (signal/kill integer)
-;;      (signal/pipe integer)
-;;      (signal/prof integer)
-;;      (signal/quit integer)
-;;      (signal/segv integer)
-;;      (signal/stop integer)
-;;      (signal/term integer)
-;;      (signal/trap integer)
-;;      (signal/tstp integer)
-;;      (signal/urg integer)
-;;      (signal/usr1 integer)
-;;      (signal/usr2 integer)
-;;      (signal/vtalrm integer)
-;;      (signal/winch integer)
-;;      (signal/xcpu integer)
-;;      (signal/xfsz integer)
-     (sleep (lambda (seconds)))
-     (symbolic-link? (lambda (filename)))
-     (system-information (lambda ()))
-     (terminal-name (lambda (port)))
-     (terminal-port? (lambda (port)))
-     (time->string (lambda (vector)))
-     (unmap-file-from-memory (lambda (mmap :optional len)))
-     (unsetenv (lambda (name) undefined))
-     (user-information (lambda ((or integer (string scheme-complete-user-name))) list))
-     (utc-time->seconds (lambda (vector)))
-     (with-input-from-pipe (lambda (cmdline-string thunk :optional mode)))
-     (with-output-to-pipe (lambda (cmdline-string thunk :optional mode)))
-     )
-    (regex
-     (glob->regexp (lambda (pattern)))
-     (glob? (lambda (obj)))
-     (grep (lambda (pattern list) list))
-     (regexp (lambda (pattern ignore-case? ignore-space? utf-8?)))
-     (regexp-escape (lambda (str) str))
-     (regexp? (lambda (obj) bool))
-     (string-match (lambda (pattern str :optional start)))
-     (string-match-positions (lambda (pattern str :optional start)))
-     (string-search (lambda (pattern str :optional start)))
-     (string-search-positions (lambda (pattern str :optional start)))
-     (string-split-fields (lambda (pattern str :optional mode start)))
-     (string-substitute (lambda (pattern subst str :optional mode)))
-     (string-substitute* (lambda (str subst-list :optional mode)))
-     )
-    (tcp
-     (tcp-abandon-port (lambda (port)))
-     (tcp-accept (lambda (listener)))
-     (tcp-accept-ready? (lambda (listener)))
-     (tcp-addresses (lambda (port)))
-     (tcp-buffer-size (lambda (:optional new-size)))
-     (tcp-close (lambda (listener)))
-     (tcp-connect (lambda ((string scheme-complete-host-name) :optional (string scheme-complete-port-name))))
-     (tcp-listen (lambda (tcp-port-n :optional backlog-n host-string)))
-     (tcp-listener-fileno (lambda (listener)))
-     (tcp-listener-port (lambda (listener)))
-     (tcp-listener? (lambda (obj)))
-     (tcp-port-numbers (lambda (port)))
-     )
-    (utils
-     (absolute-pathname? (lambda (pathname)))
-     (create-temporary-file (lambda (:optional ext-str)))
-     (decompose-pathname (lambda (pathname)))
-     (delete-file* (lambda (filename)))
-     (for-each-argv-line (lambda (proc) undefined))
-     (for-each-line (lambda (proc :optional input-port) undefined))
-     (make-absolute-pathname (lambda (dir filename :optional ext-str)))
-     (make-pathname (lambda (dir filename :optional ext-str)))
-     (pathname-directory (lambda (pathname)))
-     (pathname-extension (lambda (pathname)))
-     (pathname-file (lambda (pathname)))
-     (pathname-replace-directory (lambda (pathname dir)))
-     (pathname-replace-extension (lambda (pathname ext-str)))
-     (pathname-replace-file (lambda (pathname filename)))
-     (pathname-strip-directory (lambda (pathname)))
-     (pathname-strip-extension (lambda (pathname)))
-     (port-for-each (lambda (read-fn thunk) undefined))
-     (port-map (lambda (read-fn thunk)))
-     (read-all (lambda (:optional file-or-port)))
-     (shift! (lambda (list :optional default)))
-     (system* (lambda (format-string arg1 \.\.\.)))
-     (unshift! (lambda (obj pair)))
-     )
-    ))
-
-;; another big table - consider moving to a separate file
-(defvar *scheme-implementation-exports*
-  '((chicken
-     (abort (lambda (obj) undefined))
-     (add1 (lambda (z) z))
-     (andmap (lambda (pred list) bool))
-     (any? (lambda (obj) bool))
-     (argc+argv (lambda () (values n ptr)))
-     (argv (lambda () list))
-     (bit-set? (lambda (n index) bool))
-     (bitwise-and (lambda (n \.\.\.) n))
-     (bitwise-ior (lambda (n \.\.\.) n))
-     (bitwise-not (lambda (n \.\.\.) n))
-     (bitwise-xor (lambda (n \.\.\.) n))
-     (blob->string (lambda (blob) string))
-     (blob-size (lambda (blob) n))
-     (blob? (lambda (obj) bool))
-     (breakpoint (lambda (:optional name)))
-     (build-platform (lambda () symbol))
-     (c-runtime (lambda () symbol))
-     (call/cc (lambda (proc)))
-     (case-sensitive (lambda (:optional on?)))
-     (chicken-home (lambda () string))
-     (chicken-version (lambda () string))
-     (command-line-arguments (lambda () list))
-     (cond-expand (syntax))
-     (condition-predicate (lambda (kind) pred))
-     (condition-property-accessor (lambda (kind prop :optional err?) proc))
-     (condition? (lambda (obj) bool))
-     (continuation-capture (lambda (proc)))
-     (continuation-graft (lambda (continuation thunk)))
-     (continuation-return (lambda (continuation vals\.\.\.)))
-     (continuation? (lambda (obj) bool))
-     (copy-read-table (lambda (read-table) read-table))
-     (cpu-time (lambda () (values n n)))
-     (current-error-port (lambda () output-port))
-     (current-exception-handler (lambda () proc))
-     (current-gc-milliseconds (lambda () n))
-     (current-milliseconds (lambda () n))
-     (current-read-table (lambda () read-table))
-     (current-seconds (lambda () x1))
-     (define-reader-ctor (lambda (sym proc) undefined))
-     (delete-file (lambda (filename) undefined))
-     (disable-interrupts (lambda () undefined))
-     (dynamic-load-libraries (lambda () list))
-     (dynamic-wind (lambda (before-thunk thunk after-thunk)))
-     (enable-interrupts (lambda () undefined))
-     (enable-warnings (lambda () undefined))
-     (errno (lambda () n))
-     (error (lambda (error-string args \.\.\.) undefined))
-     (eval-handler (lambda () proc))
-     (exit (lambda (:optional n) undefined))
-     (exit-handler (lambda () proc))
-     (extension-info (lambda (proc)))
-     (extension-information (lambda (proc)))
-     (feature? (lambda (sym) bool))
-     (features (lambda () list))
-     (file-exists? (lambda (filename) bool))
-     (finite? (lambda (z) bool))
-     (fixnum? (lambda (obj) bool))
-     (flonum? (lambda (obj) bool))
-     (flush-output (lambda (:optional port) undefined))
-     (force (lambda (promise)))
-     (force-finalizers (lambda (f args \.\.\.)))
-     (fp* (lambda (x1 x2) x3))
-     (fp+ (lambda (x1 x2) x3))
-     (fp- (lambda (x1 x2) x3))
-     (fp/ (lambda (x1 x2) x3))
-     (fp< (lambda (x1 x2) x3))
-     (fp<= (lambda (x1 x2) x3))
-     (fp= (lambda (x1 x2) x3))
-     (fp> (lambda (x1 x2) x3))
-     (fp>= (lambda (x1 x2) x3))
-     (fpmax (lambda (x1 x2) x3))
-     (fpmin (lambda (x1 x2) x3))
-     (fpneg (lambda (x1 x2) x3))
-     (fx* (lambda (n1 n2) n))
-     (fx+ (lambda (n1 n2) n))
-     (fx- (lambda (n1 n2) n))
-     (fx/ (lambda (n1 n2) n))
-     (fx< (lambda (n1 n2) n))
-     (fx<= (lambda (n1 n2) n))
-     (fx= (lambda (n1 n2) n))
-     (fx> (lambda (n1 n2) n))
-     (fx>= (lambda (n1 n2) n))
-     (fxand (lambda (n1 n2) n))
-     (fxior (lambda (n1 n2) n))
-     (fxmax (lambda (n1 n2) n))
-     (fxmin (lambda (n1 n2) n))
-     (fxmod (lambda (n1 n2) n))
-     (fxneg (lambda (n1 n2) n))
-     (fxnot (lambda (n1 n2) n))
-     (fxshl (lambda (n1 n2) n))
-     (fxshr (lambda (n1 n2) n))
-     (fxxor (lambda (n1 n2) n))
-     (gc (lambda () n))
-     (gensym (lambda (:optional name) sym))
-     (get-call-chain (lambda (:optional n) list))
-     (get-keyword (lambda (sym list :optional default)))
-     (get-line-number (lambda (sexp) n))
-     (get-output-string (lambda (string-output-port) string))
-     (getenv (lambda (name) string))
-     (getter-with-setter (lambda (get-proc set-proc) proc))
-     (implicit-exit-handler (lambda (:optional proc) proc))
-     (invalid-procedure-call-handler (lambda (:optional proc) proc))
-     (keyword->string (lambda (sym) string))
-     (keyword-style (lambda (:optional sym) sym))
-     (keyword? (lambda (obj) bool))
-     (load-library (lambda (sym) undefined))
-     (load-noisily (lambda (string) undefined))
-     (load-relative (lambda (string) undefined))
-     (load-verbose (lambda (:optional bool) bool))
-     (machine-byte-order (lambda () sym))
-     (machine-type (lambda () sym))
-     (macro? (lambda (obj) bool))
-     (macroexpand (lambda (sexp) sexp))
-     (macroexpand-1 (lambda (sexp) sexp))
-     (make-blob (lambda (size) blob))
-     (make-composite-condition (lambda (condition \.\.\.) condition))
-     (make-parameter (lambda (val) proc))
-     (make-property-condition (lambda (kind \.\.\.) condition))
-     (match-error-control (lambda (:optional proc) proc))
-     (match-error-procedure (lambda (:optional proc) proc))
-     (memory-statistics (lambda () vector))
-     (on-exit (lambda (thunk) undefined))
-     (open-input-string (lambda (string) string-input-port))
-     (open-output-string (lambda () string-output-port))
-     (ormap (lambda (pred list \.\.\.) bool))
-     (port-name (lambda (:optional port) name))
-     (port-position (lambda (:optional port) n))
-     (port? (lambda (obj) bool))
-     (print (lambda (obj \.\.\.) undefined))
-     (print* (lambda (obj \.\.\.) undefined))
-     (print-backtrace (lambda (:optional n) undefined))
-     (print-call-chain (lambda (:optional n) undefined))
-     (print-error-message (lambda (err args \.\.\.) undefined))
-     (procedure-information (lambda (proc)))
-     (program-name (lambda (:optional name) name))
-     (provide (lambda (name)))
-     (provided? (lambda (name) bool))
-     (rational? (lambda (obj) bool))
-     (read-byte (lambda (:optional input-port) n))
-     (register-feature! (lambda (name) undefined))
-     (rename-file (lambda (old-name new-name) undefined))
-     (repl (lambda () undefined))
-     (repository-path (lambda (:optional dirname) dirname))
-     (require (lambda (sym \.\.\.) undefined))
-     (reset (lambda () undefined))
-     (reset-handler (lambda (:optional proc) proc))
-     (return-to-host (lambda () undefined))
-     (reverse-list->string (lambda (list) string))
-     (set-dynamic-load-mode! (lambda (obj) undefined))
-     (set-extension-specifier! (lambda (name proc) undefined))
-     (set-finalizer! (lambda (obj proc) undefined))
-     (set-gc-report! (lambda (bool) undefined))
-     (set-parameterized-read-syntax! (lambda (ch proc) undefined))
-     (set-port-name! (lambda (port name) undefined))
-     (set-read-syntax! (lambda (ch proc) undefined))
-     (set-sharp-read-syntax! (lambda (ch proc) undefined))
-     (setter (lambda (proc) proc))
-     (signal (lambda (n) undefined))
-     (signum (lambda (x1) x2))
-     (singlestep (lambda (thunk)))
-     (software-type (lambda () sym))
-     (software-version (lambda () sym))
-     (string->blob (lambda (string) blob))
-     (string->keyword (lambda (string) sym))
-     (string->uninterned-symbol (lambda (string) sym))
-     (string-copy (lambda (string) string))
-     (sub1 (lambda (z1) z2))
-     (syntax-error (lambda (args \.\.\.) undefined))
-     (system (lambda (str) n))
-     (test-feature? (lambda (obj) bool))
-     (undefine-macro! (lambda (sym) undefined))
-     (unregister-feature! (lambda (sym) undefined))
-     (use (special symbol scheme-chicken-available-modules)
-          "import extensions into top-level namespace")
-     (vector-copy! (lambda (from-vector to-vector :optional start) undefined))
-     (vector-resize (lambda (vec n :optional init)))
-     (void (lambda () undefined))
-     (warning (lambda (msg-str args \.\.\.) undefined))
-     (with-exception-handler (lambda (handler thunk)))
-     (write-byte (lambda (n :optional output-port) undefined))
-     )
-    (gauche
-     (E2BIG integer)
-     (EACCES integer)
-     (EADDRINUSE integer)
-     (EADDRNOTAVAIL integer)
-     (EADV integer)
-     (EAFNOSUPPORT integer)
-     (EAGAIN integer)
-     (EALREADY integer)
-     (EBADE integer)
-     (EBADF integer)
-     (EBADFD integer)
-     (EBADMSG integer)
-     (EBADR integer)
-     (EBADRQC integer)
-     (EBADSLT integer)
-     (EBFONT integer)
-     (EBUSY integer)
-     (ECANCELED integer)
-     (ECHILD integer)
-     (ECHRNG integer)
-     (ECOMM integer)
-     (ECONNABORTED integer)
-     (ECONNREFUSED integer)
-     (ECONNRESET integer)
-     (EDEADLK integer)
-     (EDEADLOCK integer)
-     (EDESTADDRREQ integer)
-     (EDOM integer)
-     (EDOTDOT integer)
-     (EDQUOT integer)
-     (EEXIST integer)
-     (EFAULT integer)
-     (EFBIG integer)
-     (EHOSTDOWN integer)
-     (EHOSTUNREACH integer)
-     (EIDRM integer)
-     (EILSEQ integer)
-     (EINPROGRESS integer)
-     (EINTR integer)
-     (EINVAL integer)
-     (EIO integer)
-     (EISCONN integer)
-     (EISDIR integer)
-     (EISNAM integer)
-     (EKEYEXPIRED integer)
-     (EKEYREJECTED integer)
-     (EKEYREVOKED integer)
-     (EL2HLT integer)
-     (EL2NSYNC integer)
-     (EL3HLT integer)
-     (EL3RST integer)
-     (ELIBACC integer)
-     (ELIBBAD integer)
-     (ELIBEXEC integer)
-     (ELIBMAX integer)
-     (ELIBSCN integer)
-     (ELNRNG integer)
-     (ELOOP integer)
-     (EMEDIUMTYPE integer)
-     (EMFILE integer)
-     (EMLINK integer)
-     (EMSGSIZE integer)
-     (EMULTIHOP integer)
-     (ENAMETOOLONG integer)
-     (ENAVAIL integer)
-     (ENETDOWN integer)
-     (ENETRESET integer)
-     (ENETUNREACH integer)
-     (ENFILE integer)
-     (ENOANO integer)
-     (ENOBUFS integer)
-     (ENOCSI integer)
-     (ENODATA integer)
-     (ENODEV integer)
-     (ENOENT integer)
-     (ENOEXEC integer)
-     (ENOKEY integer)
-     (ENOLCK integer)
-     (ENOLINK integer)
-     (ENOMEDIUM integer)
-     (ENOMEM integer)
-     (ENOMSG integer)
-     (ENONET integer)
-     (ENOPKG integer)
-     (ENOPROTOOPT integer)
-     (ENOSPC integer)
-     (ENOSR integer)
-     (ENOSTR integer)
-     (ENOSYS integer)
-     (ENOTBLK integer)
-     (ENOTCONN integer)
-     (ENOTDIR integer)
-     (ENOTEMPTY integer)
-     (ENOTNAM integer)
-     (ENOTSOCK integer)
-     (ENOTTY integer)
-     (ENOTUNIQ integer)
-     (ENXIO integer)
-     (EOPNOTSUPP integer)
-     (EOVERFLOW integer)
-     (EPERM integer)
-     (EPFNOSUPPORT integer)
-     (EPIPE integer)
-     (EPROTO integer)
-     (EPROTONOSUPPORT integer)
-     (EPROTOTYPE integer)
-     (ERANGE integer)
-     (EREMCHG integer)
-     (EREMOTE integer)
-     (EREMOTEIO integer)
-     (ERESTART integer)
-     (EROFS integer)
-     (ESHUTDOWN integer)
-     (ESOCKTNOSUPPORT integer)
-     (ESPIPE integer)
-     (ESRCH integer)
-     (ESRMNT integer)
-     (ESTALE integer)
-     (ESTRPIPE integer)
-     (ETIME integer)
-     (ETIMEDOUT integer)
-     (ETOOMANYREFS integer)
-     (ETXTBSY integer)
-     (EUCLEAN integer)
-     (EUNATCH integer)
-     (EUSERS integer)
-     (EWOULDBLOCK integer)
-     (EXDEV integer)
-     (EXFULL integer)
-     (F_OK integer)
-     (LC_ALL integer)
-     (LC_COLLATE integer)
-     (LC_CTYPE integer)
-     (LC_MONETARY integer)
-     (LC_NUMERIC integer)
-     (LC_TIME integer)
-     (RAND_MAX integer)
-     (R_OK integer)
-     (SEEK_CUR integer)
-     (SEEK_END integer)
-     (SEEK_SET integer)
-     (SIGABRT integer)
-     (SIGALRM integer)
-     (SIGBUS integer)
-     (SIGCHLD integer)
-     (SIGCONT integer)
-     (SIGFPE integer)
-     (SIGHUP integer)
-     (SIGILL integer)
-     (SIGINT integer)
-     (SIGIO integer)
-     (SIGIOT integer)
-     (SIGKILL integer)
-     (SIGPIPE integer)
-     (SIGPOLL integer)
-     (SIGPROF integer)
-     (SIGPWR integer)
-     (SIGQUIT integer)
-     (SIGSEGV integer)
-     (SIGSTKFLT integer)
-     (SIGSTOP integer)
-     (SIGTERM integer)
-     (SIGTRAP integer)
-     (SIGTSTP integer)
-     (SIGTTIN integer)
-     (SIGTTOU integer)
-     (SIGURG integer)
-     (SIGUSR1 integer)
-     (SIGUSR2 integer)
-     (SIGVTALRM integer)
-     (SIGWINCH integer)
-     (SIGXCPU integer)
-     (SIGXFSZ integer)
-     (SIG_BLOCK integer)
-     (SIG_SETMASK integer)
-     (SIG_UNBLOCK integer)
-     (W_OK integer)
-     (X_OK integer)
-     (acons (lambda (key value alist) alist))
-     (acosh (lambda (z) z))
-     (add-load-path (lambda (path) undefined))
-     (add-method! (lambda (generic method) undefined))
-     (all-modules (lambda () list))
-     (allocate-instance (lambda (class list)))
-     (and-let* (syntax))
-     (any (lambda (pred list)))
-     (any$ (lambda (pred) proc))
-     (any-pred (lambda (pred \.\.\.) pred))
-     (append! (lambda (list \.\.\.) list))
-     (apply$ (lambda (proc) proc))
-     (apply-generic (lambda (generic list)))
-     (apply-method (lambda (method list)))
-     (apply-methods (lambda (generic list list)))
-     (arity (lambda (proc) n))
-     (arity-at-least-value (lambda (n)))
-     (arity-at-least? (lambda (proc) bool))
-     (ash (lambda (n i) n))
-     (asinh (lambda (z) z))
-     (assoc$ (lambda (obj) proc))
-     (atanh (lambda (z) z))
-     (autoload (syntax))
-     (begin0 (syntax))
-     (bignum? (lambda (obj) bool))
-     (bit-field (lambda (n start end) n))
-     (byte-ready? (lambda (:optional input-port) bool))
-     (call-with-input-string (lambda (str proc)))
-     (call-with-output-string (lambda (proc) str))
-     (call-with-string-io (lambda (str proc) str))
-     (case-lambda (syntax))
-     (change-class (lambda (obj new-class)))
-     (change-object-class (lambda (obj orig-class new-class)))
-     (char->ucs (lambda (ch) int))
-     (char-set (lambda (ch \.\.\.) char-set))
-     (char-set-contains? (lambda (char-set ch) bool))
-     (char-set-copy (lambda (char-set) char-set))
-     (char-set? (lambda (obj) bool))
-     (check-arg (syntax))
-     (circular-list? (lambda (obj) bool))
-     (clamp (lambda (x1 :optional min-x max-x) x2))
-     (class-direct-methods (lambda (class) list))
-     (class-direct-slots (lambda (class) list))
-     (class-direct-subclasses (lambda (class) list))
-     (class-direct-supers (lambda (class) list))
-     (class-name (lambda (class) sym))
-     (class-of (lambda (obj) class))
-     (class-precedence-list (lambda (class) list))
-     (class-slot-accessor (lambda (class id) proc))
-     (class-slot-bound? (lambda (class id) bool))
-     (class-slot-definition (lambda (class id)))
-     (class-slot-ref (lambda (class slot)))
-     (class-slot-set! (lambda (class slot val) undefined))
-     (class-slots (lambda (class) list))
-     (closure-code (lambda (proc)))
-     (closure? (lambda (obj) bool))
-     (compare (lambda (obj1 obj2) n))
-     (complement (lambda (proc) proc))
-     (compose (lambda (proc \.\.\.) proc))
-     (compute-applicable-methods (lambda (generic list)))
-     (compute-cpl (lambda (generic list)))
-     (compute-get-n-set (lambda (class slot)))
-     (compute-slot-accessor (lambda (class slot)))
-     (compute-slots (lambda (class)))
-     (cond-expand (syntax))
-     (condition (syntax))
-     (condition-has-type? (lambda (condition obj)))
-     (condition-ref (lambda (condition id)))
-     (condition-type? (lambda (obj) bool))
-     (condition? (lambda (obj) bool))
-     (copy-bit (lambda (index n i) n))
-     (copy-bit-field (lambda (n start end from) n))
-     (copy-port (lambda (from-port to-port :optional unit-sym) undefined))
-     (cosh (lambda (z) z))
-     (count$ (lambda (pred) proc))
-     (current-class-of (lambda (obj) class))
-     (current-error-port (lambda () output-port))
-     (current-exception-handler (lambda () handler))
-     (current-load-history (lambda () list))
-     (current-load-next (lambda () list))
-     (current-load-port (lambda () port))
-     (current-module (lambda () env))
-     (current-thread (lambda () thread))
-     (current-time (lambda () time))
-     (cut (syntax))
-     (cute (lambda (args \.\.\.) proc))
-     (debug-print (lambda (obj)))
-     (debug-print-width (lambda () int))
-     (debug-source-info (lambda (obj)))
-     (dec! (syntax))
-     (decode-float (lambda (x1) vector))
-     (define-class (syntax))
-     (define-condition-type (syntax))
-     (define-constant (syntax))
-     (define-generic (syntax))
-     (define-in-module (syntax))
-     (define-inline (syntax))
-     (define-macro (syntax))
-     (define-method (syntax))
-     (define-module (syntax))
-     (define-reader-ctor (lambda (sym proc) undefined))
-     (define-values (syntax))
-     (delete$ (lambda (obj) proc))
-     (delete-keyword (lambda (id list) list))
-     (delete-keyword! (lambda (id list) list))
-     (delete-method! (lambda (generic method) undefined))
-     (digit->integer (lambda (ch) n))
-     (disasm (lambda (proc) undefined))
-     (dolist (syntax))
-     (dotimes (syntax))
-     (dotted-list? (lambda (obj) bool))
-     (dynamic-load (lambda (file)))
-     (eager (lambda (obj)))
-     (eq-hash (lambda (obj)))
-     (eqv-hash (lambda (obj)))
-     (error (lambda (msg-string args \.\.\.)))
-     (errorf (lambda (fmt-string args \.\.\.)))
-     (eval-when (syntax))
-     (every$ (lambda (pred) pred))
-     (every-pred (lambda (pred \.\.\.) pred))
-     (exit (lambda (:optional n) undefined))
-     (export (syntax))
-     (export-all (syntax))
-     (export-if-defined (syntax))
-     (extend (syntax))
-     (extract-condition (lambda (condition type)))
-     (file-exists? (lambda (filename) bool))
-     (file-is-directory? (lambda (filename) bool))
-     (file-is-regular? (lambda (filename) bool))
-     (filter$ (lambda (pred) proc))
-     (find (lambda (pred list)))
-     (find$ (lambda (pred) proc))
-     (find-module (lambda (id) env))
-     (find-tail$ (lambda (pred) proc))
-     (fixnum? (lambda (obj) bool))
-     (flonum? (lambda (obj) bool))
-     (fluid-let (syntax))
-     (flush (lambda (:optional output-port) undefined))
-     (flush-all-ports (lambda () undefined))
-     (fmod (lambda (x1 x2) x3))
-     (fold (lambda (proc init list)))
-     (fold$ (lambda (proc :optional init) proc))
-     (fold-right (lambda (proc init list)))
-     (fold-right$ (lambda (proc :optional init)))
-     (for-each$ (lambda (proc) (lambda (ls) undefined)))
-     (foreign-pointer-attribute-get (lambda (ptr attr)))
-     (foreign-pointer-attribute-set (lambda (ptr attr val)))
-     (foreign-pointer-attributes (lambda (ptr) list))
-     (format (lambda (fmt-string arg \.\.\.)))
-     (format/ss (lambda (fmt-string arg \.\.\.)))
-     (frexp (lambda (x1) x2))
-     (gauche-architecture (lambda () string))
-     (gauche-architecture-directory (lambda () string))
-     (gauche-character-encoding (lambda () symbol))
-     (gauche-dso-suffix (lambda () string))
-     (gauche-library-directory (lambda () string))
-     (gauche-site-architecture-directory (lambda () string))
-     (gauche-site-library-directory (lambda () string))
-     (gauche-version (lambda () string))
-     (gc (lambda () undefined))
-     (gc-stat (lambda () list))
-     (gensym (lambda (:optional name) symbol))
-     (get-keyword (lambda (id list :optional default)))
-     (get-keyword* (syntax))
-     (get-optional (syntax))
-     (get-output-string (lambda (string-output-port) string))
-     (get-remaining-input-string (lambda (port) string))
-     (get-signal-handler (lambda (n) proc))
-     (get-signal-handler-mask (lambda (n) n))
-     (get-signal-handlers (lambda () list))
-     (get-signal-pending-limit (lambda () n))
-     (getter-with-setter (lambda (get-proc set-proc) proc))
-     (global-variable-bound? (lambda (sym) bool))
-     (global-variable-ref (lambda (sym)))
-     (guard (syntax))
-     (has-setter? (lambda (proc) bool))
-     (hash (lambda (obj)))
-     (hash-table (lambda (id pair \.\.\.) hash-table))
-     (hash-table-delete! (lambda (hash-table key) undefined))
-     (hash-table-exists? (lambda (hash-table key) bool))
-     (hash-table-fold (lambda (hash-table proc init)))
-     (hash-table-for-each (lambda (hash-table proc) undefined))
-     (hash-table-get (lambda (hash-table key :optional default)))
-     (hash-table-keys (lambda (hash-table) list))
-     (hash-table-map (lambda (hash-table proc) list))
-     (hash-table-num-entries (lambda (hash-table) n))
-     (hash-table-pop! (lambda (hash-table key :optional default)))
-     (hash-table-push! (lambda (hash-table key value) undefined))
-     (hash-table-put! (lambda (hash-table key value) undefined))
-     (hash-table-stat (lambda (hash-table) list))
-     (hash-table-type (lambda (hash-table) id))
-     (hash-table-update! (lambda (hash-table key proc :optional default) undefined))
-     (hash-table-values (lambda (hash-table) list))
-     (hash-table? (lambda (obj) bool))
-     (identifier->symbol (lambda (obj) sym))
-     (identifier? (lambda (obj) bool))
-     (identity (lambda (obj)))
-     (import (syntax))
-     (inc! (syntax))
-     (inexact-/ (lambda (x1 x2) x3))
-     (initialize (lambda (obj)))
-     (instance-slot-ref (lambda (obj id)))
-     (instance-slot-set (lambda (obj id value)))
-     (integer->digit (lambda (n) ch))
-     (integer-length (lambda (n) n))
-     (is-a? (lambda (obj class) bool))
-     (keyword->string (lambda (id) string))
-     (keyword? (lambda (obj) bool))
-     (last-pair (lambda (pair) pair))
-     (lazy (syntax))
-     (ldexp (lambda (x1 n) x2))
-     (let-keywords* (syntax))
-     (let-optionals* (syntax))
-     (let/cc (syntax))
-     (let1 (syntax))
-     (library-exists? (lambda (filename) bool))
-     (library-fold (lambda (string proc init)))
-     (library-for-each (lambda (string proc) undefined))
-     (library-has-module? (lambda (filename id) bool))
-     (library-map (lambda (string proc) list))
-     (list* (lambda (obj \.\.\.) list))
-     (list-copy (lambda (list) list))
-     (logand (lambda (n \.\.\.) n))
-     (logbit? (lambda (index n) bool))
-     (logcount (lambda (n) n))
-     (logior (lambda (n \.\.\.) n))
-     (lognot (lambda (n) n))
-     (logtest (lambda (n \.\.\.) bool))
-     (logxor (lambda (n \.\.\.) n))
-     (macroexpand (lambda (obj)))
-     (macroexpand-1 (lambda (obj)))
-     (make (lambda (class args \.\.\.)))
-     (make-byte-string (lambda (n :optional int) byte-string))
-     (make-compound-condition (lambda (condition \.\.\.) condition))
-     (make-condition (lambda (condition-type field+value \.\.\.) condition))
-     (make-condition-type (lambda (id condition-type list) condition-type))
-     (make-hash-table (lambda (:optional id) hash-table))
-     (make-keyword (lambda (string) sym))
-     (make-list (lambda (n :optional init) list))
-     (make-module (lambda (id :optional if-exists-proc) env))
-     (make-weak-vector (lambda (n) vector))
-     (map$ (lambda (proc) proc))
-     (member$ (lambda (obj) proc))
-     (merge (lambda (list1 list2 proc) list))
-     (merge! (lambda (list1 list2 proc) list))
-     (method-more-specific? (lambda (method1 method2 list) bool))
-     (min&max (lambda (x1 \.\.\.) (values x2 x3)))
-     (modf (lambda (x1) x2))
-     (module-exports (lambda (env) list))
-     (module-imports (lambda (env) list))
-     (module-name (lambda (env) sym))
-     (module-name->path (lambda (sym) string))
-     (module-parents (lambda (env) list))
-     (module-precedence-list (lambda (env) list))
-     (module-table (lambda (env) hash-table))
-     (module? (lambda (obj) bool))
-     (null-list? (lambda (obj) bool))
-     (object-* (lambda (z \.\.\.) z))
-     (object-+ (lambda (z \.\.\.) z))
-     (object-- (lambda (z \.\.\.) z))
-     (object-/ (lambda (z \.\.\.) z))
-     (object-apply (lambda (proc arg \.\.\.)))
-     (object-compare (lambda (obj1 obj2) n))
-     (object-equal? (lambda (obj1 obj2) bool))
-     (object-hash (lambda (obj) n))
-     (open-coding-aware-port (lambda (input-port) input-port))
-     (open-input-buffered-port (lambda ()))
-     (open-input-fd-port (lambda (fileno) input-port))
-     (open-input-string (lambda (str) input-port))
-     (open-output-buffered-port (lambda ()))
-     (open-output-fd-port (lambda (fileno) output-port))
-     (open-output-string (lambda () string-output-port))
-     (pa$ (lambda (proc arg \.\.\.) proc))
-     (partition$ (lambda (pred) proc))
-     (path->module-name (lambda (str) sym))
-     (peek-byte (lambda (:optional input-port) n))
-     (pop! (syntax (list)))
-     (port->byte-string (lambda (input-port) byte-string))
-     (port->list (lambda (proc input-port) list))
-     (port->sexp-list (lambda (port) list))
-     (port->string (lambda (port) string))
-     (port->string-list (lambda (port) list))
-     (port-buffering (lambda (port) sym))
-     (port-closed? (lambda (port) bool))
-     (port-current-line (lambda (port) n))
-     (port-file-number (lambda (port) n))
-     (port-fold (lambda (proc init port)))
-     (port-fold-right (lambda (proc init port)))
-     (port-for-each (lambda (proc read-proc) undefined))
-     (port-map (lambda (proc read-proc)))
-     (port-name (lambda (port) name))
-     (port-position-prefix (lambda ()))
-     (port-seek (lambda (port offset (set int SEEK_SET SEEK_CUR SEEK_END))))
-     (port-tell (lambda (port) n))
-     (port-type (lambda (port) sym))
-     (print (lambda (obj \.\.\.)))
-     (procedure-arity-includes? (lambda (proc n) bool))
-     (procedure-info (lambda (proc)))
-     (profiler-reset (lambda () undefined))
-     (profiler-show (lambda () undefined))
-     (profiler-show-load-stats (lambda () undefined))
-     (profiler-start (lambda () undefined))
-     (profiler-stop (lambda () undefined))
-     (program (syntax))
-     (promise-kind (lambda ()))
-     (promise? (lambda (obj) bool))
-     (proper-list? (lambda (obj) bool))
-     (provide (lambda (str) undefined))
-     (provided? (lambda (str) bool))
-     (push! (syntax))
-     (quotient&remainder (lambda (n1 n2) (values n1 n2)))
-     (raise (lambda (exn) undefined))
-     (read-block (lambda (n :optional input-port) string))
-     (read-byte (lambda (:optional input-port) n))
-     (read-eval-print-loop (lambda () undefined))
-     (read-from-string (lambda (str)))
-     (read-line (lambda (:optional input-port) str))
-     (read-list (lambda (ch :optional input-port)))
-     (read-reference-has-value? (lambda ()))
-     (read-reference-value (lambda ()))
-     (read-reference? (lambda ()))
-     (read-with-shared-structure (lambda (:optional input-port)))
-     (read/ss (lambda (:optional input-port)))
-     (rec (syntax))
-     (receive (syntax))
-     (redefine-class! (lambda ()))
-     (reduce$ (lambda (proc :optional default) proc))
-     (reduce-right$ (lambda (proc :optional default) proc))
-     (ref (lambda (obj key \.\.\.)))
-     (ref* (lambda (obj key \.\.\.)))
-     (regexp->string (lambda (regexp) string))
-     (regexp-case-fold? (lambda (regexp) bool))
-     (regexp-compile (lambda (str) regexp))
-     (regexp-optimize (lambda (str) str))
-     (regexp-parse (lambda (str) list))
-     (regexp-quote (lambda (str) str))
-     (regexp-replace (lambda (regexp string subst) string))
-     (regexp-replace* (lambda (string regexp subst \.\.\.) string))
-     (regexp-replace-all (lambda (regexp string subst) string))
-     (regexp-replace-all* (lambda (string regexp subst \.\.\.)))
-     (regexp? (lambda (obj) bool))
-     (regmatch? (lambda (obj) bool))
-     (remove$ (lambda (pred) proc))
-     (report-error (lambda ()))
-     (require (syntax))
-     (require-extension (syntax))
-     (reverse! (lambda (list) list))
-     (rxmatch (lambda (regexp string) regmatch))
-     (rxmatch-after (lambda (regmatch :optional i) str))
-     (rxmatch-before (lambda (regmatch :optional i) str))
-     (rxmatch-case (syntax))
-     (rxmatch-cond (syntax))
-     (rxmatch-end (lambda (regmatch :optional i) n))
-     (rxmatch-if (syntax))
-     (rxmatch-let (syntax))
-     (rxmatch-num-matches (lambda (regmatch) i))
-     (rxmatch-start (lambda (regmatch :optional i) n))
-     (rxmatch-substring (lambda (regmatch :optional i) str))
-     (seconds->time (lambda (x1) time))
-     (select-module (syntax))
-     (set!-values (syntax))
-     (set-signal-handler! (lambda (signals handler) undefined))
-     (set-signal-pending-limit (lambda (n) undefined))
-     (setter (lambda (proc) proc))
-     (sinh (lambda (z) z))
-     (slot-bound-using-accessor? (lambda (proc obj id) bool))
-     (slot-bound-using-class? (lambda (class obj id) bool))
-     (slot-bound? (lambda (obj id) bool))
-     (slot-definition-accessor (lambda ()))
-     (slot-definition-allocation (lambda ()))
-     (slot-definition-getter (lambda ()))
-     (slot-definition-name (lambda ()))
-     (slot-definition-option (lambda ()))
-     (slot-definition-options (lambda ()))
-     (slot-definition-setter (lambda ()))
-     (slot-exists-using-class? (lambda (class obj id) bool))
-     (slot-exists? (lambda (obj id) bool))
-     (slot-initialize-using-accessor! (lambda ()))
-     (slot-missing (lambda (class obj id)))
-     (slot-push! (lambda (obj id value) undefined))
-     (slot-ref (lambda (obj id)))
-     (slot-ref-using-accessor (lambda (proc obj id)))
-     (slot-ref-using-class (lambda (class obj id)))
-     (slot-set! (lambda (obj id value) undefined))
-     (slot-set-using-accessor! (lambda (proc obj id value) undefined))
-     (slot-set-using-class! (lambda (class obj id value) undefined))
-     (slot-unbound (lambda (class obj id)))
-     (sort (lambda (seq :optional proc)))
-     (sort! (lambda (seq :optional proc)))
-     (sort-applicable-methods (lambda ()))
-     (sorted? (lambda (seq :optional proc)))
-     (split-at (lambda (list i) (values list list)))
-     (stable-sort (lambda (seq :optional proc)))
-     (stable-sort! (lambda (seq :optional proc)))
-     (standard-error-port (lambda () output-port))
-     (standard-input-port (lambda () input-port))
-     (standard-output-port (lambda () output-port))
-     (string->regexp (lambda (str) regexp))
-     (string-byte-ref (lambda (str i) n))
-     (string-byte-set! (lambda (str i n) undefined))
-     (string-complete->incomplete (lambda (str) str))
-     (string-immutable? (lambda (str) bool))
-     (string-incomplete->complete (lambda (str) str))
-     (string-incomplete->complete! (lambda (str) str))
-     (string-incomplete? (lambda (str) bool))
-     (string-interpolate (lambda (str) list))
-     (string-join (lambda (list :optional delim-str (set grammar infix strict-infix prefix suffix))))
-;; deprecated
-;;      (string-pointer-byte-index (lambda ()))
-;;      (string-pointer-copy (lambda ()))
-;;      (string-pointer-index (lambda ()))
-;;      (string-pointer-next! (lambda ()))
-;;      (string-pointer-prev! (lambda ()))
-;;      (string-pointer-ref (lambda ()))
-;;      (string-pointer-set! (lambda ()))
-;;      (string-pointer-substring (lambda ()))
-;;      (string-pointer? (lambda ()))
-     (string-scan (lambda (string item :optional (set return index before after before* after* both))))
-     (string-size (lambda (str) n))
-     (string-split (lambda (str splitter) list))
-     (string-substitute! (lambda ()))
-     (subr? (lambda (obj) bool))
-     (supported-character-encoding? (lambda (id) bool))
-     (supported-character-encodings (lambda () list))
-     (symbol-bound? (lambda (id) bool))
-     (syntax-error (syntax))
-     (syntax-errorf (syntax))
-     (sys-abort (lambda () undefined))
-     (sys-access (lambda (filename (flags amode R_OK W_OK X_OK F_OK))))
-     (sys-alarm (lambda (x1) x2))
-     (sys-asctime (lambda (time) str))
-     (sys-basename (lambda (filename) str))
-     (sys-chdir (lambda (dirname)))
-     (sys-chmod (lambda (filename n)))
-     (sys-chown (lambda (filename uid gid)))
-     (sys-close (lambda (fileno)))
-     (sys-crypt (lambda (key-str salt-str) str))
-     (sys-ctermid (lambda () string))
-     (sys-ctime (lambda (time) string))
-     (sys-difftime (lambda (time1 time2) x1))
-     (sys-dirname (lambda (filename) string))
-     (sys-exec (lambda (command-string list) n))
-     (sys-exit (lambda (n) undefined))
-     (sys-fchmod (lambda (port-or-fileno n)))
-     (sys-fdset-max-fd (lambda (fdset)))
-     (sys-fdset-ref (lambda (fdset port-or-fileno)))
-     (sys-fdset-set! (lambda (fdset port-or-fileno)))
-     (sys-fork (lambda () n))
-     (sys-fork-and-exec (lambda (command-string list) n))
-     (sys-fstat (lambda (port-or-fileno) sys-stat))
-     (sys-ftruncate (lambda (port-or-fileno n)))
-     (sys-getcwd (lambda () string))
-     (sys-getdomainname (lambda () string))
-     (sys-getegid (lambda () gid))
-     (sys-getenv (lambda (name) string))
-     (sys-geteuid (lambda () uid))
-     (sys-getgid (lambda () gid))
-     (sys-getgrgid (lambda () gid))
-     (sys-getgrnam (lambda (name)))
-     (sys-getgroups (lambda () list))
-     (sys-gethostname (lambda () string))
-     (sys-getloadavg (lambda () list))
-     (sys-getlogin (lambda () string))
-     (sys-getpgid (lambda () gid))
-     (sys-getpgrp (lambda () gid))
-     (sys-getpid (lambda () pid))
-     (sys-getppid (lambda () pid))
-     (sys-getpwnam (lambda (name)))
-     (sys-getpwuid (lambda () uid))
-     (sys-gettimeofday (lambda () (values x1 x2)))
-     (sys-getuid (lambda () uid))
-     (sys-gid->group-name (lambda (gid) name))
-     (sys-glob (lambda (string) list))
-     (sys-gmtime (lambda (time) string))
-     (sys-group-name->gid (lambda (name) gid))
-     (sys-isatty (lambda (port-or-fileno) bool))
-     (sys-kill (lambda (pid)))
-     (sys-lchown (lambda (filename uid gid)))
-     (sys-link (lambda (old-filename new-filename)))
-     (sys-localeconv (lambda () alist))
-     (sys-localtime (lambda (time) string))
-     (sys-lstat (lambda (filename) sys-stat))
-     (sys-mkdir (lambda (dirname)))
-     (sys-mkfifo (lambda (filename)))
-     (sys-mkstemp (lambda (filename)))
-     (sys-mktime (lambda (time) x1))
-     (sys-nanosleep (lambda (x1)))
-     (sys-normalize-pathname (lambda (filename) string))
-     (sys-pause (lambda (x1)))
-     (sys-pipe (lambda (:optional buffering) (values input-port output-port)))
-     (sys-putenv (lambda (name string)))
-     (sys-random (lambda () n))
-     (sys-readdir (lambda (dirname) list))
-     (sys-readlink (lambda (filename) string))
-     (sys-realpath (lambda (filename) string))
-     (sys-remove (lambda (filename)))
-     (sys-rename (lambda (old-filename new-filename)))
-     (sys-rmdir (lambda (dirname)))
-     (sys-select (lambda (read-filenos write-filenos execpt-filenos :optional timeout-x)))
-     (sys-select! (lambda (read-filenos write-filenos execpt-filenos :optional timeout-x)))
-     (sys-setenv (lambda (name string)))
-     (sys-setgid (lambda (gid)))
-     (sys-setlocale (lambda (locale-string)))
-     (sys-setpgid (lambda (gid)))
-     (sys-setsid (lambda ()))
-     (sys-setuid (lambda (uid)))
-     (sys-sigmask (lambda ((set how SIG_SETMASK SIG_BLOCK SIG_UNBLOCK) sigset)))
-     (sys-signal-name (lambda (n)))
-     (sys-sigset (lambda (n \.\.\.) sigset))
-     (sys-sigset-add! (lambda (sigset n)))
-     (sys-sigset-delete! (lambda (sigset n)))
-     (sys-sigset-empty! (lambda (sigset)))
-     (sys-sigset-fill! (lambda (sigset)))
-     (sys-sigsuspend (lambda (sigset)))
-     (sys-sigwait (lambda (sigset)))
-     (sys-sleep (lambda (x1)))
-     (sys-srandom (lambda (n)))
-     (sys-stat (lambda (filename)))
-;; deprecated
-;;      (sys-stat->atime (lambda ()))
-;;      (sys-stat->ctime (lambda ()))
-;;      (sys-stat->dev (lambda ()))
-;;      (sys-stat->file-type (lambda ()))
-;;      (sys-stat->gid (lambda ()))
-;;      (sys-stat->ino (lambda ()))
-;;      (sys-stat->mode (lambda ()))
-;;      (sys-stat->mtime (lambda ()))
-;;      (sys-stat->nlink (lambda ()))
-;;      (sys-stat->rdev (lambda ()))
-;;      (sys-stat->size (lambda ()))
-;;      (sys-stat->type (lambda ()))
-;;      (sys-stat->uid (lambda ()))
-     (sys-strerror (lambda (errno) string))
-     (sys-strftime (lambda (format-string time)))
-     (sys-symlink (lambda (old-filename new-filename)))
-     (sys-system (lambda (command) n))
-     (sys-time (lambda () n))
-     (sys-times (lambda () list))
-;;      (sys-tm->alist (lambda ()))
-     (sys-tmpnam (lambda () string))
-     (sys-truncate (lambda (filename n)))
-     (sys-ttyname (lambda (port-or-fileno) string))
-     (sys-uid->user-name (lambda (uid) name))
-     (sys-umask (lambda () n))
-     (sys-uname (lambda () string))
-     (sys-unlink (lambda (filename)))
-     (sys-unsetenv (lambda (name)))
-     (sys-user-name->uid (lambda (name) uid))
-     (sys-utime (lambda (filename)))
-     (sys-wait (lambda ()))
-     (sys-wait-exit-status (lambda (n) n))
-     (sys-wait-exited? (lambda (n) bool))
-     (sys-wait-signaled? (lambda (n) bool))
-     (sys-wait-stopped? (lambda (n) bool))
-     (sys-wait-stopsig (lambda (n) n))
-     (sys-wait-termsig (lambda (n) n))
-     (sys-waitpid (lambda (pid)))
-     (tanh (lambda (z) z))
-     (time (syntax))
-     (time->seconds (lambda (time) x1))
-     (time? (lambda (obj) bool))
-     (toplevel-closure? (lambda (obj) bool))
-     (touch-instance! (lambda ()))
-     (ucs->char (lambda (n) ch))
-     (undefined (lambda () undefined))
-     (undefined? (lambda (obj) bool))
-     (unless (syntax))
-     (until (syntax))
-     (unwrap-syntax (lambda (obj)))
-     (update! (syntax))
-     (update-direct-method! (lambda ()))
-     (update-direct-subclass! (lambda ()))
-     (use (special symbol scheme-gauche-available-modules))
-     (use-version (syntax))
-     (values-ref (syntax))
-     (vector-copy (lambda (vector :optional start end fill) vector))
-     (vm-dump (lambda () undefined))
-     (vm-get-stack-trace (lambda () undefined))
-     (vm-get-stack-trace-lite (lambda () undefined))
-     (vm-set-default-exception-handler (lambda (handler) undefined))
-     (warn (lambda (message-str args) undefined))
-     (weak-vector-length (lambda (vector) n))
-     (weak-vector-ref (lambda (vector i)))
-     (weak-vector-set! (lambda (vector i value) undefined))
-     (when (syntax))
-     (while (syntax))
-     (with-error-handler (lambda (handler thunk)))
-     (with-error-to-port (lambda (port thunk)))
-     (with-exception-handler (lambda (handler thunk)))
-     (with-input-from-port (lambda (port thunk)))
-     (with-input-from-string (lambda (string thunk)))
-     (with-module (syntax))
-     (with-output-to-port (lambda (port thunk)))
-     (with-output-to-string (lambda (thunk) string))
-     (with-port-locking (lambda (port thunk)))
-     (with-ports (lambda (input-port output-port error-port thunk)))
-     (with-signal-handlers (syntax))
-     (with-string-io (lambda (string thunk) string))
-     (write* (lambda (obj :optional output-port) undefined))
-     (write-byte (lambda (n :optional output-port) undefined))
-     (write-limited (lambda (obj :optional output-port)))
-     (write-object (lambda (obj output-port)))
-     (write-to-string (lambda (obj) string))
-     (write-with-shared-structure (lambda (obj :optional output-port)))
-     (write/ss (lambda (obj :optional output-port)))
-     (x->integer (lambda (obj) integer))
-     (x->number (lambda (obj) number))
-     (x->string (lambda (obj) string))
-     )))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; special lookups (XXXX add more impls, try to abstract better)
-
-(defvar *scheme-chicken-base-repo*
-  (or (getenv "CHICKEN_REPOSITORY")
-      (let ((dir
-             (car (remove-if-not #'file-directory-p
-                                 '("/usr/lib/chicken"
-                                   "/usr/local/lib/chicken"
-                                   "/opt/lib/chicken"
-                                   "/opt/local/lib/chicken"
-                                   )))))
-        (and dir
-             (car (reverse (sort (directory-files dir t "^[0-9]+$")
-                                 #'string-lessp)))))
-      (and (fboundp 'shell-command-to-string)
-           (let* ((res (shell-command-to-string
-                        "csi -e '(print (repository-path))'"))
-                  (res (substring res 0 (- (length res) 1))))
-             (and res (file-directory-p res) res)))
-      "/usr/local/lib/chicken"))
-
-(defvar *scheme-chicken-repo-dirs*
-  (remove-if-not
-   #'(lambda (x) (and (stringp x) (not (equal x ""))))
-   (let ((home (getenv "CHICKEN_HOME")))
-     (if (and home (not (equal home "")))
-         (let ((res (split-string home ";"))) ;
-           (if (member *scheme-chicken-base-repo* res)
-               res
-             (cons *scheme-chicken-repo-dirs* res))) 
-       (list *scheme-chicken-base-repo*)))))
-
-(defun scheme-chicken-available-modules (&optional sym)
-  (append
-   (mapcar #'symbol-name (mapcar #'car *scheme-chicken-modules*))
-   (mapcar
-    #'file-name-sans-extension
-    (directory-files "." nil ".*\\.scm$" t))
-   (scheme-append-map
-    #'(lambda (dir)
-        (mapcar
-         #'file-name-sans-extension
-         (directory-files dir nil ".*\\.\\(so\\|scm\\)$" t)))
-    *scheme-chicken-repo-dirs*)))
-
-(defvar *scheme-gauche-repo-path*
-  (or (car (remove-if-not #'file-directory-p
-                          '("/usr/share/gauche"
-                            "/usr/local/share/gauche"
-                            "/opt/share/gauche"
-                            "/opt/local/share/gauche")))
-      (and (fboundp 'shell-command-to-string)
-           (let* ((res (shell-command-to-string "gauche-config --syslibdir"))
-                  (res (substring res 0 (- (length res) 1))))
-             (and res (file-directory-p res)
-                  (let* ((dir (file-name-directory res))
-                         (dir2 (file-name-directory
-                                (substring dir 0 (- (length dir) 1)))))
-                    (substring dir2 0 (- (length dir2) 1))))))
-      "/usr/local/share/gauche"))
-
-(defvar *scheme-gauche-site-repo-path*
-  (concat *scheme-gauche-repo-path* "/site/lib"))
-
-(defun scheme-gauche-available-modules (&optional sym)
-  (let ((version-dir
-         (concat
-          (car (directory-files *scheme-gauche-repo-path* t "^[0-9]"))
-          "/lib"))
-        (site-dir *scheme-gauche-site-repo-path*)
-        (other-dirs
-         (remove-if-not
-          #'(lambda (d) (and (not (equal d "")) (file-directory-p d)))
-          (split-string (or (getenv "GAUCHE_LOAD_PATH") "") ":"))))
-    (mapcar
-     #'(lambda (f) (subst-char-in-string ?/ ?. f))
-     (mapcar
-      #'file-name-sans-extension
-      (scheme-append-map
-       #'(lambda (dir)
-           (let ((len (length dir)))
-             (mapcar #'(lambda (f) (substring f (+ 1 len)))
-                     (scheme-directory-tree-files dir t "\\.scm"))))
-       (cons version-dir (cons site-dir other-dirs)))))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; utilities
-
-(defun scheme-append-map (proc init-ls)
-  (if (null init-ls)
-      '()
-    (let* ((ls (reverse init-ls))
-           (res (funcall proc (pop ls))))
-      (while (consp ls)
-        (setq res (append (funcall proc (pop ls)) res)))
-      res)))
-
-(defun scheme-flatten (ls)
-  (cond
-   ((consp ls) (cons (car ls) (scheme-flatten (cdr ls))))
-   ((null ls) '())
-   (t (list ls))))
-
-(defun scheme-in-string-p ()
-  (let ((orig (point)))
-    (save-excursion
-      (goto-char (point-min))
-      (let ((parses (parse-partial-sexp (point) orig)))
-        (nth 3 parses)))))
-
-(defun scheme-beginning-of-sexp ()
-  (let ((syn (char-syntax (char-before (point)))))
-    (if (or (eq syn ?\()
-	    (and (eq syn ?\") (scheme-in-string-p)))
-	(forward-char -1)
-      (forward-sexp -1))))
-
-(defun scheme-find-file-in-path (file path)
-  (car (remove-if-not
-        #'(lambda (dir) (file-exists-p (concat dir "/" file)))
-        path)))
-
-;; visit a file and kill the buffer only if it wasn't already open
-(defmacro scheme-with-find-file (path-expr &rest body)
-  (let ((path (gensym "path"))
-        (buf (gensym "buf"))
-        (res (gensym "res")))
-    `(save-window-excursion
-       (let* ((,path (file-truename ,path-expr))
-              (,buf (find-if
-                     #'(lambda (x)
-                         (let ((buf-file (buffer-file-name x)))
-                           (and buf-file
-                                (equal ,path (file-truename buf-file)))))
-                     (buffer-list))))
-         (if ,buf
-             (switch-to-buffer ,buf)
-           (switch-to-buffer (find-file-noselect ,path t)))
-         (let ((,res (save-excursion ,@body)))
-           (unless ,buf (kill-buffer (current-buffer)))
-           ,res)))))
-
-(defun scheme-directory-tree-files (init-dir &optional full match)
-  (let ((res '())
-        (stack (list init-dir)))
-    (while (consp stack)
-      (let* ((dir (pop stack))
-             (files (cddr (directory-files dir full))))
-        (setq res (append (if match
-                              (remove-if-not
-                               #'(lambda (f) (string-match match f))
-                               files)
-                            files)
-                          res))
-        (setq stack
-              (append
-               (remove-if-not 'file-directory-p
-                              (if full
-                                  files
-                                (mapcar #'(lambda (f) (concat dir "/" f))
-                                        files)))
-               stack))))
-    res))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; sexp manipulation
-
-;; returns current argument position within sexp
-(defun scheme-beginning-of-current-sexp-operator ()
-  (let ((pos 0))
-    (skip-syntax-backward "w_")
-    (while (and (not (bobp)) (not (eq ?\( (char-before))))
-      (scheme-beginning-of-sexp)
-      (incf pos))
-    pos))
-
-(defun scheme-beginning-of-next-sexp ()
-  (forward-sexp 2)
-  (backward-sexp 1))
-
-(defun scheme-beginning-of-string ()
-  (interactive)
-  (search-backward "\"" nil t)
-  (while (and (> (point) (point-min)) (eq ?\\ (char-before)))
-    (search-backward "\"" nil t)))
-
-;; for the enclosing sexp, returns a cons of the leading symbol (if
-;; any) and the current position within the sexp (starting at 0)
-;; (defun scheme-enclosing-sexp-prefix ()
-;;   (save-excursion
-;;     (let ((pos (scheme-beginning-of-current-sexp-operator)))
-;;       (cons (scheme-symbol-at-point) pos))))
-
-(defun scheme-enclosing-2-sexp-prefixes ()
-  (save-excursion
-    (let* ((pos1 (scheme-beginning-of-current-sexp-operator))
-           (sym1 (scheme-symbol-at-point)))
-      (backward-char)
-      (or
-       (ignore-errors
-         (let ((pos2 (scheme-beginning-of-current-sexp-operator)))
-           (list sym1 pos1 (scheme-symbol-at-point) pos2)))
-       (list sym1 pos1 nil 0)))))
-
-;; sexp-at-point is always fragile, both because the user can input
-;; incomplete sexps and because some scheme sexps are not valid elisp
-;; sexps.  this is one of the few places we use it, so we're careful
-;; to wrap it in ignore-errors.
-(defun scheme-nth-sexp-at-point (n)
-  (ignore-errors
-    (save-excursion
-      (forward-sexp (+ n 1))
-      (let ((end (point)))
-        (forward-sexp -1)
-        (car (read-from-string (buffer-substring (point) end)))))))
-
-(defun scheme-symbol-at-point ()
-  (save-excursion
-    (skip-syntax-backward "w_")
-    (let ((start (point)))
-      (skip-syntax-forward "w_")
-      (and (< start (point))
-           (intern (buffer-substring start (point)))))))
-
-(defun scheme-goto-next-top-level ()
-  (let ((here (point)))
-    (or (ignore-errors (end-of-defun) (end-of-defun)
-                       (beginning-of-defun)
-                       (< here (point)))
-        (progn (forward-char)
-               (and (re-search-forward "^(" nil t)
-                    (progn (backward-char 1) t)))
-        (goto-char (point-max)))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; variable extraction
-
-(defun scheme-sexp-type-at-point (&optional env)
-  (case (char-syntax (char-after))
-    ((?\()
-     (forward-char 1)
-     (if (eq ?w (char-syntax (char-after)))
-         (let ((op (scheme-symbol-at-point)))
-           (cond
-            ((eq op 'lambda)
-             (let ((params
-                    (scheme-nth-sexp-at-point 1)))
-               `(lambda ,params)))
-            (t
-             (let ((spec (scheme-env-lookup env op)))
-               (and spec
-                    (consp (cadr spec))
-                    (eq 'lambda (caadr spec))
-                    (cddadr spec)
-                    (car (cddadr spec)))))))
-       nil))
-    ((?\")
-     'string)
-    ((?\w)
-     (if (string-match "[0-9]" (string (char-after)))
-         'number
-       nil))
-    (t
-     nil)))
-
-(defun scheme-let-vars-at-point (&optional env)
-  (let ((end (or (ignore-errors
-                   (save-excursion (forward-sexp) (point)))
-                 (point-min)))
-        (vars '()))
-    (forward-char 1)
-    (while (< (point) end)
-      (when (eq ?\( (char-after))
-        (save-excursion
-          (forward-char 1)
-          (if (eq ?w (char-syntax (char-after)))
-              (let* ((sym (scheme-symbol-at-point))
-                     (type (ignore-errors
-                             (scheme-beginning-of-next-sexp)
-                             (scheme-sexp-type-at-point env))))
-                (push (if type (list sym type) (list sym)) vars)))))
-      (unless (ignore-errors (let ((here (point)))
-                               (scheme-beginning-of-next-sexp)
-                               (> (point) here)))
-        (goto-char end)))
-    (reverse vars)))
-
-(defun scheme-extract-match-clause-vars (x)
-  (cond
-   ((null x) '())
-   ((symbolp x)
-    (if (memq x '(_ ___ \.\.\.))
-        '()
-      (list (list x))))
-   ((consp x)
-    (case (car x)
-      ((or not)
-       (scheme-extract-match-clause-vars (cdr x)))
-      ((and)
-       (if (and (consp (cdr x))
-                (consp (cddr x))
-                (symbolp (cadr x))
-                (consp (caddr x))
-                (not (memq (caaddr x)
-                           '(= $ @ ? and or not quote quasiquote get! set!))))
-           (cons (list (cadr x) (if (listp (caddr x)) 'list 'pair))
-                 (scheme-extract-match-clause-vars (cddr x)))
-         (scheme-extract-match-clause-vars (cddr x))))
-      ((= $ @)
-       (if (consp (cdr x)) (scheme-extract-match-clause-vars (cddr x)) '()))
-      ((\? ? ) ; XXXX this is a hack, the lone ? gets read as a char (space)
-       (if (and (consp (cdr x))
-                (consp (cddr x))
-                (symbolp (cadr x))
-                (symbolp (caddr x)))
-           (cons (list (caddr x) (scheme-predicate->type (cadr x)))
-                 (scheme-extract-match-clause-vars (cdddr x)))
-         (scheme-extract-match-clause-vars (cddr x))))
-      ((get! set!)
-       (if (consp (cdr x)) (scheme-extract-match-clause-vars (cadr x)) '()))
-      ((quote) '())
-      ((quasiquote) '())                ; XXXX
-      (t
-       (union (scheme-extract-match-clause-vars (car x))
-              (scheme-extract-match-clause-vars (cdr x))))))
-   ((vectorp x)
-    (scheme-extract-match-clause-vars (concatenate 'list x)))
-   (t
-    '())))
-
-;; call this from the first opening paren of the match clauses
-(defun scheme-extract-match-vars (&optional pos limit)
-  (let ((match-vars '())
-        (limit (or limit
-                   (save-excursion
-                     (or
-                      (ignore-errors (end-of-defun) (point))
-                      (point-max))))))
-    (save-excursion
-      (while (< (point) limit)
-        (let* ((end (ignore-errors (forward-sexp) (point)))
-               (start (and end (progn (backward-sexp) (point)))))
-          (cond
-           ((and pos start end (or (< pos start) (> pos end)))
-            (goto-char (if end (+ end 1) limit)))
-           (t
-            (forward-char 1)
-            (let* ((pat (scheme-nth-sexp-at-point 0))
-                   (new-vars (ignore-errors
-                               (scheme-extract-match-clause-vars pat))))
-              (setq match-vars (append new-vars match-vars)))
-            (goto-char (if (or pos (not end)) limit (+ end 1)))))))
-      match-vars)))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; You can set the *scheme-default-implementation* to your preferred
-;; implementation, for when we can't figure out the file from
-;; heuristics.  Alternately, in any given buffer, just
-;;
-;; (setq *scheme-current-implementation* whatever)
-
-(defgroup scheme-complete nil
-  "Smart tab completion"
-  :group 'scheme)
-
-(defcustom scheme-default-implementation nil
-  "Default scheme implementation to provide completion for
-when scheme-complete can't infer the current implementation."
-  :type 'symbol
-  :group 'scheme-complete)
-
-(defcustom scheme-complete-smart-indent-p t
-  "Toggles using `scheme-smart-indent' for `scheme-complete-or-indent'."
-  :type 'boolean
-  :group 'scheme-complete)
-
-(defcustom scheme-complete-cache-p t
-  "Toggles caching of module/load export information."
-  :type 'boolean
-  :group 'scheme-complete)
-
-;; (defcustom scheme-complete-learn-syntax-p nil
-;;   "Toggles parsing of syntax-rules macros for completion info."
-;;   :type 'boolean
-;;   :group 'scheme-complete)
-
-(defvar *scheme-interleave-definitions-p* nil)
-
-(defvar *scheme-complete-module-cache* '())
-
-(defvar *scheme-current-implementation* nil)
-(make-variable-buffer-local '*scheme-current-implementation*)
-
-;; most implementations use their name as the script name
-(defvar *scheme-interpreter-alist*
-  '(("csi"  . chicken)
-    ("gosh" . gauche)
-    ("gsi"  . gambit)
-    ("mred" . mzscheme)
-    ))
-
-(defvar *scheme-imported-modules* '())
-
-(defun scheme-current-implementation ()
-  (unless *scheme-current-implementation*
-    (setq *scheme-current-implementation*
-          (save-excursion
-            (goto-char (point-min))
-            (or
-             (and (looking-at "#! *\\([^ \t\n]+\\)")
-                  (let ((script (file-name-nondirectory (match-string 1))))
-                    (cdr (assoc script *scheme-interpreter-alist*))))
-             (cond
-              ((re-search-forward "(define-module +\\(.\\)" nil t)
-               (if (equal "(" (match-string 1))
-                   'guile
-                 'gauche))
-              ((re-search-forward "(\\(?:use\\|require-library\\) " nil t)
-               'chicken)
-              ((re-search-forward
-                "#\\(?:lang\\|reader\\)" nil t)
-               'mzscheme)
-              ((re-search-forward "(module\\s-" nil t)
-               (if (looking-at "\\s-*\\sw") 'chicken 'mzscheme)))))))
-  (or *scheme-current-implementation*
-      scheme-default-implementation))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun scheme-current-local-vars (&optional env)
-  (let ((vars '())
-        (limit (save-excursion (beginning-of-defun) (+ (point) 1)))
-        (start (point))
-        (scan-internal))
-    (save-excursion
-      (while (> (point) limit)
-        (or (ignore-errors
-              (progn
-                (skip-chars-backward " \t\n" limit)
-                (scheme-beginning-of-sexp)
-                t))
-            (goto-char limit))
-        (when (and (> (point) (point-min))
-                   (eq ?\( (char-syntax (char-before (point))))
-                   (eq ?w (char-syntax (char-after (point)))))
-          (setq scan-internal t)
-          (let ((sym (scheme-symbol-at-point)))
-            (case sym
-              ((lambda)
-               (setq vars
-                     (append
-                      (mapcar #'list
-                              (scheme-flatten (scheme-nth-sexp-at-point 1)))
-                      vars)))
-              ((match match-let match-let*)
-               (setq vars
-                     (append
-                      (ignore-errors
-                        (save-excursion
-                          (let ((limit (save-excursion
-                                         (cond
-                                          ((eq sym 'match)
-                                           (backward-char 1)
-                                           (forward-sexp 1))
-                                          (t
-                                           (forward-sexp 2)))
-                                         (point))))
-                            (forward-sexp 2)
-                            (if (eq sym 'match)
-                                (forward-sexp 1))
-                            (backward-sexp 1)
-                            (if (not (eq sym 'match))
-                                (forward-char 1))
-                            (scheme-extract-match-vars
-                             (and (or (eq sym 'match) (< start limit)) start)
-                             limit))))
-                      vars)))
-              ((let let* letrec letrec* let-syntax letrec-syntax and-let* do)
-               (or
-                (ignore-errors
-                  (save-excursion
-                    (scheme-beginning-of-next-sexp)
-                    (if (and (eq sym 'let)
-                             (eq ?w (char-syntax (char-after (point)))))
-                        ;; named let
-                        (let* ((sym (scheme-symbol-at-point))
-                               (args (progn
-                                       (scheme-beginning-of-next-sexp)
-                                       (scheme-let-vars-at-point env))))
-                          (setq vars (cons `(,sym (lambda ,(mapcar #'car args)))
-                                           (append args vars))))
-                      (setq vars (append (scheme-let-vars-at-point env) vars)))
-                    t))
-                (goto-char limit)))
-              ((let-values let*-values)
-               (setq vars
-                     (append (mapcar
-                              #'list
-                              (scheme-append-map
-                               #'scheme-flatten
-                               (remove-if-not #'consp
-                                              (scheme-nth-sexp-at-point 1))))
-                             vars)))
-              ((receive defun defmacro)
-               (setq vars
-                     (append (mapcar #'list
-                                     (scheme-flatten
-                                      (scheme-nth-sexp-at-point 1)))
-                             vars)))
-              (t
-               (if (string-match "^define\\(-.*\\)?" (symbol-name sym))
-                   (let ((defs (save-excursion
-                                 (backward-char)
-                                 (scheme-extract-definitions))))
-                     (setq vars
-                           (append (scheme-append-map
-                                    #'(lambda (x)
-                                        (and (consp (cdr x))
-                                             (consp (cadr x))
-                                             (eq 'lambda (caadr x))
-                                             (mapcar #'list
-                                                     (scheme-flatten
-                                                      (cadadr x)))))
-                                    defs)
-                                   defs
-                                   vars)))
-                 (setq scan-internal nil))))
-            ;; check for internal defines
-            (when scan-internal
-              (ignore-errors
-                (save-excursion
-                  (forward-sexp
-                   (+ 1 (if (numberp scan-internal) scan-internal 2)))
-                  (backward-sexp)
-                  (if (< (point) start)
-                      (setq vars (append (scheme-current-definitions) vars))
-                    ))))))))
-    (reverse vars)))
-
-(defun scheme-extract-import-module-imports (sexp)
-  (case (and (consp sexp) (car sexp))
-    ((prefix prefix-in)
-     (let* ((ids (scheme-extract-import-module-imports (cadr sexp)))
-            (prefix0 (caddr sexp))
-            (prefix (if (symbolp prefix0) (symbol-name prefix0) prefix0)))
-       (mapcar #'(lambda (x)
-                   (cons (intern (concat prefix (symbol-name (car x))))
-                         (cdr x)))
-               ids)))
-    ((prefix-all-except)
-     (let ((prefix
-            (if (symbolp (cadr sexp)) (symbol-name (cadr sexp)) (cadr sexp)))
-           (exceptions (cddr sexp)))
-       (mapcar #'(lambda (x)
-                   (if (memq (car x) exceptions)
-                       x
-                     (cons (intern (concat prefix (symbol-name (car x))))
-                           (cdr x))))
-               (scheme-extract-import-module-imports (caddr sexp)))))
-    ((for for-syntax for-template for-label for-meta)
-     (scheme-extract-import-module-imports (cadr sexp)))
-    ((rename rename-in)
-     (let ((renames (cddr sexp)))
-       (mapcar #'(lambda (x)
-                   (cons (or (cadr (assq (car x) renames)) (car x)) (cdr x)))
-               (scheme-extract-import-module-imports (cadr sexp)))))
-    ((except except-in)
-     (remove-if #'(lambda (x) (memq (car x) (cddr sexp)))
-                (scheme-extract-import-module-imports (cadr sexp))))
-    ((only only-in)
-     (remove-if-not
-      #'(lambda (x) (memq (car x) (cddr sexp)))
-      (scheme-extract-import-module-imports (cadr sexp))))
-    ((import import-for-syntax require)
-     (scheme-append-map #'scheme-extract-import-module-imports (cdr sexp)))
-    ((library)
-     (if (and (stringp (cadr sexp)) (file-exists-p (cadr sexp)))
-         (scheme-module-exports (intern (cadr sexp)))))
-    ((lib)
-     (if (and (equal "srfi" (caddr sexp))
-              (stringp (cadr sexp))
-              (string-match "^[0-9]+\\." (cadr sexp)))
-         (scheme-module-exports
-          (intern (file-name-sans-extension (concat "srfi-" (cadr sexp)))))
-       (scheme-module-exports
-        (intern (apply 'concat (append (cddr sexp) (list (cadr sexp))))))))
-    (t
-     (scheme-module-exports sexp))))
-
-(defun scheme-extract-sexp-imports (sexp)
-  (case (and (consp sexp) (car sexp))
-    ((begin define-module)
-     (scheme-append-map #'scheme-extract-sexp-imports (cdr sexp)))
-    ((cond-expand)
-     (scheme-append-map #'scheme-extract-sexp-imports
-                        (scheme-append-map #'cdr (cdr sexp))))
-    ((use require-extension)
-     (scheme-append-map #'scheme-module-exports (cdr sexp)))
-    ((import)
-     (scheme-append-map #'scheme-extract-import-module-imports (cdr sexp)))
-    ((autoload)
-     (unless (member (cadr sexp) *scheme-imported-modules*)
-       (push (cadr sexp) *scheme-imported-modules*)
-       (mapcar #'(lambda (x) (cons (if (consp x) (car x) x) '((lambda obj))))
-               (cddr sexp))))
-    ((load)
-     (unless (member (cadr sexp) *scheme-imported-modules*)
-       (push (cadr sexp) *scheme-imported-modules*)
-       (and (stringp (cadr sexp))
-            (file-exists-p (cadr sexp))
-            (scheme-with-find-file (cadr sexp)
-              (scheme-current-globals)))))
-    ((library module)
-     (scheme-append-map #'scheme-extract-import-module-imports
-                        (remove-if #'(lambda (x)
-                                       (memq (car x) '(import require)))
-                                   (cdr sexp))))
-    ))
-
-(defun scheme-module-symbol-p (sym)
-  (memq sym '(use require require-extension begin cond-expand
-              module library define-module autoload load import)))
-
-(defun scheme-skip-shebang ()
-  ;; skip shebang if present
-  (if (looking-at "#!")
-      ;; guile skips until a closing !#
-      (if (eq 'guile (scheme-current-implementation))
-          (re-search-forward "!#" nil t)
-        (next-line))))
-
-(defun scheme-current-imports ()
-  (let ((imports '())
-        (*scheme-imported-modules* '()))
-    (save-excursion
-      (goto-char (point-min))
-      (scheme-skip-shebang)
-      ;; scan for module forms
-      (while (not (eobp))
-        (if (ignore-errors (forward-sexp) t)
-            (let ((end (point))
-                  (inside-p nil))
-              (backward-sexp)
-              (when (eq ?\( (char-after))
-                (forward-char)
-                (when (not (eq ?\( (char-after)))
-                  (let ((sym (scheme-symbol-at-point)))
-                    (cond
-                     ((memq sym '(module library))
-                      (forward-sexp 3)
-                      (setq inside-p t))
-                     ((scheme-module-symbol-p sym)
-                      (backward-char)
-                      (ignore-errors
-                        (setq imports
-                              (append (scheme-extract-sexp-imports
-                                       (scheme-nth-sexp-at-point 0))
-                                      imports))))))))
-              (unless inside-p (goto-char end)))
-          ;; if an incomplete sexp is found, try to recover at the
-          ;; next line beginning with an open paren
-          (scheme-goto-next-top-level))))
-    imports))
-
-;; we should be just inside the opening paren of an expression
-(defun scheme-name-of-define ()
-  (save-excursion
-    (scheme-beginning-of-next-sexp)
-    (if (eq ?\( (char-syntax (char-after)))
-        (forward-char))
-    (and (memq (char-syntax (char-after)) '(?\w ?\_))
-         (scheme-symbol-at-point))))
-
-(defun scheme-type-of-define ()
-  (save-excursion
-    (scheme-beginning-of-next-sexp)
-    (cond
-     ((eq ?\( (char-syntax (char-after)))
-      `(lambda ,(cdr (scheme-nth-sexp-at-point 0))))
-     (t
-      (ignore-errors (scheme-beginning-of-next-sexp)
-                     (scheme-sexp-type-at-point))))))
-
-;; we should be at the opening paren of an expression
-(defun scheme-extract-definitions (&optional env)
-  (save-excursion
-    (let ((sym (ignore-errors (and (eq ?\( (char-syntax (char-after)))
-                                   (progn (forward-char)
-                                          (scheme-symbol-at-point))))))
-      (case sym
-        ((define-syntax define-compiled-syntax defmacro define-macro)
-         (list (list (scheme-name-of-define) '(syntax))))
-        ((define define-inline define-constant define-primitive defun)
-         (let ((name (scheme-name-of-define))
-               (type (scheme-type-of-define)))
-           (list (if type (list name type) (list name)))))
-        ((defvar define-class)
-         (list (list (scheme-name-of-define) 'non-procedure)))
-        ((define-record)
-         (backward-char)
-         (ignore-errors
-           (let* ((sexp (scheme-nth-sexp-at-point 0))
-                  (name (symbol-name (cadr sexp))))
-             `((,(intern (concat name "?")) (lambda (obj) boolean))
-               (,(intern (concat "make-" name)) (lambda ,(cddr sexp) ))
-               ,@(scheme-append-map
-                  #'(lambda (x)
-                      `((,(intern (concat name "-" (symbol-name x)))
-                         (lambda (non-procedure)))
-                        (,(intern (concat name "-" (symbol-name x) "-set!"))
-                         (lambda (non-procedure val) undefined))))
-                  (cddr sexp))))))
-        ((define-record-type)
-         (backward-char)
-         (ignore-errors
-           (let ((sexp (scheme-nth-sexp-at-point 0)))
-             `((,(caaddr sexp) (lambda ,(cdaddr sexp)))
-               (,(cadddr sexp) (lambda (obj)))
-               ,@(scheme-append-map 
-                  #'(lambda (x)
-                      (if (consp x)
-                          (if (consp (cddr x))
-                              `((,(cadr x) (lambda (non-procedure)))
-                                (,(caddr x)
-                                 (lambda (non-procedure val) undefined)))
-                            `((,(cadr x) (lambda (non-procedure)))))))
-                  (cddddr sexp))))))
-        ((begin progn)
-         (forward-sexp)
-         (scheme-current-definitions))
-        (t
-         '())))))
-
-;; a little more liberal than -definitions, we try to scan to a new
-;; top-level form (i.e. a line beginning with an open paren) if
-;; there's an error during normal sexp movement
-(defun scheme-current-globals ()
-  (let ((here (point))
-        (globals '())
-        (end (point-max)))
-    (save-excursion
-      (goto-char (point-min))
-      (or (ignore-errors (end-of-defun) (backward-sexp) t)
-          (and (re-search-forward "^(" nil t) (progn (backward-char) t))
-          (goto-char (point-max)))
-      (while (< (point) end)
-        (cond
-         ((and (< (point) here) (looking-at "(\\(module\\|library\\)\\s-"))
-          (let ((module-end (ignore-errors
-                              (save-excursion (forward-sexp) (point)))))
-            (cond
-             ((or (not module-end) (< here module-end)) ; inside the module
-              (setq globals '())
-              (when module-end
-                (setq end module-end))
-              (forward-word 1)
-              (forward-sexp 2)
-              (scheme-beginning-of-next-sexp))
-             (t ;; not inside the module, skip it altogether
-              (forward-sexp 1)
-              (scheme-goto-next-top-level)))))
-         (t
-          (setq globals
-                (append (ignore-errors (scheme-extract-definitions)) globals))
-          (or (and (progn (forward-char) (re-search-forward "^(" nil t))
-                   (progn (backward-char) t))
-              (scheme-goto-next-top-level))))))
-    globals))
-
-;; for internal defines, etc.
-(defun scheme-current-definitions (&optional enclosing-end)
-  (let ((defs '())
-        (end (or enclosing-end (point-max))))
-    (save-excursion
-      (while (< (point) end)
-        (let ((here (point))
-              (new-defs (scheme-extract-definitions)))
-          (cond
-           (new-defs
-             (setq defs (append new-defs defs))
-             (or (ignore-errors (scheme-beginning-of-next-sexp)
-                                (> (point) here))
-                 (goto-char end)))
-           ;; non-definition form, maybe stop scanning
-           ((not *scheme-interleave-definitions-p*)
-            (goto-char end))))))
-    defs))
-
-(defun scheme-current-exports ()
-  (let ((res '()))
-    (save-excursion
-      (goto-char (point-min))
-      (or (ignore-errors (end-of-defun) (beginning-of-defun) t)
-          (re-search-forward "^(" nil t)
-          (goto-char (point-max)))
-      (while (not (eobp))
-        (when (and (eq ?\( (char-syntax (char-after)))
-                   (eq ?w (char-syntax (char-after (1+ (point))))))
-          (let ((sym (save-excursion (forward-char) (scheme-symbol-at-point))))
-            (case sym
-              ((declare define-module)
-               (let ((decls (scheme-nth-sexp-at-point 0)))
-                 (cond
-                  ((and (listp decls) (assq 'export decls))
-                   (setq res (nconc (cdr (assq 'export decls)) res)))
-                  ((and (listp decls) (assq 'export-all decls))
-                   (goto-char (point-max))))))
-              ((export provide)
-               (unless (and (eq 'provide sym)
-                            (eq 'chicken (scheme-current-implementation)))
-                 (setq res (nconc (cdr (scheme-nth-sexp-at-point 0)) res))))
-              ((export-all)
-               (goto-char (point-max)))
-              ((extend)
-               (let ((parents (cdr (scheme-nth-sexp-at-point 0))))
-                 (setq res (nconc (mapcar #'car
-                                          (scheme-append-map
-                                           #'scheme-module-exports
-                                           parents))
-                                  res))))
-              ((module)
-               (forward-char)
-               (forward-sexp)
-               (let ((x (scheme-nth-sexp-at-point 0)))
-                 (cond
-                  ((eq '* x)
-                   (goto-char (point-max)))
-                  ((listp x)
-                   (setq res
-                         (nconc (remove-if-not #'symbolp (cdr x)) res))))))
-              )))
-        (scheme-goto-next-top-level)))
-    res))
-
-(defun scheme-srfi-exports (i)
-  (and (integerp i)
-       (>= i 0)
-       (< i (length *scheme-srfi-info*))
-       (let ((info (cdr (aref *scheme-srfi-info* i))))
-         (if (and (consp info) (null (cdr info)) (symbolp (car info)))
-             (scheme-module-exports (car info))
-           info))))
-
-(defvar scheme-module-exports-function nil)
-
-(defvar *scheme-module-exports-functions*
-  '((chicken  . scheme-module-exports/chicken)
-    (gauche   . scheme-module-exports/gauche)
-    (mzscheme . scheme-module-exports/mzscheme)))
-
-(defun scheme-module-exports (mod)
-  (unless (member mod *scheme-imported-modules*)
-    (push mod *scheme-imported-modules*)
-    (cond
-     ((and (consp mod) (eq 'srfi (car mod)))
-      (scheme-append-map #'scheme-srfi-exports (cdr mod)))
-     ((and (symbolp mod) (string-match "^srfi-" (symbol-name mod)))
-      (scheme-srfi-exports
-       (string-to-number (substring (symbol-name mod) 5))))
-     (t
-      (let ((cached (assq mod *scheme-complete-module-cache*)))
-        ;; remove stale caches
-        (when (and cached
-                   (stringp (cadr cached))
-                   (ignore-errors
-                     (let ((mtime (nth 5 (file-attributes (cadr cached))))
-                           (ptime (caddr cached)))
-                       (or (> (car mtime) (car ptime))
-                           (and (= (car mtime) (car ptime))
-                                (> (cadr mtime) (cadr ptime)))))))
-          (setq *scheme-complete-module-cache*
-                (assq-delete-all mod *scheme-complete-module-cache*))
-          (setq cached nil))
-        (if cached
-            (cadddr cached)
-          ;; (re)compute module exports
-          (let ((export-fun
-                 (or scheme-module-exports-function
-                     (cdr (assq (scheme-current-implementation)
-                                *scheme-module-exports-functions*)))))
-            (when export-fun
-              (let ((res (funcall export-fun mod)))
-                (when res
-                  (when (and scheme-complete-cache-p (car res))
-                    (push (list mod
-                                (car res)
-                                (nth 5 (file-attributes (car res)))
-                                (cadr res))
-                          *scheme-complete-module-cache*))
-                  (cadr res)))))))))))
-
-(defun scheme-module-exports/chicken (mod)
-  (let ((predefined (assq mod *scheme-chicken-modules*)))
-    (if predefined
-        (list nil (cdr predefined))
-      (let* ((mod-str (symbol-name mod))
-             (export-file
-              (concat *scheme-chicken-base-repo* "/" mod-str ".exports"))
-             (setup-file
-              (concat *scheme-chicken-base-repo* "/" mod-str ".setup-info"))
-             ;; look for the source in the current directory
-             (source-file (concat mod-str ".scm"))
-             ;; try the chicken 4 modules db
-             (modules-db (concat *scheme-chicken-base-repo* "/modules.db")))
-        (cond
-         ((eq mod 'scheme)
-          (list nil *scheme-r5rs-info*))
-         ((file-exists-p source-file)
-          (list source-file
-                (scheme-with-find-file source-file
-                  (let ((env (scheme-current-globals))
-                        (exports (scheme-current-exports)))
-                    (if (consp exports)
-                        (remove-if-not #'(lambda (x) (memq (car x) exports)) env)
-                      env)))))
-         ((file-exists-p export-file)
-          (list export-file
-                (mapcar #'(lambda (x) (cons (intern x) '((lambda obj))))
-                        (scheme-file->lines export-file))))
-         (t
-          (let ((setup-file-exports
-                 (and (file-exists-p setup-file)
-                      (scheme-with-find-file setup-file
-                        (let* ((alist (scheme-nth-sexp-at-point 0))
-                               (cell (assq 'exports alist)))
-                          (cdr cell))))))
-            (cond
-             (setup-file-exports
-              (list setup-file
-                    (mapcar #'(lambda (x) (cons (intern x) '((lambda obj))))
-                            setup-file-exports)))
-             ((file-exists-p modules-db)
-              (list modules-db
-                    (mapcar
-                     #'(lambda (x)
-                         (cons (intern (car (split-string (substring x 1))))
-                               '((lambda ()))))
-                     (remove-if-not
-                      #'(lambda (x) (string-match (concat " " mod-str ")") x))
-                      (scheme-file->lines modules-db))))))))
-         )))))
-
-(defun scheme-module-exports/gauche (mod)
-  (let* ((file (concat (subst-char-in-string ?. ?/ (symbol-name mod)) ".scm"))
-         (dir
-          (scheme-find-file-in-path
-           file
-           (cons
-            (concat *scheme-gauche-site-repo-path* "/site/lib")
-            (mapcar
-             #'(lambda (x) (concat x "/lib"))
-             (reverse
-              (directory-files *scheme-gauche-repo-path* t "^[0-9]")))))))
-    (when dir
-      (list
-       (concat dir "/" file)
-       (scheme-with-find-file (concat dir "/" file)
-         (let ((env (scheme-current-globals))
-               (exports (scheme-current-exports)))
-           (if (consp exports)
-               (remove-if-not #'(lambda (x) (memq (car x) exports)) env)
-             env)))))))
-
-(defun scheme-module-exports/mzscheme (mod)
-  (let ((dir (scheme-find-file-in-path
-              (symbol-name mod)
-              '("."
-                "/usr/local/lib/plt/collects"
-                "/usr/local/lib/plt/collects/mzlib"))))
-    (when dir
-      ;; XXXX parse, don't use regexps
-      (list
-       (concat dir "/" (symbol-name mod))
-       (scheme-with-find-file (concat dir "/" (symbol-name mod))
-         (when (re-search-forward "(provide" nil t)
-           (backward-sexp)
-           (backward-char)
-           (mapcar #'list (cdr (ignore-errors (scheme-nth-sexp-at-point 0))))
-           ))))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; This is rather complicated because we want to auto-generate
-;; docstring summaries from the type information, which means
-;; inferring various types from common names.  The benefit is that you
-;; don't have to input the same information twice, and can often
-;; cut&paste&munge procedure descriptions from the original
-;; documentation.
-
-(defun scheme-translate-type (type)
-  (if (not (symbolp type))
-      type
-    (case type
-      ((pred proc thunk handler dispatch producer consumer f fn g kons)
-       'procedure)
-      ((num) 'number)
-      ((z) 'complex)
-      ((x1 x2 x3 y timeout seconds nanoseconds) 'real)
-      ((i j k n m int index size count len length bound nchars start end
-        pid uid gid fd fileno errno)
-       'integer)
-      ((ch) 'char)
-      ((str name pattern) 'string)
-      ((file path pathname) 'filename)
-      ((dir dirname) 'directory)
-      ((sym id identifier) 'symbol)
-      ((ls lis lst alist lists) 'list)
-      ((vec) 'vector)
-      ((exc excn err error) 'exception)
-      ((ptr) 'pointer)
-      ((bool) 'boolean)
-      ((env) 'environment)
-      ((char string boolean number complex real integer procedure char-set
-        port input-port output-port pair list vector array stream hash-table
-        thread mutex condition-variable time exception date duration locative
-        random-source state condition condition-type queue pointer
-        u8vector s8vector u16vector s16vector u32vector s32vector
-        u64vector s64vector f32vector f64vector undefined symbol
-        block filename directory mmap listener environment non-procedure
-        read-table continuation blob generic method class regexp regmatch
-        sys-stat fdset)
-       type)
-      ((parent seed option mode) 'non-procedure)
-      (t
-       (let* ((str (symbol-name type))
-              (i (string-match "-?[0-9]+$" str)))
-         (if i
-             (scheme-translate-type (intern (substring str 0 i)))
-           (let ((i (string-match "-\\([^-]+\\)$" str)))
-             (if i
-                 (scheme-translate-type (intern (substring str (+ i 1))))
-               (if (string-match "\\?$" str)
-                   'boolean
-                 'object)))))))))
-
-(defun scheme-lookup-type (spec pos)
-  (let ((i 1)
-        (type nil))
-    (while (and (consp spec) (<= i pos))
-      (cond
-       ((eq :optional (car spec))
-        (if (and (= i pos) (consp (cdr spec)))
-            (setq type (cadr spec)))
-        (setq i (+ pos 1)))
-       ((= i pos)
-        (setq type (car spec))
-        (setq spec nil))
-       ((and (consp (cdr spec)) (eq '\.\.\. (cadr spec)))
-        (setq type (car spec))
-        (setq spec nil)))
-      (setq spec (cdr spec))
-      (incf i))
-    (if type
-        (setq type (scheme-translate-type type)))
-    type))
-
-(defun scheme-predicate->type (pred)
-  (case pred
-    ((even? odd?) 'integer)
-    ((char-upper-case? char-lower-case?
-      char-alphabetic? char-numeric? char-whitespace?)
-     'char)
-    (t
-     ;; catch all the `type?' predicates with pattern matching
-     ;; ... we could be smarter if the env was passed
-     (let ((str (symbol-name pred)))
-       (if (string-match "\\?$" str)
-           (scheme-translate-type
-            (intern (substring str 0 (- (length str) 1))))
-         'object)))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; completion
-
-(eval-when (compile load eval)
-  (unless (fboundp 'event-matches-key-specifier-p)
-    (defalias 'event-matches-key-specifier-p 'eq)))
-
-(unless (fboundp 'read-event)
-  (defun read-event ()
-    (aref (read-key-sequence nil) 0)))
-
-(unless (fboundp 'event-basic-type)
-  (defalias 'event-basic-type 'event-key))
-
-(defun scheme-string-prefix-p (pref str)
-  (let ((p-len (length pref))
-        (s-len (length str)))
-    (and (<= p-len s-len)
-         (equal pref (substring str 0 p-len)))))
-
-(defun scheme-do-completion (str coll &optional strs pred)
-  (let* ((coll (mapcar #'(lambda (x)
-                           (cond
-                            ((symbolp x) (list (symbol-name x)))
-                            ((stringp x) (list x))
-                            (t x)))
-                       coll))
-         (completion1 (try-completion str coll pred))
-         (completion2 (and strs (try-completion str strs pred)))
-         (completion (if (and completion2
-                              (or (not completion1)
-                                  (< (length completion2)
-                                     (length completion1))))
-                         completion2
-                       completion1)))
-    (cond
-     ((eq completion t))
-     ((not completion)
-      (message "Can't find completion for \"%s\"" str)
-      (ding))
-     ((not (string= str completion))
-      (let ((prefix-p (scheme-string-prefix-p completion completion1)))
-        (unless prefix-p
-          (save-excursion
-            (backward-char (length str))
-            (insert "\"")))
-        (insert (substring completion (length str)))
-        (unless prefix-p
-          (insert "\"")
-          (backward-char))))
-     (t
-      (let ((win-config (current-window-configuration))
-            (done nil))
-        (message "Hit space to flush")
-        (with-output-to-temp-buffer "*Completions*"
-          (display-completion-list
-           (sort
-            (all-completions str (append strs coll) pred)
-            'string-lessp)))
-        (while (not done)
-          (let* ((orig-event
-                  (with-current-buffer (get-buffer "*Completions*")
-                    (read-event)))
-                 (event (event-basic-type orig-event)))
-            (cond
-             ((or (event-matches-key-specifier-p event 'tab)
-                  (event-matches-key-specifier-p event 9))
-              (save-selected-window
-                (select-window (get-buffer-window "*Completions*"))
-                (if (pos-visible-in-window-p (point-max))
-                    (goto-char (point-min))
-                  (scroll-up))))
-             (t
-              (set-window-configuration win-config)
-              (if (or (event-matches-key-specifier-p event 'space)
-                      (event-matches-key-specifier-p event 32))
-                  (bury-buffer (get-buffer "*Completions*"))
-                (setq unread-command-events (list orig-event)))
-              (setq done t))))))
-      ))))
-
-(defun scheme-env-lookup (env sym)
-  (let ((spec nil)
-        (ls env))
-    (while (and ls (not spec))
-      (setq spec (assq sym (pop ls))))
-    spec))
-
-(defun scheme-inside-module-p ()
-  (save-excursion
-    (ignore-errors
-      (let ((here (point))
-            res)
-        (goto-char (point-min))
-        (while (< (point) here)
-          (if (not (re-search-forward "^(\\(?:module\\|library\\)\\s-"))
-              (goto-char (point-max))
-            (beginning-of-line)
-            (let ((mod-point (point)))
-              (if (ignore-errors (forward-sexp) t)
-                  (if (and (<= mod-point here) (<= here (point)))
-                      (setq res t))
-                (setq res (<= mod-point here))
-                (goto-char (point-max))))))
-        res))))
-
-(defun scheme-current-env ()
-  (let ((in-mod-p (scheme-inside-module-p)))
-    ;; r5rs
-    (let ((env (if in-mod-p (list) (list *scheme-r5rs-info*))))
-      ;; base language
-      (let ((base (cdr (assq (scheme-current-implementation)
-                             *scheme-implementation-exports*))))
-        (if (and base (not in-mod-p)) (push base env)))
-      ;; imports
-      (let ((imports (ignore-errors (scheme-current-imports))))
-        (if imports (push imports env)))
-      ;; top-level defs
-      (let ((top (ignore-errors (scheme-current-globals))))
-        (if top (push top env)))
-      ;; current local vars
-      (let ((locals (ignore-errors (scheme-current-local-vars env))))
-        (if locals (push locals env)))
-      env)))
-
-(defun scheme-env-filter (pred env)
-  (mapcar #'car
-          (apply #'concatenate
-                 'list
-                 (mapcar #'(lambda (e) (remove-if-not pred e))
-                         env))))
-
-;; checking return values:
-;;   a should be capable of returning instances of b
-(defun scheme-type-match-p (a b)
-  (let ((a1 (scheme-translate-type a))
-        (b1 (scheme-translate-type b)))
-    (and (not (eq a1 'undefined))   ; check a *does* return something
-         (or (eq a1 b1)             ; and they're the same
-             (eq a1 'object)        ; ... or a can return anything
-             (eq b1 'object)        ; ... or b can receive anything
-             (if (symbolp a1)
-                 (if (symbolp b1)
-                     (case a1           ; ... or the types overlap
-                       ((number complex real rational integer)
-                        (memq b1 '(number complex real rational integer)))
-                       ((port input-port output-port)
-                        (memq b1 '(port input-port output-port)))
-                       ((pair list)
-                        (memq b1 '(pair list)))
-                       ((non-procedure)
-                        (not (eq 'procedure b1))))
-                   (and
-                    (consp b1)
-                    (if (eq 'or (car b1))
-                        ;; type unions
-                        (find-if
-                         #'(lambda (x)
-                             (scheme-type-match-p
-                              a1 (scheme-translate-type x)))
-                         (cdr b1))
-                      (let ((b2 (scheme-translate-special-type b1)))
-                        (and (not (equal b1 b2))
-                             (scheme-type-match-p a1 b2))))))
-               (and (consp a1)
-                    (case (car a1)
-                      ((or)
-                       ;; type unions
-                       (find-if
-                        #'(lambda (x)
-                            (scheme-type-match-p (scheme-translate-type x) b1))
-                        (cdr a1)))
-                      ((lambda)
-                       ;; procedures
-                       (or (eq 'procedure b1)
-                           (and (consp b1)
-                                (eq 'lambda (car b1))
-                                (scheme-param-list-match-p (cadr a1)
-                                                           (cadr b1)))))
-                      (t
-                       ;; other special types
-                       (let ((a2 (scheme-translate-special-type a1))
-                             (b2 (scheme-translate-special-type b1)))
-                         (and (or (not (equal a1 a2)) (not (equal b1 b2)))
-                              (scheme-type-match-p a2 b2)))))))))))
-
-(defun scheme-param-list-match-p (p1 p2)
-  (or (and (symbolp p1) (not (null p1)))
-      (and (symbolp p2) (not (null p2)))
-      (and (null p1) (null p2))
-      (and (consp p1) (consp p2)
-           (scheme-param-list-match-p (cdr p1) (cdr p2)))))
-
-(defun scheme-translate-special-type (x)
-  (if (not (consp x))
-      x
-    (case (car x)
-      ((list string) (car x))
-      ((set special) (cadr x))
-      ((flags) 'integer)
-      (t x))))
-
-(defun scheme-nth* (n ls)
-  (while (and (consp ls) (> n 0))
-    (setq n (- n 1)
-          ls (cdr ls)))
-  (and (consp ls) (car ls)))
-
-(defun scheme-file->lines (file)
-  (and (file-readable-p file)
-       (scheme-with-find-file file
-         (goto-char (point-min))
-         (let ((res '()))
-           (while (not (eobp))
-             (let ((start (point)))
-               (forward-line)
-               (push (buffer-substring-no-properties start (- (point) 1))
-                     res)))
-           (reverse res)))))
-
-(defun scheme-passwd-file-names (file &optional pat)
-  (delete
-   nil
-   (mapcar
-    #'(lambda (line)
-        (and (not (string-match "^[ 	]*#" line))
-             (or (not pat) (string-match pat line))
-             (string-match "^\\([^:]*\\):" line)
-             (match-string 1 line)))
-    (scheme-file->lines file))))
-
-(defun scheme-host-file-names (file)
-  (scheme-append-map
-   #'(lambda (line)
-       (let ((i (string-match "#" line)))
-         (if i (setq line (substring line 0 i))))
-       (cdr (split-string line)))
-   (scheme-file->lines file)))
-
-(defun scheme-ssh-known-hosts-file-names (file)
-  (scheme-append-map
-   #'(lambda (line)
-       (split-string (car (split-string line)) ","))
-   (scheme-file->lines file)))
-
-(defun scheme-ssh-config-file-names (file)
-  (scheme-append-map
-   #'(lambda (line)
-       (and (string-match "^ *Host" line)
-            (cdr (split-string line))))
-   (scheme-file->lines file)))
-
-(defun scheme-complete-user-name (trans sym)
-  (if (string-match "apple" (emacs-version))
-      (append (scheme-passwd-file-names "/etc/passwd" "^[^_].*")
-              (delete "Shared" (directory-files "/Users" nil "^[^.].*")))
-    (scheme-passwd-file-names "/etc/passwd")))
-
-(defun scheme-complete-host-name (trans sym)
-  (append (scheme-host-file-names "/etc/hosts")
-          (scheme-ssh-known-hosts-file-names "~/.ssh/known_hosts")
-          (scheme-ssh-config-file-names "~/.ssh/config")))
-
-;; my /etc/services is 14k lines, so we try to optimize this
-(defun scheme-complete-port-name (trans sym)
-  (and (file-readable-p "/etc/services")
-       (scheme-with-find-file "/etc/services"
-         (goto-char (point-min))
-         (let ((rx (concat "^\\(" (regexp-quote (if (symbolp sym)
-                                                    (symbol-name sym)
-                                                  sym))
-                           "[^ 	]*\\)"))
-               (res '()))
-           (while (not (eobp))
-             (if (not (re-search-forward rx nil t))
-                 (goto-char (point-max))
-               (let ((str (match-string-no-properties 1)))
-                 (if (not (equal str (car res)))
-                     (push str res)))
-               (forward-char 1)))
-           res))))
-
-(defun scheme-complete-file-name (trans sym)
-  (let* ((file (file-name-nondirectory sym))
-         (dir (file-name-directory sym))
-         (res (file-name-all-completions file (or dir "."))))
-    (if dir
-        (mapcar #'(lambda (f) (concat dir f)) res)
-      res)))
-
-(defun scheme-complete-directory-name (trans sym)
-  (let* ((file (file-name-nondirectory sym))
-         (dir (file-name-directory sym))
-         (res (file-name-all-completions file (or dir ".")))
-         (res2 (if dir (mapcar #'(lambda (f) (concat dir f)) res) res)))
-    (remove-if-not #'file-directory-p res2)))
-
-(defun scheme-string-completer (type)
-  (case type
-    ((filename)
-     '(scheme-complete-file-name file-name-nondirectory))
-    ((directory)
-     '(scheme-complete-directory-name file-name-nondirectory))
-    (t
-     (cond
-      ((and (consp type) (eq 'string (car type)))
-       (cadr type))
-      ((and (consp type) (eq 'or (car type)))
-       (car (delete nil (mapcar #'scheme-string-completer (cdr type)))))))))
-
-(defun scheme-apply-string-completer (cmpl sym)
-  (let ((func (if (consp cmpl) (car cmpl) cmpl))
-        (trans (and (consp cmpl) (cadr cmpl))))
-    (funcall func trans sym)))
-
-(defun scheme-smart-complete (&optional arg)
-  (interactive "P")
-  (let* ((end (point))
-         (start (save-excursion (skip-syntax-backward "w_") (point)))
-         (sym (buffer-substring-no-properties start end))
-         (in-str-p (scheme-in-string-p))
-         (x (save-excursion
-              (if in-str-p (scheme-beginning-of-string))
-              (scheme-enclosing-2-sexp-prefixes)))
-         (inner-proc (car x))
-         (inner-pos (cadr x))
-         (outer-proc (caddr x))
-         (outer-pos (cadddr x))
-         (env (save-excursion
-                (if in-str-p (scheme-beginning-of-string))
-                (scheme-current-env)))
-         (outer-spec (scheme-env-lookup env outer-proc))
-         (outer-type (scheme-translate-type (cadr outer-spec)))
-         (inner-spec (scheme-env-lookup env inner-proc))
-         (inner-type (scheme-translate-type (cadr inner-spec))))
-    (cond
-     ;; return all env symbols when a prefix arg is given
-     (arg
-      (scheme-do-completion sym (scheme-env-filter #'(lambda (x) t) env)))
-     ;; for now just do file-name completion in strings
-     (in-str-p
-      (let* ((param-type
-              (and (consp inner-type)
-                   (eq 'lambda (car inner-type))
-                   (scheme-lookup-type (cadr inner-type) inner-pos)))
-             (completer (or (scheme-string-completer param-type)
-                            '(scheme-complete-file-name
-                              file-name-nondirectory))))
-        (scheme-do-completion
-         ;;(if (consp completer) (funcall (cadr completer) sym) sym)
-         sym
-         (scheme-apply-string-completer completer sym))))
-     ;; outer special
-     ((and (consp outer-type)
-           (eq 'special (car outer-type))
-           (cadddr outer-type))
-      (scheme-do-completion sym (funcall (cadddr outer-type) sym)))
-     ;; inner special
-     ((and (consp inner-type)
-           (eq 'special (car inner-type))
-           (caddr inner-type))
-      (scheme-do-completion sym (funcall (caddr inner-type) sym)))
-     ;; completing inner procedure, complete procedures with a
-     ;; matching return type
-     ((and (consp outer-type)
-           (eq 'lambda (car outer-type))
-           (not (zerop outer-pos))
-           (scheme-nth* (- outer-pos 1) (cadr outer-type))
-           (or (zerop inner-pos)
-               (and (>= 1 inner-pos)
-                    (consp inner-type)
-                    (eq 'lambda (car inner-type))
-                    (let ((param-type
-                           (scheme-lookup-type (cadr inner-type) inner-pos)))
-                      (and (consp param-type)
-                           (eq 'lambda (car param-type))
-                           (eq (caddr inner-type) (caddr param-type)))))))
-      (let ((want-type (scheme-lookup-type (cadr outer-type) outer-pos)))
-        (scheme-do-completion
-         sym
-         (scheme-env-filter
-          #'(lambda (x)
-              (let ((type (cadr x)))
-                (or (memq type '(procedure object nil))
-                    (and (consp type)
-                         (or (and (eq 'syntax (car type))
-                                  (not (eq 'undefined (caddr type))))
-                             (and (eq 'lambda (car type))
-                                  (scheme-type-match-p (caddr type)
-                                                       want-type)))))))
-          env))))
-     ;; completing a normal parameter
-     ((and inner-proc
-           (not (zerop inner-pos))
-           (consp inner-type)
-           (eq 'lambda (car inner-type)))
-      (let* ((param-type (scheme-lookup-type (cadr inner-type) inner-pos))
-             (set-or-flags
-              (or (and (consp param-type)
-                       (case (car param-type)
-                         ((set) (cddr param-type))
-                         ((flags) (cdr param-type))))
-                  ;; handle nested arithmetic functions inside a flags
-                  ;; parameter
-                  (and (not (zerop outer-pos))
-                       (consp outer-type)
-                       (eq 'lambda (car outer-type))
-                       (let ((outer-param-type
-                              (scheme-lookup-type (cadr outer-type)
-                                                  outer-pos)))
-                         (and (consp outer-param-type)
-                              (eq 'flags (car outer-param-type))
-                              (memq (scheme-translate-type param-type)
-                                    '(number complex real rational integer))
-                              (memq (scheme-translate-type (caddr inner-type))
-                                    '(number complex real rational integer))
-                              (cdr outer-param-type))))))
-             (base-type (if set-or-flags
-                            (if (and (consp param-type)
-                                     (eq 'set (car param-type)))
-                                (scheme-translate-type (cadr param-type))
-                              'integer)
-                            param-type))
-             (base-completions
-              (scheme-env-filter
-               #'(lambda (x)
-                   (scheme-type-match-p (cadr x) base-type))
-               env))
-             (str-completions
-              (let ((completer (scheme-string-completer base-type)))
-                (and
-                 completer
-                 (scheme-apply-string-completer completer sym)))))
-        (scheme-do-completion
-         sym
-         (append set-or-flags base-completions)
-         str-completions)))
-     ;; completing a function
-     ((zerop inner-pos)
-      (scheme-do-completion
-       sym
-       (scheme-env-filter
-        #'(lambda (x)
-            (or (null (cdr x))
-                (memq (cadr x) '(procedure object nil))
-                (and (consp (cadr x))
-                     (memq (caadr x) '(lambda syntax)))))
-        env)))
-     ;; complete everything
-     (t
-      (scheme-do-completion sym (scheme-env-filter #'(lambda (x) t) env)) ))))
-
-(defun scheme-complete-or-indent (&optional arg)
-  (interactive "P")
-  (let* ((end (point))
-         (func
-          (save-excursion
-            (beginning-of-line)
-            (if (re-search-forward "\\S-" end t)
-                'scheme-smart-complete
-              'lisp-indent-line))))
-    (funcall func arg)))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; optional indentation handling
-
-(defvar calculate-lisp-indent-last-sexp)
-
-;; Copied from scheme-indent-function, but ignore
-;; scheme-indent-function property for local variables.
-(defun scheme-smart-indent-function (indent-point state)
-  (let ((normal-indent (current-column)))
-    (goto-char (1+ (elt state 1)))
-    (parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t)
-    (if (and (elt state 2)
-             (not (looking-at "\\sw\\|\\s_")))
-        ;; car of form doesn't seem to be a symbol
-        (progn
-          (if (not (> (save-excursion (forward-line 1) (point))
-                      calculate-lisp-indent-last-sexp))
-              (progn (goto-char calculate-lisp-indent-last-sexp)
-                     (beginning-of-line)
-                     (parse-partial-sexp (point)
-					 calculate-lisp-indent-last-sexp 0 t)))
-          ;; Indent under the list or under the first sexp on the same
-          ;; line as calculate-lisp-indent-last-sexp.  Note that first
-          ;; thing on that line has to be complete sexp since we are
-          ;; inside the innermost containing sexp.
-          (backward-prefix-chars)
-          (current-column))
-      (let* ((function (buffer-substring (point)
-                                         (progn (forward-sexp 1) (point))))
-             (function-sym (intern-soft function))
-             (method (and (not (assq function-sym (scheme-current-local-vars)))
-                          (get function-sym 'scheme-indent-function))))
-	(cond ((or (eq method 'defun)
-		   (and (null method)
-			(> (length function) 3)
-			(string-match "\\`def" function)))
-	       (lisp-indent-defform state indent-point))
-	      ((integerp method)
-	       (lisp-indent-specform method state
-				     indent-point normal-indent))
-	      (method
-               (funcall method state indent-point normal-indent)))))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; optional eldoc function
-
-(defun scheme-translate-dot-to-optional (ls)
-  (let ((res '()))
-    (while (consp ls)
-      (setq res (cons (car ls) res))
-      (setq ls (cdr ls)))
-    (if (not (null ls))
-        (setq res (cons ls (cons :optional res))))
-    (reverse res)))
-
-(defun scheme-optional-in-brackets (ls)
-  ;; put optional arguments inside brackets (via a vector)
-  (if (memq :optional ls)
-      (let ((res '()))
-        (while (and (consp ls) (not (eq :optional (car ls))))
-          (push (pop ls) res))
-        (reverse (cons (apply #'vector (cdr ls)) res)))
-    ls))
-
-(defun scheme-base-type (x)
-  (if (not (consp x))
-      x
-    (case (car x)
-      ((string list) (car x))
-      ((set) (or (cadr x) (car x)))
-      ((flags) 'integer)
-      ((lambda) 'procedure)
-      ((syntax) 'syntax)
-      (t x))))
-
-(defun scheme-sexp-to-string (sexp)
-  (with-output-to-string (princ sexp)))
-
-(defun scheme-get-current-symbol-info ()
-  (let* ((sym (eldoc-current-symbol))
-         (fnsym0 (eldoc-fnsym-in-current-sexp))
-         (fnsym (if (consp fnsym0) (car fnsym0) fnsym0))
-         (env (save-excursion
-                (if (scheme-in-string-p) (scheme-beginning-of-string))
-                (scheme-current-env)))
-         (spec (or (and sym (scheme-env-lookup env sym))
-                   (and fnsym (scheme-env-lookup env fnsym)))))
-    (and (consp spec)
-         (consp (cdr spec))
-         (let ((type (cadr spec)))
-           (concat
-            (cond
-             ((nth 3 spec)
-              "")
-             ((and (consp type)
-                   (memq (car type) '(syntax lambda)))
-              (concat
-               (if (eq (car type) 'syntax)
-                   "syntax: "
-                 "")
-               (scheme-sexp-to-string
-                (cons (car spec)
-                      (scheme-optional-in-brackets
-                       (mapcar #'scheme-base-type
-                               (scheme-translate-dot-to-optional
-                                (cadr type))))))
-               (if (and (consp (cddr type))
-                        (not (memq (caddr type) '(obj object))))
-                   (concat " => " (scheme-sexp-to-string (caddr type)))
-                 "")))
-             ((and (consp type) (eq (car type) 'special))
-              (scheme-sexp-to-string (car spec)))
-             (t
-              (scheme-sexp-to-string type)))
-            (if (and (not (nth 3 spec)) (nth 4 spec)) " - " "")
-            (or (nth 4 spec) ""))))))
-
-(provide 'scheme-complete)
-
-;; Local Variables:
-;; eval: (put 'scheme-with-find-file 'lisp-indent-hook 1)
-;; End:
-
Trap