<> <> <> <> <> <> <> DIRECTORY AlpineEnvironment, AlpineInternal; Lock: DEFINITIONS = BEGIN LockID: TYPE = AlpineInternal.LockID; LockSubID: TYPE = AlpineInternal.LockSubID; nullLockID: LockID = AlpineInternal.nullLockID; <> <> LockMode: TYPE = AlpineEnvironment.LockMode; Set: PROC [ trans: AlpineInternal.TransHandle, lock: LockID, mode: LockMode, wait: BOOL _ FALSE] RETURNS [resultMode: LockMode]; <> <> <> <> <> <> <> <> <> <> ModeReleasableSet: TYPE = PACKED ARRAY LockMode OF ModeReleasable; ModeReleasable: TYPE = {no, yes} _ no; Release: PROC [trans: AlpineInternal.TransHandle, lock: LockID, releasable: ModeReleasableSet _ [read: yes]] RETURNS [LockMode]; <> <> <> <> <> <> <> <> <> <> <> ReleaseFileLocks: PROC [trans: AlpineInternal.TransHandle, prototype: LockID, releasable: ModeReleasableSet]; <> Compat: READONLY ARRAY LockMode OF PACKED ARRAY LockMode OF BOOL; <> <> Sup: READONLY ARRAY LockMode OF PACKED ARRAY LockMode OF LockMode; <> <> <> Error: ERROR [type: ErrorType]; ErrorType: TYPE = {lockUnreleasable, unknown}; Failed: ERROR [why: AlpineEnvironment.LockFailure]; <<{conflict, timeout}>> TransAborting: ERROR; END. <> <> <<>>