# define UNIFORM_COLORS
# define BRIGHT_COLORS
+# define release_pacman 0
# define pacman_handle_event 0
# include "xlockmore.h" /* in xscreensaver distribution */
# include <assert.h>
"pacman", /* *cmdline_arg; */
"init_pacman", /* *init_name; */
"draw_pacman", /* *callback_name; */
- "release_pacman", /* *release_name; */
+ (char *) NULL, /* *release_name; */
"refresh_pacman", /* *refresh_name; */
"change_pacman", /* *change_name; */
(char *) NULL, /* *unused_name; */
static void
-free_pacman (Display * display, pacmangamestruct * pp)
+free_pacman (ModeInfo * mi)
{
+ Display * display = MI_DISPLAY (mi);
+ pacmangamestruct * pp = &pacman_games[MI_SCREEN (mi)];
int dir, mouth, i, j, k;
if (pp->ghosts != NULL) {
int dir, mouth;
#endif
- if (pacman_games == NULL) {
- if ((pacman_games = (pacmangamestruct *)
- calloc ((size_t) MI_NUM_SCREENS (mi),
- sizeof (pacmangamestruct))) == NULL)
- return;
- }
+ MI_INIT (mi, pacman_games, free_pacman);
pp = &pacman_games[MI_SCREEN (mi)];
pp->width = (unsigned short) MI_WIDTH (mi);
if ((pp->stippledGC = XCreateGC (display, window,
GCForeground | GCBackground,
&gcv)) == None) {
- free_pacman (display, pp);
+ free_pacman (mi);
return;
}
}
if ((pp->ghostPixmap[0][0][0] = XCreatePixmap (display, window,
pp->spritexs, pp->spriteys,
1)) == None) {
- free_pacman (display, pp);
+ free_pacman (mi);
return;
}
gcv.background = 1;
if ((bg_gc = XCreateGC (display, pp->ghostPixmap[0][0][0],
GCForeground | GCBackground, &gcv)) == None) {
- free_pacman (display, pp);
+ free_pacman (mi);
return;
}
if ((fg_gc = XCreateGC (display, pp->ghostPixmap[0][0][0],
GCForeground | GCBackground, &gcv)) == None) {
XFreeGC (display, bg_gc);
- free_pacman (display, pp);
+ free_pacman (mi);
return;
}
if ((pp->pacmanPixmap[dir][mouth] =
XCreatePixmap (display, MI_WINDOW (mi), pp->spritexs,
pp->spriteys, 1)) == None) {
- free_pacman (display, pp);
+ free_pacman (mi);
return;
}
gcv.foreground = 1;
if ((fg_gc = XCreateGC (display, pp->pacmanPixmap[dir][mouth],
GCForeground | GCBackground,
&gcv)) == None) {
- free_pacman (display, pp);
+ free_pacman (mi);
return;
}
gcv.foreground = 0;
GCForeground |
GCBackground, &gcv)) == None) {
XFreeGC (display, fg_gc);
- free_pacman (display, pp);
+ free_pacman (mi);
return;
}
XFillRectangle (display,
if ((pp->ghosts = (ghoststruct *) calloc ((size_t) pp->nghosts,
sizeof (ghoststruct))) ==
NULL) {
- free_pacman (display, pp);
+ free_pacman (mi);
return;
}
pacman_tick (mi);
}
-/* Releases resources. */
-ENTRYPOINT void
-release_pacman (ModeInfo * mi)
-{
- if (pacman_games != NULL) {
- int screen;
-
- for (screen = 0; screen < MI_NUM_SCREENS (mi); screen++)
- free_pacman (MI_DISPLAY (mi), &pacman_games[screen]);
- free (pacman_games);
- pacman_games = (pacmangamestruct *) NULL;
- }
-}
-
/* Refresh current level. */
ENTRYPOINT void
refresh_pacman (ModeInfo * mi)