/* once init'ed, you might want to extractBinaries() * If you do, what comes after is very platform specific. * Once you've taken care of the platform specific details, * or if there are no binaries to extract, you go on * to doIt(), which is the important part */ int doIt(ARCHIVE_STATUS *status, int argc, char *argv[]) { int rc = 0; /* Load Python DLL */ if (loadPython(status)) return -1; /* Start Python. */ if (startPython(status, argc, argv)) return -1; /* Import modules from archive - bootstrap */ if (importModules(status)) return -1; /* Install zlibs - now all hooks in place */ if (installZlibs(status)) return -1; /* Run scripts */ rc = runScripts(status); VS("OK.\n"); return rc; }
/* * Launch an archive with the given fully-qualified path name * No command line, no extracting of binaries * Designed for embedding situations. */ int launchembedded(char const * archivePath, char const * archiveName) { char pathnm[_MAX_PATH]; VS("START\n"); strcpy(pathnm, archivePath); strcat(pathnm, archiveName); /* Set up paths */ if (setPaths(archivePath, archiveName)) return -1; VS("Got Paths\n"); /* Open the archive */ if (openArchive()) return -1; VS("Opened Archive\n"); /* Load Python DLL */ if (loadPython()) return -1; /* Start Python with silly command line */ if (startPython(1, (char**)&pathnm)) return -1; VS("Started Python\n"); /* a signal to scripts */ PyRun_SimpleString("import sys;sys.frozen='dll'\n"); VS("set sys.frozen\n"); /* Import modules from archive - this is to bootstrap */ if (importModules()) return -1; VS("Imported Modules\n"); /* Install zlibs - now import hooks are in place */ if (installZlibs()) return -1; VS("Installed Zlibs\n"); /* Run scripts */ if (runScripts()) return -1; VS("All scripts run\n"); if (PyErr_Occurred()) { // PyErr_Print(); //PyErr_Clear(); VS("Some error occurred\n"); } VS("OK.\n"); return 0; }
int launch(char const * archivePath, char const * archiveName) { PyObject *obHandle; int loadedNew = 0; char pathnm[_MAX_PATH]; VS("START"); strcpy(pathnm, archivePath); strcat(pathnm, archiveName); /* Set up paths */ if (setPaths(archivePath, archiveName)) return -1; VS("Got Paths"); /* Open the archive */ if (openArchive()) return -1; VS("Opened Archive"); /* Load Python DLL */ if (attachPython(&loadedNew)) return -1; if (loadedNew) { /* Start Python with silly command line */ PyEval_InitThreads(); if (startPython(1, (char**)&pathnm)) return -1; VS("Started new Python"); thisthread = PyThreadState_Swap(NULL); PyThreadState_Swap(thisthread); } else { VS("Attached to existing Python"); /* start a mew interp */ thisthread = PyThreadState_Swap(NULL); PyThreadState_Swap(thisthread); if (thisthread == NULL) { thisthread = Py_NewInterpreter(); VS("created thisthread"); } else VS("grabbed thisthread"); PyRun_SimpleString("import sys;sys.argv=[]"); } /* a signal to scripts */ PyRun_SimpleString("import sys;sys.frozen='dll'\n"); VS("set sys.frozen"); /* Create a 'frozendllhandle' as a counterpart to sys.dllhandle (which is the Pythonxx.dll handle) */ obHandle = Py_BuildValue("i", gInstance); PySys_SetObject("frozendllhandle", obHandle); Py_XDECREF(obHandle); /* Import modules from archive - this is to bootstrap */ if (importModules()) return -1; VS("Imported Modules"); /* Install zlibs - now import hooks are in place */ if (installZlibs()) return -1; VS("Installed Zlibs"); /* Run scripts */ if (runScripts()) return -1; VS("All scripts run"); if (PyErr_Occurred()) { // PyErr_Print(); //PyErr_Clear(); VS("Some error occurred"); } VS("PGL released"); // Abandon our thread state. PyEval_ReleaseThread(thisthread); VS("OK."); return 0; }