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,...) \
70void \
71plugin_register_##name(PLUGIN_PROTO((*func),__VA_ARGS__)) \
72{ \
73 plugin_##name##_func=func; \
74}
75
76#define PLUGIN_CALL(name,...) \
77{ \
78 if (plugin_##name##_func) \
79 (*plugin_##name##_func)(__VA_ARGS__); \
80}
81
82#define PLUGIN_FUNC1(name,t1,p1) \
83PLUGIN_PROTO((*plugin_##name##_func),t1 p1); \
84void plugin_call_##name(t1 p1) PLUGIN_CALL(name,p1) \
85PLUGIN_REGISTER(name,t1 p1)
86
87#define PLUGIN_FUNC3(name,t1,p1,t2,p2,t3,p3) \
88PLUGIN_PROTO((*plugin_##name##_func),t1 p1,t2 p2,t3 p3); \
89void plugin_call_##name(t1 p1,t2 p2, t3 p3) PLUGIN_CALL(name,p1,p2,p3) \
90PLUGIN_REGISTER(name,t1 p1,t2 p2,t3 p3)
91
92#define PLUGIN_FUNC4(name,t1,p1,t2,p2,t3,p3,t4,p4) \
93PLUGIN_PROTO((*plugin_##name##_func),t1 p1,t2 p2,t3 p3,t4 p4); \
94void plugin_call_##name(t1 p1,t2 p2, t3 p3, t4 p4) PLUGIN_CALL(name,p1,p2,p3,p4) \
95PLUGIN_REGISTER(name,t1 p1,t2 p2,t3 p3,t4 p4)
96
97struct name_val {
98 char *name;
99 void *val;
100};
101
102GList *plugin_categories[plugin_category_last];
103
104#define PLUGIN_CATEGORY(category,newargs) \
105struct category##_priv; \
106struct category##_methods; \
107void \
108plugin_register_category_##category(const char *name, struct category##_priv *(*new_) newargs) \
109{ \
110 struct name_val *nv; \
111 nv=g_new(struct name_val, 1); \
112 nv->name=g_strdup(name); \
113 nv->val=new_; \
114 plugin_categories[plugin_category_##category]=g_list_append(plugin_categories[plugin_category_##category], nv); \
115} \
116 \
117void * \
118plugin_get_category_##category(const char *name) \
119{ \
120 return plugin_get_category(plugin_category_##category, #category, name); \
121}
122
123#else
124#define PLUGIN_FUNC1(name,t1,p1) \
125void plugin_register_##name(void(*func)(t1 p1)); \
126void plugin_call_##name(t1 p1);
127
128#define PLUGIN_FUNC3(name,t1,p1,t2,p2,t3,p3) \
129void plugin_register_##name(void(*func)(t1 p1,t2 p2,t3 p3)); \
130void plugin_call_##name(t1 p1,t2 p2,t3 p3);
131
132#define PLUGIN_FUNC4(name,t1,p1,t2,p2,t3,p3,t4,p4) \
133void plugin_register_##name(void(*func)(t1 p1,t2 p2,t3 p3,t4 p4)); \
134void plugin_call_##name(t1 p1,t2 p2,t3 p3,t4 p4);
135
136#define PLUGIN_CATEGORY(category,newargs) \
137struct category##_priv; \
138struct category##_methods; \
139void plugin_register_category_##category(const char *name, struct category##_priv *(*new_) newargs); \
140void *plugin_get_category_##category(const char *name);
141
142#endif
143
144#include "plugin_def.h"
145
146#ifndef USE_PLUGINS
147#define plugin_module_cat3(pre,mod,post) pre##mod##post
148#define plugin_module_cat2(pre,mod,post) plugin_module_cat3(pre,mod,post)
149#define plugin_module_cat(pre,post) plugin_module_cat2(pre,MODULE,post)
150#define plugin_init plugin_module_cat(module_,_init)
151#endif
152
153struct attr;
154
155/* prototypes */
156void plugin_init(void);
157int plugin_load(struct plugin *pl);
158char *plugin_get_name(struct plugin *pl);
159int plugin_get_active(struct plugin *pl);
160void plugin_set_active(struct plugin *pl, int active);
161void plugin_set_lazy(struct plugin *pl, int lazy);
162void plugin_call_init(struct plugin *pl);
163void plugin_unload(struct plugin *pl);
164void plugin_destroy(struct plugin *pl);
165struct plugins *plugins_new(struct attr *, struct attr **);
166struct plugin *plugin_new(struct attr *parent, struct attr ** attrs);
167int plugins_init(struct plugins *pls);
168void plugins_destroy(struct plugins *pls);
169void *plugin_get_category(enum plugin_category category, const char *category_name, const char *name);
170/* end of prototypes */
171
172#ifdef __cplusplus
173}
174#endif
175
176
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:150
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
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:136
Definition gpx2navit_txt.h:51
Definition plugin.c:121
Definition plugin.c:132