X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fpolyominoes.c;h=0c410eafb77ab5e08cac73d99b6f5e1c1c6123c7;hb=aa75c7476aeaa84cf3abc192b376a8b03c325213;hp=f6a4fdc657552811cb48fb7002500426a83fac71;hpb=49f5b54f312fe4ac2e9bc47581a72451bd0e8439;p=xscreensaver diff --git a/hacks/polyominoes.c b/hacks/polyominoes.c index f6a4fdc6..0c410eaf 100644 --- a/hacks/polyominoes.c +++ b/hacks/polyominoes.c @@ -36,8 +36,9 @@ static const char sccsid[] = "@(#)polyominoes.c 5.01 2000/12/18 xlockmore"; # define MODE_polyominoes #define DEFAULTS "*delay: 10000 \n" \ "*cycles: 2000 \n" \ - "*ncolors: 64 \n" -# define reshape_polyominoes 0 + "*ncolors: 64 \n" \ + "*fpsSolid: true \n" \ + # define polyominoes_handle_event 0 # define SMOOTH_COLORS # include "xlockmore.h" /* in xscreensaver distribution */ @@ -53,6 +54,9 @@ static const char sccsid[] = "@(#)polyominoes.c 5.01 2000/12/18 xlockmore"; static Bool identical; static Bool plain; +#undef countof +#define countof(x) (sizeof((x))/sizeof((*x))) + static XrmOptionDescRec opts[] = { {"-identical", ".polyominoes.identical", XrmoptionNoArg, "on"}, @@ -509,7 +513,7 @@ static int score_point(polyominoesstruct *sp, int x, int y, int min_score_so_far) { int poly_no, point_no, transform_index, i, attachable; - point_type attach_point, target_point; + point_type attach_point = { 0, 0 }, target_point = { 0, 0 }; int score = 0; if (x>=1 && xwidth-1 && y>=1 && yheight-1 && @@ -582,7 +586,7 @@ static void detach(polyominoesstruct *sp, int *poly_no, int *point_no, int *transform_index, point_type *attach_point, int rot180) { int i; - point_type target_point; + point_type target_point = { 0, 0 }; if (sp->nr_attached == 0) return; sp->nr_attached--; @@ -610,7 +614,7 @@ void detach(polyominoesstruct *sp, int *poly_no, int *point_no, int *transform_i static int attach(polyominoesstruct *sp, int poly_no, int point_no, int transform_index, point_type attach_point, int rot180, int *reason_to_not_attach) { - point_type target_point; + point_type target_point = { 0, 0 }; int i; int attachable = 1, worst_reason_not_to_attach = 1000000000; @@ -790,7 +794,7 @@ static void create_bitmaps(ModeInfo * mi, polyominoesstruct *sp) int x,y,n; char *data; - for (n=0;n<256;n++) { + for (n=0;nbitmaps);n++) { /* Avoid duplication of identical bitmaps. */ if (IS_LEFT_UP(n) && (IS_LEFT(n) || IS_UP(n))) @@ -1029,7 +1033,7 @@ static void free_bitmaps(polyominoesstruct *sp) { int n; - for (n=0;n<256;n++) + for (n=0;nbitmaps);n++) /* Don't bother to free duplicates */ if (IS_LEFT_UP(n) && (IS_LEFT(n) || IS_UP(n))) sp->bitmaps[n] = None; @@ -1499,7 +1503,7 @@ static void make_one_sided_pentomino(void) int i,j,t,u; j=0; - for (i=0;i<18;i++) { + for (i=0;i=4) { @@ -1521,7 +1525,7 @@ static void make_one_sided_hexomino(void) int i,j,t,u; j=0; - for (i=0;i<35;i++) { + for (i=0;i=4) { @@ -1566,9 +1570,10 @@ int set_pentomino_puzzle(polyominoesstruct *sp) } sp->nr_polyominoes = 12; - set_allocate(sp->polyomino,polyomino_type,12*sizeof(polyomino_type)); - random_permutation(12,perm_poly); - for (p=0;p<12;p++) { + set_allocate(sp->polyomino,polyomino_type, + sp->nr_polyominoes*sizeof(polyomino_type)); + random_permutation(sp->nr_polyominoes,perm_poly); + for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],pentomino[perm_poly[p]],1); } @@ -1614,9 +1619,10 @@ int set_one_sided_pentomino_puzzle(polyominoesstruct *sp) } sp->nr_polyominoes = 18; - set_allocate(sp->polyomino,polyomino_type,18*sizeof(polyomino_type)); - random_permutation(18,perm_poly); - for (p=0;p<18;p++) { + set_allocate(sp->polyomino,polyomino_type, + sp->nr_polyominoes*sizeof(polyomino_type)); + random_permutation(sp->nr_polyominoes,perm_poly); + for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],one_sided_pentomino[perm_poly[p]],1); } @@ -1673,9 +1679,10 @@ int set_one_sided_hexomino_puzzle(polyominoesstruct *sp) } sp->nr_polyominoes = 60; - set_allocate(sp->polyomino,polyomino_type,60*sizeof(polyomino_type)); - random_permutation(60,perm_poly); - for (p=0;p<60;p++) { + set_allocate(sp->polyomino,polyomino_type, + sp->nr_polyominoes*sizeof(polyomino_type)); + random_permutation(sp->nr_polyominoes,perm_poly); + for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],one_sided_hexomino[perm_poly[p]],1); } @@ -1710,12 +1717,13 @@ int set_tetr_pentomino_puzzle(polyominoesstruct *sp) } sp->nr_polyominoes = 17; - set_allocate(sp->polyomino,polyomino_type,17*sizeof(polyomino_type)); - random_permutation(17,perm_poly); - for (p=0;p<5;p++) { + set_allocate(sp->polyomino,polyomino_type, + sp->nr_polyominoes*sizeof(polyomino_type)); + random_permutation(sp->nr_polyominoes,perm_poly); + for (p=0;ppolyomino[perm_poly[p]],tetromino[p],1); } - for (p=0;p<12;p++) { + for (p=0;ppolyomino[perm_poly[p+5]],pentomino[p],1); } @@ -1759,10 +1767,10 @@ int set_pent_hexomino_puzzle(polyominoesstruct *sp) sp->nr_polyominoes = 47; set_allocate(sp->polyomino,polyomino_type,47*sizeof(polyomino_type)); random_permutation(47,perm_poly); - for (p=0;p<12;p++) { + for (p=0;ppolyomino[perm_poly[p]],pentomino[p],1); } - for (p=0;p<35;p++) { + for (p=0;ppolyomino[perm_poly[p+12]],hexomino[p],1); } @@ -1799,8 +1807,9 @@ int set_pentomino_puzzle1(polyominoesstruct *sp) sp->height =5; sp->nr_polyominoes = 10; - set_allocate(sp->polyomino,polyomino_type,10*sizeof(polyomino_type)); - for (p=0;p<10;p++) { + set_allocate(sp->polyomino,polyomino_type, + sp->nr_polyominoes*sizeof(polyomino_type)); + for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],pentomino1,1); } @@ -1830,8 +1839,9 @@ int set_hexomino_puzzle1(polyominoesstruct *sp) sp->height =23; sp->nr_polyominoes = 92; - set_allocate(sp->polyomino,polyomino_type,92*sizeof(polyomino_type)); - for (p=0;p<92;p++) { + set_allocate(sp->polyomino,polyomino_type, + sp->nr_polyominoes*sizeof(polyomino_type)); + for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],hexomino1,1); } @@ -1865,8 +1875,9 @@ int set_heptomino_puzzle1(polyominoesstruct *sp) sp->height =21; sp->nr_polyominoes = 78; - set_allocate(sp->polyomino,polyomino_type,78*sizeof(polyomino_type)); - for (p=0;p<78;p+=2) { + set_allocate(sp->polyomino,polyomino_type, + sp->nr_polyominoes*sizeof(polyomino_type)); + for (p=0;pnr_polyominoes;p+=2) { copy_polyomino(sp->polyomino[p],heptomino1,1); copy_polyomino(sp->polyomino[p+1],heptomino1,0); } @@ -1896,8 +1907,9 @@ int set_heptomino_puzzle2(polyominoesstruct *sp) sp->height =19; sp->nr_polyominoes = 76; - set_allocate(sp->polyomino,polyomino_type,76*sizeof(polyomino_type)); - for (p=0;p<76;p++) { + set_allocate(sp->polyomino,polyomino_type, + sp->nr_polyominoes*sizeof(polyomino_type)); + for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],heptomino1,1); } @@ -1932,8 +1944,9 @@ int set_elevenomino_puzzle1(polyominoesstruct *sp) sp->height =22; sp->nr_polyominoes = 50; - set_allocate(sp->polyomino,polyomino_type,50*sizeof(polyomino_type)); - for (p=0;p<50;p+=2) { + set_allocate(sp->polyomino,polyomino_type, + sp->nr_polyominoes*sizeof(polyomino_type)); + for (p=0;pnr_polyominoes;p+=2) { copy_polyomino(sp->polyomino[p],elevenomino1,1); copy_polyomino(sp->polyomino[p+1],elevenomino1,0); } @@ -1969,8 +1982,9 @@ int set_dekomino_puzzle1(polyominoesstruct *sp) sp->height =30; sp->nr_polyominoes = 96; - set_allocate(sp->polyomino,polyomino_type,96*sizeof(polyomino_type)); - for (p=0;p<96;p++) { + set_allocate(sp->polyomino,polyomino_type, + sp->nr_polyominoes*sizeof(polyomino_type)); + for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],dekomino1,1); } @@ -2003,8 +2017,9 @@ int set_octomino_puzzle1(polyominoesstruct *sp) sp->height =26; sp->nr_polyominoes = 312; - set_allocate(sp->polyomino,polyomino_type,312*sizeof(polyomino_type)); - for (p=0;p<312;p++) { + set_allocate(sp->polyomino,polyomino_type, + sp->nr_polyominoes*sizeof(polyomino_type)); + for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],octomino1,1); } @@ -2029,8 +2044,9 @@ int set_pentomino_puzzle2(polyominoesstruct *sp) sp->height =15; sp->nr_polyominoes = 45; - set_allocate(sp->polyomino,polyomino_type,45*sizeof(polyomino_type)); - for (p=0;p<45;p++) { + set_allocate(sp->polyomino,polyomino_type, + sp->nr_polyominoes*sizeof(polyomino_type)); + for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],pentomino1,1); } @@ -2056,8 +2072,9 @@ int set_elevenomino_puzzle2(polyominoesstruct *sp) sp->height =33; sp->nr_polyominoes = 141; - set_allocate(sp->polyomino,polyomino_type,141*sizeof(polyomino_type)); - for (p=0;p<141;p++) { + set_allocate(sp->polyomino,polyomino_type, + sp->nr_polyominoes*sizeof(polyomino_type)); + for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],elevenomino1,1); } @@ -2349,6 +2366,13 @@ draw_polyominoes (ModeInfo * mi) sp->wait = 0; } +ENTRYPOINT void +reshape_polyominoes(ModeInfo * mi, int width, int height) +{ + XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); + init_polyominoes (mi); +} + ENTRYPOINT void release_polyominoes(ModeInfo * mi) {