;;; -*- Mode:LISP; Package:FILE-SYSTEM; Readtable:ZL; Base:10; Patch-File:T -*- ;;; FOR A LITTLE WHILE WRITE-PROPERTY-LIST WAS BROKEN. ;;; THIS KLUDGE TRIES TO READ THE PROPERTY LIST ANYWAY. ;;; EVEN GIVEN POSSIBLY INCORRECT LENGTH. ;;; (C) Copyright 1987, LISP MACHINE INC ;;; See filename "Copyright.Text" for more information. ;;; ********************************************************* ;;; ********************************************************* ;;; *** NOTE: This is an EXAMPLE, not LMI supported code. *** ;;; *** information contained in this example is subject *** ;;; *** to change without notice. The ways of doing *** ;;; *** the things contained in the example may change *** ;;; *** between system releases. Some techniques which *** ;;; *** are mere examples in one release may become built *** ;;; *** in system features in the next release. Use good *** ;;; *** judgement when copying these techniques. Most *** ;;; *** examples have been motivated by specific customer *** ;;; *** requests, and may not be the best engineered *** ;;; *** or most efficient solution for someone else. *** ;;; ********************************************************* ;;; ********************************************************* (DEFUN FIX-UP-AFTER-3-112-BUG () (LABELS ((RECURSE (PATH) (PRINT PATH) (DO ((L (FS:DIRECTORY-LIST PATH) (CDR L)) (DIRS)) ((NULL L) (MAPC #'RECURSE DIRS)) (COND ((NULL (CAAR L))) ((GET (CAR L) :DIRECTORY) (PUSH (SEND (SEND (CAAR L) :PATHNAME-AS-DIRECTORY) :NEW-PATHNAME :NAME :WILD :TYPE :WILD :VERSION :WILD) DIRS)))))) (RECURSE (FS:PARSE-PATHNAME "LM:~;*.*#*"))) (WRITE-CORE-FILE-SYSTEM-ONTO-DISK)) ;;; USE DJ (DEFUN GET-STRING (STREAM) (LET* ((LEN (SEND STREAM :TYI)) (ARR (MAKE-ARRAY LEN :TYPE 'ART-STRING))) (SEND STREAM :STRING-IN NIL ARR 0 LEN) ARR)) (DEFUN READ-PROPERTY-LIST (STREAM &AUX LIST (PAK SI:PKG-KEYWORD-PACKAGE)) (SETQ LIST (MAKE-LIST (* (PROGN (SEND STREAM :TYI)) 2))) (DO ((L LIST (CDDR L)) (LEN-PEEK)) ((NULL L)) (SETQ LEN-PEEK (SEND STREAM :TYIPEEK)) (WHEN (OR (NOT LEN-PEEK) (>= LEN-PEEK #\SP)) ;; LENGTHS OF PROPERTIES ARE ALMOST ALWAYS LESS THAN 32. ;; OTHERWISE WE ARE PROBABLY UP AGAINST A NEW DIRECTORY ENTRY. (FORMAT T "~&FOUND A LOSING PLIST: ~S~%" LEN-PEEK) (RETURN (RPLACD L NIL))) (RPLACA L (INTERN (GET-STRING STREAM) PAK)) (CASE (SEND STREAM :TYI) (0) (1 (SETF (CADR L) T)) (2 (SETF (CADR L) (INTERN (GET-STRING STREAM) PAK))) (3 (SETF (CADR L) (INTERN (GET-STRING STREAM) (PKG-FIND-PACKAGE (GET-STRING STREAM) :ASK)))) (4 (SETF (CADR L) (GET-BYTES STREAM 3))) (5 (SETF (CADR L) (GET-STRING STREAM))) (6 (SETF (CADR L) (LET ((*READ-BASE* 10.) (*PACKAGE* SI:PKG-USER-PACKAGE) (*READTABLE* SI:INITIAL-READTABLE)) ;; This can lose pretty badly with #<'s, etc. -- DLA (CLI:READ STREAM)))) (7 (LET* ((*READ-BASE* 10.) (*PACKAGE* SI:PKG-USER-PACKAGE) (*READTABLE* SI:INITIAL-READTABLE) (FORM (CLI:READ STREAM)) (DEFAULT-CONS-AREA WORKING-STORAGE-AREA)) ;<-* (SETF (CADR L) (IF (= (LENGTH FORM) 6) (APPLY #'FS:MAKE-FASLOAD-PATHNAME FORM) (EVAL FORM))))) ;Obsolete form for pathnames to be written. (OTHERWISE (FERROR NIL "Invalid Plist property designator.")))) (LET ((N (LENGTH LIST))) (COND ((NOT (ODDP N))) ((= N 1) (SETQ LIST NIL)) ('ELSE (SETF (NTHCDR (1- N) LIST) NIL)))) LIST)