X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-test.git;a=blobdiff_plain;f=pctb%2Fstructure.c;h=63cd641e82ebb843977bf0797ab5f589cf685d62;hp=8fabe1887b9063b12715843046afe9ef72556110;hb=da2f43597c757ea14a9226e115e1dbe758321251;hpb=a2a2f9d982ee233f3d89fb7137f532c9eec3b97c diff --git a/pctb/structure.c b/pctb/structure.c index 8fabe18..63cd641 100644 --- a/pctb/structure.c +++ b/pctb/structure.c @@ -32,7 +32,9 @@ static CanonImage *cim; static inline char get(int x, int y) { return cim->d[y * cim->w + x]; } static inline char get_p(Point p) { return get(p.x,p.y); } -#define START_MAIN {200,200} +DEBUG_DEFINE_DEBUGF(struct) + +#define START_MAIN {200,100} #define MIN_COLUMNS 6 #define INTERESTING_COLUMNS 7 #define TEXT_COLUMNS 2 @@ -256,6 +258,75 @@ void find_structure(CanonImage *im, int *max_relevant_y_r) { SET_ONCE(*max_relevant_y_r, mainr.br.y + 10); } +void check_correct_commodities(void) { + Rect search= { { 50,39 }, { 130,59 } }; + +#define SEARCH_UPDOWN(this,increm) \ + for (;;) { \ + MUST( search.tl.y != search.br.y, MR(search);MSB(#this); ); \ + int x, got=0; \ + for (x=search.tl.x; x<=search.br.x; x++) \ + got += (get(x,this.y) == '_'); \ + if (got > 10) \ + break; \ + this.y += increm; \ + } + + SEARCH_UPDOWN(search.tl, +1); + SEARCH_UPDOWN(search.br, -1); + + debug_rect("commodselr",1, search); + + static const char *all[]= { + " ___________________________________ ", + " ________X____X__X____________________ ", + " ________ X___ X_ X_____XXXXXXXXXXX_____ ", + "_________X_X__ X_ X______XXXXXXXXX_______", + "________ X X__ X_ X_______XXXXXXX________", + "________X_ _X_ X_ X________XXXXX_________", + "_______ X__ X_ X_ X_________XXX__________", + "_______XXXXXXX X_ X__________X___________", + " _____ X X X_ X______________________", + " ____X_____ _XX_ X______________________", + " __ _______ __ ______________________ ", + }; + + static int allh= sizeof(all)/sizeof(all[0]); + const int allw= strlen(all[0]); + + int alloffy, alloffx; + for (alloffy=0; alloffy < search.br.y; alloffy++) { + if (alloffy+allh-1 < search.tl.y) continue; + for (alloffx=search.tl.x; alloffx+allw-1 <= search.br.x; alloffx++) { + int good=0, bad=0; + int x,y; + for (x=0; x 20*bad) + goto all_found; + } + } + fatal("Commodities selector not set to `All'."); + + all_found:; +} + CanonImage *alloc_canon_image(int w, int h) { CanonImage *im= mmalloc(sizeof(CanonImage) + w*h); im->w= w; @@ -380,6 +451,9 @@ void analyse(FILE *tsv_output) { for (page=0; page