<> <> <> <> DIRECTORY AlpineEnvironment USING [AccessRights, FileID, LockFailure, LockOption, NeededAccess, OpenFileID, OperationFailure, OwnerName, PageCount, PageRun, PropertyValuePair, RecoveryOption, ReferencePattern, UnknownType, UniversalFile, VolOrVolGroupID], AlpineFile USING [allProperties, PropertySet, RESULTPageBuffer, standardFile, VALUEPageBuffer], AlpTransaction USING [Handle], File USING [Type]; 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; standardFile: File.Type = AlpineFile.standardFile; 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, type: File.Type _ standardFile, recoveryOption: RecoveryOption _ log, referencePattern: ReferencePattern _ random] RETURNS[handle: Handle, refUniversalFile: REF UniversalFile]; 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]; END. <<>> <> <<>> <>