1 %module inkscape_perl
2 %{
3 #include "InkscapeBinding.h"
6 static void xs_init _((pTHX));
7 static PerlInterpreter *my_perl;
9 int perl_eval(char *string) {
10 char *argv[2];
11 argv[0] = string;
12 argv[1] = (char *) 0;
13 return perl_call_argv("eval",0,argv);
14 }
16 extern "C" int
17 InkscapePerlParseBuf(char *startupCodeBuf, char *codeBuf)
18 {
19 STRLEN n_a;
20 int exitstatus;
21 char *embedding[] = { "", "-e", "0" };
23 my_perl = perl_alloc();
24 if (!my_perl)
25 return 0;
26 perl_construct( my_perl );
28 exitstatus = perl_parse( my_perl, xs_init, 3,
29 embedding, (char **) NULL );
30 if (exitstatus)
31 return 0;
33 /* Initialize all of the module variables */
35 exitstatus = perl_run( my_perl );
37 SV *retSV = eval_pv(startupCodeBuf, TRUE);
38 char *ret = SvPV(retSV, n_a);
39 //printf("## module ret:%s\n", ret);
41 retSV = eval_pv("$inkscape = inkscape_perlc::getInkscape();\n", TRUE);
42 ret = SvPV(retSV, n_a);
43 //printf("## inkscape ret:%s\n", ret);
45 retSV = eval_pv(codeBuf, TRUE);
46 ret = SvPV(retSV, n_a);
47 //printf("## code ret:%s\n", ret);
49 perl_destruct( my_perl );
50 perl_free( my_perl );
52 return 1;
53 }
55 /* Register any extra external extensions */
57 /* Do not delete this line--writemain depends on it */
58 /* EXTERN_C void boot_DynaLoader _((CV* cv)); */
60 static void
61 xs_init(pTHX)
62 {
63 /* dXSUB_SYS; */
64 char *file = __FILE__;
65 {
66 /* newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file); */
67 newXS(SWIG_name, SWIG_init, file);
68 #ifdef SWIGMODINIT
69 SWIGMODINIT
70 #endif
71 }
72 }
75 %}
77 %include "InkscapeBinding.h"