SphinxBase  5prealpha
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 
398 SPHINXBASE_EXPORT
399 void cmd_ln_print_help_r (cmd_ln_t *cmdln, FILE *fp, const arg_t *defn);
400 
407 SPHINXBASE_EXPORT
408 void cmd_ln_print_values_r (cmd_ln_t *cmdln, FILE *fp, const arg_t *defn);
409 
417 SPHINXBASE_EXPORT
418 int32 cmd_ln_parse(const arg_t *defn,
419  int32 argc,
420  char *argv[],
421  int32 strict
423  );
424 
434 SPHINXBASE_EXPORT
435 int32 cmd_ln_parse_file(const arg_t *defn,
436  char const *filename,
437  int32 strict
439  );
440 
446 SPHINXBASE_EXPORT
447 void cmd_ln_appl_enter(int argc,
448  char *argv[],
449  char const* default_argfn,
450  const arg_t *defn
451  );
452 
453 
460 SPHINXBASE_EXPORT
461 void cmd_ln_appl_exit(void);
462 
469 SPHINXBASE_EXPORT
470 cmd_ln_t *cmd_ln_get(void);
471 
482 #define cmd_ln_exists(name) cmd_ln_exists_r(cmd_ln_get(), name)
483 
490 #define cmd_ln_access(name) cmd_ln_access_r(cmd_ln_get(), name)
491 
498 #define cmd_ln_str(name) cmd_ln_str_r(cmd_ln_get(), name)
499 
506 #define cmd_ln_str_list(name) cmd_ln_str_list_r(cmd_ln_get(), name)
507 
514 #define cmd_ln_int32(name) (int32)cmd_ln_int_r(cmd_ln_get(), name)
515 
521 #define cmd_ln_float32(name) (float32)cmd_ln_float_r(cmd_ln_get(), name)
522 
528 #define cmd_ln_float64(name) (float64)cmd_ln_float_r(cmd_ln_get(), name)
529 
535 #define cmd_ln_boolean(name) cmd_ln_boolean_r(cmd_ln_get(), name)
536 
543 #define cmd_ln_set_str(n,s) cmd_ln_set_str_r(cmd_ln_get(),n,s)
544 
550 #define cmd_ln_set_int32(n,i) cmd_ln_set_int_r(cmd_ln_get(),n,i)
551 
557 #define cmd_ln_set_float32(n,f) cmd_ln_set_float_r(cmd_ln_get(),n,f)
558 
564 #define cmd_ln_set_float64(n,f) cmd_ln_set_float_r(cmd_ln_get(),n,f)
565 
571 #define cmd_ln_set_boolean(n,b) cmd_ln_set_boolean_r(cmd_ln_get(),n,b)
572 
580 #define cmd_ln_print_help(f,d) cmd_ln_print_help_r(cmd_ln_get(),f,d)
581 
586 SPHINXBASE_EXPORT
587 void cmd_ln_free (void);
588 
589 
590 #ifdef __cplusplus
591 }
592 #endif
593 
594 #endif
char const * name
Name of the command line switch.
Definition: cmd_ln.h:89
SPHINXBASE_EXPORT cmd_ln_t * cmd_ln_retain(cmd_ln_t *cmdln)
Retain ownership of a command-line argument set.
Definition: cmd_ln.c:1025
SPHINXBASE_EXPORT double cmd_ln_float_r(cmd_ln_t *cmdln, char const *name)
Retrieve a floating-point number from a command-line object.
Definition: cmd_ln.c:975
SPHINXBASE_EXPORT long cmd_ln_int_r(cmd_ln_t *cmdln, char const *name)
Retrieve an integer from a command-line object.
Definition: cmd_ln.c:965
SPHINXBASE_EXPORT anytype_t * cmd_ln_access_r(cmd_ln_t *cmdln, char const *name)
Access the generic type union for a command line argument.
Definition: cmd_ln.c:934
char const * doc
Documentation/description string.
Definition: cmd_ln.h:92
SPHINXBASE_EXPORT void cmd_ln_set_int_r(cmd_ln_t *cmdln, char const *name, long iv)
Set an integer in a command-line object.
Definition: cmd_ln.c:1001
SPHINXBASE_EXPORT int cmd_ln_free_r(cmd_ln_t *cmdln)
Release a command-line argument set and all associated strings.
Definition: cmd_ln.c:1032
int type
Type of the argument in question.
Definition: cmd_ln.h:90
SPHINXBASE_EXPORT int cmd_ln_exists_r(cmd_ln_t *cmdln, char const *name)
Re-entrant version of cmd_ln_exists().
Definition: cmd_ln.c:925
SPHINXBASE_EXPORT cmd_ln_t * cmd_ln_parse_r(cmd_ln_t *inout_cmdln, arg_t const *defn, int32 argc, char *argv[], int32 strict)
Parse a list of strings into argumetns.
Definition: cmd_ln.c:553
Basic type definitions used in Sphinx.
SPHINXBASE_EXPORT char const * cmd_ln_str_r(cmd_ln_t *cmdln, char const *name)
Retrieve a string from a command-line object.
Definition: cmd_ln.c:945
SPHINXBASE_EXPORT char const ** cmd_ln_str_list_r(cmd_ln_t *cmdln, char const *name)
Retrieve an array of strings from a command-line object.
Definition: cmd_ln.c:955
SPHINXBASE_EXPORT cmd_ln_t * cmd_ln_get(void)
Retrieve the global cmd_ln_t object used by non-re-entrant functions.
Definition: cmd_ln.c:490
SPHINXBASE_EXPORT void cmd_ln_print_help_r(cmd_ln_t *cmdln, FILE *fp, const arg_t *defn)
Print a help message listing the valid argument names, and the associated attributes as given in defn...
Definition: cmd_ln.c:907
SPHINXBASE_EXPORT void cmd_ln_print_values_r(cmd_ln_t *cmdln, FILE *fp, const arg_t *defn)
Print current configuration values and defaults.
Definition: cmd_ln.c:916
Definition: cmd_ln.h:88
char const * deflt
Default value (as a character string), or NULL if none.
Definition: cmd_ln.h:91
SPHINXBASE_EXPORT cmd_ln_t * cmd_ln_init(cmd_ln_t *inout_cmdln, arg_t const *defn, int32 strict,...)
Create a cmd_ln_t from NULL-terminated list of arguments.
Definition: cmd_ln.c:706
SPHINXBASE_EXPORT void cmd_ln_appl_exit(void)
Finalization routine corresponding to cmd_ln_appl_enter().
Definition: cmd_ln.c:546
SPHINXBASE_EXPORT cmd_ln_t * cmd_ln_parse_file_r(cmd_ln_t *inout_cmdln, arg_t const *defn, char const *filename, int32 strict)
Parse an arguments file by deliminating on " \r\t\n" and putting each tokens into an argv[] for cmd_l...
Definition: cmd_ln.c:761
Argument definition structure.
Opaque structure used to hold the results of command-line parsing.
SPHINXBASE_EXPORT void cmd_ln_set_float_r(cmd_ln_t *cmdln, char const *name, double fv)
Set a floating-point number in a command-line object.
Definition: cmd_ln.c:1013
Union of basic types.
Definition: prim_type.h:107
SPHINXBASE_EXPORT int32 cmd_ln_parse(const arg_t *defn, int32 argc, char *argv[], int32 strict)
Non-reentrant version of cmd_ln_parse().
Definition: cmd_ln.c:743
SPHINXBASE_EXPORT void cmd_ln_set_str_r(cmd_ln_t *cmdln, char const *name, char const *str)
Set a string in a command-line object.
Definition: cmd_ln.c:985
SPHINXBASE_EXPORT void cmd_ln_free(void)
Free the global command line, if any exists.
Definition: cmd_ln.c:1068
SPHINXBASE_EXPORT void cmd_ln_appl_enter(int argc, char *argv[], char const *default_argfn, const arg_t *defn)
Old application initialization routine for Sphinx3 code.
Definition: cmd_ln.c:496
SPHINXBASE_EXPORT int32 cmd_ln_parse_file(const arg_t *defn, char const *filename, int32 strict)
Parse an arguments file by deliminating on " \r\t\n" and putting each tokens into an argv[] for cmd_l...
Definition: cmd_ln.c:891