Make ->environment not fail when the file will not be loaded.
authorGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Tue, 20 Oct 1992 21:47:52 +0000 (21:47 +0000)
committerGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Tue, 20 Oct 1992 21:47:52 +0000 (21:47 +0000)
v7/src/edwin/edwin.ldr

index 4e273baa481ac1f470c3b70362cc1ad982a67138..e1cae7fcd3a1d46e13f706e7fa475c9d2f030537 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: edwin.ldr,v 1.35 1992/10/20 20:02:23 jinx Exp $
+$Id: edwin.ldr,v 1.36 1992/10/20 21:47:52 jinx Exp $
 
 Copyright (c) 1989-1992 Massachusetts Institute of Technology
 
@@ -40,168 +40,178 @@ MIT in each case. |#
 (lambda (package/loader key-alist)
   (let ((to-avoid-list (if (file-exists? "edwin.bad")
                           (fasload "edwin.bad")
-                          '())))
-    (define (load file env)
-      (if (string-member? file to-avoid-list)
-         (begin (newline)
-                (write-string "* skipping ")
-                (write-string file)
-                false)
-         (begin (package/loader file env)
-                true)))
-    (define (load-set files env)
-      (if (null? files)
-         true
-         (let ((val (load (car files) env)))
-           (boolean-and val (load-set (cdr files) env)))))
-    (define (load-set-and-initialize! files env)
-      (and (load-set files env)
-          ((access initialize-package! env))))
-    (define (lookup var)
-      (cond ((assq var key-alist) => cdr)
-           (else false)))
-    (define (load-case var alist env)
-      (for-each (lambda (key/file)
-                 (and (eq? (lookup var) (car key/file))
-                      (load (cdr key/file) env)))
-               alist))
-    (define string-member? (member-procedure string=?))
-    (define (boolean-and a b) (and a b))
-
-    (let ((environment (->environment '(EDWIN))))
-      (load "utils" environment)
-      (load "nvector" environment)
-      (load "ring" environment)
-      (load "strtab" environment)
-      (load "strpad" environment)
-      (load "macros" (->environment '(EDWIN MACROS)))
-      (load "class" environment)
-      (load "clscon" (->environment '(EDWIN CLASS-CONSTRUCTOR)))
-      (load "clsmac" (->environment '(EDWIN CLASS-MACROS)))
-      (load "xform"
-           (->environment '(EDWIN CLASS-MACROS TRANSFORM-INSTANCE-VARIABLES)))
-      (load "paths" environment)
-      (load "struct" environment)
-      (load "grpops" (->environment '(EDWIN GROUP-OPERATIONS)))
-      (load "regops" environment)
-      (load "motion" environment)
-      (load "search" environment)
-      (load "image" environment)
-      (load "comman" environment)
-      (load "comtab" (->environment '(EDWIN COMTAB)))
-      (load "modes" environment)
-      (load "buffer" environment)
-      (load "bufset" environment)
-      (load "undo" (->environment '(EDWIN UNDO)))
-      (load "display" (->environment '(EDWIN DISPLAY-TYPE)))
-      (load "screen" (->environment '(EDWIN SCREEN)))
-      (load "winren" environment)
-
-      (let ((environment (->environment '(EDWIN WINDOW))))
-       (load "window" environment)
-       (load "utlwin" environment)
-       (load "bufwin" environment)
-       (load "bufwfs" environment)
-       (load "bufwiu" environment)
-       (load "bufwmc" environment)
-       (load "comwin" (->environment '(EDWIN WINDOW COMBINATION)))
-       (load "modwin" environment)
-       (load "buffrm" environment)
-       (load "edtfrm" environment))
-      (load "calias" environment)
-      (load-set-and-initialize! '("xterm")
-                               (->environment '(EDWIN SCREEN X-SCREEN)))
-      (load-set-and-initialize! '("key")
-                               (->environment '(EDWIN KEYS)))
-
-      (let ((env (->environment '(EDWIN SCREEN CONSOLE-SCREEN))))
-       (load-set-and-initialize! '("termcap" "tterm") env)
-       (if (eq? (lookup 'os-type) 'dos)
-           (begin
-             (load "ansi" env)
-             (if (load "bios" env)
-                 ((access bios-initialize-package! env))))))
-
-      (load "edtstr" environment)
-      (load "editor" environment)
-      (load "curren" environment)
-      (load "simple" environment)
-      (load "debuge" environment)
-      (load "modlin" (->environment '(EDWIN MODELINE-STRING)))
-      (load "input" (->environment '(EDWIN KEYBOARD)))
-      (load "prompt" (->environment '(EDWIN PROMPT)))
-      (load "comred" (->environment '(EDWIN COMMAND-READER)))
-      (load "bufinp" (->environment '(EDWIN BUFFER-INPUT-PORT)))
-      (load "bufout" (->environment '(EDWIN BUFFER-OUTPUT-PORT)))
-      (load "winout" (->environment '(EDWIN WINDOW-OUTPUT-PORT)))
-      (load "things" environment)
-      (load "tparse" environment)
-      (load "syntax" environment)
-      (load "regexp" (->environment '(EDWIN REGULAR-EXPRESSION)))
-      (load "rgxcmp" (->environment '(EDWIN REGULAR-EXPRESSION-COMPILER)))
-      (load "linden" (->environment '(EDWIN LISP-INDENTATION)))
-
-      (load-case 'os-type '((unix . "unix") (dos . "dos")) environment)
-
-      (load "fileio" environment)
-
-      (if (eq? (lookup 'os-type) 'unix)
-         (load-option 'SUBPROCESS))
-      (load-case 'os-type '((unix . "process") (dos . "dosproc"))
-                (->environment '(EDWIN PROCESS)))
-
-      (load "argred" (->environment '(EDWIN COMMAND-ARGUMENT)))
-      (load "autold" environment)
-      (load "autosv" environment)
-      (load "basic" environment)
-      (load "bufcom" environment)
-      (load "bufmnu" (->environment '(EDWIN BUFFER-MENU)))
-      (load "c-mode" environment)
-      (load "cinden" (->environment '(EDWIN C-INDENTATION)))
-      (load "comhst" environment)
-      (load "comint" environment)
-      (load "compile" environment)
-      (load "debug" (->environment '(EDWIN DEBUGGER)))
-
-      (let ((env (->environment '(EDWIN DIRED))))
-       (load "dired" env)
+                          '()))
+       (bad-environment-tag '*BAD-ENVIRONMENT*))
+    (let ((->environment
+          (lambda (spec)
+            (if (name->package spec)
+                (->environment spec)
+                (cons bad-environment-tag spec)))))
+      (define (load file env)
+       (cond ((string-member? file to-avoid-list)
+              (newline)
+              (write-string "* skipping ")
+              (write-string file)
+              false)
+             ((and (pair? env)
+                   (eq? (car env) bad-environment-tag))
+              (error "Attempting to load into non-existent package"
+                     file (cdr env)))
+             (else (package/loader file env)
+                   true)))
+      (define (load-set files env)
+       (if (null? files)
+           true
+           (let ((val (load (car files) env)))
+             (boolean-and val (load-set (cdr files) env)))))
+      (define (load-set-and-initialize! files env)
+       (and (load-set files env)
+            ((access initialize-package! env))))
+      (define (lookup var)
+       (cond ((assq var key-alist) => cdr)
+             (else false)))
+      (define (load-case var alist env)
+       (for-each (lambda (key/file)
+                   (and (eq? (lookup var) (car key/file))
+                        (load (cdr key/file) env)))
+                 alist))
+      (define string-member? (member-procedure string=?))
+      (define (boolean-and a b) (and a b))
+
+      (let ((environment (->environment '(EDWIN))))
+       (load "utils" environment)
+       (load "nvector" environment)
+       (load "ring" environment)
+       (load "strtab" environment)
+       (load "strpad" environment)
+       (load "macros" (->environment '(EDWIN MACROS)))
+       (load "class" environment)
+       (load "clscon" (->environment '(EDWIN CLASS-CONSTRUCTOR)))
+       (load "clsmac" (->environment '(EDWIN CLASS-MACROS)))
+       (load "xform"
+             (->environment '(EDWIN CLASS-MACROS TRANSFORM-INSTANCE-VARIABLES)))
+       (load "paths" environment)
+       (load "struct" environment)
+       (load "grpops" (->environment '(EDWIN GROUP-OPERATIONS)))
+       (load "regops" environment)
+       (load "motion" environment)
+       (load "search" environment)
+       (load "image" environment)
+       (load "comman" environment)
+       (load "comtab" (->environment '(EDWIN COMTAB)))
+       (load "modes" environment)
+       (load "buffer" environment)
+       (load "bufset" environment)
+       (load "undo" (->environment '(EDWIN UNDO)))
+       (load "display" (->environment '(EDWIN DISPLAY-TYPE)))
+       (load "screen" (->environment '(EDWIN SCREEN)))
+       (load "winren" environment)
+
+       (let ((environment (->environment '(EDWIN WINDOW))))
+         (load "window" environment)
+         (load "utlwin" environment)
+         (load "bufwin" environment)
+         (load "bufwfs" environment)
+         (load "bufwiu" environment)
+         (load "bufwmc" environment)
+         (load "comwin" (->environment '(EDWIN WINDOW COMBINATION)))
+         (load "modwin" environment)
+         (load "buffrm" environment)
+         (load "edtfrm" environment))
+       (load "calias" environment)
+       (load-set-and-initialize! '("xterm")
+                                 (->environment '(EDWIN SCREEN X-SCREEN)))
+       (load-set-and-initialize! '("key")
+                                 (->environment '(EDWIN KEYS)))
+
+       (let ((env (->environment '(EDWIN SCREEN CONSOLE-SCREEN))))
+         (load-set-and-initialize! '("termcap" "tterm") env)
+         (if (eq? (lookup 'os-type) 'dos)
+             (begin
+               (load "ansi" env)
+               (if (load "bios" env)
+                   ((access bios-initialize-package! env))))))
+
+       (load "edtstr" environment)
+       (load "editor" environment)
+       (load "curren" environment)
+       (load "simple" environment)
+       (load "debuge" environment)
+       (load "modlin" (->environment '(EDWIN MODELINE-STRING)))
+       (load "input" (->environment '(EDWIN KEYBOARD)))
+       (load "prompt" (->environment '(EDWIN PROMPT)))
+       (load "comred" (->environment '(EDWIN COMMAND-READER)))
+       (load "bufinp" (->environment '(EDWIN BUFFER-INPUT-PORT)))
+       (load "bufout" (->environment '(EDWIN BUFFER-OUTPUT-PORT)))
+       (load "winout" (->environment '(EDWIN WINDOW-OUTPUT-PORT)))
+       (load "things" environment)
+       (load "tparse" environment)
+       (load "syntax" environment)
+       (load "regexp" (->environment '(EDWIN REGULAR-EXPRESSION)))
+       (load "rgxcmp" (->environment '(EDWIN REGULAR-EXPRESSION-COMPILER)))
+       (load "linden" (->environment '(EDWIN LISP-INDENTATION)))
+
+       (load-case 'os-type '((unix . "unix") (dos . "dos")) environment)
+
+       (load "fileio" environment)
+
        (if (eq? (lookup 'os-type) 'unix)
-           (load "dirunx" env)))
-
-      (load "evlcom" environment)
-      (load "filcom" environment)
-      (load "fill" environment)
-      (load "hlpcom" environment)
-      (load "info" (->environment '(EDWIN INFO)))
-      (load "intmod" (->environment '(EDWIN INFERIOR-REPL)))
-      (load "keymap" (->environment '(EDWIN COMMAND-SUMMARY)))
-      (load "kilcom" environment)
-      (load "kmacro" environment)
-      (load "lincom" environment)
-      (load "lspcom" environment)
-      (load "malias" (->environment '(EDWIN MAIL-ALIAS)))
-      (load "motcom" environment)
-      (load "occur" (->environment '(EDWIN OCCURRENCE)))
-      (load "rcs" (->environment '(EDWIN RCS)))
-      (load "reccom" (->environment '(EDWIN RECTANGLE)))
-      (load "regcom" (->environment '(EDWIN REGISTER-COMMAND)))
-      (load "replaz" environment)
-      (load "rmail" (->environment '(EDWIN RMAIL)))
-      (load "rmailsrt" (->environment '(EDWIN RMAIL)))
-      (load "schmod" environment)
-      (load "sendmail" (->environment '(EDWIN SENDMAIL)))
-      (load "sercom" environment)
-      (load "iserch" (->environment '(EDWIN INCREMENTAL-SEARCH)))
-      (load "shell" environment)
-      (load "tagutl" (->environment '(EDWIN TAGS)))
-      (load "texcom" environment)
-      (load "wincom" environment)
-      (load "scrcom" environment)
-      (load "xcom" (->environment '(EDWIN X-COMMANDS)))
-      (load-set '("modefs" "xmodef") environment)
-      (load "rename" environment)
-      (load "loadef" environment)
-      (load-set-and-initialize! '("bochser" "bochsmod")
-                               (->environment '(EDWIN BOCHSER)))
-      (load "notify" environment)
-      (load "outline" environment))))
\ No newline at end of file
+           (load-option 'SUBPROCESS))
+       (load-case 'os-type '((unix . "process") (dos . "dosproc"))
+                  (->environment '(EDWIN PROCESS)))
+
+       (load "argred" (->environment '(EDWIN COMMAND-ARGUMENT)))
+       (load "autold" environment)
+       (load "autosv" environment)
+       (load "basic" environment)
+       (load "bufcom" environment)
+       (load "bufmnu" (->environment '(EDWIN BUFFER-MENU)))
+       (load "c-mode" environment)
+       (load "cinden" (->environment '(EDWIN C-INDENTATION)))
+       (load "comhst" environment)
+       (load "comint" environment)
+       (load "compile" environment)
+       (load "debug" (->environment '(EDWIN DEBUGGER)))
+
+       (let ((env (->environment '(EDWIN DIRED))))
+         (load "dired" env)
+         (if (eq? (lookup 'os-type) 'unix)
+             (load "dirunx" env)))
+
+       (load "evlcom" environment)
+       (load "filcom" environment)
+       (load "fill" environment)
+       (load "hlpcom" environment)
+       (load "info" (->environment '(EDWIN INFO)))
+       (load "intmod" (->environment '(EDWIN INFERIOR-REPL)))
+       (load "keymap" (->environment '(EDWIN COMMAND-SUMMARY)))
+       (load "kilcom" environment)
+       (load "kmacro" environment)
+       (load "lincom" environment)
+       (load "lspcom" environment)
+       (load "malias" (->environment '(EDWIN MAIL-ALIAS)))
+       (load "motcom" environment)
+       (load "occur" (->environment '(EDWIN OCCURRENCE)))
+       (load "rcs" (->environment '(EDWIN RCS)))
+       (load "reccom" (->environment '(EDWIN RECTANGLE)))
+       (load "regcom" (->environment '(EDWIN REGISTER-COMMAND)))
+       (load "replaz" environment)
+       (load "rmail" (->environment '(EDWIN RMAIL)))
+       (load "rmailsrt" (->environment '(EDWIN RMAIL)))
+       (load "schmod" environment)
+       (load "sendmail" (->environment '(EDWIN SENDMAIL)))
+       (load "sercom" environment)
+       (load "iserch" (->environment '(EDWIN INCREMENTAL-SEARCH)))
+       (load "shell" environment)
+       (load "tagutl" (->environment '(EDWIN TAGS)))
+       (load "texcom" environment)
+       (load "wincom" environment)
+       (load "scrcom" environment)
+       (load "xcom" (->environment '(EDWIN X-COMMANDS)))
+       (load-set '("modefs" "xmodef") environment)
+       (load "rename" environment)
+       (load "loadef" environment)
+       (load-set-and-initialize! '("bochser" "bochsmod")
+                                 (->environment '(EDWIN BOCHSER)))
+       (load "notify" environment)
+       (load "outline" environment)))))
\ No newline at end of file