Fix missing 2.6.12 in graphic
[kps.git] / cmdline.h
blobf8a957a685860061164f91648761512d7f217a68
1 #ifndef INCLUDE_CMDLINE
2 #define INCLUDE_CMDLINE
4 #include <ctype.h>
5 #include <limits.h>
6 #include "./patch_sta.h"
8 #define IS_NUMBER(tmp, char) \
9 while (*tmp != '\0') { \
10 if (!isdigit(*tmp)) { \
11 printf("[ERROR]: -%c should followed "\
12 "by a number\n", char);\
13 return OPT_ERROR; \
14 } \
15 tmp++; \
18 static inline int int_toobig(int num)
20 if (num < 0)
21 return 1;
22 return 0;
25 int check_option(char *p)
27 if (p == NULL)
28 return -1;
30 /* FIXME -- WCN: I am lazy ... */
31 if (*(p+1) != 'a' && *(p+1) != 'c' && *(p+1) != 'C' && *(p+1) != 'm' &&
32 *(p+1) != 'M' && *(p+1) != 'x' && *(p+1) != 'h' && *(p+1) != 'n' &&
33 *(p+1) != 'l' && *(p+1) != 'L' && *(p+1) != 's' && *(p+1) != 'r' &&
34 *(p+1) != 'N' && *(p+1) != 'O' && *(p+1) != 'w' && *(p+1) != 'e' &&
35 *(p+1) != 'I' && *(p+1) != 't' && *(p+1) != 'i')
36 return -1;
38 return 0;
41 int get_command_option(int argc, char **argv, int index, char *aopt)
43 int opt;
44 char *p;
46 p = argv[index];
48 if (*p != '-') {
49 filename_i = p;
50 return 0;
53 if (strlen(p) > 2 || (-1 == check_option(p))) {
54 printf("[ERROR]: %s Invalidata option!\n", p);
55 return -1;
58 /* First option should be input file or -h */
59 if (index == 1) {
60 if (*(p+1) == 'h')
61 goto no_opt_check;
62 else {
63 fprintf(stderr,"[ERROR]: First option "\
64 "should be input file or -h.\n");
65 return -1;
69 if (aopt[(int)(*(p+1))] == 1) {
70 printf("[ERROR]: -%c is repeat!\n", *(p+1));
71 return -1;
74 no_opt_check:
75 opt = *(p+1);
76 aopt[opt] = 1;
78 if ((argc-1) == index || (*(argv[index+1]) == '-'))
79 if ((opt != 'a') && (opt != 'h') && (opt != 'n') &&
80 (opt != 'L') && (opt != 'w') && (opt != 'e') &&
81 (opt != 'I') && (opt != 'i')) {
82 printf("[ERROR]: Option -%c lost value!\n", opt);
83 return -1;
85 return *(p+1);
88 int parse_command_line(int argc, char **argv)
90 char aopt[256];
91 int index, i;
92 int opt;
93 char *tmp;
95 program_name = argv[0];
97 if (argc < 2) {
98 printf("[ERROR]: Please give me the input file's name\n");
99 return OPT_ERROR;
102 index = 0;
103 memset(aopt, 0, 256);
105 while (1) {
106 index++;
107 if (index >= argc)
108 break;
110 opt = get_command_option(argc, argv, index, aopt);
111 if (opt == -1)
112 return OPT_ERROR;
114 switch (opt) {
115 case 'h':
116 g_help = SELECT;
117 break;
118 case 'a':
119 g_all = SELECT;
120 break;
121 case 'n':
122 g_notconv = SELECT;
123 break;
124 case 'I':
125 g_interest = SELECT;
126 break;
127 case 'L':
128 g_line = SELECT;
129 break;
130 case 'w':
131 g_warning = SELECT;
132 break;
133 case 'e':
134 g_nospam = SELECT;
135 break;
136 case 'C':
137 index++;
138 g_comtop = SELECT;
139 tmp = argv[index];
140 IS_NUMBER(tmp, 'C');
141 p_comtop = strtod(argv[index], NULL);
142 if (int_toobig((int)p_comtop)) {
143 printf("TOPX is too big.\n"
144 "Should be less than %u\n", INT_MAX);
145 return OPT_ERROR;
147 break;
148 case 'c':
149 index++;
150 g_com = SELECT;
151 p_com = argv[index];
152 if ((*p_com) == '-')
153 return OPT_ERROR;
154 break;
155 case 'l':
156 index++;
157 g_tail = SELECT;
158 tmp = argv[index];
159 IS_NUMBER(tmp, 'l');
160 p_tail = strtod(argv[index], NULL);
161 if (int_toobig((int)p_tail)) {
162 printf("Tail limit is too big.\n"
163 "Should be less than %u\n", INT_MAX);
164 return OPT_ERROR;
166 break;
167 case 'N':
168 index++;
169 g_nation = SELECT;
170 p_nation = argv[index];
171 if ((*p_nation) == '-')
172 return OPT_ERROR;
173 break;
174 case 'm':
175 index++;
176 g_person = SELECT;
177 p_person = argv[index];
178 if ((*p_person) == '-')
179 return OPT_ERROR;
180 break;
181 case 'M':
182 index++;
183 g_pertop = SELECT;
184 tmp = argv[index];
185 IS_NUMBER(tmp, 'M');
186 p_pertop = strtod(argv[index], NULL);
187 if (int_toobig((int)p_pertop)) {
188 printf("TOPX is too big.\n"
189 "Should be less than %u\n", INT_MAX);
190 return OPT_ERROR;
192 break;
193 case 'x':
194 index++;
195 g_html = SELECT;
196 p_html = argv[index];
197 if ((*p_html) == '-')
198 return OPT_ERROR;
199 break;
200 case 't':
201 index++;
202 g_cnty = SELECT;
203 p_cnty = argv[index];
204 if ((*p_cnty) == '-')
205 return OPT_ERROR;
206 break;
207 case 'i':
208 index++;
209 g_nat_interest = SELECT;
210 p_nat_interest = argv[index];
211 if ((*p_nat_interest) == '-')
212 return OPT_ERROR;
213 break;
214 case 's':
215 index++;
216 g_sql = SELECT;
217 p_sql = argv[index];
218 if ((*p_sql) == '-')
219 return OPT_ERROR;
220 break;
221 case 'r':
222 index++;
223 p_rls = argv[index];
224 if ((*p_rls) == '-')
225 return OPT_ERROR;
226 break;
227 case 'O':
228 index++;
229 g_other = SELECT;
230 p_other = argv[index];
231 if ((*p_other) == '-')
232 return OPT_ERROR;
233 if (strcmp(p_other, "report") == 0) {
234 other = OTHER_REPORT;
235 break;
236 } else if (strcmp(p_other, "review") == 0) {
237 other = OTHER_REVIEW;
238 break;
239 } else if (strcmp(p_other, "test") == 0) {
240 other = OTHER_TEST;
241 break;
242 } else if (strcmp(p_other, "ack") == 0) {
243 other = OTHER_ACK;
244 break;
245 } else if (strcmp(p_other, "sof") == 0) {
246 other = OTHER_SOF;
247 break;
248 } else
249 return OPT_ERROR;
250 default:
251 break;
255 if ((g_interest == SELECT || g_nat_interest == SELECT) && g_line == SELECT)
256 return OPT_ERROR;
258 for (i = 0; i < 256; i++)
259 if (aopt[i] == 1)
260 goto out;
261 g_all = SELECT;
263 out:
264 return OPT_OK;
267 #endif