<> <> <> DIRECTORY Disk USING[ Channel, PageCount, PageNumber ], NewFile USING[ FP, VolumeFile, VolumeID ], Rope USING[ ROPE ], VolumeFormat USING[ LogicalPage, LogicalPageCount, TimeParameters]; Volumes: CEDAR DEFINITIONS = BEGIN <> Physical: TYPE = REF PhysicalObject; PhysicalObject: TYPE; NextPhysical: PROC[prev: Physical, wait: BOOL] RETURNS[Physical]; PhysicalRoots: TYPE = NewFile.VolumeFile[microcode..bootFile]; PhysicalInfo: PROC[Physical] RETURNS[ id: NewFile.VolumeID, -- unique id of this physical volume -- name: Rope.ROPE, channel: Disk.Channel, size: Disk.PageCount, free: Disk.PageCount, roots: ARRAY PhysicalRoots OF NewFile.FP, subVolumes: LIST OF SubVolumeDetails -- current sub-volumes --, time: VolumeFormat.TimeParameters]; SubVolumeDetails: TYPE = REF READONLY SubVolumeDetailsObject; SubVolumeDetailsObject: TYPE = RECORD[ -- immutable information about the sub-volume -- id: NewFile.VolumeID, -- logical volume of which this is a fragment -- start: VolumeFormat.LogicalPage, -- logical page number of this fragment of logical volume -- size: VolumeFormat.LogicalPageCount, physical: Physical, channel: Disk.Channel, address: Disk.PageNumber -- physical page number of this subvolume -- ]; END.