<> <> <> <> <> DIRECTORY FSBackdoor USING [Version], File USING [Handle], FS USING [Lock, OpenFile], Rope USING [ROPE]; FSLock: CEDAR DEFINITIONS = BEGIN <> ActiveFile: TYPE = REF ActiveFileObject; ActiveFileObject: TYPE = MONITORED RECORD [ nameBody: Rope.ROPE, -- first part of key; if NIL then this object is dead version: FSBackdoor.Version, -- second part of key h: File.Handle, -- initialized to NIL fileLock: {none, read, write}, -- initialized to none recordLock: BOOLEAN, -- TRUE means set fileLockCount: CARDINAL, -- greater than 1 only for read locks; initialized to 0 attachedTo: ActiveFile, -- NIL unless this is an LName attached to a GName next: ActiveFile -- hash chain for lock table implementation ]; <" prefix also is omitted from the "nameBody".>> <> <> <> LockRecord: PROCEDURE [volumePrefix, nameBody: Rope.ROPE, version: FSBackdoor.Version] RETURNS [a: ActiveFile, ok: BOOLEAN]; <> WaitForRecord: PROCEDURE [a: ActiveFile]; <> <> LockAttachedToRecord: PROCEDURE [a: ActiveFile]; <> ReleaseRecord: PROCEDURE [a: ActiveFile]; <> LockFile: PROCEDURE [a: ActiveFile, lock: FS.Lock] RETURNS [ok: BOOLEAN]; <> <> NewOpenFile: PROCEDURE [a: ActiveFile] RETURNS [FS.OpenFile]; <> <> GetAttachment: PROCEDURE [a: ActiveFile] RETURNS [ActiveFile]; <> ReportClose: PROCEDURE [a: ActiveFile]; <> <> LookupLock: PROCEDURE [prefix, nameBody: Rope.ROPE, version: FSBackdoor.Version] RETURNS [ActiveFile]; <> RemoveLock: PROCEDURE [a: ActiveFile]; <> <> RecordREF: PROCEDURE [r: REF]; <> RemoveREF: PROCEDURE [r: REF]; <> END. <> <> <<>>