annotate m_config.c @ 30785:2c9cfd354ca0

Revert r30825, it was not supposed to be committed. 127.32L to me, beware when using git svn dcommit for committing stuff to svn...
author stefano
date Thu, 04 Mar 2010 01:02:24 +0000
parents 3dd526b691bc
children 1ca3d798b518
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
30429
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
1 /*
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
2 * This file is part of MPlayer.
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
3 *
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
5 * it under the terms of the GNU General Public License as published by
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
7 * (at your option) any later version.
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
8 *
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
12 * GNU General Public License for more details.
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
13 *
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
14 * You should have received a copy of the GNU General Public License along
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
17 */
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17856
diff changeset
18
96568be4bfdc Doxygen attack!
albeu
parents: 17856
diff changeset
19 /// \file
96568be4bfdc Doxygen attack!
albeu
parents: 17856
diff changeset
20 /// \ingroup Config
96568be4bfdc Doxygen attack!
albeu
parents: 17856
diff changeset
21
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
22 #include "config.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
23
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
24 #include <stdlib.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
25 #include <stdio.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
26 #include <errno.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
27 #include <string.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
28 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
29 #include <assert.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
30 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
31
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
32 #include "m_config.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
33 #include "m_option.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
34 #include "mp_msg.h"
13699
11b249ef87b0 printf --> mp_msg by the Wanderer <inverseparadox at comcast dot net>
diego
parents: 10595
diff changeset
35 #include "help_mp.h"
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
36
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
37 #define MAX_PROFILE_DEPTH 20
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
38
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
39 static int
30695
a26f6577d338 Make more option-parsing related function arguments const.
reimar
parents: 30631
diff changeset
40 parse_profile(const m_option_t *opt, const char *name, const char *param, void *dst, int src);
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
41
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
42 static void
30695
a26f6577d338 Make more option-parsing related function arguments const.
reimar
parents: 30631
diff changeset
43 set_profile(const m_option_t *opt, void* dst, const void* src);
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
44
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
45 static int
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
46 show_profile(m_option_t *opt, char* name, char *param);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
47
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
48 static void
25225
51c23a18a17b First try to mark some things in m_config correctly as const
reimar
parents: 23868
diff changeset
49 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
50
17472
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
51 static int
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
52 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
53
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
54 m_config_t*
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
55 m_config_new(void) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
56 m_config_t* config;
25962
afa125da85cf typo fix: inited --> initialized
diego
parents: 25634
diff changeset
57 static int initialized = 0;
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
58 static m_option_type_t profile_opt_type;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
59 static m_option_t ref_opts[] = {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
60 { "profile", NULL, &profile_opt_type, CONF_NOSAVE, 0, 0, NULL },
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
61 { "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
62 { "list-options", list_options, CONF_TYPE_PRINT_FUNC, CONF_NOCFG, 0, 0, NULL },
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
63 { NULL, NULL, NULL, 0, 0, 0, NULL }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
64 };
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
65 int i;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
66
18879
cc65a585fdcc rm unnecesary casts from void* - part 3
reynaldo
parents: 18335
diff changeset
67 config = calloc(1,sizeof(m_config_t));
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
68 config->lvl = 1; // 0 Is the defaults
25962
afa125da85cf typo fix: inited --> initialized
diego
parents: 25634
diff changeset
69 if(!initialized) {
afa125da85cf typo fix: inited --> initialized
diego
parents: 25634
diff changeset
70 initialized = 1;
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
71 profile_opt_type = m_option_type_string_list;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
72 profile_opt_type.parse = parse_profile;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
73 profile_opt_type.set = set_profile;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
74 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
75 config->self_opts = malloc(sizeof(ref_opts));
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
76 memcpy(config->self_opts,ref_opts,sizeof(ref_opts));
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
77 for(i = 0 ; config->self_opts[i].name ; i++)
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
78 config->self_opts[i].priv = config;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
79 m_config_register_options(config,config->self_opts);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
80
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
81 return config;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
82 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
83
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
84 void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
85 m_config_free(m_config_t* config) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
86 m_config_option_t *i = config->opts, *ct;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
87 m_config_save_slot_t *sl,*st;
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
88 m_profile_t *p,*pn;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
89 int j;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
90
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
91 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
92 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
93 #endif
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
94
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
95 while(i) {
13824
bad703951cf9 a few 10l fixes by Wei Jiang <jiangw98@yahoo.com>
faust3
parents: 13699
diff changeset
96 if (i->flags & M_CFG_OPT_ALIAS)
bad703951cf9 a few 10l fixes by Wei Jiang <jiangw98@yahoo.com>
faust3
parents: 13699
diff changeset
97 sl = NULL;
bad703951cf9 a few 10l fixes by Wei Jiang <jiangw98@yahoo.com>
faust3
parents: 13699
diff changeset
98 else
bad703951cf9 a few 10l fixes by Wei Jiang <jiangw98@yahoo.com>
faust3
parents: 13699
diff changeset
99 sl = i->slots;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
100 while(sl) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
101 m_option_free(i->opt,sl->data);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
102 st = sl->prev;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
103 free(sl);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
104 sl = st;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
105 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
106 if(i->name != i->opt->name)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
107 free(i->name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
108 ct = i->next;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
109 free(i);
13824
bad703951cf9 a few 10l fixes by Wei Jiang <jiangw98@yahoo.com>
faust3
parents: 13699
diff changeset
110 i = ct;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
111 }
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
112 for(p = config->profiles ; p ; p = pn) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
113 pn = p->next;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
114 free(p->name);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
115 if(p->desc) free(p->desc);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
116 for(j = 0 ; j < p->num_opts ; j++) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
117 free(p->opts[2*j]);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
118 if(p->opts[2*j+1]) free(p->opts[2*j+1]);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
119 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
120 free(p->opts);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
121 free(p);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
122 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
123 free(config->self_opts);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
124 free(config);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
125 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
126
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
127 void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
128 m_config_push(m_config_t* config) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
129 m_config_option_t *co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
130 m_config_save_slot_t *slot;
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 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
133 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
134 assert(config->lvl > 0);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
135 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
136
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
137 config->lvl++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
138
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
139 for(co = config->opts ; co ; co = co->next ) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
140 if(co->opt->type->flags & M_OPT_TYPE_HAS_CHILD)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
141 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
142 if(co->opt->flags & (M_OPT_GLOBAL|M_OPT_NOSAVE))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
143 continue;
21054
7d5035aafcc6 Fix obvious typo, although the exact effect is still unclear to me, see also bug #593.
reimar
parents: 18879
diff changeset
144 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
145 continue;
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
146 if(co->flags & M_CFG_OPT_ALIAS)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
147 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
148
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
149 // Update the current status
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
150 m_option_save(co->opt,co->slots->data,co->opt->p);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
151
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
152 // Allocate a new slot
18879
cc65a585fdcc rm unnecesary casts from void* - part 3
reynaldo
parents: 18335
diff changeset
153 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
154 slot->lvl = config->lvl;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
155 slot->prev = co->slots;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
156 co->slots = slot;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
157 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
158 // Reset our set flag
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
159 co->flags &= ~M_CFG_OPT_SET;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
160 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
161
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
162 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
163 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
165 void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
166 m_config_pop(m_config_t* config) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
167 m_config_option_t *co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
168 m_config_save_slot_t *slot;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
169
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
170 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
171 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
172 assert(config->lvl > 1);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
173 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
174
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
175 for(co = config->opts ; co ; co = co->next ) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
176 int pop = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
177 if(co->opt->type->flags & M_OPT_TYPE_HAS_CHILD)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
178 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
179 if(co->opt->flags & (M_OPT_GLOBAL|M_OPT_NOSAVE))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
180 continue;
9912
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
181 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
182 continue;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
183 if(co->slots->lvl > config->lvl)
13699
11b249ef87b0 printf --> mp_msg by the Wanderer <inverseparadox at comcast dot net>
diego
parents: 10595
diff changeset
184 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
185
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
186 while(co->slots->lvl >= config->lvl) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
187 m_option_free(co->opt,co->slots->data);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
188 slot = co->slots;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
189 co->slots = slot->prev;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
190 free(slot);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
191 pop++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
192 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
193 if(pop) // We removed some ctx -> set the previous value
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
194 m_option_set(co->opt,co->opt->p,co->slots->data);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
195 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
196
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
197 config->lvl--;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
198 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
199 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
200
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
201 static void
25225
51c23a18a17b First try to mark some things in m_config correctly as const
reimar
parents: 23868
diff changeset
202 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
203 m_config_option_t *co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
204 m_config_save_slot_t* sl;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
205
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
206 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
207 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
208 assert(config->lvl > 0);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
209 assert(arg != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
210 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
211
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
212 // Allocate a new entry for this option
18879
cc65a585fdcc rm unnecesary casts from void* - part 3
reynaldo
parents: 18335
diff changeset
213 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
214 co->opt = arg;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
215
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
216 // Fill in the full name
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
217 if(prefix && strlen(prefix) > 0) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
218 int l = strlen(prefix) + 1 + strlen(arg->name) + 1;
23806
0a38ad149c5c Remove some more useless *alloc casts
reimar
parents: 21054
diff changeset
219 co->name = malloc(l);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
220 sprintf(co->name,"%s:%s",prefix,arg->name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
221 } else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
222 co->name = arg->name;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
223
23868
09c2fe1e021d Fix some typos in comments
reimar
parents: 23806
diff changeset
224 // Option with children -> add them
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
225 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
226 const m_option_t *ol = arg->p;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
227 int i;
13824
bad703951cf9 a few 10l fixes by Wei Jiang <jiangw98@yahoo.com>
faust3
parents: 13699
diff changeset
228 co->slots = NULL;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
229 for(i = 0 ; ol[i].name != NULL ; i++)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
230 m_config_add_option(config,&ol[i], co->name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
231 } else {
9912
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
232 m_config_option_t *i;
23868
09c2fe1e021d Fix some typos in comments
reimar
parents: 23806
diff changeset
233 // 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
234 if(arg->p) {
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
235 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
236 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
237 co->slots = i->slots;
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
238 co->flags |= M_CFG_OPT_ALIAS;
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
239 break;
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
240 }
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
241 }
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
242 }
39444d65c4cb Don't save restore all options wich point to the same variable.
albeu
parents: 9593
diff changeset
243 if(!(co->flags & M_CFG_OPT_ALIAS)) {
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
244 // Allocate a slot for the defaults
18879
cc65a585fdcc rm unnecesary casts from void* - part 3
reynaldo
parents: 18335
diff changeset
245 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
246 m_option_save(arg,sl->data,(void**)arg->p);
23868
09c2fe1e021d Fix some typos in comments
reimar
parents: 23806
diff changeset
247 // Hack to avoid too much trouble with dynamically allocated data :
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
248 // We always use a dynamic version
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
249 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
250 *(void**)arg->p = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
251 m_option_set(arg,arg->p,sl->data);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
252 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
253 sl->lvl = 0;
13824
bad703951cf9 a few 10l fixes by Wei Jiang <jiangw98@yahoo.com>
faust3
parents: 13699
diff changeset
254 sl->prev = NULL;
18879
cc65a585fdcc rm unnecesary casts from void* - part 3
reynaldo
parents: 18335
diff changeset
255 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
256 co->slots->prev = sl;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
257 co->slots->lvl = config->lvl;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
258 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
259 } // !M_OPT_ALIAS
8164
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 co->next = config->opts;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
262 config->opts = co;
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
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
265 int
25225
51c23a18a17b First try to mark some things in m_config correctly as const
reimar
parents: 23868
diff changeset
266 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
267 int i;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
268
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
269 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
270 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
271 assert(config->lvl > 0);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
272 assert(args != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
273 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
274
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
275 for(i = 0 ; args[i].name != NULL ; i++)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
276 m_config_add_option(config,&args[i],NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
277
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
278 return 1;
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
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
281 static m_config_option_t*
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
282 m_config_get_co(m_config_t *config, char* arg) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
283 m_config_option_t *co;
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 for(co = config->opts ; co ; co = co->next ) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
286 int l = strlen(co->name) - 1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
287 if((co->opt->type->flags & M_OPT_TYPE_ALLOW_WILDCARD) &&
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
288 (co->name[l] == '*')) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
289 if(strncasecmp(co->name,arg,l) == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
290 return co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
291 } else if(strcasecmp(co->name,arg) == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
292 return co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
293 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
294 return NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
295 }
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 static int
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
298 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
299 m_config_option_t *co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
300 int r = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
301
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
302 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
303 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
304 assert(config->lvl > 0);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
305 assert(arg != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
306 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
307
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
308 co = m_config_get_co(config,arg);
8892
06843e67a04b print meaningful error message
arpi
parents: 8512
diff changeset
309 if(!co){
8894
e6a83b140b39 better error handling for invalud suboptions
arpi
parents: 8892
diff changeset
310 // 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
311 return M_OPT_UNKNOWN;
8892
06843e67a04b print meaningful error message
arpi
parents: 8512
diff changeset
312 }
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
313
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
314 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
315 // This is the only mandatory function
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
316 assert(co->opt->type->parse);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
317 #endif
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 // 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
320 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
321 mp_msg(MSGT_CFGPARSER, MSGL_ERR,MSGTR_InvalidCfgfileOption,arg);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
322 return M_OPT_INVALID;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
323 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
324 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
325 mp_msg(MSGT_CFGPARSER, MSGL_ERR,MSGTR_InvalidCmdlineOption,arg);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
326 return M_OPT_INVALID;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
327 }
26408
7a36d5941fd8 Replace the trivial command line preparser with a more robust version
albeu
parents: 26288
diff changeset
328 // 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
329 // 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
330 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
331 !(co->opt->flags & M_OPT_PRE_PARSE)) ||
7a36d5941fd8 Replace the trivial command line preparser with a more robust version
albeu
parents: 26288
diff changeset
332 ((config->mode != M_COMMAND_LINE_PRE_PARSE) &&
7a36d5941fd8 Replace the trivial command line preparser with a more robust version
albeu
parents: 26288
diff changeset
333 (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
334 set = 0;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
335
23868
09c2fe1e021d Fix some typos in comments
reimar
parents: 23806
diff changeset
336 // Option with children are a bit different to parse
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
337 if(co->opt->type->flags & M_OPT_TYPE_HAS_CHILD) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
338 char** lst = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
339 int i,sr;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
340 // 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
341 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
342 // Set them now
8894
e6a83b140b39 better error handling for invalud suboptions
arpi
parents: 8892
diff changeset
343 if(r >= 0)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
344 for(i = 0 ; lst && lst[2*i] ; i++) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
345 int l = strlen(co->name) + 1 + strlen(lst[2*i]) + 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
346 if(r >= 0) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
347 // Build the full name
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
348 char n[l];
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
349 sprintf(n,"%s:%s",co->name,lst[2*i]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
350 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
351 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
352 if(sr == M_OPT_UNKNOWN){
13699
11b249ef87b0 printf --> mp_msg by the Wanderer <inverseparadox at comcast dot net>
diego
parents: 10595
diff changeset
353 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
354 r = M_OPT_INVALID;
e6a83b140b39 better error handling for invalud suboptions
arpi
parents: 8892
diff changeset
355 } else
9222
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
356 if(sr == M_OPT_MISSING_PARAM){
13699
11b249ef87b0 printf --> mp_msg by the Wanderer <inverseparadox at comcast dot net>
diego
parents: 10595
diff changeset
357 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
358 r = M_OPT_INVALID;
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
359 } else
8894
e6a83b140b39 better error handling for invalud suboptions
arpi
parents: 8892
diff changeset
360 r = sr;
e6a83b140b39 better error handling for invalud suboptions
arpi
parents: 8892
diff changeset
361 }
8164
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 free(lst[2*i]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
364 free(lst[2*i+1]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
365 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
366 if(lst) free(lst);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
367 } else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
368 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
369
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
370 // Parsing failed ?
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
371 if(r < 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
372 return r;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
373 // Set the option
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
374 if(set) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
375 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
376 co->flags |= M_CFG_OPT_SET;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
377 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
378
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
379 return r;
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
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
382 int
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
383 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
384 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
385 return m_config_parse_option(config,arg,param,1);
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
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
388 int
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
389 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
390 int r;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
391 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
392 r=m_config_parse_option(config,arg,param,0);
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
393 if(r==M_OPT_MISSING_PARAM){
13699
11b249ef87b0 printf --> mp_msg by the Wanderer <inverseparadox at comcast dot net>
diego
parents: 10595
diff changeset
394 mp_msg(MSGT_CFGPARSER, MSGL_ERR,MSGTR_MissingOptionParameter,arg);
9222
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
395 return M_OPT_INVALID;
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
396 }
d3da9b617aa8 print meaningful error message for missing parameter
arpi
parents: 8894
diff changeset
397 return r;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
398 }
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 m_option_t*
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
402 m_config_get_option(m_config_t *config, char* arg) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
403 m_config_option_t *co;
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(config->lvl > 0);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
408 assert(arg != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
409 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
410
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
411 co = m_config_get_co(config,arg);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
412 if(co)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
413 return co->opt;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
414 else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
415 return NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
416 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
417
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
418
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
419 void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
420 m_config_print_option_list(m_config_t *config) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
421 char min[50],max[50];
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
422 m_config_option_t* co;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
423 int count = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
424
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
425 if(!config->opts) return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
426
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
427 mp_msg(MSGT_CFGPARSER, MSGL_INFO, MSGTR_OptionListHeader);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
428 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
429 const m_option_t* opt = co->opt;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
430 if(opt->type->flags & M_OPT_TYPE_HAS_CHILD) continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
431 if(opt->flags & M_OPT_MIN)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
432 sprintf(min,"%-8.0f",opt->min);
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(min,"No");
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
435 if(opt->flags & M_OPT_MAX)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
436 sprintf(max,"%-8.0f",opt->max);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
437 else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
438 strcpy(max,"No");
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
439 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
440 co->name,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
441 co->opt->type->name,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
442 min,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
443 max,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
444 opt->flags & CONF_GLOBAL ? "Yes" : "No",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
445 opt->flags & CONF_NOCMD ? "No" : "Yes",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
446 opt->flags & CONF_NOCFG ? "No" : "Yes");
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
447 count++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
448 }
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
449 mp_msg(MSGT_CFGPARSER, MSGL_INFO, MSGTR_TotalOptions,count);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
450 }
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
451
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
452 m_profile_t*
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
453 m_config_get_profile(m_config_t* config, char* name) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
454 m_profile_t* p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
455 for(p = config->profiles ; p ; p = p->next)
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
456 if(!strcmp(p->name,name)) return p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
457 return NULL;
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 m_profile_t*
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
461 m_config_add_profile(m_config_t* config, char* name) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
462 m_profile_t* p = m_config_get_profile(config,name);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
463 if(p) return p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
464 p = calloc(1,sizeof(m_profile_t));
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
465 p->name = strdup(name);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
466 p->next = config->profiles;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
467 config->profiles = p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
468 return p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
469 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
470
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
471 void
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
472 m_profile_set_desc(m_profile_t* p, char* desc) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
473 if(p->desc) free(p->desc);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
474 p->desc = desc ? strdup(desc) : NULL;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
475 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
476
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
477 int
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
478 m_config_set_profile_option(m_config_t* config, m_profile_t* p,
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
479 char* name, char* val) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
480 int i = m_config_check_option(config,name,val);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
481 if(i < 0) return i;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
482 if(p->opts) p->opts = realloc(p->opts,2*(p->num_opts+2)*sizeof(char*));
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
483 else p->opts = malloc(2*(p->num_opts+2)*sizeof(char*));
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
484 p->opts[p->num_opts*2] = strdup(name);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
485 p->opts[p->num_opts*2+1] = val ? strdup(val) : NULL;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
486 p->num_opts++;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
487 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
488 return 1;
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
489 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
490
25634
4344e84f7a9f export m_config_set_profile()
ben
parents: 25225
diff changeset
491 void
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
492 m_config_set_profile(m_config_t* config, m_profile_t* p) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
493 int i;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
494 if(config->profile_depth > MAX_PROFILE_DEPTH) {
18335
5766a9d21992 Rename some misspelled and misnamed messages.
diego
parents: 18258
diff changeset
495 mp_msg(MSGT_CFGPARSER, MSGL_WARN, MSGTR_ProfileInclusionTooDeep);
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
496 return;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
497 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
498 config->profile_depth++;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
499 for(i = 0 ; i < p->num_opts ; i++)
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
500 m_config_set_option(config,p->opts[2*i],p->opts[2*i+1]);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
501 config->profile_depth--;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
502 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
503
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
504 static int
30695
a26f6577d338 Make more option-parsing related function arguments const.
reimar
parents: 30631
diff changeset
505 parse_profile(const m_option_t *opt, const char *name, const char *param, void *dst, int src)
26288
6e53dfe38594 Add some const qualifiers to reduce warnings
uau
parents: 25962
diff changeset
506 {
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
507 m_config_t* config = opt->priv;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
508 char** list = NULL;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
509 int i,r;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
510 if(param && !strcmp(param,"help")) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
511 m_profile_t* p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
512 if(!config->profiles) {
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
513 mp_msg(MSGT_CFGPARSER, MSGL_INFO, MSGTR_NoProfileDefined);
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
514 return M_OPT_EXIT-1;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
515 }
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
516 mp_msg(MSGT_CFGPARSER, MSGL_INFO, MSGTR_AvailableProfiles);
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
517 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
518 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "\t%s\t%s\n",p->name,
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
519 p->desc ? p->desc : "");
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
520 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "\n");
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
521 return M_OPT_EXIT-1;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
522 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
523
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
524 r = m_option_type_string_list.parse(opt,name,param,&list,src);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
525 if(r < 0) return r;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
526 if(!list || !list[0]) return M_OPT_INVALID;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
527 for(i = 0 ; list[i] ; i++)
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
528 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
529 mp_msg(MSGT_CFGPARSER, MSGL_WARN, MSGTR_UnknownProfile,
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
530 list[i]);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
531 r = M_OPT_INVALID;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
532 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
533 if(dst)
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
534 m_option_copy(opt,dst,&list);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
535 else
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
536 m_option_free(opt,&list);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
537 return r;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
538 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
539
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
540 static void
30695
a26f6577d338 Make more option-parsing related function arguments const.
reimar
parents: 30631
diff changeset
541 set_profile(const m_option_t *opt, void *dst, const void *src) {
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
542 m_config_t* config = opt->priv;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
543 m_profile_t* p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
544 char** list = NULL;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
545 int i;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
546 if(!src || !*(char***)src) return;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
547 m_option_copy(opt,&list,src);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
548 for(i = 0 ; list[i] ; i++) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
549 p = m_config_get_profile(config,list[i]);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
550 if(!p) continue;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
551 m_config_set_profile(config,p);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
552 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
553 m_option_free(opt,&list);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
554 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
555
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
556 static int
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
557 show_profile(m_option_t *opt, char* name, char *param) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
558 m_config_t* config = opt->priv;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
559 m_profile_t* p;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
560 int i,j;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
561 if(!param) return M_OPT_MISSING_PARAM;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
562 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
563 mp_msg(MSGT_CFGPARSER, MSGL_ERR, MSGTR_UnknownProfile, param);
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
564 return M_OPT_EXIT-1;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
565 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
566 if(!config->profile_depth)
17481
99c0caec4677 Fix the MSG?_FIXME and make the profiles help translatable.
albeu
parents: 17472
diff changeset
567 mp_msg(MSGT_CFGPARSER, MSGL_INFO, MSGTR_Profile, param,
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
568 p->desc ? p->desc : "");
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
569 config->profile_depth++;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
570 for(i = 0 ; i < p->num_opts ; i++) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
571 char spc[config->profile_depth+1];
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
572 for(j = 0 ; j < config->profile_depth ; j++)
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
573 spc[j] = ' ';
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
574 spc[config->profile_depth] = '\0';
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
575
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
576 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "%s%s=%s\n", spc,
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
577 p->opts[2*i], p->opts[2*i+1]);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26408
diff changeset
578
17471
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
579
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
580 if(config->profile_depth < MAX_PROFILE_DEPTH &&
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
581 !strcmp(p->opts[2*i],"profile")) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
582 char* e,*list = p->opts[2*i+1];
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
583 while((e = strchr(list,','))) {
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
584 int l = e-list;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
585 char tmp[l+1];
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
586 if(!l) continue;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
587 memcpy(tmp,list,l);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
588 tmp[l] = '\0';
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
589 show_profile(opt,name,tmp);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
590 list = e+1;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
591 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
592 if(list[0] != '\0')
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
593 show_profile(opt,name,list);
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
594 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
595 }
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
596 config->profile_depth--;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
597 if(!config->profile_depth) mp_msg(MSGT_CFGPARSER, MSGL_INFO, "\n");
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
598 return M_OPT_EXIT-1;
63909962d3fc Profiles support.
albeu
parents: 13824
diff changeset
599 }
17472
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
600
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
601 static int
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
602 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
603 m_config_t* config = opt->priv;
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
604 m_config_print_option_list(config);
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
605 return M_OPT_EXIT;
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 17471
diff changeset
606 }