DIRECTORY RefTab, XTk, XTkNotification; XTkNotificationImpl: CEDAR MONITOR IMPORTS RefTab EXPORTS XTkNotification ~ BEGIN NotifierList: TYPE = LIST OF NofierRec; NofierRec: TYPE = RECORD [proc: XTk.WidgetNotifyProc, registerData: REF ¬ NIL]; registry: RefTab.Ref ~ RefTab.Create[]; RegisterGlobal: PUBLIC ENTRY PROC [key: REF, proc: XTk.WidgetNotifyProc, registerData: REF ¬ NIL, front: BOOL] = { new: NotifierList ~ LIST[[proc, registerData]]; WITH RefTab.Fetch[registry, key].val SELECT FROM nl: NotifierList => { IF front THEN new.rest ¬ nl ELSE { FOR l: NotifierList ¬ nl, l.rest DO IF l.rest=NIL THEN {l.rest¬new; RETURN} ENDLOOP }; }; ENDCASE => {}; [] ¬ RefTab.Store[registry, key, new]; }; CallNotifierList: PROC [list: NotifierList, widget: XTk.Widget, callData: REF ¬ NIL, event: XTk.Event ¬ NIL] = { FOR l: NotifierList ¬ list, l.rest WHILE l#NIL DO l.first.proc[widget: widget, registerData: l.first.registerData, callData: callData, event: event]; ENDLOOP }; CallAll: PUBLIC PROC [key: REF, widget: XTk.Widget, callData: REF ¬ NIL, event: XTk.Event ¬ NIL] = { WITH RefTab.Fetch[registry, key].val SELECT FROM nl: NotifierList => CallNotifierList[nl, widget, callData, event]; ENDCASE => {}; }; END. Θ XTkNotificationImpl.mesa Copyright Σ 1991 by Xerox Corporation. All rights reserved. Created by Christian Jacobi, August 20, 1991 3:11:06 pm PDT Christian Jacobi, August 20, 1991 3:49 pm PDT Κ(•NewlineDelimiter –(cedarcode) style™codešœ™Kšœ Οeœ1™