X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-test.git;a=blobdiff_plain;f=pctb%2Fconvert.c;h=e6e0102e6b02b69fb7031d52de2a43a80dc03e18;hp=8101fb920a40adafad02ab92ed4efd5181c2ae44;hb=373a139d8c902f3c7af960d05c7665048cf4d5c0;hpb=f23577a2c5659be8d42d87da85a6a62beb80cd3c diff --git a/pctb/convert.c b/pctb/convert.c index 8101fb9..e6e0102 100644 --- a/pctb/convert.c +++ b/pctb/convert.c @@ -66,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) { @@ -108,33 +110,40 @@ static void run_analysis(void) { EXECLP_HELPER("commod-results-processor", o_outmode_str, (char*)0); } - waitpid_check_exitstatus(processor, "output processor/uploader"); + waitpid_check_exitstatus(processor, "output processor/uploader", 0); fclose(tf); progress_log("all complete."); } -void fetch_with_rsync(const char *stem) { +static void rsync_core(const char *stem, const char *suffix, + const char *zopt) { pid_t fetcher; + progress("Updating dictionary %s...",stem); + sysassert( (fetcher= fork()) != -1 ); if (!fetcher) { const char *rsync= getenv("YPPSC_PCTB_RSYNC"); if (!rsync) rsync= "rsync"; const char *src= getenv("YPPSC_PCTB_DICT_UPDATE"); - char *remote= masprintf("%s/master-%s.txt", src, stem); - char *local= masprintf("#master-%s#.txt", stem); + char *remote= masprintf("%s/master-%s.txt%s", src, stem, suffix); + char *local= masprintf("_master-%s.txt%s", stem, suffix); if (DEBUGP(rsync)) fprintf(stderr,"executing rsync to fetch %s to %s\n",remote,local); - execlp(rsync, "rsync", - DEBUGP(rsync) ? "-zvLt" : "-zLt", - "--",remote,local,(char*)0); + char *opts= masprintf("-Lt%s%s", + zopt, + DEBUGP(rsync) ? "v" : ""); + execlp(rsync, "rsync",opts,"--",remote,local,(char*)0); sysassert(!"exec rsync failed"); } - waitpid_check_exitstatus(fetcher, "rsync"); + waitpid_check_exitstatus(fetcher, "rsync", 0); } +void fetch_with_rsync_gz(const char *stem) { rsync_core(stem,".gz",""); } +void fetch_with_rsync(const char *stem) { rsync_core(stem,"","z"); } + static void set_server(const char *envname, const char *defprotocol, const char *defvalue, const char *defvalue_test, const char *userspecified, @@ -195,7 +204,8 @@ int main(int argc, char **argv) { 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); @@ -208,7 +218,8 @@ int main(int argc, char **argv) { IS("--best-prices")) o_outmode_kind=omk_str, o_outmode_str=arg+2; - else if (IS("--screenshot-file")) o_screenshot_fn= ARGVAL; + else if (IS("--screenshot-file")|| + IS("--screenshots-file")) o_screenshot_fn= ARGVAL; else if (IS("--pctb-server")) o_serv_pctb= ARGVAL; else if (IS("--dict-submit-server")) o_serv_dict_submit= ARGVAL; else if (IS("--dict-update-server")) o_serv_dict_fetch= ARGVAL; @@ -264,10 +275,12 @@ int main(int argc, char **argv) { o_serv_dict_submit, o_flags & ff_dict_submit); if (!o_screenshot_fn) - o_screenshot_fn= masprintf("%s/#pages#.ppm",get_vardir()); + o_screenshot_fn= masprintf("%s/_pages.ppm",get_vardir()); /* Actually do the work */ + canon_colour_prepare(); + if (o_mode & mf_findwindow) { screenshot_startup(); find_yppclient_window(); @@ -294,7 +307,8 @@ int main(int argc, char **argv) { 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."); + progress_log("OK for you to move the mouse now, and you can" + " use the YPP client again."); } if (o_mode & mf_readscreenshot) { if ((o_flags & ff_upload) && !(o_flags & ff_testservers)) @@ -305,7 +319,7 @@ int main(int argc, char **argv) { } if (o_mode & mf_analyse) { if (o_flags & ff_needisland) { - find_islandname(page_images[0]->rgb); + find_islandname(); if (o_flags & ff_printisland) printf("%s, %s\n", archipelago, island); sysassert(! setenv("YPPSC_ISLAND",island,1) ); @@ -405,7 +419,7 @@ void sysassert_fail(const char *file, int line, const char *what) { _exit(16); } -void waitpid_check_exitstatus(pid_t pid, const char *what) { +void waitpid_check_exitstatus(pid_t pid, const char *what, int sigpipeok) { pid_t got; int st; for (;;) { @@ -420,8 +434,9 @@ void waitpid_check_exitstatus(pid_t pid, const char *what) { fatal("%s failed with nonzero exit status %d", what, WEXITSTATUS(st)); } else if (WIFSIGNALED(st)) { - fatal("%s died due to signal %s%s", what, - strsignal(WTERMSIG(st)), WCOREDUMP(st)?" (core dumped)":""); + if (!sigpipeok || WTERMSIG(st) != SIGPIPE) + fatal("%s died due to signal %s%s", what, + strsignal(WTERMSIG(st)), WCOREDUMP(st)?" (core dumped)":""); } else { fatal("%s gave strange wait status %d", what, st); }