<> <> <> <> <<>> <> <<>> DIRECTORY Xl; XlExtensions: CEDAR DEFINITIONS ~ BEGIN <> ExtensionData: TYPE = Extensions; <> <<>> firstExtension: BYTE = 64; --first event code reserved for extension events Extensions: TYPE = ARRAY [firstExtension..127] OF Extension ¬ ALL[NIL]; --mapping from event-code to implementor of the corresponding extension. Used per connection. ProcessExtensionEvent: PROC [xEvent: REF Xl.EventRep.extension] RETURNS [reuse: BOOL]; <> <> ExtensionContinue: TYPE = {noop, dispatch, reuse}; ProcessExtensionEventProc: TYPE = PROC [self: Extension, xEvent: REF Xl.EventRep.extension] RETURNS [continue: ExtensionContinue ¬ noop]; <> <> <> <> Extension: TYPE = REF ExtensionRec; ExtensionRec: TYPE = RECORD [ --per-connection description of an X window extension state: REF ¬ NIL, --per-connection private data for the extension implementor majorOpcode, firstEvent, firstError: BYTE ¬ 0, --data from X server class: REF READONLY ExtensionClass --describes extension class ]; ExtensionClass: TYPE = RECORD [ --static description of this extension for all connections key: ATOM, processEvents: ProcessExtensionEventProc, majorEventsCnt: NAT ¬ 0 ]; DefineExtensionClass: PROC [key: ATOM, processEvents: ProcessExtensionEventProc, majorEventsCnt: NAT ¬ 1]; <> <<>> StartExtension: PROC [c: Xl.Connection, key: ATOM] RETURNS [Extension ¬ NIL]; <> <> <> END.