-- 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.