BEGIN
EventProc:
TYPE =
PROC [event:
REF, design:
CD.Design, x:
REF]
RETURNS [dont: BOOL←FALSE];
--dont will abort (some) events and (sometimes) the remaining EventProcs
--event is the event which caused the call
--design onto which event happened
--x parameter passed through from ProcessEvent, event-specific
--Eventprocs must not be timeconsuming
EventRegistration: TYPE = REF EventRegistrationRep;
EventRegistrationRep: TYPE;
RegisterEventType:
PROC [eventName:
REF]
RETURNS [EventRegistration];
--may raise CD.Error[doubleRegistration] and others.
--the EventRegistration is the key to call ProcessEvent
--if ATOM are used for eventName, include them manual in the list
--on file ... see the DF file for documentation
RegisterEventProc:
PROC [event:
REF, proc: EventProc, filter:
CD.Technology←
NIL];
--registers a procedure which is called each time a specific event occurs
--the procedure might stop certain events with the dont result
--if filter#NIL, proc is only called if event occurs on design of technology=filter
--event must have been previously registered with RegisterEventType
ProcessEvent:
PROC [ev: EventRegistration, design:
CD.Design, x:
REF←
NIL,
listenToDont: BOOL←FALSE]
RETURNS [dont: BOOL];
--called on certain events
--can be called only if the EventRegistration is known