ftp://ftp.sunet.se/pub/vendor/sco/skunkware/osr5/x11/savers/xscreensaver/xscreensaver...
[xscreensaver] / hacks / moire.c
diff --git a/hacks/moire.c b/hacks/moire.c
deleted file mode 100644 (file)
index 9b95c6b..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-/* xscreensaver, Copyright (c) 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
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation.  No representations are made about the suitability of this
- * software for any purpose.  It is provided "as is" without express or 
- * implied warranty.
- *
- * Concept snarfed from Michael D. Bayne in
- * http://www.go2net.com/internet/deep/1997/04/16/body.html
- */
-
-#include "screenhack.h"
-#include <X11/Xutil.h>
-#include <stdio.h>
-
-#ifdef HAVE_XSHM_EXTENSION
-# include "xshm.h"
-static Bool use_shm;
-static XShmSegmentInfo shm_info;
-#endif /* HAVE_XSHM_EXTENSION */
-
-static int offset = 0;
-static XColor *colors = 0;
-static int ncolors = 0;
-static GC gc = 0;
-static unsigned long fg_pixel = 0;
-static unsigned long bg_pixel = 0;
-
-static void
-init_moire (Display *dpy, Window window)
-{
-  int oncolors;
-  int i;
-  int fgh, bgh;
-  double fgs, fgv, bgs, bgv;
-  XWindowAttributes xgwa;
-  XColor fgc, bgc;
-  XGCValues gcv;
-  XGetWindowAttributes (dpy, window, &xgwa);
-
-  offset = get_integer_resource ("offset", "Integer");
-  if (offset < 2) offset = 2;
-
-#ifdef HAVE_XSHM_EXTENSION
-  use_shm = get_boolean_resource("useSHM", "Boolean");
-#endif /*  HAVE_XSHM_EXTENSION */
-
- MONO:
-  if (colors)
-    {
-      for (i = 0; i < ncolors; i++)
-       XFreeColors (dpy, xgwa.colormap, &colors[i].pixel, 1, 0);
-      free(colors);
-      colors = 0;
-    }
-
-  if (mono_p)
-    {
-      fg_pixel = WhitePixelOfScreen (DefaultScreenOfDisplay(dpy));
-      bg_pixel = BlackPixelOfScreen (DefaultScreenOfDisplay(dpy));
-    }
-  else
-    {
-      fg_pixel = get_pixel_resource ("foreground", "Foreground", dpy,
-                                    xgwa.colormap);
-      bg_pixel = get_pixel_resource ("background", "Background", dpy,
-                                    xgwa.colormap);
-    }
-
-  if (mono_p)
-    {
-      offset *= 20;   /* compensate for lack of shading */
-      gcv.foreground = fg_pixel;
-    }
-  else
-    {
-      ncolors = get_integer_resource ("ncolors", "Integer");
-      if (ncolors < 2) ncolors = 2;
-      oncolors = ncolors;
-
-      fgc.flags = bgc.flags = DoRed|DoGreen|DoBlue;
-      if (get_boolean_resource("random","Boolean"))
-       {
-         fgc.red   = random() & 0xFFFF;
-         fgc.green = random() & 0xFFFF;
-         fgc.blue  = random() & 0xFFFF;
-         bgc.red   = random() & 0xFFFF;
-         bgc.green = random() & 0xFFFF;
-         bgc.blue  = random() & 0xFFFF;
-       }
-      else
-       {
-         fgc.pixel = fg_pixel;
-         bgc.pixel = bg_pixel;
-         XQueryColor (dpy, xgwa.colormap, &fgc);
-         XQueryColor (dpy, xgwa.colormap, &bgc);
-       }
-      rgb_to_hsv (fgc.red, fgc.green, fgc.blue, &fgh, &fgs, &fgv);
-      rgb_to_hsv (bgc.red, bgc.green, bgc.blue, &bgh, &bgs, &bgv);
-
-      colors = (XColor *) malloc (sizeof (XColor) * (ncolors+2));
-      memset(colors, 0, (sizeof (XColor) * (ncolors+2)));
-      make_color_ramp (dpy, xgwa.colormap,
-                      fgh, fgs, fgv, bgh, bgs, bgv,
-                      colors, &ncolors,
-                      True, True, False);
-      if (ncolors != oncolors)
-       fprintf(stderr, "%s: got %d of %d requested colors.\n",
-               progname, ncolors, oncolors);
-
-      if (ncolors <= 2)
-       {
-         mono_p = True;
-         goto MONO;
-       }
-
-      gcv.foreground = colors[0].pixel;
-    }
-  gc = XCreateGC (dpy, window, GCForeground, &gcv);
-}
-
-
-static void
-moire (Display *dpy, Window window, int offset, XColor *colors, int ncolors)
-{
-  long x, y, xo, yo;
-  int factor = (random() % offset) + 1;
-  XGCValues gcv;
-  XWindowAttributes xgwa;
-  XImage *image;
-  int depth;
-  XGetWindowAttributes (dpy, window, &xgwa);
-
-  xo = (random() % xgwa.width)  - xgwa.width/2;
-  yo = (random() % xgwa.height) - xgwa.height/2;
-
-  depth = visual_depth(DefaultScreenOfDisplay(dpy), xgwa.visual);
-
-  image = 0;
-# ifdef HAVE_XSHM_EXTENSION
-  if (use_shm)
-    {
-      image = create_xshm_image(dpy, xgwa.visual, depth, ZPixmap, 0,
-                               &shm_info, xgwa.width, 1);
-      if (!image)
-       use_shm = False;
-    }
-# endif /* HAVE_XSHM_EXTENSION */
-
-  if (!image)
-    {
-      image = XCreateImage (dpy, xgwa.visual,
-                           depth, ZPixmap, 0,      /* depth, format, offset */
-                           0, xgwa.width, 1, 8, 0); /* data, w, h, pad, bpl */
-      image->data = (char *) calloc(image->height, image->bytes_per_line);
-    }
-
-  for (y = 0; y < xgwa.height; y++)
-    {
-      for (x = 0; x < xgwa.width; x++)
-       {
-         double xx = x + xo;
-         double yy = y + yo;
-         double i = ((xx * xx) + (yy * yy)) / (double) factor;
-         if (mono_p)
-           gcv.foreground = ((((long) i) & 1) ? fg_pixel : bg_pixel);
-         else
-           gcv.foreground = colors[((long) i) % ncolors].pixel;
-         XPutPixel (image, x, 0, gcv.foreground);
-       }
-
-# ifdef HAVE_XSHM_EXTENSION
-      if (use_shm)
-       XShmPutImage(dpy, window, gc, image, 0, 0, 0, y, xgwa.width, 1, False);
-      else
-# endif /*  HAVE_XSHM_EXTENSION */
-       XPutImage (dpy, window, gc, image, 0, 0, 0, y, xgwa.width, 1);
-
-      XSync(dpy, False);
-    }
-
-# ifdef HAVE_XSHM_EXTENSION
-  if (!use_shm)
-# endif /*  HAVE_XSHM_EXTENSION */
-    if (image->data)
-      {
-       free(image->data);
-       image->data = 0;
-      }
-
-  XDestroyImage (image);
-}
-
-\f
-char *progclass = "Moire";
-
-char *defaults [] = {
-  ".background:                blue",
-  ".foreground:                red",
-  "*random:            true",
-  "*delay:             5",
-  "*ncolors:           64",
-  "*offset:            50",
-#ifdef HAVE_XSHM_EXTENSION
-  "*useSHM:          True",
-#endif /*  HAVE_XSHM_EXTENSION */
-  0
-};
-
-XrmOptionDescRec options [] = {
-  { "-random",         ".random",      XrmoptionSepArg, 0 },
-  { "-delay",          ".delay",       XrmoptionSepArg, 0 },
-  { "-ncolors",                ".ncolors",     XrmoptionSepArg, 0 },
-  { "-offset",         ".offset",      XrmoptionSepArg, 0 },
-#ifdef HAVE_XSHM_EXTENSION
-  { "-shm",            ".useSHM",      XrmoptionNoArg, "True" },
-  { "-no-shm",         ".useSHM",      XrmoptionNoArg, "False" },
-#endif /*  HAVE_XSHM_EXTENSION */
-  { 0, 0, 0, 0 }
-};
-
-void
-screenhack (Display *dpy, Window window)
-{
-  int delay = get_integer_resource ("delay", "Integer");
-  while (1)
-    {
-      init_moire (dpy, window);
-      moire (dpy, window, offset, colors, ncolors);
-      XSync (dpy, False);
-      screenhack_handle_events (dpy);
-      if (delay)
-       sleep(delay);
-    }
-}