From http://www.jwz.org/xscreensaver/xscreensaver-5.37.tar.gz
[xscreensaver] / hacks / bouboule.c
index 82218fb45c61903c90e7c8ae255ff92c6efa4e85..e3379aa3c6e6c0d555a63cf3defb80973d7cbff6 100644 (file)
@@ -88,6 +88,7 @@ static const char sccsid[] = "@(#)bouboule.c  4.00 97/01/01 xlockmore";
                                        "*ignoreRotation: True  \n"
 
 # define SMOOTH_COLORS
+# define release_bouboule 0
 # define bouboule_handle_event 0
 # include "xlockmore.h"                                /* from the xscreensaver distribution */
 #else  /* !STANDALONE */
@@ -297,6 +298,8 @@ sinfree(SinVariable * point)
        }
 }
 
+static void free_bouboule(ModeInfo * mi);
+
 
 /***************/
 ENTRYPOINT void
@@ -315,11 +318,7 @@ init_bouboule(ModeInfo * mi)
        int         i;
        double      theta, omega;
 
-       if (starfield == NULL) {
-               if ((starfield = (StarField *) calloc(MI_NUM_SCREENS(mi),
-                                               sizeof (StarField))) == NULL)
-                       return;
-       }
+       MI_INIT (mi, starfield, free_bouboule);
        sp = &starfield[MI_SCREEN(mi)];
 
        sp->width = MI_WIN_WIDTH(mi);
@@ -803,39 +802,31 @@ draw_bouboule(ModeInfo * mi)
        }
 }
 
-ENTRYPOINT void
-release_bouboule(ModeInfo * mi)
+static void
+free_bouboule(ModeInfo * mi)
 {
-       if (starfield != NULL) {
-               int         screen;
-
-               for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
-                       StarField  *sp = &starfield[screen];
-
-                       if (sp->star)
-                               (void) free((void *) sp->star);
-                       if (sp->xarc)
-                               (void) free((void *) sp->xarc);
-                       if (sp->xarcleft)
-                               (void) free((void *) sp->xarcleft);
+       StarField  *sp = &starfield[MI_SCREEN(mi)];
+
+       if (sp->star)
+               (void) free((void *) sp->star);
+       if (sp->xarc)
+               (void) free((void *) sp->xarc);
+       if (sp->xarcleft)
+               (void) free((void *) sp->xarcleft);
 #if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1))
-                       if (sp->oldxarc)
-                               (void) free((void *) sp->oldxarc);
-                       if (sp->oldxarcleft)
-                               (void) free((void *) sp->oldxarcleft);
+       if (sp->oldxarc)
+               (void) free((void *) sp->oldxarc);
+       if (sp->oldxarcleft)
+               (void) free((void *) sp->oldxarcleft);
 #endif
-                       sinfree(&(sp->x));
-                       sinfree(&(sp->y));
-                       sinfree(&(sp->z));
-                       sinfree(&(sp->sizex));
-                       sinfree(&(sp->sizey));
-                       sinfree(&(sp->thetax));
-                       sinfree(&(sp->thetay));
-                       sinfree(&(sp->thetaz));
-               }
-               (void) free((void *) starfield);
-               starfield = NULL;
-       }
+       sinfree(&(sp->x));
+       sinfree(&(sp->y));
+       sinfree(&(sp->z));
+       sinfree(&(sp->sizex));
+       sinfree(&(sp->sizey));
+       sinfree(&(sp->thetax));
+       sinfree(&(sp->thetay));
+       sinfree(&(sp->thetaz));
 }
 
 ENTRYPOINT void