]> git.sesse.net Git - vlc/blobdiff - include/modules_inner.h
* Fixed the BeOS compile typo.
[vlc] / include / modules_inner.h
index a966569bcce3e3348f5a44f0343a1abd29ae844c..6e0fb72831667a34bfbc534e11d61210819b0ed2 100644 (file)
@@ -2,6 +2,7 @@
  * modules_inner.h : Macros used from within a module.
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
+ * $Id: modules_inner.h,v 1.7 2001/05/30 17:03:11 sam Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *
  * #define MODULE_VAR(blah) "VLC_MODULE_foo_blah"
  *
  * and, if BUILTIN is set, we will also need:
- * #define InitModule foo_InitModule
- * #define ActivateModule foo_ActivateModule
- * #define DeactivateModule foo_DeactivateModule
+ * #define MODULE_FUNC( zog ) module_foo_zog
  *
  * this can't easily be done with the C preprocessor, thus a few ugly hacks.
  */
 
 /* 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_bar » ! */
-#define AWFUL_BRITTLE(y,z) CRUDE_HACK(y,z)
-#define CRUDE_HACK(y,z) 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. */
 #ifdef BUILTIN
-#  define InitModule AWFUL_BRITTLE(MODULE_NAME,InitModule)
-#  define ActivateModule AWFUL_BRITTLE(MODULE_NAME,ActivateModule)
-#  define DeactivateModule AWFUL_BRITTLE(MODULE_NAME,DeactivateModule)
+
+#   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 = 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 = 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( text ) \
-static module_config_t p_config[] = { \
-    { MODULE_CONFIG_ITEM_START, text, 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_WINDOW( text ) \
+    { MODULE_CONFIG_ITEM_WINDOW, text, NULL, NULL, NULL },
 #define ADD_FRAME( text ) \
     { MODULE_CONFIG_ITEM_FRAME, text, NULL, NULL, NULL },
 #define ADD_PANE( text ) \
@@ -96,3 +178,4 @@ static module_config_t p_config[] = { \
 #define ADD_SPIN( text, name, p_getlist, p_update ) \
     { MODULE_CONFIG_ITEM_SPIN, text, name, p_getlist, p_update },
 
+