diff options
Diffstat (limited to 'scheme48.init')
| -rw-r--r-- | scheme48.init | 118 | 
1 files changed, 79 insertions, 39 deletions
diff --git a/scheme48.init b/scheme48.init index 0a91cf9..c7e91af 100644 --- a/scheme48.init +++ b/scheme48.init @@ -8,26 +8,33 @@  ,config  ,load =scheme48/misc/packages.scm  (define-structure slib-primitives -  (export s48-modulo s48-atan s48-char->integer +  (export s48-char->integer +	  s48-use!  	  s48-getenv s48-current-time s48-time-seconds +	  (s48-access-mode :syntax) +	  s48-accessible?  	  s48-system  	  s48-current-error-port  	  s48-force-output  	  s48-with-handler  	  s48-ascii->char  	  s48-error s48-warn -	  s48-make-string-input-port -	  s48-make-string-output-port -	  s48-string-output-port-output  	  s48-exit)    (open (modify scheme -                (rename (modulo s48-modulo) (atan s48-atan) -			(char->integer s48-char->integer))) -	; primitives +                (rename (char->integer s48-char->integer))) +	;; for `s48-use!' procedure +	(subset ensures-loaded (ensure-loaded)) +	(subset environments (environment-ref)) +	(subset package-commands-internal (config-package)) +	(subset package-mutation (package-open!)) +	;; primitives  	(modify posix  		(rename (current-time s48-current-time)  			(time-seconds s48-time-seconds)  			(lookup-environment-variable s48-getenv))) +	(modify posix-files +		(prefix s48-) +		(expose access-mode accessible?))  	(modify c-system-function (rename (system s48-system)))  	(modify i/o  		(rename (current-error-port s48-current-error-port) @@ -35,15 +42,14 @@  	(modify handle (rename (with-handler s48-with-handler)))  	(modify ascii  (rename (ascii->char s48-ascii->char)))  	(modify signals (rename (error s48-error) (warn s48-warn))) -	(modify root-scheduler (rename (scheme-exit-now s48-exit))) -	(modify extended-ports -		(rename (make-string-input-port -			 s48-make-string-input-port) -			(make-string-output-port -			 s48-make-string-output-port) -			(string-output-port-output -			 s48-string-output-port-output)))) -  (begin #t)) +	(modify root-scheduler (rename (scheme-exit-now s48-exit)))) +  (begin +    ;; Here used to import builtin SRFI modules. +    (define (s48-use! struct-name) +      (let ((struc (environment-ref (config-package) struct-name))) +	(ensure-loaded struc) +	(package-open! (interaction-environment) (lambda () struc)))) +    ))  ,user  ,open slib-primitives @@ -164,14 +170,14 @@  	    thunk  	    (lambda () (exchange old))))))) -;;@ *FEATURES* is a list of symbols naming the (SLIB) features +;;@ SLIB:FEATURES is a list of symbols naming the (SLIB) features  ;;; initially supported by this implementation. -(define *features* +(define slib:features        '(  	source				;can load scheme source files  					;(SLIB:LOAD-SOURCE "filename") -;;;	compiled			;can load compiled files -					;(SLIB:LOAD-COMPILED "filename") +	compiled			;can load compiled files +					; here used for native modules  	vicinity  	srfi-59 @@ -223,7 +229,7 @@  					;Programs by Abelson and Sussman.  	defmacro			;has Common Lisp DEFMACRO  ;;;	record				;has user defined data structures -	string-port			;has CALL-WITH-INPUT-STRING and +;;;	string-port			;has CALL-WITH-INPUT-STRING and  					;CALL-WITH-OUTPUT-STRING  ;;;	sort  ;;;	pretty-print @@ -259,14 +265,7 @@  ;;; (FILE-EXISTS? <string>)  (define (file-exists? f) -  (call-with-current-continuation -   (lambda (k) -     (s48-with-handler -      (lambda (condition decline) -	(k #f)) -      (lambda () -	(close-input-port (open-input-file f)) -	#t))))) +  (s48-accessible? f (s48-access-mode exists)))  ;;; (DELETE-FILE <string>)  (define (delete-file file-name) @@ -432,7 +431,8 @@  ;;; (SLIB:LOAD-COMPILED "foo") should load the file that was produced  ;;; by compiling "foo.scm" if this implementation can compile files.  ;;; See feature 'COMPILED. -(define slib:load-compiled load) +;;; See creation of "implcat" file at end of this file. +(define slib:load-compiled s48-use!)  ;;; At this point SLIB:LOAD must be able to load SLIB files.  (define slib:load slib:load-source) @@ -468,14 +468,6 @@  (define (program-arguments) (cons "scheme48" *args*))  ;@ -(define (call-with-output-string proc) -  (let ((port (s48-make-string-output-port))) -    (proc port) -    (s48-string-output-port-output port))) -(define (call-with-input-string string proc) -  (proc (s48-make-string-input-port string))) - -;@  (define (current-time)    (s48-time-seconds (s48-current-time)))  (define (difftime caltime1 caltime0) @@ -483,9 +475,57 @@  (define (offset-time caltime offset)    (+ caltime offset)) +;;; Scheme48-specific code +,push +,config + +;; 'record + +(define-interface slib-record-interface +  (export record-modifier record-accessor record-constructor +          record-predicate make-record-type)) + +(define-structure slib-record slib-record-interface +  (open scheme record-types) +  (files ((=scheme48 slib) record))) + +;; 'string-port + +(define-interface slib-string-port-interface +  (export call-with-output-string call-with-input-string)) + +(define-structure slib-string-port slib-string-port-interface +  (open scheme extended-ports) +  (files ((=scheme48 slib) strport))) +,pop + +;;; Write slib.image  (require #f)  ,collect  ,batch off -,dump slib.image "(slib 3a3)" +,dump slib.image "(slib 3a4)" + +;;; Put Scheme48-specific code into catalog +(call-with-output-file (in-vicinity (implementation-vicinity) "implcat") +  (lambda (op) +    (define (display* . args) +      (for-each (lambda (arg) (display arg op)) args) +      (newline op)) +    (display* "(") +    (for-each +     (lambda (idx) +       (define srfi +	 (string->symbol (string-append "srfi-" (number->string idx)))) +       (display* " " (list srfi 'compiled srfi))) +     '(1 2 5 6 7 8 9 11 13 14 16 17 23 25 26 27 28 31 34 35 36 37 42 45)) +    (for-each +     (lambda (f) +       (define module +	 (string->symbol (string-append "slib-" (symbol->string f)))) +       (display* " " (list f 'compiled module))) +     '(record string-port)) +    (display* ")"))) +(require 'new-catalog) +  ,exit  | 
