00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058 #ifndef _LIBUTIL_CMD_LN_H_
00059 #define _LIBUTIL_CMD_LN_H_
00060
00061 #include <stdio.h>
00062 #include <stdarg.h>
00063
00064
00065 #include <sphinxbase_export.h>
00066 #include <prim_type.h>
00067
00076 #ifdef __cplusplus
00077 extern "C" {
00078 #endif
00079 #if 0
00080
00081 }
00082 #endif
00083
00088 typedef struct arg_s {
00089 char const *name;
00090 int type;
00091 char const *deflt;
00092 char const *doc;
00093 } arg_t;
00094
00098
00102 #define ARG_REQUIRED (1<<0)
00103
00106 #define ARG_INTEGER (1<<1)
00107
00110 #define ARG_FLOATING (1<<2)
00111
00114 #define ARG_STRING (1<<3)
00115
00118 #define ARG_BOOLEAN (1<<4)
00119
00123 #define REQARG_INTEGER (ARG_INTEGER | ARG_REQUIRED)
00124
00127 #define REQARG_FLOATING (ARG_FLOATING | ARG_REQUIRED)
00128
00131 #define REQARG_STRING (ARG_STRING | ARG_REQUIRED)
00132
00135 #define REQARG_BOOLEAN (ARG_BOOLEAN | ARG_REQUIRED)
00136
00140 #define ARG_INT32 ARG_INTEGER
00141
00144 #define ARG_FLOAT32 ARG_FLOATING
00145
00148 #define ARG_FLOAT64 ARG_FLOATING
00149
00152 #define REQARG_INT32 (ARG_INT32 | ARG_REQUIRED)
00153
00156 #define REQARG_FLOAT32 (ARG_FLOAT32 | ARG_REQUIRED)
00157
00160 #define REQARG_FLOAT64 (ARG_FLOAT64 | ARG_REQUIRED)
00161
00162
00163
00168 #define ARG_STRINGIFY(s) ARG_STRINGIFY1(s)
00169 #define ARG_STRINGIFY1(s) #s
00170
00175 typedef struct cmd_ln_s cmd_ln_t;
00176
00195 SPHINXBASE_EXPORT
00196 cmd_ln_t *cmd_ln_init(cmd_ln_t *inout_cmdln, arg_t const *defn, int32 strict, ...);
00197
00203 SPHINXBASE_EXPORT
00204 cmd_ln_t *cmd_ln_retain(cmd_ln_t *cmdln);
00205
00211 SPHINXBASE_EXPORT
00212 int cmd_ln_free_r(cmd_ln_t *cmdln);
00213
00233 SPHINXBASE_EXPORT
00234 cmd_ln_t *cmd_ln_parse_r(cmd_ln_t *inout_cmdln,
00236 arg_t const *defn,
00237 int32 argc,
00238 char *argv[],
00239 int32 strict
00241 );
00242
00249 SPHINXBASE_EXPORT
00250 cmd_ln_t *cmd_ln_parse_file_r(cmd_ln_t *inout_cmdln,
00252 arg_t const *defn,
00253 char const *filename,
00255 int32 strict
00257 );
00258
00262 SPHINXBASE_EXPORT
00263 anytype_t *cmd_ln_access_r(cmd_ln_t *cmdln, char const *name);
00264
00279 SPHINXBASE_EXPORT
00280 char const *cmd_ln_str_r(cmd_ln_t *cmdln, char const *name);
00281
00293 SPHINXBASE_EXPORT
00294 long cmd_ln_int_r(cmd_ln_t *cmdln, char const *name);
00295
00307 SPHINXBASE_EXPORT
00308 double cmd_ln_float_r(cmd_ln_t *cmdln, char const *name);
00309
00313 #define cmd_ln_boolean_r(c,n) (cmd_ln_int_r(c,n) != 0)
00314
00323 SPHINXBASE_EXPORT
00324 void cmd_ln_set_str_r(cmd_ln_t *cmdln, char const *name, char const *str);
00325
00333 SPHINXBASE_EXPORT
00334 void cmd_ln_set_int_r(cmd_ln_t *cmdln, char const *name, long iv);
00335
00343 SPHINXBASE_EXPORT
00344 void cmd_ln_set_float_r(cmd_ln_t *cmdln, char const *name, double fv);
00345
00349 #define cmd_ln_set_boolean_r(c,n,b) (cmd_ln_set_int_r(c,n,(b)!=0))
00350
00351
00352
00353
00354 #define cmd_ln_int32_r(c,n) cmd_ln_int_r(c,n)
00355 #define cmd_ln_float32_r(c,n) (float32)cmd_ln_float_r(c,n)
00356 #define cmd_ln_float64_r(c,n) (float64)cmd_ln_float_r(c,n)
00357 #define cmd_ln_set_int32_r(c,n,i) cmd_ln_set_int_r(c,n,i)
00358 #define cmd_ln_set_float32_r(c,n,f) cmd_ln_set_float_r(c,n,(double)f)
00359 #define cmd_ln_set_float64_r(c,n,f) cmd_ln_set_float_r(c,n,(double)f)
00360
00367 SPHINXBASE_EXPORT
00368 int cmd_ln_exists_r(cmd_ln_t *cmdln, char const *name);
00369
00374 SPHINXBASE_EXPORT
00375 void cmd_ln_print_help_r (cmd_ln_t *cmdln,
00376 FILE *fp,
00377 const arg_t *defn
00378 );
00379
00387 SPHINXBASE_EXPORT
00388 int32 cmd_ln_parse(const arg_t *defn,
00389 int32 argc,
00390 char *argv[],
00391 int32 strict
00393 );
00394
00404 SPHINXBASE_EXPORT
00405 int32 cmd_ln_parse_file(const arg_t *defn,
00406 char const *filename,
00407 int32 strict
00409 );
00410
00416 SPHINXBASE_EXPORT
00417 void cmd_ln_appl_enter(int argc,
00418 char *argv[],
00419 char const* default_argfn,
00420 const arg_t *defn
00421 );
00422
00423
00430 SPHINXBASE_EXPORT
00431 void cmd_ln_appl_exit(void);
00432
00439 SPHINXBASE_EXPORT
00440 cmd_ln_t *cmd_ln_get(void);
00441
00452 #define cmd_ln_exists(name) cmd_ln_exists_r(cmd_ln_get(), name)
00453
00460 #define cmd_ln_access(name) cmd_ln_access_r(cmd_ln_get(), name)
00461
00468 #define cmd_ln_str(name) cmd_ln_str_r(cmd_ln_get(), name)
00469
00475 #define cmd_ln_int32(name) (int32)cmd_ln_int_r(cmd_ln_get(), name)
00476
00482 #define cmd_ln_float32(name) (float32)cmd_ln_float_r(cmd_ln_get(), name)
00483
00489 #define cmd_ln_float64(name) (float64)cmd_ln_float_r(cmd_ln_get(), name)
00490
00496 #define cmd_ln_boolean(name) cmd_ln_boolean_r(cmd_ln_get(), name)
00497
00504 #define cmd_ln_set_str(n,s) cmd_ln_set_str_r(cmd_ln_get(),n,s)
00505
00511 #define cmd_ln_set_int32(n,i) cmd_ln_set_int_r(cmd_ln_get(),n,i)
00512
00518 #define cmd_ln_set_float32(n,f) cmd_ln_set_float_r(cmd_ln_get(),n,f)
00519
00525 #define cmd_ln_set_float64(n,f) cmd_ln_set_float_r(cmd_ln_get(),n,f)
00526
00532 #define cmd_ln_set_boolean(n,b) cmd_ln_set_boolean_r(cmd_ln_get(),n,b)
00533
00541 #define cmd_ln_print_help(f,d) cmd_ln_print_help_r(cmd_ln_get(),f,d)
00542
00547 SPHINXBASE_EXPORT
00548 void cmd_ln_free (void);
00549
00550
00551 #ifdef __cplusplus
00552 }
00553 #endif
00554
00555 #endif
00556
00557