navit 0.5.3-trunk
Loading...
Searching...
No Matches
plugin.h
Go to the documentation of this file.
1
20#ifndef PLUGIN_C
21
22# ifdef __cplusplus
23extern "C" {
24# endif
25
26struct plugin;
27
57#endif
58
59struct container;
60struct popup;
61struct popup_item;
62#undef PLUGIN_FUNC1
63#undef PLUGIN_FUNC3
64#undef PLUGIN_FUNC4
65#undef PLUGIN_CATEGORY
66#define PLUGIN_PROTO(name, ...) void name(__VA_ARGS__)
67
68#ifdef PLUGIN_C
69# define PLUGIN_REGISTER(name, ...) \
70 void plugin_register_##name(PLUGIN_PROTO((*func), __VA_ARGS__)) { \
71 plugin_##name##_func = func; \
72 }
73
74# define PLUGIN_CALL(name, ...) \
75 { \
76 if (plugin_##name##_func) \
77 (*plugin_##name##_func)(__VA_ARGS__); \
78 }
79
80# define PLUGIN_FUNC1(name, t1, p1) \
81 PLUGIN_PROTO((*plugin_##name##_func), t1 p1); \
82 void plugin_call_##name(t1 p1) PLUGIN_CALL(name, p1) PLUGIN_REGISTER(name, t1 p1)
83
84# define PLUGIN_FUNC3(name, t1, p1, t2, p2, t3, p3) \
85 PLUGIN_PROTO((*plugin_##name##_func), t1 p1, t2 p2, t3 p3); \
86 void plugin_call_##name(t1 p1, t2 p2, t3 p3) PLUGIN_CALL(name, p1, p2, p3) \
87 PLUGIN_REGISTER(name, t1 p1, t2 p2, t3 p3)
88
89# define PLUGIN_FUNC4(name, t1, p1, t2, p2, t3, p3, t4, p4) \
90 PLUGIN_PROTO((*plugin_##name##_func), t1 p1, t2 p2, t3 p3, t4 p4); \
91 void plugin_call_##name(t1 p1, t2 p2, t3 p3, t4 p4) PLUGIN_CALL(name, p1, p2, p3, p4) \
92 PLUGIN_REGISTER(name, t1 p1, t2 p2, t3 p3, t4 p4)
93
94struct name_val {
95 char *name;
96 void *val;
97};
98
99GList *plugin_categories[plugin_category_last];
100
101# define PLUGIN_CATEGORY(category, newargs) \
102 struct category##_priv; \
103 struct category##_methods; \
104 void plugin_register_category_##category(const char *name, struct category##_priv *(*new_)newargs) { \
105 struct name_val *nv; \
106 nv = g_new(struct name_val, 1); \
107 nv->name = g_strdup(name); \
108 nv->val = new_; \
109 plugin_categories[plugin_category_##category] = \
110 g_list_append(plugin_categories[plugin_category_##category], nv); \
111 } \
112 \
113 void *plugin_get_category_##category(const char *name) { \
114 return plugin_get_category(plugin_category_##category, #category, name); \
115 }
116
117#else
118# define PLUGIN_FUNC1(name, t1, p1) \
119 void plugin_register_##name(void (*func)(t1 p1)); \
120 void plugin_call_##name(t1 p1);
121
122# define PLUGIN_FUNC3(name, t1, p1, t2, p2, t3, p3) \
123 void plugin_register_##name(void (*func)(t1 p1, t2 p2, t3 p3)); \
124 void plugin_call_##name(t1 p1, t2 p2, t3 p3);
125
126# define PLUGIN_FUNC4(name, t1, p1, t2, p2, t3, p3, t4, p4) \
127 void plugin_register_##name(void (*func)(t1 p1, t2 p2, t3 p3, t4 p4)); \
128 void plugin_call_##name(t1 p1, t2 p2, t3 p3, t4 p4);
129
130# define PLUGIN_CATEGORY(category, newargs) \
131 struct category##_priv; \
132 struct category##_methods; \
133 void plugin_register_category_##category(const char *name, struct category##_priv *(*new_)newargs); \
134 void *plugin_get_category_##category(const char *name);
135
136#endif
137
138#include "plugin_def.h"
139
140#ifndef USE_PLUGINS
141# define plugin_module_cat3(pre, mod, post) pre##mod##post
142# define plugin_module_cat2(pre, mod, post) plugin_module_cat3(pre, mod, post)
143# define plugin_module_cat(pre, post) plugin_module_cat2(pre, MODULE, post)
144# define plugin_init plugin_module_cat(module_, _init)
145#endif
146
147struct attr;
148
149/* prototypes */
150void plugin_init(void);
151int plugin_load(struct plugin *pl);
152char *plugin_get_name(struct plugin *pl);
153int plugin_get_active(struct plugin *pl);
154void plugin_set_active(struct plugin *pl, int active);
155void plugin_set_lazy(struct plugin *pl, int lazy);
156void plugin_call_init(struct plugin *pl);
157void plugin_unload(struct plugin *pl);
158void plugin_destroy(struct plugin *pl);
159struct plugins *plugins_new(struct attr *, struct attr **);
160struct plugin *plugin_new(struct attr *parent, struct attr **attrs);
161int plugins_init(struct plugins *pls);
162void plugins_destroy(struct plugins *pls);
163void *plugin_get_category(enum plugin_category category, const char *category_name, const char *name);
164/* end of prototypes */
165
166#ifdef __cplusplus
167}
168#endif
int plugin_load(struct plugin *pl)
Definition plugin.c:151
char * plugin_get_name(struct plugin *pl)
Definition plugin.c:181
struct plugin * plugin_new(struct attr *parent, struct attr **attrs)
Definition plugin.c:231
struct plugins * plugins_new(struct attr *, struct attr **)
Definition plugin.c:223
void * plugin_get_category(enum plugin_category category, const char *category_name, const char *name)
Definition plugin.c:354
int plugins_init(struct plugins *pls)
Definition plugin.c:303
void plugin_call_init(struct plugin *pl)
Definition plugin.c:207
void plugin_set_active(struct plugin *pl, int active)
Definition plugin.c:189
void plugin_unload(struct plugin *pl)
Definition plugin.c:211
void plugin_set_lazy(struct plugin *pl, int lazy)
Definition plugin.c:193
int plugin_get_active(struct plugin *pl)
Definition plugin.c:185
struct plugins * pls
void plugins_destroy(struct plugins *pls)
Definition plugin.c:328
void plugin_destroy(struct plugin *pl)
Definition plugin.c:218
#define plugin_init
Definition plugin.h:144
plugin_category
All existing plugin categories.
Definition plugin.h:35
@ plugin_category_traffic
Definition plugin.h:53
@ plugin_category_osd
Definition plugin.h:43
@ plugin_category_font
Definition plugin.h:51
@ plugin_category_speech
Definition plugin.h:45
@ plugin_category_vehicle
Definition plugin.h:47
@ plugin_category_graphics
Definition plugin.h:37
@ plugin_category_event
Definition plugin.h:49
@ plugin_category_gui
Definition plugin.h:39
@ plugin_category_last
Definition plugin.h:55
@ plugin_category_map
Definition plugin.h:41
struct navit struct traffic_methods struct attr ** attrs
Definition plugin_def.h:36
void popup(struct navit *nav, int button, struct point *p)
Definition popup.c:377
struct attr active
Definition speech.c:77
char name[0]
Definition street.c:3
Definition attr.h:138
Definition gpx2navit_txt.h:50
Definition plugin.c:121
Definition plugin.c:132