3 #define USE_SOCKETS_AS_HANDLES
11 _CRTIMP int * __cdecl _errno(void);
12 #define errno (*_errno())
14 _CRTIMP extern int errno;
24 #include "ipstdiowin.h"
33 static void xs_init _((CPERLarg));
34 #define stderr (&_iob[2])
41 CPerlHost() { pPerl = NULL; };
42 inline BOOL PerlCreate(void)
46 pPerl = perl_alloc(&perlMem,
55 perlDir.SetPerlObj(pPerl);
56 perlEnv.SetPerlObj(pPerl);
57 perlLIO.SetPerlObj(pPerl);
58 perlLIO.SetSockCtl(&perlSock);
59 perlLIO.SetStdObj(&perlStdIO);
60 perlMem.SetPerlObj(pPerl);
61 perlProc.SetPerlObj(pPerl);
62 perlSock.SetPerlObj(pPerl);
63 perlSock.SetStdObj(&perlStdIO);
64 perlStdIO.SetPerlObj(pPerl);
65 perlStdIO.SetSockCtl(&perlSock);
68 pPerl->perl_construct();
72 fprintf(stderr, "%s\n", "Error: Unable to construct data structures");
80 fprintf(stderr, "%s\n", "Error: Unable to allocate memory");
83 return (pPerl != NULL);
85 inline int PerlParse(int argc, char** argv, char** env)
91 retVal = pPerl->perl_parse(xs_init, argc, argv, (env == NULL || *env == NULL ? &environ : env));
95 // this is where exit() should arrive
100 fprintf(stderr, "Error: Parse exception\n");
105 inline int PerlRun(void)
110 retVal = pPerl->perl_run();
114 // this is where exit() should arrive
119 fprintf(stderr, "Error: Runtime exception\n");
124 inline void PerlDestroy(void)
128 pPerl->perl_destruct();
144 CPerlStdIO perlStdIO;
148 #define PERL_SYS_INIT(a, c)
151 main(int argc, char **argv, char **env)
156 if(!host.PerlCreate())
160 exitstatus = host.PerlParse(argc, argv, env);
164 exitstatus = host.PerlRun();
173 static void xs_init(CPERLarg)
177 EXTERN_C void boot_DynaLoader _((CPERLarg_ CV* cv))
181 #else /* PERL_OBJECT */
183 /* Say NO to CPP! Hallelujah! */
186 * GNU C does not do __declspec()
188 #define __declspec(foo)
190 /* Mingw32 defaults to globing command line
191 * This is inconsistent with other Win32 ports and
192 * seems to cause trouble with passing -DXSVERSION=\"1.6\"
193 * So we turn it off like this:
200 __declspec(dllimport) int RunPerl(int argc, char **argv, char **env, void *ios);
203 main(int argc, char **argv, char **env)
205 return RunPerl(argc, argv, env, (void*)0);
208 #endif /* PERL_OBJECT */