84e0845d4464843d83e91ee49008e511b36c0313
[navit-package] / src / plugin.h
1 void plugin_load(void);
2 int plugin_init(void);
3
4 struct container;
5 struct popup;
6 struct popup_item;
7 #undef PLUGIN_FUNC1
8 #undef PLUGIN_FUNC3
9 #undef PLUGIN_FUNC4
10 #define PLUGIN_PROTO(name,args...) void name(args)
11
12 #ifdef PLUGIN_C
13 #define PLUGIN_REGISTER(name,args...)                                           \
14 void                                                                            \
15 plugin_register_##name(PLUGIN_PROTO((*func),args))                              \
16 {                                                                               \
17         plugin_##name##_func=func;                                              \
18 }
19
20 #define PLUGIN_CALL(name,args...)                                               \
21 {                                                                               \
22         if (plugin_##name##_func)                                               \
23                 (*plugin_##name##_func)(args);                                  \
24 }                                                                               
25
26 #define PLUGIN_FUNC1(name,t1,p1)                                \
27 PLUGIN_PROTO((*plugin_##name##_func),t1 p1);                    \
28 void plugin_call_##name(t1 p1) PLUGIN_CALL(name,p1)             \
29 PLUGIN_REGISTER(name,t1 p1)                                     
30
31 #define PLUGIN_FUNC3(name,t1,p1,t2,p2,t3,p3)                                    \
32 PLUGIN_PROTO((*plugin_##name##_func),t1 p1,t2 p2,t3 p3);                                \
33 void plugin_call_##name(t1 p1,t2 p2, t3 p3) PLUGIN_CALL(name,p1,p2,p3)  \
34 PLUGIN_REGISTER(name,t1 p1,t2 p2,t3 p3)                                 
35
36 #define PLUGIN_FUNC4(name,t1,p1,t2,p2,t3,p3,t4,p4)                                      \
37 PLUGIN_PROTO((*plugin_##name##_func),t1 p1,t2 p2,t3 p3,t4 p4);                          \
38 void plugin_call_##name(t1 p1,t2 p2, t3 p3, t4 p4) PLUGIN_CALL(name,p1,p2,p3,p4)        \
39 PLUGIN_REGISTER(name,t1 p1,t2 p2,t3 p3,t4 p4)                                   
40
41 #else
42 #define PLUGIN_FUNC1(name,t1,p1)                        \
43 void plugin_register_##name(void(*func)(t1 p1));        \
44 void plugin_call_##name(t1 p1);
45
46 #define PLUGIN_FUNC3(name,t1,p1,t2,p2,t3,p3)                    \
47 void plugin_register_##name(void(*func)(t1 p1,t2 p2,t3 p3));    \
48 void plugin_call_##name(t1 p1,t2 p2,t3 p3);
49
50 #define PLUGIN_FUNC4(name,t1,p1,t2,p2,t3,p3,t4,p4)                      \
51 void plugin_register_##name(void(*func)(t1 p1,t2 p2,t3 p3,t4 p4));      \
52 void plugin_call_##name(t1 p1,t2 p2,t3 p3,t4 p4);
53 #endif
54
55 PLUGIN_FUNC1(draw, struct container *, co)
56 PLUGIN_FUNC3(popup, struct container *, map, struct popup *, p, struct popup_item **, list)