[inseparable changes from patch from perl-5.003_97d to perl-5.003_97e]
[p5sagit/p5-mst-13.2.git] / win32 / perllib.c
CommitLineData
0a753a76 1/*
2 * "The Road goes ever on and on, down from the door where it began."
3 */
4
5#ifdef __cplusplus
6extern "C" {
7#endif
8
9#include "EXTERN.h"
10#include "perl.h"
11
12#ifdef __cplusplus
13}
14# define EXTERN_C extern "C"
15#else
16# define EXTERN_C extern
17#endif
18
19static void xs_init _((void));
20
68dc0745 21__declspec(dllexport) int
22RunPerl(int argc, char **argv, char **env, void *iosubsystem)
0a753a76 23{
68dc0745 24 int exitstatus;
25 PerlInterpreter *my_perl;
26 void *pOldIOSubsystem;
0a753a76 27
68dc0745 28 pOldIOSubsystem = SetIOSubSystem(iosubsystem);
0a753a76 29
30 PERL_SYS_INIT(&argc,&argv);
31
32 perl_init_i18nl10n(1);
33
68dc0745 34 if (!(my_perl = perl_alloc()))
35 return (1);
36 perl_construct( my_perl );
37 perl_destruct_level = 0;
0a753a76 38
39 exitstatus = perl_parse( my_perl, xs_init, argc, argv, env);
40 if (!exitstatus) {
41 exitstatus = perl_run( my_perl );
42 }
43
0a753a76 44 perl_destruct( my_perl );
45 perl_free( my_perl );
46
47 PERL_SYS_TERM();
48
68dc0745 49 SetIOSubSystem(pOldIOSubsystem);
0a753a76 50
68dc0745 51 return (exitstatus);
0a753a76 52}
53
54/* Register any extra external extensions */
55
68dc0745 56char *staticlinkmodules[] = {
57 "DynaLoader",
58 NULL,
59};
0a753a76 60
61EXTERN_C void boot_DynaLoader _((CV* cv));
62
63static void
64xs_init()
65{
68dc0745 66 char *file = __FILE__;
78ec65c7 67 dXSUB_SYS;
68dc0745 68 newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
0a753a76 69}
70
71extern HANDLE PerlDllHandle;
72
68dc0745 73BOOL APIENTRY
74DllMain(HANDLE hModule, /* DLL module handle */
75 DWORD fdwReason, /* reason called */
76 LPVOID lpvReserved) /* reserved */
0a753a76 77{
68dc0745 78 switch (fdwReason) {
79 /* The DLL is attaching to a process due to process
80 * initialization or a call to LoadLibrary.
81 */
82 case DLL_PROCESS_ATTACH:
83/* #define DEFAULT_BINMODE */
0a753a76 84#ifdef DEFAULT_BINMODE
68dc0745 85 _setmode( _fileno( stdin ), _O_BINARY );
86 _setmode( _fileno( stdout ), _O_BINARY );
87 _setmode( _fileno( stderr ), _O_BINARY );
88 _fmode = _O_BINARY;
0a753a76 89#endif
68dc0745 90 PerlDllHandle = hModule;
91 break;
0a753a76 92
68dc0745 93 /* The DLL is detaching from a process due to
94 * process termination or call to FreeLibrary.
95 */
96 case DLL_PROCESS_DETACH:
97 break;
0a753a76 98
68dc0745 99 /* The attached process creates a new thread. */
100 case DLL_THREAD_ATTACH:
101 break;
0a753a76 102
68dc0745 103 /* The thread of the attached process terminates. */
104 case DLL_THREAD_DETACH:
105 break;
0a753a76 106
68dc0745 107 default:
108 break;
109 }
110 return TRUE;
0a753a76 111}