http://ftp.x.org/contrib/applications/xscreensaver-3.06.tar.gz
[xscreensaver] / hacks / greynetic.c
index 4dd3f172b608578507d2bff2d0dd72f5b67e5f0c..1377c95d61e5793022d2bf6c3fbb673ce54c8756 100644 (file)
@@ -1,4 +1,5 @@
-/* xscreensaver, Copyright (c) 1992, 1995 Jamie Zawinski <jwz@netscape.com>
+/* xscreensaver, Copyright (c) 1992, 1995, 1996, 1997, 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
 
 #define NBITS 12
 
-#include <X11/bitmaps/stipple>
-#include <X11/bitmaps/cross_weave>
-#include <X11/bitmaps/dimple1>
-#include <X11/bitmaps/dimple3>
-#include <X11/bitmaps/flipped_gray>
-#include <X11/bitmaps/gray1>
-#include <X11/bitmaps/gray3>
-#include <X11/bitmaps/hlines2>
-#include <X11/bitmaps/light_gray>
-#include <X11/bitmaps/root_weave>
-#include <X11/bitmaps/vlines2>
-#include <X11/bitmaps/vlines3>
+#ifndef VMS
+# include <X11/bitmaps/stipple>
+# include <X11/bitmaps/cross_weave>
+# include <X11/bitmaps/dimple1>
+# include <X11/bitmaps/dimple3>
+# include <X11/bitmaps/flipped_gray>
+# include <X11/bitmaps/gray1>
+# include <X11/bitmaps/gray3>
+# include <X11/bitmaps/hlines2>
+# include <X11/bitmaps/light_gray>
+# include <X11/bitmaps/root_weave>
+# include <X11/bitmaps/vlines2>
+# include <X11/bitmaps/vlines3>
+#else /* VMS */
+# include "sys$common:[decw$include.bitmaps]stipple.xbm"
+# include "sys$common:[decw$include.bitmaps]cross_weave.xbm"
+# include "sys$common:[decw$include.bitmaps]dimple1.xbm"
+# include "sys$common:[decw$include.bitmaps]dimple3.xbm"
+# include "sys$common:[decw$include.bitmaps]flipped_gray.xbm"
+# include "sys$common:[decw$include.bitmaps]gray1.xbm"
+# include "sys$common:[decw$include.bitmaps]gray3.xbm"
+# include "sys$common:[decw$include.bitmaps]hlines2.xbm"
+# include "sys$common:[decw$include.bitmaps]light_gray.xbm"
+# include "sys$common:[decw$include.bitmaps]root_weave.xbm"
+# include "sys$common:[decw$include.bitmaps]vlines2.xbm"
+# include "sys$common:[decw$include.bitmaps]vlines3.xbm"
+#endif /* VMS */
 
 static Pixmap pixmaps [NBITS];
 static GC gc;
@@ -33,9 +49,7 @@ static unsigned long fg, bg, pixels [512];
 static int npixels;
 
 static void
-init_greynetic (dpy, window)
-     Display *dpy;
-     Window window;
+init_greynetic (Display *dpy, Window window)
 {
   int i;
   XGCValues gcv;
@@ -71,9 +85,7 @@ init_greynetic (dpy, window)
 }
 
 static void
-greynetic (dpy, window)
-     Display *dpy;
-     Window window;
+greynetic (Display *dpy, Window window)
 {
   static int tick = 500, xlim, ylim;
   static Colormap cmap;
@@ -100,6 +112,7 @@ greynetic (dpy, window)
   gcv.stipple = pixmaps [random () % NBITS];
   if (mono_p)
     {
+    MONO:
       if (random () & 1)
        gcv.foreground = fg, gcv.background = bg;
       else
@@ -127,6 +140,11 @@ greynetic (dpy, window)
       gcv.background = bgc.pixel;
       goto DONE;
     REUSE:
+      if (npixels <= 0)
+       {
+         mono_p = 1;
+         goto MONO;
+       }
       gcv.foreground = pixels [random () % npixels];
       gcv.background = pixels [random () % npixels];
     DONE:
@@ -134,33 +152,32 @@ greynetic (dpy, window)
     }
   XChangeGC (dpy, gc, GCStipple|GCForeground|GCBackground, &gcv);
   XFillRectangle (dpy, window, gc, x, y, w, h);
-  XSync (dpy, True);
+  XSync (dpy, False);
 }
 
 \f
 char *progclass = "Greynetic";
 
 char *defaults [] = {
-  "Greynetic.background:       black",         /* to placate SGI */
-  "Greynetic.foreground:       white",
+  ".background:        black",
+  ".foreground:        white",
   "*delay:     0",
   0
 };
 
 XrmOptionDescRec options [] = {
-  { "-delay",          ".delay",       XrmoptionSepArg, 0 }
+  { "-delay",          ".delay",       XrmoptionSepArg, 0 },
+  { 0, 0, 0, 0 }
 };
-int options_size = (sizeof (options) / sizeof (options[0]));
 
 void
-screenhack (dpy, window)
-     Display *dpy;
-     Window window;
+screenhack (Display *dpy, Window window)
 {
   init_greynetic (dpy, window);
   while (1)
     {
       greynetic (dpy, window);
+      screenhack_handle_events (dpy);
       if (delay) usleep (delay);
     }
 }