;;; -*- Mode:LISP; Package:SITE-DATA-EDIT; Base:10; Readtable: CL -*- ;;; Copyright (c) Lisp Machine Inc., 1986. ;;; NOW. SPECIAL BOOTSTRAP CONSIDERATIONS ARE DEALT WITH. ;;; 3-May-86 12:34:23 -GJC (DEFUN BOOTSTRAP-SITE-INFORMATION (&OPTIONAL DISK) (LET ((INFO (BOOTSTRAP-READ-INFORMATION (ECASE DISK (NIL NIL) (:SAVE T))))) (LET ((DATA (BOOTSTRAP-READ-SITE-DATA (GETF INFO 'SITE-DIR)))) (LET ((TRANS (BOOTSTRAP-CHECK-SYS-TRANSLATIONS (GETF INFO 'SITE-DIR) (SEND (BOOTSTRAP-LOOKUP-HOST (GETF INFO 'NAME) (GETF DATA 'SI:HOST-ALIST)) :NAME)))) (BOOTSTRAP-SITE-INFORMATION-DOIT DATA INFO TRANS))))) (DEFVAR *BOOTSTRAP-SITE-VARS* '(SI:HOST-ALIST SI:SITE-NAME SI:SITE-OPTION-ALIST SI:MACHINE-LOCATION-ALIST)) (DEFVAR *BOOTSTRAP-OLD* NIL) (DEFUN BOOTSTRAP-SITE-INFORMATION-DOIT (DATA INFO TRANS) (DOLIST (VAR *BOOTSTRAP-SITE-VARS*) (SETF (GETF *BOOTSTRAP-OLD* VAR) (SYMBOL-VALUE VAR))) (SETF (GETF *BOOTSTRAP-OLD* 'PACK-NAME) (FORMAT NIL "~{~A~^ ~}" (MULTIPLE-VALUE-LIST (SI:GET-PACK-NAME)))) (DOLIST (VAR *BOOTSTRAP-SITE-VARS*) (SET VAR (GETF DATA VAR))) (SI:SET-PACK-NAME (GETF INFO 'NAME)) (BOOTSTRAP-SITE-INITIALIZATIONS) (EVAL TRANS) (COND ((GETF INFO 'LOD) (SETQ *BOOTSTRAP-OLD* NIL) (SI:DISK-SAVE (GETF INFO 'LOD))))) (DEFUN BOOTSTRAP-SITE-INITIALIZATIONS () (FORMAT T "~&Running bootstrap site initializations...") (CHAOS:SETUP-MY-ADDRESS) ;; AN INIT, BUT IN WRONG ORDER IN INIT LIST. (LET ((SI:HOST-TABLE-FILE-ALIST NIL)) ;; must bind above to keep reset-non-site-hosts from reading site files again. (INITIALIZATIONS 'SI:SITE-INITIALIZATION-LIST T)) (CHAOS:RESET T) (FORMAT T " done.~%")) (DEFUN BOOTSTRAP-SITE-REVERT () (DOLIST (VAR *BOOTSTRAP-SITE-VARS*) (SET VAR (GETF *BOOTSTRAP-OLD* VAR))) (SI:SET-PACK-NAME (GETF *BOOTSTRAP-OLD* 'PACK-NAME)) (BOOTSTRAP-SITE-INITIALIZATIONS)) (DEFUN BOOTSTRAP-READ-INFORMATION (DISK-SAVEP) (LET (NAME SITE-DIR LOD) (DO () ((SETQ NAME (PROMPT-AND-READ :STRING-OR-NIL "~& Short name of this machine: ")))) (DO () ((WHEN (AND (SETQ SITE-DIR (CATCH-ERROR (PROMPT-AND-READ :PATHNAME-OR-NIL "~& Site file directory : "))) (SETQ SITE-DIR (SEND SITE-DIR :NEW-PATHNAME :HOST "LM" :NAME "SITE" :TYPE "LISP" :VERSION :NEWEST))) (LET ((TEMP (OPEN SITE-DIR :ERROR NIL :direction nil))) (COND ((ERRORP TEMP) (FORMAT T "Incorrect Site File directory: ~S~%" site-dir) (send temp :report standard-output) nil) ('else (setq site-dir (send temp :truename)))))))) (when disk-savep (LET ((L (SUBSET #'(LAMBDA (X) (STRING-EQUAL "LOD" (CAR X) :END2 3)) (SI:PARTITION-LIST))) (CB (SI:CURRENT-BAND))) (DO ((x)) ((PROGN (FORMAT T "~&Available LOD Partitions:~%") (DOLIST (P L) (FORMAT T "~4A ~14A ~25S ~5D blocks.~%" (NTH 0 P) (COND ((STRING-EQUAL CB (NTH 0 P)) "(current band)") ((STRING-EQUAL (NTH 3 P) "") "(unused band)") ('ELSE "(a lisp band)")) (NTH 3 P) (NTH 2 P))) (SETQ LOD (PROMPT-AND-READ :STRING-OR-NIL "~& LOD band to save to :")) (setq x lod) (WHEN (STRING-EQUAL "LOD" x :END2 3) (SETQ x (SUBSTRING x 3))) (COND ((FIXP (CATCH-ERROR (PARSE-INTEGER x))) (SETQ x (PARSE-INTEGER x)) (LET ((FL (FORMAT NIL "LOD~D" x))) (DO ((P L (CDR P))) ((NULL P) (FORMAT T "Not an available load partition: ~S" LOD) NIL) (IF (string-equal (caar p) fl) (return (setq lod x)))))))))))) (list 'NAME name 'SITE-DIR site-dir 'LOD lod))) (DEFUN BOOTSTRAP-READ-SITE-DATA (DIR) (LET ((FS (LIST (SEND DIR :NEW-PATHNAME :NAME "SITE" :TYPE "QFASL" :VERSION :NEWEST) (SEND DIR :NEW-PATHNAME :NAME "HSTTBL" :TYPE "QFASL" :VERSION :NEWEST) (SEND DIR :NEW-PATHNAME :NAME "LMLOCS" :TYPE "QFASL" :VERSION :NEWEST)))) (remprop 'si:machine-location-alist :source-file) (PROGV *BOOTSTRAP-SITE-VARS* (MAKE-LIST (LENGTH *BOOTSTRAP-SITE-VARS*)) (DOLIST (F FS) (LOAD F :SET-DEFAULT-PATHNAME NIL)) (DOLIST (ELEM SI:HOST-ALIST) (SI:GET-ALIST-ELEM-HOST ELEM)) (MAPCAN #'(LAMBDA (VAR) (LIST VAR (SYMBOL-VALUE VAR))) *BOOTSTRAP-SITE-VARS*)))) (DEFUN BOOTSTRAP-LOOKUP-HOST (NAME ALIST) (OR (DOLIST (A ALIST) (WHEN (MEM #'STRING-EQUAL NAME (SI:HOST-NAME-LIST A)) (RETURN (SI:HOST-INSTANCE A)))) (FERROR NIL "Host ~S not found in bootstrap data" NAME))) (DEFVAR *RELEASE-ROOT-NAME* "RELEASE-3") (DEFVAR *RELEASE-ROOT-DEPTH* 5) (DEFUN BOOTSTRAP-CHECK-SYS-TRANSLATIONS (DIR SYS-HOST-NAME) (LET* ((NP (SEND DIR :NEW-PATHNAME :NAME NIL :TYPE NIL :VERSION NIL)) (SP (SEND DIR :NEW-PATHNAME :NAME "SYS" :TYPE "TRANSLATIONS" :VERSION :NEWEST)) (FORM `(FS:SET-LOGICAL-PATHNAME-HOST "SYS" :PHYSICAL-HOST ,SYS-HOST-NAME :TRANSLATIONS '(("CHAOS;" ,(SEND NP :STRING-FOR-HOST)) ("SITE;" ,(SEND NP :STRING-FOR-HOST)) ,@(DO ((L NIL (CONS (LIST (FORMAT NIL "~{~A;~}" (MAKE-LIST DEPTH :INITIAL-ELEMENT '*)) (SEND (SEND NP :NEW-PATHNAME :DIRECTORY (CONS *RELEASE-ROOT-NAME* (MAKE-LIST DEPTH :INITIAL-ELEMENT :WILD))) :STRING-FOR-HOST)) L)) (DEPTH *RELEASE-ROOT-DEPTH* (1- DEPTH))) ((ZEROP DEPTH) L)))))) (FLET ((WRITE-FORM () (WITH-OPEN-FILE (S SP :DIRECTION :OUTPUT) (FORMAT S ";; SYS.TRANSLATIONS WRITTEN BY BOOTSTRAP SITE GENERATOR~%") (PPRINT FORM S) (TERPRI S)))) (COND ((NOT (PROBE-FILE SP)) (WRITE-FORM)) ((WITH-OPEN-FILE (S SP) (NOT (EQUALP FORM (LET ((*PACKAGE* (FIND-PACKAGE "USER")) (*READTABLE* (SI:FIND-READTABLE-NAMED "ZL"))) (READ S))))) (WRITE-FORM))) FORM)))