-- File.mesa (last edited by: Levin on: August 24, 1982 5:14 pm) DIRECTORY Inline USING [BITAND], System USING [FileID, nullID, VolumeID], Transaction USING [Handle, nullHandle]; File: DEFINITIONS IMPORTS Inline, Transaction = BEGIN -- File identifiers, capabilities, and types ID: TYPE = System.FileID; -- = RECORD [System.UniversalID] Capability: TYPE = PRIVATE RECORD [fID: ID, permissions: Permissions]; Permissions: TYPE = [0..32); -- simulate SET OF {read, write, grow, shrink, delete} read: Permissions = 1; write: Permissions = 2; grow: Permissions = 4; shrink: Permissions = 8; delete: Permissions = 16; nullID: ID = [System.nullID]; nullCapability: Capability = Capability[nullID, 0]; ShowCapability: SAFE PROC [file: Capability] RETURNS [fID: ID, permissions: Permissions] = TRUSTED INLINE {RETURN[file.fID, file.permissions]}; LimitPermissions: SAFE PROC [originalFC: Capability, maxPermissions: Permissions] RETURNS [lesserFC: Capability] = TRUSTED INLINE {RETURN[[originalFC.fID, LOOPHOLE[Inline.BITAND[originalFC.permissions, maxPermissions]]]]}; Type: TYPE = RECORD [CARDINAL]; -- Addressing within a file maxPagesPerFile: LONG CARDINAL = 8388607; -- = 223 - 1 PageNumber: TYPE = LONG CARDINAL; -- simulate TYPE = [0..maxPagesPerFile); firstPageNumber: PageNumber = 0; lastPageNumber: PageNumber = maxPagesPerFile-1; PageCount: TYPE = LONG CARDINAL; -- simulate TYPE = [0..maxPagesPerFile]; firstPageCount: PageCount = 0; lastPageCount: PageCount = maxPagesPerFile; -- Creating, deleting, and moving files Create: SAFE PROC [ volume: System.VolumeID, initialSize: PageCount, type: Type, transaction: Transaction.Handle ← Transaction.nullHandle] RETURNS [file: Capability]; Delete: PROC [file: Capability, transaction: Transaction.Handle ← Transaction.nullHandle]; Move: PROC [ file: Capability, volume: System.VolumeID, transaction: Transaction.Handle ← Transaction.nullHandle]; -- Immutable files MakeImmutable: PROCEDURE [ file: Capability, transaction: Transaction.Handle ← Transaction.nullHandle]; ReplicateImmutable: SAFE PROC [ file: Capability, volume: System.VolumeID, transaction: Transaction.Handle ← Transaction.nullHandle]; DeleteImmutable: PROCEDURE [ file: Capability, volume: System.VolumeID, transaction: Transaction.Handle ← Transaction.nullHandle]; -- Attributes of files GetSize: SAFE PROC [file: Capability, transaction: Transaction.Handle ← Transaction.nullHandle] RETURNS [size: PageCount]; SetSize: PROCEDURE [ file: Capability, size: PageCount, transaction: Transaction.Handle ← Transaction.nullHandle]; GetAttributes: SAFE PROC [ file: Capability, transaction: Transaction.Handle ← Transaction.nullHandle] RETURNS [type: Type, immutable, temporary: BOOLEAN, volume: System.VolumeID]; MakePermanent: SAFE PROC [ file: Capability, transaction: Transaction.Handle ← Transaction.nullHandle]; -- Locating files IsOnVolume: SAFE PROC [file: Capability, volume: System.VolumeID]; -- Signals and errors Unknown: ERROR [file: Capability]; Error: ERROR [type: ErrorType]; ErrorType: TYPE = { insufficientPermissions, immutable, nonuniqueID, notImmutable, reservedType}; END. LOG Time: May 5, 1978 9:16 AM By: Lauer Action: Created file from Pilot Functional Spec Time: June 21, 1978 3:17 PM By: Lauer Action: Changed value of maxPagesPerFile to correct specification; changed name of "type" parameter to procedure Create Time: August 3, 1978 12:51 PM By: Lauer Action: Added nullID Time: August 18, 1978 11:54 AM By: Horsley Action: Added reservedType to ErrorType Time: March 7, 1979 10:42 AM By: Redell Action: Changed PageNumber and PageCount to LONG CARDINAL, as allowed by Mesa 5.0 Time: March 30, 1979 4:48 PM By: Redell Action: Converted ShowCapability and LimitPermissions to inline procedures Time: April 3, 1979 12:40 PM By: Redell Action: Converted LimitPermissions to use Mopcodes directly to avoid importing InlineDefs Time: March 31, 1980 4:26 PM By: Gobbel Action: Added transaction handles Time: April 15, 1980 3:59 PM By: Gobbel Action: Added nullTransactionHandle. Time: June 16, 1980 2:17 PM By: McJones Action: Cleanup Time: August 24, 1982 5:14 pm By: Levin Action: Make things SAFE.