annotate m_option.c @ 18715:30d7ddf08889

Fix window position when changing videos while in fullscreen and for window managers that modify position on Map. Oked by Alexander Strasser.
author reimar
date Thu, 15 Jun 2006 08:00:37 +0000
parents 96568be4bfdc
children 7ef29a590f3f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18258
96568be4bfdc Doxygen attack!
albeu
parents: 18237
diff changeset
1
96568be4bfdc Doxygen attack!
albeu
parents: 18237
diff changeset
2 /// \file
96568be4bfdc Doxygen attack!
albeu
parents: 18237
diff changeset
3 /// \ingroup Options
96568be4bfdc Doxygen attack!
albeu
parents: 18237
diff changeset
4
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
5 #include "config.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
6
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
7 #include <stdlib.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
8 #include <string.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
9 #include <math.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
10 #include <stdio.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
11 #include <stdarg.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
12 #include <inttypes.h>
8262
103a2758f9c5 FreeBSD fix
nexus
parents: 8168
diff changeset
13 #include <unistd.h>
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
14
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
15 #include "m_option.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
16 //#include "m_config.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
17 #include "mp_msg.h"
11412
ec3dac7d17a0 Warning fixes (approved by A'rpi).
rathann
parents: 11261
diff changeset
18 #include "libmpdemux/url.h"
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
19
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
20 // 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
21 #ifndef MP_DEBUG
16425
7ca9d8c0ae47 Do not define NO_FREE, it causes a giant memleak with -loop 0 and a short file.
reimar
parents: 16345
diff changeset
22 //#define NO_FREE
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
23 #endif
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
24
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
25 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
26 int i;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
27
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
28 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
29 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
30 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
31 (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
32 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
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 } 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
35 return &list[i];
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 return NULL;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
38 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
39
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
40 // Default function that just does a memcpy
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
41
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
42 static void copy_opt(m_option_t* opt,void* dst,void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
43 if(dst && src)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
44 memcpy(dst,src,opt->type->size);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
45 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
46
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
47 // Helper for the print funcs (from man printf)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
48 static char* dup_printf(const char *fmt, ...) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
49 /* Guess we need no more than 50 bytes. */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
50 int n, size = 50;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
51 char *p;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
52 va_list ap;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
53 if ((p = malloc (size)) == NULL)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
54 return NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
55 while (1) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
56 /* Try to print in the allocated space. */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
57 va_start(ap, fmt);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
58 n = vsnprintf (p, size, fmt, ap);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
59 va_end(ap);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
60 /* If that worked, return the string. */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
61 if (n > -1 && n < size)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
62 return p;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
63 /* Else try again with more space. */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
64 if (n > -1) /* glibc 2.1 */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
65 size = n+1; /* precisely what is needed */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
66 else /* glibc 2.0 */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
67 size *= 2; /* twice the old size */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
68 if ((p = realloc (p, size)) == NULL)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
69 return NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
70 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
71 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
72
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
73
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
74 // Flag
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
75
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
76 #define VAL(x) (*(int*)(x))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
77
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
78 static int parse_flag(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
79 if (src == M_CONFIG_FILE) {
10355
b39a943c902f Fix the segfault in case of missing arg for flag options
albeu
parents: 10236
diff changeset
80 if(!param) return M_OPT_MISSING_PARAM;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
81 if (!strcasecmp(param, "yes") || /* any other language? */
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
82 !strcasecmp(param, "on") ||
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
83 !strcasecmp(param, "ja") ||
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
84 !strcasecmp(param, "si") ||
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
85 !strcasecmp(param, "igen") ||
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
86 !strcasecmp(param, "y") ||
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
87 !strcasecmp(param, "j") ||
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
88 !strcasecmp(param, "i") ||
11781
03baca2aa79c polish yes/no options support
wight
parents: 11771
diff changeset
89 !strcasecmp(param, "tak") ||
11785
3f488aa0d646 swedish yes/no options support
wight
parents: 11781
diff changeset
90 !strcasecmp(param, "ja") ||
12775
470c2e531d10 make config accept true/false as parameters
iive
parents: 12653
diff changeset
91 !strcasecmp(param, "true") ||
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
92 !strcmp(param, "1")) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
93 if(dst) VAL(dst) = opt->max;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
94 } else if (!strcasecmp(param, "no") ||
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
95 !strcasecmp(param, "off") ||
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
96 !strcasecmp(param, "nein") ||
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
97 !strcasecmp(param, "nicht") ||
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
98 !strcasecmp(param, "nem") ||
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
99 !strcasecmp(param, "n") ||
11781
03baca2aa79c polish yes/no options support
wight
parents: 11771
diff changeset
100 !strcasecmp(param, "nie") ||
11785
3f488aa0d646 swedish yes/no options support
wight
parents: 11781
diff changeset
101 !strcasecmp(param, "nej") ||
12775
470c2e531d10 make config accept true/false as parameters
iive
parents: 12653
diff changeset
102 !strcasecmp(param, "false") ||
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
103 !strcmp(param, "0")) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
104 if(dst) VAL(dst) = opt->min;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
105 } else {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
106 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Invalid parameter for %s flag: %s\n",name, param);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
107 return M_OPT_INVALID;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
108 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
109 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
110 } else {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
111 if(dst) VAL(dst) = opt->max;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
112 return 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
113 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
114 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
115
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
116 static char* print_flag(m_option_t* opt, void* val) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
117 if(VAL(val) == opt->min)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
118 return strdup("no");
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
119 else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
120 return strdup("yes");
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
121 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
122
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
123 m_option_type_t m_option_type_flag = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
124 "Flag",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
125 "need yes or no in config files",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
126 sizeof(int),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
127 0,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
128 parse_flag,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
129 print_flag,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
130 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
131 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
132 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
133 NULL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
134 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
135
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
136 // Integer
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
137
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
138 static int parse_int(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
139 long tmp_int;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
140 char *endptr;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
141 src = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
142
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
143 if (param == NULL)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
144 return M_OPT_MISSING_PARAM;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
145
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
146 tmp_int = strtol(param, &endptr, 0);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
147 if (*endptr) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
148 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be an integer: %s\n",name, param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
149 return M_OPT_INVALID;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
150 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
151
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
152 if ((opt->flags & M_OPT_MIN) && (tmp_int < opt->min)) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
153 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be >= %d: %s\n", name, (int) opt->min, param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
154 return M_OPT_OUT_OF_RANGE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
155 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
156
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
157 if ((opt->flags & M_OPT_MAX) && (tmp_int > opt->max)) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
158 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be <= %d: %s\n",name, (int) opt->max, param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
159 return M_OPT_OUT_OF_RANGE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
160 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
161
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
162 if(dst) VAL(dst) = tmp_int;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
163
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
164 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
165 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
166
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
167 static char* print_int(m_option_t* opt, void* val) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
168 opt = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
169 return dup_printf("%d",VAL(val));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
170 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
171
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
172 m_option_type_t m_option_type_int = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
173 "Integer",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
174 "",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
175 sizeof(int),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
176 0,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
177 parse_int,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
178 print_int,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
179 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
180 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
181 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
182 NULL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
183 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
184
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
185 // Float
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
186
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
187 #undef VAL
11947
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
188 #define VAL(x) (*(double*)(x))
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
189
11947
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
190 static int parse_double(m_option_t* opt,char *name, char *param, void* dst, int src) {
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
191 double tmp_float;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
192 char* endptr;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
193 src = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
194
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
195 if (param == NULL)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
196 return M_OPT_MISSING_PARAM;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
197
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
198 tmp_float = strtod(param, &endptr);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
199
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
200 switch(*endptr) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
201 case ':':
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
202 case '/':
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
203 tmp_float /= strtod(endptr+1, &endptr);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
204 break;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
205 case '.':
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
206 case ',':
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
207 /* we also handle floats specified with
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
208 * non-locale decimal point ::atmos
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
209 */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
210 if(tmp_float<0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
211 tmp_float -= 1.0/pow(10,strlen(endptr+1)) * strtod(endptr+1, &endptr);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
212 else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
213 tmp_float += 1.0/pow(10,strlen(endptr+1)) * strtod(endptr+1, &endptr);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
214 break;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
215 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
216
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
217 if (*endptr) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
218 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be a floating point "
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
219 "number or a ratio (numerator[:/]denominator): %s\n",name, param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
220 return M_OPT_INVALID;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
221 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
222
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
223 if (opt->flags & M_OPT_MIN)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
224 if (tmp_float < opt->min) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
225 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be >= %f: %s\n", name, opt->min, param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
226 return M_OPT_OUT_OF_RANGE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
227 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
228
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
229 if (opt->flags & M_OPT_MAX)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
230 if (tmp_float > opt->max) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
231 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be <= %f: %s\n", name, opt->max, param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
232 return M_OPT_OUT_OF_RANGE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
233 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
234
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
235 if(dst) VAL(dst) = tmp_float;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
236 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
237 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
238
11947
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
239 static char* print_double(m_option_t* opt, void* val) {
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
240 opt = NULL;
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
241 return dup_printf("%f",VAL(val));
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
242 }
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
243
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
244 m_option_type_t m_option_type_double = {
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
245 "Double",
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
246 "double precission floating point number or ratio (numerator[:/]denominator)",
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
247 sizeof(double),
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
248 0,
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
249 parse_double,
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
250 print_double,
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
251 copy_opt,
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
252 copy_opt,
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
253 NULL,
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
254 NULL
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
255 };
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
256
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
257 #undef VAL
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
258 #define VAL(x) (*(float*)(x))
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
259
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
260 static int parse_float(m_option_t* opt,char *name, char *param, void* dst, int src) {
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
261 double tmp;
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
262 int r= parse_double(opt, name, param, &tmp, src);
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
263 if(r==1 && dst) VAL(dst) = tmp;
11950
1d32c7c7355c 100l (cvs commit + tired ...)
michael
parents: 11947
diff changeset
264 return r;
11947
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
265 }
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
266
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
267 static char* print_float(m_option_t* opt, void* val) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
268 opt = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
269 return dup_printf("%f",VAL(val));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
270 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
271
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
272 m_option_type_t m_option_type_float = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
273 "Float",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
274 "floating point number or ratio (numerator[:/]denominator)",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
275 sizeof(float),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
276 0,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
277 parse_float,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
278 print_float,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
279 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
280 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
281 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
282 NULL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
283 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
284
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
285 ///////////// Position
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
286 #undef VAL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
287 #define VAL(x) (*(off_t*)(x))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
288
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
289 static int parse_position(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
290 off_t tmp_off;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
291 char dummy;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
292
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
293 if (param == NULL)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
294 return M_OPT_MISSING_PARAM;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
295 if (sscanf(param, sizeof(off_t) == sizeof(int) ?
16750
0a31740dd5e6 Use PRI?64 defines as format strings for 64 bit variables.
reimar
parents: 16741
diff changeset
296 "%d%c" : "%"PRId64"%c", &tmp_off, &dummy) != 1) {
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
297 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be an integer: %s\n",opt->name,param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
298 return M_OPT_INVALID;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
299 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
300
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
301 if (opt->flags & M_OPT_MIN)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
302 if (tmp_off < opt->min) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
303 mp_msg(MSGT_CFGPARSER, MSGL_ERR,
16750
0a31740dd5e6 Use PRI?64 defines as format strings for 64 bit variables.
reimar
parents: 16741
diff changeset
304 "The %s option must be >= %"PRId64": %s\n",
0a31740dd5e6 Use PRI?64 defines as format strings for 64 bit variables.
reimar
parents: 16741
diff changeset
305 name, (int64_t) opt->min, param);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
306 return M_OPT_OUT_OF_RANGE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
307 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
308
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
309 if (opt->flags & M_OPT_MAX)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
310 if (tmp_off > opt->max) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
311 mp_msg(MSGT_CFGPARSER, MSGL_ERR,
16750
0a31740dd5e6 Use PRI?64 defines as format strings for 64 bit variables.
reimar
parents: 16741
diff changeset
312 "The %s option must be <= %"PRId64": %s\n",
0a31740dd5e6 Use PRI?64 defines as format strings for 64 bit variables.
reimar
parents: 16741
diff changeset
313 name, (int64_t) opt->max, param);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
314 return M_OPT_OUT_OF_RANGE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
315 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
316
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
317 if(dst)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
318 VAL(dst) = tmp_off;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
319 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
320 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
321
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
322 static char* print_position(m_option_t* opt, void* val) {
16750
0a31740dd5e6 Use PRI?64 defines as format strings for 64 bit variables.
reimar
parents: 16741
diff changeset
323 return dup_printf("%"PRId64,(int64_t)VAL(val));
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
324 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
325
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
326 m_option_type_t m_option_type_position = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
327 "Position",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
328 "Integer (off_t)",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
329 sizeof(off_t),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
330 0,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
331 parse_position,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
332 print_position,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
333 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
334 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
335 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
336 NULL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
337 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
338
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
339
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
340 ///////////// String
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
341
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
342 #undef VAL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
343 #define VAL(x) (*(char**)(x))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
344
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
345 static int parse_str(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
346
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
347
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
348 if (param == NULL)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
349 return M_OPT_MISSING_PARAM;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
350
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
351 if ((opt->flags & M_OPT_MIN) && (strlen(param) < opt->min)) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
352 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Parameter must be >= %d chars: %s\n",
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
353 (int) opt->min, param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
354 return M_OPT_OUT_OF_RANGE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
355 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
356
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
357 if ((opt->flags & M_OPT_MAX) && (strlen(param) > opt->max)) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
358 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Parameter must be <= %d chars: %s\n",
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
359 (int) opt->max, param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
360 return M_OPT_OUT_OF_RANGE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
361 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
362
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
363 if(dst) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
364 if(VAL(dst))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
365 free(VAL(dst));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
366 VAL(dst) = strdup(param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
367 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
368
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
369 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
370
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
371 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
372
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
373 static char* print_str(m_option_t* opt, void* val) {
8168
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
374 return (val && VAL(val) && strlen(VAL(val)) > 0) ? strdup(VAL(val)) : NULL;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
375 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
376
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
377 static void copy_str(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
378 if(dst && src) {
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
379 #ifndef NO_FREE
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
380 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
381 #endif
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
382 VAL(dst) = VAL(src) ? strdup(VAL(src)) : NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
383 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
384 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
385
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
386 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
387 if(src && VAL(src)){
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
388 #ifndef NO_FREE
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
389 free(VAL(src)); //FIXME!!!
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
390 #endif
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
391 VAL(src) = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
392 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
393 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
394
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
395 m_option_type_t m_option_type_string = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
396 "String",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
397 "",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
398 sizeof(char*),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
399 M_OPT_TYPE_DYNAMIC,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
400 parse_str,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
401 print_str,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
402 copy_str,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
403 copy_str,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
404 copy_str,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
405 free_str
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
406 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
407
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
408 //////////// String list
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
409
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
410 #define LIST_SEPARATOR ','
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
411 #undef VAL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
412 #define VAL(x) (*(char***)(x))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
413
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
414 #define OP_NONE 0
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
415 #define OP_ADD 1
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
416 #define OP_PRE 2
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
417 #define OP_DEL 3
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
418 #define OP_CLR 4
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
419
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
420 static void free_str_list(void* dst) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
421 char** d;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
422 int i;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
423
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
424 if(!dst || !VAL(dst)) return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
425 d = VAL(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
426
9177
01a713dcaf23 disable free() in string and string_list parsers. yes, it's a hack
arpi
parents: 8736
diff changeset
427 // FIXME!!!
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
428 #ifndef NO_FREE
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
429 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
430 free(d[i]);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
431 free(d);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
432 #endif
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
433 VAL(dst) = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
434 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
435
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
436 static int str_list_add(char** add, int n,void* dst,int pre) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
437 char** lst = VAL(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
438 int ln;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
439
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
440 if(!dst) return M_OPT_PARSER_ERR;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
441 lst = VAL(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
442
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
443 for(ln = 0 ; lst && lst[ln] ; ln++)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
444 /**/;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
445
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
446 lst = realloc(lst,(n+ln+1)*sizeof(char*));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
447
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
448 if(pre) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
449 memmove(&lst[n],lst,(ln+1)*sizeof(char*));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
450 memcpy(lst,add,n*sizeof(char*));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
451 } else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
452 memcpy(&lst[ln],add,(n+1)*sizeof(char*));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
453
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
454 free(add);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
455
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
456 VAL(dst) = lst;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
457
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
458 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
459 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
460
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
461 static int str_list_del(char** del, int n,void* dst) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
462 char **lst,*ep,**d;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
463 int i,ln,s;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
464 long idx;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
465
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
466 if(!dst) return M_OPT_PARSER_ERR;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
467 lst = VAL(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
468
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
469 for(ln = 0 ; lst && lst[ln] ; ln++)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
470 /**/;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
471 s = ln;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
472
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
473 for(i = 0 ; del[i] != NULL ; i++) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
474 idx = strtol(del[i], &ep, 0);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
475 if(*ep) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
476 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Invalid index: %s\n",del[i]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
477 free(del[i]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
478 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
479 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
480 free(del[i]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
481 if(idx < 0 || idx >= ln) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
482 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Index %ld is out of range.\n",idx);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
483 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
484 } else if(!lst[idx])
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
485 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
486 free(lst[idx]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
487 lst[idx] = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
488 s--;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
489 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
490 free(del);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
491
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
492 if(s == 0) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
493 if(lst) free(lst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
494 VAL(dst) = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
495 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
496 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
497
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
498 d = calloc(s+1,sizeof(char*));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
499 for(i = 0, n = 0 ; i < ln ; i++) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
500 if(!lst[i]) continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
501 d[n] = lst[i];
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
502 n++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
503 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
504 d[s] = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
505
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
506 if(lst) free(lst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
507 VAL(dst) = d;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
508
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
509 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
510 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
511
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
512
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
513 static int parse_str_list(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
514 int n = 0,len = strlen(opt->name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
515 char *ptr = param, *last_ptr, **res;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
516 int op = OP_NONE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
517
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
518 if(opt->name[len-1] == '*' && ((int)strlen(name) > len - 1)) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
519 char* n = &name[len-1];
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
520 if(strcasecmp(n,"-add") == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
521 op = OP_ADD;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
522 else if(strcasecmp(n,"-pre") == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
523 op = OP_PRE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
524 else if(strcasecmp(n,"-del") == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
525 op = OP_DEL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
526 else if(strcasecmp(n,"-clr") == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
527 op = OP_CLR;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
528 else
10595
522afd56703c 100l to albeu for his english grammar, and 10l to me becouse I noticed that lately (my backward compatibilty macro uses M_OPT_UNKNOWN)
alex
parents: 10594
diff changeset
529 return M_OPT_UNKNOWN;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
530 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
531
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
532 // Clear the list ??
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
533 if(op == OP_CLR) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
534 if(dst)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
535 free_str_list(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
536 return 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
537 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
538
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
539 // All other ops need a param
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
540 if (param == NULL || strlen(param) == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
541 return M_OPT_MISSING_PARAM;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
542
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
543
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
544 while(ptr[0] != '\0') {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
545 last_ptr = ptr;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
546 ptr = strchr(ptr,LIST_SEPARATOR);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
547 if(!ptr) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
548 n++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
549 break;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
550 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
551 ptr++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
552 n++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
553 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
554 if(n == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
555 return M_OPT_INVALID;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
556 if( ((opt->flags & M_OPT_MIN) && (n < opt->min)) ||
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
557 ((opt->flags & M_OPT_MAX) && (n > opt->max)) )
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
558 return M_OPT_OUT_OF_RANGE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
559
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
560 if(!dst) return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
561
8384
7a7980b874f5 fixed 'mplayer -nosound xxx' sig11 if configfile have string list options
arpi
parents: 8262
diff changeset
562 res = malloc((n+2)*sizeof(char*));
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
563 ptr = param;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
564 n = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
565
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
566 while(1) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
567 last_ptr = ptr;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
568 ptr = strchr(ptr,LIST_SEPARATOR);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
569 if(!ptr) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
570 res[n] = strdup(last_ptr);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
571 n++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
572 break;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
573 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
574 len = ptr - last_ptr;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
575 res[n] = (char*)malloc(len + 1);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
576 if(len) strncpy(res[n],last_ptr,len);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
577 res[n][len] = '\0';
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
578 ptr++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
579 n++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
580 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
581 res[n] = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
582
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
583 switch(op) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
584 case OP_ADD:
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
585 return str_list_add(res,n,dst,0);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
586 case OP_PRE:
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
587 return str_list_add(res,n,dst,1);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
588 case OP_DEL:
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
589 return str_list_del(res,n,dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
590 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
591
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
592 if(VAL(dst))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
593 free_str_list(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
594 VAL(dst) = res;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
595
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
596 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
597 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
598
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
599 static void copy_str_list(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
600 int n;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
601 char **d,**s;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
602
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
603 if(!(dst && src)) return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
604 s = VAL(src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
605
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
606 if(VAL(dst))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
607 free_str_list(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
608
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
609 if(!s) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
610 VAL(dst) = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
611 return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
612 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
613
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
614 for(n = 0 ; s[n] != NULL ; n++)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
615 /* NOTHING */;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
616 d = (char**)malloc((n+1)*sizeof(char*));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
617 for( ; n >= 0 ; n--)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
618 d[n] = s[n] ? strdup(s[n]) : NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
619
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
620 VAL(dst) = d;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
621 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
622
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
623 static char* print_str_list(m_option_t* opt, void* src) {
8168
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
624 char **lst = NULL;
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
625 char *ret = NULL,*last = NULL;
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
626 int i;
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
627
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
628 if(!(src && VAL(src))) return NULL;
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
629 lst = VAL(src);
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
630
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
631 for(i = 0 ; lst[i] ; i++) {
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
632 if(last) {
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
633 ret = dup_printf("%s,%s",last,lst[i]);
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
634 free(last);
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
635 } else
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
636 ret = strdup(lst[i]);
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
637 last = ret;
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
638 }
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
639 if(last && last != ret) free(last);
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
640 return ret;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
641 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
642
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
643 m_option_type_t m_option_type_string_list = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
644 "String list",
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
645 "A list of strings separated by ','\n"
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
646 "Option with a name ending in an * permits using the following suffix: \n"
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
647 "\t-add: Add the given parameters at the end of the list.\n"
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
648 "\t-pre: Add the given parameters at the begining of the list.\n"
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
649 "\t-del: Remove the entry at the given indices.\n"
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
650 "\t-clr: Clear the list.\n"
11261
835822ce4bb1 -vop ---> -vf
diego
parents: 10746
diff changeset
651 "e.g: -vf-add flip,mirror -vf-del 2,5\n",
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
652 sizeof(char**),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
653 M_OPT_TYPE_DYNAMIC | M_OPT_TYPE_ALLOW_WILDCARD,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
654 parse_str_list,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
655 print_str_list,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
656 copy_str_list,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
657 copy_str_list,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
658 copy_str_list,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
659 free_str_list
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
660 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
661
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
662
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
663 /////////////////// Func based options
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
664
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
665 // A chained list to save the various calls for func_param and func_full
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
666 typedef struct m_func_save m_func_save_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
667 struct m_func_save {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
668 m_func_save_t* next;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
669 char* name;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
670 char* param;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
671 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
672
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
673 #undef VAL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
674 #define VAL(x) (*(m_func_save_t**)(x))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
675
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
676 static void free_func_pf(void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
677 m_func_save_t *s,*n;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
678
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
679 if(!src) return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
680
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
681 s = VAL(src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
682
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
683 while(s) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
684 n = s->next;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
685 free(s->name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
686 if(s->param) free(s->param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
687 free(s);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
688 s = n;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
689 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
690 VAL(src) = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
691 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
692
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
693 // Parser for func_param and func_full
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
694 static int parse_func_pf(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
695 m_func_save_t *s,*p;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
696
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
697 if(!dst)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
698 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
699
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
700 s = (m_func_save_t*)calloc(1,sizeof(m_func_save_t));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
701 s->name = strdup(name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
702 s->param = param ? strdup(param) : NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
703
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
704 p = VAL(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
705 if(p) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
706 for( ; p->next != NULL ; p = p->next)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
707 /**/;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
708 p->next = s;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
709 } else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
710 VAL(dst) = s;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
711
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
712 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
713 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
714
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
715 static void copy_func_pf(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
716 m_func_save_t *d = NULL, *s,* last = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
717
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
718 if(!(dst && src)) return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
719 s = VAL(src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
720
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
721 if(VAL(dst))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
722 free_func_pf(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
723
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
724 while(s) {
17667
8f036d112bb6 use calloc instead of malloc in copy_func_pf, missing initialization of
reimar
parents: 17470
diff changeset
725 d = (m_func_save_t*)calloc(1,sizeof(m_func_save_t));
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
726 d->name = strdup(s->name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
727 d->param = s->param ? strdup(s->param) : NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
728 if(last)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
729 last->next = d;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
730 else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
731 VAL(dst) = d;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
732 last = d;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
733 s = s->next;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
734 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
735
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
736
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
737 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
738
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
739 /////////////////// Func_param
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
740
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
741 static void set_func_param(m_option_t* opt, void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
742 m_func_save_t* s;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
743
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
744 if(!src) return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
745 s = VAL(src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
746
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
747 if(!s) return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
748
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
749 // Revert if needed
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
750 if(opt->priv) ((m_opt_default_func_t)opt->priv)(opt,opt->name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
751 for( ; s != NULL ; s = s->next)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
752 ((m_opt_func_param_t) opt->p)(opt,s->param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
753 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
754
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
755 m_option_type_t m_option_type_func_param = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
756 "Func param",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
757 "",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
758 sizeof(m_func_save_t*),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
759 M_OPT_TYPE_INDIRECT,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
760 parse_func_pf,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
761 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
762 NULL, // Nothing to do on save
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
763 set_func_param,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
764 copy_func_pf,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
765 free_func_pf
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
766 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
767
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
768 /////////////////// Func_full
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
769
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
770 static void set_func_full(m_option_t* opt, void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
771 m_func_save_t* s;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
772
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
773 if(!src) return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
774
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
775 for(s = VAL(src) ; s ; s = s->next) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
776 // Revert if needed
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
777 if(opt->priv) ((m_opt_default_func_t)opt->priv)(opt,s->name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
778 ((m_opt_func_full_t) opt->p)(opt,s->name,s->param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
779 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
780 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
781
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
782 m_option_type_t m_option_type_func_full = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
783 "Func full",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
784 "",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
785 sizeof(m_func_save_t*),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
786 M_OPT_TYPE_ALLOW_WILDCARD|M_OPT_TYPE_INDIRECT,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
787 parse_func_pf,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
788 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
789 NULL, // Nothing to do on save
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
790 set_func_full,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
791 copy_func_pf,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
792 free_func_pf
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
793 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
794
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
795 /////////////// Func
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
796
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
797 #undef VAL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
798 #define VAL(x) (*(int*)(x))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
799
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
800 static int parse_func(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
801 if(dst)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
802 VAL(dst) += 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
803 return 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
804 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
805
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
806 static void set_func(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
807 int i;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
808 if(opt->priv) ((m_opt_default_func_t)opt->priv)(opt,opt->name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
809 for(i = 0 ; i < VAL(src) ; i++)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
810 ((m_opt_func_t) opt->p)(opt);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
811 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
812
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
813 m_option_type_t m_option_type_func = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
814 "Func",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
815 "",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
816 sizeof(int),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
817 M_OPT_TYPE_INDIRECT,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
818 parse_func,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
819 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
820 NULL, // Nothing to do on save
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
821 set_func,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
822 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
823 NULL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
824 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
825
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
826 /////////////////// Print
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
827
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
828 static int parse_print(m_option_t* opt,char *name, char *param, void* dst, int src) {
17468
41d8991c3632 Fix misuse of the M_OPT_TYPE_INDIRECT flag, it has nothing to do
albeu
parents: 16854
diff changeset
829 if(opt->type == CONF_TYPE_PRINT_INDIRECT)
8736
michael
parents: 8384
diff changeset
830 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "%s", *(char **) opt->p);
17470
21123e349463 New option type to print help text with a function.
albeu
parents: 17468
diff changeset
831 else if(opt->type == CONF_TYPE_PRINT_FUNC)
21123e349463 New option type to print help text with a function.
albeu
parents: 17468
diff changeset
832 return ((m_opt_func_full_t) opt->p)(opt,name,param);
8736
michael
parents: 8384
diff changeset
833 else
michael
parents: 8384
diff changeset
834 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "%s", (char *) opt->p);
michael
parents: 8384
diff changeset
835
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
836 if(opt->priv == NULL)
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
837 return M_OPT_EXIT;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
838 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
839 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
840
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
841 m_option_type_t m_option_type_print = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
842 "Print",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
843 "",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
844 0,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
845 0,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
846 parse_print,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
847 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
848 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
849 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
850 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
851 NULL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
852 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
853
8736
michael
parents: 8384
diff changeset
854 m_option_type_t m_option_type_print_indirect = {
michael
parents: 8384
diff changeset
855 "Print",
michael
parents: 8384
diff changeset
856 "",
michael
parents: 8384
diff changeset
857 0,
17468
41d8991c3632 Fix misuse of the M_OPT_TYPE_INDIRECT flag, it has nothing to do
albeu
parents: 16854
diff changeset
858 0,
8736
michael
parents: 8384
diff changeset
859 parse_print,
michael
parents: 8384
diff changeset
860 NULL,
michael
parents: 8384
diff changeset
861 NULL,
michael
parents: 8384
diff changeset
862 NULL,
michael
parents: 8384
diff changeset
863 NULL,
michael
parents: 8384
diff changeset
864 NULL
michael
parents: 8384
diff changeset
865 };
michael
parents: 8384
diff changeset
866
17470
21123e349463 New option type to print help text with a function.
albeu
parents: 17468
diff changeset
867 m_option_type_t m_option_type_print_func = {
21123e349463 New option type to print help text with a function.
albeu
parents: 17468
diff changeset
868 "Print",
21123e349463 New option type to print help text with a function.
albeu
parents: 17468
diff changeset
869 "",
21123e349463 New option type to print help text with a function.
albeu
parents: 17468
diff changeset
870 0,
21123e349463 New option type to print help text with a function.
albeu
parents: 17468
diff changeset
871 M_OPT_TYPE_ALLOW_WILDCARD,
21123e349463 New option type to print help text with a function.
albeu
parents: 17468
diff changeset
872 parse_print,
21123e349463 New option type to print help text with a function.
albeu
parents: 17468
diff changeset
873 NULL,
21123e349463 New option type to print help text with a function.
albeu
parents: 17468
diff changeset
874 NULL,
21123e349463 New option type to print help text with a function.
albeu
parents: 17468
diff changeset
875 NULL,
21123e349463 New option type to print help text with a function.
albeu
parents: 17468
diff changeset
876 NULL,
21123e349463 New option type to print help text with a function.
albeu
parents: 17468
diff changeset
877 NULL
21123e349463 New option type to print help text with a function.
albeu
parents: 17468
diff changeset
878 };
21123e349463 New option type to print help text with a function.
albeu
parents: 17468
diff changeset
879
8736
michael
parents: 8384
diff changeset
880
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
881 /////////////////////// Subconfig
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
882 #undef VAL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
883 #define VAL(x) (*(char***)(x))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
884
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
885 static int parse_subconf(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
886 char *subparam;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
887 char *subopt;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
888 int nr = 0,i,r;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
889 m_option_t *subopts;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
890 char *p;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
891 char** lst = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
892
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
893 if (param == NULL || strlen(param) == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
894 return M_OPT_MISSING_PARAM;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
895
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
896 subparam = malloc(strlen(param)+1);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
897 subopt = malloc(strlen(param)+1);
16741
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
898 p = param;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
899
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
900 subopts = opt->p;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
901
16741
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
902 while(p[0])
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
903 {
16741
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
904 int sscanf_ret = 1;
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
905 int optlen = strcspn(p, ":=");
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
906 /* clear out */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
907 subopt[0] = subparam[0] = 0;
16854
3898e1089a29 fix incorrect use of strl* functions (patch by reimar)
rfelker
parents: 16750
diff changeset
908 strlcpy(subopt, p, optlen + 1);
16741
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
909 p = &p[optlen];
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
910 if (p[0] == '=') {
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
911 sscanf_ret = 2;
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
912 p = &p[1];
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
913 if (p[0] == '"') {
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
914 p = &p[1];
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
915 optlen = strcspn(p, "\"");
16854
3898e1089a29 fix incorrect use of strl* functions (patch by reimar)
rfelker
parents: 16750
diff changeset
916 strlcpy(subparam, p, optlen + 1);
16741
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
917 p = &p[optlen];
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
918 if (p[0] != '"') {
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
919 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Terminating '\"' missing for '%s'\n", subopt);
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
920 return M_OPT_INVALID;
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
921 }
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
922 p = &p[1];
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
923 } else if (p[0] == '%') {
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
924 p = &p[1];
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
925 optlen = (int)strtol(p, &p, 0);
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
926 if (!p || p[0] != '%' || (optlen > strlen(p) - 1)) {
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
927 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Invalid length %i for '%s'\n", optlen, subopt);
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
928 return M_OPT_INVALID;
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
929 }
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
930 p = &p[1];
16854
3898e1089a29 fix incorrect use of strl* functions (patch by reimar)
rfelker
parents: 16750
diff changeset
931 strlcpy(subparam, p, optlen + 1);
16741
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
932 p = &p[optlen];
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
933 } else {
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
934 optlen = strcspn(p, ":");
16854
3898e1089a29 fix incorrect use of strl* functions (patch by reimar)
rfelker
parents: 16750
diff changeset
935 strlcpy(subparam, p, optlen + 1);
16741
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
936 p = &p[optlen];
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
937 }
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
938 }
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
939 if (p[0] == ':')
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
940 p = &p[1];
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
941 else if (p[0]) {
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
942 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Incorrect termination for '%s'\n", subopt);
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
943 return M_OPT_INVALID;
ec4a53c1c40b Add support for suboption escaping via both "" and %n%str syntax
reimar
parents: 16425
diff changeset
944 }
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
945
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
946 switch(sscanf_ret)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
947 {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
948 case 1:
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
949 subparam[0] = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
950 case 2:
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
951 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
952 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
953 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
954 if(!subopts[i].name) {
10397
6180d7558f75 output typo fixes: unknow --> unknown
diego
parents: 10355
diff changeset
955 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Unknown suboption %s\n",name,subopt);
10595
522afd56703c 100l to albeu for his english grammar, and 10l to me becouse I noticed that lately (my backward compatibilty macro uses M_OPT_UNKNOWN)
alex
parents: 10594
diff changeset
956 return M_OPT_UNKNOWN;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
957 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
958 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
959 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
960 if(r < 0) return r;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
961 if(dst) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
962 lst = (char**)realloc(lst,2 * (nr+2) * sizeof(char*));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
963 lst[2*nr] = strdup(subopt);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
964 lst[2*nr+1] = subparam[0] == 0 ? NULL : strdup(subparam);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
965 memset(&lst[2*(nr+1)],0,2*sizeof(char*));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
966 nr++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
967 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
968 break;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
969 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
970 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
971
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
972 free(subparam);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
973 free(subopt);
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
974 if(dst)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
975 VAL(dst) = lst;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
976
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
977 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
978 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
979
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
980 m_option_type_t m_option_type_subconfig = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
981 "Subconfig",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
982 "The syntax is -option opt1=foo:flag:opt2=blah",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
983 sizeof(int),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
984 M_OPT_TYPE_HAS_CHILD,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
985 parse_subconf,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
986 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
987 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
988 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
989 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
990 NULL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
991 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
992
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
993 #include "libmpcodecs/img_format.h"
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
994
10746
0e5e55232e9d added nv12/nv21 and some other fourccs (still not synced)
alex
parents: 10660
diff changeset
995 /* FIXME: snyc with img_format.h */
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
996 static struct {
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
997 char* name;
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
998 unsigned int fmt;
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
999 } mp_imgfmt_list[] = {
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1000 {"444p", IMGFMT_444P},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1001 {"422p", IMGFMT_422P},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1002 {"411p", IMGFMT_411P},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1003 {"yuy2", IMGFMT_YUY2},
10746
0e5e55232e9d added nv12/nv21 and some other fourccs (still not synced)
alex
parents: 10660
diff changeset
1004 {"uyvy", IMGFMT_UYVY},
0e5e55232e9d added nv12/nv21 and some other fourccs (still not synced)
alex
parents: 10660
diff changeset
1005 {"yvu9", IMGFMT_YVU9},
0e5e55232e9d added nv12/nv21 and some other fourccs (still not synced)
alex
parents: 10660
diff changeset
1006 {"if09", IMGFMT_IF09},
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1007 {"yv12", IMGFMT_YV12},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1008 {"i420", IMGFMT_I420},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1009 {"iyuv", IMGFMT_IYUV},
10746
0e5e55232e9d added nv12/nv21 and some other fourccs (still not synced)
alex
parents: 10660
diff changeset
1010 {"clpl", IMGFMT_CLPL},
11688
c996b8da4ad0 10l. found by John Wehle <john@feith.com>
alex
parents: 11412
diff changeset
1011 {"hm12", IMGFMT_HM12},
10746
0e5e55232e9d added nv12/nv21 and some other fourccs (still not synced)
alex
parents: 10660
diff changeset
1012 {"y800", IMGFMT_Y800},
0e5e55232e9d added nv12/nv21 and some other fourccs (still not synced)
alex
parents: 10660
diff changeset
1013 {"y8", IMGFMT_Y8},
0e5e55232e9d added nv12/nv21 and some other fourccs (still not synced)
alex
parents: 10660
diff changeset
1014 {"nv12", IMGFMT_NV12},
0e5e55232e9d added nv12/nv21 and some other fourccs (still not synced)
alex
parents: 10660
diff changeset
1015 {"nv21", IMGFMT_NV21},
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1016 {"bgr24", IMGFMT_BGR24},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1017 {"bgr32", IMGFMT_BGR32},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1018 {"bgr16", IMGFMT_BGR16},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1019 {"bgr15", IMGFMT_BGR15},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1020 {"bgr8", IMGFMT_BGR8},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1021 {"bgr4", IMGFMT_BGR4},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1022 {"bg4b", IMGFMT_BG4B},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1023 {"bgr1", IMGFMT_BGR1},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1024 {"rgb24", IMGFMT_RGB24},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1025 {"rgb32", IMGFMT_RGB32},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1026 {"rgb16", IMGFMT_RGB16},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1027 {"rgb15", IMGFMT_RGB15},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1028 {"rgb8", IMGFMT_RGB8},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1029 {"rgb4", IMGFMT_RGB4},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1030 {"rg4b", IMGFMT_RG4B},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1031 {"rgb1", IMGFMT_RGB1},
12999
bc8cda64ad7f RGBA variants
michael
parents: 12775
diff changeset
1032 {"rgba", IMGFMT_RGBA},
bc8cda64ad7f RGBA variants
michael
parents: 12775
diff changeset
1033 {"argb", IMGFMT_ARGB},
bc8cda64ad7f RGBA variants
michael
parents: 12775
diff changeset
1034 {"bgra", IMGFMT_BGRA},
bc8cda64ad7f RGBA variants
michael
parents: 12775
diff changeset
1035 {"abgr", IMGFMT_ABGR},
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1036 { NULL, 0 }
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1037 };
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1038
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1039 static int parse_imgfmt(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1040 uint32_t fmt = 0;
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1041 int i;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1042
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1043 if (param == NULL || strlen(param) == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1044 return M_OPT_MISSING_PARAM;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1045
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1046 if(!strcmp(param,"help")) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1047 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "Available formats:");
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1048 for(i = 0 ; mp_imgfmt_list[i].name ; i++)
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1049 mp_msg(MSGT_CFGPARSER, MSGL_INFO, " %s",mp_imgfmt_list[i].name);
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1050 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "\n");
16345
feb16d0117c8 allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents: 15789
diff changeset
1051 return M_OPT_EXIT - 1;
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1052 }
10597
697688503349 CONF_TYPE_IMGFMT now supports 0xffffffff (hexa)-style fourccs too
alex
parents: 10595
diff changeset
1053
697688503349 CONF_TYPE_IMGFMT now supports 0xffffffff (hexa)-style fourccs too
alex
parents: 10595
diff changeset
1054 if (sscanf(param, "0x%x", &fmt) != 1)
697688503349 CONF_TYPE_IMGFMT now supports 0xffffffff (hexa)-style fourccs too
alex
parents: 10595
diff changeset
1055 {
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1056 for(i = 0 ; mp_imgfmt_list[i].name ; i++) {
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1057 if(!strcasecmp(param,mp_imgfmt_list[i].name)) {
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1058 fmt=mp_imgfmt_list[i].fmt;
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1059 break;
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1060 }
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1061 }
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1062 if(!mp_imgfmt_list[i].name) {
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1063 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: unknown format name: '%s'\n",name,param);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1064 return M_OPT_INVALID;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1065 }
10597
697688503349 CONF_TYPE_IMGFMT now supports 0xffffffff (hexa)-style fourccs too
alex
parents: 10595
diff changeset
1066 }
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1067
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1068 if(dst)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1069 *((uint32_t*)dst) = fmt;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1070
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1071 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1072 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1073
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1074 m_option_type_t m_option_type_imgfmt = {
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1075 "Image format",
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1076 "Please report any missing colorspaces.",
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1077 sizeof(uint32_t),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1078 0,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1079 parse_imgfmt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1080 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1081 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1082 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1083 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1084 NULL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1085 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1086
14246
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1087 #include "libaf/af_format.h"
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1088
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1089 /* FIXME: snyc with af_format.h */
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1090 static struct {
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1091 char* name;
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1092 unsigned int fmt;
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1093 } mp_afmt_list[] = {
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1094 // SPECIAL
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1095 {"mulaw", AF_FORMAT_MU_LAW},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1096 {"alaw", AF_FORMAT_A_LAW},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1097 {"mpeg2", AF_FORMAT_MPEG2},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1098 {"ac3", AF_FORMAT_AC3},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1099 {"imaadpcm", AF_FORMAT_IMA_ADPCM},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1100 // ORIDNARY
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1101 {"u8", AF_FORMAT_U8},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1102 {"s8", AF_FORMAT_S8},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1103 {"u16le", AF_FORMAT_U16_LE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1104 {"u16be", AF_FORMAT_U16_BE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1105 {"u16ne", AF_FORMAT_U16_NE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1106 {"s16le", AF_FORMAT_S16_LE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1107 {"s16be", AF_FORMAT_S16_BE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1108 {"s16ne", AF_FORMAT_S16_NE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1109 {"u24le", AF_FORMAT_U24_LE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1110 {"u24be", AF_FORMAT_U24_BE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1111 {"u24ne", AF_FORMAT_U24_NE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1112 {"s24le", AF_FORMAT_S24_LE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1113 {"s24be", AF_FORMAT_S24_BE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1114 {"s24ne", AF_FORMAT_S24_NE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1115 {"u32le", AF_FORMAT_U32_LE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1116 {"u32be", AF_FORMAT_U32_BE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1117 {"u32ne", AF_FORMAT_U32_NE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1118 {"s32le", AF_FORMAT_S32_LE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1119 {"s32be", AF_FORMAT_S32_BE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1120 {"s32ne", AF_FORMAT_S32_NE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1121 {"floatle", AF_FORMAT_FLOAT_LE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1122 {"floatbe", AF_FORMAT_FLOAT_BE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1123 {"floatne", AF_FORMAT_FLOAT_NE},
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1124 { NULL, 0 }
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1125 };
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1126
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1127 static int parse_afmt(m_option_t* opt,char *name, char *param, void* dst, int src) {
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1128 uint32_t fmt = 0;
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1129 int i;
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1130
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1131 if (param == NULL || strlen(param) == 0)
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1132 return M_OPT_MISSING_PARAM;
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1133
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1134 if(!strcmp(param,"help")) {
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1135 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "Available formats:");
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1136 for(i = 0 ; mp_afmt_list[i].name ; i++)
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1137 mp_msg(MSGT_CFGPARSER, MSGL_INFO, " %s",mp_afmt_list[i].name);
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1138 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "\n");
16345
feb16d0117c8 allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents: 15789
diff changeset
1139 return M_OPT_EXIT - 1;
14246
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1140 }
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1141
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1142 if (sscanf(param, "0x%x", &fmt) != 1)
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1143 {
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1144 for(i = 0 ; mp_afmt_list[i].name ; i++) {
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1145 if(!strcasecmp(param,mp_afmt_list[i].name)) {
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1146 fmt=mp_afmt_list[i].fmt;
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1147 break;
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1148 }
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1149 }
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1150 if(!mp_afmt_list[i].name) {
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1151 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: unknown format name: '%s'\n",name,param);
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1152 return M_OPT_INVALID;
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1153 }
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1154 }
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1155
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1156 if(dst)
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1157 *((uint32_t*)dst) = fmt;
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1158
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1159 return 1;
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1160 }
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1161
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1162 m_option_type_t m_option_type_afmt = {
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1163 "Audio format",
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1164 "Please report any missing formats.",
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1165 sizeof(uint32_t),
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1166 0,
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1167 parse_afmt,
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1168 NULL,
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1169 copy_opt,
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1170 copy_opt,
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1171 NULL,
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1172 NULL
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1173 };
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1174
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 14085
diff changeset
1175
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1176 //// Objects (i.e. filters, etc) settings
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1177
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1178 #include "m_struct.h"
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1179
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1180 #undef VAL
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1181 #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
1182
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1183 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
1184 int i;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1185 char* n;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1186
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1187 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
1188 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
1189 if(!strcmp(n,name)) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1190 *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
1191 return 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1192 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1193 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1194 return 0;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1195 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1196
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1197 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
1198 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
1199 char* eq,param;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1200 m_option_t* opt;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1201 int r;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1202
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1203 eq = strchr(str,'=');
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1204 if(eq && eq == str)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1205 eq = NULL;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1206
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1207 if(eq) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1208 char* p = eq + 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1209 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
1210 eq[0] = '\0';
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1211 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
1212 if(!opt) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1213 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: %s doesn't have a %s parameter.\n",opt_name,obj_name,str);
10595
522afd56703c 100l to albeu for his english grammar, and 10l to me becouse I noticed that lately (my backward compatibilty macro uses M_OPT_UNKNOWN)
alex
parents: 10594
diff changeset
1214 return M_OPT_UNKNOWN;
9593
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 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
1217 if(r < 0) {
17874
1973600f8f3e Small fix with object list (-vf) help.
albeu
parents: 17727
diff changeset
1218 if(r > M_OPT_EXIT)
1973600f8f3e Small fix with object list (-vf) help.
albeu
parents: 17727
diff changeset
1219 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Error while parsing %s parameter %s (%s)\n",opt_name,obj_name,str,p);
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1220 eq[0] = '=';
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1221 return r;
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 if(dst) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1224 dst[0] = strdup(str);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1225 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
1226 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1227 eq[0] = '=';
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1228 } else {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1229 if((*nold) >= oldmax) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1230 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: %s has only %d params, so you can't give more than %d unnamed params.\n",
10660
8f168a4128c5 a 100l and another typo
diego
parents: 10641
diff changeset
1231 opt_name,obj_name,oldmax,oldmax);
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1232 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
1233 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1234 opt = &desc->fields[(*nold)];
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1235 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
1236 if(r < 0) {
17874
1973600f8f3e Small fix with object list (-vf) help.
albeu
parents: 17727
diff changeset
1237 if(r > M_OPT_EXIT)
1973600f8f3e Small fix with object list (-vf) help.
albeu
parents: 17727
diff changeset
1238 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Error while parsing %s parameter %s (%s)\n",opt_name,obj_name,opt->name,str);
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1239 return r;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1240 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1241 if(dst) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1242 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
1243 dst[1] = strdup(str);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1244 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1245 (*nold)++;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1246 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1247 return 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1248 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1249
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1250 static int get_obj_params(char* opt_name, char* name,char* params,
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1251 m_struct_t* desc,char separator, char*** _ret) {
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1252 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
1253 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
1254 char** ret;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1255
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1256 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
1257 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
1258 if(!desc->fields) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1259 printf("%s doesn't have any options.\n\n",name);
16345
feb16d0117c8 allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents: 15789
diff changeset
1260 return M_OPT_EXIT - 1;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1261 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1262 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
1263 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
1264 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
1265 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
1266 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
1267 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
1268 else
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1269 strcpy(min,"No");
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1270 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
1271 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
1272 else
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1273 strcpy(max,"No");
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1274 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
1275 opt->name,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1276 opt->type->name,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1277 min,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1278 max);
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 printf("\n");
16345
feb16d0117c8 allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents: 15789
diff changeset
1281 return M_OPT_EXIT - 1;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1282 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1283
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1284 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
1285 /* NOP */;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1286
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1287 // 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
1288 r = 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1289 while(last_ptr && last_ptr[0] != '\0') {
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1290 ptr = strchr(last_ptr,separator);
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1291 if(!ptr) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1292 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
1293 n++;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1294 break;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1295 }
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1296 if(ptr == last_ptr) { // Empty field, count it and go on
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1297 nold++;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1298 last_ptr = ptr+1;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1299 continue;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1300 }
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1301 ptr[0] = '\0';
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1302 r = get_obj_param(opt_name,name,desc,last_ptr,&nold,nopts,NULL);
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1303 ptr[0] = separator;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1304 if(r < 0) break;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1305 n++;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1306 last_ptr = ptr+1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1307 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1308 if(r < 0) return r;
15743
c06986fbf819 Fix crash with e.g. -vf scale=::
reimar
parents: 15460
diff changeset
1309 if (!last_ptr[0]) // count an empty field at the end, too
c06986fbf819 Fix crash with e.g. -vf scale=::
reimar
parents: 15460
diff changeset
1310 nold++;
c06986fbf819 Fix crash with e.g. -vf scale=::
reimar
parents: 15460
diff changeset
1311 if (nold > nopts) {
c06986fbf819 Fix crash with e.g. -vf scale=::
reimar
parents: 15460
diff changeset
1312 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Too many options for %s\n", name);
c06986fbf819 Fix crash with e.g. -vf scale=::
reimar
parents: 15460
diff changeset
1313 return M_OPT_OUT_OF_RANGE;
c06986fbf819 Fix crash with e.g. -vf scale=::
reimar
parents: 15460
diff changeset
1314 }
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1315 if(!_ret) // Just test
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1316 return 1;
15743
c06986fbf819 Fix crash with e.g. -vf scale=::
reimar
parents: 15460
diff changeset
1317 if (n == 0) // No options or only empty options
c06986fbf819 Fix crash with e.g. -vf scale=::
reimar
parents: 15460
diff changeset
1318 return 1;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1319
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1320 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
1321 n = nold = 0;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1322 last_ptr = params;
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 while(last_ptr && last_ptr[0] != '\0') {
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1325 ptr = strchr(last_ptr,separator);
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1326 if(!ptr) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1327 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
1328 n++;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1329 break;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1330 }
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1331 if(ptr == last_ptr) { // Empty field, count it and go on
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1332 last_ptr = ptr+1;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1333 nold++;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1334 continue;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1335 }
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1336 ptr[0] = '\0';
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1337 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
1338 n++;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1339 last_ptr = ptr+1;
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 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
1342 *_ret = ret;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1343
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1344 return 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1345 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1346
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1347 static int parse_obj_params(m_option_t* opt,char *name,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1348 char *param, void* dst, int src) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1349 char** opts;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1350 int r;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1351 m_obj_params_t* p = opt->priv;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1352 m_struct_t* desc = p->desc;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1353 char* cpy = strdup(param);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1354
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1355 // We need the object desc
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1356 if(!p)
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1357 return M_OPT_INVALID;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1358
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1359 r = get_obj_params(name,desc->name,cpy,desc,p->separator,&opts);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1360 free(cpy);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1361 if(r < 0)
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1362 return r;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1363 if(!dst)
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1364 return 1;
15743
c06986fbf819 Fix crash with e.g. -vf scale=::
reimar
parents: 15460
diff changeset
1365 if (!opts) // no arguments given
c06986fbf819 Fix crash with e.g. -vf scale=::
reimar
parents: 15460
diff changeset
1366 return 1;
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1367
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1368 for(r = 0 ; opts[r] ; r += 2)
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1369 m_struct_set(desc,dst,opts[r],opts[r+1]);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1370
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1371 return 1;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1372 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1373
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1374
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1375 m_option_type_t m_option_type_obj_params = {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1376 "Object params",
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1377 "",
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1378 0,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1379 0,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1380 parse_obj_params,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1381 NULL,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1382 NULL,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1383 NULL,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1384 NULL,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1385 NULL
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1386 };
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1387
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1388 /// Some predefined types as a definition would be quite lengthy
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1389
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1390 /// Span arguments
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1391 static m_span_t m_span_params_dflts = { -1, -1 };
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1392 static m_option_t m_span_params_fields[] = {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1393 {"start", M_ST_OFF(m_span_t,start), CONF_TYPE_INT, M_OPT_MIN, 1 ,0, NULL},
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1394 {"end", M_ST_OFF(m_span_t,end), CONF_TYPE_INT, M_OPT_MIN , 1 ,0, NULL},
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1395 { NULL, NULL, 0, 0, 0, 0, NULL }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1396 };
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1397 static struct m_struct_st m_span_opts = {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1398 "m_span",
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1399 sizeof(m_span_t),
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1400 &m_span_params_dflts,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1401 m_span_params_fields
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1402 };
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1403 m_obj_params_t m_span_params_def = {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1404 &m_span_opts,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1405 '-'
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1406 };
9593
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 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
1409 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
1410 int r;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1411 char *param,**plist = NULL;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1412 m_struct_t* desc;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1413 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
1414
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1415
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1416 // Now check that the object exists
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1417 param = strchr(str,'=');
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1418 if(param) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1419 param[0] = '\0';
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1420 param++;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1421 if(strlen(param) <= 0)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1422 param = NULL;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1423 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1424
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1425
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1426 if(!find_obj_desc(str,list,&desc)) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1427 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: %s doesn't exist.\n",opt,str);
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1428 return M_OPT_INVALID;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1429 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1430
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1431 if(param) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1432 if(!desc && _ret) {
17874
1973600f8f3e Small fix with object list (-vf) help.
albeu
parents: 17727
diff changeset
1433 if(!strcmp(param,"help")) {
1973600f8f3e Small fix with object list (-vf) help.
albeu
parents: 17727
diff changeset
1434 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "Option %s: %s have no option description.\n",opt,str);
1973600f8f3e Small fix with object list (-vf) help.
albeu
parents: 17727
diff changeset
1435 return M_OPT_EXIT - 1;
1973600f8f3e Small fix with object list (-vf) help.
albeu
parents: 17727
diff changeset
1436 }
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1437 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
1438 plist[0] = strdup("_oldargs_");
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1439 plist[1] = strdup(param);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1440 } else if(desc) {
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1441 r = get_obj_params(opt,str,param,desc,':',_ret ? &plist : NULL);
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1442 if(r < 0)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1443 return r;
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 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1446 if(!_ret)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1447 return 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1448
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1449 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
1450 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
1451 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
1452 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
1453
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1454 *_ret = ret;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1455 return 1;
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
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1458 static void free_obj_settings_list(void* dst);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1459
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1460 static int obj_settings_list_del(char *opt_name,char *param,void* dst, int src) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1461 char** str_list = NULL;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1462 int r,i,idx_max = 0;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1463 char* rem_id = "_removed_marker_";
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1464 m_option_t list_opt = {opt_name , NULL, CONF_TYPE_STRING_LIST,
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1465 0, 0, 0, NULL };
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1466 m_obj_settings_t* obj_list = dst ? VAL(dst) : NULL;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1467
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1468 if(dst && !obj_list) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1469 mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option %s: the list is empty.\n",opt_name);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1470 return 1;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1471 } else if(obj_list) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1472 for(idx_max = 0 ; obj_list[idx_max].name != NULL ; idx_max++)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1473 /* NOP */;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1474 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1475
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1476 r = m_option_parse(&list_opt,opt_name,param,&str_list,src);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1477 if(r < 0 || !str_list)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1478 return r;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1479
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1480 for(r = 0 ; str_list[r] ; r++) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1481 int id;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1482 char* endptr;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1483 id = strtol(str_list[r],&endptr,0);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1484 if(endptr == str_list[r]) {
10660
8f168a4128c5 a 100l and another typo
diego
parents: 10641
diff changeset
1485 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: invalid parameter. We need a list of integers which are the indices of the elements to remove.\n",opt_name);
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1486 m_option_free(&list_opt,&str_list);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1487 return M_OPT_INVALID;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1488 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1489 if(!obj_list) continue;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1490 if(id >= idx_max || id < -idx_max) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1491 mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option %s: Index %d is out of range.\n",opt_name,id);
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1492 continue;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1493 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1494 if(id < 0)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1495 id = idx_max + id;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1496 free(obj_list[id].name);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1497 free_str_list(&(obj_list[id].attribs));
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1498 obj_list[id].name = rem_id;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1499 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1500
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1501 if(!dst) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1502 m_option_free(&list_opt,&str_list);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1503 return 1;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1504 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1505
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1506 for(i = 0 ; obj_list[i].name ; i++) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1507 while(obj_list[i].name == rem_id) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1508 memmove(&obj_list[i],&obj_list[i+1],sizeof(m_obj_settings_t)*(idx_max - i));
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1509 idx_max--;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1510 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1511 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1512 obj_list = realloc(obj_list,sizeof(m_obj_settings_t)*(idx_max+1));
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1513 VAL(dst) = obj_list;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1514
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1515 return 1;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1516 }
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1517
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1518 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
1519 char *param, void* dst, int src) {
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1520 int n = 0,r,len = strlen(opt->name);
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1521 char *str;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1522 char *ptr, *last_ptr;
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1523 m_obj_settings_t *res = NULL,*queue = NULL,*head = NULL;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1524 int op = OP_NONE;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1525
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1526 // 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
1527 if(!opt->priv)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1528 return M_OPT_INVALID;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1529
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1530 if(opt->name[len-1] == '*' && ((int)strlen(name) > len - 1)) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1531 char* n = &name[len-1];
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1532 if(strcasecmp(n,"-add") == 0)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1533 op = OP_ADD;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1534 else if(strcasecmp(n,"-pre") == 0)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1535 op = OP_PRE;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1536 else if(strcasecmp(n,"-del") == 0)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1537 op = OP_DEL;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1538 else if(strcasecmp(n,"-clr") == 0)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1539 op = OP_CLR;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1540 else {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1541 char prefix[len];
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1542 strncpy(prefix,opt->name,len-1);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1543 prefix[len-1] = '\0';
10608
2cae82f2ab02 Spelling police:
diego
parents: 10597
diff changeset
1544 mp_msg(MSGT_VFILTER,MSGL_ERR, "Option %s: unknown postfix %s\n"
2cae82f2ab02 Spelling police:
diego
parents: 10597
diff changeset
1545 "Supported postfixes are:\n"
12653
b40f21d9a43c degccify
alex
parents: 11950
diff changeset
1546 " %s-add\n"
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1547 " Append the given list to the current list\n\n"
12653
b40f21d9a43c degccify
alex
parents: 11950
diff changeset
1548 " %s-pre\n"
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1549 " Prepend the given list to the current list\n\n"
12653
b40f21d9a43c degccify
alex
parents: 11950
diff changeset
1550 " %s-del x,y,...\n"
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1551 " Remove the given elements. Take the list element index (starting from 0).\n"
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1552 " Negative index can be used (i.e. -1 is the last element)\n\n"
12653
b40f21d9a43c degccify
alex
parents: 11950
diff changeset
1553 " %s-clr\n"
b40f21d9a43c degccify
alex
parents: 11950
diff changeset
1554 " Clear the current list.\n",name,n,prefix,prefix,prefix,prefix);
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1555
10595
522afd56703c 100l to albeu for his english grammar, and 10l to me becouse I noticed that lately (my backward compatibilty macro uses M_OPT_UNKNOWN)
alex
parents: 10594
diff changeset
1556 return M_OPT_UNKNOWN;
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1557 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1558 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1559
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1560 // Clear the list ??
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1561 if(op == OP_CLR) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1562 if(dst)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1563 free_obj_settings_list(dst);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1564 return 0;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1565 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1566
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1567 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
1568 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
1569
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1570 switch(op) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1571 case OP_ADD:
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1572 if(dst) head = VAL(dst);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1573 break;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1574 case OP_PRE:
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1575 if(dst) queue = VAL(dst);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1576 break;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1577 case OP_DEL:
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1578 return obj_settings_list_del(name,param,dst,src);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1579 case OP_NONE:
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1580 if(dst && VAL(dst))
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1581 free_obj_settings_list(dst);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1582 break;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1583 default:
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1584 mp_msg(MSGT_VFILTER,MSGL_ERR, "Option %s: FIXME\n",name);
10595
522afd56703c 100l to albeu for his english grammar, and 10l to me becouse I noticed that lately (my backward compatibilty macro uses M_OPT_UNKNOWN)
alex
parents: 10594
diff changeset
1585 return M_OPT_UNKNOWN;
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1586 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1587
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1588 if(!strcmp(param,"help")) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1589 m_obj_list_t* ol = opt->priv;
14085
a56f68304ea2 Add "Available video filters:" line to -vf help.
diego
parents: 12999
diff changeset
1590 mp_msg(MSGT_VFILTER,MSGL_INFO,"Available video filters:\n");
18237
4231482179b6 Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents: 17874
diff changeset
1591 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FILTERS\n");
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1592 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
1593 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
1594 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
1595 M_ST_MB(char*,ol->list[n],ol->info_off));
17727
096cb1dfb591 Make -xy help output consistent, output an empty line before and after.
diego
parents: 17667
diff changeset
1596 mp_msg(MSGT_VFILTER,MSGL_INFO,"\n");
16345
feb16d0117c8 allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents: 15789
diff changeset
1597 return M_OPT_EXIT - 1;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1598 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1599 ptr = str = strdup(param);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1600
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1601 while(ptr[0] != '\0') {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1602 last_ptr = ptr;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1603 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
1604 if(!ptr) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1605 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
1606 if(r < 0) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1607 free(str);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1608 return r;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1609 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1610 n++;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1611 break;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1612 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1613 ptr[0] = '\0';
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1614 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
1615 if(r < 0) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1616 free(str);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1617 return r;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1618 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1619 ptr++;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1620 n++;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1621 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1622 free(str);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1623 if(n == 0)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1624 return M_OPT_INVALID;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1625
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1626 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
1627 ((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
1628 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
1629
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1630 if(dst) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1631 if(queue) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1632 int qsize;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1633 for(qsize = 0 ; queue[qsize].name ; qsize++)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1634 /* NOP */;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1635 res = realloc(res,(qsize+n+1)*sizeof(m_obj_settings_t));
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1636 memcpy(&res[n],queue,(qsize+1)*sizeof(m_obj_settings_t));
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1637 n += qsize;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1638 free(queue);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1639 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1640 if(head) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1641 int hsize;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1642 for(hsize = 0 ; head[hsize].name ; hsize++)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1643 /* NOP */;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1644 head = realloc(head,(hsize+n+1)*sizeof(m_obj_settings_t));
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1645 memcpy(&head[hsize],res,(n+1)*sizeof(m_obj_settings_t));
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1646 free(res);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1647 res = head;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1648 }
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1649 VAL(dst) = res;
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1650 }
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1651 return 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1652 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1653
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1654 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
1655 int n;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1656 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
1657
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1658 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
1659
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1660 d = VAL(dst);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1661 #ifndef NO_FREE
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1662 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
1663 free(d[n].name);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1664 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
1665 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1666 free(d);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1667 #endif
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1668 VAL(dst) = NULL;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1669 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1670
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1671 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
1672 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
1673 int n;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1674
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1675 if(!(dst && src))
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1676 return;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1677
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1678 s = VAL(src);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1679
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1680 if(VAL(dst))
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1681 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
1682 if(!s) return;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1683
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1684
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1685
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1686 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
1687 /* NOP */;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1688 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
1689 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
1690 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
1691 d[n].attribs = NULL;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1692 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
1693 }
10236
4640f25fef12 warning fixes by Dominik
alex
parents: 9913
diff changeset
1694 d[n].name = NULL;
4640f25fef12 warning fixes by Dominik
alex
parents: 9913
diff changeset
1695 d[n].attribs = NULL;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1696 VAL(dst) = d;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1697 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1698
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1699 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
1700 "Object settings list",
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1701 "",
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1702 sizeof(m_obj_settings_t*),
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1703 M_OPT_TYPE_DYNAMIC|M_OPT_TYPE_ALLOW_WILDCARD,
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1704 parse_obj_settings_list,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1705 NULL,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1706 copy_obj_settings_list,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1707 copy_obj_settings_list,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1708 copy_obj_settings_list,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1709 free_obj_settings_list,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1710 };
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1711
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1712
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1713
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1714 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
1715 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
1716 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
1717 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
1718 int s,i;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1719 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
1720 char* pre_name = NULL;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1721
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1722 if(!obj_p) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1723 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Presets need a pointer to a m_obj_presets_t in the priv field.\n",name);
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1724 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
1725 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1726
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1727 if(!param)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1728 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
1729
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1730 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
1731 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
1732 s = in_desc->size;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1733
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1734 if(!strcmp(param,"help")) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1735 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "Available presets for %s->%s:",out_desc->name,name);
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1736 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
1737 pre += s)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1738 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
1739 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "\n");
16345
feb16d0117c8 allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents: 15789
diff changeset
1740 return M_OPT_EXIT - 1;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1741 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1742
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1743 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
1744 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
1745 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
1746 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1747 if(!pre_name) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1748 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: There is no preset named %s\n"
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1749 "Available presets are:",name,param);
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1750 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
1751 pre += s)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1752 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
1753 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
1754 return M_OPT_INVALID;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1755 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1756
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1757 if(!dst) return 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1758
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1759 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
1760 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
1761 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
1762 if(!out_opt) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1763 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Unable to find the target option for field %s.\nPlease report this to the developers.\n",name,in_desc->fields[i].name);
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1764 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
1765 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1766 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
1767 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1768 return 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1769 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1770
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1771
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1772 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
1773 "Object presets",
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1774 "",
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1775 0,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1776 0,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1777 parse_obj_presets,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1778 NULL,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1779 NULL,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1780 NULL,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1781 NULL,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1782 NULL
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1783 };
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1784
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1785 static int parse_custom_url(m_option_t* opt,char *name,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1786 char *url, void* dst, int src) {
11771
827cae571c5c Fix long standing bug where last (and sometimes first) char of the
albeu
parents: 11688
diff changeset
1787 int pos1, pos2, r, v6addr = 0;
827cae571c5c Fix long standing bug where last (and sometimes first) char of the
albeu
parents: 11688
diff changeset
1788 char *ptr1=NULL, *ptr2=NULL, *ptr3=NULL, *ptr4=NULL;
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1789 m_struct_t* desc = opt->priv;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1790
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1791 if(!desc) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1792 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Custom URL needs a pointer to a m_struct_t in the priv field.\n",name);
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1793 return M_OPT_PARSER_ERR;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1794 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1795
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1796 // extract the protocol
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1797 ptr1 = strstr(url, "://");
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1798 if( ptr1==NULL ) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1799 // Filename only
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1800 if(m_option_list_find(desc->fields,"filename")) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1801 m_struct_set(desc,dst,"filename",url);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1802 return 1;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1803 }
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1804 mp_msg(MSGT_CFGPARSER, MSGL_ERR,"Option %s: URL doesn't have a valid protocol!\n",name);
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1805 return M_OPT_INVALID;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1806 }
15460
fa8c3f5b7ec2 introduced -string- parameter to match everything after :// syntax
nicodvb
parents: 14246
diff changeset
1807 if(m_option_list_find(desc->fields,"string")) {
fa8c3f5b7ec2 introduced -string- parameter to match everything after :// syntax
nicodvb
parents: 14246
diff changeset
1808 if(strlen(ptr1)>3) {
fa8c3f5b7ec2 introduced -string- parameter to match everything after :// syntax
nicodvb
parents: 14246
diff changeset
1809 m_struct_set(desc,dst,"string",ptr1+3);
fa8c3f5b7ec2 introduced -string- parameter to match everything after :// syntax
nicodvb
parents: 14246
diff changeset
1810 return 1;
fa8c3f5b7ec2 introduced -string- parameter to match everything after :// syntax
nicodvb
parents: 14246
diff changeset
1811 }
fa8c3f5b7ec2 introduced -string- parameter to match everything after :// syntax
nicodvb
parents: 14246
diff changeset
1812 }
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1813 pos1 = ptr1-url;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1814 if(dst && m_option_list_find(desc->fields,"protocol")) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1815 ptr1[0] = '\0';
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1816 r = m_struct_set(desc,dst,"protocol",url);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1817 ptr1[0] = ':';
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1818 if(r < 0) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1819 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Error while setting protocol.\n",name);
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1820 return r;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1821 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1822 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1823
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1824 // jump the "://"
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1825 ptr1 += 3;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1826 pos1 += 3;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1827
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1828 // check if a username:password is given
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1829 ptr2 = strstr(ptr1, "@");
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1830 ptr3 = strstr(ptr1, "/");
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1831 if( ptr3!=NULL && ptr3<ptr2 ) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1832 // it isn't really a username but rather a part of the path
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1833 ptr2 = NULL;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1834 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1835 if( ptr2!=NULL ) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1836
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1837 // We got something, at least a username...
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1838 int len = ptr2-ptr1;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1839 if(!m_option_list_find(desc->fields,"username")) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1840 mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option %s: This URL doesn't have a username part.\n",name);
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1841 // skip
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1842 } else {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1843 ptr3 = strstr(ptr1, ":");
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1844 if( ptr3!=NULL && ptr3<ptr2 ) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1845 // We also have a password
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1846 int len2 = ptr2-ptr3-1;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1847 if(!m_option_list_find(desc->fields,"password")) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1848 mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option %s: This URL doesn't have a password part.\n",name);
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1849 // skip
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1850 } else { // Username and password
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1851 if(dst) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1852 ptr3[0] = '\0';
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1853 r = m_struct_set(desc,dst,"username",ptr1);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1854 ptr3[0] = ':';
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1855 if(r < 0) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1856 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Error while setting username.\n",name);
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1857 return r;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1858 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1859 ptr2[0] = '\0';
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1860 r = m_struct_set(desc,dst,"password",ptr3+1);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1861 ptr2[0] = '@';
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1862 if(r < 0) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1863 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Error while setting password.\n",name);
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1864 return r;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1865 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1866 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1867 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1868 } else { // User name only
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1869 ptr2[0] = '\0';
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1870 r = m_struct_set(desc,dst,"username",ptr1);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1871 ptr2[0] = '@';
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1872 if(r < 0) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1873 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Error while setting username.\n",name);
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1874 return r;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1875 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1876 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1877 }
10592
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1878 ptr1 = ptr2+1;
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1879 pos1 = ptr1-url;
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1880 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1881
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1882 // before looking for a port number check if we have an IPv6 type numeric address
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1883 // in an IPv6 URL the numeric address should be inside square braces.
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1884 ptr2 = strstr(ptr1, "[");
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1885 ptr3 = strstr(ptr1, "]");
11771
827cae571c5c Fix long standing bug where last (and sometimes first) char of the
albeu
parents: 11688
diff changeset
1886 // If the [] is after the first it isn't the hostname
827cae571c5c Fix long standing bug where last (and sometimes first) char of the
albeu
parents: 11688
diff changeset
1887 ptr4 = strstr(ptr1, "/");
827cae571c5c Fix long standing bug where last (and sometimes first) char of the
albeu
parents: 11688
diff changeset
1888 if( ptr2!=NULL && ptr3!=NULL && (ptr2 < ptr3) && (!ptr4 || ptr4 > ptr3)) {
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1889 // we have an IPv6 numeric address
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1890 ptr1++;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1891 pos1++;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1892 ptr2 = ptr3;
11771
827cae571c5c Fix long standing bug where last (and sometimes first) char of the
albeu
parents: 11688
diff changeset
1893 v6addr = 1;
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1894 } else {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1895 ptr2 = ptr1;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1896 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1897
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1898 // look if the port is given
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1899 ptr2 = strstr(ptr2, ":");
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1900 // If the : is after the first / it isn't the port
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1901 ptr3 = strstr(ptr1, "/");
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1902 if(ptr3 && ptr3 - ptr2 < 0) ptr2 = NULL;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1903 if( ptr2==NULL ) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1904 // No port is given
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1905 // Look if a path is given
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1906 if( ptr3==NULL ) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1907 // No path/filename
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1908 // So we have an URL like http://www.hostname.com
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1909 pos2 = strlen(url);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1910 } else {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1911 // We have an URL like http://www.hostname.com/file.txt
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1912 pos2 = ptr3-url;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1913 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1914 } else {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1915 // We have an URL beginning like http://www.hostname.com:1212
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1916 // Get the port number
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1917 if(!m_option_list_find(desc->fields,"port")) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1918 mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option %s: This URL doesn't have a port part.\n",name);
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1919 // skip
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1920 } else {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1921 if(dst) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1922 int p = atoi(ptr2+1);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1923 char tmp[100];
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1924 snprintf(tmp,99,"%d",p);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1925 r = m_struct_set(desc,dst,"port",tmp);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1926 if(r < 0) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1927 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Error while setting port.\n",name);
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1928 return r;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1929 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1930 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1931 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1932 pos2 = ptr2-url;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1933 }
11771
827cae571c5c Fix long standing bug where last (and sometimes first) char of the
albeu
parents: 11688
diff changeset
1934 if( v6addr ) pos2--;
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1935 // Get the hostname
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1936 if(pos2-pos1 > 0) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1937 if(!m_option_list_find(desc->fields,"hostname")) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1938 mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option %s: This URL doesn't have a hostname part.\n",name);
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1939 // skip
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1940 } else {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1941 char tmp[pos2-pos1+1];
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1942 strncpy(tmp,ptr1, pos2-pos1);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1943 tmp[pos2-pos1] = '\0';
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1944 r = m_struct_set(desc,dst,"hostname",tmp);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1945 if(r < 0) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1946 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Error while setting hostname.\n",name);
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1947 return r;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1948 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1949 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1950 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1951 // Look if a path is given
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1952 ptr2 = strstr(ptr1, "/");
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1953 if( ptr2!=NULL ) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1954 // A path/filename is given
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1955 // check if it's not a trailing '/'
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1956 if( strlen(ptr2)>1 ) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1957 // copy the path/filename in the URL container
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1958 if(!m_option_list_find(desc->fields,"filename")) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1959 mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option %s: This URL doesn't have a hostname part.\n",name);
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1960 // skip
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1961 } else {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1962 if(dst) {
10592
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1963 int l = strlen(ptr2+1) + 1;
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1964 char* fname = ptr2+1;
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1965 if(l > 1) {
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1966 fname = malloc(l);
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1967 url_unescape_string(fname,ptr2+1);
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1968 }
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1969 r = m_struct_set(desc,dst,"filename",fname);
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1970 if(fname != ptr2+1)
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1971 free(fname);
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1972 if(r < 0) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1973 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Error while setting filename.\n",name);
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1974 return r;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1975 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1976 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1977 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1978 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1979 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1980 return 1;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1981 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1982
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1983 /// TODO : Write the other needed funcs for 'normal' options
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1984 m_option_type_t m_option_type_custom_url = {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1985 "Custom URL",
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1986 "",
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1987 0,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1988 0,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1989 parse_custom_url,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1990 NULL,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1991 NULL,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1992 NULL,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1993 NULL,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1994 NULL
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1995 };