Mercurial > mplayer.hg
annotate m_option.c @ 9593:e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
Syntax is we decided, so you can give the nomes or not with both
vop and vf. vf take precedence over vop.
author | albeu |
---|---|
date | Sat, 15 Mar 2003 18:01:02 +0000 |
parents | 01a713dcaf23 |
children | f55ea7b2fa50 |
rev | line source |
---|---|
8164 | 1 |
2 #include "config.h" | |
3 | |
4 #ifdef NEW_CONFIG | |
5 | |
6 #include <stdlib.h> | |
7 #include <string.h> | |
8 #include <math.h> | |
9 #include <stdio.h> | |
10 #include <stdarg.h> | |
11 #include <inttypes.h> | |
8262 | 12 #include <unistd.h> |
8164 | 13 |
14 #include "m_option.h" | |
15 //#include "m_config.h" | |
16 #include "mp_msg.h" | |
17 | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
18 // Don't free for 'production' atm |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
19 #ifndef MP_DEBUG |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
20 #define NO_FREE |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
21 #endif |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
22 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
23 m_option_t* m_option_list_find(m_option_t* list,char* name) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
24 int i; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
25 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
26 for(i = 0 ; list[i].name ; i++) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
27 int l = strlen(list[i].name) - 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
28 if((list[i].type->flags & M_OPT_TYPE_ALLOW_WILDCARD) && |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
29 (l > 0) && (list[i].name[l] == '*')) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
30 if(strncasecmp(list[i].name,name,l) == 0) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
31 return &list[i]; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
32 } else if(strcasecmp(list[i].name,name) == 0) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
33 return &list[i]; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
34 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
35 return NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
36 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
37 |
8164 | 38 // Default function that just do a memcpy |
39 | |
40 static void copy_opt(m_option_t* opt,void* dst,void* src) { | |
41 if(dst && src) | |
42 memcpy(dst,src,opt->type->size); | |
43 } | |
44 | |
45 // Helper for the print funcs (from man printf) | |
46 static char* dup_printf(const char *fmt, ...) { | |
47 /* Guess we need no more than 50 bytes. */ | |
48 int n, size = 50; | |
49 char *p; | |
50 va_list ap; | |
51 if ((p = malloc (size)) == NULL) | |
52 return NULL; | |
53 while (1) { | |
54 /* Try to print in the allocated space. */ | |
55 va_start(ap, fmt); | |
56 n = vsnprintf (p, size, fmt, ap); | |
57 va_end(ap); | |
58 /* If that worked, return the string. */ | |
59 if (n > -1 && n < size) | |
60 return p; | |
61 /* Else try again with more space. */ | |
62 if (n > -1) /* glibc 2.1 */ | |
63 size = n+1; /* precisely what is needed */ | |
64 else /* glibc 2.0 */ | |
65 size *= 2; /* twice the old size */ | |
66 if ((p = realloc (p, size)) == NULL) | |
67 return NULL; | |
68 } | |
69 } | |
70 | |
71 | |
72 // Flag | |
73 | |
74 #define VAL(x) (*(int*)(x)) | |
75 | |
76 static int parse_flag(m_option_t* opt,char *name, char *param, void* dst, int src) { | |
77 if (src == M_CONFIG_FILE) { | |
78 if (!strcasecmp(param, "yes") || /* any other language? */ | |
79 !strcasecmp(param, "ja") || | |
80 !strcasecmp(param, "si") || | |
81 !strcasecmp(param, "igen") || | |
82 !strcasecmp(param, "y") || | |
83 !strcasecmp(param, "j") || | |
84 !strcasecmp(param, "i") || | |
85 !strcmp(param, "1")) { | |
86 if(dst) VAL(dst) = opt->max; | |
87 } else if (!strcasecmp(param, "no") || | |
88 !strcasecmp(param, "nein") || | |
89 !strcasecmp(param, "nicht") || | |
90 !strcasecmp(param, "nem") || | |
91 !strcasecmp(param, "n") || | |
92 !strcmp(param, "0")) { | |
93 if(dst) VAL(dst) = opt->min; | |
94 } else { | |
95 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "invalid parameter for %s flag: %s\n",name, param); | |
96 return M_OPT_INVALID; | |
97 } | |
98 return 1; | |
99 } else { | |
100 if(dst) VAL(dst) = opt->max; | |
101 return 0; | |
102 } | |
103 } | |
104 | |
105 static char* print_flag(m_option_t* opt, void* val) { | |
106 if(VAL(val) == opt->min) | |
107 return strdup("no"); | |
108 else | |
109 return strdup("yes"); | |
110 } | |
111 | |
112 m_option_type_t m_option_type_flag = { | |
113 "Flag", | |
114 "need yes or no in config files", | |
115 sizeof(int), | |
116 0, | |
117 parse_flag, | |
118 print_flag, | |
119 copy_opt, | |
120 copy_opt, | |
121 NULL, | |
122 NULL | |
123 }; | |
124 | |
125 // Integer | |
126 | |
127 static int parse_int(m_option_t* opt,char *name, char *param, void* dst, int src) { | |
128 long tmp_int; | |
129 char *endptr; | |
130 src = 0; | |
131 | |
132 if (param == NULL) | |
133 return M_OPT_MISSING_PARAM; | |
134 | |
135 tmp_int = strtol(param, &endptr, 0); | |
136 if (*endptr) { | |
137 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be an integer: %s\n",name, param); | |
138 return M_OPT_INVALID; | |
139 } | |
140 | |
141 if ((opt->flags & M_OPT_MIN) && (tmp_int < opt->min)) { | |
142 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be >= %d: %s\n", name, (int) opt->min, param); | |
143 return M_OPT_OUT_OF_RANGE; | |
144 } | |
145 | |
146 if ((opt->flags & M_OPT_MAX) && (tmp_int > opt->max)) { | |
147 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be <= %d: %s\n",name, (int) opt->max, param); | |
148 return M_OPT_OUT_OF_RANGE; | |
149 } | |
150 | |
151 if(dst) VAL(dst) = tmp_int; | |
152 | |
153 return 1; | |
154 } | |
155 | |
156 static char* print_int(m_option_t* opt, void* val) { | |
157 opt = NULL; | |
158 return dup_printf("%d",VAL(val)); | |
159 } | |
160 | |
161 m_option_type_t m_option_type_int = { | |
162 "Integer", | |
163 "", | |
164 sizeof(int), | |
165 0, | |
166 parse_int, | |
167 print_int, | |
168 copy_opt, | |
169 copy_opt, | |
170 NULL, | |
171 NULL | |
172 }; | |
173 | |
174 // Float | |
175 | |
176 #undef VAL | |
177 #define VAL(x) (*(float*)(x)) | |
178 | |
179 static int parse_float(m_option_t* opt,char *name, char *param, void* dst, int src) { | |
180 float tmp_float; | |
181 char* endptr; | |
182 src = 0; | |
183 | |
184 if (param == NULL) | |
185 return M_OPT_MISSING_PARAM; | |
186 | |
187 tmp_float = strtod(param, &endptr); | |
188 | |
189 switch(*endptr) { | |
190 case ':': | |
191 case '/': | |
192 tmp_float /= strtod(endptr+1, &endptr); | |
193 break; | |
194 case '.': | |
195 case ',': | |
196 /* we also handle floats specified with | |
197 * non-locale decimal point ::atmos | |
198 */ | |
199 if(tmp_float<0) | |
200 tmp_float -= 1.0/pow(10,strlen(endptr+1)) * strtod(endptr+1, &endptr); | |
201 else | |
202 tmp_float += 1.0/pow(10,strlen(endptr+1)) * strtod(endptr+1, &endptr); | |
203 break; | |
204 } | |
205 | |
206 if (*endptr) { | |
207 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be a floating point " | |
208 "number or a ratio (numerator[:/]denominator): %s\n",name, param); | |
209 return M_OPT_INVALID; | |
210 } | |
211 | |
212 if (opt->flags & M_OPT_MIN) | |
213 if (tmp_float < opt->min) { | |
214 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be >= %f: %s\n", name, opt->min, param); | |
215 return M_OPT_OUT_OF_RANGE; | |
216 } | |
217 | |
218 if (opt->flags & M_OPT_MAX) | |
219 if (tmp_float > opt->max) { | |
220 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be <= %f: %s\n", name, opt->max, param); | |
221 return M_OPT_OUT_OF_RANGE; | |
222 } | |
223 | |
224 if(dst) VAL(dst) = tmp_float; | |
225 return 1; | |
226 } | |
227 | |
228 static char* print_float(m_option_t* opt, void* val) { | |
229 opt = NULL; | |
230 return dup_printf("%f",VAL(val)); | |
231 } | |
232 | |
233 m_option_type_t m_option_type_float = { | |
234 "Float", | |
235 "floating point number or ratio (numerator[:/]denominator)", | |
236 sizeof(float), | |
237 0, | |
238 parse_float, | |
239 print_float, | |
240 copy_opt, | |
241 copy_opt, | |
242 NULL, | |
243 NULL | |
244 }; | |
245 | |
246 ///////////// Position | |
247 #undef VAL | |
248 #define VAL(x) (*(off_t*)(x)) | |
249 | |
250 static int parse_position(m_option_t* opt,char *name, char *param, void* dst, int src) { | |
251 off_t tmp_off; | |
252 char dummy; | |
253 | |
254 if (param == NULL) | |
255 return M_OPT_MISSING_PARAM; | |
256 if (sscanf(param, sizeof(off_t) == sizeof(int) ? | |
257 "%d%c" : "%lld%c", &tmp_off, &dummy) != 1) { | |
258 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be an integer: %s\n",opt->name,param); | |
259 return M_OPT_INVALID; | |
260 } | |
261 | |
262 if (opt->flags & M_OPT_MIN) | |
263 if (tmp_off < opt->min) { | |
264 mp_msg(MSGT_CFGPARSER, MSGL_ERR, | |
265 (sizeof(off_t) == sizeof(int) ? | |
266 "The %s option must be >= %d: %s\n" : | |
267 "The %s option must be >= %lld: %s\n"), | |
268 (off_t) opt->min, param); | |
269 return M_OPT_OUT_OF_RANGE; | |
270 } | |
271 | |
272 if (opt->flags & M_OPT_MAX) | |
273 if (tmp_off > opt->max) { | |
274 mp_msg(MSGT_CFGPARSER, MSGL_ERR, | |
275 (sizeof(off_t) == sizeof(int) ? | |
276 "The %s option must be <= %d: %s\n" : | |
277 "The %s option must be <= %lld: %s\n"), | |
278 (off_t) opt->max, param); | |
279 return M_OPT_OUT_OF_RANGE; | |
280 } | |
281 | |
282 if(dst) | |
283 VAL(dst) = tmp_off; | |
284 return 1; | |
285 } | |
286 | |
287 static char* print_position(m_option_t* opt, void* val) { | |
288 return dup_printf(sizeof(off_t) == sizeof(int) ? "%d" : "%lld",VAL(val)); | |
289 } | |
290 | |
291 m_option_type_t m_option_type_position = { | |
292 "Position", | |
293 "Integer (off_t)", | |
294 sizeof(off_t), | |
295 0, | |
296 parse_position, | |
297 print_position, | |
298 copy_opt, | |
299 copy_opt, | |
300 NULL, | |
301 NULL | |
302 }; | |
303 | |
304 | |
305 ///////////// String | |
306 | |
307 #undef VAL | |
308 #define VAL(x) (*(char**)(x)) | |
309 | |
310 static int parse_str(m_option_t* opt,char *name, char *param, void* dst, int src) { | |
311 | |
312 | |
313 if (param == NULL) | |
314 return M_OPT_MISSING_PARAM; | |
315 | |
316 if ((opt->flags & M_OPT_MIN) && (strlen(param) < opt->min)) { | |
317 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "parameter must be >= %d chars: %s\n", | |
318 (int) opt->min, param); | |
319 return M_OPT_OUT_OF_RANGE; | |
320 } | |
321 | |
322 if ((opt->flags & M_OPT_MAX) && (strlen(param) > opt->max)) { | |
323 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "parameter must be <= %d chars: %s\n", | |
324 (int) opt->max, param); | |
325 return M_OPT_OUT_OF_RANGE; | |
326 } | |
327 | |
328 if(dst) { | |
329 if(VAL(dst)) | |
330 free(VAL(dst)); | |
331 VAL(dst) = strdup(param); | |
332 } | |
333 | |
334 return 1; | |
335 | |
336 } | |
337 | |
338 static char* print_str(m_option_t* opt, void* val) { | |
8168 | 339 return (val && VAL(val) && strlen(VAL(val)) > 0) ? strdup(VAL(val)) : NULL; |
8164 | 340 } |
341 | |
342 static void copy_str(m_option_t* opt,void* dst, void* src) { | |
343 if(dst && src) { | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
344 #ifndef NO_FREE |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
345 if(VAL(dst)) free(VAL(dst)); //FIXME!!! |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
346 #endif |
8164 | 347 VAL(dst) = VAL(src) ? strdup(VAL(src)) : NULL; |
348 } | |
349 } | |
350 | |
351 static void free_str(void* src) { | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
352 if(src && VAL(src)){ |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
353 #ifndef NO_FREE |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
354 free(VAL(src)); //FIXME!!! |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
355 #endif |
8164 | 356 VAL(src) = NULL; |
357 } | |
358 } | |
359 | |
360 m_option_type_t m_option_type_string = { | |
361 "String", | |
362 "", | |
363 sizeof(char*), | |
364 M_OPT_TYPE_DYNAMIC, | |
365 parse_str, | |
366 print_str, | |
367 copy_str, | |
368 copy_str, | |
369 copy_str, | |
370 free_str | |
371 }; | |
372 | |
373 //////////// String list | |
374 | |
375 #define LIST_SEPARATOR ',' | |
376 #undef VAL | |
377 #define VAL(x) (*(char***)(x)) | |
378 | |
379 #define OP_NONE 0 | |
380 #define OP_ADD 1 | |
381 #define OP_PRE 2 | |
382 #define OP_DEL 3 | |
383 #define OP_CLR 4 | |
384 | |
385 static void free_str_list(void* dst) { | |
386 char** d; | |
387 int i; | |
388 | |
389 if(!dst || !VAL(dst)) return; | |
390 d = VAL(dst); | |
391 | |
9177
01a713dcaf23
disable free() in string and string_list parsers. yes, it's a hack
arpi
parents:
8736
diff
changeset
|
392 // FIXME!!! |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
393 #ifndef NO_FREE |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
394 for(i = 0 ; d[i] != NULL ; i++) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
395 free(d[i]); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
396 free(d); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
397 #endif |
8164 | 398 VAL(dst) = NULL; |
399 } | |
400 | |
401 static int str_list_add(char** add, int n,void* dst,int pre) { | |
402 char** lst = VAL(dst); | |
403 int ln; | |
404 | |
405 if(!dst) return M_OPT_PARSER_ERR; | |
406 lst = VAL(dst); | |
407 | |
408 for(ln = 0 ; lst && lst[ln] ; ln++) | |
409 /**/; | |
410 | |
411 lst = realloc(lst,(n+ln+1)*sizeof(char*)); | |
412 | |
413 if(pre) { | |
414 memmove(&lst[n],lst,(ln+1)*sizeof(char*)); | |
415 memcpy(lst,add,n*sizeof(char*)); | |
416 } else | |
417 memcpy(&lst[ln],add,(n+1)*sizeof(char*)); | |
418 | |
419 free(add); | |
420 | |
421 VAL(dst) = lst; | |
422 | |
423 return 1; | |
424 } | |
425 | |
426 static int str_list_del(char** del, int n,void* dst) { | |
427 char **lst,*ep,**d; | |
428 int i,ln,s; | |
429 long idx; | |
430 | |
431 if(!dst) return M_OPT_PARSER_ERR; | |
432 lst = VAL(dst); | |
433 | |
434 for(ln = 0 ; lst && lst[ln] ; ln++) | |
435 /**/; | |
436 s = ln; | |
437 | |
438 for(i = 0 ; del[i] != NULL ; i++) { | |
439 idx = strtol(del[i], &ep, 0); | |
440 if(*ep) { | |
441 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Invalid index: %s\n",del[i]); | |
442 free(del[i]); | |
443 continue; | |
444 } | |
445 free(del[i]); | |
446 if(idx < 0 || idx >= ln) { | |
447 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Index %d is out of range\n",idx); | |
448 continue; | |
449 } else if(!lst[idx]) | |
450 continue; | |
451 free(lst[idx]); | |
452 lst[idx] = NULL; | |
453 s--; | |
454 } | |
455 free(del); | |
456 | |
457 if(s == 0) { | |
458 if(lst) free(lst); | |
459 VAL(dst) = NULL; | |
460 return 1; | |
461 } | |
462 | |
463 d = calloc(s+1,sizeof(char*)); | |
464 for(i = 0, n = 0 ; i < ln ; i++) { | |
465 if(!lst[i]) continue; | |
466 d[n] = lst[i]; | |
467 n++; | |
468 } | |
469 d[s] = NULL; | |
470 | |
471 if(lst) free(lst); | |
472 VAL(dst) = d; | |
473 | |
474 return 1; | |
475 } | |
476 | |
477 | |
478 static int parse_str_list(m_option_t* opt,char *name, char *param, void* dst, int src) { | |
479 int n = 0,len = strlen(opt->name); | |
480 char *ptr = param, *last_ptr, **res; | |
481 int op = OP_NONE; | |
482 | |
483 if(opt->name[len-1] == '*' && ((int)strlen(name) > len - 1)) { | |
484 char* n = &name[len-1]; | |
485 if(strcasecmp(n,"-add") == 0) | |
486 op = OP_ADD; | |
487 else if(strcasecmp(n,"-pre") == 0) | |
488 op = OP_PRE; | |
489 else if(strcasecmp(n,"-del") == 0) | |
490 op = OP_DEL; | |
491 else if(strcasecmp(n,"-clr") == 0) | |
492 op = OP_CLR; | |
493 else | |
494 return M_OPT_UNKNOW; | |
495 } | |
496 | |
497 // Clear the list ?? | |
498 if(op == OP_CLR) { | |
499 if(dst) | |
500 free_str_list(dst); | |
501 return 0; | |
502 } | |
503 | |
504 // All other op need a param | |
505 if (param == NULL || strlen(param) == 0) | |
506 return M_OPT_MISSING_PARAM; | |
507 | |
508 | |
509 while(ptr[0] != '\0') { | |
510 last_ptr = ptr; | |
511 ptr = strchr(ptr,LIST_SEPARATOR); | |
512 if(!ptr) { | |
513 n++; | |
514 break; | |
515 } | |
516 ptr++; | |
517 n++; | |
518 } | |
519 if(n == 0) | |
520 return M_OPT_INVALID; | |
521 if( ((opt->flags & M_OPT_MIN) && (n < opt->min)) || | |
522 ((opt->flags & M_OPT_MAX) && (n > opt->max)) ) | |
523 return M_OPT_OUT_OF_RANGE; | |
524 | |
525 if(!dst) return 1; | |
526 | |
8384
7a7980b874f5
fixed 'mplayer -nosound xxx' sig11 if configfile have string list options
arpi
parents:
8262
diff
changeset
|
527 res = malloc((n+2)*sizeof(char*)); |
8164 | 528 ptr = param; |
529 n = 0; | |
530 | |
531 while(1) { | |
532 last_ptr = ptr; | |
533 ptr = strchr(ptr,LIST_SEPARATOR); | |
534 if(!ptr) { | |
535 res[n] = strdup(last_ptr); | |
536 n++; | |
537 break; | |
538 } | |
539 len = ptr - last_ptr; | |
540 res[n] = (char*)malloc(len + 1); | |
541 if(len) strncpy(res[n],last_ptr,len); | |
542 res[n][len] = '\0'; | |
543 ptr++; | |
544 n++; | |
545 } | |
546 res[n] = NULL; | |
547 | |
548 switch(op) { | |
549 case OP_ADD: | |
550 return str_list_add(res,n,dst,0); | |
551 case OP_PRE: | |
552 return str_list_add(res,n,dst,1); | |
553 case OP_DEL: | |
554 return str_list_del(res,n,dst); | |
555 } | |
556 | |
557 if(VAL(dst)) | |
558 free_str_list(dst); | |
559 VAL(dst) = res; | |
560 | |
561 return 1; | |
562 } | |
563 | |
564 static void copy_str_list(m_option_t* opt,void* dst, void* src) { | |
565 int n; | |
566 char **d,**s; | |
567 | |
568 if(!(dst && src)) return; | |
569 s = VAL(src); | |
570 | |
571 if(VAL(dst)) | |
572 free_str_list(dst); | |
573 | |
574 if(!s) { | |
575 VAL(dst) = NULL; | |
576 return; | |
577 } | |
578 | |
579 for(n = 0 ; s[n] != NULL ; n++) | |
580 /* NOTHING */; | |
581 d = (char**)malloc((n+1)*sizeof(char*)); | |
582 for( ; n >= 0 ; n--) | |
583 d[n] = s[n] ? strdup(s[n]) : NULL; | |
584 | |
585 VAL(dst) = d; | |
586 } | |
587 | |
588 static char* print_str_list(m_option_t* opt, void* src) { | |
8168 | 589 char **lst = NULL; |
590 char *ret = NULL,*last = NULL; | |
591 int i; | |
592 | |
593 if(!(src && VAL(src))) return NULL; | |
594 lst = VAL(src); | |
595 | |
596 for(i = 0 ; lst[i] ; i++) { | |
597 if(last) { | |
598 ret = dup_printf("%s,%s",last,lst[i]); | |
599 free(last); | |
600 } else | |
601 ret = strdup(lst[i]); | |
602 last = ret; | |
603 } | |
604 if(last && last != ret) free(last); | |
605 return ret; | |
8164 | 606 } |
607 | |
608 m_option_type_t m_option_type_string_list = { | |
609 "String list", | |
610 "A list of string separated by ','\n" | |
611 "Option with name that finish by an * allow to use the following suffix : \n" | |
612 "\t-add : add the given parameters at the end of list\n" | |
613 "\t-pre : add the given parameters at the begining of list\n" | |
614 "\t-del : remove the entry at the given indexs\n" | |
615 "\t-clr : clear the list\n" | |
616 "e.g: -vop-add flip,mirror -vop-del 2,5\n", | |
617 sizeof(char**), | |
618 M_OPT_TYPE_DYNAMIC | M_OPT_TYPE_ALLOW_WILDCARD, | |
619 parse_str_list, | |
620 print_str_list, | |
621 copy_str_list, | |
622 copy_str_list, | |
623 copy_str_list, | |
624 free_str_list | |
625 }; | |
626 | |
627 | |
628 /////////////////// Func based options | |
629 | |
630 // A chained list to save the various calls for func_param and func_full | |
631 typedef struct m_func_save m_func_save_t; | |
632 struct m_func_save { | |
633 m_func_save_t* next; | |
634 char* name; | |
635 char* param; | |
636 }; | |
637 | |
638 #undef VAL | |
639 #define VAL(x) (*(m_func_save_t**)(x)) | |
640 | |
641 static void free_func_pf(void* src) { | |
642 m_func_save_t *s,*n; | |
643 | |
644 if(!src) return; | |
645 | |
646 s = VAL(src); | |
647 | |
648 while(s) { | |
649 n = s->next; | |
650 free(s->name); | |
651 if(s->param) free(s->param); | |
652 free(s); | |
653 s = n; | |
654 } | |
655 VAL(src) = NULL; | |
656 } | |
657 | |
658 // Parser for func_param and func_full | |
659 static int parse_func_pf(m_option_t* opt,char *name, char *param, void* dst, int src) { | |
660 m_func_save_t *s,*p; | |
661 | |
662 if(!dst) | |
663 return 1; | |
664 | |
665 s = (m_func_save_t*)calloc(1,sizeof(m_func_save_t)); | |
666 s->name = strdup(name); | |
667 s->param = param ? strdup(param) : NULL; | |
668 | |
669 p = VAL(dst); | |
670 if(p) { | |
671 for( ; p->next != NULL ; p = p->next) | |
672 /**/; | |
673 p->next = s; | |
674 } else | |
675 VAL(dst) = s; | |
676 | |
677 return 1; | |
678 } | |
679 | |
680 static void copy_func_pf(m_option_t* opt,void* dst, void* src) { | |
681 m_func_save_t *d = NULL, *s,* last = NULL; | |
682 | |
683 if(!(dst && src)) return; | |
684 s = VAL(src); | |
685 | |
686 if(VAL(dst)) | |
687 free_func_pf(dst); | |
688 | |
689 while(s) { | |
690 d = (m_func_save_t*)malloc(sizeof(m_func_save_t)); | |
691 d->name = strdup(s->name); | |
692 d->param = s->param ? strdup(s->param) : NULL; | |
693 if(last) | |
694 last->next = d; | |
695 else | |
696 VAL(dst) = d; | |
697 last = d; | |
698 s = s->next; | |
699 } | |
700 | |
701 | |
702 } | |
703 | |
704 /////////////////// Func_param | |
705 | |
706 static void set_func_param(m_option_t* opt, void* dst, void* src) { | |
707 m_func_save_t* s; | |
708 | |
709 if(!src) return; | |
710 s = VAL(src); | |
711 | |
712 if(!s) return; | |
713 | |
714 // Revert if needed | |
715 if(opt->priv) ((m_opt_default_func_t)opt->priv)(opt,opt->name); | |
716 for( ; s != NULL ; s = s->next) | |
717 ((m_opt_func_param_t) opt->p)(opt,s->param); | |
718 } | |
719 | |
720 m_option_type_t m_option_type_func_param = { | |
721 "Func param", | |
722 "", | |
723 sizeof(m_func_save_t*), | |
724 M_OPT_TYPE_INDIRECT, | |
725 parse_func_pf, | |
726 NULL, | |
727 NULL, // Nothing to do on save | |
728 set_func_param, | |
729 copy_func_pf, | |
730 free_func_pf | |
731 }; | |
732 | |
733 /////////////////// Func_full | |
734 | |
735 static void set_func_full(m_option_t* opt, void* dst, void* src) { | |
736 m_func_save_t* s; | |
737 | |
738 if(!src) return; | |
739 | |
740 for(s = VAL(src) ; s ; s = s->next) { | |
741 // Revert if needed | |
742 if(opt->priv) ((m_opt_default_func_t)opt->priv)(opt,s->name); | |
743 ((m_opt_func_full_t) opt->p)(opt,s->name,s->param); | |
744 } | |
745 } | |
746 | |
747 m_option_type_t m_option_type_func_full = { | |
748 "Func full", | |
749 "", | |
750 sizeof(m_func_save_t*), | |
751 M_OPT_TYPE_ALLOW_WILDCARD|M_OPT_TYPE_INDIRECT, | |
752 parse_func_pf, | |
753 NULL, | |
754 NULL, // Nothing to do on save | |
755 set_func_full, | |
756 copy_func_pf, | |
757 free_func_pf | |
758 }; | |
759 | |
760 /////////////// Func | |
761 | |
762 #undef VAL | |
763 #define VAL(x) (*(int*)(x)) | |
764 | |
765 static int parse_func(m_option_t* opt,char *name, char *param, void* dst, int src) { | |
766 if(dst) | |
767 VAL(dst) += 1; | |
768 return 0; | |
769 } | |
770 | |
771 static void set_func(m_option_t* opt,void* dst, void* src) { | |
772 int i; | |
773 if(opt->priv) ((m_opt_default_func_t)opt->priv)(opt,opt->name); | |
774 for(i = 0 ; i < VAL(src) ; i++) | |
775 ((m_opt_func_t) opt->p)(opt); | |
776 } | |
777 | |
778 m_option_type_t m_option_type_func = { | |
779 "Func", | |
780 "", | |
781 sizeof(int), | |
782 M_OPT_TYPE_INDIRECT, | |
783 parse_func, | |
784 NULL, | |
785 NULL, // Nothing to do on save | |
786 set_func, | |
787 NULL, | |
788 NULL | |
789 }; | |
790 | |
791 /////////////////// Print | |
792 | |
793 static int parse_print(m_option_t* opt,char *name, char *param, void* dst, int src) { | |
8736 | 794 if(opt->type->flags&M_OPT_TYPE_INDIRECT) |
795 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "%s", *(char **) opt->p); | |
796 else | |
797 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "%s", (char *) opt->p); | |
798 | |
8164 | 799 if(opt->priv == NULL) |
800 exit(1); // Call something else instead ?? | |
801 return 1; | |
802 } | |
803 | |
804 m_option_type_t m_option_type_print = { | |
805 "Print", | |
806 "", | |
807 0, | |
808 0, | |
809 parse_print, | |
810 NULL, | |
811 NULL, | |
812 NULL, | |
813 NULL, | |
814 NULL | |
815 }; | |
816 | |
8736 | 817 m_option_type_t m_option_type_print_indirect = { |
818 "Print", | |
819 "", | |
820 0, | |
821 M_OPT_TYPE_INDIRECT, | |
822 parse_print, | |
823 NULL, | |
824 NULL, | |
825 NULL, | |
826 NULL, | |
827 NULL | |
828 }; | |
829 | |
830 | |
8164 | 831 /////////////////////// Subconfig |
832 #undef VAL | |
833 #define VAL(x) (*(char***)(x)) | |
834 | |
835 static int parse_subconf(m_option_t* opt,char *name, char *param, void* dst, int src) { | |
836 char *subparam; | |
837 char *subopt; | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
838 int nr = 0,i,r; |
8164 | 839 m_option_t *subopts; |
840 char *token; | |
841 char *p; | |
842 char** lst = NULL; | |
843 | |
844 if (param == NULL || strlen(param) == 0) | |
845 return M_OPT_MISSING_PARAM; | |
846 | |
847 subparam = malloc(strlen(param)+1); | |
848 subopt = malloc(strlen(param)+1); | |
849 p = strdup(param); // In case that param is a static string (cf man strtok) | |
850 | |
851 subopts = opt->p; | |
852 | |
853 token = strtok(p, (char *)&(":")); | |
854 while(token) | |
855 { | |
856 int sscanf_ret; | |
857 /* clear out */ | |
858 subopt[0] = subparam[0] = 0; | |
859 | |
860 sscanf_ret = sscanf(token, "%[^=]=%[^:]", subopt, subparam); | |
861 | |
862 mp_msg(MSGT_CFGPARSER, MSGL_DBG3, "token: '%s', subopt='%s', subparam='%s' (ret: %d)\n", token, subopt, subparam, sscanf_ret); | |
863 switch(sscanf_ret) | |
864 { | |
865 case 1: | |
866 subparam[0] = 0; | |
867 case 2: | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
868 for(i = 0 ; subopts[i].name ; i++) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
869 if(!strcmp(subopts[i].name,subopt)) break; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
870 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
871 if(!subopts[i].name) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
872 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Unknow suboption %s\n",name,subopt); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
873 return M_OPT_UNKNOW; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
874 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
875 r = m_option_parse(&subopts[i],subopt, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
876 subparam[0] == 0 ? NULL : subparam,NULL,src); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
877 if(r < 0) return r; |
8164 | 878 if(dst) { |
879 lst = (char**)realloc(lst,2 * (nr+2) * sizeof(char*)); | |
880 lst[2*nr] = strdup(subopt); | |
881 lst[2*nr+1] = subparam[0] == 0 ? NULL : strdup(subparam); | |
882 memset(&lst[2*(nr+1)],0,2*sizeof(char*)); | |
883 nr++; | |
884 } | |
885 break; | |
886 default: | |
887 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Invalid subconfig argument! ('%s')\n", token); | |
888 return M_OPT_INVALID; | |
889 } | |
890 token = strtok(NULL, (char *)&(":")); | |
891 } | |
892 | |
893 free(subparam); | |
894 free(subopt); | |
895 free(p); | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
896 if(dst) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
897 VAL(dst) = lst; |
8164 | 898 |
899 return 1; | |
900 } | |
901 | |
902 m_option_type_t m_option_type_subconfig = { | |
903 "Subconfig", | |
904 "The syntax is -option opt1=foo:flag:opt2=blah", | |
905 sizeof(int), | |
906 M_OPT_TYPE_HAS_CHILD, | |
907 parse_subconf, | |
908 NULL, | |
909 NULL, | |
910 NULL, | |
911 NULL, | |
912 NULL | |
913 }; | |
914 | |
915 #include "libmpcodecs/img_format.h" | |
916 // TODO : use an array so we parse/print easily | |
917 | |
918 static int parse_imgfmt(m_option_t* opt,char *name, char *param, void* dst, int src) { | |
919 uint32_t fmt = 0; | |
920 | |
921 if (param == NULL || strlen(param) == 0) | |
922 return M_OPT_MISSING_PARAM; | |
923 | |
924 // From vf_format | |
925 if(!strcasecmp(param,"444p")) fmt=IMGFMT_444P; else | |
926 if(!strcasecmp(param,"422p")) fmt=IMGFMT_422P; else | |
927 if(!strcasecmp(param,"411p")) fmt=IMGFMT_411P; else | |
928 if(!strcasecmp(param,"yuy2")) fmt=IMGFMT_YUY2; else | |
929 if(!strcasecmp(param,"yv12")) fmt=IMGFMT_YV12; else | |
930 if(!strcasecmp(param,"i420")) fmt=IMGFMT_I420; else | |
931 if(!strcasecmp(param,"yvu9")) fmt=IMGFMT_YVU9; else | |
932 if(!strcasecmp(param,"if09")) fmt=IMGFMT_IF09; else | |
933 if(!strcasecmp(param,"iyuv")) fmt=IMGFMT_IYUV; else | |
934 if(!strcasecmp(param,"uyvy")) fmt=IMGFMT_UYVY; else | |
935 if(!strcasecmp(param,"bgr24")) fmt=IMGFMT_BGR24; else | |
936 if(!strcasecmp(param,"bgr32")) fmt=IMGFMT_BGR32; else | |
937 if(!strcasecmp(param,"bgr16")) fmt=IMGFMT_BGR16; else | |
938 if(!strcasecmp(param,"bgr15")) fmt=IMGFMT_BGR15; else | |
939 if(!strcasecmp(param,"bgr8")) fmt=IMGFMT_BGR8; else | |
940 if(!strcasecmp(param,"bgr4")) fmt=IMGFMT_BGR4; else | |
941 if(!strcasecmp(param,"bgr1")) fmt=IMGFMT_BGR1; else | |
942 if(!strcasecmp(param,"rgb24")) fmt=IMGFMT_RGB24; else | |
943 if(!strcasecmp(param,"rgb32")) fmt=IMGFMT_RGB32; else | |
944 if(!strcasecmp(param,"rgb16")) fmt=IMGFMT_RGB16; else | |
945 if(!strcasecmp(param,"rgb15")) fmt=IMGFMT_RGB15; else | |
946 if(!strcasecmp(param,"rgb8")) fmt=IMGFMT_RGB8; else | |
947 if(!strcasecmp(param,"rgb4")) fmt=IMGFMT_RGB4; else | |
948 if(!strcasecmp(param,"rgb1")) fmt=IMGFMT_RGB1; else { | |
949 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: unknown format name: '%s'\n",param); | |
950 return M_OPT_INVALID; | |
951 } | |
952 | |
953 if(dst) | |
954 *((uint32_t*)dst) = fmt; | |
955 | |
956 return 1; | |
957 } | |
958 | |
959 m_option_type_t m_option_type_imgfmt = { | |
960 "Image format (aka colorspace)", | |
961 "Pls report any missing colorspace", | |
962 sizeof(uint32_t), | |
963 0, | |
964 parse_imgfmt, | |
965 NULL, | |
966 copy_opt, | |
967 copy_opt, | |
968 NULL, | |
969 NULL | |
970 }; | |
971 | |
972 /// Span stuff : Not finished | |
973 static int parse_play_pos(m_play_pos_t* pos,char* opt, char *s) { | |
974 char *ep; | |
975 long tmp; | |
976 int i; | |
977 | |
978 memset(pos,0,sizeof(m_play_pos_t)); | |
979 | |
980 if(!s || s[0] == '\0') | |
981 return M_OPT_MISSING_PARAM; | |
982 | |
983 // Track index | |
984 tmp = strtol(s, &ep, 0); | |
985 if(ep != s) { | |
986 if(tmp < 1) { | |
987 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Track/Chapter index must be > 0\n", opt); | |
988 return M_OPT_OUT_OF_RANGE; | |
989 } | |
990 pos->idx = tmp; | |
991 if(ep[0] == '\0') | |
992 return 1; | |
993 s = ep; | |
994 } | |
995 | |
996 // Span | |
997 tmp = strlen(s); | |
998 if(s[0] != '[' || s[tmp-1] != ']') { | |
999 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: invalid argument ?\n", opt); | |
1000 return M_OPT_INVALID; | |
1001 } | |
1002 s[tmp-1] = '\0'; | |
1003 s++; | |
1004 | |
1005 // hh:mm:ss | |
1006 for( i = 2 ; i >= 0 && s[0] != 0 ; i--) { | |
1007 if(s[0] == ':') { | |
1008 tmp = 0; | |
1009 s++; | |
1010 } else { | |
1011 tmp = strtol(s, &ep, 0); | |
1012 if(tmp < 0 || (ep[0] != '\0' && ep[0] != (i > 0 ? ':' : '.') )) { | |
1013 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: invalid argument ?\n", opt); | |
1014 return M_OPT_INVALID; | |
1015 } | |
1016 pos->seconds += tmp * pow(60,i); | |
1017 s = ep; | |
1018 if(s[0] != '\0') | |
1019 s++; | |
1020 | |
1021 } | |
1022 } | |
1023 | |
1024 // sectors | |
1025 if(s[0]) { | |
1026 tmp = strtol(s, &ep, 0); | |
1027 if(tmp < 0 || ep[0] != '\0') { | |
1028 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: invalid argument ?\n", opt); | |
1029 return M_OPT_INVALID; | |
1030 } | |
1031 pos->sectors = tmp; | |
1032 } | |
1033 | |
1034 return 1; | |
1035 } | |
1036 | |
1037 | |
1038 static int parse_span(m_option_t* opt,char *name, char *param, void* dst, int src) { | |
1039 m_span_t* span = dst; | |
1040 char *s = param,*e = NULL; | |
1041 int r = M_OPT_INVALID; | |
1042 | |
1043 if(param == NULL) | |
1044 return M_OPT_MISSING_PARAM; | |
1045 | |
1046 e = strchr(param,'-'); | |
1047 if(e) { | |
1048 e[0] = '\0'; | |
1049 e++; | |
1050 } | |
1051 | |
1052 if(s[0] == '\0' && e[0] == '\0') { | |
1053 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: invalid argument\n"); | |
1054 return M_OPT_INVALID; | |
1055 } | |
1056 | |
1057 if(s[0]) { | |
1058 r = parse_play_pos(&span->start,name,s); | |
1059 if(r < 0) return r; | |
1060 } | |
1061 if(e && e[0] != '\0') | |
1062 r = parse_play_pos(&span->end,name,s); | |
1063 | |
1064 return r; | |
1065 } | |
1066 | |
1067 m_option_type_t m_option_type_span = { | |
1068 "Span", | |
1069 "The syntax is 1[hh:mm:ss.zz]-5[hh:mm:ss.zz]", | |
1070 sizeof(m_span_t), | |
1071 0, | |
1072 parse_span, | |
1073 NULL, | |
1074 copy_opt, | |
1075 copy_opt, | |
1076 NULL, | |
1077 NULL | |
1078 }; | |
1079 | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1080 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1081 //// Objects (ie filters, etc) settings |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1082 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1083 #include "m_struct.h" |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1084 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1085 #undef VAL |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1086 #define VAL(x) (*(m_obj_settings_t**)(x)) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1087 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1088 static int find_obj_desc(char* name,m_obj_list_t* l,m_struct_t** ret) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1089 int i; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1090 char* n; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1091 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1092 for(i = 0 ; l->list[i] ; i++) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1093 n = M_ST_MB(char*,l->list[i],l->name_off); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1094 if(!strcmp(n,name)) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1095 *ret = M_ST_MB(m_struct_t*,l->list[i],l->desc_off); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1096 return 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1097 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1098 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1099 return 0; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1100 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1101 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1102 static int get_obj_param(char* opt_name,char* obj_name, m_struct_t* desc, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1103 char* str,int* nold,int oldmax,char** dst) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1104 char* eq,param; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1105 m_option_t* opt; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1106 int r; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1107 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1108 eq = strchr(str,'='); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1109 if(eq && eq == str) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1110 eq = NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1111 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1112 if(eq) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1113 char* p = eq + 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1114 if(p[0] == '\0') p = NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1115 eq[0] = '\0'; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1116 opt = m_option_list_find(desc->fields,str); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1117 if(!opt) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1118 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: %s doesn't have a %s parameter\n",opt_name,obj_name,str); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1119 return M_OPT_UNKNOW; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1120 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1121 r = m_option_parse(opt,str,p,NULL,M_CONFIG_FILE); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1122 if(r < 0) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1123 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: error while parsing %s parameter %s (%s)\n",opt_name,obj_name,str,p); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1124 eq[0] = '='; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1125 return r; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1126 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1127 if(dst) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1128 dst[0] = strdup(str); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1129 dst[1] = p ? strdup(p) : NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1130 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1131 eq[0] = '='; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1132 } else { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1133 if((*nold) >= oldmax) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1134 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: %s have only %d params, so yon can't give more than that unnamed params\n", |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1135 opt_name,obj_name,oldmax); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1136 return M_OPT_OUT_OF_RANGE; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1137 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1138 opt = &desc->fields[(*nold)]; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1139 r = m_option_parse(opt,opt->name,str,NULL,M_CONFIG_FILE); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1140 if(r < 0) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1141 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: error while parsing %s parameter %s (%s)\n",opt_name,obj_name,opt->name,str); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1142 return r; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1143 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1144 if(dst) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1145 dst[0] = strdup(opt->name); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1146 dst[1] = strdup(str); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1147 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1148 (*nold)++; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1149 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1150 return 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1151 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1152 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1153 static int get_obj_params(char* opt_name, char* name,char* params, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1154 m_struct_t* desc,char*** _ret) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1155 int n = 0,nold = 0, nopts,r; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1156 char* ptr,*last_ptr = params,*eq; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1157 char** ret; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1158 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1159 if(!strcmp(params,"help")) { // Help |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1160 char min[50],max[50]; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1161 if(!desc->fields) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1162 printf("%s doesn't have any options\n\n",name); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1163 //exit_player(); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1164 exit(0); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1165 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1166 printf("\n Name Type Min Max\n\n"); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1167 for(n = 0 ; desc->fields[n].name ; n++) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1168 m_option_t* opt = &desc->fields[n]; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1169 if(opt->type->flags & M_OPT_TYPE_HAS_CHILD) continue; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1170 if(opt->flags & M_OPT_MIN) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1171 sprintf(min,"%-8.0f",opt->min); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1172 else |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1173 strcpy(min,"No"); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1174 if(opt->flags & M_OPT_MAX) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1175 sprintf(max,"%-8.0f",opt->max); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1176 else |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1177 strcpy(max,"No"); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1178 printf(" %-20.20s %-15.15s %-10.10s %-10.10s\n", |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1179 opt->name, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1180 opt->type->name, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1181 min, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1182 max); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1183 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1184 printf("\n"); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1185 //exit_player() isn't avaible in mencoder |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1186 exit(0); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1187 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1188 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1189 for(nopts = 0 ; desc->fields[nopts].name ; nopts++) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1190 /* NOP */; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1191 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1192 // TODO : Check that each opt can be parsed |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1193 r = 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1194 while(last_ptr && last_ptr[0] != '\0') { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1195 ptr = strchr(last_ptr,':'); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1196 if(!ptr) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1197 r = get_obj_param(opt_name,name,desc,last_ptr,&nold,nopts,NULL); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1198 n++; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1199 break; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1200 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1201 ptr[0] = '\0'; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1202 r = get_obj_param(opt_name,name,desc,last_ptr,&nold,nopts,NULL); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1203 ptr[0] = ':'; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1204 if(r < 0) break; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1205 n++; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1206 last_ptr = ptr+1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1207 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1208 if(r < 0) return r; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1209 if(!_ret) // Just test |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1210 return 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1211 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1212 ret = malloc((n+2)*2*sizeof(char*)); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1213 n = nold = 0; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1214 last_ptr = params; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1215 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1216 while(last_ptr && last_ptr[0] != '\0') { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1217 ptr = strchr(last_ptr,':'); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1218 if(!ptr) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1219 get_obj_param(opt_name,name,desc,last_ptr,&nold,nopts,&ret[n*2]); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1220 n++; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1221 break; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1222 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1223 ptr[0] = '\0'; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1224 get_obj_param(opt_name,name,desc,last_ptr,&nold,nopts,&ret[n*2]); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1225 n++; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1226 last_ptr = ptr+1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1227 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1228 ret[n*2] = ret[n*2+1] = NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1229 *_ret = ret; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1230 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1231 return 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1232 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1233 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1234 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1235 static int parse_obj_settings(char* opt,char* str,m_obj_list_t* list, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1236 m_obj_settings_t **_ret, int ret_n) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1237 int r; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1238 char *param,**plist = NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1239 m_struct_t* desc; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1240 m_obj_settings_t *ret = _ret ? *_ret : NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1241 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1242 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1243 // Now check that the object exist |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1244 param = strchr(str,'='); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1245 if(param) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1246 param[0] = '\0'; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1247 param++; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1248 if(strlen(param) <= 0) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1249 param = NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1250 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1251 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1252 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1253 if(!find_obj_desc(str,list,&desc)) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1254 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: %s doesn't exist\n",opt,str); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1255 return M_OPT_INVALID; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1256 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1257 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1258 if(param) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1259 if(!desc && _ret) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1260 plist = calloc(4,sizeof(char*)); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1261 plist[0] = strdup("_oldargs_"); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1262 plist[1] = strdup(param); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1263 } else if(desc) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1264 r = get_obj_params(opt,str,param,desc,_ret ? &plist : NULL); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1265 if(r < 0) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1266 return r; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1267 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1268 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1269 if(!_ret) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1270 return 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1271 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1272 ret = realloc(ret,(ret_n+2)*sizeof(m_obj_settings_t)); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1273 memset(&ret[ret_n],0,2*sizeof(m_obj_settings_t)); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1274 ret[ret_n].name = strdup(str); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1275 ret[ret_n].attribs = plist; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1276 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1277 *_ret = ret; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1278 return 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1279 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1280 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1281 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1282 static int parse_obj_settings_list(m_option_t* opt,char *name, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1283 char *param, void* dst, int src) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1284 int n = 0,r; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1285 char *str; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1286 char *ptr, *last_ptr; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1287 m_obj_settings_t *res = NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1288 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1289 // We need the objects list |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1290 if(!opt->priv) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1291 return M_OPT_INVALID; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1292 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1293 if (param == NULL || strlen(param) == 0) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1294 return M_OPT_MISSING_PARAM; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1295 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1296 if(!strcmp(param,"help")) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1297 m_obj_list_t* ol = opt->priv; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1298 for(n = 0 ; ol->list[n] ; n++) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1299 mp_msg(MSGT_VFILTER,MSGL_INFO," %-15s: %s\n", |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1300 M_ST_MB(char*,ol->list[n],ol->name_off), |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1301 M_ST_MB(char*,ol->list[n],ol->info_off)); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1302 exit(0); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1303 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1304 ptr = str = strdup(param); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1305 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1306 while(ptr[0] != '\0') { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1307 last_ptr = ptr; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1308 ptr = strchr(ptr,LIST_SEPARATOR); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1309 if(!ptr) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1310 r = parse_obj_settings(name,last_ptr,opt->priv,dst ? &res : NULL,n); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1311 if(r < 0) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1312 free(str); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1313 return r; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1314 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1315 n++; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1316 break; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1317 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1318 ptr[0] = '\0'; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1319 r = parse_obj_settings(name,last_ptr,opt->priv,dst ? &res : NULL,n); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1320 if(r < 0) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1321 free(str); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1322 return r; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1323 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1324 ptr++; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1325 n++; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1326 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1327 free(str); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1328 if(n == 0) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1329 return M_OPT_INVALID; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1330 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1331 if( ((opt->flags & M_OPT_MIN) && (n < opt->min)) || |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1332 ((opt->flags & M_OPT_MAX) && (n > opt->max)) ) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1333 return M_OPT_OUT_OF_RANGE; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1334 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1335 if(dst) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1336 VAL(dst) = res; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1337 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1338 return 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1339 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1340 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1341 static void free_obj_settings_list(void* dst) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1342 int n; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1343 m_obj_settings_t *d; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1344 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1345 if(!dst || !VAL(dst)) return; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1346 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1347 d = VAL(dst); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1348 #ifndef NO_FREE |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1349 for(n = 0 ; d[n].name ; n++) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1350 free(d[n].name); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1351 free_str_list(&(d[n].attribs)); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1352 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1353 free(d); |
8164 | 1354 #endif |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1355 VAL(dst) = NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1356 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1357 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1358 static void copy_obj_settings_list(m_option_t* opt,void* dst, void* src) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1359 m_obj_settings_t *d,*s; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1360 int n; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1361 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1362 if(!(dst && src)) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1363 return; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1364 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1365 s = VAL(src); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1366 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1367 if(VAL(dst)) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1368 free_obj_settings_list(dst); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1369 if(!s) return; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1370 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1371 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1372 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1373 for(n = 0 ; s[n].name ; n++) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1374 /* NOP */; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1375 d = malloc((n+1)*sizeof(m_obj_settings_t)); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1376 for(n = 0 ; s[n].name ; n++) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1377 d[n].name = strdup(s[n].name); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1378 d[n].attribs = NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1379 copy_str_list(NULL,&(d[n].attribs),&(s[n].attribs)); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1380 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1381 d[n].name = d[n].attribs = NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1382 VAL(dst) = d; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1383 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1384 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1385 m_option_type_t m_option_type_obj_settings_list = { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1386 "Object settings list", |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1387 "", |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1388 sizeof(m_obj_settings_t*), |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1389 M_OPT_TYPE_DYNAMIC, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1390 parse_obj_settings_list, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1391 NULL, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1392 copy_obj_settings_list, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1393 copy_obj_settings_list, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1394 copy_obj_settings_list, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1395 free_obj_settings_list, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1396 }; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1397 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1398 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1399 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1400 static int parse_obj_presets(m_option_t* opt,char *name, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1401 char *param, void* dst, int src) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1402 m_obj_presets_t* obj_p = (m_obj_presets_t*)opt->priv; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1403 m_struct_t *in_desc,*out_desc; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1404 int s,i; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1405 unsigned char* pre = obj_p->presets; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1406 char* pre_name = NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1407 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1408 if(!obj_p) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1409 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: presets need a pointer to a m_obj_presets_t in the priv field\n",name); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1410 return M_OPT_PARSER_ERR; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1411 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1412 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1413 if(!param) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1414 return M_OPT_MISSING_PARAM; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1415 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1416 in_desc = obj_p->in_desc; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1417 out_desc = obj_p->out_desc ? obj_p->out_desc : obj_p->in_desc; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1418 s = in_desc->size; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1419 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1420 if(!strcmp(param,"help")) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1421 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "Avaible presets for %s->%s :",out_desc->name,name); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1422 for(pre = obj_p->presets;(pre_name = M_ST_MB(char*,pre,obj_p->name_off)) ; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1423 pre += s) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1424 mp_msg(MSGT_CFGPARSER, MSGL_ERR, " %s",pre_name); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1425 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "\n"); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1426 exit(0); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1427 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1428 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1429 for(pre_name = M_ST_MB(char*,pre,obj_p->name_off) ; pre_name ; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1430 pre += s, pre_name = M_ST_MB(char*,pre,obj_p->name_off)) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1431 if(!strcmp(pre_name,param)) break; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1432 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1433 if(!pre_name) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1434 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: there no preset named %s\n" |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1435 "Avaible presets are :",name,param); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1436 for(pre = obj_p->presets;(pre_name = M_ST_MB(char*,pre,obj_p->name_off)) ; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1437 pre += s) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1438 mp_msg(MSGT_CFGPARSER, MSGL_ERR, " %s",pre_name); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1439 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "\n"); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1440 return M_OPT_INVALID; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1441 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1442 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1443 if(!dst) return 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1444 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1445 for(i = 0 ; in_desc->fields[i].name ; i++) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1446 m_option_t* out_opt = m_option_list_find(out_desc->fields, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1447 in_desc->fields[i].name); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1448 if(!out_opt) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1449 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: unable to find the target option for field %s.\nYou should report that to the developpers\n",name,in_desc->fields[i].name); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1450 return M_OPT_PARSER_ERR; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1451 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1452 m_option_copy(out_opt,M_ST_MB_P(dst,out_opt->p),M_ST_MB_P(pre,in_desc->fields[i].p)); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1453 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1454 return 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1455 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1456 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1457 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1458 m_option_type_t m_option_type_obj_presets = { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1459 "Object presets", |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1460 "", |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1461 0, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1462 0, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1463 parse_obj_presets, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1464 NULL, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1465 NULL, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1466 NULL, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1467 NULL, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1468 NULL |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1469 }; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1470 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1471 #endif |