• Main Page
  • Related Pages
  • Data Structures
  • Files
  • File List
  • Globals

include/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_export.h>
00066 #include <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 
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  * Compatibility macros
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 

Generated on Tue Aug 17 2010 for SphinxBase by  doxygen 1.7.1