<> <> <> <> <> <> DIRECTORY Disk USING [Channel, PageCount, PageNumber], File USING [FP, Handle, PageCount, PageNumber, PropertyStorage, Volume, VolumeFile, VolumeID], PhysicalVolume USING [Physical, PhysicalRC], Rope USING [ROPE]; FileBackdoor: CEDAR DEFINITIONS = BEGIN <> Volume: TYPE = File.Volume; Handle: TYPE = File.Handle; PageCount: TYPE = File.PageCount; PageNumber: TYPE = File.PageNumber; VolumeFile: TYPE = File.VolumeFile; FP: TYPE = File.FP; PropertyStorage: TYPE = File.PropertyStorage; <> <> ReservePages: PROC[physical: PhysicalVolume.Physical, start: Disk.PageNumber, size: Disk.PageCount]; <> ReserveNoPages: PROC[physical: PhysicalVolume.Physical]; <> GetVolumePages: PROC[volume: Volume] RETURNS[size, free, freeboard: INT]; <> <> VolumeFlusher: TYPE = PROC[Volume, INT, REF ANY] RETURNS[BOOL]; <> <<>> SetFlusher: PROC[volume: Volume, flusher: VolumeFlusher, data: REF ANY]; <> <> <<>> GetFlusher: PROC[volume: Volume] RETURNS[VolumeFlusher, REF ANY]; <> <> SetFreeboard: PROC[volume: Volume, freeboard: INT]; <> <<>> <> CreatePhysicalVolume: PROC[where: Disk.Channel, name: Rope.ROPE, id: File.VolumeID] RETURNS[PhysicalVolume.Physical]; CreateLogicalVolume: PROC[where: LIST OF PhysicalVolume.Physical, size: INT, name: Rope.ROPE, id: File.VolumeID] RETURNS[File.Volume]; PhysicalPageBad: PROC[physical: PhysicalVolume.Physical, address: Disk.PageNumber] RETURNS[ badTableFull: BOOL, status: PhysicalVolume.PhysicalRC ]; <> IsBadPage: PROC[physical: PhysicalVolume.Physical, diskPage: Disk.PageNumber] RETURNS[bad: BOOL, status: PhysicalVolume.PhysicalRC]; <> <<>> SpliceOutDataPage: PROC[file: Handle, filePage: File.PageCount] RETURNS [oldPage: Disk.PageNumber, oldChannel: Disk.Channel]; <> SetRoot: PROC[root: VolumeFile, file: Handle, page: PageNumber _ [0]]; <> <> GetRoot: PROC[volume: Volume, root: VolumeFile] RETURNS[fp: FP, page: PageNumber]; <> <> MarkDebugger: PROC[volume: Volume, isDebugger: BOOL]; <> <> IsDebugger: PROC[volume: Volume] RETURNS[BOOL]; <> <> EraseVolume: PROC[volume: Volume]; <> <> <> CreateVMBacking: PROC[volume: Volume, size: PageCount, report: PROC[File.FP, PropertyStorage, File.PageCount] _ NIL] RETURNS[Handle]; <> <> <<>> NextFile: PROC[volume: Volume, prev: FP] RETURNS[FP]; <> <> <<>> END. <<>> <> <> <<>> <<>> <<>> <<>> <<>> <<>>