summaryrefslogtreecommitdiff
path: root/ipl/gprogs/flake.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/gprogs/flake.icn')
-rw-r--r--ipl/gprogs/flake.icn94
1 files changed, 94 insertions, 0 deletions
diff --git a/ipl/gprogs/flake.icn b/ipl/gprogs/flake.icn
new file mode 100644
index 0000000..21b7d00
--- /dev/null
+++ b/ipl/gprogs/flake.icn
@@ -0,0 +1,94 @@
+############################################################################
+#
+# File: flake.icn
+#
+# Subject: Program to draw a fractal snowflake
+#
+# Author: Stephen B. Wampler
+#
+# Date: August 14, 1996
+#
+############################################################################
+#
+# This file is in the public domain.
+#
+############################################################################
+#
+# Version: 1.0
+#
+############################################################################
+#
+#
+# Comments: This program display a fractal snowflake of specified
+# order. Options exist to do colors, etc.
+# See the procedure 'helpmsg' for command line options
+#
+# An order 4 snowflake is particularly nice.
+#
+# Waits for a window event before closing window
+#
+############################################################################
+#
+# Links: glib, wopen
+#
+############################################################################
+#
+# Requires: Version 9 graphics and co-expressions (for glib.icn)
+#
+############################################################################
+
+link glib
+link wopen
+
+global win, mono, h, w
+global Window, XMAX, YMAX
+global nextcolor
+
+procedure main (args)
+ local nextarg, arg, n, doclip, docolor, Cpoly
+
+ XMAX := YMAX := 700 # physical screen size
+ w := h := 1.0
+
+ nextarg := create !args
+ while arg := @nextarg do {
+ if arg == ("-help"|"-h") then stop(helpmsg())
+ else if arg == "-n" then n := integer(@nextarg)
+ else if arg == "-clip" then doclip := "yes"
+ else if arg == "-color" then docolor := "yes"
+ }
+
+ /n := 3 # default order
+
+ if \doclip then {
+ Cpoly := [ # a simple convext polygon to clip against
+ [0.3,0.4],[0.5,0.8],[0.7,0.4]
+ ]
+ }
+
+ win := WOpen("label=Fractal Snowflake", "width="||XMAX, "height="||YMAX)
+ mono := WAttrib (win, "depth") == "1"
+ Window := set_window(win, point(0,0), point(w,h),
+ viewport(point(0,0), point(XMAX, YMAX), win))
+
+ if \docolor then
+ nextcolor := create vpara([0,0,65535], [65535,0,0], |((0 to 12)/12.0))
+
+ EraseArea(win)
+
+ Fg(win, "black")
+
+ fract_flake(Window, point(0.20,0.33), point(0.80,0.33), n, 1, Cpoly)
+
+ Event(win)
+ close(win)
+end
+
+procedure helpmsg()
+ write("Usage: Flake [-n order] [-clip] [-color]")
+ write(" where")
+ write(" -n order -- Depth of recursion {3}")
+ write(" -clip -- Clip to a convex polygon")
+ write(" -color -- Color cycle while drawing")
+ return
+end