diff options
Diffstat (limited to 'gambit.init')
-rw-r--r-- | gambit.init | 48 |
1 files changed, 27 insertions, 21 deletions
diff --git a/gambit.init b/gambit.init index e431160..dce1a07 100644 --- a/gambit.init +++ b/gambit.init @@ -34,19 +34,22 @@ ;;; the directory where any auxillary files to your Scheme ;;; implementation reside. (define implementation-vicinity - (case (software-type) - ((unix) (lambda () "/usr/local/share/gambc/")) - ((vms) (lambda () "scheme$src:")) - ((ms-dos) (lambda () "C:\\scheme\\")) - ((windows) (lambda () "c:/scheme/")) - ((macos) - (let ((arg0 (list-ref (argv) 0))) - (let loop ((i (- (string-length arg0) 1))) - (cond ((negative? i) "") - ((char=? #\: (string-ref arg0 i)) - (set! arg0 (substring arg0 0 (+ i 1))) - (lambda () arg0)) - (else (loop (- i 1))))))))) + (let ((impl-path + (or (getenv "GAMBIT_IMPLEMENTATION_PATH") + (case (software-type) + ((unix) "/usr/local/share/gambc/") + ((vms) "scheme$src:") + ((ms-dos) "C:\\scheme\\") + ((windows) "c:/scheme/") + ((macos) + (let ((arg0 (list-ref (argv) 0))) + (let loop ((i (- (string-length arg0) 1))) + (cond ((negative? i) "") + ((char=? #\: (string-ref arg0 i)) + (substring arg0 0 (+ i 1))) + (else (loop (- i 1))))))) + (else ""))))) + (lambda () impl-path))) ;;; (library-vicinity) should be defined to be the pathname of the ;;; directory where files of Scheme library functions reside. @@ -123,8 +126,7 @@ ;@ (define sub-vicinity (case (software-type) - ((vms) (lambda - (vic name) + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) (not (char=? #\] (string-ref vic (- l 1))))) @@ -165,6 +167,7 @@ ;(SLIB:LOAD-COMPILED "filename") vicinity srfi-59 + srfi-96 ;; Scheme report features ;; R5RS-compliant implementations should provide all 9 features. @@ -208,7 +211,7 @@ ;; Other common features - srfi ;srfi-0, COND-EXPAND finds all srfi-* + srfi-0 ;srfi-0, COND-EXPAND finds all srfi-* sicp ;runs code from Structure and ;Interpretation of Computer ;Programs by Abelson and Sussman. @@ -347,10 +350,6 @@ ;;; SLIB:EVAL is single argument eval using the top-level (user) environment. (define slib:eval eval) -;;; If your implementation provides R4RS macros: -;(define macro:eval slib:eval) -;(define macro:load load) - (define *defmacros* (list (cons 'defmacro (lambda (name parms . body) @@ -385,7 +384,6 @@ (define (defmacro:load <pathname>) (slib:eval-load <pathname> defmacro:eval)) -;; slib:eval-load definition moved to "require.scm" (define print-call-stack identity) ;noop @@ -441,6 +439,14 @@ ;;; At this point SLIB:LOAD must be able to load SLIB files. (define slib:load slib:load-source) +;;; If your implementation provides R4RS macros: +;;(define macro:eval slib:eval) +;;(define macro:load slib:load-source) + +;;; If your implementation provides syntax-case macros: +;;(define syncase:eval slib:eval) +;;(define syncase:load slib:load-source) + (slib:eval '(define-macro (defmacro name parms . body) (set! *defmacros* (cons `(cons ',name (lambda ,parms ,@body)) *defmacros*)) |