summaryrefslogtreecommitdiff
path: root/ipl/gprogs/wevents.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/gprogs/wevents.icn')
-rw-r--r--ipl/gprogs/wevents.icn140
1 files changed, 140 insertions, 0 deletions
diff --git a/ipl/gprogs/wevents.icn b/ipl/gprogs/wevents.icn
new file mode 100644
index 0000000..383feeb
--- /dev/null
+++ b/ipl/gprogs/wevents.icn
@@ -0,0 +1,140 @@
+############################################################################
+#
+# File: wevents.icn
+#
+# Subject: Program to report Icon window events
+#
+# Author: Gregg M. Townsend
+#
+# Date: August 4, 1998
+#
+############################################################################
+#
+# This file is in the public domain.
+#
+############################################################################
+#
+# wevents reports all the events delivered to an Icon window.
+# Each event produces a single line of output. The program terminates
+# after receiving and reporting a ^C, ^D, or DELETE key event.
+#
+# Each event is reported both in Icon terms and in terms of its
+# internal representation. The output fields on each line are:
+#
+# &interval (interval since previous event, in milliseconds)
+# &control, &meta, &shift (modifier keys: c, m, or s if pressed)
+# event returned by Event: keyword name, if any, or else image
+# &x, &y (usually coordinates, but new size for resize event)
+#
+# image() of the first value on the event queue
+# hex dump of the second value (modifier flags and x coordinate)
+# hex dump of the third value (encoded interval and y coordinate)
+#
+############################################################################
+#
+# Requires: Version 9 graphics
+#
+############################################################################
+#
+# Links: hexcvt, options, optwindw
+#
+############################################################################
+
+link hexcvt, options, optwindw
+
+$include "keysyms.icn"
+
+procedure main(args)
+ local w, q, e, xhex, yhex, eimage
+
+ w := optwindow(options(args, winoptions()))
+ WAttrib(w, "resize=on")
+
+ repeat {
+ q := Pending(Active()) # wait until event is queued
+ eimage := right(image(q[1]), 10) | "******"
+ xhex := hexstring(q[2], 8) | "********"
+ yhex := hexstring(q[3], 8) | "********"
+ e := Event(w)
+ write(
+ r(&interval, 5), " ",
+ if &control then "c" else "-",
+ if &meta then "m" else "-",
+ if &shift then "s" else "-",
+ " ", right(evname(e), 10),
+ " @", r(&x, 4), ",", l(&y, 6),
+ eimage, " ",
+ left(xhex, 4), " ", right(xhex, 4), " ",
+ left(yhex, 4), " ", right(yhex, 4),
+ )
+ if e === ("\^C" | "\^D" | "\177") then
+ break
+ if e === &resize & &x < 0 & &y < 0 then
+ break
+ }
+end
+
+
+# evname(e) -- translate e into text representation
+
+procedure evname(e)
+ return case e of {
+ &lpress: "&lpress"
+ &mpress: "&mpress"
+ &rpress: "&rpress"
+ &lrelease: "&lrelease"
+ &mrelease: "&mrelease"
+ &rrelease: "&rrelease"
+ &ldrag: "&ldrag"
+ &mdrag: "&mdrag"
+ &rdrag: "&rdrag"
+ &resize: "&resize"
+ Key_PrSc: "Key_PrSc"
+ Key_ScrollLock: "Key_ScrollLock"
+ Key_Pause: "Key_Pause"
+ Key_Insert: "Key_Insert"
+ Key_Home: "Key_Home"
+ Key_PgUp: "Key_PgUp"
+ Key_End: "Key_End"
+ Key_PgDn: "Key_PgDn"
+ Key_Left: "Key_Left"
+ Key_Up: "Key_Up"
+ Key_Right: "Key_Right"
+ Key_Down: "Key_Down"
+ Key_F1: "Key_F1"
+ Key_F2: "Key_F2"
+ Key_F3: "Key_F3"
+ Key_F4: "Key_F4"
+ Key_F5: "Key_F5"
+ Key_F6: "Key_F6"
+ Key_F7: "Key_F7"
+ Key_F8: "Key_F8"
+ Key_F9: "Key_F9"
+ Key_F10: "Key_F10"
+ Key_F11: "Key_F11"
+ Key_F12: "Key_F12"
+ default: image(e)
+ }
+end
+
+
+# r(v, n) -- right-justify image of v in at least n characters
+
+procedure r(v, n)
+ local s
+ s := image(v)
+ if *s < n then
+ s := right(s, n)
+ return s
+end
+
+
+# l(v, n) -- left-justify image of v in at least n characters
+
+procedure l(v, n)
+ local s
+ s := image(v)
+ if *s < n then
+ s := left(s, n)
+ return s
+end