annotate m_config.c @ 29516:87897065b7d7

Fix aspect_fit to work correctly when borders need to be added on top and bottom, previous code accidentally compared against screen dimensions, resulting in cropping instead of added borders.
author reimar
date Thu, 27 Aug 2009 12:38:22 +0000
parents 0f1b5b68af32
children c1a3f1bbba26
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
26288
6e53dfe38594 Add some const qualifiers to reduce warnings
uau
parents: 25962
diff changeset
23 parse_profile(const m_option_t *opt, const char *name, char *param, void *dst, int src);
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
24
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
25 static void
26288
6e53dfe38594 Add some const qualifiers to reduce warnings
uau
parents: 25962
diff changeset
26 set_profile(const m_option_t *opt, void* dst, void* src);
17471
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
25225
51c23a18a17b First try to mark some things in m_config correctly as const
reimar
parents: 23868
diff changeset
32 m_config_add_option(m_config_t *config, const m_option_t *arg, const char* prefix);
17471
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;
25962
afa125da85cf typo fix: inited --> initialized
diego
parents: 25634
diff changeset
40 static int initialized = 0;
17471
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
25962
afa125da85cf typo fix: inited --> initialized
diego
parents: 25634
diff changeset
52 if(!initialized) {
afa125da85cf typo fix: inited --> initialized
diego
parents: 25634
diff changeset
53 initialized = 1;
17471
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);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
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
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
77
8164
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);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
107 free(config);
8164
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);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
134
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
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 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
144
8164
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);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
168
8164
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
25225
51c23a18a17b First try to mark some things in m_config correctly as const
reimar
parents: 23868
diff changeset
185 m_config_add_option(m_config_t *config, const m_option_t *arg, const char* prefix) {
8164
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) {
25225
51c23a18a17b First try to mark some things in m_config correctly as const
reimar
parents: 23868
diff changeset
209 const m_option_t *ol = arg->p;
8164
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
25225
51c23a18a17b First try to mark some things in m_config correctly as const
reimar
parents: 23868
diff changeset
249 m_config_register_options(m_config_t *config, const m_option_t *args) {
8164
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
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
264 static m_config_option_t*
8164
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;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
270 if((co->opt->type->flags & M_OPT_TYPE_ALLOW_WILDCARD) &&
8164
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 }
26408
7a36d5941fd8 Replace the trivial command line preparser with a more robust version
albeu
parents: 26288
diff changeset
311 // During command line preparse set only pre-parse options
7a36d5941fd8 Replace the trivial command line preparser with a more robust version
albeu
parents: 26288
diff changeset
312 // Otherwise only set pre-parse option if they were not already set.
7a36d5941fd8 Replace the trivial command line preparser with a more robust version
albeu
parents: 26288
diff changeset
313 if(((config->mode == M_COMMAND_LINE_PRE_PARSE) &&
7a36d5941fd8 Replace the trivial command line preparser with a more robust version
albeu
parents: 26288
diff changeset
314 !(co->opt->flags & M_OPT_PRE_PARSE)) ||
7a36d5941fd8 Replace the trivial command line preparser with a more robust version
albeu
parents: 26288
diff changeset
315 ((config->mode != M_COMMAND_LINE_PRE_PARSE) &&
7a36d5941fd8 Replace the trivial command line preparser with a more robust version
albeu
parents: 26288
diff changeset
316 (co->opt->flags & M_OPT_PRE_PARSE) && (co->flags & M_CFG_OPT_SET)))
7a36d5941fd8 Replace the trivial command line preparser with a more robust version
albeu
parents: 26288
diff changeset
317 set = 0;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
318
23868
09c2fe1e021d Fix some typos in comments
reimar
parents: 23806
diff changeset
319 // Option with children are a bit different to parse
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
320 if(co->opt->type->flags & M_OPT_TYPE_HAS_CHILD) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
321 char** lst = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
322 int i,sr;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
323 // 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
324 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
325 // Set them now
8894
e6a83b140b39 better error handling for invalud suboptions
arpi
parents: 8892
diff changeset
326 if(r >= 0)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
327 for(i = 0 ; lst && lst[2*i] ; i++) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
328 int l = strlen(co->name) + 1 + strlen(lst[2*i]) + 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
329 if(r >= 0) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
330 // Build the full name
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
331 char n[l];
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
332 sprintf(n,"%s:%s",co->name,lst[2*i]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
333 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
334 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
335 if(sr == M_OPT_UNKNOWN){
13699
11b249ef87b0 printf --> mp_msg by the Wanderer <inverseparadox at comcast dot net>
diego
parents: 10595
diff changeset
336 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
337 r = M_OPT_INVALID;
e6a83b140b39 better error handling for invalud suboptions
arpi
parents: 8892
diff changeset
338 } else
9222
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
339 if(sr == M_OPT_MISSING_PARAM){
13699
11b249ef87b0 printf --> mp_msg by the Wanderer <inverseparadox at comcast dot net>
diego
parents: 10595
diff changeset
340 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
341 r = M_OPT_INVALID;
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
342 } else
8894
e6a83b140b39 better error handling for invalud suboptions
arpi
parents: 8892
diff changeset
343 r = sr;
e6a83b140b39 better error handling for invalud suboptions
arpi
parents: 8892
diff changeset
344 }
8164
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 free(lst[2*i]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
347 free(lst[2*i+1]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
348 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
349 if(lst) free(lst);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
350 } else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
351 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
352
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
353 // Parsing failed ?
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
354 if(r < 0)
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 // Set the option
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
357 if(set) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
358 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
359 co->flags |= M_CFG_OPT_SET;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
360 }
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 return r;
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
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
365 int
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
366 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
367 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
368 return m_config_parse_option(config,arg,param,1);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
369 }
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 int
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
372 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
373 int r;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
374 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
375 r=m_config_parse_option(config,arg,param,0);
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
376 if(r==M_OPT_MISSING_PARAM){
13699
11b249ef87b0 printf --> mp_msg by the Wanderer <inverseparadox at comcast dot net>
diego
parents: 10595
diff changeset
377 mp_msg(MSGT_CFGPARSER, MSGL_ERR,MSGTR_MissingOptionParameter,arg);
9222
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
378 return M_OPT_INVALID;
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
379 }
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
380 return r;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
381 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
382
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
383
25225
51c23a18a17b First try to mark some things in m_config correctly as const
reimar
parents: 23868
diff changeset
384 const m_option_t*
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
385 m_config_get_option(m_config_t *config, char* arg) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
386 m_config_option_t *co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
387
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
388 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
389 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
390 assert(config->lvl > 0);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
391 assert(arg != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
392 #endif
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 co = m_config_get_co(config,arg);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
395 if(co)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
396 return co->opt;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
397 else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
398 return NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
399 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
400
25225
51c23a18a17b First try to mark some things in m_config correctly as const
reimar
parents: 23868
diff changeset
401 const void*
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
402 m_config_get_option_ptr(m_config_t *config, char* arg) {
25225
51c23a18a17b First try to mark some things in m_config correctly as const
reimar
parents: 23868
diff changeset
403 const m_option_t* conf;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
404
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
405 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
406 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
407 assert(arg != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
408 #endif
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 conf = m_config_get_option(config,arg);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
411 if(!conf) return NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
412 return conf->p;
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
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
415 void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
416 m_config_print_option_list(m_config_t *config) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
417 char min[50],max[50];
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
418 m_config_option_t* co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
419 int count = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
420
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
421 if(!config->opts) return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
422
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
423 mp_msg(MSGT_CFGPARSER, MSGL_INFO, MSGTR_OptionListHeader);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
424 for(co = config->opts ; co ; co = co->next) {
25225
51c23a18a17b First try to mark some things in m_config correctly as const
reimar
parents: 23868
diff changeset
425 const m_option_t* opt = co->opt;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
426 if(opt->type->flags & M_OPT_TYPE_HAS_CHILD) continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
427 if(opt->flags & M_OPT_MIN)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
428 sprintf(min,"%-8.0f",opt->min);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
429 else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
430 strcpy(min,"No");
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
431 if(opt->flags & M_OPT_MAX)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
432 sprintf(max,"%-8.0f",opt->max);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
433 else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
434 strcpy(max,"No");
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
435 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
436 co->name,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
437 co->opt->type->name,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
438 min,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
439 max,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
440 opt->flags & CONF_GLOBAL ? "Yes" : "No",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
441 opt->flags & CONF_NOCMD ? "No" : "Yes",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
442 opt->flags & CONF_NOCFG ? "No" : "Yes");
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
443 count++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
444 }
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
445 mp_msg(MSGT_CFGPARSER, MSGL_INFO, MSGTR_TotalOptions,count);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
446 }
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
447
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
448 m_profile_t*
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
449 m_config_get_profile(m_config_t* config, char* name) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
450 m_profile_t* p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
451 for(p = config->profiles ; p ; p = p->next)
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
452 if(!strcmp(p->name,name)) return p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
453 return NULL;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
454 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
455
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
456 m_profile_t*
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
457 m_config_add_profile(m_config_t* config, char* name) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
458 m_profile_t* p = m_config_get_profile(config,name);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
459 if(p) return p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
460 p = calloc(1,sizeof(m_profile_t));
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
461 p->name = strdup(name);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
462 p->next = config->profiles;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
463 config->profiles = p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
464 return p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
465 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
466
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
467 void
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
468 m_profile_set_desc(m_profile_t* p, char* desc) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
469 if(p->desc) free(p->desc);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
470 p->desc = desc ? strdup(desc) : NULL;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
471 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
472
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
473 int
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
474 m_config_set_profile_option(m_config_t* config, m_profile_t* p,
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
475 char* name, char* val) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
476 int i = m_config_check_option(config,name,val);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
477 if(i < 0) return i;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
478 if(p->opts) p->opts = realloc(p->opts,2*(p->num_opts+2)*sizeof(char*));
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
479 else p->opts = malloc(2*(p->num_opts+2)*sizeof(char*));
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
480 p->opts[p->num_opts*2] = strdup(name);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
481 p->opts[p->num_opts*2+1] = val ? strdup(val) : NULL;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
482 p->num_opts++;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
483 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
484 return 1;
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
485 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
486
25634
4344e84f7a9f export m_config_set_profile()
ben
parents: 25225
diff changeset
487 void
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
488 m_config_set_profile(m_config_t* config, m_profile_t* p) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
489 int i;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
490 if(config->profile_depth > MAX_PROFILE_DEPTH) {
18335
5766a9d21992 Rename some misspelled and misnamed messages.
diego
parents: 18258
diff changeset
491 mp_msg(MSGT_CFGPARSER, MSGL_WARN, MSGTR_ProfileInclusionTooDeep);
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
492 return;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
493 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
494 config->profile_depth++;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
495 for(i = 0 ; i < p->num_opts ; i++)
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
496 m_config_set_option(config,p->opts[2*i],p->opts[2*i+1]);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
497 config->profile_depth--;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
498 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
499
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
500 static int
26288
6e53dfe38594 Add some const qualifiers to reduce warnings
uau
parents: 25962
diff changeset
501 parse_profile(const m_option_t *opt, const char *name, char *param, void *dst, int src)
6e53dfe38594 Add some const qualifiers to reduce warnings
uau
parents: 25962
diff changeset
502 {
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
503 m_config_t* config = opt->priv;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
504 char** list = NULL;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
505 int i,r;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
506 if(param && !strcmp(param,"help")) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
507 m_profile_t* p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
508 if(!config->profiles) {
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
509 mp_msg(MSGT_CFGPARSER, MSGL_INFO, MSGTR_NoProfileDefined);
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
510 return M_OPT_EXIT-1;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
511 }
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
512 mp_msg(MSGT_CFGPARSER, MSGL_INFO, MSGTR_AvailableProfiles);
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
513 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
514 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "\t%s\t%s\n",p->name,
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
515 p->desc ? p->desc : "");
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
516 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "\n");
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
517 return M_OPT_EXIT-1;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
518 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
519
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
520 r = m_option_type_string_list.parse(opt,name,param,&list,src);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
521 if(r < 0) return r;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
522 if(!list || !list[0]) return M_OPT_INVALID;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
523 for(i = 0 ; list[i] ; i++)
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
524 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
525 mp_msg(MSGT_CFGPARSER, MSGL_WARN, MSGTR_UnknownProfile,
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
526 list[i]);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
527 r = M_OPT_INVALID;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
528 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
529 if(dst)
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
530 m_option_copy(opt,dst,&list);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
531 else
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
532 m_option_free(opt,&list);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
533 return r;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
534 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
535
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
536 static void
26288
6e53dfe38594 Add some const qualifiers to reduce warnings
uau
parents: 25962
diff changeset
537 set_profile(const m_option_t *opt, void *dst, void *src) {
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
538 m_config_t* config = opt->priv;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
539 m_profile_t* p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
540 char** list = NULL;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
541 int i;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
542 if(!src || !*(char***)src) return;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
543 m_option_copy(opt,&list,src);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
544 for(i = 0 ; list[i] ; i++) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
545 p = m_config_get_profile(config,list[i]);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
546 if(!p) continue;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
547 m_config_set_profile(config,p);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
548 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
549 m_option_free(opt,&list);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
550 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
551
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
552 static int
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
553 show_profile(m_option_t *opt, char* name, char *param) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
554 m_config_t* config = opt->priv;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
555 m_profile_t* p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
556 int i,j;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
557 if(!param) return M_OPT_MISSING_PARAM;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
558 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
559 mp_msg(MSGT_CFGPARSER, MSGL_ERR, MSGTR_UnknownProfile, param);
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
560 return M_OPT_EXIT-1;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
561 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
562 if(!config->profile_depth)
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
563 mp_msg(MSGT_CFGPARSER, MSGL_INFO, MSGTR_Profile, param,
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
564 p->desc ? p->desc : "");
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
565 config->profile_depth++;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
566 for(i = 0 ; i < p->num_opts ; i++) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
567 char spc[config->profile_depth+1];
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
568 for(j = 0 ; j < config->profile_depth ; j++)
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
569 spc[j] = ' ';
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
570 spc[config->profile_depth] = '\0';
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
571
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
572 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "%s%s=%s\n", spc,
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
573 p->opts[2*i], p->opts[2*i+1]);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
574
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
575
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
576 if(config->profile_depth < MAX_PROFILE_DEPTH &&
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
577 !strcmp(p->opts[2*i],"profile")) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
578 char* e,*list = p->opts[2*i+1];
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
579 while((e = strchr(list,','))) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
580 int l = e-list;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
581 char tmp[l+1];
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
582 if(!l) continue;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
583 memcpy(tmp,list,l);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
584 tmp[l] = '\0';
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
585 show_profile(opt,name,tmp);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
586 list = e+1;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
587 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
588 if(list[0] != '\0')
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
589 show_profile(opt,name,list);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
590 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
591 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
592 config->profile_depth--;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
593 if(!config->profile_depth) mp_msg(MSGT_CFGPARSER, MSGL_INFO, "\n");
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
594 return M_OPT_EXIT-1;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
595 }
17472
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
596
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
597 static int
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
598 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
599 m_config_t* config = opt->priv;
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
600 m_config_print_option_list(config);
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
601 return M_OPT_EXIT;
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
602 }