navit  0.5.3-trunk
plugin.h
Go to the documentation of this file.
1 
20 #ifndef PLUGIN_C
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 struct plugin;
27 
56 };
57 #endif
58 
59 struct container;
60 struct popup;
61 struct 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 \
71 plugin_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) \
83 PLUGIN_PROTO((*plugin_##name##_func),t1 p1); \
84 void plugin_call_##name(t1 p1) PLUGIN_CALL(name,p1) \
85 PLUGIN_REGISTER(name,t1 p1)
86 
87 #define PLUGIN_FUNC3(name,t1,p1,t2,p2,t3,p3) \
88 PLUGIN_PROTO((*plugin_##name##_func),t1 p1,t2 p2,t3 p3); \
89 void plugin_call_##name(t1 p1,t2 p2, t3 p3) PLUGIN_CALL(name,p1,p2,p3) \
90 PLUGIN_REGISTER(name,t1 p1,t2 p2,t3 p3)
91 
92 #define PLUGIN_FUNC4(name,t1,p1,t2,p2,t3,p3,t4,p4) \
93 PLUGIN_PROTO((*plugin_##name##_func),t1 p1,t2 p2,t3 p3,t4 p4); \
94 void plugin_call_##name(t1 p1,t2 p2, t3 p3, t4 p4) PLUGIN_CALL(name,p1,p2,p3,p4) \
95 PLUGIN_REGISTER(name,t1 p1,t2 p2,t3 p3,t4 p4)
96 
97 struct name_val {
98  char *name;
99  void *val;
100 };
101 
102 GList *plugin_categories[plugin_category_last];
103 
104 #define PLUGIN_CATEGORY(category,newargs) \
105 struct category##_priv; \
106 struct category##_methods; \
107 void \
108 plugin_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  \
117 void * \
118 plugin_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) \
125 void plugin_register_##name(void(*func)(t1 p1)); \
126 void plugin_call_##name(t1 p1);
127 
128 #define PLUGIN_FUNC3(name,t1,p1,t2,p2,t3,p3) \
129 void plugin_register_##name(void(*func)(t1 p1,t2 p2,t3 p3)); \
130 void plugin_call_##name(t1 p1,t2 p2,t3 p3);
131 
132 #define PLUGIN_FUNC4(name,t1,p1,t2,p2,t3,p3,t4,p4) \
133 void plugin_register_##name(void(*func)(t1 p1,t2 p2,t3 p3,t4 p4)); \
134 void plugin_call_##name(t1 p1,t2 p2,t3 p3,t4 p4);
135 
136 #define PLUGIN_CATEGORY(category,newargs) \
137 struct category##_priv; \
138 struct category##_methods; \
139 void plugin_register_category_##category(const char *name, struct category##_priv *(*new_) newargs); \
140 void *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 
153 struct attr;
154 
155 /* prototypes */
156 void plugin_init(void);
157 int plugin_load(struct plugin *pl);
158 char *plugin_get_name(struct plugin *pl);
159 int plugin_get_active(struct plugin *pl);
160 void plugin_set_active(struct plugin *pl, int active);
161 void plugin_set_lazy(struct plugin *pl, int lazy);
162 void plugin_call_init(struct plugin *pl);
163 void plugin_unload(struct plugin *pl);
164 void plugin_destroy(struct plugin *pl);
165 struct plugins *plugins_new(struct attr *, struct attr **);
166 struct plugin *plugin_new(struct attr *parent, struct attr ** attrs);
167 int plugins_init(struct plugins *pls);
168 void plugins_destroy(struct plugins *pls);
169 void *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
int plugins_init(struct plugins *pls)
Definition: plugin.c:303
void * plugin_get_category(enum plugin_category category, const char *category_name, const char *name)
Definition: plugin.c:354
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 * plugins_new(struct attr *, struct attr **)
Definition: plugin.c:223
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
register vehicle_gypsy
Definition: plugin.h:150
struct _GList GList
Definition: navit.h:30
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:157
Definition: gpx2navit_txt.h:51
Definition: plugin.c:121
Definition: plugin.c:132