[asperl] integrate mainline changes
[p5sagit/p5-mst-13.2.git] / ext / B / byteperl.c
CommitLineData
a8a597b2 1#include "EXTERN.h"
2#include "perl.h"
3#ifndef PATCHLEVEL
4#include "patchlevel.h"
5#endif
6#include "byterun.h"
7
8static void xs_init _((void));
9static PerlInterpreter *my_perl;
10
11int
12#ifndef CAN_PROTOTYPE
13main(argc, argv, env)
14int argc;
15char **argv;
16char **env;
17#else /* def(CAN_PROTOTYPE) */
18main(int argc, char **argv, char **env)
19#endif /* def(CAN_PROTOTYPE) */
20{
21 int exitstatus;
22 int i;
23 char **fakeargv;
24 FILE *fp;
25#ifdef INDIRECT_BGET_MACROS
26 struct bytestream bs;
27#endif /* INDIRECT_BGET_MACROS */
28
29 INIT_SPECIALSV_LIST;
30 PERL_SYS_INIT(&argc,&argv);
31
32#if PATCHLEVEL > 3 || (PATCHLEVEL == 3 && SUBVERSION >= 1)
33 perl_init_i18nl10n(1);
34#else
35 perl_init_i18nl14n(1);
36#endif
37
38 if (!do_undump) {
39 my_perl = perl_alloc();
40 if (!my_perl)
41 exit(1);
42 perl_construct( my_perl );
43 }
44
45#ifdef CSH
46 if (!cshlen)
47 cshlen = strlen(cshname);
48#endif
49
50 if (argc < 2)
51 fp = stdin;
52 else {
53#ifdef WIN32
54 fp = fopen(argv[1], "rb");
55#else
56 fp = fopen(argv[1], "r");
57#endif
58 if (!fp) {
59 perror(argv[1]);
60 exit(1);
61 }
62 argv++;
63 argc--;
64 }
65 New(666, fakeargv, argc + 4, char *);
66 fakeargv[0] = argv[0];
67 fakeargv[1] = "-e";
68 fakeargv[2] = "";
69 fakeargv[3] = "--";
70 for (i = 1; i < argc; i++)
71 fakeargv[i + 3] = argv[i];
72 fakeargv[argc + 3] = 0;
73
74 exitstatus = perl_parse(my_perl, xs_init, argc + 3, fakeargv, NULL);
75 if (exitstatus)
76 exit( exitstatus );
77
78 sv_setpv(GvSV(gv_fetchpv("0", TRUE, SVt_PV)), argv[0]);
79 main_cv = compcv;
80 compcv = 0;
81
82#ifdef INDIRECT_BGET_MACROS
83 bs.data = fp;
84 bs.fgetc = (int(*) _((void*)))fgetc;
85 bs.fread = (int(*) _((char*,size_t,size_t,void*)))fread;
86 bs.freadpv = freadpv;
87 byterun(bs);
88#else
89 byterun(fp);
90#endif /* INDIRECT_BGET_MACROS */
91
92 exitstatus = perl_run( my_perl );
93
94 perl_destruct( my_perl );
95 perl_free( my_perl );
96
97 exit( exitstatus );
98}
99
100static void
101xs_init()
102{
103}