;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*- ;;; Private patches made by jim ;;; Reason: ;;; Allow logical pathanames like k:a.a.b;f.lisp ;;; (.'s just like ;'s) ;;; Written 5-May-88 18:30:11 by jim (Jim O'Dell) at site Gigamos Cambridge ;;; while running on Maurice Ravel from band 1 ;;; with Experimental System 123.254, Experimental Local-File 73.5, Experimental FILE-Server 22.4, Experimental Unix-Interface 11.0, Experimental KERMIT 34.3, Experimental ZMail 71.0, Experimental Lambda-Diag 15.0, Experimental Tape 22.4, microcode 1755, SDU Boot Tape 3.14, SDU ROM 102, the old ones. ; From modified file DJ: L.IO.FILE; PATHST.LISP#214 at 5-May-88 18:30:37 #8R FILE-SYSTEM#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "FILE-SYSTEM"))) (COMPILER::PATCH-SOURCE-FILE "SYS: IO; FILE; PATHST  " (DEFMETHOD (LOGICAL-PATHNAME :PARSE-NAMESTRING) (IGNORE NAMESTRING &OPTIONAL (START 0) END &aux semicolon-p found-semicolon) (OR END (SETQ END (STRING-LENGTH NAMESTRING))) (setq semicolon-p (string-search #/; namestring start end)) (DO ((I START) (J START (1+ J)) CH TEM Q DIR NAM NAMP TYP TYPP VERS) ((> J END) (SETQ DIR (NREVERSE DIR)) (VALUES :UNSPECIFIC DIR NAM TYP VERS)) (SETQ CH (IF (= J END) #/SP (AREF NAMESTRING J))) (COND ((= CH '#/) (SETQ J (1+ J))) ((MEMQ CH '(#/; #/: #/ #/ #/SP #/TAB #/. #/#)) (COND ((OR ( I J) (= CH #/) (= CH #/)) (AND (MEM #'= CH '(#/ #/)) (OR ( I J) (AND ( (1+ J) END) ( (AREF NAMESTRING (1+ J)) #/SP))) (PATHNAME-ERROR (1+ J) NAMESTRING "An unquoted ~C must be a component unto itself." CH)) (MULTIPLE-VALUE (TEM Q) (SELECTQ CH (#/ (VALUES :UNSPECIFIC NIL)) (#/ (VALUES NIL NIL)) (T (UNQUOTE-LOGICAL-STRING NAMESTRING I J)))) (IF (AND (NOT Q) (STRING= TEM "*")) (SETQ TEM :WILD)) (cond ((eq ch #/:) nil) ((or (eq #/; ch) (and (eq #/. ch) semicolon-p (not found-semicolon))) (if (eq ch #/;) (setq found-semicolon t)) (push tem dir)) ('OTHERWISE (COND (VERS) (TYPP (SETQ VERS (COND ((MEMQ TEM '(:UNSPECIFIC :WILD)) TEM) ((AND (NOT Q) (COND ((STRING= TEM ">") :NEWEST) ((STRING= TEM "<") :OLDEST) ((NUMERIC-P TEM))))) (T (PATHNAME-ERROR J NAMESTRING "Version not numeric"))))) (NAMP (SETQ TYP TEM TYPP T)) (T (SETQ NAM TEM NAMP T))))))) (SETQ I (1+ J)))))) ))