chiark / gitweb /
better progress indication
[ypp-sc-tools.db-test.git] / pctb / convert.c
index d0c113cbcdcadc2c033b567c3a7f93f69ec8cefd..cd9c6521976385498e72311d84631432a5d10bbf 100644 (file)
@@ -70,13 +70,12 @@ int main(int argc, char **argv) {
   }
   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 & mf_analyse) {
     analyse();
@@ -90,10 +89,11 @@ int main(int argc, char **argv) {
 
 DEFINE_VWRAPPERF(, progress)
 DEFINE_VWRAPPERF(, progress_log)
+DEFINE_VWRAPPERF(, progress_spinner)
 
 static int last_progress_len;
      
-void vprogress(const char *fmt, va_list al) {
+static void vprogress_core(int spinner, const char *fmt, va_list al) {
   int r;
   
   if (o_quiet) return;
@@ -105,6 +105,11 @@ void vprogress(const char *fmt, va_list al) {
   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);
@@ -114,6 +119,16 @@ void vprogress(const char *fmt, va_list al) {
   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;