ENTRYPOINT void release_fadeplot (ModeInfo * mi) { if (fadeplots != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_fadeplot(&fadeplots[screen]); (void) free((void *) fadeplots); fadeplots = (fadeplotstruct *) NULL; } }
ENTRYPOINT void init_fadeplot (ModeInfo * mi) { fadeplotstruct *fp; if (fadeplots == NULL) { if ((fadeplots = (fadeplotstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (fadeplotstruct))) == NULL) return; } fp = &fadeplots[MI_SCREEN(mi)]; fp->width = MI_WIDTH(mi); fp->height = MI_HEIGHT(mi); fp->min = MAX(MIN(fp->width, fp->height) / 2, 1); fp->speed.x = 8; fp->speed.y = 10; fp->step.x = 1; fp->step.y = 1; fp->temps = 0; fp->factor.x = MAX(fp->width / (2 * fp->min), 1); fp->factor.y = MAX(fp->height / (2 * fp->min), 1); fp->nbstep = MI_COUNT(mi); if (fp->nbstep < -MINSTEPS) { fp->nbstep = NRAND(-fp->nbstep - MINSTEPS + 1) + MINSTEPS; } else if (fp->nbstep < MINSTEPS) fp->nbstep = MINSTEPS; fp->maxpts = MI_CYCLES(mi); if (fp->maxpts < 1) fp->maxpts = 1; if (fp->pts == NULL) { if ((fp->pts = (XPoint *) calloc(fp->maxpts, sizeof (XPoint))) == NULL) { free_fadeplot(fp); return; } } if (MI_NPIXELS(mi) > 2) fp->pix = NRAND(MI_NPIXELS(mi)); if (fp->stab != NULL) (void) free((void *) fp->stab); if (!initSintab(mi)) return; MI_CLEARWINDOW(mi); }
static Bool initSintab(ModeInfo * mi) { fadeplotstruct *fp = &fadeplots[MI_SCREEN(mi)]; int i; float x; fp->angles = NRAND(950) + 250; if ((fp->stab = (int *) malloc(fp->angles * sizeof (int))) == NULL) { free_fadeplot(mi); return False; } for (i = 0; i < fp->angles; i++) { x = SINF(2.0 * M_PI * i / fp->angles); fp->stab[i] = (int) (x * ABS(x) * fp->min) + fp->min; } return True; }