-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathCmdParams.h
More file actions
138 lines (107 loc) · 3.77 KB
/
CmdParams.h
File metadata and controls
138 lines (107 loc) · 3.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/* CmdParams.h */
/*****************************************************************//*!
\file
The CmdParams class holds information about all of the command
line parameters.
See sparseDriver_parseParams.c and .h to see example usage.
Notes:
-optional isn't actually implemented.
-if a string is passed as a parameter for a num param, the value
is just set to 0
example usage:
<pre>
typedef enum {
test_a,
test_b,
test_c
} test_type;
EnumStringPair cPairs[] = { {test_a,"test_a"},{test_b,"test_b"},
{test_c,"test_c"} };
int num_cPairs = 3;
int main(int argc, char **argv) {
char *aparam;
int bparam;
test_type cparam;
char *cparamString;
CmdParams *cmdparams = CmdParams_ctor(1);
CmdParams_describeStringParam(cmdparams, "aparamName",
'a', 1, "testing a string param", "default_a");
CmdParams_describeNumParam(cmdparams, "bparamName",
'b', 1, "testing a number param", 0, 4, 2);
CmdParams_describeEnumParam(cmdparams, "cparamName",
'c', 1, "testing an enum param",
cPairs, num_cPairs, test_b);
CmdParams_parseParams(cmdparams, argc, argv);
aparam = CmdParams_getString(cmdparams, 'a');
bparam = CmdParams_getValue(cmdparams, 'b');
cparam = CmdParams_getValue(cmdparams, 'c');
cparamString = CmdParams_getString(cmdparams, 'c');
</pre>
*//*******************************************************************/
#ifndef _CMDPARAMS_H
#define _CMDPARAMS_H
#define MAXHELPSTRING 256
#define MAXPOSSVALSTRING 256
#define MAXPOSSVALS 20
#define MAXCMDPARAMS 40
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
typedef enum {
paramType_STRING,
paramType_INT,
paramType_ENUM
} paramType_type;
typedef struct enum_string_pair {
int enumVal;
char string[MAXPOSSVALSTRING];
} EnumStringPair;
struct cmd_param {
char paramName[MAXPOSSVALSTRING];
char flagChar;
char helpstr[MAXHELPSTRING];
int optional;
paramType_type paramType;
/* used for paramType_INT and paramType_ENUM */
/* if ENUM then to find string look for actualVal
* in EnumStringPairs */
int actualVal;
/* used for paramType_ENUM */
/* array of possible enum values and their
* associated strings */
int numPairs;
EnumStringPair possibleStrings[MAXPOSSVALS];
/* used for paramType_INT */
int startRange; int endRange; /* range for int params */
/* used for paramType_STRING */
char stringVal[MAXPOSSVALSTRING];
};
typedef struct cmd_param_manager {
int printVals; /* whether to printVals while parsing */
int numParams;
struct cmd_param cmd_params[MAXCMDPARAMS];
} CmdParams;
#define MAXNUMARGS 1+2*MAXCMDPARAMS
/* allows for dummy arg[0], and MAXCMDPARAMS flag/value pairs */
CmdParams* CmdParams_ctor(int printVals);
void CmdParams_dtor(CmdParams** cmdparamPtr);
void CmdParams_describeNumParam(CmdParams *thee, const char *paramName,
char flag, int optional,
const char *helpstr,
int startRange, int endRange, int defaultVal);
void CmdParams_describeStringParam(CmdParams *thee, const char *paramName,
char flag, int optional,
const char *helpstr, const char *defaultString);
void CmdParams_describeEnumParam(CmdParams *thee, const char *paramName,
char flag, int optional,
const char *helpstr,
EnumStringPair possibleStrings[], int numPairs,
int defaultVal);
void CmdParams_printHelp(CmdParams *cmdparams);
void CmdParams_parseParams(CmdParams *cmdparams, int argc, char **argv);
void CmdParams_setValue(CmdParams* thee, char whichFlag, int val);
int CmdParams_getValue(CmdParams* thee, char whichFlag);
char* CmdParams_getString(CmdParams* thee, char whichFlag);
#endif