const char *get_vardir(void) { return "."; }
+static enum {
+ mf_findwindow= 01,
+ mf_screenshot= 02,
+ mf_analyse= 04,
+
+ mode_findwindow= 01,
+ mode_screenshot= 03,
+ mode_analyse= 04,
+
+ mode_all= 07,
+} o_mode= mode_all;
-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;
+static int o_single_page, o_quiet;
FILE *screenshots_file;
int r;
while ((arg=*++argv)) {
- if (!strcmp(arg,"--screenshot-only"))
+ if (!strcmp(arg,"--find-window-only"))
+ o_mode= mode_findwindow;
+ else if (!strcmp(arg,"--screenshot-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,"--quiet"))
+ o_quiet= 1;
else if (!strcmp(arg,"--screenshots-file"))
eassert( o_screenshots_fn= *++argv );
#define DF(f) \
eassert(r>=0); eassert(o_screenshots_fn);
}
- if (o_mode & mode_screenshot) {
+ if (o_mode & mf_findwindow) {
screenshot_startup();
find_yppclient_window();
+ }
+ if (o_mode & mf_screenshot) {
screenshots_file= fopen(o_screenshots_fn, "w"); eassert(screenshots_file);
- if (o_single_page)
- take_one_screenshot();
- else
- take_screenshots();
+ 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_single_page) read_one_screenshot();
+ else read_screenshots();
}
- if (o_mode & mode_analyse) {
+ if (o_mode & mf_analyse) {
analyse();
//output_tsv();
}
return 0;
}
+
+
+
+
+DEFINE_VWRAPPERF(, progress)
+DEFINE_VWRAPPERF(, progress_log)
+DEFINE_VWRAPPERF(, progress_spinner)
+DEFINE_VWRAPPERF(, warning)
+
+static int last_progress_len;
+
+static void vprogress_core(int spinner, const char *fmt, va_list al) {
+ int r;
+
+ if (o_quiet) return;
+ if (!isatty(2)) return;
+
+ if (last_progress_len)
+ putc('\r',stderr);
+
+ r= vfprintf(stderr,fmt,al);
+ eassert(r>=0);
+
+ if (spinner) {
+ putc(spinner,stderr);
+ r++;
+ }
+
+ if (r < last_progress_len) {
+ fprintf(stderr,"%*s", last_progress_len - r, "");
+ if (!r) putc('\r', stderr);
+ else while (last_progress_len-- > r) putc('\b',stderr);
+ }
+ last_progress_len= r;
+ fflush(stderr);
+}
+
+void vprogress(const char *fmt, va_list al) { vprogress_core(0,fmt,al); }
+void vprogress_spinner(const char *fmt, va_list al) {
+ static const char spinchars[]="/-\\";
+ static int spinner;
+
+ vprogress_core(spinchars[spinner],fmt,al);
+ spinner++;
+ spinner %= (sizeof(spinchars)-1);
+}
+
+void vprogress_log(const char *fmt, va_list al) {
+ if (o_quiet) return;
+
+ progress("");
+ vfprintf(stderr,fmt,al);
+ putc('\n',stderr);
+ fflush(stderr);
+}
+
+void vwarning(const char *fmt, va_list al) {
+ progress("");
+ fputs("warning: ",stderr);
+ vfprintf(stderr,fmt,al);
+ fflush(stderr);
+}