1233d2500723e5594f3e7c70896ffeeef32b9c950ywan/*
2233d2500723e5594f3e7c70896ffeeef32b9c950ywan *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3233d2500723e5594f3e7c70896ffeeef32b9c950ywan *
4233d2500723e5594f3e7c70896ffeeef32b9c950ywan *  Use of this source code is governed by a BSD-style license
5233d2500723e5594f3e7c70896ffeeef32b9c950ywan *  that can be found in the LICENSE file in the root of the source
6233d2500723e5594f3e7c70896ffeeef32b9c950ywan *  tree. An additional intellectual property rights grant can be found
7233d2500723e5594f3e7c70896ffeeef32b9c950ywan *  in the file PATENTS.  All contributing project authors may
8233d2500723e5594f3e7c70896ffeeef32b9c950ywan *  be found in the AUTHORS file in the root of the source tree.
9233d2500723e5594f3e7c70896ffeeef32b9c950ywan */
10233d2500723e5594f3e7c70896ffeeef32b9c950ywan
11233d2500723e5594f3e7c70896ffeeef32b9c950ywan
12233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifndef ARGS_H_
13233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define ARGS_H_
14233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include <stdio.h>
15233d2500723e5594f3e7c70896ffeeef32b9c950ywan
16233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifdef __cplusplus
17233d2500723e5594f3e7c70896ffeeef32b9c950ywanextern "C" {
18233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif
19233d2500723e5594f3e7c70896ffeeef32b9c950ywan
20233d2500723e5594f3e7c70896ffeeef32b9c950ywanstruct arg {
21233d2500723e5594f3e7c70896ffeeef32b9c950ywan  char                 **argv;
22233d2500723e5594f3e7c70896ffeeef32b9c950ywan  const char            *name;
23233d2500723e5594f3e7c70896ffeeef32b9c950ywan  const char            *val;
24233d2500723e5594f3e7c70896ffeeef32b9c950ywan  unsigned int           argv_step;
25233d2500723e5594f3e7c70896ffeeef32b9c950ywan  const struct arg_def  *def;
26233d2500723e5594f3e7c70896ffeeef32b9c950ywan};
27233d2500723e5594f3e7c70896ffeeef32b9c950ywan
28233d2500723e5594f3e7c70896ffeeef32b9c950ywanstruct arg_enum_list {
29233d2500723e5594f3e7c70896ffeeef32b9c950ywan  const char *name;
30233d2500723e5594f3e7c70896ffeeef32b9c950ywan  int         val;
31233d2500723e5594f3e7c70896ffeeef32b9c950ywan};
32233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define ARG_ENUM_LIST_END {0}
33233d2500723e5594f3e7c70896ffeeef32b9c950ywan
34233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef struct arg_def {
35233d2500723e5594f3e7c70896ffeeef32b9c950ywan  const char *short_name;
36233d2500723e5594f3e7c70896ffeeef32b9c950ywan  const char *long_name;
37233d2500723e5594f3e7c70896ffeeef32b9c950ywan  int         has_val;
38233d2500723e5594f3e7c70896ffeeef32b9c950ywan  const char *desc;
39233d2500723e5594f3e7c70896ffeeef32b9c950ywan  const struct arg_enum_list *enums;
40233d2500723e5594f3e7c70896ffeeef32b9c950ywan} arg_def_t;
41233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define ARG_DEF(s,l,v,d) {s,l,v,d, NULL}
42233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define ARG_DEF_ENUM(s,l,v,d,e) {s,l,v,d,e}
43233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define ARG_DEF_LIST_END {0}
44233d2500723e5594f3e7c70896ffeeef32b9c950ywan
45233d2500723e5594f3e7c70896ffeeef32b9c950ywanstruct arg arg_init(char **argv);
46233d2500723e5594f3e7c70896ffeeef32b9c950ywanint arg_match(struct arg *arg_, const struct arg_def *def, char **argv);
47233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst char *arg_next(struct arg *arg);
48233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid arg_show_usage(FILE *fp, const struct arg_def *const *defs);
49233d2500723e5594f3e7c70896ffeeef32b9c950ywanchar **argv_dup(int argc, const char **argv);
50233d2500723e5594f3e7c70896ffeeef32b9c950ywan
51233d2500723e5594f3e7c70896ffeeef32b9c950ywanunsigned int arg_parse_uint(const struct arg *arg);
52233d2500723e5594f3e7c70896ffeeef32b9c950ywanint arg_parse_int(const struct arg *arg);
53233d2500723e5594f3e7c70896ffeeef32b9c950ywanstruct vpx_rational arg_parse_rational(const struct arg *arg);
54233d2500723e5594f3e7c70896ffeeef32b9c950ywanint arg_parse_enum_or_int(const struct arg *arg);
55233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifdef __cplusplus
56233d2500723e5594f3e7c70896ffeeef32b9c950ywan}  // extern "C"
57233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif
58233d2500723e5594f3e7c70896ffeeef32b9c950ywan
59233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif  // ARGS_H_
60