/[zanavi_public1]/navit/navit/plugin.h
ZANavi

Contents of /navit/navit/plugin.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (show annotations) (download)
Fri Oct 28 21:19:04 2011 UTC (12 years, 5 months ago) by zoff99
File MIME type: text/plain
File size: 4585 byte(s)
import files
1 /**
2 * Navit, a modular navigation system.
3 * Copyright (C) 2005-2008 Navit Team
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public License
7 * version 2 as published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Library General Public License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public
15 * License along with this program; if not, write to the
16 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 */
19
20 #ifndef PLUGIN_C
21
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25
26 struct plugin;
27
28 enum plugin_type {
29 plugin_type_graphics,
30 plugin_type_gui,
31 plugin_type_map,
32 plugin_type_osd,
33 plugin_type_speech,
34 plugin_type_vehicle,
35 plugin_type_event,
36 plugin_type_font,
37 plugin_type_last,
38 };
39 #endif
40
41 struct container;
42 struct popup;
43 struct popup_item;
44 #undef PLUGIN_FUNC1
45 #undef PLUGIN_FUNC3
46 #undef PLUGIN_FUNC4
47 #undef PLUGIN_TYPE
48 #define PLUGIN_PROTO(name,...) void name(__VA_ARGS__)
49
50 #ifdef PLUGIN_C
51 #define PLUGIN_REGISTER(name,...) \
52 void \
53 plugin_register_##name(PLUGIN_PROTO((*func),__VA_ARGS__)) \
54 { \
55 plugin_##name##_func=func; \
56 }
57
58 #define PLUGIN_CALL(name,...) \
59 { \
60 if (plugin_##name##_func) \
61 (*plugin_##name##_func)(__VA_ARGS__); \
62 }
63
64 #define PLUGIN_FUNC1(name,t1,p1) \
65 PLUGIN_PROTO((*plugin_##name##_func),t1 p1); \
66 void plugin_call_##name(t1 p1) PLUGIN_CALL(name,p1) \
67 PLUGIN_REGISTER(name,t1 p1)
68
69 #define PLUGIN_FUNC3(name,t1,p1,t2,p2,t3,p3) \
70 PLUGIN_PROTO((*plugin_##name##_func),t1 p1,t2 p2,t3 p3); \
71 void plugin_call_##name(t1 p1,t2 p2, t3 p3) PLUGIN_CALL(name,p1,p2,p3) \
72 PLUGIN_REGISTER(name,t1 p1,t2 p2,t3 p3)
73
74 #define PLUGIN_FUNC4(name,t1,p1,t2,p2,t3,p3,t4,p4) \
75 PLUGIN_PROTO((*plugin_##name##_func),t1 p1,t2 p2,t3 p3,t4 p4); \
76 void plugin_call_##name(t1 p1,t2 p2, t3 p3, t4 p4) PLUGIN_CALL(name,p1,p2,p3,p4) \
77 PLUGIN_REGISTER(name,t1 p1,t2 p2,t3 p3,t4 p4)
78
79 struct name_val {
80 char *name;
81 void *val;
82 };
83
84 GList *plugin_types[plugin_type_last];
85
86 #define PLUGIN_TYPE(type,newargs) \
87 struct type##_priv; \
88 struct type##_methods; \
89 void \
90 plugin_register_##type##_type(const char *name, struct type##_priv *(*new_) newargs) \
91 { \
92 struct name_val *nv; \
93 nv=g_new(struct name_val, 1); \
94 nv->name=g_strdup(name); \
95 nv->val=new_; \
96 plugin_types[plugin_type_##type]=g_list_append(plugin_types[plugin_type_##type], nv); \
97 } \
98 \
99 void * \
100 plugin_get_##type##_type(const char *name) \
101 { \
102 return plugin_get_type(plugin_type_##type, #type, name); \
103 }
104
105 #else
106 #define PLUGIN_FUNC1(name,t1,p1) \
107 void plugin_register_##name(void(*func)(t1 p1)); \
108 void plugin_call_##name(t1 p1);
109
110 #define PLUGIN_FUNC3(name,t1,p1,t2,p2,t3,p3) \
111 void plugin_register_##name(void(*func)(t1 p1,t2 p2,t3 p3)); \
112 void plugin_call_##name(t1 p1,t2 p2,t3 p3);
113
114 #define PLUGIN_FUNC4(name,t1,p1,t2,p2,t3,p3,t4,p4) \
115 void plugin_register_##name(void(*func)(t1 p1,t2 p2,t3 p3,t4 p4)); \
116 void plugin_call_##name(t1 p1,t2 p2,t3 p3,t4 p4);
117
118 #define PLUGIN_TYPE(type,newargs) \
119 struct type##_priv; \
120 struct type##_methods; \
121 void plugin_register_##type##_type(const char *name, struct type##_priv *(*new_) newargs); \
122 void *plugin_get_##type##_type(const char *name);
123
124 #endif
125
126 #include "plugin_def.h"
127
128 #ifndef USE_PLUGINS
129 #define plugin_module_cat3(pre,mod,post) pre##mod##post
130 #define plugin_module_cat2(pre,mod,post) plugin_module_cat3(pre,mod,post)
131 #define plugin_module_cat(pre,post) plugin_module_cat2(pre,MODULE,post)
132 #define plugin_init plugin_module_cat(module_,_init)
133 #endif
134
135 struct attr;
136
137 /* prototypes */
138 void plugin_init(void);
139 int plugin_load(struct plugin *pl);
140 char *plugin_get_name(struct plugin *pl);
141 int plugin_get_active(struct plugin *pl);
142 void plugin_set_active(struct plugin *pl, int active);
143 void plugin_set_lazy(struct plugin *pl, int lazy);
144 void plugin_call_init(struct plugin *pl);
145 void plugin_unload(struct plugin *pl);
146 void plugin_destroy(struct plugin *pl);
147 struct plugins *plugins_new(void);
148 struct plugin *plugin_new(struct attr *parent, struct attr ** attrs);
149 void plugins_init(struct plugins *pls);
150 void plugins_destroy(struct plugins *pls);
151 void *plugin_get_type(enum plugin_type type, const char *type_name, const char *name);
152 /* end of prototypes */
153
154 #ifdef __cplusplus
155 }
156 #endif
157
158

   
Visit the ZANavi Wiki