DIRECTORY GraphPrivate USING [GraphHandle, GraphAtomProc, GraphPlaceProc, GraphProc], GraphUtil USING [HandleNotNil], Process USING [SecondsToTicks, SetTimeout]; GraphMonitor: CEDAR MONITOR IMPORTS GraphUtil, Process EXPORTS GraphPrivate = { OPEN GraphPrivate, GraphUtil; timeOut: CONDITION; Lock: PUBLIC ENTRY GraphProc = { ENABLE UNWIND => NULL; IF HandleNotNil[handle] THEN { WHILE handle.locked DO WAIT handle.unlocked; ENDLOOP; handle.locked _ TRUE; }; }; -- Lock Unlock: PUBLIC ENTRY GraphProc = { ENABLE UNWIND => NULL; IF HandleNotNil[handle] THEN { handle.locked _ FALSE; BROADCAST handle.unlocked; }; }; -- Unlock IsLocked: PUBLIC ENTRY PROC [handle: GraphHandle _ NIL] RETURNS [BOOL] = { IF handle = NIL THEN RETURN[FALSE] ELSE RETURN[handle.locked]; }; -- IsLocked CallWithLock: PUBLIC PROC [handle: GraphPrivate.GraphHandle _ NIL, proc: GraphProc _ NIL] = {IF HandleNotNil[handle] THEN {Lock[handle]; proc[handle]; Unlock[handle]}}; -- CallWithLock LockedPlaceProc: PUBLIC PROC [handle: GraphHandle _ NIL, sx, sy: INTEGER _ 0, proc: GraphPlaceProc _ NIL] = { lockedProc: GraphProc = {proc[handle, sx, sy]}; CallWithLock[handle, lockedProc]; }; -- LockedPlaceProc LockedAtomProc: PUBLIC PROC [handle: GraphHandle _ NIL, atom: ATOM, proc: GraphAtomProc _ NIL] = { lockedProc: GraphProc = {proc[handle, atom]}; CallWithLock[handle, lockedProc]; }; -- LockedAtomProc Wait: PUBLIC ENTRY PROC = { -- wait a second. WAIT timeOut; }; Init: PROC = TRUSTED { Process.SetTimeout[@timeOut, Process.SecondsToTicks[1]]; }; Init[]; }. CHANGE LOG. SChen, create at October 9, 1985 6:46:56 pm PDT. žFile: GraphMonitor.mesa, Copyright c 1985 by Xerox Corporation. All rights reserved. Last Edited by: Sweetsun Chen, October 21, 1985 10:27:00 pm PDT Κ˜Jšœ#Οmœ1™Ušœ™Icode™/J™—šΟk ˜ Jšœ žœ9˜KJšœ žœ˜Jšœžœ˜+J˜—šœžœž˜Jšžœ˜Jšžœžœ˜6—J˜Jšœ ž œ˜J˜šΟnœžœžœ˜ Jšžœžœžœ˜šžœžœ˜Jšžœžœžœžœ˜5Jšœžœ˜J˜—JšœΟc˜ —J˜šŸœžœžœ˜"Jšžœžœžœ˜šžœžœ˜Jšœžœ˜Jšž œ˜J˜—Jšœ  ˜ —J˜šŸœžœžœžœžœžœžœ˜JJš žœ žœžœžœž˜"Jšžœžœ˜Jšœ  ˜—J˜JšŸ œžœžœ%žœžœžœžœ0 ˜ΈJ˜š Ÿœžœžœžœ žœžœ˜mJ˜/J˜!Jšœ ˜—J˜š Ÿœžœžœžœžœžœ˜bJšœ-˜-J˜!Jšœ ˜J˜—š Ÿœžœžœžœ ˜-Jšžœ ˜ J˜J˜—šŸœžœžœ˜J˜8J˜J˜—J˜J˜J˜J˜šžœžœ˜ J˜0—J˜—…—J w