-- FTPEvent.mesa - last edit: -- MAS May 19, 1980 6:08 PM -- HGM September 30, 1980 5:45 PM -- Copyright Xerox Corporation 1979, 1980 DIRECTORY FTPDefs, FTPPrivateDefs, Process USING [InitializeCondition, InitializeMonitor]; FTPEvent: MONITOR -- lock identification LOCKS event USING event: Event -- import list IMPORTS Process -- export list EXPORTS FTPPrivateDefs -- share list SHARES FTPDefs = BEGIN OPEN FTPDefs, FTPPrivateDefs; PrepareEvent: PUBLIC PROCEDURE [event: Event] = BEGIN -- prepare event object event.fact ← FALSE; -- initialize hint condition Process.InitializeCondition[@event.hint, LAST[CARDINAL]]; -- initialize monitor lock Process.InitializeMonitor[@event.LOCK]; END; PostEvent: PUBLIC ENTRY PROCEDURE [event: Event] = BEGIN ENABLE UNWIND => NULL; -- post event event.fact ← TRUE; BROADCAST event.hint; END; AwaitEvent: PUBLIC ENTRY PROCEDURE [event: Event] = BEGIN ENABLE UNWIND => NULL; -- Note: Waits indefinitely. -- await event UNTIL event.fact DO WAIT event.hint; ENDLOOP; event.fact ← FALSE; END; END. -- FTPEvent