X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-test.git;a=blobdiff_plain;f=pctb%2Fstructure.c;h=1f3c743319de029d342bbdbaa9bce1ec920047cb;hp=5309489038bce03f9b3d1646d4357222a5d85e44;hb=f23577a2c5659be8d42d87da85a6a62beb80cd3c;hpb=62c6511084ac851f374aaeb68b4d1d9f117690a1;ds=sidebyside diff --git a/pctb/structure.c b/pctb/structure.c index 5309489..1f3c743 100644 --- a/pctb/structure.c +++ b/pctb/structure.c @@ -133,20 +133,23 @@ static void mustfail2(void) { #define REQUIRE_RECTANGLE(tlx,tly,brx,bry,ok) \ require_rectangle(tlx, tly, brx, bry, ok, __LINE__); -static void require_rectangle(int tlx, int tly, int brx, int bry, - const char *ok, int lineno) { +#define FOR_P_RECT(p,rect) \ + for ((p).x=(rr).tl.x; (p).x<=(rr).br.x; (p).x++) \ + for ((p).y=(rr).tl.y; (p).y<=(rr).br.y; (p).y++) + +static void require_rectangle_r(Rect rr, const char *ok, int lineno) { Point p; - for (p.x=tlx; p.x<=brx; p.x++) - for (p.y=tly; p.y<=bry; p.y++) { - int c= get_p(p); - MUST( strchr(ok,c), ({ - Rect rm={{tlx,tly},{brx,bry}}; - MI(lineno),MR(rm);MP(p);MS(ok); - })); - } + FOR_P_RECT(p,rr) { + int c= get_p(p); + MUST( strchr(ok,c), ({ + MI(lineno),MR(rr);MP(p);MS(ok); + })); + } } -static void require_rectangle_r(Rect rr, const char *ok, int lineno) { - require_rectangle(rr.tl.x,rr.tl.y, rr.br.x,rr.br.y, ok, lineno); +static void require_rectangle(int tlx, int tly, int brx, int bry, + const char *ok, int lineno) { + Rect rr= {{tlx,tly},{brx,bry}}; + require_rectangle_r(rr, ok, lineno); } static void debug_rect(const char *what, int whati, Rect rr) { @@ -375,7 +378,6 @@ static void file_read_image_ppm(FILE *f) { struct pam inpam; unsigned char rgb_buf[3]; CanonImage *im; - RgbImage *ri=0; pnm_readpaminit(f, &inpam, sizeof(inpam)); if (!(inpam.maxval == 255 && @@ -383,9 +385,6 @@ static void file_read_image_ppm(FILE *f) { inpam.format == RPPM_FORMAT)) fatal("PNM screenshot(s) file must be 8bpp 1 byte per sample RGB"); - if (!npages) - page0_rgbimage= ri= alloc_rgb_image(inpam.width, inpam.height); - CANONICALISE_IMAGE(im, inpam.width, inpam.height, { int r= fread(&rgb_buf,1,3,f); sysassert(!ferror(f)); @@ -396,8 +395,6 @@ static void file_read_image_ppm(FILE *f) { ((unsigned long)rgb_buf[1]<<8) | (rgb_buf[2]); - if (ri) - CANONIMG_ALSO_STORERGB(ri); }); sysassert(!ferror(screenshot_file)); @@ -560,7 +557,7 @@ void find_islandname(RgbImage *ri) { const unsigned char *srcp; unsigned char *destp, *endp; - for (srcp=page0_rgbimage->data, destp=ri->data, + for (srcp=page_images[0]->rgb->data, destp=ri->data, endp= ri->data + 3 * ri->w * ri->h; destp < endp; srcp++, destp++) {