diff options
author | Fabrice Bellard <fabrice@bellard.org> | 2003-06-07 18:34:02 +0000 |
---|---|---|
committer | Fabrice Bellard <fabrice@bellard.org> | 2003-06-07 18:34:02 +0000 |
commit | 01310af292fe18ba700f7ba9d97ab8d43427a619 (patch) | |
tree | da38b9ced238132115cdb0746ba400f3662c93e1 /cmdutils.c | |
parent | a86b921c7df406356513b90cf76bd6161059714d (diff) | |
download | ffmpeg-01310af292fe18ba700f7ba9d97ab8d43427a619.tar.gz |
added ffplay utility
Originally committed as revision 1936 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'cmdutils.c')
-rw-r--r-- | cmdutils.c | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/cmdutils.c b/cmdutils.c new file mode 100644 index 0000000000..2131605b16 --- /dev/null +++ b/cmdutils.c @@ -0,0 +1,120 @@ +/* + * Various utilities for command line tools + * Copyright (c) 2000-2003 Fabrice Bellard + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#include "common.h" +#include "avformat.h" + +#include "cmdutils.h" + +void show_help_options(const OptionDef *options) +{ + const OptionDef *po; + int i, expert, first; + + printf("Main options are:\n"); + for(i=0;i<2;i++) { + first = 1; + for(po = options; po->name != NULL; po++) { + char buf[64]; + expert = (po->flags & OPT_EXPERT) != 0; + if (expert == i) { + if (expert && first) { + printf("\nAdvanced options are:\n"); + first = 0; + } + strcpy(buf, po->name); + if (po->flags & HAS_ARG) { + strcat(buf, " "); + strcat(buf, po->argname); + } + printf("-%-17s %s\n", buf, po->help); + } + } + } +} + +void parse_options(int argc, char **argv, const OptionDef *options) +{ + const char *opt, *arg; + int optindex; + const OptionDef *po; + + /* parse options */ + optindex = 1; + while (optindex < argc) { + opt = argv[optindex++]; + + if (opt[0] == '-' && opt[1] != '\0') { + po = options; + while (po->name != NULL) { + if (!strcmp(opt + 1, po->name)) + break; + po++; + } + if (!po->name) { + fprintf(stderr, "%s: unrecognized option '%s'\n", argv[0], opt); + exit(1); + } + arg = NULL; + if (po->flags & HAS_ARG) { + arg = argv[optindex++]; + if (!arg) { + fprintf(stderr, "%s: missing argument for option '%s'\n", argv[0], opt); + exit(1); + } + } + if (po->flags & OPT_STRING) { + char *str; + str = strdup(arg); + *po->u.str_arg = str; + } else if (po->flags & OPT_BOOL) { + *po->u.int_arg = 1; + } else { + po->u.func_arg(arg); + } + } else { + parse_arg_file(opt); + } + } +} + +void print_error(const char *filename, int err) +{ + switch(err) { + case AVERROR_NUMEXPECTED: + fprintf(stderr, "%s: Incorrect image filename syntax.\n" + "Use '%%d' to specify the image number:\n" + " for img1.jpg, img2.jpg, ..., use 'img%%d.jpg';\n" + " for img001.jpg, img002.jpg, ..., use 'img%%03d.jpg'.\n", + filename); + break; + case AVERROR_INVALIDDATA: + fprintf(stderr, "%s: Error while parsing header\n", filename); + break; + case AVERROR_NOFMT: + fprintf(stderr, "%s: Unknown format\n", filename); + break; + default: + fprintf(stderr, "%s: Error while opening file\n", filename); + break; + } +} |