27 #define PLUGIN_PROTO(name,args...) void name(args)
30 #define PLUGIN_REGISTER(name,args...) \
32 plugin_register_##name(PLUGIN_PROTO((*func),args)) \
34 plugin_##name##_func=func; \
37 #define PLUGIN_CALL(name,args...) \
39 if (plugin_##name##_func) \
40 (*plugin_##name##_func)(args); \
43 #define PLUGIN_FUNC1(name,t1,p1) \
44 PLUGIN_PROTO((*plugin_##name##_func),t1 p1); \
45 void plugin_call_##name(t1 p1) PLUGIN_CALL(name,p1) \
46 PLUGIN_REGISTER(name,t1 p1)
48 #define PLUGIN_FUNC3(name,t1,p1,t2,p2,t3,p3) \
49 PLUGIN_PROTO((*plugin_##name##_func),t1 p1,t2 p2,t3 p3); \
50 void plugin_call_##name(t1 p1,t2 p2, t3 p3) PLUGIN_CALL(name,p1,p2,p3) \
51 PLUGIN_REGISTER(name,t1 p1,t2 p2,t3 p3)
53 #define PLUGIN_FUNC4(name,t1,p1,t2,p2,t3,p3,t4,p4) \
54 PLUGIN_PROTO((*plugin_##name##_func),t1 p1,t2 p2,t3 p3,t4 p4); \
55 void plugin_call_##name(t1 p1,t2 p2, t3 p3, t4 p4) PLUGIN_CALL(name,p1,p2,p3,p4) \
56 PLUGIN_REGISTER(name,t1 p1,t2 p2,t3 p3,t4 p4)
63 GList *plugin_types[plugin_type_last];
65 #define PLUGIN_TYPE(type,newargs) \
67 struct type##_methods; \
69 plugin_register_##type##_type(const char *name, struct type##_priv *(*new_) newargs) \
71 struct name_val *nv; \
72 nv=g_new(struct name_val, 1); \
73 nv->name=g_strdup(name); \
75 plugin_types[plugin_type_##type]=g_list_append(plugin_types[plugin_type_##type], nv); \
79 plugin_get_##type##_type(const char *name) \
81 return plugin_get_type(plugin_type_##type, name); \
85 #define PLUGIN_FUNC1(name,t1,p1) \
86 void plugin_register_##name(void(*func)(t1 p1)); \
87 void plugin_call_##name(t1 p1);
89 #define PLUGIN_FUNC3(name,t1,p1,t2,p2,t3,p3) \
90 void plugin_register_##name(void(*func)(t1 p1,t2 p2,t3 p3)); \
91 void plugin_call_##name(t1 p1,t2 p2,t3 p3);
93 #define PLUGIN_FUNC4(name,t1,p1,t2,p2,t3,p3,t4,p4) \
94 void plugin_register_##name(void(*func)(t1 p1,t2 p2,t3 p3,t4 p4)); \
95 void plugin_call_##name(t1 p1,t2 p2,t3 p3,t4 p4);
97 #define PLUGIN_TYPE(type,newargs) \
99 struct type##_methods; \
100 void plugin_register_##type##_type(const char *name, struct type##_priv *(*new_) newargs); \
101 void *plugin_get_##type##_type(const char *name);
105 #include "plugin_def.h"
108 #define plugin_module_cat3(pre,mod,post) pre##mod##post
109 #define plugin_module_cat2(pre,mod,post) plugin_module_cat3(pre,mod,post)
110 #define plugin_module_cat(pre,post) plugin_module_cat2(pre,MODULE,post)
111 #define plugin_init plugin_module_cat(module_,_init)
114 void plugin_init(void);
117 struct plugin *plugin_new(char *plugin);
118 int plugin_load(struct plugin *pl);
119 char *plugin_get_name(struct plugin *pl);
120 int plugin_get_active(struct plugin *pl);
121 void plugin_set_active(struct plugin *pl, int active);
122 void plugin_set_lazy(struct plugin *pl, int lazy);
123 void plugin_call_init(struct plugin *pl);
124 void plugin_unload(struct plugin *pl);
125 void plugin_destroy(struct plugin *pl);
126 struct plugins *plugins_new(void);
127 void plugins_add_path(struct plugins *pls, const char *path, int active, int lazy);
128 void plugins_init(struct plugins *pls);
129 void plugins_destroy(struct plugins *pls);
130 void *plugin_get_type(enum plugin_type type, const char *name);
131 /* end of prototypes */