;;; -*- Mode:LISP; Package:(HOSTOBJ :USE (LISP GLOBAL OBJ)); Readtable:CL; Base:10 -*- ;;; ;;; Functions to create/edit machine/host objects ;;; (in-package 'hostobj :use '(lisp global obj)) (eval-when (eval compile load) (shadowing-import '( user:defobedit user:editlist user:editlabel user:edit user:edit-func user:editable user:shadowed-editable ))) (export '(make-host)) (defconstant *valid-hw-types* '(lambda symbolics vax unix)) (defclassvars *single-host-system* (editlist `((system-name "System Name" :sexp) (first-name "Host Name" :sexp) (nicknames "Machine Nicknames" :string-list) (host-hardware "Hardware class" :choose ,*valid-hw-types*) (host-software "Machine type" :sexp))) (editlabel "Edit/Verify Host Information")) (defobedit *single-host-system*) (defclassvars *multi-host-system* (editlist '((system-name "System Name" :sexp))) (editlabel "Edit/Verify System Information")) (defobedit *multi-host-system*) (defobfun (edit *multi-host-system*) () (funcall edit-func) (dolist (host hosts) (ask host (edit)))) (defclassvars *network-host* (editlist '((file-system-type "File System" :sexp) (networks "Networks" :choose (chaos tcp both))))) (defobedit *network-host*) (defclassvars *chaos-host* (editlist '((chaos@ "Chaosnet address" :documentation "Enter an octal address" :number)))) (defobedit *chaos-host*) (defconstant *lambda-types* `((lambda ,*lam1*) (lambda-plus ,*lam1p*) (lambda-2x2 ,*lam2*) (lambda-2x2-plus ,*lam2p*) (lambda-3x3 ,*lam3*))) (defclassvars *lambda* (editlist `((hw-type "Lambda type" :choose ,(mapcar #'car *lambda-types*)))) (editlabel "Edit/Verify Lambda System Info")) (defobedit *lambda*) (defclassvars *lispm-host* (editlist '((host-hardware "Hardware type" :display-only) (host-software "Software type" :display-only) (file-system-type "File System" :display-only))) (editlabel "Edit/Verify Lisp Machine Info")) (defobedit *lispm-host*) (defclassvars *vax* (editlist '((hw-type "Hardware type" :display-only) (host-software :choose (unix vms)))) (editlabel "Edit/Verify VAX Host Information")) (defobedit *vax*) (defun remake-edit-infer(obj newobj) (setq obj (remake-obj obj (oneof newobj))) (ask obj (infer)) (ask obj (edit)) (ask obj (infer)) obj) (defun make-lambda(obj) (let((hw (ask obj hw-type))) (setq obj (remake-edit-infer obj (case hw (lambda *lam1*) (lambda-plus *lam1p*) (lambda-2x2 *lam2*) (lambda-2x2-plus *lam2p*) ; (lambda-3x3 *lam3*) (t (ferror nil "invalid Lambda hardware type ~s" hw)))))) obj) (defun make-symbolics(obj) (print 'symbolics) (remake-edit-infer obj (oneof *symbolics-host*))) (defun make-vax(obj) (setq obj (remake-edit-infer obj *vax*)) (ask obj (edit)) (case (ask obj system-type) (unix (setq obj (remake-edit-infer obj *vax-unix*))) (vms (setq obj (remake-edit-infer obj *vax-vms*)))) obj) (defun make-host(&optional hw-type &rest args) (let((obj (apply #'oneof *single-host-system* args))) (if hw-type (ask obj (have 'hw-type hw-type)) (ask obj (edit))) (case (ask obj hw-type) (lambda (setq obj (make-lambda obj))) (symbolics (setq obj (make-symbolics obj))) (vax (setq obj (make-vax obj)))) obj))