<> <> <> <> DIRECTORY CD; CDEvents: CEDAR DEFINITIONS = BEGIN <> <<--User level>> 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 to much time consuming>> 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>> <<--Implementor level>> 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>> 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>> <<--dont: if any one handler returned dont>> END.