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=70b4769fe41d74b3539d99be65abb337fc7e2658;hp=bb1073f4bf6ac20a391dbfc5bddadc4fef2f43f9;hb=f8488ba218ce448dc5c02c8d83e85b6c551332eb;hpb=e888c1dd3476ca49bccf82b93b4a3633587d400d diff --git a/pctb/convert.c b/pctb/convert.c index bb1073f..70b4769 100644 --- a/pctb/convert.c +++ b/pctb/convert.c @@ -49,14 +49,20 @@ enum mode { mode_all= 0111, }; +enum outmodekind { + omk_unset, omk_upload, omk_str, omk_raw, omk_none +}; +static enum outmodekind o_outmode_kind; +static const char *o_outmode_str= 0; + static enum mode o_mode= mode_all; static char *o_screenshot_fn; static int o_quiet; -static const char *o_outputmode= "upload"; static const char *o_serv_pctb, *o_serv_dict_fetch, *o_serv_dict_submit; const char *o_resolver= "./dictionary-manager"; FILE *screenshot_file; +const char *o_ocean, *o_pirate; enum flags o_flags= ff_dict_fetch|ff_dict_submit|ff_dict_pirate; @@ -91,13 +97,13 @@ static void run_analysis(void) { sysassert( fseek(tf,0,SEEK_SET) == 0); - progress_log("processing results (--%s)...", o_outputmode); + progress_log("processing results (--%s)...", o_outmode_str); pid_t processor; sysassert( (processor= fork()) != -1 ); if (!processor) { sysassert( dup2(fileno(tf),0) ==0 ); - EXECLP_HELPER("commod-results-processor", o_outputmode, (char*)0); + EXECLP_HELPER("commod-results-processor", o_outmode_str, (char*)0); } waitpid_check_exitstatus(processor, "output processor/uploader"); @@ -122,7 +128,7 @@ void fetch_with_rsync(const char *stem) { sysassert(!"exec rsync failed"); } - waitpid_check_exitstatus(fetcher, "dictionary-manager --update"); + waitpid_check_exitstatus(fetcher, "rsync"); } static void set_server(const char *envname, const char *defprotocol, @@ -151,7 +157,10 @@ static void set_server(const char *envname, const char *defprotocol, /* rsync :: protocol specification - anyway, adding scheme:// won't help */ goto ok; - value= masprintf("%s%s", defprotocol, value); + int vallen= strlen(value); + + value= masprintf("%s%s%s", defprotocol, value, + vallen && value[vallen-1]=='/' ? "" : "/"); ok: sysassert(! setenv(envname,value,1) ); @@ -175,6 +184,7 @@ int main(int argc, char **argv) { 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; @@ -182,15 +192,19 @@ int main(int argc, char **argv) { else if (IS("--dict-read-only")) o_flags &= (~ffs_dict | ff_dict_fetch); else if (IS("--dict-anon")) o_flags &= ~ff_dict_pirate; else if (IS("--dict-submit")) o_flags |= ff_dict_fetch|ff_dict_submit; - else if (IS("--upload") || - IS("--arbitrage") || + else if (IS("--raw-tsv")) o_outmode_kind= omk_raw; + else if (IS("--upload")) o_outmode_kind= omk_upload; + else if (IS("--arbitrage") || IS("--tsv") || - IS("--best-prices")) o_outputmode= arg+2; - else if (IS("--raw-tsv")) o_outputmode= 0; + 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("--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; + else if (IS("--ocean")) o_ocean= ARGVAL; + else if (IS("--pirate")) o_pirate= ARGVAL; #define DF(f) \ else if (IS("-D" #f)) \ debug_flags |= dbg_##f; @@ -206,9 +220,16 @@ int main(int argc, char **argv) { } /* Consequential changes to options */ - - if (!strcmp("upload",o_outputmode)) - o_flags |= ffs_upload; + + if (o_mode & mf_analyse) { + if (!o_outmode_kind) + o_outmode_kind= (o_flags & ff_printisland) ? omk_none : omk_str; + + if (o_outmode_kind==omk_upload) { + o_flags |= ffs_upload; + o_outmode_str= "upload"; + } + } /* Defaults */ @@ -233,6 +254,18 @@ int main(int argc, char **argv) { screenshot_startup(); find_yppclient_window(); } + if (!ocean) ocean= o_ocean; + if (!pirate) pirate= o_pirate; + + if (o_flags & ff_needisland) { + if (!ocean) + badusage("need --ocean option when replaying images" + " (consider supplying --pirate too)"); + sysassert(! setenv("YPPSC_OCEAN",ocean,1) ); + } + if (pirate && (o_flags & ff_dict_pirate)) + sysassert(! setenv("YPPSC_PIRATE",pirate,1) ); + if (o_mode & mf_screenshot) { open_screenshot_file("w"); if (o_flags & ff_singlepage) take_one_screenshot(); @@ -244,12 +277,19 @@ int main(int argc, char **argv) { else read_screenshots(); } if (o_mode & mf_analyse) { - find_islandname(); - if (o_outputmode) - run_analysis(); - else - analyse(stdout); + if (o_flags & ff_needisland) { + find_islandname(); + if (o_flags & ff_printisland) + printf("%s, %s\n", archipelago, island); + } + switch (o_outmode_kind) { + case omk_upload: case omk_str: run_analysis(); break; + case omk_raw: analyse(stdout); break; + case omk_none: break; + default: abort(); + } } + progress_log("Finished."); return 0; }