X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;f=pctb%2Fstructure.c;h=d768acd406151a7fccf55a510cbd2d1c9ede4af9;hb=4d7eb93b7c82da31f928349ac7c6cd551d78ca57;hp=f9f1e7f52b1c8cf08328fe8a05a0446f0bc3452f;hpb=2ca58afcdf02d87e31115110ecd6c83ecc5dabc7;p=ypp-sc-tools.web-live.git diff --git a/pctb/structure.c b/pctb/structure.c index f9f1e7f..d768acd 100644 --- a/pctb/structure.c +++ b/pctb/structure.c @@ -207,7 +207,7 @@ CanonImage *alloc_canon_image(int w, int h) { return im; } -CanonImage *file_read_image_ppm(FILE *f) { +static void file_read_image_ppm(FILE *f) { struct pam inpam; unsigned char rgb_buf[3]; CanonImage *im; @@ -225,17 +225,39 @@ CanonImage *file_read_image_ppm(FILE *f) { (rgb_buf[2]); }); - return im; + eassert(!ferror(screenshots_file)); + eassert(!feof(screenshots_file)); + + eassert(npages < MAX_PAGES); + page_images[npages++]= im; } -void read_screenshots(void) { -// int c; -// while ((c= fgetc(screenshots_file) != EOF)) { -// ungetc(c, screenshots_file); +void read_one_screenshot(void) { + progress("reading screenshot..."); + file_read_image_ppm(screenshots_file); + progress_log("read screenshot."); +} -// eassert(npages < MAX_PAGES); - page_images[npages++]= file_read_image_ppm(screenshots_file); -// } +void read_screenshots(void) { + struct stat stab; + int r; + + r= fstat(fileno(screenshots_file), &stab); eassert(!r); + + for (;;) { + if (S_ISREG(stab.st_mode)) { + long pos= ftell(screenshots_file); + if (pos == stab.st_size) break; + } else { + int c= fgetc(screenshots_file); + if (c==EOF) break; + ungetc(c, screenshots_file); + } + progress("reading screenshot %d...",npages); + file_read_image_ppm(screenshots_file); + } + eassert(!ferror(screenshots_file)); + progress_log("read %d screenshots.",npages); } static void find_commodity(int offset, Rect *rr) { @@ -243,13 +265,14 @@ static void find_commodity(int offset, Rect *rr) { rr->tl.y= commbasey - offset*comminty; rr->br.y= rr->tl.y + comminty-2; if (rr->tl.y < mainr.tl.y || rr->br.y > mainr.br.y) { rr->tl.x=-1; return; } + + rr->tl.x= mainr.tl.x; + rr->br.x= mainr.br.x; + if (rr->tl.y > mainr.tl.y) require_rectangle(rr->tl.x,rr->tl.y-1, rr->br.x,rr->tl.y-1, "+"); if (rr->br.y < mainr.tl.y) require_rectangle(rr->tl.x,rr->br.y+1, rr->br.x,rr->br.y+1, "+"); - - rr->tl.x= mainr.tl.x; - rr->br.x= mainr.br.x; } static void find_table_entry(Rect commod, int colno, Rect *cellr) {