login

<     >

2015-07-20 23:54:14 (UTC-03:00)

Marcel Rodrigues <marcelgmr@gmail.com>

Add command-line options.

diff --git a/main.c b/main.c
index 6ca77d9..fed8703 100644
--- a/main.c
+++ b/main.c
@@ -1,6 +1,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdint.h>
+#include <limits.h>
+#include <float.h>
+#include <string.h>
 #include <unistd.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -127,7 +130,7 @@ render(Term *term, Font *font, GIF *gif, uint16_t delay)
 
 void
 convert_script(Term *term, const char *timing, const char *dialogue,
-               const char *mbf, const char *anim)
+               const char *mbf, const char *anim, float div, float max)
 {
     FILE *ft;
     int fd;
@@ -158,7 +161,9 @@ convert_script(Term *term, const char *timing, const char *dialogue,
     do read(fd, &ch, 1); while (ch != '\n');
     i = 0;
     while (fscanf(ft, "%f %d\n", &t, &n) == 2) {
-        d = (uint16_t) (t * 100.0 / 3.0);
+        d = (uint16_t) (t * 100.0 / div);
+        if (d > (uint16_t) max)
+            d = (uint16_t) max;
         if (i)
             render(term, font, gif, d);
         while (n--) {
@@ -179,17 +184,73 @@ no_ft:
     return;
 }
 
+void
+help(char *name)
+{
+    fprintf(stderr,
+        "Usage: %s [OPTIONS] timings dialogue\n\n"
+        "OPTIONS:\n"
+        "  -w columns   Terminal width\n"
+        "  -h lines     Terminal height\n"
+        "  -f font      File name of MBF font to use\n"
+        "  -o output    File name of GIF output\n"
+        "  -d divisor   Speedup, as in scriptreplay(1)\n"
+        "  -m maxdelay  Maximum delay, as in scriptreplay(1)\n\n"
+        "timings:       File generated by script(1)'s -t option\n"
+        "dialogue:      File generated by script(1)'s regular output\n"
+    , name);
+}
+
 int
 main(int argc, char *argv[])
 {
+    int opt;
+    int w, h;
+    char f[PATH_MAX];
+    char o[PATH_MAX];
+    float d, m;
+    char t[PATH_MAX];
+    char s[PATH_MAX];
     Term *term;
 
-    if (argc != 3)
+    w = 80; h = 30;
+    strncpy(f, "6x11.mbf", PATH_MAX);
+    strncpy(o, "con.gif", PATH_MAX);
+    d = 1.0; m = FLT_MAX;
+    while ((opt = getopt(argc, argv, "w:h:f:o:d:m:")) != -1) {
+        switch (opt) {
+        case 'w':
+            w = atoi(optarg);
+            break;
+        case 'h':
+            h = atoi(optarg);
+            break;
+        case 'f':
+            strncpy(f, optarg, PATH_MAX);
+            break;
+        case 'o':
+            strncpy(o, optarg, PATH_MAX);
+            break;
+        case 'd':
+            d = atof(optarg);
+            break;
+        case 'm':
+            m = atof(optarg);
+            break;
+        default:
+            help(argv[0]);
+            return 1;
+        }
+    }
+    if (optind >= argc - 1) {
+        fprintf(stderr, "%s: no input given\n", argv[0]);
+        help(argv[0]);
         return 1;
-    term = new_term(30, 80);
-    //parse_script(term, argv[1], argv[2]);
-    //dump_txt(term, "matrix.txt");
-    convert_script(term, argv[1], argv[2], "6x11.mbf", "con.gif");
+    }
+    strncpy(t, argv[optind++], PATH_MAX);
+    strncpy(s, argv[optind++], PATH_MAX);
+    term = new_term(h, w);
+    convert_script(term, t, s, f, o, d, m);
     free(term);
     return 0;
 }