forked from CAIDA/mper
-
Notifications
You must be signed in to change notification settings - Fork 0
/
scamper_options.h
118 lines (104 loc) · 3.62 KB
/
scamper_options.h
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
/*
* scamper_options.h: code to handle parsing of options
*
* $Id: scamper_options.h,v 1.6 2008/08/30 08:56:16 mjl Exp $
*
* Copyright (C) 2006-2008 The University of Waikato
* Author: Matthew Luckie
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 2.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#ifndef __SCAMPER_OPTIONS_H
#define __SCAMPER_OPTIONS_H
#define SCAMPER_OPTION_TYPE_NULL 0x00 /* no parameter to option */
#define SCAMPER_OPTION_TYPE_STR 0x01 /* string parameter */
#define SCAMPER_OPTION_TYPE_NUM 0x02 /* integer (number) parameter */
/*
* scamper_option_in
*
* define the format of an option. this structure defines the short and long
* strings used for the option, the parameter type, and an associated integer
* id for the type, so that the caller does not have to examine the option
* string after it has been parsed.
*/
typedef struct scamper_option_in
{
/*
* the character (for one-letter options) or the string (for long options)
* defining the option. if c is '\0', then the option does not have a short
* form. if str is NULL, then the option is
*/
char c;
char *str;
/*
* an integer mapping for the option. this integer mapping is used when
* returning the parsed options to the caller.
*/
int id;
/*
* the type of the paramater for the option, if there is one. type codes
* are defined above.
*/
int type;
} scamper_option_in_t;
#define SCAMPER_OPTION_COUNT(opts) (sizeof(opts)/sizeof(scamper_option_in_t))
/*
* scamper_option_out
*
* a simple struct to associate an option with its supplied value. the
* id comes from the scamper_option_in structure.
*
* the next parameter is used to assemble a linked list of option structures.
*/
typedef struct scamper_option_out
{
int id;
int type;
char *str;
struct scamper_option_out *next;
} scamper_option_out_t;
/*
* scamper_options_parse
*
* given an input string, parse the string for options based on the options
* supplied in the opts_in parameter.
*
* the parsed options are put into opts_out. the caller must use
* scamper_options_free() on the opts_out parameter when the structure is no
* longer required.
*
* this function will modify the opt_str parameter passed in rather than
* duplicate portions of the input string.
*/
int scamper_options_parse(char *opt_str,
const scamper_option_in_t *opts_in, const int cnt_in,
scamper_option_out_t **opts_out, char **stop);
int scamper_options_validate(const scamper_option_in_t *opts, const int cnt,
int argc, char *argv[], int *stop,
int validate(int optid, char *param, long *out));
/*
* scamper_options_count
*
* return a count of the number of opt_out structures in the list
*/
int scamper_options_count(scamper_option_out_t *opts);
int scamper_options_c2id(const scamper_option_in_t *opts,const int cnt,char c);
/*
* scamper_options_free
*
* free the list of scamper_option_out structures passed as the only parameter.
*/
void scamper_options_free(scamper_option_out_t *opts);
#endif /* __SCAMPER_OPTIONS_H */