From: "Alexey I. Froloff" <[email protected]>

---
 wmMatrix/config.h   |   7 -
 wmMatrix/matrix.c   | 469 +++++++++++++++++++++++++------------------------
 wmMatrix/matrix.h   |  40 ++---
 wmMatrix/version.h  |   3 +-
 wmMatrix/wmMatrix.c | 323 +++++++++++++++++-----------------
 wmMatrix/xutils.c   | 497 ++++++++++++++++++++++++----------------------------
 wmMatrix/xutils.h   |  55 +++---
 wmMatrix/yarandom.c |  84 +++++----
 wmMatrix/yarandom.h |  17 +-
 9 files changed, 715 insertions(+), 780 deletions(-)

diff --git a/wmMatrix/config.h b/wmMatrix/config.h
index ad4dadd..cc6070c 100644
--- a/wmMatrix/config.h
+++ b/wmMatrix/config.h
@@ -9,7 +9,6 @@
  *  that your changes will be lost if you ever run `configure' again.
  */
 
-
 /* *************************************************************************
                           CONFIGURING SERVER EXTENSIONS
    ************************************************************************* */
@@ -110,8 +109,6 @@
  */
 /* #undef HAVE_PROC_INTERRUPTS */
 
-
-
 /* *************************************************************************
                           CONFIGURING GRAPHICS TOOLKITS
    ************************************************************************* */
@@ -184,8 +181,6 @@
  */
 #define ZIPPY_PROGRAM "/packages/libexec/emacs/20.2/sparc-sun-solaris2.6/yow"
 
-
-
 /* *************************************************************************
                        CONFIGURING PASSWORD AUTHENTICATION
    ************************************************************************* */
@@ -258,13 +253,11 @@
  */
 /* #undef HAVE_VT_LOCKSWITCH */
 
-
 /* Define this if you the openlog(), syslog(), and closelog() functions.
    This is used for logging failed login attempts.
  */
 #define HAVE_SYSLOG 1
 
-
 /* *************************************************************************
                             OTHER C ENVIRONMENT JUNK
    ************************************************************************* */
diff --git a/wmMatrix/matrix.c b/wmMatrix/matrix.c
index da2f2a2..90f2d75 100644
--- a/wmMatrix/matrix.c
+++ b/wmMatrix/matrix.c
@@ -31,323 +31,328 @@
 #include "resources.h"
 */
 
-extern GC              NormalGC;
-extern GC              EraseGC;
-extern Pixel           back_pix, fore_pix;
-extern int            PixmapSize;
-int                   CHAR_HEIGHT;
-
-
-
-
-
-static void load_images (m_state *state) {
-
-  if (state->xgwa.depth > 1) {
-
-      XpmAttributes xpmattrs;
-      int result;
-
-      xpmattrs.valuemask  = 0;
-      xpmattrs.valuemask |= XpmCloseness;
-      xpmattrs.closeness  = 40000;
-      xpmattrs.valuemask |= XpmVisual;
-      xpmattrs.visual     = state->xgwa.visual;
-      xpmattrs.valuemask |= XpmDepth;
-      xpmattrs.depth      = state->xgwa.depth;
-      xpmattrs.valuemask |= XpmColormap;
-      xpmattrs.colormap   = state->xgwa.colormap;
-
-      if (PixmapSize == 1){
-
-         CHAR_HEIGHT = 4;
-          result = XpmCreatePixmapFromData (state->dpy, state->window, small,
-                                        &state->images, 0 /* mask */,
-                                        &xpmattrs);
-      } else if (PixmapSize == 2){
-
-         CHAR_HEIGHT = 6;
-          result = XpmCreatePixmapFromData (state->dpy, state->window, medium,
-                                        &state->images, 0 /* mask */,
-                                        &xpmattrs);
-      } else {
-
-         CHAR_HEIGHT = 8;
-          result = XpmCreatePixmapFromData (state->dpy, state->window, large,
-                                        &state->images, 0 /* mask */,
-                                        &xpmattrs);
-      }
-
-      if (!state->images || (result != XpmSuccess && result != XpmColorError))
-        state->images = 0;
-
-      state->image_width = xpmattrs.width;
-      state->image_height = xpmattrs.height;
-      state->nglyphs = state->image_height / CHAR_HEIGHT;
-
-    } else {
-
-      state->image_width = matrix_width;
-      state->image_height = matrix_height;
-      state->nglyphs = state->image_height / CHAR_HEIGHT;
-
-      state->images = XCreatePixmapFromBitmapData (state->dpy, state->window,
-                                     (char *) matrix_bits,
-                                     state->image_width, state->image_height,
-                                     back_pix, fore_pix, state->xgwa.depth);
-    }
+extern GC NormalGC;
+extern GC EraseGC;
+extern Pixel back_pix, fore_pix;
+extern int PixmapSize;
+int CHAR_HEIGHT;
+
+static void load_images(m_state * state)
+{
+
+       if (state->xgwa.depth > 1) {
+
+               XpmAttributes xpmattrs;
+               int result;
+
+               xpmattrs.valuemask = 0;
+               xpmattrs.valuemask |= XpmCloseness;
+               xpmattrs.closeness = 40000;
+               xpmattrs.valuemask |= XpmVisual;
+               xpmattrs.visual = state->xgwa.visual;
+               xpmattrs.valuemask |= XpmDepth;
+               xpmattrs.depth = state->xgwa.depth;
+               xpmattrs.valuemask |= XpmColormap;
+               xpmattrs.colormap = state->xgwa.colormap;
+
+               if (PixmapSize == 1) {
+
+                       CHAR_HEIGHT = 4;
+                       result = XpmCreatePixmapFromData(state->dpy, 
state->window, small, &state->images, 0 /* mask */ ,
+                                                                               
         &xpmattrs);
+               } else if (PixmapSize == 2) {
+
+                       CHAR_HEIGHT = 6;
+                       result = XpmCreatePixmapFromData(state->dpy, 
state->window, medium, &state->images, 0 /* mask */ ,
+                                                                               
         &xpmattrs);
+               } else {
+
+                       CHAR_HEIGHT = 8;
+                       result = XpmCreatePixmapFromData(state->dpy, 
state->window, large, &state->images, 0 /* mask */ ,
+                                                                               
         &xpmattrs);
+               }
+
+               if (!state->images || (result != XpmSuccess && result != 
XpmColorError))
+                       state->images = 0;
+
+               state->image_width = xpmattrs.width;
+               state->image_height = xpmattrs.height;
+               state->nglyphs = state->image_height / CHAR_HEIGHT;
+
+       } else {
+
+               state->image_width = matrix_width;
+               state->image_height = matrix_height;
+               state->nglyphs = state->image_height / CHAR_HEIGHT;
+
+               state->images = XCreatePixmapFromBitmapData(state->dpy, 
state->window,
+                                                                               
                        (char *)matrix_bits,
+                                                                               
                        state->image_width, state->image_height, back_pix, 
fore_pix, state->xgwa.depth);
+       }
 
 }
 
+m_state *init_matrix(Display * dpy, Window window)
+{
 
-m_state *init_matrix( Display *dpy, Window window ) {
-
-  m_state *state = (m_state *) calloc (sizeof(*state), 1);
-
+       m_state *state = (m_state *) calloc(sizeof(*state), 1);
 
-  state->dpy = dpy;
-  state->window = window;
+       state->dpy = dpy;
+       state->window = window;
 
-  XGetWindowAttributes (dpy, window, &state->xgwa);
-  load_images (state);
+       XGetWindowAttributes(dpy, window, &state->xgwa);
+       load_images(state);
 
-  state->draw_gc  = NormalGC;
-  state->erase_gc = EraseGC;
+       state->draw_gc = NormalGC;
+       state->erase_gc = EraseGC;
 
-  state->char_width = state->image_width / 2;
-  state->char_height = CHAR_HEIGHT;
+       state->char_width = state->image_width / 2;
+       state->char_height = CHAR_HEIGHT;
 
-  state->grid_width  = state->xgwa.width  / state->char_width;
-  state->grid_height = state->xgwa.height / state->char_height;
-  state->grid_width++;
-  state->grid_height++;
+       state->grid_width = state->xgwa.width / state->char_width;
+       state->grid_height = state->xgwa.height / state->char_height;
+       state->grid_width++;
+       state->grid_height++;
 
-  state->cells = (m_cell *)calloc (sizeof(m_cell), state->grid_width * 
state->grid_height);
-  state->feeders = (m_feeder *)calloc (sizeof(m_feeder), state->grid_width);
+       state->cells = (m_cell *) calloc(sizeof(m_cell), state->grid_width * 
state->grid_height);
+       state->feeders = (m_feeder *) calloc(sizeof(m_feeder), 
state->grid_width);
 
-  state->density = 40;
+       state->density = 40;
 
-  state->insert_top_p = False;
-  state->insert_bottom_p = True;
+       state->insert_top_p = False;
+       state->insert_bottom_p = True;
 
-
-  return state;
+       return state;
 
 }
 
+static void insert_glyph(m_state * state, int glyph, int x, int y)
+{
 
-static void insert_glyph (m_state *state, int glyph, int x, int y) {
-
-  Bool bottom_feeder_p = (y >= 0);
-  m_cell *from, *to;
+       Bool bottom_feeder_p = (y >= 0);
+       m_cell *from, *to;
 
-  if (y >= state->grid_height) return;
+       if (y >= state->grid_height)
+               return;
 
-  if (bottom_feeder_p) {
+       if (bottom_feeder_p) {
 
-      to = &state->cells[state->grid_width * y + x];
+               to = &state->cells[state->grid_width * y + x];
 
-  } else {
+       } else {
 
-      for (y = state->grid_height-1; y > 0; y--) {
+               for (y = state->grid_height - 1; y > 0; y--) {
 
-          from = &state->cells[state->grid_width * (y-1) + x];
-          to   = &state->cells[state->grid_width * y     + x];
-          *to = *from;
-          to->changed = True;
+                       from = &state->cells[state->grid_width * (y - 1) + x];
+                       to = &state->cells[state->grid_width * y + x];
+                       *to = *from;
+                       to->changed = True;
 
-    }
-    to = &state->cells[x];
+               }
+               to = &state->cells[x];
 
-  }
+       }
 
-  to->glyph = glyph;
-  to->changed = True;
+       to->glyph = glyph;
+       to->changed = True;
 
-  if (!to->glyph) ;
-  else if (bottom_feeder_p) to->glow = 1 + (random() % 2);
-  else to->glow = 0;
+       if (!to->glyph) ;
+       else if (bottom_feeder_p)
+               to->glow = 1 + (random() % 2);
+       else
+               to->glow = 0;
 
 }
 
+static void feed_matrix(m_state * state)
+{
 
-static void feed_matrix (m_state *state) {
-
-    int x;
+       int x;
 
+       /* 
+        *  Update according to current feeders. 
+        */
+       for (x = 0; x < state->grid_width; x++) {
 
-    /* 
-     *  Update according to current feeders. 
-     */
-    for (x = 0; x < state->grid_width; x++) {
+               m_feeder *f = &state->feeders[x];
 
-        m_feeder *f = &state->feeders[x];
+               if (f->throttle) {              /* this is a delay tick, synced 
to frame. */
 
-        if (f->throttle) {             /* this is a delay tick, synced to 
frame. */
+                       f->throttle--;
 
-            f->throttle--;
+               } else if (f->remaining > 0) {  /* how many items are in the 
pipe */
 
-        } else if (f->remaining > 0) { /* how many items are in the pipe */
+                       int g = (random() % state->nglyphs) + 1;
+                       insert_glyph(state, g, x, f->y);
+                       f->remaining--;
+                       if (f->y >= 0)
+                               f->y++;                 /* bottom_feeder_p */
 
-           int g = (random() % state->nglyphs) + 1;
-           insert_glyph (state, g, x, f->y);
-           f->remaining--;
-           if (f->y >= 0)  f->y++; /* bottom_feeder_p */
+               } else {                                /* if pipe is empty, 
insert spaces */
 
-        } else {       /* if pipe is empty, insert spaces */
+                       insert_glyph(state, 0, x, f->y);
+                       if (f->y >= 0)
+                               f->y++;                 /* bottom_feeder_p */
 
-            insert_glyph (state, 0, x, f->y);
-            if (f->y >= 0) f->y++;   /* bottom_feeder_p */
+               }
 
-        }
+               if ((random() % 10) == 0) {     /* randomly change throttle 
speed */
 
-       if ((random() % 10) == 0) {  /* randomly change throttle speed */
+                       f->throttle = ((random() % 5) + (random() % 5));
 
-           f->throttle = ((random() % 5) + (random() % 5));
+               }
 
        }
 
-    }
-
 }
 
-static int densitizer (m_state *state) {
-
-  /* Horrid kludge that converts percentages (density of screen coverage)
-     to the parameter that actually controls this.  I got this mapping
-     empirically, on a 1024x768 screen.  Sue me. */
-  if      (state->density < 10) return 85;
-  else if (state->density < 15) return 60;
-  else if (state->density < 20) return 45;
-  else if (state->density < 25) return 25;
-  else if (state->density < 30) return 20;
-  else if (state->density < 35) return 15;
-  else if (state->density < 45) return 10;
-  else if (state->density < 50) return 8;
-  else if (state->density < 55) return 7;
-  else if (state->density < 65) return 5;
-  else if (state->density < 80) return 3;
-  else if (state->density < 90) return 2;
-  else return 1;
+static int densitizer(m_state * state)
+{
+
+       /* Horrid kludge that converts percentages (density of screen coverage)
+          to the parameter that actually controls this.  I got this mapping
+          empirically, on a 1024x768 screen.  Sue me. */
+       if (state->density < 10)
+               return 85;
+       else if (state->density < 15)
+               return 60;
+       else if (state->density < 20)
+               return 45;
+       else if (state->density < 25)
+               return 25;
+       else if (state->density < 30)
+               return 20;
+       else if (state->density < 35)
+               return 15;
+       else if (state->density < 45)
+               return 10;
+       else if (state->density < 50)
+               return 8;
+       else if (state->density < 55)
+               return 7;
+       else if (state->density < 65)
+               return 5;
+       else if (state->density < 80)
+               return 3;
+       else if (state->density < 90)
+               return 2;
+       else
+               return 1;
 
 }
 
+static void hack_matrix(m_state * state)
+{
 
-static void hack_matrix (m_state *state) {
+       int x;
 
-  int x;
+       /* Glow some characters. */
+       if (!state->insert_bottom_p) {
 
-  /* Glow some characters. */
-  if (!state->insert_bottom_p) {
+               int i = random() % (state->grid_width / 2);
+               while (--i > 0) {
 
-      int i = random() % (state->grid_width / 2);
-      while (--i > 0) {
+                       int x = random() % state->grid_width;
+                       int y = random() % state->grid_height;
+                       m_cell *cell = &state->cells[state->grid_width * y + x];
+                       if (cell->glyph && cell->glow == 0) {
 
-          int x = random() % state->grid_width;
-          int y = random() % state->grid_height;
-          m_cell *cell = &state->cells[state->grid_width * y + x];
-          if (cell->glyph && cell->glow == 0) {
+                               cell->glow = random() % 10;
+                               cell->changed = True;
+                       }
 
-              cell->glow = random() % 10;
-              cell->changed = True;
-         }
-
-      }
-  }
+               }
+       }
 
-  /* Change some of the feeders. */
-  for (x = 0; x < state->grid_width; x++) {
+       /* Change some of the feeders. */
+       for (x = 0; x < state->grid_width; x++) {
 
-      m_feeder *f = &state->feeders[x];
-      Bool bottom_feeder_p;
+               m_feeder *f = &state->feeders[x];
+               Bool bottom_feeder_p;
 
-      if (f->remaining > 0)    /* never change if pipe isn't empty */
-        continue;
+               if (f->remaining > 0)   /* never change if pipe isn't empty */
+                       continue;
 
-      if ((random() % densitizer(state)) != 0) /* then change N% of the time */
-        continue;
+               if ((random() % densitizer(state)) != 0)        /* then change 
N% of the time */
+                       continue;
 
-      f->remaining = 3 + (random() % state->grid_height);
-      f->throttle = ((random() % 5) + (random() % 5));
+               f->remaining = 3 + (random() % state->grid_height);
+               f->throttle = ((random() % 5) + (random() % 5));
 
-      if ((random() % 4) != 0)
-        f->remaining = 0;
+               if ((random() % 4) != 0)
+                       f->remaining = 0;
 
-      if (state->insert_top_p && state->insert_bottom_p)
-        bottom_feeder_p = (random() & 1);
-      else
-        bottom_feeder_p = state->insert_bottom_p;
+               if (state->insert_top_p && state->insert_bottom_p)
+                       bottom_feeder_p = (random() & 1);
+               else
+                       bottom_feeder_p = state->insert_bottom_p;
 
-      if (bottom_feeder_p)
-        f->y = random() % (state->grid_height / 2);
-      else
-        f->y = -1;
-    }
+               if (bottom_feeder_p)
+                       f->y = random() % (state->grid_height / 2);
+               else
+                       f->y = -1;
+       }
 }
 
+void draw_matrix(m_state * state, int d)
+{
 
-void draw_matrix (m_state *state, int d) {
+       int x, y;
+       int count = 0;
 
-    int x, y;
-    int count = 0;
+       state->density = d;
+       feed_matrix(state);
+       hack_matrix(state);
 
-    state->density = d;
-    feed_matrix( state );
-    hack_matrix( state );
+       for (y = 0; y < state->grid_height; y++) {
+               for (x = 0; x < state->grid_width; x++) {
 
-    for (y = 0; y < state->grid_height; y++) {
-       for (x = 0; x < state->grid_width; x++) {
+                       m_cell *cell = &state->cells[state->grid_width * y + x];
 
-           m_cell *cell = &state->cells[state->grid_width * y + x];
+                       if (cell->glyph)
+                               count++;
 
-           if ( cell->glyph ) count++;
+                       if (!cell->changed)
+                               continue;
 
-           if ( !cell->changed ) continue; 
+                       if (cell->glyph == 0) {
 
-           if ( cell->glyph == 0 ) {
+                               XFillRectangle(state->dpy, state->window, 
state->erase_gc,
+                                                          x * 
state->char_width, y * state->char_height, state->char_width, 
state->char_height);
+                       } else {
 
-               XFillRectangle( state->dpy, state->window, state->erase_gc,
-                               x * state->char_width, y * state->char_height,
-                               state->char_width, state->char_height );
-           } else {
+                               XCopyArea(state->dpy, state->images, 
state->window, state->draw_gc,
+                                                 (cell->glow ? 
state->char_width : 0), (cell->glyph - 1) * state->char_height,
+                                                 state->char_width, 
state->char_height, x * state->char_width, y * state->char_height);
 
-               XCopyArea( state->dpy, state->images, state->window, 
state->draw_gc,
-                               (cell->glow ? state->char_width : 0), 
(cell->glyph - 1) * state->char_height,
-                               state->char_width, state->char_height, x * 
state->char_width, y * state->char_height );
-                                               
-           }
+                       }
 
-           cell->changed = False;
+                       cell->changed = False;
 
-           if (cell->glow > 0) {
+                       if (cell->glow > 0) {
 
-               cell->glow--;
-               cell->changed = True;
+                               cell->glow--;
+                               cell->changed = True;
 
-           }
+                       }
 
+               }
        }
-    }
-
 
 #if 0
-  {
-    static int i = 0;
-    static int ndens = 0;
-    static int tdens = 0;
-    i++;
-    if (i > 50)
-      {
-        int dens = (100.0 *
-                    (((double)count) /
-                     ((double) (state->grid_width * state->grid_height))));
-        tdens += dens;
-        ndens++;
-        printf ("density: %d%% (%d%%)\n", dens, (tdens / ndens));
-        i = 0;
-      }
-  }
+       {
+               static int i = 0;
+               static int ndens = 0;
+               static int tdens = 0;
+               i++;
+               if (i > 50) {
+                       int dens = (100.0 * (((double)count) / 
((double)(state->grid_width * state->grid_height))));
+                       tdens += dens;
+                       ndens++;
+                       printf("density: %d%% (%d%%)\n", dens, (tdens / ndens));
+                       i = 0;
+               }
+       }
 #endif
 
 }
-
diff --git a/wmMatrix/matrix.h b/wmMatrix/matrix.h
index ae90d93..f3e7d92 100644
--- a/wmMatrix/matrix.h
+++ b/wmMatrix/matrix.h
@@ -6,34 +6,32 @@
 #include <X11/Xutil.h>
 #include <X11/xpm.h>
 
-
 typedef struct {
-  int glyph;
-  int changed;
-  int glow;
+       int glyph;
+       int changed;
+       int glow;
 } m_cell;
 
 typedef struct {
-  int remaining;
-  int throttle;
-  int y;
+       int remaining;
+       int throttle;
+       int y;
 } m_feeder;
 
 typedef struct {
-  Display *dpy;
-  Window window;
-  XWindowAttributes xgwa;
-  GC draw_gc, erase_gc;
-  int grid_width, grid_height;
-  int char_width, char_height;
-  m_cell *cells;
-  m_feeder *feeders;
-  int insert_top_p, insert_bottom_p;
-  int density;
+       Display *dpy;
+       Window window;
+       XWindowAttributes xgwa;
+       GC draw_gc, erase_gc;
+       int grid_width, grid_height;
+       int char_width, char_height;
+       m_cell *cells;
+       m_feeder *feeders;
+       int insert_top_p, insert_bottom_p;
+       int density;
 
-  Pixmap images;
-  int image_width, image_height;
-  int nglyphs;
+       Pixmap images;
+       int image_width, image_height;
+       int nglyphs;
 
 } m_state;
-
diff --git a/wmMatrix/version.h b/wmMatrix/version.h
index f71c521..a119d20 100644
--- a/wmMatrix/version.h
+++ b/wmMatrix/version.h
@@ -1,2 +1 @@
-static const char screensaver_id[] =
-       "@(#)xscreensaver 3.17 (15-Jul-99), by Jamie Zawinski ([email protected])";
+static const char screensaver_id[] = "@(#)xscreensaver 3.17 (15-Jul-99), by 
Jamie Zawinski ([email protected])";
diff --git a/wmMatrix/wmMatrix.c b/wmMatrix/wmMatrix.c
index 002f993..e4b387e 100644
--- a/wmMatrix/wmMatrix.c
+++ b/wmMatrix/wmMatrix.c
@@ -38,7 +38,6 @@
  *
  */
 
-
 /*
  *   Includes
  */
@@ -54,157 +53,155 @@
 #include "wmMatrix_mask.xbm"
 #include "matrix.h"
 
-
 /*
  *  Delay between refreshes (in microseconds)
  */
-#define DELAY 20000UL /* 0.020000 sec */
+#define DELAY 20000UL                  /* 0.020000 sec */
 #define WMMATRIX_VERSION "0.2"
 
+void ParseCMDLine(int argc, char *argv[]);
+void ButtonPressEvent(XButtonEvent *);
+void print_usage();
+m_state *init_matrix(Display *, Window);
+void draw_matrix(m_state *, int);
 
-void    ParseCMDLine(int argc, char *argv[]);
-void    ButtonPressEvent(XButtonEvent *);
-void    print_usage();
-m_state *init_matrix( Display *, Window );
-void    draw_matrix( m_state *, int );
-
-
-int             GotFirstClick1, GotDoubleClick1;
-int             GotFirstClick2, GotDoubleClick2;
-int             GotFirstClick3, GotDoubleClick3;
-int             DblClkDelay;
+int GotFirstClick1, GotDoubleClick1;
+int GotFirstClick2, GotDoubleClick2;
+int GotFirstClick3, GotDoubleClick3;
+int DblClkDelay;
 /*int           HasExecute;*/
 /*char*         ExecuteCommand = "xmatrixsmall";*/
-char           *progname  = "wmMatrix";
-char           *progclass = "WMMatrix";
-int             PixmapSize;
+char *progname = "wmMatrix";
+char *progclass = "WMMatrix";
+int PixmapSize;
 char *DoubleClickCmd = NULL;
 char *RDoubleClickCmd = NULL;
-char*   TimeColor      = "#ffff00";
-char*   BackgroundColor        = "#181818";
-
+char *TimeColor = "#ffff00";
+char *BackgroundColor = "#181818";
 
 /*
  *   main
  */
-int main(int argc, char *argv[]) {
-    XEvent              event;
-    m_state            *state;
-
-
-    /*
-     *  Parse any command line arguments.
-     */
-    ParseCMDLine(argc, argv);
-    if(DoubleClickCmd==NULL)
-       DoubleClickCmd=strdup("xscreensaver-demo");
-    if(RDoubleClickCmd==NULL)
-       RDoubleClickCmd=strdup("xscreensaver-command -activate");
-    initXwindow(argc, argv);
-    openXwindow(argc, argv, wmMatrix_master, wmMatrix_mask_bits, 
wmMatrix_mask_width, wmMatrix_mask_height);
-    state = init_matrix( display, iconwin );
-
-    /*
-     *  Loop until we die
-     */
-    while(1) {
-       draw_matrix( state, 40 );
-
-        /*
-         *  Double Click Delays
-         *  Keep track of click events. If Delay too long, set GotFirstClick's 
to False.
-         */
-       /* 25 * 0.02 = .5 sec */
-        if (DblClkDelay > 25) {
-            DblClkDelay = 0;
-            GotFirstClick1 = 0; GotDoubleClick1 = 0;
-            GotFirstClick2 = 0; GotDoubleClick2 = 0;
-            GotFirstClick3 = 0; GotDoubleClick3 = 0;
-        } else {
-            ++DblClkDelay;
-        }
+int main(int argc, char *argv[])
+{
+       XEvent event;
+       m_state *state;
 
        /*
-        *   Process any pending X events.
+        *  Parse any command line arguments.
         */
-        while(XPending(display)){
-            XNextEvent(display, &event);
-            switch(event.type){
-                case Expose:
-                        RedrawWindow();
-                        break;
-                case ButtonPress:
-                        ButtonPressEvent(&event.xbutton);
-                        break;
-                case ButtonRelease:
-                        break;
-            }
-        }
+       ParseCMDLine(argc, argv);
+       if (DoubleClickCmd == NULL)
+               DoubleClickCmd = strdup("xscreensaver-demo");
+       if (RDoubleClickCmd == NULL)
+               RDoubleClickCmd = strdup("xscreensaver-command -activate");
+       initXwindow(argc, argv);
+       openXwindow(argc, argv, wmMatrix_master, wmMatrix_mask_bits, 
wmMatrix_mask_width, wmMatrix_mask_height);
+       state = init_matrix(display, iconwin);
 
        /*
-        *  sleep till next update. I cant seem to get usleep or select to work 
properly
-        *  with args smaller than 10000. A kernel tick problem? If I comment 
out the next line,
-        *  the app screams (chews up cpu too). Or if I use DELAY of 0 it also 
screams.
-        *  But a delay of 1 or higher is slow.....
-        *
+        *  Loop until we die
         */
-       short_uusleep(DELAY);
-     }
-}
+       while (1) {
+               draw_matrix(state, 40);
 
+               /*
+                *  Double Click Delays
+                *  Keep track of click events. If Delay too long, set 
GotFirstClick's to False.
+                */
+               /* 25 * 0.02 = .5 sec */
+               if (DblClkDelay > 25) {
+                       DblClkDelay = 0;
+                       GotFirstClick1 = 0;
+                       GotDoubleClick1 = 0;
+                       GotFirstClick2 = 0;
+                       GotDoubleClick2 = 0;
+                       GotFirstClick3 = 0;
+                       GotDoubleClick3 = 0;
+               } else {
+                       ++DblClkDelay;
+               }
+
+               /*
+                *   Process any pending X events.
+                */
+               while (XPending(display)) {
+                       XNextEvent(display, &event);
+                       switch (event.type) {
+                       case Expose:
+                               RedrawWindow();
+                               break;
+                       case ButtonPress:
+                               ButtonPressEvent(&event.xbutton);
+                               break;
+                       case ButtonRelease:
+                               break;
+                       }
+               }
+
+               /*
+                *  sleep till next update. I cant seem to get usleep or select 
to work properly
+                *  with args smaller than 10000. A kernel tick problem? If I 
comment out the next line,
+                *  the app screams (chews up cpu too). Or if I use DELAY of 0 
it also screams.
+                *  But a delay of 1 or higher is slow.....
+                *
+                */
+               short_uusleep(DELAY);
+       }
+}
 
 /*
  *   ParseCMDLine()
  */
-void ParseCMDLine(int argc, char *argv[]) {
-    int  i;
-    PixmapSize = 2;
-    for (i = 1; i < argc; i++) {
-       if (!strcmp(argv[i], "-display")){
-            ++i;
-       } else if (!strcmp(argv[i], "-c")){
-            if ((i+1 >= argc)||(argv[i+1][0] == '-')) {
-                fprintf(stderr, "wmMatrix: No command given\n");
-                print_usage();
-                exit(-1);
-            }
-           if(DoubleClickCmd!=NULL)
-             free(DoubleClickCmd);
-           DoubleClickCmd=strdup(argv[++i]);
-       } else if (!strcmp(argv[i], "-cr")){
-            if ((i+1 >= argc)||(argv[i+1][0] == '-')) {
-                fprintf(stderr, "wmMatrix: No command given\n");
-                print_usage();
-                exit(-1);
-            }
-           if(RDoubleClickCmd!=NULL)
-             free(RDoubleClickCmd);
-           RDoubleClickCmd=strdup(argv[++i]);
-        } else if (!strcmp(argv[i], "-sml")){
-           PixmapSize  = 1;
-        } else if (!strcmp(argv[i], "-med")){
-           PixmapSize  = 2;
-        } else if (!strcmp(argv[i], "-lrg")){
-           PixmapSize  = 3;
-        } else {
-           print_usage();
-            exit(1);
+void ParseCMDLine(int argc, char *argv[])
+{
+       int i;
+       PixmapSize = 2;
+       for (i = 1; i < argc; i++) {
+               if (!strcmp(argv[i], "-display")) {
+                       ++i;
+               } else if (!strcmp(argv[i], "-c")) {
+                       if ((i + 1 >= argc) || (argv[i + 1][0] == '-')) {
+                               fprintf(stderr, "wmMatrix: No command given\n");
+                               print_usage();
+                               exit(-1);
+                       }
+                       if (DoubleClickCmd != NULL)
+                               free(DoubleClickCmd);
+                       DoubleClickCmd = strdup(argv[++i]);
+               } else if (!strcmp(argv[i], "-cr")) {
+                       if ((i + 1 >= argc) || (argv[i + 1][0] == '-')) {
+                               fprintf(stderr, "wmMatrix: No command given\n");
+                               print_usage();
+                               exit(-1);
+                       }
+                       if (RDoubleClickCmd != NULL)
+                               free(RDoubleClickCmd);
+                       RDoubleClickCmd = strdup(argv[++i]);
+               } else if (!strcmp(argv[i], "-sml")) {
+                       PixmapSize = 1;
+               } else if (!strcmp(argv[i], "-med")) {
+                       PixmapSize = 2;
+               } else if (!strcmp(argv[i], "-lrg")) {
+                       PixmapSize = 3;
+               } else {
+                       print_usage();
+                       exit(1);
+               }
        }
-    }
 }
 
-
-void print_usage() {
-    printf("\nwmMatrix version: %s\n", WMMATRIX_VERSION);
-    printf("\t-h\t\tDisplay help screen.\n");
-    printf("\t-c cmd\t\tCommand executed on doubleclick.\n");
-    printf("\t-cr cmd\t\tCommand executed on right doubleclick\n");
-    printf("\t-sml\t\tUse small size pixmap.\n");
-    printf("\t-med\t\tUse medium size pixmap.\n");
-    printf("\t-lrg\t\tUse large size pixmap.\n");
+void print_usage()
+{
+       printf("\nwmMatrix version: %s\n", WMMATRIX_VERSION);
+       printf("\t-h\t\tDisplay help screen.\n");
+       printf("\t-c cmd\t\tCommand executed on doubleclick.\n");
+       printf("\t-cr cmd\t\tCommand executed on right doubleclick\n");
+       printf("\t-sml\t\tUse small size pixmap.\n");
+       printf("\t-med\t\tUse medium size pixmap.\n");
+       printf("\t-lrg\t\tUse large size pixmap.\n");
 }
 
-
 /*
  *  This routine handles button presses.
  *
@@ -215,46 +212,50 @@ void print_usage() {
  *
  *
  */
-void ButtonPressEvent(XButtonEvent *xev){
-    DblClkDelay = 0;
-    if ((xev->button == Button1) && (xev->type == ButtonPress)){
-        if (GotFirstClick1) GotDoubleClick1 = 1;
-        else GotFirstClick1 = 1;
-    } else if ((xev->button == Button2) && (xev->type == ButtonPress)){
-        if (GotFirstClick2) GotDoubleClick2 = 1;
-        else GotFirstClick2 = 1;
-    } else if ((xev->button == Button3) && (xev->type == ButtonPress)){
-        if (GotFirstClick3) GotDoubleClick3 = 1;
-        else GotFirstClick3 = 1;
-    }
-
-
-    /*
-     *  We got a double click on Mouse Button1 (i.e. the left one)
-     */
-    if (GotDoubleClick1) {
-        GotFirstClick1 = 0;
-        GotDoubleClick1 = 0;
-        system(DoubleClickCmd);
-    }
-
+void ButtonPressEvent(XButtonEvent * xev)
+{
+       DblClkDelay = 0;
+       if ((xev->button == Button1) && (xev->type == ButtonPress)) {
+               if (GotFirstClick1)
+                       GotDoubleClick1 = 1;
+               else
+                       GotFirstClick1 = 1;
+       } else if ((xev->button == Button2) && (xev->type == ButtonPress)) {
+               if (GotFirstClick2)
+                       GotDoubleClick2 = 1;
+               else
+                       GotFirstClick2 = 1;
+       } else if ((xev->button == Button3) && (xev->type == ButtonPress)) {
+               if (GotFirstClick3)
+                       GotDoubleClick3 = 1;
+               else
+                       GotFirstClick3 = 1;
+       }
 
-    /*
-     *  We got a double click on Mouse Button2 (i.e. the middle one)
-     */
-    if (GotDoubleClick2) {
-        GotFirstClick2 = 0;
-        GotDoubleClick2 = 0;
-    }
+       /*
+        *  We got a double click on Mouse Button1 (i.e. the left one)
+        */
+       if (GotDoubleClick1) {
+               GotFirstClick1 = 0;
+               GotDoubleClick1 = 0;
+               system(DoubleClickCmd);
+       }
 
+       /*
+        *  We got a double click on Mouse Button2 (i.e. the middle one)
+        */
+       if (GotDoubleClick2) {
+               GotFirstClick2 = 0;
+               GotDoubleClick2 = 0;
+       }
 
-    /*
-     *  We got a double click on Mouse Button3 (i.e. the right one)
-     */
-    if (GotDoubleClick3) {
-        GotFirstClick3 = 0;
-       GotDoubleClick3 = 0;
-        system(RDoubleClickCmd);
-    }
-   return;
+       /*
+        *  We got a double click on Mouse Button3 (i.e. the right one)
+        */
+       if (GotDoubleClick3) {
+               GotFirstClick3 = 0;
+               GotDoubleClick3 = 0;
+               system(RDoubleClickCmd);
+       }
+       return;
 }
diff --git a/wmMatrix/xutils.c b/wmMatrix/xutils.c
index 6adb87b..c43a98a 100644
--- a/wmMatrix/xutils.c
+++ b/wmMatrix/xutils.c
@@ -27,7 +27,7 @@
  *
  *
  *
- */  
+ */
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -41,342 +41,297 @@
 #include <sys/select.h>
 #include "xutils.h"
 
-
-
 /*
  *   X11 Variables 
  */
-int            x_fd;
-XSizeHints     mysizehints;
-XWMHints       mywmhints;
-Pixel          back_pix, fore_pix;
-char           *Geometry = "";
-GC             NormalGC;
-GC             EraseGC;
-XpmIcon                wmgen;
-Pixmap         pixmask;
-
+int x_fd;
+XSizeHints mysizehints;
+XWMHints mywmhints;
+Pixel back_pix, fore_pix;
+char *Geometry = "";
+GC NormalGC;
+GC EraseGC;
+XpmIcon wmgen;
+Pixmap pixmask;
 
 /*
  *  Colors for wmCalClock
  */
-extern char    TimeColor[30];
-extern char    BackgroundColor[30];
-
-
-
-
-
+extern char TimeColor[30];
+extern char BackgroundColor[30];
 
 /*
  *   flush_expose
  */
-static int flush_expose(Window w) {
+static int flush_expose(Window w)
+{
 
-    XEvent     dummy;
-    int                i=0;
+       XEvent dummy;
+       int i = 0;
 
-    while (XCheckTypedWindowEvent(display, w, Expose, &dummy))
-    i++;
+       while (XCheckTypedWindowEvent(display, w, Expose, &dummy))
+               i++;
 
-    return i;
+       return i;
 
 }
 
-
-
-
-
-
-
-
-
 /*
  *   RedrawWindow
  *   RedrawWindowXY
  */
-void RedrawWindow(void) {
-       
-    flush_expose(iconwin);
-    XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, 0,0, 
wmgen.attributes.width, wmgen.attributes.height, 0, 0);
+void RedrawWindow(void)
+{
 
-    flush_expose(win);
-    XCopyArea(display, wmgen.pixmap, win, NormalGC, 0,0, 
wmgen.attributes.width, wmgen.attributes.height, 0, 0);
+       flush_expose(iconwin);
+       XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, 0, 0, 
wmgen.attributes.width, wmgen.attributes.height, 0, 0);
 
-}
-
-void RedrawWindowXY(int x, int y) {
-       
-    flush_expose(iconwin);
-    XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, x,y, 
wmgen.attributes.width, wmgen.attributes.height, 0, 0);
-
-    flush_expose(win);
-    XCopyArea(display, wmgen.pixmap, win, NormalGC, x,y, 
wmgen.attributes.width, wmgen.attributes.height, 0, 0);
+       flush_expose(win);
+       XCopyArea(display, wmgen.pixmap, win, NormalGC, 0, 0, 
wmgen.attributes.width, wmgen.attributes.height, 0, 0);
 
 }
 
+void RedrawWindowXY(int x, int y)
+{
 
+       flush_expose(iconwin);
+       XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, x, y, 
wmgen.attributes.width, wmgen.attributes.height, 0, 0);
 
+       flush_expose(win);
+       XCopyArea(display, wmgen.pixmap, win, NormalGC, x, y, 
wmgen.attributes.width, wmgen.attributes.height, 0, 0);
 
-
-
+}
 
 /*
  *   copyXPMArea
  *   copyXBMArea
  */
-void copyXPMArea(int x, int y, int sx, int sy, int dx, int dy) {
+void copyXPMArea(int x, int y, int sx, int sy, int dx, int dy)
+{
        XCopyArea(display, wmgen.pixmap, wmgen.pixmap, NormalGC, x, y, sx, sy, 
dx, dy);
 }
 
-void copyXBMArea(int x, int y, int sx, int sy, int dx, int dy) {
+void copyXBMArea(int x, int y, int sx, int sy, int dx, int dy)
+{
 
        XCopyArea(display, wmgen.mask, wmgen.pixmap, NormalGC, x, y, sx, sy, 
dx, dy);
 }
 
-
-
 /*
  *   initXwindow
  */
-void initXwindow(int argc, char *argv[]){
-
-    int                 i;
-    char       *display_name = NULL;
+void initXwindow(int argc, char *argv[])
+{
 
-    for (i=1; argv[i]; ++i) {
-        if (!strcmp(argv[i], "-display")) display_name = argv[i+1];
-    }
+       int i;
+       char *display_name = NULL;
 
+       for (i = 1; argv[i]; ++i) {
+               if (!strcmp(argv[i], "-display"))
+                       display_name = argv[i + 1];
+       }
 
-    if (!(display = XOpenDisplay(display_name))) {
-        fprintf(stderr, "%s: can't open display %s\n",
-                argv[0], XDisplayName(display_name));
-        exit(1);
-    }
+       if (!(display = XOpenDisplay(display_name))) {
+               fprintf(stderr, "%s: can't open display %s\n", argv[0], 
XDisplayName(display_name));
+               exit(1);
+       }
 
-
-    screen      = DefaultScreen(display);
-    Root        = RootWindow(display, screen);
-    DisplayDepth = DefaultDepth(display, screen);
-    x_fd        = XConnectionNumber(display);
+       screen = DefaultScreen(display);
+       Root = RootWindow(display, screen);
+       DisplayDepth = DefaultDepth(display, screen);
+       x_fd = XConnectionNumber(display);
 
 }
 
-
-
-
-
 /*
  *   openXwindow
  */
-void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char 
*pixmask_bits, 
-    int pixmask_width, int pixmask_height) {
-
-    unsigned int       borderwidth = 1;
-    XClassHint         classHint;
-    char               *wname = argv[0];
-    XTextProperty      name;
-    XGCValues          gcv;
-    unsigned long      gcm;
-    int                        dummy=0, red, grn, blu;
-    XpmColorSymbol     cols[10]={      {"Back", NULL, 0},
-                                       {"Color1", NULL, 0},
-                                       {"Color2", NULL, 0},
-                                       {"Color3", NULL, 0},
-                                       {"Color4", NULL, 0},
-                                       {"Color5", NULL, 0},
-                                       {"Color6", NULL, 0},
-                                       {"Color7", NULL, 0},
-                                       {"Color8", NULL, 0},
-                                       {"Color9", NULL, 0}};
-
-
-    
-
-    /* 
-     *  Create Pixmap
-     */
-    cols[0].pixel                = getColor(BackgroundColor, 1.0000, &red, 
&grn, &blu);
-    cols[1].pixel                = getBlendedColor(TimeColor, 0.1522, red, 
grn, blu);
-    cols[2].pixel                = getBlendedColor(TimeColor, 0.2602, red, 
grn, blu);
-    cols[3].pixel                = getBlendedColor(TimeColor, 0.3761, red, 
grn, blu);
-    cols[4].pixel                = getBlendedColor(TimeColor, 0.4841, red, 
grn, blu);
-    cols[5].pixel                = getBlendedColor(TimeColor, 0.5922, red, 
grn, blu);
-    cols[6].pixel                = getBlendedColor(TimeColor, 0.6980, red, 
grn, blu);
-    cols[7].pixel                = getBlendedColor(TimeColor, 0.7961, red, 
grn, blu);
-    cols[8].pixel                = getBlendedColor(TimeColor, 0.8941, red, 
grn, blu);
-    cols[9].pixel                = getBlendedColor(TimeColor, 1.0000, red, 
grn, blu);
-
-    wmgen.attributes.numsymbols   = 10;
-    wmgen.attributes.colorsymbols = cols;
-    wmgen.attributes.exactColors  = False;
-    wmgen.attributes.closeness    = 40000;
-    wmgen.attributes.valuemask    = XpmReturnPixels | XpmReturnExtensions | 
XpmColorSymbols 
-                                                       | XpmExactColors | 
XpmCloseness | XpmSize;
-    if (XpmCreatePixmapFromData(display, Root, pixmap_bytes, 
-      &(wmgen.pixmap), &(wmgen.mask), &(wmgen.attributes)) != XpmSuccess){
-       fprintf(stderr, "Not enough free colorcells.\n");
-       exit(1);
-    }
-
-
-
-
-    /* 
-     *  Create a window 
-     */
-    mysizehints.flags = USSize | USPosition;
-    mysizehints.x = 0;
-    mysizehints.y = 0;
-
-    back_pix = getColor("black", 1.0, &red, &grn, &blu);
-    fore_pix = getColor("white", 1.0, &red, &grn, &blu);
-
-    XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
-                               &mysizehints.x, 
&mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
-
-    mysizehints.width  = 64;
-    mysizehints.height = 64;
-               
-
-
-    win = XCreateSimpleWindow(display, Root, mysizehints.x, mysizehints.y,
-                               mysizehints.width, mysizehints.height, 
borderwidth, fore_pix, back_pix);
-       
-    iconwin = XCreateSimpleWindow(display, win, mysizehints.x, mysizehints.y,
-                               mysizehints.width, mysizehints.height, 
borderwidth, fore_pix, back_pix);
-
-
-
-    /* 
-     *  Activate hints 
-     */
-    XSetWMNormalHints(display, win, &mysizehints);
-    classHint.res_name = wname;
-    classHint.res_class = wname;
-    XSetClassHint(display, win, &classHint);
-
-
-
-    /*
-     *  Set up the xevents that you want the relevent windows to inherit
-     *  Currently, its seems that setting KeyPress events here has no
-     *  effect. I.e. for some you will need to Grab the focus and then return
-     *  it after you are done...
-     */
-    XSelectInput(display, win, ButtonPressMask | ExposureMask | 
ButtonReleaseMask 
-               | PointerMotionMask | StructureNotifyMask | EnterWindowMask | 
LeaveWindowMask 
-                                               | KeyPressMask | 
KeyReleaseMask);
-    XSelectInput(display, iconwin, ButtonPressMask | ExposureMask | 
ButtonReleaseMask 
-               | PointerMotionMask | StructureNotifyMask | EnterWindowMask | 
LeaveWindowMask 
-                                               | KeyPressMask | 
KeyReleaseMask);
-
-
-    if (XStringListToTextProperty(&wname, 1, &name) == 0) {
-        fprintf(stderr, "%s: can't allocate window name\n", wname);
-        exit(1);
-    }
-
-
-    XSetWMName(display, win, &name);
-
-    /* 
-     *   Create Graphics Context (GC) for drawing 
-     */
-    gcm = GCForeground | GCBackground | GCGraphicsExposures;
-    gcv.foreground = fore_pix;
-    gcv.background = back_pix;
-    gcv.graphics_exposures = 0;
-    NormalGC = XCreateGC(display, Root, gcm, &gcv);
-
-    /* 
-     *   Create Graphics Context (GC) for erasing 
-     */
-    gcm = GCForeground | GCBackground | GCGraphicsExposures;
-    gcv.foreground = back_pix;
-    gcv.background = back_pix;
-    gcv.graphics_exposures = 0;
-    EraseGC = XCreateGC(display, Root, gcm, &gcv);
-
-
-
-    pixmask = XCreateBitmapFromData(display, win, pixmask_bits, pixmask_width, 
pixmask_height);
-    XShapeCombineMask(display, win, ShapeBounding, 0, 0, pixmask, ShapeSet);
-    XShapeCombineMask(display, iconwin, ShapeBounding, 0, 0, pixmask, 
ShapeSet);
-
-
-    mywmhints.initial_state = WithdrawnState;
-    mywmhints.icon_window = iconwin;
-    mywmhints.icon_x = mysizehints.x;
-    mywmhints.icon_y = mysizehints.y;
-    mywmhints.window_group = win;
-    mywmhints.flags = StateHint | IconWindowHint | IconPositionHint | 
WindowGroupHint;
-
-
-    XSetWMHints(display, win, &mywmhints);
-
-
-    XSetCommand(display, win, argv, argc);
-    XMapWindow(display, win);
+void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char 
*pixmask_bits, int pixmask_width, int pixmask_height)
+{
+
+       unsigned int borderwidth = 1;
+       XClassHint classHint;
+       char *wname = argv[0];
+       XTextProperty name;
+       XGCValues gcv;
+       unsigned long gcm;
+       int dummy = 0, red, grn, blu;
+       XpmColorSymbol cols[10] = { {"Back", NULL, 0},
+       {"Color1", NULL, 0},
+       {"Color2", NULL, 0},
+       {"Color3", NULL, 0},
+       {"Color4", NULL, 0},
+       {"Color5", NULL, 0},
+       {"Color6", NULL, 0},
+       {"Color7", NULL, 0},
+       {"Color8", NULL, 0},
+       {"Color9", NULL, 0}
+       };
+
+       /* 
+        *  Create Pixmap
+        */
+       cols[0].pixel = getColor(BackgroundColor, 1.0000, &red, &grn, &blu);
+       cols[1].pixel = getBlendedColor(TimeColor, 0.1522, red, grn, blu);
+       cols[2].pixel = getBlendedColor(TimeColor, 0.2602, red, grn, blu);
+       cols[3].pixel = getBlendedColor(TimeColor, 0.3761, red, grn, blu);
+       cols[4].pixel = getBlendedColor(TimeColor, 0.4841, red, grn, blu);
+       cols[5].pixel = getBlendedColor(TimeColor, 0.5922, red, grn, blu);
+       cols[6].pixel = getBlendedColor(TimeColor, 0.6980, red, grn, blu);
+       cols[7].pixel = getBlendedColor(TimeColor, 0.7961, red, grn, blu);
+       cols[8].pixel = getBlendedColor(TimeColor, 0.8941, red, grn, blu);
+       cols[9].pixel = getBlendedColor(TimeColor, 1.0000, red, grn, blu);
+
+       wmgen.attributes.numsymbols = 10;
+       wmgen.attributes.colorsymbols = cols;
+       wmgen.attributes.exactColors = False;
+       wmgen.attributes.closeness = 40000;
+       wmgen.attributes.valuemask = XpmReturnPixels | XpmReturnExtensions | 
XpmColorSymbols | XpmExactColors | XpmCloseness | XpmSize;
+       if (XpmCreatePixmapFromData(display, Root, pixmap_bytes, 
&(wmgen.pixmap), &(wmgen.mask), &(wmgen.attributes)) != XpmSuccess) {
+               fprintf(stderr, "Not enough free colorcells.\n");
+               exit(1);
+       }
+
+       /* 
+        *  Create a window 
+        */
+       mysizehints.flags = USSize | USPosition;
+       mysizehints.x = 0;
+       mysizehints.y = 0;
+
+       back_pix = getColor("black", 1.0, &red, &grn, &blu);
+       fore_pix = getColor("white", 1.0, &red, &grn, &blu);
+
+       XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
+                               &mysizehints.x, &mysizehints.y, 
&mysizehints.width, &mysizehints.height, &dummy);
+
+       mysizehints.width = 64;
+       mysizehints.height = 64;
+
+       win = XCreateSimpleWindow(display, Root, mysizehints.x, mysizehints.y,
+                                                         mysizehints.width, 
mysizehints.height, borderwidth, fore_pix, back_pix);
+
+       iconwin = XCreateSimpleWindow(display, win, mysizehints.x, 
mysizehints.y,
+                                                                 
mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix);
+
+       /* 
+        *  Activate hints 
+        */
+       XSetWMNormalHints(display, win, &mysizehints);
+       classHint.res_name = wname;
+       classHint.res_class = wname;
+       XSetClassHint(display, win, &classHint);
+
+       /*
+        *  Set up the xevents that you want the relevent windows to inherit
+        *  Currently, its seems that setting KeyPress events here has no
+        *  effect. I.e. for some you will need to Grab the focus and then 
return
+        *  it after you are done...
+        */
+       XSelectInput(display, win, ButtonPressMask | ExposureMask | 
ButtonReleaseMask
+                                | PointerMotionMask | StructureNotifyMask | 
EnterWindowMask | LeaveWindowMask | KeyPressMask | KeyReleaseMask);
+       XSelectInput(display, iconwin, ButtonPressMask | ExposureMask | 
ButtonReleaseMask
+                                | PointerMotionMask | StructureNotifyMask | 
EnterWindowMask | LeaveWindowMask | KeyPressMask | KeyReleaseMask);
+
+       if (XStringListToTextProperty(&wname, 1, &name) == 0) {
+               fprintf(stderr, "%s: can't allocate window name\n", wname);
+               exit(1);
+       }
+
+       XSetWMName(display, win, &name);
+
+       /* 
+        *   Create Graphics Context (GC) for drawing 
+        */
+       gcm = GCForeground | GCBackground | GCGraphicsExposures;
+       gcv.foreground = fore_pix;
+       gcv.background = back_pix;
+       gcv.graphics_exposures = 0;
+       NormalGC = XCreateGC(display, Root, gcm, &gcv);
+
+       /* 
+        *   Create Graphics Context (GC) for erasing 
+        */
+       gcm = GCForeground | GCBackground | GCGraphicsExposures;
+       gcv.foreground = back_pix;
+       gcv.background = back_pix;
+       gcv.graphics_exposures = 0;
+       EraseGC = XCreateGC(display, Root, gcm, &gcv);
+
+       pixmask = XCreateBitmapFromData(display, win, pixmask_bits, 
pixmask_width, pixmask_height);
+       XShapeCombineMask(display, win, ShapeBounding, 0, 0, pixmask, ShapeSet);
+       XShapeCombineMask(display, iconwin, ShapeBounding, 0, 0, pixmask, 
ShapeSet);
+
+       mywmhints.initial_state = WithdrawnState;
+       mywmhints.icon_window = iconwin;
+       mywmhints.icon_x = mysizehints.x;
+       mywmhints.icon_y = mysizehints.y;
+       mywmhints.window_group = win;
+       mywmhints.flags = StateHint | IconWindowHint | IconPositionHint | 
WindowGroupHint;
+
+       XSetWMHints(display, win, &mywmhints);
+
+       XSetCommand(display, win, argv, argc);
+       XMapWindow(display, win);
 
 }
 
-unsigned long getColor(char *ColorName, float fac, int *red, int *grn, int 
*blu) {
+unsigned long getColor(char *ColorName, float fac, int *red, int *grn, int 
*blu)
+{
 
-     XColor            Color;
-     XWindowAttributes         Attributes;
+       XColor Color;
+       XWindowAttributes Attributes;
 
-     XGetWindowAttributes(display, Root, &Attributes);
-     Color.pixel = 0;
+       XGetWindowAttributes(display, Root, &Attributes);
+       Color.pixel = 0;
 
-     XParseColor(display, Attributes.colormap, ColorName, &Color);
-     Color.red          = (unsigned short)(fac*(Color.red-24) + 24);
-     Color.blue  = (unsigned short)(fac*(Color.blue-24) + 24);
-     Color.green = (unsigned short)(fac*(Color.green-24) + 24);
-     Color.flags = DoRed | DoGreen | DoBlue;
-     XAllocColor(display, Attributes.colormap, &Color);
+       XParseColor(display, Attributes.colormap, ColorName, &Color);
+       Color.red = (unsigned short)(fac * (Color.red - 24) + 24);
+       Color.blue = (unsigned short)(fac * (Color.blue - 24) + 24);
+       Color.green = (unsigned short)(fac * (Color.green - 24) + 24);
+       Color.flags = DoRed | DoGreen | DoBlue;
+       XAllocColor(display, Attributes.colormap, &Color);
 
-     
-     *red = Color.red;
-     *grn = Color.green;
-     *blu = Color.blue;
-     return Color.pixel;
+       *red = Color.red;
+       *grn = Color.green;
+       *blu = Color.blue;
+       return Color.pixel;
 
 }
 
-unsigned long getBlendedColor(char *ColorName, float fac, int red, int grn, 
int blu) {
+unsigned long getBlendedColor(char *ColorName, float fac, int red, int grn, 
int blu)
+{
 
-     XColor            Color;
-     XWindowAttributes         Attributes;
+       XColor Color;
+       XWindowAttributes Attributes;
 
-     XGetWindowAttributes(display, Root, &Attributes);
-     Color.pixel = 0;
+       XGetWindowAttributes(display, Root, &Attributes);
+       Color.pixel = 0;
 
-     XParseColor(display, Attributes.colormap, ColorName, &Color);
-     Color.red          = (unsigned short)(fac*(Color.red-red) + red);
-     Color.blue  = (unsigned short)(fac*(Color.blue-grn) + grn);
-     Color.green = (unsigned short)(fac*(Color.green-blu) + blu);
-     Color.flags = DoRed | DoGreen | DoBlue;
-     XAllocColor(display, Attributes.colormap, &Color);
+       XParseColor(display, Attributes.colormap, ColorName, &Color);
+       Color.red = (unsigned short)(fac * (Color.red - red) + red);
+       Color.blue = (unsigned short)(fac * (Color.blue - grn) + grn);
+       Color.green = (unsigned short)(fac * (Color.green - blu) + blu);
+       Color.flags = DoRed | DoGreen | DoBlue;
+       XAllocColor(display, Attributes.colormap, &Color);
 
-     return Color.pixel;
+       return Color.pixel;
 
 }
 
-
 /*
  *  Here is a faster version of usleep using select()
  */
-void uusleep(unsigned long usecs) {
+void uusleep(unsigned long usecs)
+{
 
-    struct timeval tv;
-    fd_set fds;
-    tv.tv_sec  = usecs / 1000000UL;
-    tv.tv_usec = usecs % 1000000UL;
-    FD_ZERO(&fds);
-    FD_SET(x_fd,  &fds);
-    select(x_fd + 1, &fds, NULL, NULL, &tv);
+       struct timeval tv;
+       fd_set fds;
+       tv.tv_sec = usecs / 1000000UL;
+       tv.tv_usec = usecs % 1000000UL;
+       FD_ZERO(&fds);
+       FD_SET(x_fd, &fds);
+       select(x_fd + 1, &fds, NULL, NULL, &tv);
 
 }
 
@@ -385,15 +340,15 @@ void uusleep(unsigned long usecs) {
  *  will be less than 1 second. This allows us to save on a div operation.
  *
  */
-void short_uusleep(unsigned long usecs) {
+void short_uusleep(unsigned long usecs)
+{
 
-    struct timeval tv;
-    fd_set fds;
-    tv.tv_sec  = 0;
-    tv.tv_usec = usecs;
-    FD_ZERO(&fds);
-    FD_SET(x_fd,  &fds);
-    select(x_fd + 1, &fds, NULL, NULL, &tv);
+       struct timeval tv;
+       fd_set fds;
+       tv.tv_sec = 0;
+       tv.tv_usec = usecs;
+       FD_ZERO(&fds);
+       FD_SET(x_fd, &fds);
+       select(x_fd + 1, &fds, NULL, NULL, &tv);
 
 }
-
diff --git a/wmMatrix/xutils.h b/wmMatrix/xutils.h
index 9c062b9..8f4da0b 100644
--- a/wmMatrix/xutils.h
+++ b/wmMatrix/xutils.h
@@ -1,51 +1,40 @@
 #ifndef WMGENERAL_H_INCLUDED
 #define WMGENERAL_H_INCLUDED
 
-
-
 /*
  *   Typedefs 
  */
 typedef struct {
-       Pixmap          pixmap;
-       Pixmap          mask;
-       XpmAttributes   attributes;
+       Pixmap pixmap;
+       Pixmap mask;
+       XpmAttributes attributes;
 } XpmIcon;
 
-
-
-
 /*
  *   Global variable
  */
-Display                *display;
-Window          Root;
-Window          iconwin, win;
-int             screen; 
-int             DisplayDepth;
-
-
-
-
+Display *display;
+Window Root;
+Window iconwin, win;
+int screen;
+int DisplayDepth;
 
 /*
  *   Function Prototypes
  */
-void           AddMouseRegion(int, int, int, int, int);
-int            CheckMouseRegion(int, int);
-void           openXwindow(int, char **, char **, char *, int, int);
-void           initXwindow(int, char **);
-void           RedrawWindow(void);
-void           RedrawWindowXY(int, int);
-void           copyXPMArea(int, int, int, int, int, int);
-void           copyXBMArea(int, int, int, int, int, int);
-void           setMaskXY(int, int);
-unsigned long  getColor(char *, float, int *, int *, int *);
-unsigned long  getBlendedColor(char *, float, int, int, int);
-void           RedrawWindow(void);
-void           uusleep( unsigned long );
-void           short_uusleep( unsigned long );
-
-
+void AddMouseRegion(int, int, int, int, int);
+int CheckMouseRegion(int, int);
+void openXwindow(int, char **, char **, char *, int, int);
+void initXwindow(int, char **);
+void RedrawWindow(void);
+void RedrawWindowXY(int, int);
+void copyXPMArea(int, int, int, int, int, int);
+void copyXBMArea(int, int, int, int, int, int);
+void setMaskXY(int, int);
+unsigned long getColor(char *, float, int *, int *, int *);
+unsigned long getBlendedColor(char *, float, int, int, int);
+void RedrawWindow(void);
+void uusleep(unsigned long);
+void short_uusleep(unsigned long);
 
 #endif
diff --git a/wmMatrix/yarandom.c b/wmMatrix/yarandom.c
index 8ae5c96..571b8ac 100644
--- a/wmMatrix/yarandom.c
+++ b/wmMatrix/yarandom.c
@@ -42,15 +42,13 @@
    Irix 6.2; Indy r5k; SGI cc version 6; gcc version 2.7.2.1.
  */
 
-
 #ifdef HAVE_UNISTD_H
-# include <unistd.h>  /* for getpid() */
+#include <unistd.h>                            /* for getpid() */
 #endif
-#include <sys/time.h> /* for gettimeofday() */
+#include <sys/time.h>                  /* for gettimeofday() */
 
 #include "yarandom.h"
 
-
 /* The following 'random' numbers are taken from CRC, 18th Edition, page 622.
    Each array element was taken from the corresponding line in the table,
    except that a[0] was from line 100. 8s and 9s in the table were simply
@@ -58,55 +56,53 @@
  */
 #define VectorSize 55
 static unsigned int a[VectorSize] = {
- 035340171546, 010401501101, 022364657325, 024130436022, 002167303062, /*  5 */
- 037570375137, 037210607110, 016272055420, 023011770546, 017143426366, /* 10 */
- 014753657433, 021657231332, 023553406142, 004236526362, 010365611275, /* 14 */
- 007117336710, 011051276551, 002362132524, 001011540233, 012162531646, /* 20 */
- 007056762337, 006631245521, 014164542224, 032633236305, 023342700176, /* 25 */
- 002433062234, 015257225043, 026762051606, 000742573230, 005366042132, /* 30 */
- 012126416411, 000520471171, 000725646277, 020116577576, 025765742604, /* 35 */
- 007633473735, 015674255275, 017555634041, 006503154145, 021576344247, /* 40 */
- 014577627653, 002707523333, 034146376720, 030060227734, 013765414060, /* 45 */
- 036072251540, 007255221037, 024364674123, 006200353166, 010126373326, /* 50 */
- 015664104320, 016401041535, 016215305520, 033115351014, 017411670323  /* 55 */
+       035340171546, 010401501101, 022364657325, 024130436022, 002167303062,   
/*  5 */
+       037570375137, 037210607110, 016272055420, 023011770546, 017143426366,   
/* 10 */
+       014753657433, 021657231332, 023553406142, 004236526362, 010365611275,   
/* 14 */
+       007117336710, 011051276551, 002362132524, 001011540233, 012162531646,   
/* 20 */
+       007056762337, 006631245521, 014164542224, 032633236305, 023342700176,   
/* 25 */
+       002433062234, 015257225043, 026762051606, 000742573230, 005366042132,   
/* 30 */
+       012126416411, 000520471171, 000725646277, 020116577576, 025765742604,   
/* 35 */
+       007633473735, 015674255275, 017555634041, 006503154145, 021576344247,   
/* 40 */
+       014577627653, 002707523333, 034146376720, 030060227734, 013765414060,   
/* 45 */
+       036072251540, 007255221037, 024364674123, 006200353166, 010126373326,   
/* 50 */
+       015664104320, 016401041535, 016215305520, 033115351014, 017411670323    
/* 55 */
 };
 
 static int i1, i2;
 
-unsigned int
-ya_random (void)
+unsigned int ya_random(void)
 {
-  register int ret = a[i1] + a[i2];
-  a[i1] = ret;
-  if (++i1 >= VectorSize) i1 = 0;
-  if (++i2 >= VectorSize) i2 = 0;
-  return ret;
+       register int ret = a[i1] + a[i2];
+       a[i1] = ret;
+       if (++i1 >= VectorSize)
+               i1 = 0;
+       if (++i2 >= VectorSize)
+               i2 = 0;
+       return ret;
 }
 
-void
-ya_rand_init(unsigned int seed)
+void ya_rand_init(unsigned int seed)
 {
-  int i;
-  if (seed == 0)
-    {
-      struct timeval tp;
+       int i;
+       if (seed == 0) {
+               struct timeval tp;
 #ifdef GETTIMEOFDAY_TWO_ARGS
-      struct timezone tzp;
-      gettimeofday(&tp, &tzp);
+               struct timezone tzp;
+               gettimeofday(&tp, &tzp);
 #else
-      gettimeofday(&tp);
+               gettimeofday(&tp);
 #endif
-      /* ignore overflow */
-      seed = (999*tp.tv_sec) + (1001*tp.tv_usec) + (1003 * getpid());
-    }
-
-  a[0] += seed;
-  for (i = 1; i < VectorSize; i++)
-    {
-      seed = a[i-1]*1001 + seed*999;
-      a[i] += seed;
-    }
-
-  i1 = a[0] % VectorSize;
-  i2 = (i1 + 024) % VectorSize;
+               /* ignore overflow */
+               seed = (999 * tp.tv_sec) + (1001 * tp.tv_usec) + (1003 * 
getpid());
+       }
+
+       a[0] += seed;
+       for (i = 1; i < VectorSize; i++) {
+               seed = a[i - 1] * 1001 + seed * 999;
+               a[i] += seed;
+       }
+
+       i1 = a[0] % VectorSize;
+       i2 = (i1 + 024) % VectorSize;
 }
diff --git a/wmMatrix/yarandom.h b/wmMatrix/yarandom.h
index abea226..b36da43 100644
--- a/wmMatrix/yarandom.h
+++ b/wmMatrix/yarandom.h
@@ -22,33 +22,32 @@
 #undef RAND_MAX
 
 #ifdef VMS
-# include "vms-gtod.h"
+#include "vms-gtod.h"
 #endif
 
 #define random()   ya_random()
 #define srandom(i) ya_rand_init(0)
 #define RAND_MAX   0x7FFFFFFF
 
-extern unsigned int ya_random (void);
-extern void ya_rand_init (unsigned int);
-
+extern unsigned int ya_random(void);
+extern void ya_rand_init(unsigned int);
 
 #if defined (__GNUC__) && (__GNUC__ >= 2)
  /* Implement frand using GCC's statement-expression extension. */
 
-# define frand(f)                                                      \
+#define frand(f)                                                       \
   ({ double tmp = (((double) random()) /                               \
                   (((double) ((unsigned int)~0)) / ((double) (f))));   \
      tmp < 0 ? (-tmp) : tmp; })
 
-#else /* not GCC2 - implement frand using a global variable.*/
+#else                                                  /* not GCC2 - implement 
frand using a global variable. */
 
 static double _frand_tmp_;
-# define frand(f)                                                      \
+#define frand(f)                                                       \
   (_frand_tmp_ = (((double) random()) /                                \
                  (((double) ((unsigned int)~0)) / ((double) (f)))),    \
    _frand_tmp_ < 0 ? (-_frand_tmp_) : _frand_tmp_)
 
-#endif /* not GCC2 */
+#endif                                                 /* not GCC2 */
 
-#endif /* __YARANDOM_H__ */
+#endif                                                 /* __YARANDOM_H__ */
-- 
1.7.11.4


-- 
To unsubscribe, send mail to [email protected].

Reply via email to