;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*-
;;; Patch file for System version 124.16
;;; Reason:
;;;  Jim O'dell's suggested change to logical pathname parsing - "." parses
;;;  like ";", so logical pathnames support LISPM directory delimiter style
;;;  in addition to the standard style.  I.e., "sys:hardcopy.tiger;" can be
;;;  used instead of "sys:hardcopy;tiger;" - whichever is preferred.  This
;;;  might make some programs work more easily.
;;; Written 1-Jun-88 16:28:26 by keith at site Gigamos Cambridge
;;; while running on Breaking Glass from band 3
;;; with Experimental System 124.15, Experimental Local-File 74.0, Experimental File-Server 23.1, Experimental Unix-Interface 12.0, Experimental ZMail 72.0, Experimental Tape 23.5, Experimental Lambda-Diag 16.0, microcode 1756, SDU Boot Tape 3.14, SDU ROM 103.



; From modified file DJ: L.IO.FILE; PATHST.LISP#216 at 1-Jun-88 16:29:04
#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))))))

))
