X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=hacks%2Fpolyominoes.c;h=c89fb31f4c42c5d8be190299204f4e288de26bda;hp=0c410eafb77ab5e08cac73d99b6f5e1c1c6123c7;hb=4361b69d3178d7fc98d0388f9a223af6c2651aba;hpb=d6b0217f2417bd19187f0ebc389d6c5c2233b11c diff --git a/hacks/polyominoes.c b/hacks/polyominoes.c index 0c410eaf..c89fb31f 100644 --- a/hacks/polyominoes.c +++ b/hacks/polyominoes.c @@ -39,6 +39,7 @@ static const char sccsid[] = "@(#)polyominoes.c 5.01 2000/12/18 xlockmore"; "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ +# define release_polyominoes 0 # define polyominoes_handle_event 0 # define SMOOTH_COLORS # include "xlockmore.h" /* in xscreensaver distribution */ @@ -81,7 +82,7 @@ ENTRYPOINT ModeSpecOpt polyominoes_opts = #ifdef USE_MODULES ModStruct polyominoes_description = { - "polyominoes", "init_polyominoes", "draw_polyominoes", "release_polyominoes", + "polyominoes", "init_polyominoes", "draw_polyominoes", (char *) NULL, "refresh_polyominoes", "init_polyominoes", (char *) NULL, &polyominoes_opts, 6000, 1, 8192, 1, 64, 1.0, "", "Shows attempts to place polyominoes into a rectangle", 0, NULL @@ -1052,8 +1053,9 @@ static void free_bitmaps(polyominoesstruct *sp) #define deallocate(p,t) if ((p)!=NULL) {free(p); p=(t*)NULL;} -static void free_polyominoes(polyominoesstruct *sp) +static void free_polyominoes(ModeInfo * mi) { + polyominoesstruct *sp = &polyominoeses[MI_SCREEN(mi)]; int n; for (n=0;nnr_polyominoes;n++) { @@ -1072,7 +1074,7 @@ static void free_polyominoes(polyominoesstruct *sp) } #define set_allocate(p,type,size) p = (type *) malloc(size); \ - if ((p)==NULL) {free_polyominoes(sp);return 0;} + if ((p)==NULL) {free_polyominoes(mi);return 0;} #define copy_polyomino(dst,src,new_rand) \ (dst).len=(src).len; \ @@ -1546,7 +1548,7 @@ into a rectangle whose size is 20x3, 15x4, 12x5 or 10x6. */ static -int set_pentomino_puzzle(polyominoesstruct *sp) +int set_pentomino_puzzle(ModeInfo * mi, polyominoesstruct *sp) { int perm_poly[12], perm_point[5], perm_transform[8], i, p; @@ -1593,7 +1595,7 @@ into a rectangle. */ static -int set_one_sided_pentomino_puzzle(polyominoesstruct *sp) +int set_one_sided_pentomino_puzzle(ModeInfo * mi, polyominoesstruct *sp) { int perm_poly[18], perm_point[5], perm_transform[8], i, p; @@ -1637,7 +1639,7 @@ into a rectangle. */ static -int set_one_sided_hexomino_puzzle(polyominoesstruct *sp) +int set_one_sided_hexomino_puzzle(ModeInfo * mi, polyominoesstruct *sp) { int perm_poly[60], perm_point[6], perm_transform[8], i, p; @@ -1697,7 +1699,7 @@ pentominoes into a rectangle. */ static -int set_tetr_pentomino_puzzle(polyominoesstruct *sp) +int set_tetr_pentomino_puzzle(ModeInfo * mi, polyominoesstruct *sp) { int perm_poly[17], perm_point[5], perm_transform[8], i, p; @@ -1737,7 +1739,7 @@ hexominoes into a rectangle whose size is 18x15. */ static -int set_pent_hexomino_puzzle(polyominoesstruct *sp) +int set_pent_hexomino_puzzle(ModeInfo * mi, polyominoesstruct *sp) { int perm_poly[47], perm_point[6], perm_transform[8], i, p; @@ -1799,7 +1801,7 @@ static struct {int len; point_type point[5]; 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}; static -int set_pentomino_puzzle1(polyominoesstruct *sp) +int set_pentomino_puzzle1(ModeInfo * mi, polyominoesstruct *sp) { int perm_point[5], perm_transform[8], i, p; @@ -1831,7 +1833,7 @@ static struct {int len; point_type point[6]; 8, {0, 1, 2, 3, 4, 5, 6, 7}, 4}; static -int set_hexomino_puzzle1(polyominoesstruct *sp) +int set_hexomino_puzzle1(ModeInfo * mi, polyominoesstruct *sp) { int perm_point[6], perm_transform[8], i, p; @@ -1865,7 +1867,7 @@ static struct {int len; point_type point[7]; 8, {0, 1, 2, 3, 4, 5, 6, 7}, 4}; static -int set_heptomino_puzzle1(polyominoesstruct *sp) +int set_heptomino_puzzle1(ModeInfo * mi, polyominoesstruct *sp) { int perm_point[7], perm_transform[8], i, p; @@ -1899,7 +1901,7 @@ by Solomon W. Golomb Princeton University Press 1994 */ static -int set_heptomino_puzzle2(polyominoesstruct *sp) +int set_heptomino_puzzle2(ModeInfo * mi, polyominoesstruct *sp) { int perm_point[7], perm_transform[8], i, p; @@ -1934,7 +1936,7 @@ static struct {int len; point_type point[11]; 8, {0, 1, 2, 3, 4, 5, 6, 7}, 6}; static -int set_elevenomino_puzzle1(polyominoesstruct *sp) +int set_elevenomino_puzzle1(ModeInfo * mi, polyominoesstruct *sp) { int perm_point[11], perm_transform[8], i, p; @@ -1974,7 +1976,7 @@ static struct {int len; point_type point[10]; 8, {0, 1, 2, 3, 4, 5, 6, 7}, 5}; static -int set_dekomino_puzzle1(polyominoesstruct *sp) +int set_dekomino_puzzle1(ModeInfo * mi, polyominoesstruct *sp) { int perm_point[10], perm_transform[8], i, p; @@ -2009,7 +2011,7 @@ static struct {int len; point_type point[10]; 8, {0, 1, 2, 3, 4, 5, 6, 7}, 5}; static -int set_octomino_puzzle1(polyominoesstruct *sp) +int set_octomino_puzzle1(ModeInfo * mi, polyominoesstruct *sp) { int perm_point[8], perm_transform[8], i, p; @@ -2036,7 +2038,7 @@ int set_octomino_puzzle1(polyominoesstruct *sp) */ static -int set_pentomino_puzzle2(polyominoesstruct *sp) +int set_pentomino_puzzle2(ModeInfo * mi, polyominoesstruct *sp) { int perm_point[5], perm_transform[8], i, p; @@ -2064,7 +2066,7 @@ int set_pentomino_puzzle2(polyominoesstruct *sp) */ static -int set_elevenomino_puzzle2(polyominoesstruct *sp) +int set_elevenomino_puzzle2(ModeInfo * mi, polyominoesstruct *sp) { int perm_point[11], perm_transform[8], i, p; @@ -2087,7 +2089,7 @@ int set_elevenomino_puzzle2(polyominoesstruct *sp) The main functions. **************************************************/ -#define allocate(p,type,size) p = (type *) malloc(size); if ((p)==NULL) {free_polyominoes(sp); return;} +#define allocate(p,type,size) p = (type *) malloc(size); if ((p)==NULL) {free_polyominoes(mi); return;} ENTRYPOINT void init_polyominoes (ModeInfo * mi) @@ -2097,16 +2099,9 @@ init_polyominoes (ModeInfo * mi) int box1, box2; int *perm; - if (polyominoeses == NULL) { - if ((polyominoeses - = (polyominoesstruct *) calloc(MI_NUM_SCREENS(mi),sizeof (polyominoesstruct))) - == NULL) - return; - } + MI_INIT (mi, polyominoeses, free_polyominoes); sp = &polyominoeses[MI_SCREEN(mi)]; - free_polyominoes(sp); - sp->rot180 = 0; sp->counter = 0; @@ -2120,62 +2115,62 @@ init_polyominoes (ModeInfo * mi) if (sp->identical) { switch (NRAND(9)) { case 0: - if (!set_pentomino_puzzle1(sp)) + if (!set_pentomino_puzzle1(mi, sp)) return; break; case 1: - if (!set_hexomino_puzzle1(sp)) + if (!set_hexomino_puzzle1(mi, sp)) return; break; case 2: - if (!set_heptomino_puzzle1(sp)) + if (!set_heptomino_puzzle1(mi, sp)) return; break; case 3: - if (!set_heptomino_puzzle2(sp)) + if (!set_heptomino_puzzle2(mi, sp)) return; break; case 4: - if (!set_elevenomino_puzzle1(sp)) + if (!set_elevenomino_puzzle1(mi, sp)) return; break; case 5: - if (!set_dekomino_puzzle1(sp)) + if (!set_dekomino_puzzle1(mi, sp)) return; break; case 6: - if (!set_octomino_puzzle1(sp)) + if (!set_octomino_puzzle1(mi, sp)) return; break; case 7: - if (!set_pentomino_puzzle2(sp)) + if (!set_pentomino_puzzle2(mi, sp)) return; break; case 8: - if (!set_elevenomino_puzzle2(sp)) + if (!set_elevenomino_puzzle2(mi, sp)) return; break; } } else { switch (NRAND(5)) { case 0: - if (!set_pentomino_puzzle(sp)) + if (!set_pentomino_puzzle(mi, sp)) return; break; case 1: - if (!set_one_sided_pentomino_puzzle(sp)) + if (!set_one_sided_pentomino_puzzle(mi, sp)) return; break; case 2: - if (!set_one_sided_hexomino_puzzle(sp)) + if (!set_one_sided_hexomino_puzzle(mi, sp)) return; break; case 3: - if (!set_pent_hexomino_puzzle(sp)) + if (!set_pent_hexomino_puzzle(mi, sp)) return; break; case 4: - if (!set_tetr_pentomino_puzzle(sp)) + if (!set_tetr_pentomino_puzzle(mi, sp)) return; break; } @@ -2269,6 +2264,8 @@ draw_polyominoes (ModeInfo * mi) #ifdef STANDALONE if (sp->eraser) { sp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), sp->eraser); + if (!sp->eraser) + init_polyominoes(mi); return; } #endif @@ -2277,8 +2274,9 @@ draw_polyominoes (ModeInfo * mi) if (++sp->counter > MI_CYCLES(mi)) { #ifdef STANDALONE sp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), sp->eraser); -#endif /* STANDALONE */ +#else /* !STANDALONE */ init_polyominoes(mi); +#endif /* !STANDALONE */ return; } } @@ -2286,8 +2284,9 @@ draw_polyominoes (ModeInfo * mi) if (sp->box == 0) { #ifdef STANDALONE sp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), sp->eraser); -#endif /* STANDALONE */ +#else /* !STANDALONE */ init_polyominoes(mi); +#endif return; } @@ -2373,19 +2372,6 @@ reshape_polyominoes(ModeInfo * mi, int width, int height) init_polyominoes (mi); } -ENTRYPOINT void -release_polyominoes(ModeInfo * mi) -{ - int screen; - - if (polyominoeses != NULL) { - for (screen=0;screen