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