2 (define-module #/ice-9/slib)
6 (define (eval-load <filename> evl)
7 (if (not (file-exists? <filename>))
8 (set! <filename> (string-append <filename> (scheme-file-suffix))))
9 (call-with-input-file <filename>
11 (let ((old-load-pathname *load-pathname*))
12 (set! *load-pathname* <filename>)
13 (do ((o (read port #t read-sharp) (read port #t read-sharp)))
16 (set! *load-pathname* old-load-pathname)))))
20 (define slib:exit quit)
21 (define slib:error error)
22 (define slib:eval eval)
23 (define defmacro:eval eval)
24 (define logical:logand logand)
25 (define logical:logior logior)
26 (define logical:logxor logxor)
27 (define logical:lognot lognot)
28 (define logical:ash ash)
29 (define logical:logcount logcount)
30 (define logical:integer-length integer-length)
31 (define logical:bit-extract bit-extract)
32 (define logical:integer-expt integer-expt)
33 (define logical:ipow-by-squaring ipow-by-squaring)
34 (define slib:eval-load eval-load)
35 (define slib:tab #\tab)
36 (define slib:form-feed #\page)
38 (define slib-module (current-module))
40 (define (defined? symbol)
41 (module-defined? slib-module symbol))
60 rev4-optional-procedures
64 (if (defined? 'getenv)
68 (if (defined? 'current-time)
72 (if (defined? 'system)
76 (if (defined? 'array?)
80 (if (defined? 'char-ready?)
84 (if (defined? 'array-for-each)
88 (if (and (string->number "0.0") (inexact? (string->number "0.0")))
92 (if (rational? (string->number "1/19"))
96 (if (real? (string->number "0.0"))
100 (if (complex? (string->number "1+i"))
104 (let ((n (string->number "9999999999999999999999999999999")))
105 (if (and n (exact? n))
110 (define (slib:load name)
111 (save-module-excursion
113 (set-current-module slib-module)
114 (let* ((errinfo (catch 'system-error
119 (errinfo (and errinfo
122 (basic-load (string-append name ".scm"))
124 (lambda args args)))))
126 (apply throw errinfo))))))
128 (define slib:load-source slib:load)
129 (define defmacro:load slib:load)
131 (define slib-parent-dir
132 (let* ((path (%search-load-path "slib/require.scm")))
134 (make-shared-substring path 0 (- (string-length path) 17))
135 (error "Could not find slib/require.scm in " %load-path))))
137 (define-public (implementation-vicinity)
138 (string-append slib-parent-dir "/"))
139 (define (library-vicinity)
140 (string-append (implementation-vicinity) "slib/"))
141 (define (scheme-implementation-type) 'guile)
142 (define (scheme-implementation-version) "")
144 (define (output-port-width . arg) 80)
145 (define (output-port-height . arg) 24)
151 (define offset-time +)
154 (define %system-define define)
157 (procedure->memoizing-macro
159 (if (= (length env) 1)
160 `(define-public ,@(cdr exp))
161 `(%system-define ,@(cdr exp))))))
163 (define (software-type) 'UNIX)
165 (slib:load (in-vicinity (library-vicinity) "require.scm"))
167 (define-public require require:require)
169 ;; {Extensions to the require system so that the user can add new
170 ;; require modules easily.}
172 (define *vicinity-table*
174 (cons 'implementation (implementation-vicinity))
175 (cons 'library (library-vicinity))))
177 (define (install-require-vicinity name vicinity)
178 (let ((entry (assq name *vicinity-table*)))
180 (set-cdr! entry vicinity)
181 (set! *vicinity-table*
182 (acons name vicinity *vicinity-table*)))))
184 (define (install-require-module name vicinity-name file-name)
185 (let ((entry (assq name *catalog*))
186 (vicinity (cdr (assq vicinity-name *vicinity-table*))))
187 (let ((path-name (in-vicinity vicinity file-name)))
189 (set-cdr! entry path-name)
191 (acons name path-name *catalog*))))))