93 |
93 |
94 /*****************************************************************************/ |
94 /*****************************************************************************/ |
95 |
95 |
96 void getOptions(int argc, char **argv) |
96 void getOptions(int argc, char **argv) |
97 { |
97 { |
98 int c, argCount, optionIndex, number; |
98 int c, argCount; |
99 char *remainder; |
99 stringstream str; |
100 |
100 |
101 static struct option longOptions[] = { |
101 static struct option longOptions[] = { |
102 //name, has_arg, flag, val |
102 //name, has_arg, flag, val |
103 {"master", required_argument, NULL, 'm'}, |
103 {"master", required_argument, NULL, 'm'}, |
104 {"alias", required_argument, NULL, 'a'}, |
104 {"alias", required_argument, NULL, 'a'}, |
111 {"help", no_argument, NULL, 'h'}, |
111 {"help", no_argument, NULL, 'h'}, |
112 {} |
112 {} |
113 }; |
113 }; |
114 |
114 |
115 do { |
115 do { |
116 c = getopt_long(argc, argv, "m:a:p:d:t:fqvh", |
116 c = getopt_long(argc, argv, "m:a:p:d:t:fqvh", longOptions, NULL); |
117 longOptions, &optionIndex); |
|
118 |
117 |
119 switch (c) { |
118 switch (c) { |
120 case 'm': |
119 case 'm': |
121 number = strtoul(optarg, &remainder, 0); |
120 str.clear(); |
122 if (remainder == optarg || *remainder || number < 0) { |
121 str.str(""); |
|
122 str << optarg; |
|
123 str >> resetiosflags(ios::basefield) // guess base from prefix |
|
124 >> masterIndex; |
|
125 if (str.fail() || masterIndex < 0) { |
123 cerr << "Invalid master number " << optarg << "!" << endl |
126 cerr << "Invalid master number " << optarg << "!" << endl |
124 << endl << usage(); |
127 << endl << usage(); |
125 exit(1); |
128 exit(1); |
126 } |
129 } |
127 masterIndex = number; |
|
128 break; |
130 break; |
129 |
131 |
130 case 'a': |
132 case 'a': |
131 if (!strcmp(optarg, "all")) { |
133 str.clear(); |
132 slaveAlias = -1; |
134 str.str(""); |
133 } else { |
135 str << optarg; |
134 number = strtoul(optarg, &remainder, 0); |
136 str >> resetiosflags(ios::basefield) // guess base from prefix |
135 if (remainder == optarg || *remainder |
137 >> slaveAlias; |
136 || number < 0 || number > 0xFFFF) { |
138 if (str.fail() || slaveAlias < 0 || slaveAlias > 0xFFFF) { |
137 cerr << "Invalid slave alias " << optarg << "!" |
139 cerr << "Invalid slave alias " << optarg << "!" << endl |
138 << endl << endl << usage(); |
140 << endl << usage(); |
139 exit(1); |
141 exit(1); |
140 } |
|
141 slaveAlias = number; |
|
142 } |
142 } |
143 break; |
143 break; |
144 |
144 |
145 case 'p': |
145 case 'p': |
146 if (!strcmp(optarg, "all")) { |
146 str.clear(); |
147 slavePosition = -1; |
147 str.str(""); |
148 } else { |
148 str << optarg; |
149 number = strtoul(optarg, &remainder, 0); |
149 str >> resetiosflags(ios::basefield) // guess base from prefix |
150 if (remainder == optarg || *remainder |
150 >> slavePosition; |
151 || number < 0 || number > 0xFFFF) { |
151 if (str.fail() |
152 cerr << "Invalid slave position " << optarg << "!" |
152 || slavePosition < 0 || slavePosition > 0xFFFF) { |
153 << endl << endl << usage(); |
153 cerr << "Invalid slave position " << optarg << "!" << endl |
154 exit(1); |
154 << endl << usage(); |
155 } |
155 exit(1); |
156 slavePosition = number; |
|
157 } |
156 } |
158 break; |
157 break; |
159 |
158 |
160 case 'd': |
159 case 'd': |
161 if (!strcmp(optarg, "all")) { |
160 str.clear(); |
162 domainIndex = -1; |
161 str.str(""); |
163 } else { |
162 str << optarg; |
164 number = strtoul(optarg, &remainder, 0); |
163 str >> resetiosflags(ios::basefield) // guess base from prefix |
165 if (remainder == optarg || *remainder || number < 0) { |
164 >> domainIndex; |
166 cerr << "Invalid domain index " |
165 if (str.fail() || domainIndex < 0) { |
167 << optarg << "!" << endl << endl << usage(); |
166 cerr << "Invalid domain index " << optarg << "!" << endl |
168 exit(1); |
167 << endl << usage(); |
169 } |
168 exit(1); |
170 domainIndex = number; |
|
171 } |
169 } |
172 break; |
170 break; |
173 |
171 |
174 case 't': |
172 case 't': |
175 dataTypeStr = optarg; |
173 dataTypeStr = optarg; |