"*ignoreRotation: True \n" \
# define refresh_penrose 0
+# define release_penrose 0
# include "xlockmore.h" /* from the xscreensaver distribution */
#else /* !STANDALONE */
# include "xlock.h" /* from the xlockmore distribution */
/* Mop up dynamic data for one screen. */
static void
-free_penrose(tiling_c * tp)
+free_penrose(ModeInfo * mi)
{
+ tiling_c * tp = &tilings[MI_SCREEN(mi)];
register fringe_node_c *fp1, *fp2;
register forced_node_c *lp1, *lp2;
fringe_node_c *fp;
int i, size;
- if (tilings == NULL) {
- if ((tilings = (tiling_c *) calloc(MI_NUM_SCREENS(mi),
- sizeof (tiling_c))) == NULL)
- return;
- }
+ MI_INIT (mi, tilings, free_penrose);
tp = &tilings[MI_SCREEN(mi)];
#if 0 /* if you do this, then the -ammann and -no-ammann options don't work.
tp->origin.y = (tp->height / 2 + NRAND(tp->height)) / 2;
tp->fringe.n_nodes = 2;
if (tp->fringe.nodes != NULL)
- free_penrose(tp);
+ free_penrose(mi);
if (tp->fringe.nodes != NULL || tp->forced.first != 0) {
if (MI_IS_VERBOSE(mi)) {
(void) fprintf(stderr, "Weirdness in init_penrose()\n");
(void) fprintf(stderr, "tp->fringe.nodes = NULL && tp->forced.first = 0\n");
}
- free_penrose(tp); /* Try again */
+ free_penrose(mi); /* Try again */
tp->done = True;
}
tp->forced.n_nodes = tp->forced.n_visible = 0;
if ((fp = tp->fringe.nodes = ALLOC_NODE(fringe_node_c)) == NULL) {
- free_penrose(tp);
+ free_penrose(mi);
return;
}
if (fp == 0) {
(void) fprintf(stderr, "fp = 0\n");
}
if ((fp = tp->fringe.nodes = ALLOC_NODE(fringe_node_c)) == NULL) {
- free_penrose(tp);
+ free_penrose(mi);
return;
}
tp->done = True;
fp->rule_mask = (1 << N_VERTEX_RULES) - 1;
fp->list_ptr = 0;
if ((fp->prev = fp->next = ALLOC_NODE(fringe_node_c)) == NULL) {
- free_penrose(tp);
+ free_penrose(mi);
return;
}
if (fp->next == 0) {
(void) fprintf(stderr, "fp->next = 0\n");
}
if ((fp->prev = fp->next = ALLOC_NODE(fringe_node_c)) == NULL) {
- free_penrose(tp);
+ free_penrose(mi);
return;
}
tp->done = True;
{
tiling_c *tp = &tilings[MI_SCREEN(mi)];
unsigned side;
- vertex_type_c vtype;
+ vertex_type_c vtype = 0;
rule_match_c hits[MAX_TILES_PER_VERTEX * N_VERTEX_RULES];
int n;
if (MI_IS_VERBOSE(mi)) {
(void) fprintf(stderr, "Weirdness in add_random_tile()\n");
}
- free_penrose(tp);
+ free_penrose(mi);
}
}
MI_CLEARWINDOW(mi);
if (!add_tile(mi, tp->fringe.nodes, S_LEFT, vtype))
- free_penrose(tp);
+ free_penrose(mi);
return;
}
/* No visible nodes left. */
tp->height = height;
}
-/* Total clean-up. */
-ENTRYPOINT void
-release_penrose(ModeInfo * mi)
-{
- if (tilings != NULL) {
- int screen;
-
- for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++)
- free_penrose(&tilings[screen]);
- (void) free((void *) tilings);
- tilings = (tiling_c *) NULL;
- }
-}
-
ENTRYPOINT Bool
penrose_handle_event (ModeInfo *mi, XEvent *event)
{