annotate m_config.c @ 24992:5701e23ebcb4

Better handling of win32 GUI thread: 1. Use _beginthreadex to create the GUI thread to avoid possible memory leak when linked to MS CRT. 2. Terminate the GUI thread in an cleaner way using PostThreadMessage() rather than the unrecommended TerminateThread().
author zuxy
date Sun, 11 Nov 2007 08:14:57 +0000
parents 09c2fe1e021d
children 51c23a18a17b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17856
diff changeset
1
96568be4bfdc Doxygen attack!
albeu
parents: 17856
diff changeset
2 /// \file
96568be4bfdc Doxygen attack!
albeu
parents: 17856
diff changeset
3 /// \ingroup Config
96568be4bfdc Doxygen attack!
albeu
parents: 17856
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 <stdio.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
9 #include <errno.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
10 #include <string.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
11 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
12 #include <assert.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
13 #endif
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_config.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
16 #include "m_option.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
17 #include "mp_msg.h"
13699
11b249ef87b0 printf --> mp_msg by the Wanderer <inverseparadox at comcast dot net>
diego
parents: 10595
diff changeset
18 #include "help_mp.h"
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
19
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
20 #define MAX_PROFILE_DEPTH 20
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
21
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
22 static int
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
23 parse_profile(m_option_t* opt,char *name, char *param, void* dst, int src);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
24
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
25 static void
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
26 set_profile(m_option_t *opt, void* dst, void* src);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
27
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
28 static int
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
29 show_profile(m_option_t *opt, char* name, char *param);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
30
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
31 static void
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
32 m_config_add_option(m_config_t *config, m_option_t *arg, char* prefix);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
33
17472
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
34 static int
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
35 list_options(m_option_t *opt, char* name, char *param);
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
36
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
37 m_config_t*
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
38 m_config_new(void) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
39 m_config_t* config;
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
40 static int inited = 0;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
41 static m_option_type_t profile_opt_type;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
42 static m_option_t ref_opts[] = {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
43 { "profile", NULL, &profile_opt_type, CONF_NOSAVE, 0, 0, NULL },
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
44 { "show-profile", show_profile, CONF_TYPE_PRINT_FUNC, CONF_NOCFG, 0, 0, NULL },
17472
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
45 { "list-options", list_options, CONF_TYPE_PRINT_FUNC, CONF_NOCFG, 0, 0, NULL },
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
46 { NULL, NULL, NULL, 0, 0, 0, NULL }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
47 };
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
48 int i;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
49
18879
cc65a585fdcc rm unnecesary casts from void* - part 3
reynaldo
parents: 18335
diff changeset
50 config = calloc(1,sizeof(m_config_t));
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
51 config->lvl = 1; // 0 Is the defaults
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
52 if(!inited) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
53 inited = 1;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
54 profile_opt_type = m_option_type_string_list;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
55 profile_opt_type.parse = parse_profile;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
56 profile_opt_type.set = set_profile;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
57 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
58 config->self_opts = malloc(sizeof(ref_opts));
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
59 memcpy(config->self_opts,ref_opts,sizeof(ref_opts));
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
60 for(i = 0 ; config->self_opts[i].name ; i++)
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
61 config->self_opts[i].priv = config;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
62 m_config_register_options(config,config->self_opts);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
63
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
64 return config;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
65 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
66
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
67 void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
68 m_config_free(m_config_t* config) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
69 m_config_option_t *i = config->opts, *ct;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
70 m_config_save_slot_t *sl,*st;
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
71 m_profile_t *p,*pn;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
72 int j;
8164
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 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
75 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
76 #endif
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 while(i) {
13824
bad703951cf9 a few 10l fixes by Wei Jiang <jiangw98@yahoo.com>
faust3
parents: 13699
diff changeset
79 if (i->flags & M_CFG_OPT_ALIAS)
bad703951cf9 a few 10l fixes by Wei Jiang <jiangw98@yahoo.com>
faust3
parents: 13699
diff changeset
80 sl = NULL;
bad703951cf9 a few 10l fixes by Wei Jiang <jiangw98@yahoo.com>
faust3
parents: 13699
diff changeset
81 else
bad703951cf9 a few 10l fixes by Wei Jiang <jiangw98@yahoo.com>
faust3
parents: 13699
diff changeset
82 sl = i->slots;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
83 while(sl) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
84 m_option_free(i->opt,sl->data);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
85 st = sl->prev;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
86 free(sl);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
87 sl = st;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
88 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
89 if(i->name != i->opt->name)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
90 free(i->name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
91 ct = i->next;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
92 free(i);
13824
bad703951cf9 a few 10l fixes by Wei Jiang <jiangw98@yahoo.com>
faust3
parents: 13699
diff changeset
93 i = ct;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
94 }
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
95 for(p = config->profiles ; p ; p = pn) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
96 pn = p->next;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
97 free(p->name);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
98 if(p->desc) free(p->desc);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
99 for(j = 0 ; j < p->num_opts ; j++) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
100 free(p->opts[2*j]);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
101 if(p->opts[2*j+1]) free(p->opts[2*j+1]);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
102 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
103 free(p->opts);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
104 free(p);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
105 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
106 free(config->self_opts);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
107 free(config);
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
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
110 void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
111 m_config_push(m_config_t* config) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
112 m_config_option_t *co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
113 m_config_save_slot_t *slot;
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 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
116 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
117 assert(config->lvl > 0);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
118 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
119
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
120 config->lvl++;
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 for(co = config->opts ; co ; co = co->next ) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
123 if(co->opt->type->flags & M_OPT_TYPE_HAS_CHILD)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
124 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
125 if(co->opt->flags & (M_OPT_GLOBAL|M_OPT_NOSAVE))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
126 continue;
21054
7d5035aafcc6 Fix obvious typo, although the exact effect is still unclear to me, see also bug #593.
reimar
parents: 18879
diff changeset
127 if((co->opt->flags & M_OPT_OLD) && !(co->flags & M_CFG_OPT_SET))
9912
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
128 continue;
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
129 if(co->flags & M_CFG_OPT_ALIAS)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
130 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
131
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
132 // Update the current status
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
133 m_option_save(co->opt,co->slots->data,co->opt->p);
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 // Allocate a new slot
18879
cc65a585fdcc rm unnecesary casts from void* - part 3
reynaldo
parents: 18335
diff changeset
136 slot = calloc(1,sizeof(m_config_save_slot_t) + co->opt->type->size);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
137 slot->lvl = config->lvl;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
138 slot->prev = co->slots;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
139 co->slots = slot;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
140 m_option_copy(co->opt,co->slots->data,co->slots->prev->data);
9912
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
141 // Reset our set flag
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
142 co->flags &= ~M_CFG_OPT_SET;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
143 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
144
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
145 mp_msg(MSGT_CFGPARSER, MSGL_DBG2,"Config pushed level is now %d\n",config->lvl);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
146 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
147
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
148 void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
149 m_config_pop(m_config_t* config) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
150 m_config_option_t *co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
151 m_config_save_slot_t *slot;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
152
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
153 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
154 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
155 assert(config->lvl > 1);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
156 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
157
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
158 for(co = config->opts ; co ; co = co->next ) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
159 int pop = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
160 if(co->opt->type->flags & M_OPT_TYPE_HAS_CHILD)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
161 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
162 if(co->opt->flags & (M_OPT_GLOBAL|M_OPT_NOSAVE))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
163 continue;
9912
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
164 if(co->flags & M_CFG_OPT_ALIAS)
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
165 continue;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
166 if(co->slots->lvl > config->lvl)
13699
11b249ef87b0 printf --> mp_msg by the Wanderer <inverseparadox at comcast dot net>
diego
parents: 10595
diff changeset
167 mp_msg(MSGT_CFGPARSER, MSGL_WARN,MSGTR_SaveSlotTooOld,config->lvl,co->slots->lvl);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
168
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
169 while(co->slots->lvl >= config->lvl) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
170 m_option_free(co->opt,co->slots->data);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
171 slot = co->slots;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
172 co->slots = slot->prev;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
173 free(slot);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
174 pop++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
175 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
176 if(pop) // We removed some ctx -> set the previous value
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
177 m_option_set(co->opt,co->opt->p,co->slots->data);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
178 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
179
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
180 config->lvl--;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
181 mp_msg(MSGT_CFGPARSER, MSGL_DBG2,"Config poped level=%d\n",config->lvl);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
182 }
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 static void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
185 m_config_add_option(m_config_t *config, m_option_t *arg, char* prefix) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
186 m_config_option_t *co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
187 m_config_save_slot_t* sl;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
188
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
189 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
190 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
191 assert(config->lvl > 0);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
192 assert(arg != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
193 #endif
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 // Allocate a new entry for this option
18879
cc65a585fdcc rm unnecesary casts from void* - part 3
reynaldo
parents: 18335
diff changeset
196 co = calloc(1,sizeof(m_config_option_t) + arg->type->size);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
197 co->opt = arg;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
198
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
199 // Fill in the full name
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
200 if(prefix && strlen(prefix) > 0) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
201 int l = strlen(prefix) + 1 + strlen(arg->name) + 1;
23806
0a38ad149c5c Remove some more useless *alloc casts
reimar
parents: 21054
diff changeset
202 co->name = malloc(l);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
203 sprintf(co->name,"%s:%s",prefix,arg->name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
204 } else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
205 co->name = arg->name;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
206
23868
09c2fe1e021d Fix some typos in comments
reimar
parents: 23806
diff changeset
207 // Option with children -> add them
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
208 if(arg->type->flags & M_OPT_TYPE_HAS_CHILD) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
209 m_option_t *ol = arg->p;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
210 int i;
13824
bad703951cf9 a few 10l fixes by Wei Jiang <jiangw98@yahoo.com>
faust3
parents: 13699
diff changeset
211 co->slots = NULL;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
212 for(i = 0 ; ol[i].name != NULL ; i++)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
213 m_config_add_option(config,&ol[i], co->name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
214 } else {
9912
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
215 m_config_option_t *i;
23868
09c2fe1e021d Fix some typos in comments
reimar
parents: 23806
diff changeset
216 // Check if there is already an option pointing to this address
9912
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
217 if(arg->p) {
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
218 for(i = config->opts ; i ; i = i->next ) {
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
219 if(i->opt->p == arg->p) { // So we don't save the same vars more than 1 time
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
220 co->slots = i->slots;
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
221 co->flags |= M_CFG_OPT_ALIAS;
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
222 break;
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
223 }
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
224 }
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
225 }
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
226 if(!(co->flags & M_CFG_OPT_ALIAS)) {
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
227 // Allocate a slot for the defaults
18879
cc65a585fdcc rm unnecesary casts from void* - part 3
reynaldo
parents: 18335
diff changeset
228 sl = calloc(1,sizeof(m_config_save_slot_t) + arg->type->size);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
229 m_option_save(arg,sl->data,(void**)arg->p);
23868
09c2fe1e021d Fix some typos in comments
reimar
parents: 23806
diff changeset
230 // Hack to avoid too much trouble with dynamically allocated data :
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
231 // We always use a dynamic version
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
232 if((arg->type->flags & M_OPT_TYPE_DYNAMIC) && arg->p && (*(void**)arg->p)) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
233 *(void**)arg->p = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
234 m_option_set(arg,arg->p,sl->data);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
235 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
236 sl->lvl = 0;
13824
bad703951cf9 a few 10l fixes by Wei Jiang <jiangw98@yahoo.com>
faust3
parents: 13699
diff changeset
237 sl->prev = NULL;
18879
cc65a585fdcc rm unnecesary casts from void* - part 3
reynaldo
parents: 18335
diff changeset
238 co->slots = calloc(1,sizeof(m_config_save_slot_t) + arg->type->size);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
239 co->slots->prev = sl;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
240 co->slots->lvl = config->lvl;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
241 m_option_copy(co->opt,co->slots->data,sl->data);
9912
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
242 } // !M_OPT_ALIAS
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
243 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
244 co->next = config->opts;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
245 config->opts = co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
246 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
247
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
248 int
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
249 m_config_register_options(m_config_t *config, m_option_t *args) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
250 int i;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
251
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
252 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
253 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
254 assert(config->lvl > 0);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
255 assert(args != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
256 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
257
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
258 for(i = 0 ; args[i].name != NULL ; i++)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
259 m_config_add_option(config,&args[i],NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
260
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
261 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
262 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
263
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
264 static m_config_option_t*
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
265 m_config_get_co(m_config_t *config, char* arg) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
266 m_config_option_t *co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
267
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
268 for(co = config->opts ; co ; co = co->next ) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
269 int l = strlen(co->name) - 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
270 if((co->opt->type->flags & M_OPT_TYPE_ALLOW_WILDCARD) &&
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
271 (co->name[l] == '*')) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
272 if(strncasecmp(co->name,arg,l) == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
273 return co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
274 } else if(strcasecmp(co->name,arg) == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
275 return co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
276 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
277 return NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
278 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
279
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
280 static int
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
281 m_config_parse_option(m_config_t *config, char* arg, char* param,int set) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
282 m_config_option_t *co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
283 int r = 0;
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 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
286 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
287 assert(config->lvl > 0);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
288 assert(arg != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
289 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
290
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
291 co = m_config_get_co(config,arg);
8892
06843e67a04b print meaningful error message
arpi
parents: 8512
diff changeset
292 if(!co){
8894
e6a83b140b39 better error handling for invalud suboptions
arpi
parents: 8892
diff changeset
293 // mp_msg(MSGT_CFGPARSER, MSGL_ERR,"Unknown option: %s\n",arg);
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
294 return M_OPT_UNKNOWN;
8892
06843e67a04b print meaningful error message
arpi
parents: 8512
diff changeset
295 }
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
296
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
297 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
298 // This is the only mandatory function
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
299 assert(co->opt->type->parse);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
300 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
301
23868
09c2fe1e021d Fix some typos in comments
reimar
parents: 23806
diff changeset
302 // Check if this option isn't forbidden in the current mode
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
303 if((config->mode == M_CONFIG_FILE) && (co->opt->flags & M_OPT_NOCFG)) {
13699
11b249ef87b0 printf --> mp_msg by the Wanderer <inverseparadox at comcast dot net>
diego
parents: 10595
diff changeset
304 mp_msg(MSGT_CFGPARSER, MSGL_ERR,MSGTR_InvalidCfgfileOption,arg);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
305 return M_OPT_INVALID;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
306 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
307 if((config->mode == M_COMMAND_LINE) && (co->opt->flags & M_OPT_NOCMD)) {
13699
11b249ef87b0 printf --> mp_msg by the Wanderer <inverseparadox at comcast dot net>
diego
parents: 10595
diff changeset
308 mp_msg(MSGT_CFGPARSER, MSGL_ERR,MSGTR_InvalidCmdlineOption,arg);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
309 return M_OPT_INVALID;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
310 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
311
23868
09c2fe1e021d Fix some typos in comments
reimar
parents: 23806
diff changeset
312 // Option with children are a bit different to parse
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
313 if(co->opt->type->flags & M_OPT_TYPE_HAS_CHILD) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
314 char** lst = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
315 int i,sr;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
316 // Parse the child options
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9222
diff changeset
317 r = m_option_parse(co->opt,arg,param,&lst,M_COMMAND_LINE);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
318 // Set them now
8894
e6a83b140b39 better error handling for invalud suboptions
arpi
parents: 8892
diff changeset
319 if(r >= 0)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
320 for(i = 0 ; lst && lst[2*i] ; i++) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
321 int l = strlen(co->name) + 1 + strlen(lst[2*i]) + 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
322 if(r >= 0) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
323 // Build the full name
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
324 char n[l];
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
325 sprintf(n,"%s:%s",co->name,lst[2*i]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
326 sr = m_config_parse_option(config,n,lst[2*i+1],set);
8894
e6a83b140b39 better error handling for invalud suboptions
arpi
parents: 8892
diff changeset
327 if(sr < 0){
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
328 if(sr == M_OPT_UNKNOWN){
13699
11b249ef87b0 printf --> mp_msg by the Wanderer <inverseparadox at comcast dot net>
diego
parents: 10595
diff changeset
329 mp_msg(MSGT_CFGPARSER, MSGL_ERR,MSGTR_InvalidSuboption,co->name,lst[2*i]);
8894
e6a83b140b39 better error handling for invalud suboptions
arpi
parents: 8892
diff changeset
330 r = M_OPT_INVALID;
e6a83b140b39 better error handling for invalud suboptions
arpi
parents: 8892
diff changeset
331 } else
9222
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
332 if(sr == M_OPT_MISSING_PARAM){
13699
11b249ef87b0 printf --> mp_msg by the Wanderer <inverseparadox at comcast dot net>
diego
parents: 10595
diff changeset
333 mp_msg(MSGT_CFGPARSER, MSGL_ERR,MSGTR_MissingSuboptionParameter,lst[2*i],co->name);
9222
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
334 r = M_OPT_INVALID;
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
335 } else
8894
e6a83b140b39 better error handling for invalud suboptions
arpi
parents: 8892
diff changeset
336 r = sr;
e6a83b140b39 better error handling for invalud suboptions
arpi
parents: 8892
diff changeset
337 }
8164
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 free(lst[2*i]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
340 free(lst[2*i+1]);
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 if(lst) free(lst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
343 } else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
344 r = m_option_parse(co->opt,arg,param,set ? co->slots->data : NULL,config->mode);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
345
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
346 // Parsing failed ?
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
347 if(r < 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
348 return r;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
349 // Set the option
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
350 if(set) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
351 m_option_set(co->opt,co->opt->p,co->slots->data);
9912
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
352 co->flags |= M_CFG_OPT_SET;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
353 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
354
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
355 return r;
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
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
358 int
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
359 m_config_set_option(m_config_t *config, char* arg, char* param) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
360 mp_msg(MSGT_CFGPARSER, MSGL_DBG2,"Setting %s=%s\n",arg,param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
361 return m_config_parse_option(config,arg,param,1);
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
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
364 int
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
365 m_config_check_option(m_config_t *config, char* arg, char* param) {
9222
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
366 int r;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
367 mp_msg(MSGT_CFGPARSER, MSGL_DBG2,"Checking %s=%s\n",arg,param);
9222
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
368 r=m_config_parse_option(config,arg,param,0);
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
369 if(r==M_OPT_MISSING_PARAM){
13699
11b249ef87b0 printf --> mp_msg by the Wanderer <inverseparadox at comcast dot net>
diego
parents: 10595
diff changeset
370 mp_msg(MSGT_CFGPARSER, MSGL_ERR,MSGTR_MissingOptionParameter,arg);
9222
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
371 return M_OPT_INVALID;
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
372 }
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
373 return r;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
374 }
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 m_option_t*
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
378 m_config_get_option(m_config_t *config, char* arg) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
379 m_config_option_t *co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
380
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
381 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
382 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
383 assert(config->lvl > 0);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
384 assert(arg != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
385 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
386
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
387 co = m_config_get_co(config,arg);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
388 if(co)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
389 return co->opt;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
390 else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
391 return 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 void*
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
395 m_config_get_option_ptr(m_config_t *config, char* arg) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
396 m_option_t* conf;
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 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
399 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
400 assert(arg != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
401 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
402
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
403 conf = m_config_get_option(config,arg);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
404 if(!conf) return NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
405 return conf->p;
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 void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
409 m_config_print_option_list(m_config_t *config) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
410 char min[50],max[50];
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
411 m_config_option_t* co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
412 int count = 0;
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 if(!config->opts) return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
415
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
416 mp_msg(MSGT_CFGPARSER, MSGL_INFO, MSGTR_OptionListHeader);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
417 for(co = config->opts ; co ; co = co->next) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
418 m_option_t* opt = co->opt;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
419 if(opt->type->flags & M_OPT_TYPE_HAS_CHILD) continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
420 if(opt->flags & M_OPT_MIN)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
421 sprintf(min,"%-8.0f",opt->min);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
422 else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
423 strcpy(min,"No");
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
424 if(opt->flags & M_OPT_MAX)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
425 sprintf(max,"%-8.0f",opt->max);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
426 else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
427 strcpy(max,"No");
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
428 mp_msg(MSGT_CFGPARSER, MSGL_INFO, " %-20.20s %-15.15s %-10.10s %-10.10s %-3.3s %-3.3s %-3.3s\n",
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
429 co->name,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
430 co->opt->type->name,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
431 min,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
432 max,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
433 opt->flags & CONF_GLOBAL ? "Yes" : "No",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
434 opt->flags & CONF_NOCMD ? "No" : "Yes",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
435 opt->flags & CONF_NOCFG ? "No" : "Yes");
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
436 count++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
437 }
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
438 mp_msg(MSGT_CFGPARSER, MSGL_INFO, MSGTR_TotalOptions,count);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
439 }
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
440
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
441 m_profile_t*
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
442 m_config_get_profile(m_config_t* config, char* name) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
443 m_profile_t* p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
444 for(p = config->profiles ; p ; p = p->next)
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
445 if(!strcmp(p->name,name)) return p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
446 return NULL;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
447 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
448
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
449 m_profile_t*
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
450 m_config_add_profile(m_config_t* config, char* name) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
451 m_profile_t* p = m_config_get_profile(config,name);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
452 if(p) return p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
453 p = calloc(1,sizeof(m_profile_t));
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
454 p->name = strdup(name);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
455 p->next = config->profiles;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
456 config->profiles = p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
457 return p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
458 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
459
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
460 void
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
461 m_profile_set_desc(m_profile_t* p, char* desc) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
462 if(p->desc) free(p->desc);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
463 p->desc = desc ? strdup(desc) : NULL;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
464 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
465
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
466 int
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
467 m_config_set_profile_option(m_config_t* config, m_profile_t* p,
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
468 char* name, char* val) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
469 int i = m_config_check_option(config,name,val);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
470 if(i < 0) return i;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
471 if(p->opts) p->opts = realloc(p->opts,2*(p->num_opts+2)*sizeof(char*));
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
472 else p->opts = malloc(2*(p->num_opts+2)*sizeof(char*));
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
473 p->opts[p->num_opts*2] = strdup(name);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
474 p->opts[p->num_opts*2+1] = val ? strdup(val) : NULL;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
475 p->num_opts++;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
476 p->opts[p->num_opts*2] = p->opts[p->num_opts*2+1] = NULL;
17856
98f0e0542cb6 10L fix missing return statement.
albeu
parents: 17481
diff changeset
477 return 1;
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
478 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
479
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
480 static void
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
481 m_config_set_profile(m_config_t* config, m_profile_t* p) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
482 int i;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
483 if(config->profile_depth > MAX_PROFILE_DEPTH) {
18335
5766a9d21992 Rename some misspelled and misnamed messages.
diego
parents: 18258
diff changeset
484 mp_msg(MSGT_CFGPARSER, MSGL_WARN, MSGTR_ProfileInclusionTooDeep);
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
485 return;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
486 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
487 config->profile_depth++;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
488 for(i = 0 ; i < p->num_opts ; i++)
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
489 m_config_set_option(config,p->opts[2*i],p->opts[2*i+1]);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
490 config->profile_depth--;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
491 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
492
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
493 static int
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
494 parse_profile(m_option_t* opt,char *name, char *param, void* dst, int src) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
495 m_config_t* config = opt->priv;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
496 char** list = NULL;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
497 int i,r;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
498 if(param && !strcmp(param,"help")) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
499 m_profile_t* p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
500 if(!config->profiles) {
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
501 mp_msg(MSGT_CFGPARSER, MSGL_INFO, MSGTR_NoProfileDefined);
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
502 return M_OPT_EXIT-1;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
503 }
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
504 mp_msg(MSGT_CFGPARSER, MSGL_INFO, MSGTR_AvailableProfiles);
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
505 for(p = config->profiles ; p ; p = p->next)
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
506 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "\t%s\t%s\n",p->name,
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
507 p->desc ? p->desc : "");
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
508 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "\n");
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
509 return M_OPT_EXIT-1;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
510 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
511
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
512 r = m_option_type_string_list.parse(opt,name,param,&list,src);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
513 if(r < 0) return r;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
514 if(!list || !list[0]) return M_OPT_INVALID;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
515 for(i = 0 ; list[i] ; i++)
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
516 if(!m_config_get_profile(config,list[i])) {
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
517 mp_msg(MSGT_CFGPARSER, MSGL_WARN, MSGTR_UnknownProfile,
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
518 list[i]);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
519 r = M_OPT_INVALID;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
520 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
521 if(dst)
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
522 m_option_copy(opt,dst,&list);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
523 else
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
524 m_option_free(opt,&list);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
525 return r;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
526 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
527
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
528 static void
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
529 set_profile(m_option_t *opt, void* dst, void* src) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
530 m_config_t* config = opt->priv;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
531 m_profile_t* p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
532 char** list = NULL;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
533 int i;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
534 if(!src || !*(char***)src) return;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
535 m_option_copy(opt,&list,src);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
536 for(i = 0 ; list[i] ; i++) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
537 p = m_config_get_profile(config,list[i]);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
538 if(!p) continue;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
539 m_config_set_profile(config,p);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
540 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
541 m_option_free(opt,&list);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
542 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
543
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
544 static int
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
545 show_profile(m_option_t *opt, char* name, char *param) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
546 m_config_t* config = opt->priv;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
547 m_profile_t* p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
548 int i,j;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
549 if(!param) return M_OPT_MISSING_PARAM;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
550 if(!(p = m_config_get_profile(config,param))) {
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
551 mp_msg(MSGT_CFGPARSER, MSGL_ERR, MSGTR_UnknownProfile, param);
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
552 return M_OPT_EXIT-1;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
553 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
554 if(!config->profile_depth)
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
555 mp_msg(MSGT_CFGPARSER, MSGL_INFO, MSGTR_Profile, param,
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
556 p->desc ? p->desc : "");
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
557 config->profile_depth++;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
558 for(i = 0 ; i < p->num_opts ; i++) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
559 char spc[config->profile_depth+1];
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
560 for(j = 0 ; j < config->profile_depth ; j++)
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
561 spc[j] = ' ';
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
562 spc[config->profile_depth] = '\0';
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
563
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
564 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "%s%s=%s\n", spc,
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
565 p->opts[2*i], p->opts[2*i+1]);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
566
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
567
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
568 if(config->profile_depth < MAX_PROFILE_DEPTH &&
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
569 !strcmp(p->opts[2*i],"profile")) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
570 char* e,*list = p->opts[2*i+1];
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
571 while((e = strchr(list,','))) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
572 int l = e-list;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
573 char tmp[l+1];
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
574 if(!l) continue;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
575 memcpy(tmp,list,l);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
576 tmp[l] = '\0';
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
577 show_profile(opt,name,tmp);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
578 list = e+1;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
579 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
580 if(list[0] != '\0')
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
581 show_profile(opt,name,list);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
582 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
583 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
584 config->profile_depth--;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
585 if(!config->profile_depth) mp_msg(MSGT_CFGPARSER, MSGL_INFO, "\n");
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
586 return M_OPT_EXIT-1;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
587 }
17472
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
588
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
589 static int
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
590 list_options(m_option_t *opt, char* name, char *param) {
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
591 m_config_t* config = opt->priv;
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
592 m_config_print_option_list(config);
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
593 return M_OPT_EXIT;
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
594 }