(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