1*fb1b10abSAndroid Build Coastguard Worker /* 2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3*fb1b10abSAndroid Build Coastguard Worker * 4*fb1b10abSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*fb1b10abSAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*fb1b10abSAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*fb1b10abSAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*fb1b10abSAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*fb1b10abSAndroid Build Coastguard Worker */ 10*fb1b10abSAndroid Build Coastguard Worker 11*fb1b10abSAndroid Build Coastguard Worker #ifndef VPX_ARGS_H_ 12*fb1b10abSAndroid Build Coastguard Worker #define VPX_ARGS_H_ 13*fb1b10abSAndroid Build Coastguard Worker #include <stdio.h> 14*fb1b10abSAndroid Build Coastguard Worker 15*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 16*fb1b10abSAndroid Build Coastguard Worker extern "C" { 17*fb1b10abSAndroid Build Coastguard Worker #endif 18*fb1b10abSAndroid Build Coastguard Worker 19*fb1b10abSAndroid Build Coastguard Worker struct arg { 20*fb1b10abSAndroid Build Coastguard Worker char **argv; 21*fb1b10abSAndroid Build Coastguard Worker const char *name; 22*fb1b10abSAndroid Build Coastguard Worker const char *val; 23*fb1b10abSAndroid Build Coastguard Worker unsigned int argv_step; 24*fb1b10abSAndroid Build Coastguard Worker const struct arg_def *def; 25*fb1b10abSAndroid Build Coastguard Worker }; 26*fb1b10abSAndroid Build Coastguard Worker 27*fb1b10abSAndroid Build Coastguard Worker struct arg_enum_list { 28*fb1b10abSAndroid Build Coastguard Worker const char *name; 29*fb1b10abSAndroid Build Coastguard Worker int val; 30*fb1b10abSAndroid Build Coastguard Worker }; 31*fb1b10abSAndroid Build Coastguard Worker #define ARG_ENUM_LIST_END \ 32*fb1b10abSAndroid Build Coastguard Worker { 0 } 33*fb1b10abSAndroid Build Coastguard Worker 34*fb1b10abSAndroid Build Coastguard Worker typedef struct arg_def { 35*fb1b10abSAndroid Build Coastguard Worker const char *short_name; 36*fb1b10abSAndroid Build Coastguard Worker const char *long_name; 37*fb1b10abSAndroid Build Coastguard Worker int has_val; 38*fb1b10abSAndroid Build Coastguard Worker const char *desc; 39*fb1b10abSAndroid Build Coastguard Worker const struct arg_enum_list *enums; 40*fb1b10abSAndroid Build Coastguard Worker } arg_def_t; 41*fb1b10abSAndroid Build Coastguard Worker #define ARG_DEF(s, l, v, d) \ 42*fb1b10abSAndroid Build Coastguard Worker { s, l, v, d, NULL } 43*fb1b10abSAndroid Build Coastguard Worker #define ARG_DEF_ENUM(s, l, v, d, e) \ 44*fb1b10abSAndroid Build Coastguard Worker { s, l, v, d, e } 45*fb1b10abSAndroid Build Coastguard Worker #define ARG_DEF_LIST_END \ 46*fb1b10abSAndroid Build Coastguard Worker { 0 } 47*fb1b10abSAndroid Build Coastguard Worker 48*fb1b10abSAndroid Build Coastguard Worker struct arg arg_init(char **argv); 49*fb1b10abSAndroid Build Coastguard Worker int arg_match(struct arg *arg_, const struct arg_def *def, char **argv); 50*fb1b10abSAndroid Build Coastguard Worker const char *arg_next(struct arg *arg); 51*fb1b10abSAndroid Build Coastguard Worker void arg_show_usage(FILE *fp, const struct arg_def *const *defs); 52*fb1b10abSAndroid Build Coastguard Worker char **argv_dup(int argc, const char **argv); 53*fb1b10abSAndroid Build Coastguard Worker 54*fb1b10abSAndroid Build Coastguard Worker unsigned int arg_parse_uint(const struct arg *arg); 55*fb1b10abSAndroid Build Coastguard Worker int arg_parse_int(const struct arg *arg); 56*fb1b10abSAndroid Build Coastguard Worker struct vpx_rational arg_parse_rational(const struct arg *arg); 57*fb1b10abSAndroid Build Coastguard Worker int arg_parse_enum(const struct arg *arg); 58*fb1b10abSAndroid Build Coastguard Worker int arg_parse_enum_or_int(const struct arg *arg); 59*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 60*fb1b10abSAndroid Build Coastguard Worker } // extern "C" 61*fb1b10abSAndroid Build Coastguard Worker #endif 62*fb1b10abSAndroid Build Coastguard Worker 63*fb1b10abSAndroid Build Coastguard Worker #endif // VPX_ARGS_H_ 64