procedure pack_intrvl: encode event interval procedure unpack_intrvl: decode event interval procedure pack_modkeys: encode modifier keys procedure unpack_modkeys: decode modifier keys procedure Enqueue: enqueue event
link enqueue
May 2, 2001; Gregg M. Townsend
Requires: Version 9 graphics
This file is in the public domain.
These procedures manipulate Icon window events. Enqueue(W, eventcode, x, y, modkeys, interval) posts an event. pack_modkeys(s) encodes the modifier keys for an event. unpack_modkeys(n) decodes a modifier key value. pack_intrvl(n) encodes an event interval. unpack_intrvl(n) decodes an event interval. ____________________________________________________________ Icon's event queue is a list accessed via Pending(); the list can be inspected or altered by the Icon program. An event is stored as three consecutive entries on the list. The first is the event code: a string for a keypress, or an integer for any other event. The next two list entries are integers, interpreted as a packed structure: 0000 0000 0000 0SMC XXXX XXXX XXXX XXXX (second entry) 0EEE MMMM MMMM MMMM YYYY YYYY YYYY YYYY (third entry) The fields have these meanings: X...X &x: 16-bit signed x-coordinate value Y...Y &y: 16-bit signed y-coordinate value SMC &shift, &meta, and &control (modifier keys) E...M &interval, interpreted as M * 16 ^ E 0 currently unused; should be zero pack_modkeys(s) encodes a set of modifier keys, returning an integer with the corresponding bits set. The string s contains any combination of the letters c, m, and s to specify the bits desired. pack_intrvl(n) encodes an interval of n milliseconds and returns a left-shifted integer suitable for combining with a y-coordinate. unpack_modkeys(n) returns a string containing 0 to 3 of the letters c, m, and s, depending on which modifier key bits are set in the argument n. unpack_intrvl(n) discards the rightmost 16 bits of the integer n (the y-coordinate) and decodes the remainder to return an integer millisecond count. Enqueue([window,] eventcode, x, y, modkeys, interval) synthesizes and enqueues an event for a window, packing the interval and modifier keys (specified as above) into the correct places. Default values are: eventcode = &null x = 0 y = 0 interval = 0 modkeys = ""