vlc_configuration.h 19.9 KB
Newer Older
gbazin's avatar
   
gbazin committed
1
2
3
4
5
/*****************************************************************************
 * configuration.h : configuration management module
 * This file describes the programming interface for the configuration module.
 * It includes functions allowing to declare, get or set configuration options.
 *****************************************************************************
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
6
 * Copyright (C) 1999-2006 the VideoLAN team
7
 * $Id$
gbazin's avatar
   
gbazin committed
8
 *
9
 * Authors: Gildas Bazin <gbazin@videolan.org>
gbazin's avatar
   
gbazin committed
10
11
12
13
14
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
zorglub's avatar
zorglub committed
15
 *
gbazin's avatar
   
gbazin committed
16
17
18
19
20
21
22
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
dionoea's avatar
dionoea committed
23
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
gbazin's avatar
   
gbazin committed
24
25
 *****************************************************************************/

zorglub's avatar
zorglub committed
26
27
28
29
#if !defined( __LIBVLC__ )
  #error You are not libvlc or one of its plugins. You cannot include this file
#endif

30
31
32
33
#ifndef _VLC_CONFIGURATION_H
#define _VLC_CONFIGURATION_H 1


zorglub's avatar
zorglub committed
34
35
36
37
# ifdef __cplusplus
extern "C" {
# endif

gbazin's avatar
   
gbazin committed
38
39
40
41
/*****************************************************************************
 * Macros used to build the configuration structure.
 *****************************************************************************/

gbazin's avatar
   
gbazin committed
42
/* Configuration hint types */
zorglub's avatar
zorglub committed
43
44


gbazin's avatar
   
gbazin committed
45
46
47
48
#define CONFIG_HINT_CATEGORY                0x0002  /* Start of new category */
#define CONFIG_HINT_SUBCATEGORY             0x0003  /* Start of sub-category */
#define CONFIG_HINT_SUBCATEGORY_END         0x0004  /* End of sub-category */
#define CONFIG_HINT_USAGE                   0x0005  /* Usage information */
gbazin's avatar
   
gbazin committed
49

zorglub's avatar
zorglub committed
50
51
52
53
#define CONFIG_CATEGORY                     0x0006 /* Set category */
#define CONFIG_SUBCATEGORY                  0x0007 /* Set subcategory */
#define CONFIG_SECTION                      0x0008 /* Start of new section */

gbazin's avatar
   
gbazin committed
54
#define CONFIG_HINT                         0x000F
gbazin's avatar
   
gbazin committed
55
56

/* Configuration item types */
gbazin's avatar
   
gbazin committed
57
58
59
60
61
62
#define CONFIG_ITEM_STRING                  0x0010  /* String option */
#define CONFIG_ITEM_FILE                    0x0020  /* File option */
#define CONFIG_ITEM_MODULE                  0x0030  /* Module option */
#define CONFIG_ITEM_INTEGER                 0x0040  /* Integer option */
#define CONFIG_ITEM_BOOL                    0x0050  /* Bool option */
#define CONFIG_ITEM_FLOAT                   0x0060  /* Float option */
gbazin's avatar
   
gbazin committed
63
#define CONFIG_ITEM_DIRECTORY               0x0070  /* Directory option */
64
#define CONFIG_ITEM_KEY                     0x0080  /* Hot key option */
65
66
67
#define CONFIG_ITEM_MODULE_CAT              0x0090  /* Module option */
#define CONFIG_ITEM_MODULE_LIST             0x00A0  /* Module option */
#define CONFIG_ITEM_MODULE_LIST_CAT         0x00B0  /* Module option */
yoann's avatar
yoann committed
68
#define CONFIG_ITEM_FONT                    0x00C0  /* Font option */
69
#define CONFIG_ITEM_PASSWORD                0x00D0  /* Password option (*) */
gbazin's avatar
   
gbazin committed
70

gbazin's avatar
   
gbazin committed
71
#define CONFIG_ITEM                         0x00F0
gbazin's avatar
   
gbazin committed
72

zorglub's avatar
zorglub committed
73
74
75
76
77
/*******************************************************************
 * All predefined categories and subcategories
 *******************************************************************/
#define CAT_INTERFACE 1
   #define SUBCAT_INTERFACE_GENERAL 101
zorglub's avatar
zorglub committed
78
79
80
   #define SUBCAT_INTERFACE_MAIN 102
   #define SUBCAT_INTERFACE_CONTROL 103
   #define SUBCAT_INTERFACE_HOTKEYS 104
zorglub's avatar
zorglub committed
81
82
83
84
85
86
87
88
89
90
91
92
93
94

#define CAT_AUDIO 2
   #define SUBCAT_AUDIO_GENERAL 201
   #define SUBCAT_AUDIO_AOUT 202
   #define SUBCAT_AUDIO_AFILTER 203
   #define SUBCAT_AUDIO_VISUAL 204
   #define SUBCAT_AUDIO_MISC 205

#define CAT_VIDEO 3
   #define SUBCAT_VIDEO_GENERAL 301
   #define SUBCAT_VIDEO_VOUT 302
   #define SUBCAT_VIDEO_VFILTER 303
   #define SUBCAT_VIDEO_TEXT 304
   #define SUBCAT_VIDEO_SUBPIC 305
95
   #define SUBCAT_VIDEO_VFILTER2 306
zorglub's avatar
zorglub committed
96
97

#define CAT_INPUT 4
98
99
100
101
102
103
104
   #define SUBCAT_INPUT_GENERAL 401
   #define SUBCAT_INPUT_ACCESS 402
   #define SUBCAT_INPUT_ACCESS_FILTER 403
   #define SUBCAT_INPUT_DEMUX 404
   #define SUBCAT_INPUT_VCODEC 405
   #define SUBCAT_INPUT_ACODEC 406
   #define SUBCAT_INPUT_SCODEC 407
zorglub's avatar
zorglub committed
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125

#define CAT_SOUT 5
   #define SUBCAT_SOUT_GENERAL 501
   #define SUBCAT_SOUT_STREAM 502
   #define SUBCAT_SOUT_MUX 503
   #define SUBCAT_SOUT_ACO 504
   #define SUBCAT_SOUT_PACKETIZER 505
   #define SUBCAT_SOUT_SAP 506
   #define SUBCAT_SOUT_VOD 507

#define CAT_ADVANCED 6
   #define SUBCAT_ADVANCED_CPU 601
   #define SUBCAT_ADVANCED_MISC 602
   #define SUBCAT_ADVANCED_NETWORK 603
   #define SUBCAT_ADVANCED_XML 604

#define CAT_PLAYLIST 7
   #define SUBCAT_PLAYLIST_GENERAL 701
   #define SUBCAT_PLAYLIST_SD 702
   #define SUBCAT_PLAYLIST_EXPORT 703

126
127
128
#define CAT_OSD 8
   #define SUBCAT_OSD_IMPORT 801

zorglub's avatar
zorglub committed
129
130
131
struct config_category_t
{
    int         i_id;
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
132
133
    const char *psz_name;
    const char *psz_help;
zorglub's avatar
zorglub committed
134
135
};

136
137
typedef union
{
138
    char       *psz;
139
140
141
142
143
144
145
146
147
148
    int         i;
    float       f;
} module_value_t;

typedef union
{
    int         i;
    float       f;
} module_nvalue_t;

149
struct module_config_t
gbazin's avatar
   
gbazin committed
150
{
Sam Hocevar's avatar
   
Sam Hocevar committed
151
    int          i_type;                               /* Configuration type */
152
153
    char        *psz_type;                          /* Configuration subtype */
    char        *psz_name;                                    /* Option name */
Sam Hocevar's avatar
   
Sam Hocevar committed
154
    char         i_short;                      /* Optional short option name */
155
156
    char        *psz_text;      /* Short comment on the configuration option */
    char        *psz_longtext;   /* Long comment on the configuration option */
157
158
159
160
161
    module_value_t value;                                    /* Option value */
    module_value_t orig;
    module_value_t saved;
    module_nvalue_t min;
    module_nvalue_t max;
gbazin's avatar
   
gbazin committed
162

163
    /* Function to call when commiting a change */
gbazin's avatar
   
gbazin committed
164
165
    vlc_callback_t pf_callback;
    void          *p_callback_data;
166

167
    /* Values list */
168
    char **      ppsz_list;       /* List of possible values for the option */
dionoea's avatar
dionoea committed
169
    int         *pi_list;                              /* Idem for integers */
170
    char       **ppsz_list_text;          /* Friendly names for list values */
dionoea's avatar
dionoea committed
171
    int          i_list;                               /* Options list size */
172
    vlc_callback_t pf_update_list; /*callback to initialize dropdownlists */
gbazin's avatar
   
gbazin committed
173

174
175
    /* Actions list */
    vlc_callback_t *ppf_action;    /* List of possible actions for a config */
176
    char          **ppsz_action_text;         /* Friendly names for actions */
dionoea's avatar
dionoea committed
177
    int            i_action;                           /* actions list size */
178
179

    /* Misc */
gbazin's avatar
   
gbazin committed
180
    vlc_mutex_t *p_lock;            /* Lock to use when modifying the config */
181
182
183
184
    bool   b_dirty;          /* Dirty flag to indicate a config change */
    bool   b_advanced;          /* Flag to indicate an advanced option */
    bool   b_internal;   /* Flag to indicate option is not to be shown */
    bool   b_restart;   /* Flag to indicate the option needs a restart */
dionoea's avatar
dionoea committed
185
                              /* to take effect */
gbazin's avatar
   
gbazin committed
186

187
    /* Deprecated */
188
    char          *psz_oldname;                          /* Old option name */
189
    bool     b_removed;
190
191

    /* Option values loaded from config file */
192
193
    bool   b_autosave;      /* Config will be auto-saved at exit time */
    bool   b_unsaveable;                /* Config should not be saved */
194

195
    bool   b_safe;
196
};
gbazin's avatar
   
gbazin committed
197
198
199
200
201

/*****************************************************************************
 * Prototypes - these methods are used to get, set or manipulate configuration
 * data.
 *****************************************************************************/
gbazin's avatar
   
gbazin committed
202
VLC_EXPORT( int,    __config_GetType,  (vlc_object_t *, const char *) );
203
204
205
206
207
VLC_EXPORT( int,    __config_GetInt,   (vlc_object_t *, const char *) );
VLC_EXPORT( void,   __config_PutInt,   (vlc_object_t *, const char *, int) );
VLC_EXPORT( float,  __config_GetFloat, (vlc_object_t *, const char *) );
VLC_EXPORT( void,   __config_PutFloat, (vlc_object_t *, const char *, float) );
VLC_EXPORT( char *, __config_GetPsz,   (vlc_object_t *, const char *) );
208
VLC_EXPORT( void,   __config_PutPsz,   (vlc_object_t *, const char *, const char *) );
209

zorglub's avatar
zorglub committed
210
#define config_SaveConfigFile(a,b) __config_SaveConfigFile(VLC_OBJECT(a),b)
211
VLC_EXPORT( int,    __config_SaveConfigFile, ( vlc_object_t *, const char * ) );
zorglub's avatar
zorglub committed
212
#define config_ResetAll(a) __config_ResetAll(VLC_OBJECT(a))
gbazin's avatar
   
gbazin committed
213
214
VLC_EXPORT( void,   __config_ResetAll, ( vlc_object_t * ) );

215
VLC_EXPORT( module_config_t *, config_FindConfig,( vlc_object_t *, const char * ) );
gbazin's avatar
   
gbazin committed
216

217
VLC_EXPORT(const char *, config_GetDataDir, ( void ));
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
218
VLC_EXPORT(const char *, config_GetConfDir, ( void ) );
219
VLC_EXPORT(char *, config_GetUserConfDir, ( void ) );
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
220
221
VLC_EXPORT(char *, config_GetUserDataDir, ( void ) );
VLC_EXPORT(char *, config_GetCacheDir, ( void ) );
zorglub's avatar
zorglub committed
222

223
224
VLC_EXPORT( void,       __config_AddIntf,    ( vlc_object_t *, const char * ) );
VLC_EXPORT( void,       __config_RemoveIntf, ( vlc_object_t *, const char * ) );
225
VLC_EXPORT( bool, __config_ExistIntf,  ( vlc_object_t *, const char * ) );
226

gbazin's avatar
   
gbazin committed
227
#define config_GetType(a,b) __config_GetType(VLC_OBJECT(a),b)
228
229
230
231
232
233
#define config_GetInt(a,b) __config_GetInt(VLC_OBJECT(a),b)
#define config_PutInt(a,b,c) __config_PutInt(VLC_OBJECT(a),b,c)
#define config_GetFloat(a,b) __config_GetFloat(VLC_OBJECT(a),b)
#define config_PutFloat(a,b,c) __config_PutFloat(VLC_OBJECT(a),b,c)
#define config_GetPsz(a,b) __config_GetPsz(VLC_OBJECT(a),b)
#define config_PutPsz(a,b,c) __config_PutPsz(VLC_OBJECT(a),b,c)
gbazin's avatar
   
gbazin committed
234

235
236
237
238
#define config_AddIntf(a,b) __config_AddIntf(VLC_OBJECT(a),b)
#define config_RemoveIntf(a,b) __config_RemoveIntf(VLC_OBJECT(a),b)
#define config_ExistIntf(a,b) __config_ExistIntf(VLC_OBJECT(a),b)

239
enum vlc_config_properties
240
241
242
{
    /* DO NOT EVER REMOVE, INSERT OR REPLACE ANY ITEM! It would break the ABI!
     * Append new items at the end ONLY. */
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275

    VLC_CONFIG_NAME,
    /* command line name (args=const char *, vlc_callback_t) */

    VLC_CONFIG_DESC,
    /* description (args=const char *, const char *) */

    VLC_CONFIG_VALUE,
    /* actual value (args=int/double/const char *) */

    VLC_CONFIG_RANGE,
    /* minimum value (args=int/double/const char * twice) */

    VLC_CONFIG_ADVANCED,
    /* enable advanced flag (args=none) */

    VLC_CONFIG_VOLATILE,
    /* don't write variable to storage (args=none) */

    VLC_CONFIG_PERSISTENT,
    /* always write variable to storage (args=none) */

    VLC_CONFIG_RESTART,
    /* restart required to apply value change (args=none) */

    VLC_CONFIG_PRIVATE,
    /* hide from user (args=none) */

    VLC_CONFIG_REMOVED,
    /* tag as no longer supported (args=none) */

    VLC_CONFIG_CAPABILITY,
    /* capability for a module or list thereof (args=const char*) */
276
277
278
279
280
281
282

    VLC_CONFIG_SHORTCUT,
    /* one-character (short) command line option name (args=char) */

    VLC_CONFIG_LIST,
    /* possible values list
     * (args=size_t, const <type> *, const char *const *) */
283
284
285

    VLC_CONFIG_ADD_ACTION,
    /* add value change callback (args=vlc_callback_t, const char *) */
286
287
288

    VLC_CONFIG_OLDNAME,
    /* former option name (args=const char *) */
289

Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
290
    VLC_CONFIG_SAFE,
291
    /* tag as modifiable by untrusted input item "sources" (args=none) */
292
};
293
294


295
VLC_EXPORT( module_config_t *, vlc_config_create, (module_t *, int type) );
296
VLC_EXPORT( int, vlc_config_set, (module_config_t *, int, ...) );
297

gbazin's avatar
   
gbazin committed
298
299
300
/*****************************************************************************
 * Macros used to build the configuration structure.
 *
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
301
 * Note that internally we support only 3 types of config data: int, float
gbazin's avatar
   
gbazin committed
302
303
 *   and string.
 *   The other types declared here just map to one of these 3 basic types but
gbazin's avatar
   
gbazin committed
304
305
306
 *   have the advantage of also providing very good hints to a configuration
 *   interface so as to make it more user friendly.
 * The configuration structure also includes category hints. These hints can
gbazin's avatar
   
gbazin committed
307
308
 *   provide a configuration interface with some very useful data and again
 *   allow for a more user friendly interface.
gbazin's avatar
   
gbazin committed
309
310
 *****************************************************************************/

311
#define add_type_inner( type ) \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
312
    p_config = vlc_config_create (p_module, type)
313
314
315

#define add_typedesc_inner( type, text, longtext ) \
    add_type_inner( type ); \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
316
    vlc_config_set (p_config, VLC_CONFIG_DESC, \
317
                    (const char *)(text), (const char *)(longtext))
318
319
320

#define add_typeadv_inner( type, text, longtext, advc ) \
    add_typedesc_inner( type, text, longtext ); \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
321
    if (advc) vlc_config_set (p_config, VLC_CONFIG_ADVANCED)
322
323
324

#define add_typename_inner( type, name, text, longtext, advc, cb ) \
    add_typeadv_inner( type, text, longtext, advc ); \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
325
    vlc_config_set (p_config, VLC_CONFIG_NAME, \
326
                    (const char *)(name), (vlc_callback_t)(cb))
327

328
#define add_string_inner( type, name, text, longtext, advc, cb, v ) \
329
    add_typename_inner( type, name, text, longtext, advc, cb ); \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
330
    vlc_config_set (p_config, VLC_CONFIG_VALUE, (const char *)(v))
331

332
#define add_int_inner( type, name, text, longtext, advc, cb, v ) \
333
    add_typename_inner( type, name, text, longtext, advc, cb ); \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
334
    vlc_config_set (p_config, VLC_CONFIG_VALUE, (int)(v))
335
336
337
338


#define set_category( i_id ) \
    add_type_inner( CONFIG_CATEGORY ); \
339
    vlc_config_set (p_config, VLC_CONFIG_VALUE, (int)(i_id))
zorglub's avatar
zorglub committed
340
341

#define set_subcategory( i_id ) \
342
    add_type_inner( CONFIG_SUBCATEGORY ); \
343
    vlc_config_set (p_config, VLC_CONFIG_VALUE, (int)(i_id))
344
345
346

#define set_section( text, longtext ) \
    add_typedesc_inner( CONFIG_SECTION, text, longtext )
zorglub's avatar
zorglub committed
347
348

#define add_category_hint( text, longtext, advc ) \
349
    add_typeadv_inner( CONFIG_HINT_CATEGORY, text, longtext, advc )
zorglub's avatar
zorglub committed
350
351

#define add_subcategory_hint( text, longtext ) \
352
    add_typedesc_inner( CONFIG_HINT_SUBCATEGORY, text, longtext )
zorglub's avatar
zorglub committed
353

354
#define end_subcategory_hint \
355
356
    add_type_inner( CONFIG_HINT_SUBCATEGORY_END )

357
#define add_usage_hint( text ) \
358
    add_typedesc_inner( CONFIG_HINT_USAGE, text, NULL )
359

360
361
#define add_string( name, value, p_callback, text, longtext, advc ) \
    add_string_inner( CONFIG_ITEM_STRING, name, text, longtext, advc, p_callback, value )
zorglub's avatar
zorglub committed
362

363
#define add_password( name, value, p_callback, text, longtext, advc ) \
364
    add_string_inner( CONFIG_ITEM_PASSWORD, name, text, longtext, advc, p_callback, value )
365

366
367
#define add_file( name, value, p_callback, text, longtext, advc ) \
    add_string_inner( CONFIG_ITEM_FILE, name, text, longtext, advc, p_callback, value )
zorglub's avatar
zorglub committed
368

369
370
#define add_directory( name, value, p_callback, text, longtext, advc ) \
    add_string_inner( CONFIG_ITEM_DIRECTORY, name, text, longtext, advc, p_callback, value )
zorglub's avatar
zorglub committed
371

372
373
#define add_module( name, psz_caps, value, p_callback, text, longtext, advc ) \
    add_string_inner( CONFIG_ITEM_MODULE, name, text, longtext, advc, p_callback, value ); \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
374
    vlc_config_set (p_config, VLC_CONFIG_CAPABILITY, (const char *)(psz_caps))
zorglub's avatar
zorglub committed
375

376
377
#define add_module_list( name, psz_caps, value, p_callback, text, longtext, advc ) \
    add_string_inner( CONFIG_ITEM_MODULE_LIST, name, text, longtext, advc, p_callback, value ); \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
378
    vlc_config_set (p_config, VLC_CONFIG_CAPABILITY, (const char *)(psz_caps))
zorglub's avatar
zorglub committed
379

380
381
382
#ifndef __PLUGIN__
#define add_module_cat( name, i_subcategory, value, p_callback, text, longtext, advc ) \
    add_string_inner( CONFIG_ITEM_MODULE_CAT, name, text, longtext, advc, p_callback, value ); \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
383
    p_config->min.i = i_subcategory /* gruik */
384

385
386
#define add_module_list_cat( name, i_subcategory, value, p_callback, text, longtext, advc ) \
    add_string_inner( CONFIG_ITEM_MODULE_LIST_CAT, name, text, longtext, advc, p_callback, value ); \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
387
    p_config->min.i = i_subcategory /* gruik */
388
#endif
zorglub's avatar
zorglub committed
389

390
391
#define add_integer( name, value, p_callback, text, longtext, advc ) \
    add_int_inner( CONFIG_ITEM_INTEGER, name, text, longtext, advc, p_callback, value )
zorglub's avatar
zorglub committed
392

393
394
#define add_key( name, value, p_callback, text, longtext, advc ) \
    add_int_inner( CONFIG_ITEM_KEY, name, text, longtext, advc, p_callback, value )
zorglub's avatar
zorglub committed
395

396
397
398
#define add_integer_with_range( name, value, i_min, i_max, p_callback, text, longtext, advc ) \
    add_integer( name, value, p_callback, text, longtext, advc ); \
    change_integer_range( i_min, i_max )
zorglub's avatar
zorglub committed
399

400
#define add_float( name, v, p_callback, text, longtext, advc ) \
401
    add_typename_inner( CONFIG_ITEM_FLOAT, name, text, longtext, advc, p_callback ); \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
402
    vlc_config_set (p_config, VLC_CONFIG_VALUE, (double)(v))
zorglub's avatar
zorglub committed
403

404
405
406
407
#define add_float_with_range( name, value, f_min, f_max, p_callback, text, longtext, advc ) \
    add_float( name, value, p_callback, text, longtext, advc ); \
    change_float_range( f_min, f_max )

408
#define add_bool( name, v, p_callback, text, longtext, advc ) \
409
    add_typename_inner( CONFIG_ITEM_BOOL, name, text, longtext, advc, p_callback ); \
410
    if (v) vlc_config_set (p_config, VLC_CONFIG_VALUE, (int)true)
zorglub's avatar
zorglub committed
411

Rémi Denis-Courmont's avatar
Grammar    
Rémi Denis-Courmont committed
412
/* For removed option */
413
#define add_obsolete_inner( name, type ) \
414
    add_type_inner( type ); \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
415
    vlc_config_set (p_config, VLC_CONFIG_NAME, \
416
                    (const char *)(name), (vlc_callback_t)NULL); \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
417
    vlc_config_set (p_config, VLC_CONFIG_REMOVED)
418

419
420
#define add_obsolete_bool( name ) \
        add_obsolete_inner( name, CONFIG_ITEM_BOOL )
421

422
423
#define add_obsolete_integer( name ) \
        add_obsolete_inner( name, CONFIG_ITEM_INTEGER )
424

425
426
#define add_obsolete_float( name ) \
        add_obsolete_inner( name, CONFIG_ITEM_FLOAT )
427

428
429
#define add_obsolete_string( name ) \
        add_obsolete_inner( name, CONFIG_ITEM_STRING )
430

431
/* Modifier macros for the config options (used for fine tuning) */
432
433

#define add_deprecated_alias( name ) \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
434
    vlc_config_set (p_config, VLC_CONFIG_OLDNAME, (const char *)(name))
435

436
#define change_short( ch ) \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
437
    vlc_config_set (p_config, VLC_CONFIG_SHORTCUT, (int)(ch))
438
439

#define change_string_list( list, list_text, list_update_func ) \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
440
    vlc_config_set (p_config, VLC_CONFIG_LIST, \
441
442
                    (size_t)(sizeof (list) / sizeof (char *)), \
                    (const char *const *)(list), \
443
444
                    (const char *const *)(list_text), \
                    list_update_func)
445
446

#define change_integer_list( list, list_text, list_update_func ) \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
447
    vlc_config_set (p_config, VLC_CONFIG_LIST, \
448
449
                    (size_t)(sizeof (list) / sizeof (int)), \
                    (const int *)(list), \
450
451
                    (const char *const *)(list_text), \
                    list_update_func)
452
453

#define change_float_list( list, list_text, list_update_func ) \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
454
    vlc_config_set (p_config, VLC_CONFIG_LIST, \
455
456
                    (size_t)(sizeof (list) / sizeof (float)), \
                    (const float *)(list), \
457
458
                    (const char *const *)(list_text), \
                    list_update_func)
459

460
#define change_integer_range( minv, maxv ) \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
461
    vlc_config_set (p_config, VLC_CONFIG_RANGE, (int)(minv), (int)(maxv))
462

463
#define change_float_range( minv, maxv ) \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
464
    vlc_config_set (p_config, VLC_CONFIG_RANGE, \
465
                    (double)(minv), (double)(maxv))
466

467
#define change_action_add( pf_action, text ) \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
468
    vlc_config_set (p_config, VLC_CONFIG_ADD_ACTION, \
469
                    (vlc_callback_t)(pf_action), (const char *)(text))
470

471
#define change_internal() \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
472
    vlc_config_set (p_config, VLC_CONFIG_PRIVATE)
473

474
#define change_need_restart() \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
475
    vlc_config_set (p_config, VLC_CONFIG_RESTART)
476

477
#define change_autosave() \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
478
    vlc_config_set (p_config, VLC_CONFIG_PERSISTENT)
479

480
#define change_unsaveable() \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
481
    vlc_config_set (p_config, VLC_CONFIG_VOLATILE)
482

Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
483
484
485
486
#define change_unsafe() (void)0 /* no-op */

#define change_safe() \
    vlc_config_set (p_config, VLC_CONFIG_SAFE)
487

488
489
490
491
492
493
494
495
496
497
498
499
/****************************************************************************
 * config_chain_t:
 ****************************************************************************/
struct config_chain_t
{
    config_chain_t *p_next;

    char        *psz_name;
    char        *psz_value;
};

#define config_ChainParse( a, b, c, d ) __config_ChainParse( VLC_OBJECT(a), b, c, d )
500
VLC_EXPORT( void,   __config_ChainParse, ( vlc_object_t *, const char *psz_prefix, const char *const *ppsz_options, config_chain_t * ) );
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
501
VLC_EXPORT( char *, config_ChainCreate, ( char **, config_chain_t **, const char * ) );
502
503
VLC_EXPORT( void, config_ChainDestroy, ( config_chain_t * ) );

zorglub's avatar
zorglub committed
504
505
506
# ifdef __cplusplus
}
# endif
507
508

#endif /* _VLC_CONFIGURATION_H */