1
2/* Python interpreter main program for frozen scripts */
3
4#include "Python.h"
5
6#ifdef MS_WINDOWS
7extern void PyWinFreeze_ExeInit(void);
8extern void PyWinFreeze_ExeTerm(void);
9extern int PyInitFrozenExtensions(void);
10#endif
11
12/* Main program */
13
14int
15Py_FrozenMain(int argc, char **argv)
16{
17    char *p;
18    int n, sts;
19    int inspect = 0;
20    int unbuffered = 0;
21
22    Py_FrozenFlag = 1; /* Suppress errors from getpath.c */
23
24    if ((p = Py_GETENV("PYTHONINSPECT")) && *p != '\0')
25        inspect = 1;
26    if ((p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0')
27        unbuffered = 1;
28
29    if (unbuffered) {
30        setbuf(stdin, (char *)NULL);
31        setbuf(stdout, (char *)NULL);
32        setbuf(stderr, (char *)NULL);
33    }
34
35#ifdef MS_WINDOWS
36    PyInitFrozenExtensions();
37#endif /* MS_WINDOWS */
38    if (argc >= 1)
39        Py_SetProgramName(argv[0]);
40    Py_Initialize();
41#ifdef MS_WINDOWS
42    PyWinFreeze_ExeInit();
43#endif
44
45    if (Py_VerboseFlag)
46        fprintf(stderr, "Python %s\n%s\n",
47            Py_GetVersion(), Py_GetCopyright());
48
49    PySys_SetArgv(argc, argv);
50
51    n = PyImport_ImportFrozenModule("__main__");
52    if (n == 0)
53        Py_FatalError("__main__ not frozen");
54    if (n < 0) {
55        PyErr_Print();
56        sts = 1;
57    }
58    else
59        sts = 0;
60
61    if (inspect && isatty((int)fileno(stdin)))
62        sts = PyRun_AnyFile(stdin, "<stdin>") != 0;
63
64#ifdef MS_WINDOWS
65    PyWinFreeze_ExeTerm();
66#endif
67    Py_Finalize();
68    return sts;
69}
70