(FILECREATED "29-Nov-84 16:22:20" {ERIS}<SANNELLA>LISP>FLOPPYPATCH.;4 7180 changes to: (FNS \PFLOPPY.ADD.TO.PFILELIST) previous date: "29-Nov-84 14:03:04" {ERIS}<SANNELLA>LISP>FLOPPYPATCH.;2) (* Copyright (c) 1984 by Xerox Corporation. All rights reserved.) (PRETTYCOMPRINT FLOPPYPATCHCOMS) (RPAQQ FLOPPYPATCHCOMS ((FNS \PFLOPPY.OPEN.PFILELIST \PFLOPPY.ADD.TO.PFILELIST))) (DEFINEQ (\PFLOPPY.OPEN.PFILELIST [LAMBDA NIL (* mjs "29-Nov-84 13:55") (PROG (PSECTOR9 PFILELIST FILENAME PMPAGE PLPAGE PFALLOC PFALLOCS) RETRY (SETQ PSECTOR9 (fetch (PFLOPPYFDEV PSECTOR9) of \FLOPPYFDEV)) (SETQ PFILELIST (\PFLOPPY.CREATE.PFILELIST (fetch (PSECTOR9 PFILELISTLENGTH) of PSECTOR9))) (replace (PFLOPPYFDEV PFILELIST) of \FLOPPYFDEV with PFILELIST) (replace (PSECTOR9 NEXTUNUSEDFILEID) of PSECTOR9 with 1) [for (START ← 32) by (IPLUS START (fetch (PMPAGE NLENGTH) of PMPAGE) 1) do (SETQ PMPAGE (NCREATE (QUOTE PMPAGE))) (\PFLOPPY.READPAGENO (SUB1 START) PMPAGE) (COND ((NOT (fetch (PMPAGE INTACT) of PMPAGE)) (\PFLOPPY.DAMAGED) (SETQ PFALLOCS NIL) (GO RETRY))) [COND ((EQ (fetch (PMPAGE NFILETYPE) of PMPAGE) FILETYPE.FILE) (SETQ PLPAGE (NCREATE (QUOTE PLPAGE))) (\PFLOPPY.READPAGENO START PLPAGE) (COND ((NOT (fetch (PLPAGE INTACT) of PLPAGE)) (\PFLOPPY.DAMAGED) (SETQ PFALLOCS NIL) (GO RETRY))) (SETQ FILENAME (fetch (PLPAGE $NAME) of PLPAGE))) (T (SETQ PLPAGE NIL) (SETQ FILENAME (LIST (fetch (PMPAGE $NFILETYPE) of PMPAGE] (SETQ PFALLOC (create PFALLOC FILENAME ← FILENAME START ← START PMPAGE ← PMPAGE PLPAGE ← PLPAGE)) (COND ((NOT (EQ (fetch (PMPAGE NFILETYPE) of PMPAGE) FILETYPE.FREE)) (\PFLOPPY.ADD.TO.PFILELIST PFALLOC))) (push PFALLOCS PFALLOC) (COND ((IEQP START (ADD1 2310)) (RETURN] (SETQ PFALLOCS (DREVERSE PFALLOCS)) (for PREV in PFALLOCS as NEXT in (CDR PFALLOCS) while NEXT do (replace (PFALLOC NEXT) of PREV with NEXT) (replace (PFALLOC PREV) of NEXT with PREV)) (replace (PFLOPPYFDEV PFALLOCS) of \FLOPPYFDEV with PFALLOCS) (* We create the directory last because PACKFILENAME is brittle and it is nice to have the other info already filled in if you have to debug. *) (for PFALLOC in PFALLOCS when (EQ (fetch (PFALLOC FILETYPE) of PFALLOC) FILETYPE.FILE) do (\PFLOPPY.DIR.PUT (fetch (PFALLOC FILENAME) of PFALLOC) (QUOTE OLD) PFALLOC]) (\PFLOPPY.ADD.TO.PFILELIST [LAMBDA (PFALLOC) (* mjs "29-Nov-84 16:08") (PROG (PSECTOR9 PFILELIST PFLE NENTRIES NPAGES NEWPFILELIST NEXT PMPAGE NPMPAGE NEWMAXENTRIES NEWNPAGES) (SETQ PSECTOR9 (fetch (PFLOPPYFDEV PSECTOR9) of \FLOPPYFDEV)) (SETQ PFILELIST (fetch (PFLOPPYFDEV PFILELIST) of \FLOPPYFDEV)) (* Create PFLE. *) (SETQ PFLE (create PFLE FILEID ←(fetch (PSECTOR9 NEXTUNUSEDFILEID) of PSECTOR9) TYPE ←(fetch (PFALLOC FILETYPE) of PFALLOC) START ←(fetch (PFALLOC START) of PFALLOC) LENGTH ←(fetch (PFALLOC LENGTH) of PFALLOC))) (replace (PSECTOR9 NEXTUNUSEDFILEID) of PSECTOR9 with (ADD1 (fetch (PSECTOR9 NEXTUNUSEDFILEID) of PSECTOR9))) (replace (PFALLOC PFLE) of PFALLOC with PFLE) (* Add PFLE to PFILELIST. *) (SETQ NENTRIES (fetch (PFILELIST NENTRIES) of PFILELIST)) [COND ((IEQP NENTRIES (fetch (PFILELIST MAXENTRIES) of PFILELIST)) (* First increase size of PFILELIST) (SETQ NPAGES (fetch (PFILELIST NPAGES) of PFILELIST)) (SETQ NEWPFILELIST (\PFLOPPY.CREATE.PFILELIST (ADD1 NPAGES))) (SETQ NEWMAXENTRIES (fetch (PFILELIST MAXENTRIES) of NEWPFILELIST)) (SETQ NEWNPAGES (fetch (PFILELIST NPAGES) of NEWPFILELIST)) (\BLT NEWPFILELIST PFILELIST (ITIMES 256 NPAGES)) (* update the MAXENTRIES field of the new PFILELIST) (replace (PFILELIST MAXENTRIES) of NEWPFILELIST with NEWMAXENTRIES) (* note: don't need to update NPAGES field since it is calculated from MAXENTRIES field) (SETQ PFILELIST NEWPFILELIST) (SETQ NPAGES NEWNPAGES) (replace (PFLOPPYFDEV PFILELIST) of \FLOPPYFDEV with PFILELIST) (* Now allocate larger block on floppy. *) (SETQ PFALLOC (\PFLOPPY.ALLOCATE NPAGES)) [\PFLOPPY.DEALLOCATE (for PFALLOC in (fetch (PFLOPPYFDEV PFALLOCS) of \FLOPPYFDEV) thereis (EQUAL (fetch (PFALLOC FILENAME) of PFALLOC) (QUOTE (PFILELIST] (SETQ NEXT (fetch (PFALLOC NEXT) of PFALLOC)) (SETQ PMPAGE (fetch (PFALLOC PMPAGE) of PFALLOC)) (SETQ NPMPAGE (fetch (PFALLOC PMPAGE) of NEXT)) (SETQ PSECTOR9 (fetch (PFLOPPYFDEV PSECTOR9) of \FLOPPYFDEV)) (UNINTERRUPTABLY (replace (PFALLOC FILENAME) of PFALLOC with (QUOTE (PFILELIST))) (replace (PMPAGE NTYPE) of PMPAGE with PMPAGEETYPE.PFILELIST) (replace (PMPAGE NFILETYPE) of PMPAGE with FILETYPE.PFILELIST) (replace (PMPAGE PTYPE) of NPMPAGE with PMPAGEETYPE.PFILELIST) (replace (PMPAGE PFILETYPE) of NPMPAGE with FILETYPE.PFILELIST) (replace (PSECTOR9 PFILELISTSTART) of PSECTOR9 with (fetch (PFALLOC START) of PFALLOC)) (replace (PSECTOR9 PFILELISTLENGTH) of PSECTOR9 with NPAGES) (\PFLOPPY.WRITEPAGENO (SUB1 (fetch (PFALLOC START) of PFALLOC)) PMPAGE T) (\PFLOPPY.WRITEPAGENO (SUB1 (fetch (PFALLOC START) of NEXT)) NPMPAGE T) (\PFLOPPY.SAVE.PFILELIST T) (\PFLOPPY.SAVE.PSECTOR9 T))] (\MOVEWORDS PFLE 0 PFILELIST (IPLUS 4 (ITIMES 5 NENTRIES)) 5) (replace (PFILELIST NENTRIES) of PFILELIST with (ADD1 NENTRIES]) ) (PUTPROPS FLOPPYPATCH COPYRIGHT ("Xerox Corporation" 1984)) (DECLARE: DONTCOPY (FILEMAP (NIL (405 7098 (\PFLOPPY.OPEN.PFILELIST 415 . 3057) (\PFLOPPY.ADD.TO.PFILELIST 3059 . 7096))) )) STOP