(FILECREATED " 3-Jun-84 22:06:30" {PHYLUM}<LISPNEW>SOURCES>MARKERPATCH.;4 5254   

      changes to:  (FNS MKDIR)
		   (VARS MARKERPATCHCOMS)

      previous date: " 3-Jun-84 21:25:07" {PHYLUM}<LISPNEW>SOURCES>MARKERPATCH.;2)


(PRETTYCOMPRINT MARKERPATCHCOMS)

(RPAQQ MARKERPATCHCOMS ((DECLARE: DONTCOPY (RECORDS LogicalSubVolumeMarker SubVolumeMarkerPage 
						    LogicalVolumeDescriptor)
				  (MACROS LvDevicePtr MarkerPageAddr LvPagePtr))
			(FNS MKDIR MAKEPILOT)
			(CONSTANTS DFSPilotVolume DFSLispVolume)))
(DECLARE: DONTCOPY 
[DECLARE: EVAL@COMPILE 

(MESARECORD LogicalSubVolumeMarker ((seal WORD)
				    (version WORD)
				    (labelLength BITS 6)
				    (type BITS 2)
				    (NIL BITS 8)
				    (label 20 WORD)
				    (bootingInfo LVBootFiles)
				    (volumeRootDirectory ID)
				    (NIL WORD)))

(MESARECORD SubVolumeMarkerPage ((logical LogicalSubVolumeMarker)
                                                             (* Incomplete)
				 ))

(MESARECORD LogicalVolumeDescriptor ((seal WORD)             (* Validation ; absolutely must be first field)
				     (version WORD)          (* must be 2nd field)
				     (vID ID)                (* ID of This Volume)
				     (labelLength WORD)      (* Length of th ASCII name of this volume)
				     (label 20 WORD)         (* Volume name in AScII)
				     (type WORD)
				     (volumeSize SWAPPEDFIXP)
                                                             (* Number of pages in this volume)
				     (bootingInfo LVBootFiles)
                                                             (* Defines 6 PILOT file types)
                                                             (* Reorder from here on only)
				     (treeLevel WORD)
				     (changing WORD)         (* boolean ← T)
				     (freePageCount SWAPPEDFIXP)
                                                             (* Number of free pages remaining)
				     (vamStart SWAPPEDFIXP)
				     (vfmStart SWAPPEDFIXP)
                                                             (* Relative address of the start of the volume file map)
				     (lowerBound SWAPPEDFIXP)
				     (rootFileID RootFileArray)
				     (volumeRootDirectory ID)
				     (NIL WORD)              (* This is inserted for compatibility)
				     (interval Intervals)    (* One entry for each level of the B-Tree)
				     (NIL 13 WORD)
				     (checksum WORD)         (* Must be the last field)
				     )
				    (CREATE (NCREATE (QUOTE VMEMPAGEP))))
]

(DECLARE: EVAL@COMPILE 

(PUTPROPS LvDevicePtr MACRO ((VolNum)
			     (ELT \DFSDevices VolNum)))

(PUTPROPS MarkerPageAddr MACRO [(vol)
				(fetch (SubVolumeDscr NPages) of (SubVolumeEntryPtr (
\DFSFindVolumeNumber vol])

(PUTPROPS LvPagePtr MACRO ((I)
			   (ELT \LogicalVolumes I)))
)
)
(DEFINEQ

(MKDIR
  [LAMBDA (VolName)                                          (* edited: " 3-Jun-84 22:04")
    (PROG ((volNum (\DFSVOLUMEP VolName))
	   vol markerPage)                                   (* \DFSVOLUMEP returns the volume number associated with
							     VolName, it there is such)
          [COND
	    ((NULL volNum)
	      (ERROR (CONCAT "Volume " VolName " not on local disk"]
          (SETQ vol (LvPagePtr volNum))
          (COND
	    ((\DFSDeviceConflict VolName)
	      (RETURN NIL))
	    (T (UNINTERRUPTABLY
                   (replace (LogicalVolumeDescriptor type) of vol with DFSPilotVolume)
		   (\DFSVFMInitMap vol)
		   (\DFSOpenDiskDevice volNum)
		   (\DFSMakeVolumeDirectory (LvDevicePtr volNum))
		   (replace (LogicalVolumeDescriptor type) of vol with DFSLispVolume)
		   (\LvPutPage vol 0 vol)
		   (SETQ markerPage (\LvGetPage vol (MarkerPageAddr vol)))
		   (replace (LogicalSubVolumeMarker type) of markerPage with DFSLispVolume)
		   (replace (LogicalSubVolumeMarker volumeRootDirectory) of markerPage
		      with (fetch (LogicalVolumeDescriptor volumeRootDirectory) of (LvPagePtr volNum))
			    )
		   (\LvPutPage vol (MarkerPageAddr vol)
			       markerPage)
		   (\DFSDsplyVolumes))
	       (RETURN VolName])

(MAKEPILOT
  [LAMBDA (VOL)                                              (* hts: " 1-Jun-84 23:12")
    (PROG [(volNum (\DFSVOLUMEP VOL))
	   vol markerPage (device (CDR (FASSOC VOL \DEVICENAMETODEVICE]
          (if (NOT volNum)
	      then (ERROR (CONCAT VOL " is not a local disk volume")))
          (UNINTERRUPTABLY
              (SETQ vol (LvPagePtr volNum))
	      (replace (LogicalVolumeDescriptor type) of vol with DFSPilotVolume)
	      (\LvPutPage vol 0 vol)
	      (SETQ markerPage (\LvGetPage vol (MarkerPageAddr vol)))
	      (replace (LogicalSubVolumeMarker type) of (fetch (SubVolumeMarkerPage logical)
							   of markerPage)
		 with DFSPilotVolume)
	      (\LvPutPage vol (MarkerPageAddr vol)
			  markerPage)
	      (\DFSDsplyVolumes)
	      (if device
		  then (\REMOVEDEVICE device)
		       (SETA \DFSDevices volNum NIL)))])
)
(DECLARE: EVAL@COMPILE 

(RPAQQ DFSPilotVolume 0)

(RPAQQ DFSLispVolume 3)

(CONSTANTS DFSPilotVolume DFSLispVolume)
)
(DECLARE: DONTCOPY
  (FILEMAP (NIL (2870 5105 (MKDIR 2880 . 4199) (MAKEPILOT 4201 . 5103)))))
STOP