DIRECTORY Graph USING [GraphHandle, GraphProc], GraphOps, GraphPrivate USING [GraphAtomProc, GraphPlaceProc], GraphUtil USING [BlinkMsg, HandleNotNil], Process USING [SecondsToTicks, SetTimeout]; GraphMonitor: CEDAR MONITOR IMPORTS GraphUtil, Process EXPORTS GraphOps, GraphPrivate = { OPEN Graph, 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] = { ENABLE UNWIND => NULL; IF handle = NIL THEN RETURN[FALSE] ELSE RETURN[handle.locked]; }; -- IsLocked CallWithLock: PUBLIC PROC [handle: GraphHandle _ NIL, proc: GraphProc] = { IF HandleNotNil[handle] AND proc # NIL THEN { ENABLE UNWIND => Unlock[handle]; 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. ENABLE UNWIND => NULL; WAIT timeOut; }; UserEditAllowed: PUBLIC ENTRY PROC [handle: GraphHandle _ NIL] RETURNS [BOOL] = { ENABLE UNWIND => NULL; IF HandleNotNil[handle] THEN { OPEN handle; IF userEditAllowed THEN RETURN [TRUE] ELSE { BlinkMsg["Graph is currently controlled by a program. Please wait till it finishes to do this."]; RETURN [FALSE]; }; } ELSE RETURN [FALSE]; }; -- UserEditAllowed 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, November 26, 1985 6:52:15 pm PST Κ”˜Jšœ#Οmœ1™Ušœ™Icode™/J™—šΟk ˜ Jšœžœ˜%J˜ Jšœ žœ!˜3Jšœ žœ˜)Jšœžœ˜+J˜—šœžœž˜Jšžœ˜Jšžœžœ ˜G—J˜Jšœ ž œ˜J˜šΟnœžœžœ˜ Jšžœžœžœ˜šžœžœ˜Jšžœžœžœžœ˜5Jšœžœ˜J˜—JšœΟc˜ —J˜šŸœžœžœ˜"Jšžœžœžœ˜šžœžœ˜Jšœžœ˜Jšž œ˜J˜—Jšœ  ˜ —J˜šŸœžœžœžœžœžœžœ˜JJšžœžœžœ˜Jš žœ žœžœžœž˜"Jšžœžœ˜Jšœ  ˜—J˜šŸ œžœžœžœ˜Jšžœžœžœžœ˜-Jšžœžœ˜ Jšœ ˜ Jšœ ˜ Jšœ˜Jšœ˜—Jšœ ˜—J˜š Ÿœžœžœžœ žœžœ˜mJ˜/J˜!Jšœ ˜—J˜š Ÿœžœžœžœžœžœ˜bJšœ-˜-J˜!Jšœ ˜J˜—š Ÿœžœžœžœ ˜-Jšžœžœžœ˜Jšžœ ˜ J˜J˜—šŸœžœžœžœžœžœžœ˜QJšžœžœžœ˜šžœžœžœ˜+Jšžœžœžœžœ˜%šžœ˜Jšœa˜aJšžœžœ˜J˜—J˜—Jšžœžœžœ˜Jšœ ˜—J˜šŸœžœžœ˜J˜8J˜J˜—J˜J˜J˜J˜šžœžœ˜ J˜0—J˜—…—2 d