From http://www.jwz.org/xscreensaver/xscreensaver-5.38.tar.gz
[xscreensaver] / hacks / lightning.c
index deb37411de1e621b4a9560098fc5be1c33493ea5..027bc7521781ec85f592f705f228f96078ecea7f 100644 (file)
@@ -1,9 +1,8 @@
 /* -*- Mode: C; tab-width: 4 -*- */
 /* lightning --- fractal lightning bolds */
 
-#if !defined( lint ) && !defined( SABER )
+#if 0
 static const char sccsid[] = "@(#)lightning.c  5.00 2000/11/01 xlockmore";
-
 #endif
 
 /*-
@@ -29,26 +28,28 @@ static const char sccsid[] = "@(#)lightning.c       5.00 2000/11/01 xlockmore";
  */
 
 #ifdef STANDALONE
-#define MODE_lightning
-#define PROGCLASS "Lightning"
-#define HACK_INIT init_lightning
-#define HACK_DRAW draw_lightning
-#define lightning_opts xlockmore_opts
-#define DEFAULTS "*delay: 10000 \n"
-#define BRIGHT_COLORS
-#include "xlockmore.h"         /* in xscreensaver distribution */
+# define MODE_lightning
+# define DEFAULTS "*delay: 10000 \n" \
+                  "*ncolors: 64  \n"
+
+# define BRIGHT_COLORS
+# define free_lightning 0
+# define release_lightning 0
+# define reshape_lightning 0
+# define lightning_handle_event 0
+# include "xlockmore.h"                /* in xscreensaver distribution */
 #else /* STANDALONE */
-#include "xlock.h"             /* in xlockmore distribution */
+# include "xlock.h"            /* in xlockmore distribution */
 #endif /* STANDALONE */
 
 #ifdef MODE_lightning
 
-ModeSpecOpt lightning_opts =
+ENTRYPOINT ModeSpecOpt lightning_opts =
 {0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL};
 
 #ifdef USE_MODULES
 ModStruct   lightning_description =
-{"lightning", "init_lightning", "draw_lightning", "release_lightning",
+{"lightning", "init_lightning", "draw_lightning", (char *) NULL,
  "refresh_lightning", "init_lightning", (char *) NULL, &lightning_opts,
  10000, 1, 1, 1, 64, 0.6, "",
  "Shows Keith's fractal lightning bolts", 0, NULL};
@@ -514,16 +515,12 @@ wiggle_line(XPoint * p, int number, int amount)
 
 /*------------------------------------------------------------------------*/
 
-void
-init_lightning(ModeInfo * mi)
+ENTRYPOINT void
+init_lightning (ModeInfo * mi)
 {
        Storm      *st;
 
-       if (Helga == NULL) {
-               if ((Helga = (Storm *) calloc(MI_NUM_SCREENS(mi),
-                                             sizeof (Storm))) == NULL)
-                       return;
-       }
+       MI_INIT (mi, Helga);
        st = &Helga[MI_SCREEN(mi)];
 
        st->scr_width = MI_WIDTH(mi);
@@ -536,8 +533,8 @@ init_lightning(ModeInfo * mi)
 
 /*------------------------------------------------------------------------*/
 
-void
-draw_lightning(ModeInfo * mi)
+ENTRYPOINT void
+draw_lightning (ModeInfo * mi)
 {
        int         i;
        Storm      *st;
@@ -548,9 +545,7 @@ draw_lightning(ModeInfo * mi)
        MI_IS_DRAWN(mi) = True;
        switch (st->stage) {
                case 0:
-                       MI_IS_DRAWN(mi) = False;
-                       MI_CLEARWINDOW(mi);
-                       MI_IS_DRAWN(mi) = True;
+                       XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
 
                        st->color = NRAND(MI_NPIXELS(mi));
                        st->draw_time = 0;
@@ -576,9 +571,7 @@ draw_lightning(ModeInfo * mi)
                        }
                        break;
                case 3:
-                       MI_IS_DRAWN(mi) = False;
-                       MI_CLEARWINDOW(mi);
-                       MI_IS_DRAWN(mi) = True;
+                       XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
 
                        if (storm_active(st))
                                st->stage = 1;
@@ -594,19 +587,15 @@ draw_lightning(ModeInfo * mi)
        }
 }
 
-void
-release_lightning(ModeInfo * mi)
-{
-       if (Helga != NULL) {
-               (void) free((void *) Helga);
-               Helga = (Storm *) NULL;
-       }
-}
-
-void
+#ifndef STANDALONE
+ENTRYPOINT void
 refresh_lightning(ModeInfo * mi)
 {
        /* Do nothing, it will refresh by itself */
 }
+#endif
+
+XSCREENSAVER_MODULE ("Lightning", lightning)
+
 
 #endif /* MODE_lightning */