* modules_inner.h : Macros used from within a module.
*****************************************************************************
* Copyright (C) 2001 VideoLAN
+ * $Id: modules_inner.h,v 1.8 2001/12/10 04:53:10 sam Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
*
*/
/* I can't believe I need to do this to change « foo » to « "foo" » */
-#define UGLY_KLUDGE( z ) NASTY_CROCK( z )
-#define NASTY_CROCK( z ) #z
-/* And I need to do _this_ to change « foo bar » to « foo_inner_bar » ! */
-#define AWFUL_BRITTLE( y, z ) CRUDE_HACK( y, z )
-#define CRUDE_HACK( y, z ) module_##y##_##z
+#define STRINGIFY( z ) UGLY_KLUDGE( z )
+#define UGLY_KLUDGE( z ) #z
+/* And I need to do _this_ to change « foo bar » to « module_foo_bar » ! */
+#define CONCATENATE( y, z ) CRUDE_HACK( y, z )
+#define CRUDE_HACK( y, z ) module_##y##_##z
-/* Also, I need to do this to change « blah » to « "VLC_MODULE_foo_blah" » */
-#define MODULE_STRING UGLY_KLUDGE( MODULE_NAME )
-#define MODULE_VAR( z ) "VLC_MODULE_" UGLY_KLUDGE( MODULE_NAME ) "_" #z
+#define MODULE_VAR( z ) "VLC_MODULE_" #z
/* If the module is built-in, then we need to define foo_InitModule instead
* of InitModule. Same for Activate- and DeactivateModule. */
-#define MODULE_FUNC( function ) AWFUL_BRITTLE( MODULE_NAME, function )
+#ifdef BUILTIN
+
+# define _M( function ) CONCATENATE( MODULE_NAME, function )
+
+# define MODULE_INIT_START \
+ int CONCATENATE( MODULE_NAME, InitModule ) ( module_t *p_module ) \
+ { \
+ p_module->psz_name = MODULE_STRING; \
+ p_module->psz_version = VLC_VERSION;
+
+# define MODULE_INIT_STOP \
+ return( 0 ); \
+ }
+
+# define MODULE_ACTIVATE_START \
+ int CONCATENATE( MODULE_NAME, ActivateModule ) ( module_t *p_module ) \
+ { \
+ p_module->p_functions = \
+ ( module_functions_t * )malloc( sizeof( module_functions_t ) ); \
+ if( p_module->p_functions == NULL ) \
+ { \
+ return( -1 ); \
+ } \
+ p_module->p_config = p_config;
+
+# define MODULE_ACTIVATE_STOP \
+ return( 0 ); \
+ }
+
+# define MODULE_DEACTIVATE_START \
+ int CONCATENATE( MODULE_NAME, DeactivateModule )( module_t *p_module ) \
+ { \
+ free( p_module->p_functions );
+
+# define MODULE_DEACTIVATE_STOP \
+ return( 0 ); \
+ }
+
+#else
+
+# define _M( function ) function
+
+# define MODULE_INIT_START \
+ int InitModule ( module_t *p_module ) \
+ { \
+ p_module->psz_name = MODULE_STRING; \
+ p_module->psz_version = VLC_VERSION;
+
+# define MODULE_INIT_STOP \
+ return( 0 ); \
+ }
+
+# define MODULE_ACTIVATE_START \
+ int ActivateModule ( module_t *p_module ) \
+ { \
+ p_module->p_functions = \
+ ( module_functions_t * )malloc( sizeof( module_functions_t ) ); \
+ if( p_module->p_functions == NULL ) \
+ { \
+ return( -1 ); \
+ } \
+ p_module->p_config = p_config; \
+ p_symbols = p_module->p_symbols;
+
+# define MODULE_ACTIVATE_STOP \
+ return( 0 ); \
+ }
+
+# define MODULE_DEACTIVATE_START \
+ int DeactivateModule( module_t *p_module ) \
+ { \
+ free( p_module->p_functions );
+
+# define MODULE_DEACTIVATE_STOP \
+ return( 0 ); \
+ }
+
+#endif
+
+/* Now the real stuff */
+#define MODULE_STRING STRINGIFY( MODULE_NAME )
/*****************************************************************************
* Macros used to build the configuration structure.
*****************************************************************************/
-#define MODULE_CONFIG_START \
-static module_config_t p_config[] = { \
- { MODULE_CONFIG_ITEM_START, NULL, NULL, NULL, NULL },
+#ifdef BUILTIN
+# define MODULE_CONFIG_START \
+ static module_config_t p_config[] = { \
+ { MODULE_CONFIG_ITEM_START, NULL, NULL, NULL, NULL },
+#else
+# define MODULE_CONFIG_START \
+ module_symbols_t* p_symbols; \
+ static module_config_t p_config[] = { \
+ { MODULE_CONFIG_ITEM_START, NULL, NULL, NULL, NULL },
+#endif
-#define MODULE_CONFIG_END \
+#define MODULE_CONFIG_STOP \
{ MODULE_CONFIG_ITEM_END, NULL, NULL, NULL, NULL } \
};
#define ADD_SPIN( text, name, p_getlist, p_update ) \
{ MODULE_CONFIG_ITEM_SPIN, text, name, p_getlist, p_update },
+