X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fflame.c;h=ffadb67a601ff5f02cfcc50ebd69709383ff9964;hb=f54438ea00f152166e68073e98000fd3a00f65cd;hp=521d3cb7400f6b525554d299e770404e56530d22;hpb=ce3185de9d9705e259f2b60dd4b5509007fa17d4;p=xscreensaver diff --git a/hacks/flame.c b/hacks/flame.c index 521d3cb7..ffadb67a 100644 --- a/hacks/flame.c +++ b/hacks/flame.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1993, 1995, 1996 +/* xscreensaver, Copyright (c) 1993, 1995, 1996, 1998 * Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its @@ -52,6 +52,8 @@ #include #include "screenhack.h" +#include /* so we can ignore SIGFPE */ + #define POINT_BUFFER_SIZE 10 #define MAXLEV 4 #define MAXKINDS 10 @@ -100,6 +102,15 @@ init_flame (Display *dpy, Window window) XGCValues gcv; XWindowAttributes xgwa; Colormap cmap; + +#if defined(SIGFPE) && defined(SIG_IGN) + /* No doubt a better fix would be to track down where the NaN is coming + from, and code around that; but this should do. Apparently most systems + (Linux, Solaris, Irix, ...) ignore FPE by default -- but FreeBSD dumps + core by default. */ + signal (SIGFPE, SIG_IGN); +#endif + XGetWindowAttributes (dpy, window, &xgwa); width = xgwa.width; height = xgwa.height; @@ -167,7 +178,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); */ } } } @@ -356,7 +367,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); } @@ -405,5 +416,8 @@ screenhack (Display *dpy, Window window) { init_flame (dpy, window); while (1) - flame (dpy, window); + { + flame (dpy, window); + screenhack_handle_events (dpy); + } }