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; }