summaryrefslogtreecommitdiff
path: root/ipl/gprogs/procater.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/gprogs/procater.icn')
-rw-r--r--ipl/gprogs/procater.icn185
1 files changed, 185 insertions, 0 deletions
diff --git a/ipl/gprogs/procater.icn b/ipl/gprogs/procater.icn
new file mode 100644
index 0000000..721389f
--- /dev/null
+++ b/ipl/gprogs/procater.icn
@@ -0,0 +1,185 @@
+############################################################################
+#
+# File: procater.icn
+#
+# Subject: Program to display concatenation sizes
+#
+# Author: Ralph E. Griswold
+#
+# Date: September 18, 1996
+#
+############################################################################
+#
+# This file is in the public domain.
+#
+############################################################################
+#
+# This program displays successive numbers by lines of corresponding
+# height. When the display area is full, it scrolls from right to
+# left.
+#
+# In this version, input is piped in.
+#
+############################################################################
+#
+# Requires: Version 9 graphics
+#
+############################################################################
+#
+# Links: interact, vsetup
+#
+############################################################################
+
+link interact
+link vsetup
+
+global vidgets
+global root
+global strip
+global state
+global gc_gray
+global gc_black
+global reset
+global scale
+
+global width
+global height
+
+procedure main(args)
+
+ init(args)
+
+ display()
+
+end
+
+procedure init(args)
+
+ WOpen ! ui_atts()
+
+ vidgets := ui()
+
+ root := vidgets["root"]
+
+ state := &null
+ scale := 1
+
+ width := vidgets["strip"].uw
+ height := vidgets["strip"].uh
+
+ strip := Clone("dx=" || vidgets["strip"].ux, "dy=" || vidgets["strip"].uy)
+ Clip(strip, 0, 0, width, height)
+ gc_gray := Clone(strip, "fg=gray")
+ gc_black := Clone(strip, "fg=black")
+
+end
+
+procedure display()
+ local n, gc
+
+ repeat {
+ repeat {
+ while (*Pending() > 0) | \state do
+ ProcessEvent(root, , shortcuts)
+ n := read() | {
+ Notice("End of data.")
+ fail
+ }
+ n ? {
+ if ="a" then {
+ n := tab(0)
+ gc := gc_gray
+ }
+ else gc := gc_black
+ }
+ n := scale * integer(n) | {
+ Notice("Nonnumeric data; terminating.")
+ break
+ }
+ n >:= height # Motif bug avoidance
+ CopyArea(strip, 1, 0, width - 1, height, 0, 0)
+ EraseArea(strip, width - 1, 0, width, height)
+ DrawLine(gc, width - 1, height - n, width - 1, height)
+ }
+ }
+
+end
+
+procedure file_cb(vidget, value)
+
+ case value[1] of {
+ "snapshot @S": return snapshot(strip, 0, 0, width, height)
+ "quit @Q": exit()
+ }
+
+ fail
+
+end
+
+procedure configure_cb(vidget, value)
+
+ case value[1] of {
+ "scale": {
+ repeat {
+ if TextDialog(, "scale", scale, 10) == "Okay" then {
+ scale := (0 < numeric(dialog_value[1])) | {
+ Notice("Invalid scale value.")
+ next
+ }
+ reset_cb()
+ return
+ }
+ else fail # user canceled
+ }
+ }
+ }
+
+ fail
+
+end
+procedure pause_cb(vidget, value)
+
+ state := value
+
+ return
+
+end
+
+procedure reset_cb()
+
+ EraseArea(strip)
+
+ return
+
+end
+
+procedure shortcuts(e)
+
+ if &meta then
+ case map(e) of {
+ "q": exit()
+ "s": return snapshot(strip, 0, 0, width, height)
+ }
+ else fail
+
+end
+
+#===<<vib:begin>>=== modify using vib; do not remove this marker line
+procedure ui_atts()
+ return ["size=477,255", "bg=gray-white"]
+end
+
+procedure ui(win, cbk)
+return vsetup(win, cbk,
+ [":Sizer:::0,0,477,255:",],
+ ["configure:Menu:pull::36,0,71,21:Configure",configure_cb,
+ ["scale"]],
+ ["file:Menu:pull::0,1,36,21:File",file_cb,
+ ["open @O","snapshot @S","quit @q"]],
+ ["line1:Line:::0,22,477,22:",],
+ ["pause:Button:regular:1:11,43,42,20:pause",pause_cb],
+ ["reset:Button:regular::11,76,42,20:reset",reset_cb],
+ ["strip:Rect:grooved::63,37,400,200:",],
+ )
+end
+#===<<vib:end>>=== end of section maintained by vib