chiark / gitweb /
progress displaying; some client window geometry checking
[ypp-sc-tools.db-live.git] / pctb / convert.c
index b44c294bd212a7072afa7ffabee6905350d10223..d0c113cbcdcadc2c033b567c3a7f93f69ec8cefd 100644 (file)
@@ -10,7 +10,6 @@ void debug_flush(void) {
 
 const char *get_vardir(void) { return "."; }
 
-
 static enum {
   mf_findwindow=    01,
   mf_screenshot=    02,
@@ -24,7 +23,7 @@ static enum {
 } o_mode= mode_all;
 
 static char *o_screenshots_fn;
-static int o_single_page;
+static int o_single_page, o_quiet;
 
 FILE *screenshots_file;
 
@@ -41,6 +40,8 @@ int main(int argc, char **argv) {
       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)                                  \
@@ -83,3 +84,41 @@ int main(int argc, char **argv) {
   }
   return 0;
 }
+
+
+
+
+DEFINE_VWRAPPERF(, progress)
+DEFINE_VWRAPPERF(, progress_log)
+
+static int last_progress_len;
+     
+void vprogress(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 (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_log(const char *fmt, va_list al) {
+  if (o_quiet) return;
+  
+  progress("");
+  vfprintf(stderr,fmt,al);
+  putc('\n',stderr);
+  fflush(stderr);
+}