-- Volume.mesa (last edited by: Levin on: August 25, 1982 9:33 am) DIRECTORY File USING [Capability], System USING [NetworkAddress, nullID, VolumeID]; Volume: DEFINITIONS = BEGIN -- Volume identifiers ID: TYPE = System.VolumeID; -- = RECORD[System.UniversalID] nullID: ID = ID[System.nullID]; systemID: READONLY ID; -- ID of system volume SystemID: SAFE PROC RETURNS [ID] = CHECKED INLINE { RETURN[systemID] }; -- Volume addressing maxPagesPerVolume: LONG CARDINAL = 8388607; -- = 223 - 1 PageCount: TYPE = LONG CARDINAL; -- simulates TYPE = [0..maxPagesPerVolume] firstPageCount: PageCount = 0; lastPageCount: PageCount = maxPagesPerVolume; -- Attributes Type: TYPE = MACHINE DEPENDENT {normal(0), debugger(1), debuggerDebugger(2), nonPilot(3)}; maxNameLength: CARDINAL = 40; -- maximum name length of a volume's labelString. GetAttributes: SAFE PROC [volume: ID] RETURNS [volumeSize, freePageCount: PageCount, rootFile: File.Capability]; GetLabelString: PROC [volume: ID, s: STRING]; GetType: SAFE PROC [volume: ID] RETURNS [type: Type]; SetRootFile: PROC [volume: ID, file: File.Capability]; -- Mounting and unmounting volumes Status: TYPE = {unknown, partiallyOnLine, closedAndInconsistent, closedAndConsistent, open}; BooleanDefaultFalse: TYPE = BOOLEAN ← FALSE; TypeSet: TYPE = PACKED ARRAY Type OF BooleanDefaultFalse; onlyEnumerateCurrentType: TypeSet = []; -- all false Close: PROC [volume: ID]; Open: SAFE PROC [volume: ID]; GetNext: SAFE PROC [volume: ID, includeWhichVolumes: TypeSet ← onlyEnumerateCurrentType] RETURNS [nextVolume: ID]; -- returns ID's of all completely online (but not necessarily open) volumes. If all elements of includeWhichVolumes are FALSE, returns only volumes satisfying GetType[nextVolume]=GetType[systemID]; if any elements of includeWhichVolumes are TRUE, returns only volumes satisfying includeWhichVolumes[GetType[nextVolume]]=TRUE. GetStatus: SAFE PROC [volume: ID] RETURNS [Status]; -- Locating volumes IsOnServer: SAFE PROC [volume: ID, netAddress: System.NetworkAddress]; -- Signals and errors InsufficientSpace: ERROR; NeedsScavenging: ERROR; NotOpen: ERROR [volume: ID]; Unknown: ERROR [volume: ID]; END. LOG Time: January 25, 1980 7:53 PM By: Forrest Action: Deleted InvalidLabelString Time: May 15, 1980 4:28 PM By: McJones Action: Added NeedsScavenging Time: July 13, 1980 10:12 PM By: Forrest Action: Moved in GetStatus (originally in PhysicalVolume) Time: July 15, 1980 10:27 PM By: Forrest Action: Move in GetType, expand GetNext Time: August 15, 1980 2:49 PM By: McJones Action: VolumeSet=>TypeSet Time: August 25, 1982 9:33 am By: Levin Action: Make things SAFE.