Commit | Line | Data |
0a753a76 |
1 | /* |
2 | * "The Road goes ever on and on, down from the door where it began." |
3 | */ |
4 | |
0a753a76 |
5 | |
6 | #include "EXTERN.h" |
7 | #include "perl.h" |
96e4d5b1 |
8 | #include "XSUB.h" |
0a753a76 |
9 | |
4f63d024 |
10 | static void xs_init (pTHX); |
0a753a76 |
11 | |
852c2e52 |
12 | DllExport int |
68dc0745 |
13 | RunPerl(int argc, char **argv, char **env, void *iosubsystem) |
0a753a76 |
14 | { |
68dc0745 |
15 | int exitstatus; |
16 | PerlInterpreter *my_perl; |
4f63d024 |
17 | struct perl_thread *thr; |
0a753a76 |
18 | |
22239a37 |
19 | #ifdef PERL_GLOBAL_STRUCT |
20 | #define PERLVAR(var,type) /**/ |
533c011a |
21 | #define PERLVARI(var,type,init) PL_Vars.var = init; |
22 | #define PERLVARIC(var,type,init) PL_Vars.var = init; |
22239a37 |
23 | #include "perlvars.h" |
24 | #undef PERLVAR |
25 | #undef PERLVARI |
3fe35a81 |
26 | #undef PERLVARIC |
22239a37 |
27 | #endif |
28 | |
0a753a76 |
29 | PERL_SYS_INIT(&argc,&argv); |
30 | |
4f63d024 |
31 | init_i18nl10n(1); |
0a753a76 |
32 | |
68dc0745 |
33 | if (!(my_perl = perl_alloc())) |
34 | return (1); |
35 | perl_construct( my_perl ); |
b28d0864 |
36 | PL_perl_destruct_level = 0; |
0a753a76 |
37 | |
4f63d024 |
38 | exitstatus = perl_parse(my_perl, xs_init, argc, argv, env); |
0a753a76 |
39 | if (!exitstatus) { |
40 | exitstatus = perl_run( my_perl ); |
41 | } |
42 | |
0a753a76 |
43 | perl_destruct( my_perl ); |
44 | perl_free( my_perl ); |
45 | |
46 | PERL_SYS_TERM(); |
47 | |
68dc0745 |
48 | return (exitstatus); |
0a753a76 |
49 | } |
50 | |
2d7a9237 |
51 | extern HANDLE w32_perldll_handle; |
0a753a76 |
52 | |
68dc0745 |
53 | BOOL APIENTRY |
54 | DllMain(HANDLE hModule, /* DLL module handle */ |
55 | DWORD fdwReason, /* reason called */ |
56 | LPVOID lpvReserved) /* reserved */ |
0a753a76 |
57 | { |
68dc0745 |
58 | switch (fdwReason) { |
59 | /* The DLL is attaching to a process due to process |
60 | * initialization or a call to LoadLibrary. |
61 | */ |
62 | case DLL_PROCESS_ATTACH: |
63 | /* #define DEFAULT_BINMODE */ |
0a753a76 |
64 | #ifdef DEFAULT_BINMODE |
3e3baf6d |
65 | setmode( fileno( stdin ), O_BINARY ); |
66 | setmode( fileno( stdout ), O_BINARY ); |
67 | setmode( fileno( stderr ), O_BINARY ); |
68 | _fmode = O_BINARY; |
0a753a76 |
69 | #endif |
2d7a9237 |
70 | w32_perldll_handle = hModule; |
68dc0745 |
71 | break; |
0a753a76 |
72 | |
68dc0745 |
73 | /* The DLL is detaching from a process due to |
74 | * process termination or call to FreeLibrary. |
75 | */ |
76 | case DLL_PROCESS_DETACH: |
77 | break; |
0a753a76 |
78 | |
68dc0745 |
79 | /* The attached process creates a new thread. */ |
80 | case DLL_THREAD_ATTACH: |
81 | break; |
0a753a76 |
82 | |
68dc0745 |
83 | /* The thread of the attached process terminates. */ |
84 | case DLL_THREAD_DETACH: |
85 | break; |
0a753a76 |
86 | |
68dc0745 |
87 | default: |
88 | break; |
89 | } |
90 | return TRUE; |
0a753a76 |
91 | } |
8b10511d |
92 | |
93 | /* Register any extra external extensions */ |
94 | |
95 | char *staticlinkmodules[] = { |
96 | "DynaLoader", |
97 | NULL, |
98 | }; |
99 | |
4f63d024 |
100 | EXTERN_C void boot_DynaLoader (pTHX_ CV* cv); |
8b10511d |
101 | |
8b10511d |
102 | static void |
4f63d024 |
103 | xs_init(pTHX) |
8b10511d |
104 | { |
105 | char *file = __FILE__; |
106 | dXSUB_SYS; |
107 | newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file); |
8b10511d |
108 | } |
109 | |