; Script to load the Scheme 48 linker into Common Lisp.
; Requires Pseudoscheme 2.11.

(defvar pseudoscheme-directory "../pseudo/")
(load (concatenate 'string pseudoscheme-directory "loadit.lisp"))
; or perhaps (load (merge-pathnames "loadit.lisp" pseudoscheme-directory))
(load-pseudoscheme pseudoscheme-directory)

(progn (revised^4-scheme::define-sharp-macro #\.
	 #'(lambda (c port)
	     (read-char port)
	     (eval (let ((*readtable* ps::scheme-readtable))
		     (read port)))))
       (values))

(ps:scheme)
;--------------------
; Scheme forms

(benchmark-mode)

(define config-env     ; (interaction-environment) would also work here.
  (#.'scheme-translator:make-program-env
     '%config
     (list #.'scheme-translator:revised^4-scheme-structure)))

(load "bcomp/module-language" config-env)
(load "alt/config" config-env)
(load "env/flatload" config-env)
(eval '(set! *load-file-type* #f) config-env)

(define load-config
  (let ((load-config (eval 'load-configuration config-env)))
    (lambda (filename)
      (load-config filename config-env))))

(load-config "packages")

(define flatload-package (eval 'flatload config-env))

(flatload-package (eval 'linker-structures config-env) config-env)

(let ((#.'clever-load:*compile-if-necessary-p* #t))
  (let ((#.'ps:*scheme-read* #.'#'ps::scheme-read-using-commonlisp-reader))
    (load "alt/pseudoscheme-record")
    (load "alt/pseudoscheme-features")))

(let ((#.'clever-load:*compile-if-necessary-p* #t))
  (flatload-package (eval 'link-config config-env)))

(load "alt/init-defpackage.scm")

(define-syntax struct-list    ;not in link.sbin
  (syntax-rules ()
    ((struct-list ?name ...) (list (cons '?name ?name) ...))))

;--------------------
(quit)

#+Lucid
(defun disksave-restart-function ()
  (format t "~&Scheme 48 linker.~2%")
  ;; (hax:init-interrupt-delivery)   - for threads
  (ps:scheme)
  (terpri))
#+Lucid
(defun dump-linker ()
  (lcl:disksave "link/linker-in-lucid" :gc t :full-gc t :verbose t
		:restart-function #'disksave-restart-function))
;(dump-linker)
;(lcl:quit)


; Debugging hacks
;(defun enable-lisp-packages ()
;  (setq *readtable* ps:scheme-readtable)
;  (values))
;(defun disable-lisp-packages ()
;  (setq *readtable* ps::roadblock-readtable)
;  (values))