X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fworm.c;h=452ae12dd4e20b7f4baf7585f205d9903dffda16;hb=39809ded547bdbb08207d3e514950425215b4410;hp=e57367d5045faff0754dc161ac4fcbdf10554eb1;hpb=96a411663168b0ba5432b407a83be55f3df0c802;p=xscreensaver diff --git a/hacks/worm.c b/hacks/worm.c index e57367d5..452ae12d 100644 --- a/hacks/worm.c +++ b/hacks/worm.c @@ -38,10 +38,6 @@ static const char sccsid[] = "@(#)worm.c 4.04 97/07/28 xlockmore"; */ #ifdef STANDALONE -# define PROGCLASS "Worm" -# define HACK_INIT init_worm -# define HACK_DRAW draw_worm -# define worm_opts xlockmore_opts # define DEFAULTS "*delay: 17000 \n" \ "*count: -20 \n" \ "*cycles: 10 \n" \ @@ -52,14 +48,19 @@ 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 */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ -ModeSpecOpt worm_opts = +ENTRYPOINT ModeSpecOpt worm_opts = {0, NULL, 0, NULL, NULL}; #define MINSIZE 1 @@ -240,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) @@ -265,18 +271,14 @@ free_worms(wormstruct * wp) } } -void -init_worm(ModeInfo * mi) +ENTRYPOINT void +init_worm (ModeInfo * mi) { wormstruct *wp; 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; @@ -285,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; @@ -361,8 +363,8 @@ init_worm(ModeInfo * mi) XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi)); } -void -draw_worm(ModeInfo * mi) +ENTRYPOINT void +draw_worm (ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); @@ -407,21 +409,9 @@ draw_worm(ModeInfo * mi) wp->chromo = 0; } -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; - } -} - -void -refresh_worm(ModeInfo * mi) +#ifndef STANDALONE +ENTRYPOINT void +refresh_worm (ModeInfo * mi) { if (MI_WIN_IS_USE3D(mi)) /* The 3D code does drawing&clearing by XORing. We do not @@ -438,3 +428,6 @@ refresh_worm(ModeInfo * mi) } } } +#endif + +XSCREENSAVER_MODULE ("Worm", worm)