From http://www.jwz.org/xscreensaver/xscreensaver-5.38.tar.gz
[xscreensaver] / hacks / worm.c
index 64bef616b3a69a1d200811d33ca2ad293a84e620..452ae12dd4e20b7f4baf7585f205d9903dffda16 100644 (file)
@@ -48,8 +48,11 @@ static const char sccsid[] = "@(#)worm.c     4.04 97/07/28 xlockmore";
                                        "*right3d: red \n"              \
                                        "*left3d:  blue \n"             \
                                        "*both3d:  magenta \n"  \
-                                       "*none3d:  black \n"
+                                       "*none3d:  black \n" \
+                                       "*fpsSolid:  true \n" \
+
 # define SMOOTH_COLORS
+# define release_worm 0
 # define reshape_worm 0
 # define worm_handle_event 0
 # include "xlockmore.h"                /* in xscreensaver distribution */
@@ -238,11 +241,16 @@ worm_doit(ModeInfo * mi, int which, unsigned long color)
        }
 }
 
-static void
-free_worms(wormstruct * wp)
+ENTRYPOINT void
+free_worm(ModeInfo * mi)
 {
+       wormstruct *wp;
        int         wn;
 
+       if(!worms)
+               return;
+       wp = &worms[MI_SCREEN(mi)];
+
        if (wp->worm) {
                for (wn = 0; wn < wp->nw; wn++) {
                        if (wp->worm[wn].circ)
@@ -270,11 +278,7 @@ init_worm (ModeInfo * mi)
        int         size = MI_SIZE(mi);
        int         i, j;
 
-       if (worms == NULL) {
-               if ((worms = (wormstruct *) calloc(MI_NUM_SCREENS(mi),
-                                              sizeof (wormstruct))) == NULL)
-                       return;
-       }
+       MI_INIT (mi, worms);
        wp = &worms[MI_SCREEN(mi)];
        if (MI_NPIXELS(mi) <= 2 || MI_WIN_IS_USE3D(mi))
                wp->nc = 2;
@@ -283,7 +287,7 @@ init_worm (ModeInfo * mi)
        if (wp->nc > NUMCOLORS)
                wp->nc = NUMCOLORS;
 
-       free_worms(wp);
+       free_worm(mi);
        wp->nw = MI_BATCHCOUNT(mi);
        if (wp->nw < -MINWORMS)
                wp->nw = NRAND(-wp->nw - MINWORMS + 1) + MINWORMS;
@@ -405,19 +409,7 @@ draw_worm (ModeInfo * mi)
                wp->chromo = 0;
 }
 
-ENTRYPOINT void
-release_worm(ModeInfo * mi)
-{
-       if (worms != NULL) {
-               int         screen;
-
-               for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++)
-                       free_worms(&worms[screen]);
-               (void) free((void *) worms);
-               worms = NULL;
-       }
-}
-
+#ifndef STANDALONE
 ENTRYPOINT void
 refresh_worm (ModeInfo * mi)
 {
@@ -436,5 +428,6 @@ refresh_worm (ModeInfo * mi)
                }
        }
 }
+#endif
 
 XSCREENSAVER_MODULE ("Worm", worm)