<> <> <> <> <> <> DIRECTORY AlpineEnvironment USING [AccessRights, FileID, LockFailure, LockOption, NeededAccess, OpenFileID, OperationFailure, OwnerName, PageCount, PageRun, PropertyValuePair, RecoveryOption, ReferencePattern, UnknownType, UniversalFile, VolOrVolGroupID], AlpineFile USING [allProperties, PropertySet, RESULTPageBuffer, VALUEPageBuffer], AlpTransaction USING [Handle]; AlpFile: CEDAR DEFINITIONS = BEGIN AccessRights: TYPE = AlpineEnvironment.AccessRights; allProperties: PropertySet = AlpineFile.allProperties; FileID: TYPE = AlpineEnvironment.FileID; LockOption: TYPE = AlpineEnvironment.LockOption; OpenFileID: TYPE = AlpineEnvironment.OpenFileID; OwnerName: TYPE = AlpineEnvironment.OwnerName; PageCount: TYPE = AlpineEnvironment.PageCount; PageRun: TYPE = AlpineEnvironment.PageRun; PropertySet: TYPE = AlpineFile.PropertySet; PropertyValuePair: TYPE = AlpineEnvironment.PropertyValuePair; RecoveryOption: TYPE = AlpineEnvironment.RecoveryOption; ReferencePattern: TYPE = AlpineEnvironment.ReferencePattern; RESULTPageBuffer: TYPE = AlpineFile.RESULTPageBuffer; UniversalFile: TYPE = AlpineEnvironment.UniversalFile; VALUEPageBuffer: TYPE = AlpineFile.VALUEPageBuffer; VolOrVolGroupID: TYPE = AlpineEnvironment.VolOrVolGroupID; AccessFailed: READONLY ERROR [missingAccess: AlpineEnvironment.NeededAccess]; LockFailed: READONLY ERROR [why: AlpineEnvironment.LockFailure]; OperationFailed: READONLY ERROR [why: AlpineEnvironment.OperationFailure]; StaticallyInvalid: READONLY ERROR; Unknown: READONLY ERROR [what: AlpineEnvironment.UnknownType]; PossiblyDamaged: READONLY SIGNAL; Handle: TYPE = REF Object; Object: TYPE = RECORD[ trans: AlpTransaction.Handle, openFileID: OpenFileID]; <> <<>> <> Open: PROCEDURE[transHandle: AlpTransaction.Handle, universalFile: UniversalFile, access: AccessRights _ readOnly, lock: LockOption _ [intendRead, wait], recoveryOption: RecoveryOption _ log, referencePattern: ReferencePattern _ random] RETURNS[handle: Handle, fileID: FileID]; <> <> <> <> Create: PROCEDURE[transHandle: AlpTransaction.Handle, volumeID: VolOrVolGroupID, owner: OwnerName, initialSize: PageCount, recoveryOption: RecoveryOption _ log, referencePattern: ReferencePattern _ random] RETURNS[handle: Handle, refUniversalFile: REF UniversalFile]; <> <> <> <> <> <<>> <> <<1. The OpenFileID is no longer known to Alpine because it has been closed (either explicitly or as a result of committing or aborting the transaction).>> <<2. The file it refers to has been deleted by this transaction, perhaps using a different OpenFileID>> <<>> Close: PROCEDURE[handle: Handle]; <> <> Delete: PROCEDURE[handle: Handle]; <> <> <<>> <> <<>> <> <<>> ReadPages: UNSAFE PROCEDURE[handle: Handle, pageRun: PageRun, pageBuffer: RESULTPageBuffer, lock: LockOption _ [read, wait]]; <> <> WritePages: PROCEDURE[handle: Handle, pageRun: PageRun, pageBuffer: VALUEPageBuffer, lock: LockOption _ [write, wait]]; <> <> ReadProperties: PROCEDURE[handle: Handle, desiredProperties: PropertySet _ allProperties, lock: LockOption _ [read, wait]] RETURNS[properties: LIST OF PropertyValuePair]; <> <> WriteProperties: PROCEDURE[handle: Handle, properties: LIST OF PropertyValuePair, lock: LockOption _ [write, wait]]; <> <> <> <> LockPages: PROCEDURE[handle: Handle, pageRun: PageRun, lock: LockOption _ [read, wait]]; <> <> UnlockPages: PROCEDURE[handle: Handle, pageRun: PageRun]; <> <> GetAccessRights: PROCEDURE[handle: Handle] RETURNS[access: AccessRights]; <> GetLockOption: PROCEDURE[handle: Handle] RETURNS[lock: LockOption]; <> <> SetLockOption: PROCEDURE[handle: Handle, lock: LockOption]; <> <> GetRecoveryOption: PROCEDURE[handle: Handle] RETURNS[recoveryOption: RecoveryOption]; <> GetReferencePattern: PROCEDURE[handle: Handle] RETURNS[referencePattern: ReferencePattern]; <> SetReferencePattern: PROCEDURE[handle: Handle, referencePattern: ReferencePattern]; <> GetSize: PROCEDURE[handle: Handle, lock: LockOption _ [read, wait]] RETURNS[size: PageCount]; <> <> SetSize: PROCEDURE[handle: Handle, size: PageCount, lock: LockOption _ [write, wait]]; <> <> <> <> GetUniversalFile: PROCEDURE[handle: Handle] RETURNS[universalFile: UniversalFile]; <> UnlockVersion: PROCEDURE[handle: Handle]; <> <> IncrementVersion: PROCEDURE[handle: Handle, increment: INT]; <> <> UnlockFile: PROCEDURE [handle: Handle]; <> <> END. <<>> <> <<>> <> <<>> <> <> <<>>