X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;f=pctb%2Fstructure.c;h=63cd641e82ebb843977bf0797ab5f589cf685d62;hb=da2f43597c757ea14a9226e115e1dbe758321251;hp=49385a2fb8b89e822562ea7408118aeafc892a82;hpb=ae5d4e36af4f4a5567e1231958179d3a50eb4466;p=ypp-sc-tools.web-live.git diff --git a/pctb/structure.c b/pctb/structure.c index 49385a2..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 @@ -161,7 +163,7 @@ static void debug_rect(const char *what, int whati, Rect rr) { ); \ }while(0) -void find_structure(CanonImage *im) { +void find_structure(CanonImage *im, int *max_relevant_y_r) { cim= im; Rect whole = { {0,0}, {cim->w-1,cim->h-1} }; @@ -252,8 +254,79 @@ void find_structure(CanonImage *im) { SET_ONCE(columns, colno); SET_ONCE(text_h, comminty - 1); + if (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; @@ -376,7 +449,10 @@ void analyse(FILE *tsv_output) { int page, tryrect, colno; for (page=0; page