"*ignoreRotation: True \n" \
# define SMOOTH_COLORS
+# define release_discrete 0
# include "xlockmore.h" /* in xscreensaver distribution */
# include "erase.h"
#else /* STANDALONE */
#ifdef USE_MODULES
ModStruct discrete_description =
-{"discrete", "init_discrete", "draw_discrete", "release_discrete",
+{"discrete", "init_discrete", "draw_discrete", (char *) NULL,
"refresh_discrete", "init_discrete", (char *) NULL, &discrete_opts,
1000, 4096, 2500, 1, 64, 1.0, "",
"Shows various discrete maps", 0, NULL};
static discretestruct *discretes = (discretestruct *) NULL;
+static void free_discrete(ModeInfo * mi);
+
ENTRYPOINT void
init_discrete (ModeInfo * mi)
{
double range;
discretestruct *hp;
- if (discretes == NULL) {
- if ((discretes =
- (discretestruct *) calloc(MI_NUM_SCREENS(mi),
- sizeof (discretestruct))) == NULL)
- return;
- }
+ MI_INIT (mi, discretes, free_discrete);
hp = &discretes[MI_SCREEN(mi)];
hp->maxx = MI_WIDTH(mi);
if (hp->eraser) {
hp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), hp->eraser);
+ if (!hp->eraser)
+ init_discrete(mi);
return;
}
if (hp->count > cycles) {
hp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), hp->eraser);
- init_discrete(mi);
}
}
XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi));
}
-ENTRYPOINT void
-release_discrete(ModeInfo * mi)
+static void
+free_discrete(ModeInfo * mi)
{
- if (discretes != NULL) {
- int screen;
+ discretestruct *hp = &discretes[MI_SCREEN(mi)];
- for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
- discretestruct *hp = &discretes[screen];
-
- if (hp->pointBuffer != NULL) {
- (void) free((void *) hp->pointBuffer);
- /* hp->pointBuffer = NULL; */
- }
- }
- (void) free((void *) discretes);
- discretes = (discretestruct *) NULL;
+ if (hp->pointBuffer != NULL) {
+ (void) free((void *) hp->pointBuffer);
+ /* hp->pointBuffer = NULL; */
}
}