CDEvents.mesa a ChipNDale module
Copyright © 1983, 1985 by Xerox Corporation. All rights reserved.
by Christian Jacobi, September 16, 1983 2:11 pm
last edited by Christian Jacobi, September 19, 1985 3:07:33 am PDT
DIRECTORY CD;
CDEvents: CEDAR DEFINITIONS =
BEGIN
Events are like interrupts. Some procedure might raise an event, which will cause all the registered handlers to be called. To prevent uncontrolled calling of an event, an implementor can hide the EventRegistration.
--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.