Added reset-environment-variables!
authorHenry M. Wu <edu/mit/csail/zurich/mhwu>
Thu, 28 May 1992 23:21:48 +0000 (23:21 +0000)
committerHenry M. Wu <edu/mit/csail/zurich/mhwu>
Thu, 28 May 1992 23:21:48 +0000 (23:21 +0000)
v7/src/runtime/dosprm.scm
v7/src/runtime/site.scm.dos

index aa85418cb1d94b460b9a1955e2e4c4db5575bdf7..e0cde5b233ffbe2b60e552c99d52f3400bd70c06 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/dosprm.scm,v 1.4 1992/05/28 18:12:14 mhwu Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/dosprm.scm,v 1.5 1992/05/28 23:18:18 mhwu Exp $
 
 Copyright (c) 1992 Massachusetts Institute of Technology
 
@@ -143,21 +143,20 @@ MIT in each case. |#
 (define get-environment-variable)
 (define set-environment-variable!)
 (define delete-environment-variable!)
+(define reset-environment-variables!)
 
-(let ((environment-variables '())
-      (*variable-deleted* "This var deleted"))
+(let ((environment-variables '()))
+  ;; Kludge: since getenv returns false for unbound,
+  ;; that can also be the marker for a deleted variable
+  (define-integrable *variable-deleted* false)
   (set! get-environment-variable
        (lambda (variable)
-         (if (string? variable)
-             (let ((scheme-value (assoc variable environment-variables)))
-               (cond ((not scheme-value)
-                      ((ucode-primitive get-environment-variable) variable))
-                     ((eq? (cdr scheme-value) *variable-deleted*)
-                      false)
-                     (else
-                      (cdr scheme-value))))
-             (error "GET-ENVIRONMENT-VARIABLE: Variable must be a string"
-                    variable))))
+         (cond ((not (string? variable))
+                (error "GET-ENVIRONMENT-VARIABLE: Variable must be a string"
+                       variable))
+               ((assoc variable environment-variables) => cdr)
+               (else
+                ((ucode-primitive get-environment-variable) variable)))))
   (set! set-environment-variable!
        (lambda (variable value)
          (if (string? variable)
@@ -175,6 +174,8 @@ MIT in each case. |#
   (set! delete-environment-variable!
        (lambda (variable)
          (set-environment-variable! variable *variable-deleted*)))
+  (set! reset-environment-variables!
+       (lambda () (set! environment-variables '())))
 ) ; End LET
 
 (define (dos/user-home-directory user-name)
@@ -202,4 +203,8 @@ MIT in each case. |#
 (define (make-directory name)
   ((ucode-primitive directory-make)
    (->namestring (pathname-as-directory (merge-pathnames name)))))
\ No newline at end of file
+
+\f
+;;; Queues after-restart daemon to clean up environment space
+
+(add-event-receiver! event:after-restart reset-environment-variables!)
index f7fb94f5b4523384abddc5cfe1b1bee642d8d3dd..ded94ef9de346d45e12ebcaa777baa05d4ee6d41 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/site.scm.dos,v 1.5 1992/05/28 22:43:20 mhwu Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/site.scm.dos,v 1.6 1992/05/28 23:21:48 mhwu Exp $
 
 Copyright (c) 1988-1992 Massachusetts Institute of Technology
 
@@ -52,6 +52,14 @@ MIT in each case. |#
      (add-directory-rewriting-rule! path "$mitscheme_inf_directory"))
    '("/scheme")))
 
+(let ((set-default-inf-directory!
+       (lambda ()
+        (if (not (get-environment-variable "mitscheme_inf_directory"))
+            (set-environment-variable! "mitscheme_inf_directory"
+                                       "c:/scheme")))))
+  (set-default-inf-directory!)
+  (add-event-receiver! event:after-restart set-default-inf-directory!))  
+         
 ;;; Dos specific:
 ;;; Timer hook to get interrupt keys
 
@@ -65,4 +73,4 @@ MIT in each case. |#
             (get-fixed-objects-vector)
             (fixed-objects-vector-slot 'SYSTEM-INTERRUPT-VECTOR))))
     (vector-set! sv timer-slot typeahead-timer-interrupt))
-) ; End IN-PACKAGE
\ No newline at end of file
+) ; End IN-PACKAGE