summaryrefslogtreecommitdiff
path: root/ipl/gprogs/calib.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/gprogs/calib.icn')
-rw-r--r--ipl/gprogs/calib.icn95
1 files changed, 95 insertions, 0 deletions
diff --git a/ipl/gprogs/calib.icn b/ipl/gprogs/calib.icn
new file mode 100644
index 0000000..6c97694
--- /dev/null
+++ b/ipl/gprogs/calib.icn
@@ -0,0 +1,95 @@
+############################################################################
+#
+# File: calib.icn
+#
+# Subject: Program to calibrate color monitor
+#
+# Author: Gregg M. Townsend
+#
+# Date: May 31, 1994
+#
+############################################################################
+#
+# This file is in the public domain.
+#
+############################################################################
+#
+# The nonlinearity of a color display is often characterized by a
+# "gamma correction" value; calib provides a crude method for determining
+# this value for a particular monitor. It displays two rectangles: one
+# formed of alternating black and white scanlines and one formed of a
+# single, solid color. Move the slider until they match; the number
+# displayed above the slider is the gamma-correction factor.
+#
+############################################################################
+#
+# Requires: Version 9 graphics
+#
+############################################################################
+#
+# Links: button, evmux, graphics, options, optwindw, slider
+#
+############################################################################
+
+link button
+link evmux
+link graphics
+link options
+link optwindw
+link slider
+
+record boxdata(win, color, button)
+
+procedure main(args)
+ local opts, w, h, m, boxwidth, sliderwidth, textheight
+ local win, box, boxwin, boxcolor, y
+ local mingamma, defaultgamma, maxgamma
+
+ opts := options(args, winoptions())
+ /opts["W"] := 500
+ /opts["H"] := 400
+ /opts["M"] := -1
+ win := optwindow(opts, "cursor=off", "echo=off")
+ w := opts["W"]
+ h := opts["H"]
+ m := opts["M"]
+ textheight := 20
+ sliderwidth := 20
+ boxwidth := (w - 3 * m) / 2
+ if (h + 1) % 2 = 1 then
+ h -:= 1
+
+ mingamma := 1.0
+ defaultgamma := WAttrib(win, "gamma")
+ maxgamma := 5.0
+
+ boxwin := Clone(win)
+ Fg(boxwin, "black")
+ Bg(boxwin, "white")
+ EraseArea(boxwin, m, m, boxwidth, h)
+ every y := m to h + m by 2 do
+ DrawLine(boxwin, m, y, m + boxwidth, y)
+ boxcolor := NewColor(boxwin) | stop("can't allocate a mutable color")
+
+ # we use a do-nothing button for displaying the gamma value (!)
+ box := boxdata(boxwin, boxcolor,
+ button(win, "", &null, 0, m+w-sliderwidth, m, sliderwidth, textheight))
+ setgamma(win, box, defaultgamma)
+
+ Fg(boxwin, boxcolor)
+ FillRectangle(boxwin, m + boxwidth, m, boxwidth, h)
+ quitsensor(win)
+ slider(win, setgamma, box,
+ m + w - sliderwidth, 2 * m + textheight, sliderwidth, h - textheight - m,
+ mingamma, defaultgamma, maxgamma)
+ evmux(win)
+end
+
+procedure setgamma(win, box, gamma)
+ local v
+
+ buttonlabel(box.button, left(gamma + .05, 3))
+ WAttrib(box.win, "gamma=" || gamma)
+ Color(box.win, box.color, "gray")
+ return
+end