SphinxBase  0.6
cmd_ln.h
Go to the documentation of this file.
1 /* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /* ====================================================================
3  * Copyright (c) 1999-2004 Carnegie Mellon University. All rights
4  * reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright
14  * notice, this list of conditions and the following disclaimer in
15  * the documentation and/or other materials provided with the
16  * distribution.
17  *
18  * This work was supported in part by funding from the Defense Advanced
19  * Research Projects Agency and the National Science Foundation of the
20  * United States of America, and the CMU Sphinx Speech Consortium.
21  *
22  * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND
23  * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
24  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
25  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
26  * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  *
34  * ====================================================================
35  *
36  */
37 /*
38  * cmd_ln.h -- Command line argument parsing.
39  *
40  * **********************************************
41  * CMU ARPA Speech Project
42  *
43  * Copyright (c) 1999 Carnegie Mellon University.
44  * ALL RIGHTS RESERVED.
45  * **********************************************
46  *
47  * HISTORY
48  *
49  * 15-Jul-1997 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
50  * Added required arguments types.
51  *
52  * 07-Dec-96 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
53  * Created, based on Eric's implementation. Basically, combined several
54  * functions into one, eliminated validation, and simplified the interface.
55  */
56 
57 
58 #ifndef _LIBUTIL_CMD_LN_H_
59 #define _LIBUTIL_CMD_LN_H_
60 
61 #include <stdio.h>
62 #include <stdarg.h>
63 
64 /* Win32/WinCE DLL gunk */
65 #include <sphinxbase/sphinxbase_export.h>
66 #include <sphinxbase/prim_type.h>
67 
76 #ifdef __cplusplus
77 extern "C" {
78 #endif
79 #if 0
80 /* Fool Emacs. */
81 }
82 #endif
83 
88 typedef struct arg_s {
89  char const *name;
90  int type;
91  char const *deflt;
92  char const *doc;
93 } arg_t;
94 
98 /* @{ */
102 #define ARG_REQUIRED (1<<0)
103 
106 #define ARG_INTEGER (1<<1)
107 
110 #define ARG_FLOATING (1<<2)
111 
114 #define ARG_STRING (1<<3)
115 
118 #define ARG_BOOLEAN (1<<4)
119 
122 #define ARG_STRING_LIST (1<<5)
123 
127 #define REQARG_INTEGER (ARG_INTEGER | ARG_REQUIRED)
128 
131 #define REQARG_FLOATING (ARG_FLOATING | ARG_REQUIRED)
132 
135 #define REQARG_STRING (ARG_STRING | ARG_REQUIRED)
136 
139 #define REQARG_BOOLEAN (ARG_BOOLEAN | ARG_REQUIRED)
140 
144 #define ARG_INT32 ARG_INTEGER
145 
148 #define ARG_FLOAT32 ARG_FLOATING
149 
152 #define ARG_FLOAT64 ARG_FLOATING
153 
156 #define REQARG_INT32 (ARG_INT32 | ARG_REQUIRED)
157 
160 #define REQARG_FLOAT32 (ARG_FLOAT32 | ARG_REQUIRED)
161 
164 #define REQARG_FLOAT64 (ARG_FLOAT64 | ARG_REQUIRED)
165 /* @} */
166 
167 
172 #define ARG_STRINGIFY(s) ARG_STRINGIFY1(s)
173 #define ARG_STRINGIFY1(s) #s
174 
179 typedef struct cmd_ln_s cmd_ln_t;
180 
199 SPHINXBASE_EXPORT
200 cmd_ln_t *cmd_ln_init(cmd_ln_t *inout_cmdln, arg_t const *defn, int32 strict, ...);
201 
207 SPHINXBASE_EXPORT
209 
215 SPHINXBASE_EXPORT
216 int cmd_ln_free_r(cmd_ln_t *cmdln);
217 
237 SPHINXBASE_EXPORT
238 cmd_ln_t *cmd_ln_parse_r(cmd_ln_t *inout_cmdln,
240  arg_t const *defn,
241  int32 argc,
242  char *argv[],
243  int32 strict
245  );
246 
253 SPHINXBASE_EXPORT
254 cmd_ln_t *cmd_ln_parse_file_r(cmd_ln_t *inout_cmdln,
256  arg_t const *defn,
257  char const *filename,
259  int32 strict
261  );
262 
266 SPHINXBASE_EXPORT
267 anytype_t *cmd_ln_access_r(cmd_ln_t *cmdln, char const *name);
268 
283 SPHINXBASE_EXPORT
284 char const *cmd_ln_str_r(cmd_ln_t *cmdln, char const *name);
285 
300 SPHINXBASE_EXPORT
301 char const **cmd_ln_str_list_r(cmd_ln_t *cmdln, char const *name);
302 
314 SPHINXBASE_EXPORT
315 long cmd_ln_int_r(cmd_ln_t *cmdln, char const *name);
316 
328 SPHINXBASE_EXPORT
329 double cmd_ln_float_r(cmd_ln_t *cmdln, char const *name);
330 
334 #define cmd_ln_boolean_r(c,n) (cmd_ln_int_r(c,n) != 0)
335 
344 SPHINXBASE_EXPORT
345 void cmd_ln_set_str_r(cmd_ln_t *cmdln, char const *name, char const *str);
346 
354 SPHINXBASE_EXPORT
355 void cmd_ln_set_int_r(cmd_ln_t *cmdln, char const *name, long iv);
356 
364 SPHINXBASE_EXPORT
365 void cmd_ln_set_float_r(cmd_ln_t *cmdln, char const *name, double fv);
366 
370 #define cmd_ln_set_boolean_r(c,n,b) (cmd_ln_set_int_r(c,n,(b)!=0))
371 
372 /*
373  * Compatibility macros
374  */
375 #define cmd_ln_int32_r(c,n) (int32)cmd_ln_int_r(c,n)
376 #define cmd_ln_float32_r(c,n) (float32)cmd_ln_float_r(c,n)
377 #define cmd_ln_float64_r(c,n) (float64)cmd_ln_float_r(c,n)
378 #define cmd_ln_set_int32_r(c,n,i) cmd_ln_set_int_r(c,n,i)
379 #define cmd_ln_set_float32_r(c,n,f) cmd_ln_set_float_r(c,n,(double)f)
380 #define cmd_ln_set_float64_r(c,n,f) cmd_ln_set_float_r(c,n,(double)f)
381 
388 SPHINXBASE_EXPORT
389 int cmd_ln_exists_r(cmd_ln_t *cmdln, char const *name);
390 
395 SPHINXBASE_EXPORT
396 void cmd_ln_print_help_r (cmd_ln_t *cmdln,
397  FILE *fp,
398  const arg_t *defn
399  );
400 
408 SPHINXBASE_EXPORT
409 int32 cmd_ln_parse(const arg_t *defn,
410  int32 argc,
411  char *argv[],
412  int32 strict
414  );
415 
425 SPHINXBASE_EXPORT
426 int32 cmd_ln_parse_file(const arg_t *defn,
427  char const *filename,
428  int32 strict
430  );
431 
437 SPHINXBASE_EXPORT
438 void cmd_ln_appl_enter(int argc,
439  char *argv[],
440  char const* default_argfn,
441  const arg_t *defn
442  );
443 
444 
451 SPHINXBASE_EXPORT
452 void cmd_ln_appl_exit(void);
453 
460 SPHINXBASE_EXPORT
461 cmd_ln_t *cmd_ln_get(void);
462 
473 #define cmd_ln_exists(name) cmd_ln_exists_r(cmd_ln_get(), name)
474 
481 #define cmd_ln_access(name) cmd_ln_access_r(cmd_ln_get(), name)
482 
489 #define cmd_ln_str(name) cmd_ln_str_r(cmd_ln_get(), name)
490 
497 #define cmd_ln_str_list(name) cmd_ln_str_list_r(cmd_ln_get(), name)
498 
505 #define cmd_ln_int32(name) (int32)cmd_ln_int_r(cmd_ln_get(), name)
506 
512 #define cmd_ln_float32(name) (float32)cmd_ln_float_r(cmd_ln_get(), name)
513 
519 #define cmd_ln_float64(name) (float64)cmd_ln_float_r(cmd_ln_get(), name)
520 
526 #define cmd_ln_boolean(name) cmd_ln_boolean_r(cmd_ln_get(), name)
527 
534 #define cmd_ln_set_str(n,s) cmd_ln_set_str_r(cmd_ln_get(),n,s)
535 
541 #define cmd_ln_set_int32(n,i) cmd_ln_set_int_r(cmd_ln_get(),n,i)
542 
548 #define cmd_ln_set_float32(n,f) cmd_ln_set_float_r(cmd_ln_get(),n,f)
549 
555 #define cmd_ln_set_float64(n,f) cmd_ln_set_float_r(cmd_ln_get(),n,f)
556 
562 #define cmd_ln_set_boolean(n,b) cmd_ln_set_boolean_r(cmd_ln_get(),n,b)
563 
571 #define cmd_ln_print_help(f,d) cmd_ln_print_help_r(cmd_ln_get(),f,d)
572 
577 SPHINXBASE_EXPORT
578 void cmd_ln_free (void);
579 
580 
581 #ifdef __cplusplus
582 }
583 #endif
584 
585 #endif
586 
587