;;; -*- Mode:Lisp; Readtable:CL; Package:USER; Base:10; Patch-File:T -*- ;;; Patch file for System version 121.5 ;;; Reason: ;;; Make sure main name comes last in list of host names ;;; when parsing a HOSTS2 table. ;;; Written 13-Jan-87 14:37:45 by PHILIPP at site LMI Cambridge ;;; while running on Curley from band 2 ;;; with Experimental System 121.4, Experimental Lambda-Diag 15.0, Experimental ZMail 70.0, Experimental KERMIT 32.0, Experimental Unix-Interface 10.0, Experimental Local-File 72.0, Experimental FILE-Server 21.0, Experimental Tape 13.0, Experimental TCP-Kernel 41.0, Experimental TCP-User 64.0, Experimental TCP-Server 47.0, Experimental DOE-Macsyma 22.0, microcode 1730, SDU Boot Tape 3.14, SDU ROM 103. ; From file DJ: L.NETWORK; TABLE.LISP#8 at 13-Jan-87 14:37:46 #10R NETWORK#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "NETWORK"))) (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; TABLE  " (DEFUN GENERATE-FROM-HOSTS2-TABLE-2 (INPUT-FILE OUTPUT-STREAM) (WITH-OPEN-FILE (INPUT-STREAM INPUT-FILE :DIRECTION :INPUT :CHARACTERS T) (DO ((LINE) (EOF) (I) (J) (NI) (NJ) (HOSTL) (DELIM) (RESULT)) (NIL) (MULTIPLE-VALUE (LINE EOF) (SEND INPUT-STREAM :LINE-IN NIL)) (AND EOF (RETURN RESULT)) (MULTIPLE-VALUE (I J) (PARSE-HOSTS2-TABLE-TOKEN LINE 0)) (COND ((AND I (STRING-EQUAL LINE "HOST" :START1 I :END1 J)) ;; Host name (MULTIPLE-VALUE (NI NJ) (PARSE-HOSTS2-TABLE-TOKEN LINE (1+ J))) (MULTIPLE-VALUE (I J DELIM) (PARSE-HOSTS2-TABLE-TOKEN LINE (1+ NJ))) (SETQ HOSTL (NCONS (SUBSTRING LINE NI NJ))) (IF (CHAR= DELIM #\[) (DO ((L NIL) (I1) (J1)) ((CHAR= DELIM #\]) (INCF J) (NREVERSE L)) (MULTIPLE-VALUE (I1 J1 DELIM) (PARSE-HOSTS2-TABLE-TOKEN LINE (1+ J))) (IF (CHAR= DELIM #\SP) (MULTIPLE-VALUE (I J DELIM) (PARSE-HOSTS2-TABLE-TOKEN LINE (1+ J1))) (SETQ I I1 J J1 J1 I1)) (ADD-HOSTS2-TABLE-ADDRESS LINE I1 J1 I J HOSTL)) (LET ((I1 I) (J1 J)) (IF (char= DELIM #\SP) (MULTIPLE-VALUE (I J) (PARSE-HOSTS2-TABLE-TOKEN LINE (1+ J))) (SETQ I I1 J J1 J1 I1)) (ADD-HOSTS2-TABLE-ADDRESS LINE I1 J1 I J HOSTL))) ; (COND ((OR (GET HOSTL :CHAOS) ;If there were any chaosnet addresses ; ;; Include some popular ARPA sites for speed in SUPDUP/TELNET, etc. ; (SYS:MEMBER-EQUAL (CAR HOSTL) INCLUDED-NON-CHAOS-HOSTS)) (DOTIMES (K 2) (MULTIPLE-VALUE (I J DELIM) (PARSE-HOSTS2-TABLE-TOKEN LINE (1+ J)))) (WHEN I (PUTPROP HOSTL (INTERN (SUBSTRING LINE I J) "") :SYSTEM-TYPE)) (MULTIPLE-VALUE (I J DELIM) (PARSE-HOSTS2-TABLE-TOKEN LINE (1+ J))) (WHEN I (PUTPROP HOSTL (INTERN (SUBSTRING LINE I J) "") :MACHINE-TYPE)) (MULTIPLE-VALUE (I J DELIM) (PARSE-HOSTS2-TABLE-TOKEN LINE (1+ J))) (OR I (SETQ DELIM -1)) (let* ((first-name (car hostl)) (namel (ncons first-name))) (AND (CHAR= DELIM #\[) (DO () ((CHAR= DELIM #\]) (SETQ NAMEL (STABLE-SORT NAMEL #'(LAMBDA (X Y) ;; EQ is OK here... (and (not (eq x first-name)) (< (STRING-LENGTH X) (STRING-LENGTH Y))))))) (MULTIPLE-VALUE (I J DELIM) (PARSE-HOSTS2-TABLE-TOKEN LINE (1+ J))) (unless (equal i j) ;kmc-dle's suggestion for avoiding null hostnames (PUSH (SUBSTRING LINE I J) NAMEL)))) (setf (get hostl :host-names) namel)) (if output-stream (let ((*package* (or (find-package si:*force-package*) *package*))) (format output-stream "(~S ~S~{~% '~S '~S~})~2%" 'si::define-host (car hostl) (cdr hostl))) (push hostl result))))))) ))