diff options
author | Ethan Sommer <e5ten.arch@gmail.com> | 2020-06-03 15:36:00 -0400 |
---|---|---|
committer | Ethan Sommer <e5ten.arch@gmail.com> | 2020-06-03 15:36:00 -0400 |
commit | f6ab1276ea29e4a25cd6d452ee597a64d454156a (patch) | |
tree | 9f4088185735633e4f63fcf13d5fcd545d707100 | |
parent | 536cab1cd0e3bbd1d1e89fc7c175ce82797108a9 (diff) |
tinycap: replace manual option parsing with optparse
-rw-r--r-- | utils/tinycap.c | 72 |
1 files changed, 35 insertions, 37 deletions
diff --git a/utils/tinycap.c b/utils/tinycap.c index 9f8dacd..7d4b8a4 100644 --- a/utils/tinycap.c +++ b/utils/tinycap.c @@ -34,6 +34,9 @@ #include <string.h> #include <limits.h> +#define OPTPARSE_IMPLEMENTATION +#include "optparse.h" + #define ID_RIFF 0x46464952 #define ID_WAVE 0x45564157 #define ID_FMT 0x20746d66 @@ -86,7 +89,8 @@ int main(int argc, char **argv) unsigned int period_count = 4; unsigned int capture_time = UINT_MAX; enum pcm_format format; - int no_header = 0; + int no_header = 0, c; + struct optparse opts; if (argc < 2) { fprintf(stderr, "Usage: %s {file.wav | --} [-D card] [-d device] [-c channels] " @@ -108,43 +112,37 @@ int main(int argc, char **argv) } /* parse command line arguments */ - argv += 2; - while (*argv) { - if (strcmp(*argv, "-d") == 0) { - argv++; - if (*argv) - device = atoi(*argv); - } else if (strcmp(*argv, "-c") == 0) { - argv++; - if (*argv) - channels = atoi(*argv); - } else if (strcmp(*argv, "-r") == 0) { - argv++; - if (*argv) - rate = atoi(*argv); - } else if (strcmp(*argv, "-b") == 0) { - argv++; - if (*argv) - bits = atoi(*argv); - } else if (strcmp(*argv, "-D") == 0) { - argv++; - if (*argv) - card = atoi(*argv); - } else if (strcmp(*argv, "-p") == 0) { - argv++; - if (*argv) - period_size = atoi(*argv); - } else if (strcmp(*argv, "-n") == 0) { - argv++; - if (*argv) - period_count = atoi(*argv); - } else if (strcmp(*argv, "-t") == 0) { - argv++; - if (*argv) - capture_time = atoi(*argv); + optparse_init(&opts, argv + 1); + while ((c = optparse(&opts, "D:d:c:r:b:p:n:t:")) != -1) { + switch (c) { + case 'd': + device = atoi(opts.optarg); + break; + case 'c': + channels = atoi(opts.optarg); + break; + case 'r': + rate = atoi(opts.optarg); + break; + case 'b': + bits = atoi(opts.optarg); + break; + case 'D': + card = atoi(opts.optarg); + break; + case 'p': + period_size = atoi(opts.optarg); + break; + case 'n': + period_count = atoi(opts.optarg); + break; + case 't': + capture_time = atoi(opts.optarg); + break; + case '?': + fprintf(stderr, "%s\n", opts.errmsg); + return EXIT_FAILURE; } - if (*argv) - argv++; } header.riff_id = ID_RIFF; |