X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.main.git;a=blobdiff_plain;f=pctb%2Fconvert.c;h=1f1385057d152a1bf1e28bd7d74ae3e818d4b164;hp=6bc9b2c8897d28ce7f88793a0d424ef131d3e76c;hb=059fab3ad374847da031d23d7e25ee25e888bce0;hpb=60cd4954d1d3c11c46251f68e2d56f24661a6d67 diff --git a/pctb/convert.c b/pctb/convert.c index 6bc9b2c..1f13850 100644 --- a/pctb/convert.c +++ b/pctb/convert.c @@ -36,28 +36,12 @@ const char *get_vardir(void) { return "."; } const char *get_libdir(void) { return "."; } -enum mode { - mf_findwindow= 00001, - mf_screenshot= 00010, - mf_readscreenshot= 00020, - mf_analyse= 00100, - mfm_special= 07000, - - mode_findwindow= 00001, - mode_screenshot= 00011, - mode_analyse= 00120, - mode_showcharset= 01000, - - mode_all= 00111, -}; - 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 const char *o_serv_pctb, *o_serv_dict_fetch, *o_serv_dict_submit; @@ -66,6 +50,9 @@ FILE *screenshot_file; const char *o_ocean, *o_pirate; int o_quiet; +static pid_t screenshot_compressor=-1; + +enum mode o_mode= mode_all; enum flags o_flags= ff_charset_allowedit | ff_dict_fetch|ff_dict_submit|ff_dict_pirate; @@ -79,11 +66,17 @@ static void vbadusage(const char *fmt, va_list al) { } DEFINE_VWRAPPERF(static, badusage, NORET); -static void open_screenshot_file(const char *mode) { - screenshot_file= fopen(o_screenshot_fn, mode); - if (!screenshot_file) - fatal("could not open screenshots file `%s': %s", - o_screenshot_fn, strerror(errno)); +static void open_screenshot_file(int for_write) { + if (!fnmatch("*.gz",o_screenshot_fn,0)) { + int mode= for_write ? O_WRONLY|O_CREAT|O_TRUNC : O_RDONLY; + sysassert(! gzopen(o_screenshot_fn, mode, &screenshot_file, + &screenshot_compressor, "-1") ); + } else { + screenshot_file= fopen(o_screenshot_fn, for_write ? "w" : "r"); + if (!screenshot_file) + fatal("could not open screenshots file `%s': %s", + o_screenshot_fn, strerror(errno)); + } } static void run_analysis(void) { @@ -119,6 +112,8 @@ 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"); @@ -216,7 +211,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; @@ -272,7 +268,7 @@ 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.gz", get_vardir()); /* Actually do the work */ @@ -301,18 +297,21 @@ int main(int argc, char **argv) { } if (o_mode & mf_screenshot) { - open_screenshot_file("w"); + open_screenshot_file(1); if (o_flags & ff_singlepage) take_one_screenshot(); else take_screenshots(); progress_log("OK for you to move the mouse now, and you can" " use the YPP client again."); + progress("Finishing handling screenshots..."); + gzclose(&screenshot_file,&screenshot_compressor,"screenshots output"); } 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"); + open_screenshot_file(0); if (o_flags & ff_singlepage) read_one_screenshot(); else read_screenshots(); + gzclose(&screenshot_file,&screenshot_compressor,"screenshots input"); } if (o_mode & mf_analyse) { if (o_flags & ff_needisland) { @@ -347,7 +346,7 @@ static void vprogress_core(int spinner, const char *fmt, va_list al) { int r; if (o_quiet) return; - if (!isatty(2)) return; + if (!debug_flags && !isatty(2)) return; if (last_progress_len) putc('\r',stderr);