SphinxBase  0.6
include/sphinxbase/cmd_ln.h
Go to the documentation of this file.
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