X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.web-live.git;a=blobdiff_plain;f=pctb%2Fconvert.c;h=3c5af994c3f7c9db88c8cc22875b7979f6384bad;hp=433b043a3dadd5a043f7f9087733c21262e12160;hb=8848415eea8db3c206dbc138732ff56ba51e83c6;hpb=df798e7f57fac305e26cf1cf6265160ac5219d72 diff --git a/pctb/convert.c b/pctb/convert.c index 433b043..3c5af99 100644 --- a/pctb/convert.c +++ b/pctb/convert.c @@ -37,16 +37,18 @@ const char *get_libdir(void) { return "."; } enum mode { - mf_findwindow= 0001, - mf_screenshot= 0010, - mf_readscreenshot= 0020, - mf_analyse= 0100, + mf_findwindow= 00001, + mf_screenshot= 00010, + mf_readscreenshot= 00020, + mf_analyse= 00100, + mfm_special= 07000, - mode_findwindow= 0001, - mode_screenshot= 0011, - mode_analyse= 0120, + mode_findwindow= 00001, + mode_screenshot= 00011, + mode_analyse= 00120, + mode_showcharset= 01000, - mode_all= 0111, + mode_all= 00111, }; enum outmodekind { @@ -64,7 +66,9 @@ FILE *screenshot_file; const char *o_ocean, *o_pirate; int o_quiet; -enum flags o_flags= ff_dict_fetch|ff_dict_submit|ff_dict_pirate; +enum flags o_flags= + ff_charset_allowedit | + ff_dict_fetch|ff_dict_submit|ff_dict_pirate; static void vbadusage(const char *fmt, va_list) FMT(1,0) NORET; static void vbadusage(const char *fmt, va_list al) { @@ -90,7 +94,7 @@ static void run_analysis(void) { analyse(tf); if (o_flags & ff_upload) { - if (o_flags & ff_singlepage) + if (npages<=1) fatal("Recognition successful, but refusing to upload partial data\n" " (--single-page specified). Specify an output mode?"); } @@ -122,8 +126,10 @@ void fetch_with_rsync(const char *stem) { const char *src= getenv("YPPSC_PCTB_DICT_UPDATE"); char *remote= masprintf("%s/master-%s.txt", src, stem); char *local= masprintf("#master-%s#.txt", stem); + if (DEBUGP(rsync)) + fprintf(stderr,"executing rsync to fetch %s to %s\n",remote,local); execlp(rsync, "rsync", - DEBUGP(rsync) ? "-vLt" : "-Lt", + DEBUGP(rsync) ? "-zvLt" : "-zLt", "--",remote,local,(char*)0); sysassert(!"exec rsync failed"); } @@ -184,13 +190,15 @@ int main(int argc, char **argv) { while ((arg=*++argv)) { if (IS("--find-window-only")) o_mode= mode_findwindow; else if (IS("--screenshot-only")) o_mode= mode_screenshot; + else if (IS("--show-charset")) o_mode= mode_showcharset; else if (IS("--analyse-only") || IS("--same")) o_mode= mode_analyse; else if (IS("--everything")) o_mode= mode_all; else if (IS("--find-island")) o_flags |= ffs_printisland; else if (IS("--single-page")) o_flags |= ff_singlepage; else if (IS("--quiet")) o_quiet= 1; - else if (IS("--edit-charset")) o_flags |= ff_editcharset; + else if (IS("--edit-charset")) o_flags |= ff_charset_edit; + else if (IS("--no-edit-charset")) o_flags &= ~(ffm_charset); else if (IS("--test-servers")) o_flags |= ff_testservers; else if (IS("--dict-local-only")) o_flags &= ~ffs_dict; else if (IS("--dict-read-only")) o_flags &= (~ffs_dict | ff_dict_fetch); @@ -226,8 +234,14 @@ int main(int argc, char **argv) { /* Consequential changes to options */ if (o_mode & mf_analyse) { - if (!o_outmode_kind) - o_outmode_kind= (o_flags & ff_printisland) ? omk_none : omk_str; + if (!o_outmode_kind) { + if (o_flags & ff_printisland) { + o_outmode_kind= omk_none; + o_flags |= ff_singlepage; + } else { + o_outmode_kind= omk_upload; + } + } if (o_outmode_kind==omk_upload) { o_flags |= ffs_upload; @@ -264,30 +278,40 @@ int main(int argc, char **argv) { if (!ocean) ocean= o_ocean; if (!pirate) pirate= o_pirate; - if (o_flags & ff_needisland) { + if (o_flags & ff_needisland) if (!ocean) - badusage("need --ocean option when replaying images" + badusage("need --ocean option when not using actual YPP client window" " (consider supplying --pirate too)"); + if (ocean) sysassert(! setenv("YPPSC_OCEAN",ocean,1) ); - } if (pirate && (o_flags & ff_dict_pirate)) sysassert(! setenv("YPPSC_PIRATE",pirate,1) ); + switch (o_mode & mfm_special) { + case 0: break; + case mode_showcharset: ocr_showcharsets(); exit(0); + default: abort(); + } + if (o_mode & mf_screenshot) { open_screenshot_file("w"); if (o_flags & ff_singlepage) take_one_screenshot(); else take_screenshots(); + progress_log("OK for you to move the mouse now."); } if (o_mode & mf_readscreenshot) { + if ((o_flags & ff_upload) && !(o_flags & ff_testservers)) + badusage("must not reuse screenshots for upload to live PCTB database"); open_screenshot_file("r"); if (o_flags & ff_singlepage) read_one_screenshot(); else read_screenshots(); } if (o_mode & mf_analyse) { if (o_flags & ff_needisland) { - find_islandname(); + find_islandname(page_images[0]->rgb); if (o_flags & ff_printisland) printf("%s, %s\n", archipelago, island); + sysassert(! setenv("YPPSC_ISLAND",island,1) ); } switch (o_outmode_kind) { case omk_upload: case omk_str: run_analysis(); break;