<<>> <> <> <> <> <> <> <> <<>> <> <> <<>> DIRECTORY CardTab, KeyStateTypes, KeyTypes, TIPUser, Vector2; TIPTables: CEDAR DEFINITIONS = BEGIN UpDown: TYPE = KeyStateTypes.UpDown; KeySym: TYPE = KeyTypes.KeySym; TIPScreenCoords: TYPE ~ TIPUser.TIPScreenCoords; <> <<>> TIPTime: TYPE ~ TIPUser.TIPTime; <<>> TIPFastTable: TYPE = CardTab.Ref; TIPTableImpl: TYPE = REF TIPTableImplRep; TIPTableImplRep: TYPE = RECORD [ ignore: IgnoreBits ¬ IgnoreEverything, variants: SELECT flavor: * FROM transparent => [], identity => [plusTime: BOOL], -- see TIPIdentity.mesa other => [ref: REF], small => [all: TIPChoiceSeries], fast => [ mouse: TIPChoice, keyDown, keyUp: TIPFastTable, -- a CardTab mapping KeySym to TIPChoice time: TIPChoice ], ENDCASE ]; IgnoreBits: TYPE = MACHINE DEPENDENT RECORD [ up, down, move: BOOL, unused: [0..17777B] ¬ 0 ]; IgnoreEverything: IgnoreBits = [TRUE, TRUE, TRUE]; TIPChoiceSeries: TYPE = LIST OF TIPChoice; TIPChoice: TYPE = LIST OF TIPTerm ¬ NIL; TIPTerm: TYPE = RECORD [ variants: SELECT flavor: * FROM keyTrigger => [keyState: TIPKeyState], mouseTrigger => NULL, trackballTrigger => NULL, thumbwheelTrigger => NULL, timeTrigger => [flavor: TimeoutFlavor, mSecs: CARDINAL], keyEnable => [keyState: TIPKeyState], key2Enable => [keyState1, keyState2: TIPKeyState], -- true if either keyEnableList => [lst: LIST OF TIPKeyState], -- true if any predEnable => [predicate: ATOM], char => [ch: REF CHAR], coords => [xy: TIPScreenCoords], trackballChange => [vec: REF Vector2.VEC], thumbwheelChange => [v: REF INTEGER], time => [time: TIPTime], nested => [statement: TIPChoiceSeries], result => [list: TIPResults], ENDCASE ]; TIPResults: TYPE = LIST OF REF ANY ¬ NIL; <> TimeoutFlavor: TYPE = {gt, lt}; <> <> TIPKeyState: TYPE = RECORD [ keySym: KeySym, state: UpDown ¬ down ]; END.