X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=hacks%2Fjuggle.c;fp=hacks%2Fjuggle.c;h=07e52fe51dbed1c587b4c5cf60dddf46a3df5409;hp=a2dce5e0ab46fbfd41a90ab962e3a322be7420b9;hb=39809ded547bdbb08207d3e514950425215b4410;hpb=4361b69d3178d7fc98d0388f9a223af6c2651aba diff --git a/hacks/juggle.c b/hacks/juggle.c index a2dce5e0..07e52fe5 100644 --- a/hacks/juggle.c +++ b/hacks/juggle.c @@ -137,7 +137,8 @@ static const char sccsid[] = "@(#)juggle.c 5.10 2003/09/02 xlockmore"; "*font: -*-helvetica-bold-r-normal-*-180-*\n" \ "*fpsSolid: true\n" \ -# define refresh_juggle 0 +# define release_juggle 0 +# define reshape_juggle 0 # define juggle_handle_event 0 # undef SMOOTH_COLORS # include "xlockmore.h" /* in xscreensaver distribution */ @@ -257,8 +258,8 @@ ENTRYPOINT ModeSpecOpt juggle_opts = #ifdef USE_MODULES ModStruct juggle_description = { - "juggle", "init_juggle", "draw_juggle", "release_juggle", - "draw_juggle", "change_juggle", (char *) NULL, &juggle_opts, + "juggle", "init_juggle", "draw_juggle", (char *) NULL, + "draw_juggle", "change_juggle", "free_juggle", &juggle_opts, 10000, 200, 1000, 1, 64, 1.0, "", "Shows a Juggler, juggling", 0, NULL }; @@ -660,8 +661,10 @@ trajectory_destroy(Trajectory *t) { REMOVE(t); /* Unlink and free */ } -static void -free_juggle(jugglestruct *sp) { +ENTRYPOINT void +free_juggle(ModeInfo * mi) { + jugglestruct *sp = &juggles[MI_SCREEN(mi)]; + if (sp->head != NULL) { while (sp->head->next != sp->head) { trajectory_destroy(sp->head->next); @@ -695,13 +698,14 @@ free_juggle(jugglestruct *sp) { } static Bool -add_throw(jugglestruct *sp, char type, int h, Notation n, const char* name) +add_throw(ModeInfo *mi, char type, int h, Notation n, const char* name) { + jugglestruct *sp = &juggles[MI_SCREEN(mi)]; Trajectory *t; ADD_ELEMENT(Trajectory, t, sp->head->prev); if(t == NULL){ /* Out of Memory */ - free_juggle(sp); + free_juggle(mi); return False; } t->object = NULL; @@ -723,7 +727,6 @@ add_throw(jugglestruct *sp, char type, int h, Notation n, const char* name) static Bool program(ModeInfo *mi, const char *patn, const char *name, int cycles) { - jugglestruct *sp = &juggles[MI_SCREEN(mi)]; const char *p; int w, h, i, seen; Notation notation; @@ -775,7 +778,7 @@ program(ModeInfo *mi, const char *patn, const char *name, int cycles) case ' ': if (seen) { i++; - if (!add_throw(sp, type, h, notation, title)) + if (!add_throw(mi, type, h, notation, title)) return False; title = NULL; type=' '; @@ -795,7 +798,7 @@ program(ModeInfo *mi, const char *patn, const char *name, int cycles) } } if (seen) { /* end of sequence */ - if (!add_throw(sp, type, h, notation, title)) + if (!add_throw(mi, type, h, notation, title)) return False; title = NULL; } @@ -896,8 +899,9 @@ name(jugglestruct *sp) /* ..nm.. -> .. LTn LC RTm RC .. */ static Bool -part(jugglestruct *sp) +part(ModeInfo *mi) { + jugglestruct *sp = &juggles[MI_SCREEN(mi)]; Trajectory *t, *nt, *p; Hand hand = (LRAND() & 1) ? RIGHT : LEFT; @@ -942,7 +946,7 @@ part(jugglestruct *sp) t->action = CATCH; ADD_ELEMENT(Trajectory, nt, p); if(nt == NULL){ - free_juggle(sp); + free_juggle(mi); return False; } nt->object = NULL; @@ -2295,19 +2299,6 @@ show_bball(ModeInfo *mi, unsigned long color, Trace *s) **************************************************************************/ -ENTRYPOINT void -release_juggle (ModeInfo * mi) -{ - if (juggles != NULL) { - int screen; - - for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) - free_juggle(&juggles[screen]); - free(juggles); - juggles = (jugglestruct *) NULL; - } -} - /* FIXME: refill_juggle currently just appends new throws to the * programme. This is fine if the programme is empty, but if there * are still some trajectories left then it really should take these @@ -2423,7 +2414,7 @@ refill_juggle(ModeInfo * mi) name(sp); - if (!part(sp)) + if (!part(mi)) return; lob(mi); @@ -2433,7 +2424,7 @@ refill_juggle(ModeInfo * mi) positions(sp); if (!projectile(sp)) { - free_juggle(sp); + free_juggle(mi); return; } @@ -2481,7 +2472,7 @@ init_juggle (ModeInfo * mi) jugglestruct *sp = 0; int i; - MI_INIT (mi, juggles, 0); + MI_INIT (mi, juggles); sp = &juggles[MI_SCREEN(mi)]; if (only && *only && strcmp(only, " ")) { @@ -2530,21 +2521,21 @@ init_juggle (ModeInfo * mi) /* create circular trajectory list */ ADD_ELEMENT(Trajectory, sp->head, sp->head); if(sp->head == NULL){ - free_juggle(sp); + free_juggle(mi); return; } /* create circular object list */ ADD_ELEMENT(Object, sp->objects, sp->objects); if(sp->objects == NULL){ - free_juggle(sp); + free_juggle(mi); return; } /* create circular wander list */ ADD_ELEMENT(Wander, sp->wander, sp->wander); if(sp->wander == NULL){ - free_juggle(sp); + free_juggle(mi); return; } (void)wander(sp, 0); /* Initialize wander */ @@ -2610,12 +2601,6 @@ init_juggle (ModeInfo * mi) } } -ENTRYPOINT void -reshape_juggle (ModeInfo * mi, int width, int height) -{ - init_juggle(mi); -} - ENTRYPOINT void draw_juggle (ModeInfo * mi) { @@ -2802,7 +2787,6 @@ draw_juggle (ModeInfo * mi) if (future < sp->time + 100 * THROW_CATCH_INTERVAL) { refill_juggle(mi); } else if (sp->time > 1<<30) { /* Hard Reset before the clock wraps */ - release_juggle(mi); init_juggle(mi); } }