| |
1 #ifndef _PURPLE_PERL_COMMON_H_ |
| |
2 #define _PURPLE_PERL_COMMON_H_ |
| |
3 |
| |
4 #include <glib.h> |
| |
5 #ifdef _WIN32 |
| |
6 #undef pipe |
| |
7 #endif |
| |
8 #include <XSUB.h> |
| |
9 #include <EXTERN.h> |
| |
10 #include <perl.h> |
| |
11 |
| |
12 #include "plugin.h" |
| |
13 #include "value.h" |
| |
14 |
| |
15 #define is_hvref(o) \ |
| |
16 ((o) && SvROK(o) && SvRV(o) && (SvTYPE(SvRV(o)) == SVt_PVHV)) |
| |
17 |
| |
18 #define hvref(o) \ |
| |
19 (is_hvref(o) ? (HV *)SvRV(o) : NULL); |
| |
20 |
| |
21 #define PURPLE_PERL_BOOT_PROTO(x) \ |
| |
22 void boot_Purple__##x(pTHX_ CV *cv); |
| |
23 |
| |
24 #define PURPLE_PERL_BOOT(x) \ |
| |
25 purple_perl_callXS(boot_Purple__##x, cv, mark) |
| |
26 |
| |
27 typedef struct |
| |
28 { |
| |
29 PurplePlugin *plugin; |
| |
30 char *package; |
| |
31 char *load_sub; |
| |
32 char *unload_sub; |
| |
33 char *prefs_sub; |
| |
34 #ifdef PURPLE_GTKPERL |
| |
35 char *gtk_prefs_sub; |
| |
36 #endif |
| |
37 char *plugin_action_sub; |
| |
38 } PurplePerlScript; |
| |
39 |
| |
40 void purple_perl_normalize_script_name(char *name); |
| |
41 |
| |
42 SV *newSVGChar(const char *str); |
| |
43 |
| |
44 void purple_perl_callXS(void (*subaddr)(pTHX_ CV *cv), CV *cv, SV **mark); |
| |
45 void purple_perl_bless_plain(const char *stash, void *object); |
| |
46 SV *purple_perl_bless_object(void *object, const char *stash); |
| |
47 gboolean purple_perl_is_ref_object(SV *o); |
| |
48 void *purple_perl_ref_object(SV *o); |
| |
49 |
| |
50 int execute_perl(const char *function, int argc, char **args); |
| |
51 |
| |
52 #if 0 |
| |
53 gboolean purple_perl_value_from_sv(PurpleValue *value, SV *sv); |
| |
54 SV *purple_perl_sv_from_value(const PurpleValue *value); |
| |
55 #endif |
| |
56 |
| |
57 void *purple_perl_data_from_sv(PurpleValue *value, SV *sv); |
| |
58 SV *purple_perl_sv_from_vargs(const PurpleValue *value, va_list *args, |
| |
59 void ***copy_arg); |
| |
60 |
| |
61 #endif /* _PURPLE_PERL_COMMON_H_ */ |