From da2f43597c757ea14a9226e115e1dbe758321251 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 8 Jun 2009 00:02:42 +0100 Subject: [PATCH] WIP check commodity, before delete pixel searcher --- pctb/common.h | 1 + pctb/convert.h | 1 + pctb/pages.c | 1 + pctb/structure.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++- pctb/x.gdb | 6 ++-- 5 files changed, 81 insertions(+), 4 deletions(-) diff --git a/pctb/common.h b/pctb/common.h index f942c72..8b66cf5 100644 --- a/pctb/common.h +++ b/pctb/common.h @@ -57,6 +57,7 @@ typedef struct { /* both inclusive */ DF(findypp) \ DF(pages) \ DF(rect) \ + DF(struct) \ DF(ocr) \ DF(callout) diff --git a/pctb/convert.h b/pctb/convert.h index 7a9e252..8c6efef 100644 --- a/pctb/convert.h +++ b/pctb/convert.h @@ -41,6 +41,7 @@ /*----- from structure.c -----*/ void find_structure(CanonImage *im, int *max_relevant_y_r); +void check_correct_commodities(void); void read_screenshots(void); void read_one_screenshot(void); void analyse(FILE *tsv_output); diff --git a/pctb/pages.c b/pctb/pages.c index 1abc5ed..ab3a2b0 100644 --- a/pctb/pages.c +++ b/pctb/pages.c @@ -408,6 +408,7 @@ void take_screenshots(void) { wait_for_stability(¤t,0,0, "checking current YPP client screen..."); test= convert_page(current); find_structure(test, &max_relevant_y); + check_correct_commodities(); free(test); /* page to the top - keep pressing page up until the image stops changing */ 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; paget -watch o_screenshots_fn -break convert.c:125 +set args -Drect --same --arbitrage +#watch o_screenshots_fn +#break convert.c:125 run -- 2.30.2