5 void debug_flush(void) {
6 eassert(!fflush(debug));
7 eassert(!ferror(debug));
11 const char *get_vardir(void) { return "."; }
25 static char *o_screenshots_fn;
26 static int o_single_page, o_quiet;
28 FILE *screenshots_file;
30 int main(int argc, char **argv) {
34 while ((arg=*++argv)) {
35 if (!strcmp(arg,"--find-window-only"))
36 o_mode= mode_findwindow;
37 else if (!strcmp(arg,"--screenshot-only"))
38 o_mode= mode_screenshot;
39 else if (!strcmp(arg,"--analyse-only"))
41 else if (!strcmp(arg,"--single-page"))
43 else if (!strcmp(arg,"--quiet"))
45 else if (!strcmp(arg,"--screenshots-file"))
46 eassert( o_screenshots_fn= *++argv );
48 else if (!strcmp(arg,"-D" #f)) \
49 debug_flags |= dbg_##f;
52 else if (!strcmp(arg,"--window-id")) {
54 eassert((arg=*++argv));
55 unsigned long windowid= strtoul(arg,&ep,0);
57 set_yppclient_window(windowid);
59 eassert(!"bad option");
62 if (!o_screenshots_fn) {
63 r= asprintf(&o_screenshots_fn,"%s/#pages#.ppm",get_vardir());
64 eassert(r>=0); eassert(o_screenshots_fn);
67 if (o_mode & mf_findwindow) {
69 find_yppclient_window();
71 if (o_mode & mf_screenshot) {
72 screenshots_file= fopen(o_screenshots_fn, "w"); eassert(screenshots_file);
73 if (o_single_page) take_one_screenshot();
74 else take_screenshots();
76 screenshots_file= fopen(o_screenshots_fn, "r"); eassert(screenshots_file);
77 if (o_single_page) read_one_screenshot();
78 else read_screenshots();
80 if (o_mode & mf_analyse) {
90 DEFINE_VWRAPPERF(, progress)
91 DEFINE_VWRAPPERF(, progress_log)
92 DEFINE_VWRAPPERF(, progress_spinner)
93 DEFINE_VWRAPPERF(, warning)
95 static int last_progress_len;
97 static void vprogress_core(int spinner, const char *fmt, va_list al) {
101 if (!isatty(2)) return;
103 if (last_progress_len)
106 r= vfprintf(stderr,fmt,al);
110 putc(spinner,stderr);
114 if (r < last_progress_len) {
115 fprintf(stderr,"%*s", last_progress_len - r, "");
116 if (!r) putc('\r', stderr);
117 else while (last_progress_len-- > r) putc('\b',stderr);
119 last_progress_len= r;
123 void vprogress(const char *fmt, va_list al) { vprogress_core(0,fmt,al); }
124 void vprogress_spinner(const char *fmt, va_list al) {
125 static const char spinchars[]="/-\\";
128 vprogress_core(spinchars[spinner],fmt,al);
130 spinner %= (sizeof(spinchars)-1);
133 void vprogress_log(const char *fmt, va_list al) {
137 vfprintf(stderr,fmt,al);
142 void vwarning(const char *fmt, va_list al) {
144 fputs("warning: ",stderr);
145 vfprintf(stderr,fmt,al);