<> <> <> <> <> <> <> DIRECTORY AlpineEnvironment USING [AccessRights, CachePageLockConversion, CachePageLockConversions, FileID, LockFailure, LockOption, NeededAccess, OpenFileID, OperationFailure, OwnerName, PageCount, PageRun, PropertyValuePair, RecoveryOption, ReferencePattern, TransID, nullTransID, UnknownType, UniversalFile, UserProperty, UserProperties, UserPropertyValuePair, UserPropertyValuePairs, 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; TransID: TYPE = AlpineEnvironment.TransID; nullTransID: TransID = AlpineEnvironment.nullTransID; 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], cacheTrans: TransID _ nullTransID]; <> <> <> 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]]; <> <> <> <> <<>> UserProperty: TYPE = AlpineEnvironment.UserProperty; UserPropertyValuePair: TYPE = AlpineEnvironment.UserPropertyValuePair; UserProperties: TYPE = AlpineEnvironment.UserProperties; UserPropertyValuePairs: TYPE = AlpineEnvironment.UserPropertyValuePairs; ReadUserProperties: PROCEDURE [handle: Handle, desiredProperties: UserProperties, lock: LockOption _ [read, wait]] RETURNS [properties: UserPropertyValuePairs]; <> <> WriteUserProperties: PROCEDURE [handle: Handle, properties: UserPropertyValuePairs, lock: LockOption _ [write, wait]]; <> <> <> LockPages: PROCEDURE[handle: Handle, pageRun: PageRun, lock: LockOption _ [read, wait]]; <> <> UnlockPages: PROCEDURE[handle: Handle, pageRun: PageRun, retainCacheLocks: BOOLEAN _ FALSE]; <> <> <<>> CachePageLockConversion: TYPE = AlpineEnvironment.CachePageLockConversion; CachePageLockConversions: TYPE = AlpineEnvironment.CachePageLockConversions; ValidateCachePageLock: PROC [lock: CachePageLockConversion] RETURNS [success: BOOLEAN]; <> <> ValidateCachePageLocks: PROC [locks: CachePageLockConversions] RETURNS [locksGranted, locksNotGranted: CachePageLockConversions]; <> <> 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, retainCacheLocks: BOOLEAN _ FALSE]; <> <> END. <<>> <> <<>> <> <<>> <> <> <<>>