http://ftp.x.org/contrib/applications/xscreensaver-3.06.tar.gz
[xscreensaver] / hacks / flame.c
index d723f055e8cee09572da6171878936590a477f99..0cc7f65970fb5f0f8e1ca7d790319e97fb97504c 100644 (file)
@@ -1,5 +1,5 @@
-/* xscreensaver, Copyright (c) 1993, 1995, 1996
- *  Jamie Zawinski <jwz@netscape.com>
+/* xscreensaver, Copyright (c) 1993, 1995, 1996, 1998
+ *  Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -167,7 +167,7 @@ recurse (double x, double y, int l, Display *dpy, Window win)
              XDrawPoints (dpy, win, gc, points, num_points, CoordModeOrigin);
              num_points = 0;
              /* if (delay) usleep (delay); */
-             /* XSync (dpy, True); */
+             /* XSync (dpy, False); */
            }
        }
     }
@@ -175,6 +175,14 @@ recurse (double x, double y, int l, Display *dpy, Window win)
     {
       for (i = 0; i < snum; i++)
        {
+
+         /* Scale back when values get very large. Spot sez:
+            "I think this happens on HPUX.  I think it's non-IEEE
+            to generate an exception instead of a silent NaN."
+          */
+         if ((abs(x) > 1.0E5) || (abs(y) > 1.0E5))
+           x = x / y;
+
          nx = f[0][0][i] * x + f[0][1][i] * y + f[0][2][i];
          ny = f[1][0][i] * x + f[1][1][i] * y + f[1][2][i];
          if (i < anum)
@@ -348,7 +356,7 @@ flame (Display *dpy, Window window)
   total_points = 0;
   (void) recurse (0.0, 0.0, 0, dpy, window);
   XDrawPoints (dpy, window, gc, points, num_points, CoordModeOrigin);
-  XSync (dpy, True);
+  XSync (dpy, False);
   if (delay) usleep (delay);
 }
 
@@ -373,8 +381,8 @@ int matherr(x)
 char *progclass = "Flame";
 
 char *defaults [] = {
-  "Flame.background:   black",         /* to placate SGI */
-  "Flame.foreground:   white",
+  ".background:        black",
+  ".foreground:        white",
   "*colors:    64",
   "*iterations:        25",
   "*delay:     50000",
@@ -397,5 +405,8 @@ screenhack (Display *dpy, Window window)
 {
   init_flame (dpy, window);
   while (1)
-    flame (dpy, window);
+    {
+      flame (dpy, window);
+      screenhack_handle_events (dpy);
+    }
 }