chiark / gitweb /
Merge branch 'twomack'
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sat, 4 Jul 2009 00:24:28 +0000 (01:24 +0100)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sat, 4 Jul 2009 00:24:28 +0000 (01:24 +0100)
1  2 
pctb/pages.c
pctb/structure.c

diff --combined pctb/pages.c
@@@ -43,6 -43,7 +43,6 @@@
  
  CanonImage *page_images[MAX_PAGES];
  int npages;
 -RgbImage *page0_rgbimage;
  
  const char *ocean, *pirate;
  
@@@ -348,7 -349,7 +348,7 @@@ static void wait_for_stability(Snapsho
        last=*output; *output=0;
      } else if (!identical(*output,last)) {
        debugf("PAGING  wait_for_stability changed...\n");
 -      free(last); last=*output; *output=0;
 +      free_snapshot(&last); last=*output; *output=0;
        nidentical=0;
        if (!with_keypress) {
        min_interval *= 3.0;
@@@ -493,10 -494,11 +493,10 @@@ static void set_focus_commodity(void) 
    debugf("PAGING raise_and_set_focus done.\n");
  }
  
 -static CanonImage *convert_page(Snapshot *sn, RgbImage *ri) {
 +static CanonImage *convert_page(Snapshot *sn) {
    CanonImage *im;
  
    fwrite_ppmraw(screenshot_file, sn);
 -  if (ri) memcpy(ri->data, sn->data, ri->h * ri->w * 3);
  
    unsigned char *pixel= sn->data;
    CANONICALISE_IMAGE(im, sn->w, sn->h, {
@@@ -521,7 -523,7 +521,7 @@@ static void prepare_ypp_client(void) 
    raise_and_get_details();
    wait_for_stability(&current,0,0, "checking current YPP client screen...");
  
 -  test= convert_page(current, 0);
 +  test= convert_page(current);
    find_structure(test, &max_relevant_y);
    check_correct_commodities();
    Rect sunshine= find_sunshine_widget();
  
  void take_screenshots(void) {
    Snapshot *current=0, *last=0;
 -  RgbImage *page0_store;
  
    prepare_ypp_client();
    
    wait_for_stability(&current,0, send_pgup_many,
                     "paging up to top of commodity list...");
  
 -  page0_rgbimage= page0_store= alloc_rgb_image(current->w, current->h);
 -
    /* now to actually page down */
    for (;;) {
      debugf("paging page %d\n",npages);
        fatal("Paging down seems to generate too many pages - max is %d.",
            MAX_PAGES);
      
 -    page_images[npages]= convert_page(current, page0_store);
 -    free_snapshot(&last); last=current; current=0; page0_store=0;
 +    page_images[npages]= convert_page(current);
 +    free_snapshot(&last); last=current; current=0;
  
      debugf("PAGING page %d converted\n",npages);
  
  
    debugf("PAGING all done.\n");
    progress_log("collected %d screenshots.",npages);
 -  assert(!page0_store);
  }    
  
  void take_one_screenshot(void) {
  
    prepare_ypp_client();
    wait_for_stability(&current,0,0, "taking screenshot...");
 -  page0_rgbimage= alloc_rgb_image(current->w, current->h);
 -  page_images[0]= convert_page(current, page0_rgbimage);
 +  page_images[0]= convert_page(current);
    npages= 1;
    progress_log("collected single screenshot.");
  }
@@@ -621,7 -628,7 +621,7 @@@ static void findypp_recurse(int depth, 
    static const char prefix[]= "Puzzle Pirates - ";
    static const char onthe[]= " on the ";
    static const char suffix[]= " ocean";
- #define S(x) (sizeof((x))-1)
+ #define S(x) ((int)sizeof((x))-1)
  
    debugfind("FINDYPP %d/%d screen %d  %*s %lx",
            depth,targetdepth,screen,
    REQUIRE( !memcmp(spc1,                    onthe,  S(onthe))  );
  
  #define ASSIGN(what, start, end)                      \
-   what= masprintf("%.*s", (end)-(start), start);      \
+   what= masprintf("%.*s", (int)((end)-(start)), start);       \
    if (o_##what) REQUIRE( !strcasecmp(o_##what, what) );       \
    else
  
diff --combined pctb/structure.c
@@@ -133,23 -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) {
@@@ -378,6 -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 &&
        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));
        ((unsigned long)rgb_buf[1]<<8) |
                       (rgb_buf[2]);
  
 -    if (ri)
 -      CANONIMG_ALSO_STORERGB(ri);
    });
  
    sysassert(!ferror(screenshot_file));
@@@ -557,7 -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++) {
  
    char *delim= strstr(archisland," - ");
    assert(delim);
-   archipelago= masprintf("%.*s", delim-archisland, archisland);
+   archipelago= masprintf("%.*s", (int)(delim-archisland), archisland);
    island= masprintf("%s", delim+3);
  
    free(ri);