00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef LIBVLC_MODULES_MACROS_H
00025 # define LIBVLC_MODULES_MACROS_H 1
00026
00027
00028
00029
00030
00031
00032 VLC_EXPORT( int, vlc_plugin_set, (module_t *, module_config_t *, int, ...) );
00033
00034 #define vlc_module_set( mod, ... ) vlc_plugin_set ((mod), NULL, __VA_ARGS__)
00035 #define vlc_config_set( cfg, ... ) vlc_plugin_set (NULL, (cfg), __VA_ARGS__)
00036
00037 enum vlc_module_properties
00038 {
00039 VLC_SUBMODULE_CREATE,
00040 VLC_CONFIG_CREATE,
00041
00042
00043
00044 VLC_MODULE_CPU_REQUIREMENT=0x100,
00045 VLC_MODULE_SHORTCUT,
00046 VLC_MODULE_CAPABILITY,
00047 VLC_MODULE_SCORE,
00048 VLC_MODULE_CB_OPEN,
00049 VLC_MODULE_CB_CLOSE,
00050 VLC_MODULE_NO_UNLOAD,
00051 VLC_MODULE_NAME,
00052 VLC_MODULE_SHORTNAME,
00053 VLC_MODULE_DESCRIPTION,
00054 VLC_MODULE_HELP,
00055 VLC_MODULE_TEXTDOMAIN,
00056
00057
00058
00059
00060 VLC_CONFIG_NAME=0x1000,
00061
00062
00063 VLC_CONFIG_VALUE,
00064
00065
00066 VLC_CONFIG_RANGE,
00067
00068
00069 VLC_CONFIG_ADVANCED,
00070
00071
00072 VLC_CONFIG_VOLATILE,
00073
00074
00075 VLC_CONFIG_PERSISTENT,
00076
00077
00078 VLC_CONFIG_RESTART,
00079
00080
00081 VLC_CONFIG_PRIVATE,
00082
00083
00084 VLC_CONFIG_REMOVED,
00085
00086
00087 VLC_CONFIG_CAPABILITY,
00088
00089
00090 VLC_CONFIG_SHORTCUT,
00091
00092
00093 VLC_CONFIG_OLDNAME,
00094
00095
00096 VLC_CONFIG_SAFE,
00097
00098
00099 VLC_CONFIG_DESC,
00100
00101
00102 VLC_CONFIG_LIST,
00103
00104
00105
00106 VLC_CONFIG_ADD_ACTION,
00107
00108
00109
00110
00111 };
00112
00113
00114
00115
00116 #if !defined( __PLUGIN__ ) && !defined( __BUILTIN__ )
00117 # define MODULE_NAME main
00118 #endif
00119
00120
00121
00122
00123 # define MODULE_SYMBOL 1_2_0d
00124 # define MODULE_SUFFIX "__1_2_0d"
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139 #define CONCATENATE( y, z ) CRUDE_HACK( y, z )
00140 #define CRUDE_HACK( y, z ) y##__##z
00141
00142
00143
00144 #ifdef __PLUGIN__
00145 # define __VLC_SYMBOL( symbol ) CONCATENATE( symbol, MODULE_SYMBOL )
00146 #else
00147 # define __VLC_SYMBOL( symbol ) CONCATENATE( symbol, MODULE_NAME )
00148 #endif
00149
00150 #if defined( __PLUGIN__ ) && ( defined( WIN32 ) || defined( UNDER_CE ) )
00151 # define DLL_SYMBOL __declspec(dllexport)
00152 # define CDECL_SYMBOL __cdecl
00153 #else
00154 # define DLL_SYMBOL
00155 # define CDECL_SYMBOL
00156 #endif
00157
00158 #if defined( __cplusplus )
00159 # define EXTERN_SYMBOL extern "C"
00160 #else
00161 # define EXTERN_SYMBOL
00162 #endif
00163
00164
00165
00166
00167
00168
00169
00170 #define vlc_module_begin( ) \
00171 EXTERN_SYMBOL DLL_SYMBOL int CDECL_SYMBOL \
00172 __VLC_SYMBOL(vlc_entry) ( module_t *p_module ); \
00173 \
00174 EXTERN_SYMBOL DLL_SYMBOL int CDECL_SYMBOL \
00175 __VLC_SYMBOL(vlc_entry) ( module_t *p_module ) \
00176 { \
00177 module_config_t *p_config = NULL; \
00178 if (vlc_module_set (p_module, VLC_MODULE_NAME, \
00179 (const char *)(MODULE_STRING))) \
00180 goto error; \
00181 { \
00182 module_t *p_submodule = p_module;
00183
00184 #define vlc_module_end( ) \
00185 } \
00186 (void)p_config; \
00187 return VLC_SUCCESS; \
00188 \
00189 error: \
00190 return VLC_EGENERIC; \
00191 } \
00192 VLC_METADATA_EXPORTS
00193
00194 #define add_submodule( ) \
00195 if (vlc_plugin_set (p_module, NULL, VLC_SUBMODULE_CREATE, &p_submodule)) \
00196 goto error;
00197
00198 #define add_shortcut( ... ) \
00199 { \
00200 const char *shortcuts[] = { __VA_ARGS__ }; \
00201 if (vlc_module_set (p_submodule, VLC_MODULE_SHORTCUT, \
00202 sizeof(shortcuts)/sizeof(shortcuts[0]), shortcuts)) \
00203 goto error; \
00204 }
00205
00206 #define set_shortname( shortname ) \
00207 if (vlc_module_set (p_submodule, VLC_MODULE_SHORTNAME, \
00208 (const char *)(shortname))) \
00209 goto error;
00210
00211 #define set_description( desc ) \
00212 if (vlc_module_set (p_submodule, VLC_MODULE_DESCRIPTION, \
00213 (const char *)(desc))) \
00214 goto error;
00215
00216 #define set_help( help ) \
00217 if (vlc_module_set (p_submodule, VLC_MODULE_HELP, \
00218 (const char *)(help))) \
00219 goto error;
00220
00221 #define set_capability( cap, score ) \
00222 if (vlc_module_set (p_submodule, VLC_MODULE_CAPABILITY, \
00223 (const char *)(cap)) \
00224 || vlc_module_set (p_submodule, VLC_MODULE_SCORE, (int)(score))) \
00225 goto error;
00226
00227 #define set_callbacks( activate, deactivate ) \
00228 if (vlc_module_set (p_submodule, VLC_MODULE_CB_OPEN, activate) \
00229 || vlc_module_set (p_submodule, VLC_MODULE_CB_CLOSE, deactivate)) \
00230 goto error;
00231
00232 #define cannot_unload_broken_library( ) \
00233 if (vlc_module_set (p_submodule, VLC_MODULE_NO_UNLOAD)) \
00234 goto error;
00235
00236 #define set_text_domain( dom ) \
00237 if (vlc_module_set (p_module, VLC_MODULE_TEXTDOMAIN, (dom))) \
00238 goto error;
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253 #define add_type_inner( type ) \
00254 vlc_plugin_set (p_module, NULL, VLC_CONFIG_CREATE, (type), &p_config);
00255
00256 #define add_typedesc_inner( type, text, longtext ) \
00257 add_type_inner( type ) \
00258 vlc_config_set (p_config, VLC_CONFIG_DESC, \
00259 (const char *)(text), (const char *)(longtext));
00260
00261 #define add_typeadv_inner( type, text, longtext, advc ) \
00262 add_typedesc_inner( type, text, longtext ) \
00263 if (advc) vlc_config_set (p_config, VLC_CONFIG_ADVANCED);
00264
00265 #define add_typename_inner( type, name, text, longtext, advc, cb ) \
00266 add_typeadv_inner( type, text, longtext, advc ) \
00267 vlc_config_set (p_config, VLC_CONFIG_NAME, \
00268 (const char *)(name), (vlc_callback_t)(cb));
00269
00270 #define add_string_inner( type, name, text, longtext, advc, cb, v ) \
00271 add_typename_inner( type, name, text, longtext, advc, cb ) \
00272 vlc_config_set (p_config, VLC_CONFIG_VALUE, (const char *)(v));
00273
00274 #define add_int_inner( type, name, text, longtext, advc, cb, v ) \
00275 add_typename_inner( type, name, text, longtext, advc, cb ) \
00276 vlc_config_set (p_config, VLC_CONFIG_VALUE, (int64_t)(v));
00277
00278
00279 #define set_category( i_id ) \
00280 add_type_inner( CONFIG_CATEGORY ) \
00281 vlc_config_set (p_config, VLC_CONFIG_VALUE, (int64_t)(i_id));
00282
00283 #define set_subcategory( i_id ) \
00284 add_type_inner( CONFIG_SUBCATEGORY ) \
00285 vlc_config_set (p_config, VLC_CONFIG_VALUE, (int64_t)(i_id));
00286
00287 #define set_section( text, longtext ) \
00288 add_typedesc_inner( CONFIG_SECTION, text, longtext )
00289
00290 #define add_category_hint( text, longtext, advc ) \
00291 add_typeadv_inner( CONFIG_HINT_CATEGORY, text, longtext, advc )
00292
00293 #define add_subcategory_hint( text, longtext ) \
00294 add_typedesc_inner( CONFIG_HINT_SUBCATEGORY, text, longtext )
00295
00296 #define end_subcategory_hint \
00297 add_type_inner( CONFIG_HINT_SUBCATEGORY_END )
00298
00299 #define add_usage_hint( text ) \
00300 add_typedesc_inner( CONFIG_HINT_USAGE, text, NULL )
00301
00302 #define add_string( name, value, p_callback, text, longtext, advc ) \
00303 add_string_inner( CONFIG_ITEM_STRING, name, text, longtext, advc, \
00304 p_callback, value )
00305
00306 #define add_password( name, value, p_callback, text, longtext, advc ) \
00307 add_string_inner( CONFIG_ITEM_PASSWORD, name, text, longtext, advc, \
00308 p_callback, value )
00309
00310 #define add_file( name, value, p_callback, text, longtext, advc ) \
00311 add_string_inner( CONFIG_ITEM_FILE, name, text, longtext, advc, \
00312 p_callback, value )
00313
00314 #define add_directory( name, value, p_callback, text, longtext, advc ) \
00315 add_string_inner( CONFIG_ITEM_DIRECTORY, name, text, longtext, advc, \
00316 p_callback, value )
00317
00318 #define add_font( name, value, p_callback, text, longtext, advc )\
00319 add_string_inner( CONFIG_ITEM_FONT, name, text, longtext, advc, \
00320 p_callback, value )
00321
00322 #define add_module( name, psz_caps, value, p_callback, text, longtext, advc ) \
00323 add_string_inner( CONFIG_ITEM_MODULE, name, text, longtext, advc, \
00324 p_callback, value ) \
00325 vlc_config_set (p_config, VLC_CONFIG_CAPABILITY, (const char *)(psz_caps));
00326
00327 #define add_module_list( name, psz_caps, value, p_callback, text, longtext, advc ) \
00328 add_string_inner( CONFIG_ITEM_MODULE_LIST, name, text, longtext, advc, \
00329 p_callback, value ) \
00330 vlc_config_set (p_config, VLC_CONFIG_CAPABILITY, (const char *)(psz_caps));
00331
00332 #ifndef __PLUGIN__
00333 #define add_module_cat( name, i_subcategory, value, p_callback, text, longtext, advc ) \
00334 add_string_inner( CONFIG_ITEM_MODULE_CAT, name, text, longtext, advc, \
00335 p_callback, value ) \
00336 change_integer_range (i_subcategory , 0);
00337
00338 #define add_module_list_cat( name, i_subcategory, value, p_callback, text, longtext, advc ) \
00339 add_string_inner( CONFIG_ITEM_MODULE_LIST_CAT, name, text, longtext, \
00340 advc, p_callback, value ) \
00341 change_integer_range (i_subcategory , 0);
00342 #endif
00343
00344 #define add_integer( name, value, p_callback, text, longtext, advc ) \
00345 add_int_inner( CONFIG_ITEM_INTEGER, name, text, longtext, advc, \
00346 p_callback, value )
00347
00348 #define add_key( name, value, p_callback, text, longtext, advc ) \
00349 add_int_inner( CONFIG_ITEM_KEY, name, text, longtext, advc, \
00350 p_callback, value ) \
00351 add_int_inner( CONFIG_ITEM_KEY, "global-" name, text, longtext, advc, \
00352 p_callback, KEY_UNSET )
00353
00354 #define add_integer_with_range( name, value, i_min, i_max, p_callback, text, longtext, advc ) \
00355 add_integer( name, value, p_callback, text, longtext, advc ) \
00356 change_integer_range( i_min, i_max )
00357
00358 #define add_float( name, v, p_callback, text, longtext, advc ) \
00359 add_typename_inner( CONFIG_ITEM_FLOAT, name, text, longtext, advc, p_callback ) \
00360 vlc_config_set (p_config, VLC_CONFIG_VALUE, (double)(v));
00361
00362 #define add_float_with_range( name, value, f_min, f_max, p_callback, text, longtext, advc ) \
00363 add_float( name, value, p_callback, text, longtext, advc ) \
00364 change_float_range( f_min, f_max )
00365
00366 #define add_bool( name, v, p_callback, text, longtext, advc ) \
00367 add_typename_inner( CONFIG_ITEM_BOOL, name, text, longtext, advc, \
00368 p_callback ) \
00369 if (v) vlc_config_set (p_config, VLC_CONFIG_VALUE, (int64_t)true);
00370
00371
00372 #define add_obsolete_inner( name, type ) \
00373 add_type_inner( type ) \
00374 vlc_config_set (p_config, VLC_CONFIG_NAME, \
00375 (const char *)(name), (vlc_callback_t)NULL); \
00376 vlc_config_set (p_config, VLC_CONFIG_REMOVED);
00377
00378 #define add_obsolete_bool( name ) \
00379 add_obsolete_inner( name, CONFIG_ITEM_BOOL )
00380
00381 #define add_obsolete_integer( name ) \
00382 add_obsolete_inner( name, CONFIG_ITEM_INTEGER )
00383
00384 #define add_obsolete_float( name ) \
00385 add_obsolete_inner( name, CONFIG_ITEM_FLOAT )
00386
00387 #define add_obsolete_string( name ) \
00388 add_obsolete_inner( name, CONFIG_ITEM_STRING )
00389
00390
00391
00392 #define add_deprecated_alias( name ) \
00393 vlc_config_set (p_config, VLC_CONFIG_OLDNAME, (const char *)(name));
00394
00395 #define change_short( ch ) \
00396 vlc_config_set (p_config, VLC_CONFIG_SHORTCUT, (int)(ch));
00397
00398 #define change_string_list( list, list_text, list_update_func ) \
00399 vlc_config_set (p_config, VLC_CONFIG_LIST, \
00400 (size_t)(sizeof (list) / sizeof (char *)), \
00401 (const char *const *)(list), \
00402 (const char *const *)(list_text), \
00403 (vlc_callback_t)(list_update_func));
00404
00405 #define change_integer_list( list, list_text, list_update_func ) \
00406 vlc_config_set (p_config, VLC_CONFIG_LIST, \
00407 (size_t)(sizeof (list) / sizeof (int)), \
00408 (const int *)(list), \
00409 (const char *const *)(list_text), \
00410 (vlc_callback_t)(list_update_func));
00411
00412 #define change_integer_range( minv, maxv ) \
00413 vlc_config_set (p_config, VLC_CONFIG_RANGE, \
00414 (int64_t)(minv), (int64_t)(maxv));
00415
00416 #define change_float_range( minv, maxv ) \
00417 vlc_config_set (p_config, VLC_CONFIG_RANGE, \
00418 (double)(minv), (double)(maxv));
00419
00420 #define change_action_add( pf_action, text ) \
00421 vlc_config_set (p_config, VLC_CONFIG_ADD_ACTION, \
00422 (vlc_callback_t)(pf_action), (const char *)(text));
00423
00424 #define change_need_restart() \
00425 vlc_config_set (p_config, VLC_CONFIG_RESTART);
00426
00427 #define change_autosave() \
00428 vlc_config_set (p_config, VLC_CONFIG_PERSISTENT);
00429
00430
00431 #define change_private() \
00432 vlc_config_set (p_config, VLC_CONFIG_PRIVATE);
00433
00434
00435 #define change_volatile() \
00436 change_private() \
00437 vlc_config_set (p_config, VLC_CONFIG_VOLATILE);
00438
00439 #define change_safe() \
00440 vlc_config_set (p_config, VLC_CONFIG_SAFE);
00441
00442
00443 #define VLC_META_EXPORT( name, value ) \
00444 EXTERN_SYMBOL DLL_SYMBOL const char * CDECL_SYMBOL \
00445 __VLC_SYMBOL(vlc_entry_ ## name) (void); \
00446 EXTERN_SYMBOL DLL_SYMBOL const char * CDECL_SYMBOL \
00447 __VLC_SYMBOL(vlc_entry_ ## name) (void) \
00448 { \
00449 return value; \
00450 }
00451
00452 #if defined (__LIBVLC__)
00453 # define VLC_COPYRIGHT_EXPORT VLC_META_EXPORT (copyright, \
00454 "\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\x20\x74\x68" \
00455 "\x65\x20\x56\x69\x64\x65\x6f\x4c\x41\x4e\x20\x56\x4c\x43\x20\x6d" \
00456 "\x65\x64\x69\x61\x20\x70\x6c\x61\x79\x65\x72\x20\x64\x65\x76\x65" \
00457 "\x6c\x6f\x70\x65\x72\x73" )
00458 #elif !defined (VLC_COPYRIGHT_EXPORT)
00459 # define VLC_COPYRIGHT_EXPORT
00460 #endif
00461 #define VLC_LICENSE_EXPORT VLC_META_EXPORT (license, \
00462 "\x4c\x69\x63\x65\x6e\x73\x65\x64\x20\x75\x6e\x64\x65\x72\x20\x74" \
00463 "\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\x20" \
00464 "\x47\x4e\x55\x20\x47\x65\x6e\x65\x72\x61\x6c\x20\x50\x75\x62\x6c" \
00465 "\x69\x63\x20\x4c\x69\x63\x65\x6e\x73\x65\x2c\x20\x76\x65\x72\x73" \
00466 "\x69\x6f\x6e\x20\x32\x20\x6f\x72\x20\x6c\x61\x74\x65\x72\x2e" )
00467
00468 #define VLC_METADATA_EXPORTS \
00469 VLC_COPYRIGHT_EXPORT \
00470 VLC_LICENSE_EXPORT
00471
00472 #endif