SphinxBase
0.6
|
00001 /* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ 00002 /* ==================================================================== 00003 * Copyright (c) 1999-2004 Carnegie Mellon University. All rights 00004 * reserved. 00005 * 00006 * Redistribution and use in source and binary forms, with or without 00007 * modification, are permitted provided that the following conditions 00008 * are met: 00009 * 00010 * 1. Redistributions of source code must retain the above copyright 00011 * notice, this list of conditions and the following disclaimer. 00012 * 00013 * 2. Redistributions in binary form must reproduce the above copyright 00014 * notice, this list of conditions and the following disclaimer in 00015 * the documentation and/or other materials provided with the 00016 * distribution. 00017 * 00018 * This work was supported in part by funding from the Defense Advanced 00019 * Research Projects Agency and the National Science Foundation of the 00020 * United States of America, and the CMU Sphinx Speech Consortium. 00021 * 00022 * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 00023 * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 00024 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00025 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY 00026 * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00027 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00028 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00029 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00030 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00031 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00032 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00033 * 00034 * ==================================================================== 00035 * 00036 */ 00037 /* 00038 * cmd_ln.h -- Command line argument parsing. 00039 * 00040 * ********************************************** 00041 * CMU ARPA Speech Project 00042 * 00043 * Copyright (c) 1999 Carnegie Mellon University. 00044 * ALL RIGHTS RESERVED. 00045 * ********************************************** 00046 * 00047 * HISTORY 00048 * 00049 * 15-Jul-1997 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University 00050 * Added required arguments types. 00051 * 00052 * 07-Dec-96 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University 00053 * Created, based on Eric's implementation. Basically, combined several 00054 * functions into one, eliminated validation, and simplified the interface. 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 /* Win32/WinCE DLL gunk */ 00065 #include <sphinxbase/sphinxbase_export.h> 00066 #include <sphinxbase/prim_type.h> 00067 00076 #ifdef __cplusplus 00077 extern "C" { 00078 #endif 00079 #if 0 00080 /* Fool Emacs. */ 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 00122 #define ARG_STRING_LIST (1<<5) 00123 00127 #define REQARG_INTEGER (ARG_INTEGER | ARG_REQUIRED) 00128 00131 #define REQARG_FLOATING (ARG_FLOATING | ARG_REQUIRED) 00132 00135 #define REQARG_STRING (ARG_STRING | ARG_REQUIRED) 00136 00139 #define REQARG_BOOLEAN (ARG_BOOLEAN | ARG_REQUIRED) 00140 00144 #define ARG_INT32 ARG_INTEGER 00145 00148 #define ARG_FLOAT32 ARG_FLOATING 00149 00152 #define ARG_FLOAT64 ARG_FLOATING 00153 00156 #define REQARG_INT32 (ARG_INT32 | ARG_REQUIRED) 00157 00160 #define REQARG_FLOAT32 (ARG_FLOAT32 | ARG_REQUIRED) 00161 00164 #define REQARG_FLOAT64 (ARG_FLOAT64 | ARG_REQUIRED) 00165 /* @} */ 00166 00167 00172 #define ARG_STRINGIFY(s) ARG_STRINGIFY1(s) 00173 #define ARG_STRINGIFY1(s) #s 00174 00179 typedef struct cmd_ln_s cmd_ln_t; 00180 00199 SPHINXBASE_EXPORT 00200 cmd_ln_t *cmd_ln_init(cmd_ln_t *inout_cmdln, arg_t const *defn, int32 strict, ...); 00201 00207 SPHINXBASE_EXPORT 00208 cmd_ln_t *cmd_ln_retain(cmd_ln_t *cmdln); 00209 00215 SPHINXBASE_EXPORT 00216 int cmd_ln_free_r(cmd_ln_t *cmdln); 00217 00237 SPHINXBASE_EXPORT 00238 cmd_ln_t *cmd_ln_parse_r(cmd_ln_t *inout_cmdln, 00240 arg_t const *defn, 00241 int32 argc, 00242 char *argv[], 00243 int32 strict 00245 ); 00246 00253 SPHINXBASE_EXPORT 00254 cmd_ln_t *cmd_ln_parse_file_r(cmd_ln_t *inout_cmdln, 00256 arg_t const *defn, 00257 char const *filename, 00259 int32 strict 00261 ); 00262 00266 SPHINXBASE_EXPORT 00267 anytype_t *cmd_ln_access_r(cmd_ln_t *cmdln, char const *name); 00268 00283 SPHINXBASE_EXPORT 00284 char const *cmd_ln_str_r(cmd_ln_t *cmdln, char const *name); 00285 00300 SPHINXBASE_EXPORT 00301 char const **cmd_ln_str_list_r(cmd_ln_t *cmdln, char const *name); 00302 00314 SPHINXBASE_EXPORT 00315 long cmd_ln_int_r(cmd_ln_t *cmdln, char const *name); 00316 00328 SPHINXBASE_EXPORT 00329 double cmd_ln_float_r(cmd_ln_t *cmdln, char const *name); 00330 00334 #define cmd_ln_boolean_r(c,n) (cmd_ln_int_r(c,n) != 0) 00335 00344 SPHINXBASE_EXPORT 00345 void cmd_ln_set_str_r(cmd_ln_t *cmdln, char const *name, char const *str); 00346 00354 SPHINXBASE_EXPORT 00355 void cmd_ln_set_int_r(cmd_ln_t *cmdln, char const *name, long iv); 00356 00364 SPHINXBASE_EXPORT 00365 void cmd_ln_set_float_r(cmd_ln_t *cmdln, char const *name, double fv); 00366 00370 #define cmd_ln_set_boolean_r(c,n,b) (cmd_ln_set_int_r(c,n,(b)!=0)) 00371 00372 /* 00373 * Compatibility macros 00374 */ 00375 #define cmd_ln_int32_r(c,n) cmd_ln_int_r(c,n) 00376 #define cmd_ln_float32_r(c,n) (float32)cmd_ln_float_r(c,n) 00377 #define cmd_ln_float64_r(c,n) (float64)cmd_ln_float_r(c,n) 00378 #define cmd_ln_set_int32_r(c,n,i) cmd_ln_set_int_r(c,n,i) 00379 #define cmd_ln_set_float32_r(c,n,f) cmd_ln_set_float_r(c,n,(double)f) 00380 #define cmd_ln_set_float64_r(c,n,f) cmd_ln_set_float_r(c,n,(double)f) 00381 00388 SPHINXBASE_EXPORT 00389 int cmd_ln_exists_r(cmd_ln_t *cmdln, char const *name); 00390 00395 SPHINXBASE_EXPORT 00396 void cmd_ln_print_help_r (cmd_ln_t *cmdln, 00397 FILE *fp, 00398 const arg_t *defn 00399 ); 00400 00408 SPHINXBASE_EXPORT 00409 int32 cmd_ln_parse(const arg_t *defn, 00410 int32 argc, 00411 char *argv[], 00412 int32 strict 00414 ); 00415 00425 SPHINXBASE_EXPORT 00426 int32 cmd_ln_parse_file(const arg_t *defn, 00427 char const *filename, 00428 int32 strict 00430 ); 00431 00437 SPHINXBASE_EXPORT 00438 void cmd_ln_appl_enter(int argc, 00439 char *argv[], 00440 char const* default_argfn, 00441 const arg_t *defn 00442 ); 00443 00444 00451 SPHINXBASE_EXPORT 00452 void cmd_ln_appl_exit(void); 00453 00460 SPHINXBASE_EXPORT 00461 cmd_ln_t *cmd_ln_get(void); 00462 00473 #define cmd_ln_exists(name) cmd_ln_exists_r(cmd_ln_get(), name) 00474 00481 #define cmd_ln_access(name) cmd_ln_access_r(cmd_ln_get(), name) 00482 00489 #define cmd_ln_str(name) cmd_ln_str_r(cmd_ln_get(), name) 00490 00497 #define cmd_ln_str_list(name) cmd_ln_str_list_r(cmd_ln_get(), name) 00498 00505 #define cmd_ln_int32(name) (int32)cmd_ln_int_r(cmd_ln_get(), name) 00506 00512 #define cmd_ln_float32(name) (float32)cmd_ln_float_r(cmd_ln_get(), name) 00513 00519 #define cmd_ln_float64(name) (float64)cmd_ln_float_r(cmd_ln_get(), name) 00520 00526 #define cmd_ln_boolean(name) cmd_ln_boolean_r(cmd_ln_get(), name) 00527 00534 #define cmd_ln_set_str(n,s) cmd_ln_set_str_r(cmd_ln_get(),n,s) 00535 00541 #define cmd_ln_set_int32(n,i) cmd_ln_set_int_r(cmd_ln_get(),n,i) 00542 00548 #define cmd_ln_set_float32(n,f) cmd_ln_set_float_r(cmd_ln_get(),n,f) 00549 00555 #define cmd_ln_set_float64(n,f) cmd_ln_set_float_r(cmd_ln_get(),n,f) 00556 00562 #define cmd_ln_set_boolean(n,b) cmd_ln_set_boolean_r(cmd_ln_get(),n,b) 00563 00571 #define cmd_ln_print_help(f,d) cmd_ln_print_help_r(cmd_ln_get(),f,d) 00572 00577 SPHINXBASE_EXPORT 00578 void cmd_ln_free (void); 00579 00580 00581 #ifdef __cplusplus 00582 } 00583 #endif 00584 00585 #endif 00586 00587