+ int i;
+
+ g_window=window;
+ g_dpy=dpy;
+
+ delay = get_integer_resource("delay", "Integer");
+ radius = get_integer_resource("radius", "Integer");
+ speed = get_integer_resource("speed", "Integer");
+ number = get_integer_resource("number", "Integer");
+
+#ifdef HAVE_XSHM_EXTENSION
+ use_shm = get_boolean_resource("useSHM", "Boolean");
+#endif /* HAVE_XSHM_EXTENSION */
+
+ blackhole = get_boolean_resource("blackhole", "Boolean");
+ vortex = get_boolean_resource("vortex", "Boolean");
+ magnify = get_boolean_resource("magnify", "Boolean");
+ reflect = get_boolean_resource("reflect", "Boolean");
+ slow = get_boolean_resource("slow", "Boolean");
+
+ if (get_boolean_resource("swamp", "Boolean"))
+ effect = &swamp_thing;
+ if (get_boolean_resource("bounce", "Boolean"))
+ effect = &move_lense;
+
+ XGetWindowAttributes (dpy, window, &xgwa);
+
+ if (effect == NULL && radius == 0 && speed == 0 && number == 0
+ && !blackhole && !vortex && !magnify && !reflect) {
+/* if no cmdline options are given, randomly choose one of:
+ * -radius 50 -number 4 -speed 1 -bounce
+ * -radius 50 -number 4 -speed 1 -blackhole
+ * -radius 50 -number 4 -speed 1 -vortex
+ * -radius 50 -number 4 -speed 1 -vortex -magnify
+ * -radius 50 -number 4 -speed 1 -vortex -magnify -blackhole
+ * -radius 100 -number 1 -speed 2 -bounce
+ * -radius 100 -number 1 -speed 2 -blackhole
+ * -radius 100 -number 1 -speed 2 -vortex
+ * -radius 100 -number 1 -speed 2 -vortex -magnify
+ * -radius 100 -number 1 -speed 2 -vortex -magnify -blackhole
+ * -radius 80 -number 1 -speed 2 -reflect
+ * -radius 50 -number 3 -speed 2 -reflect
+ * jwz: not these
+ * -radius 50 -number 4 -speed 2 -swamp
+ * -radius 50 -number 4 -speed 2 -swamp -blackhole
+ * -radius 50 -number 4 -speed 2 -swamp -vortex
+ * -radius 50 -number 4 -speed 2 -swamp -vortex -magnify
+ * -radius 50 -number 4 -speed 2 -swamp -vortex -magnify -blackhole
+ */
+
+ i = (random() % 12 /* 17 */);
+
+ draw = &plain_draw;
+
+ switch (i) {
+ case 0:
+ radius=50;number=4;speed=1;
+ effect=&move_lense;break;
+ case 1:
+ radius=50;number=4;speed=1;blackhole=1;
+ effect=&move_lense;break;
+ case 2:
+ radius=50;number=4;speed=1;vortex=1;
+ effect=&move_lense;break;
+ case 3:
+ radius=50;number=4;speed=1;vortex=1;magnify=1;
+ effect=&move_lense;break;
+ case 4:
+ radius=50;number=4;speed=1;vortex=1;magnify=1;blackhole=1;
+ effect=&move_lense;break;
+ case 5:
+ radius=100;number=1;speed=2;
+ effect=&move_lense;break;
+ case 6:
+ radius=100;number=1;speed=2;blackhole=1;
+ effect=&move_lense;break;
+ case 7:
+ radius=100;number=1;speed=2;vortex=1;
+ effect=&move_lense;break;
+ case 8:
+ radius=100;number=1;speed=2;vortex=1;magnify=1;
+ effect=&move_lense;break;
+ case 9:
+ radius=100;number=1;speed=2;vortex=1;magnify=1;blackhole=1;
+ effect=&move_lense;break;
+
+ case 10:
+ radius=80;number=1;speed=2;reflect=1;
+ draw = &reflect_draw;effect = &move_lense;break;
+ case 11:
+ radius=50;number=4;speed=2;reflect=1;
+ draw = &reflect_draw;effect = &move_lense;break;
+
+#if 0 /* jwz: not these */
+ case 12:
+ radius=50;number=4;speed=2;
+ effect=&swamp_thing;break;
+ case 13:
+ radius=50;number=4;speed=2;blackhole=1;
+ effect=&swamp_thing;break;
+ case 14:
+ radius=50;number=4;speed=2;vortex=1;
+ effect=&swamp_thing;break;
+ case 15:
+ radius=50;number=4;speed=2;vortex=1;magnify=1;
+ effect=&swamp_thing;break;
+ case 16:
+ radius=50;number=4;speed=2;vortex=1;magnify=1;blackhole=1;
+ effect=&swamp_thing;break;
+#endif
+
+ default:
+ abort(); break;
+ }
+
+ /* but if the window is small, reduce default radius */
+ if (xgwa.width < radius * 8)
+ radius = xgwa.width/8;
+ }
+
+ /* never allow the radius to be too close to the min window dimension
+ */
+ if (radius >= xgwa.width * 0.45) radius = xgwa.width * 0.45;
+ if (radius >= xgwa.height * 0.45) radius = xgwa.height * 0.45;
+
+
+ /* -swamp mode consumes vast amounts of memory, proportional to radius --
+ so throttle radius to a small-ish value (60 => ~30MB.)
+ */
+ if (effect == &swamp_thing && radius > 60)
+ radius = 60;