login

<     >

2015-07-21 18:38:45 (UTC-03:00)

Marcel Rodrigues <marcelgmr@gmail.com>

Add progress bar.

diff --git a/main.c b/main.c
index 3a26081..9633385 100644
--- a/main.c
+++ b/main.c
@@ -132,7 +132,7 @@ render(Term *term, Font *font, GIF *gif, uint16_t delay)
 int
 convert_script(Term *term, const char *timing, const char *dialogue,
                const char *mbf, const char *anim, float div, float max,
-               int cur)
+               int cur, int pbcols)
 {
     FILE *ft;
     int fd;
@@ -141,8 +141,10 @@ convert_script(Term *term, const char *timing, const char *dialogue,
     uint8_t ch;
     Font *font;
     int w, h;
-    int i;
+    int i, c;
     float d;
+    float lastdone, done;
+    char pb[pbcols+1];
     GIF *gif;
 
     ft = fopen(timing, "r");
@@ -167,15 +169,31 @@ convert_script(Term *term, const char *timing, const char *dialogue,
         fprintf(stderr, "error: could not create GIF: %s\n", anim);
         goto no_gif;
     }
+    /* get number of chunks */
+    for (c = 0; fscanf(ft, "%f %d\n", &t, &n) == 2; c++);
+    rewind(ft);
     /* discard first line of dialogue */
     do read(fd, &ch, 1); while (ch != '\n');
+    pb[0] = '[';
+    pb[pbcols-1] = ']';
+    pb[pbcols] = '\0';
+    for (i = 1; i < pbcols-1; i++)
+        pb[i] = '-';
     i = 0;
     d = 0;
+    lastdone = 0;
+    printf("%s\r[", pb);
     while (fscanf(ft, "%f %d\n", &t, &n) == 2) {
         d += ((t > max ? max : t) * 100.0 / div);
-        if (i && d > 5) {
-            printf("\r#%d", i);
+        done = i * (pbcols-1) / c;
+        if (done > lastdone) {
+            while (done > lastdone) {
+                putchar('#');
+                lastdone++;
+            }
             fflush(stdout);
+        }
+        if (i && d > 5) {
             render(term, font, gif, (uint16_t) (d + 0.5));
             d = 0;
         }
@@ -187,7 +205,7 @@ convert_script(Term *term, const char *timing, const char *dialogue,
             term->mode &= ~M_CURSORVIS;
         i++;
     }
-    printf("\r#%d\n", i);
+    //printf("\r%*s\n", pbcols, "");
     render(term, font, gif, 0);
     close_gif(gif);
     return 0;
@@ -284,7 +302,7 @@ main(int argc, char *argv[])
     t = argv[optind++];
     s = argv[optind++];
     term = new_term(h, w);
-    ret = convert_script(term, t, s, f, o, d, m, c);
+    ret = convert_script(term, t, s, f, o, d, m, c, size.ws_col-1);
     free(term);
     return ret;
 }