X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;ds=sidebyside;f=pctb%2Fconvert.c;h=5f47113bdaaa93a52913b2dde95a4ae55fc25015;hb=2ca58afcdf02d87e31115110ecd6c83ecc5dabc7;hp=80bc894559656714c48e6c90b2c193a44309d57a;hpb=0051984495aa2a5ed61224a7618f5bbd04311f7a;p=ypp-sc-tools.web-live.git diff --git a/pctb/convert.c b/pctb/convert.c index 80bc894..5f47113 100644 --- a/pctb/convert.c +++ b/pctb/convert.c @@ -1,75 +1,71 @@ -#include -#include -#include -#include -#include -#define eassert assert +#include "convert.h" -typedef struct { - unsigned long rgb; /* on screen */ - char c; /* canonical */ -} CanonColourInfo; -static const CanonColourInfo canoncolourinfos[]= { - { 0x475A5E, '*' }, /* edge */ - { 0x7D9094, '+' }, /* interbox */ - { 0xBDC5BF, ' ' }, /* background - pale */ - { 0xADB5AF, ' ' }, /* background - dark */ - { 0x000000, 'o' }, /* foreground */ - { 0xD4B356, ' ' }, /* background (cursor) */ - { 0xFFFFFF, 'o' }, /* foreground (cursor) */ - { 0,0 } -}; +void debug_flush(void) { + eassert(!fflush(debug)); + eassert(!ferror(debug)); +} + -static int height, width; -static char *image; +const char *get_vardir(void) { return "."; } -static void load_image_and_canonify(void) { - struct pam inpam; - unsigned char rgb[3]; - int x,y,r; - const CanonColourInfo *cci; - pnm_readpaminit(stdin, &inpam, sizeof(inpam)); - height= inpam.height; - width= inpam.width; - eassert(inpam.maxval == 255); - eassert(inpam.bytes_per_sample == 1); +static enum { mode_all=03, mode_screenshot=01, mode_analyse=02 } + o_mode= mode_all; +static char *o_screenshots_fn; +static int o_single_page; - image= malloc(width*height); - eassert(image); - memset(image,'?',width*height); +FILE *screenshots_file; - for (y=0; yc; cci++) - if (cci->rgb == rgb_l) { - image[y*width + x]= cci->c; - break; - } - if (y==234 && x==82) { - printf("y=%d/%d x=%d/%d rgb=%d,%d,%d rgb_l=%lx c=%c\n", - y,height,x,width, rgb[0],rgb[1],rgb[2], rgb_l, image[y*width+x]); - } - } - r= fwrite(image + y*width, 1,width, stdout); eassert(r==width); - putchar('\n'); +int main(int argc, char **argv) { + const char *arg; + int r; + + while ((arg=*++argv)) { + if (!strcmp(arg,"--screenshots-only")) + o_mode= mode_screenshot; + else if (!strcmp(arg,"--analyse-only")) + o_mode= mode_analyse; + else if (!strcmp(arg,"--single-page")) + o_single_page= 1; + else if (!strcmp(arg,"--screenshots-file")) + eassert( o_screenshots_fn= *++argv ); +#define DF(f) \ + else if (!strcmp(arg,"-D" #f)) \ + debug_flags |= dbg_##f; + DEBUG_FLAG_LIST +#undef DF + else if (!strcmp(arg,"--window-id")) { + char *ep; + eassert((arg=*++argv)); + unsigned long windowid= strtoul(arg,&ep,0); + eassert(!*ep); + set_yppclient_window(windowid); + } else + eassert(!"bad option"); + } + + if (!o_screenshots_fn) { + r= asprintf(&o_screenshots_fn,"%s/#pages#.ppm",get_vardir()); + eassert(r>=0); eassert(o_screenshots_fn); + } + + if (o_mode & mode_screenshot) { + screenshot_startup(); + find_yppclient_window(); + screenshots_file= fopen(o_screenshots_fn, "w"); eassert(screenshots_file); + if (o_single_page) + take_one_screenshot(); + else + take_screenshots(); + } else { + screenshots_file= fopen(o_screenshots_fn, "r"); eassert(screenshots_file); + read_screenshots(); + } + if (o_mode & mode_analyse) { + analyse(); + //output_tsv(); } - eassert(!fflush(stdout)); - eassert(!ferror(stdout)); -} - -int main(void) { - load_image_and_canonify(); - /* - find_main_rectangle(); - repeatedly_find_top_thing(); - */ return 0; }