;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*-
;;; Patch file for System version 129.3
;;; Reason:
;;;  Fix QFILE bug causing OPEN to return an 8-bit stream for all QFASL files.
;;; Written 10-Nov-88 15:56:01 by keith (Keith Corbett) at site Gigamos Cambridge
;;; while running on Breaking Glass from band 3
;;; with Experimental ZWEI 126.29, Experimental ZMail 74.17, Experimental Local-File 76.0, Experimental File-Server 25.0, Obsolete Lambda-Diag 18.1, Experimental Unix-Interface 15.0, Experimental Tape 26.4, Experimental System 129.1, Microcode 1762, SDU Boot Tape 3.14, SDU ROM 103, 11/04.



; From modified file DJ: L.NETWORK.CHAOS; QFILE.LISP#388 at 10-Nov-88 15:56:02
#8R FILE-SYSTEM#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "FILE-SYSTEM")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; CHAOS; QFILE  "

(DEFUN READ-FILE-PROPERTY-LIST-STRING (STRING OPERATION PATHNAME
					;; PATHNAME is only used to get the
					;; host with respect to which to parse
				       &OPTIONAL (PROPERTIES-TO-READ
   ;properties are in order as expected in reply from file-computer.
   ; T is a special kludge to group time and date into one field for :CREATION-DATE.
   ;   it turns out not to be really general enuf, see other part of kludge in :LENGTH below.
						   '((:CREATION-DATE) (:CREATION-TIME)
						     (:LENGTH T) (:QFASLP T)
						     (:CHARACTERS T) (:AUTHOR T)
						     (:byte-size t)))
				       &AUX PATHNAME-ORIGIN PROPERTY-LIST
					    (DEFAULT-CONS-AREA SYS:BACKGROUND-CONS-AREA))
  (OR (SETQ PATHNAME-ORIGIN (STRING-SEARCH-CHAR #/NEWLINE STRING))
      (FERROR NIL "Illegally formatted string ~S." STRING))
  (DO ((I (QFILE-CHECK-COMMAND OPERATION STRING))
       (PROP PROPERTIES-TO-READ (CDR PROP))
       (*READ-BASE* 10.) (*READTABLE* SI:INITIAL-READTABLE)
       (TYPE) (DATE-START))
      ((OR (NULL I) (> I PATHNAME-ORIGIN) (NULL PROP)))
    (SETQ TYPE (CAAR PROP))
    (CASE TYPE
      (:CREATION-DATE (SETQ DATE-START I))
      (:LENGTH (PUSH (OR (FS:PARSE-DIRECTORY-DATE-PROPERTY STRING DATE-START I)
			 ;; When bootstrapping, dates are recorded as strings.
			 (SUBSTRING STRING DATE-START I))
		     PROPERTY-LIST)
	       (PUSH :CREATION-DATE PROPERTY-LIST)))
    (COND ((CADAR PROP)
	   (MULTIPLE-VALUE-BIND (PROPVAL ENDPOS)
	       (CL:READ-FROM-STRING STRING NIL NIL :START I :end pathname-origin)
	     (SETQ I ENDPOS)
	     (PUSH PROPVAL PROPERTY-LIST)
	     (PUSH TYPE PROPERTY-LIST)))
	  (T (SETQ I (STRING-SEARCH-CHAR #/SPACE STRING (1+ I))))))
  (PUSH (SEND PATHNAME :PARSE-TRUENAME
	      (SUBSTRING STRING (SETQ PATHNAME-ORIGIN (1+ PATHNAME-ORIGIN))
			 (STRING-SEARCH-CHAR #/NEWLINE STRING PATHNAME-ORIGIN)))
	PROPERTY-LIST)
  (PUSH :TRUENAME PROPERTY-LIST)
  PROPERTY-LIST)

))
