diff options
Diffstat (limited to 'PC/os2emx/pythonpm.c')
| -rw-r--r-- | PC/os2emx/pythonpm.c | 124 | 
1 files changed, 0 insertions, 124 deletions
| diff --git a/PC/os2emx/pythonpm.c b/PC/os2emx/pythonpm.c deleted file mode 100644 index ba47f4b..0000000 --- a/PC/os2emx/pythonpm.c +++ /dev/null @@ -1,124 +0,0 @@ -/* OS/2 PM main program - creates a hidden window, and starts Python - * interpreter in a separate thread, so that Python scripts can be - * run in PM process space without a console Window.  The interpreter - * is incorporated by linking in the Python DLL. - * - * As it stands, I don't think this is adequate for supporting Python - * GUI modules, as the Python thread doesn't have its own message - * queue - which is required of threads that want to create/use - * PM windows. - * - * This code owes a lot to "OS/2 Presentation Manager Programming", by - * Charles Petzold. - * - * Andrew MacIntyre <andymac@bullseye.apana.org.au>, August 2001. - * Released under the terms of the Python 2.1.1 licence - see the LICENCE - * file in the Python v2.1.1 (or later) source distribution. - * Copyright assigned to the Python Software Foundation, 2001. - */ - -#define INCL_DOS -#define INCL_WIN -#include <os2.h> -#include <process.h> - -#include "Python.h" - -/* use structure to pass command line to Python thread */ -typedef struct -{ -    int argc; -    char **argv; -    HWND Frame; -    int running; -} arglist; - -/* make this a global to simplify access. - * it should only be set from the Python thread, or by the code that - * initiates the Python thread when the thread cannot be created. - */ -int PythonRC; - -extern DL_EXPORT(int) Py_Main(int, char **); -void PythonThread(void *); - -int -main(int argc, char **argv) -{ -    ULONG FrameFlags = FCF_TITLEBAR | -                       FCF_SYSMENU | -                       FCF_SIZEBORDER | -                       FCF_HIDEBUTTON | -                       FCF_SHELLPOSITION | -                       FCF_TASKLIST; -    HAB hab; -    HMQ hmq; -    HWND Client; -    QMSG qmsg; -    arglist args; -    int python_tid; - -    /* init PM and create message queue */ -    hab = WinInitialize(0); -    hmq = WinCreateMsgQueue(hab, 0); - -    /* create a (hidden) Window to house the window procedure */ -    args.Frame = WinCreateStdWindow(HWND_DESKTOP, -                                    0, -                                    &FrameFlags, -                                    NULL, -                                    "PythonPM", -                                    0L, -                                    0, -                                    0, -                                    &Client); - -    /* run Python interpreter in a thread */ -    args.argc = argc; -    args.argv = argv; -    args.running = 0; -    if (-1 == (python_tid = _beginthread(PythonThread, NULL, 1024 * 1024, &args))) -    { -        /* couldn't start thread */ -        WinAlarm(HWND_DESKTOP, WA_ERROR); -        PythonRC = 1; -    } -    else -    { -        /* process PM messages, until Python exits */ -        while (WinGetMsg(hab, &qmsg, NULLHANDLE, 0, 0)) -            WinDispatchMsg(hab, &qmsg); -        if (args.running > 0) -            DosKillThread(python_tid); -    } - -    /* destroy window, shutdown message queue and PM */ -    WinDestroyWindow(args.Frame); -    WinDestroyMsgQueue(hmq); -    WinTerminate(hab); - -    return PythonRC; -} - -void PythonThread(void *argl) -{ -    HAB hab; -    arglist *args; - -    /* PM initialisation */ -    hab = WinInitialize(0); - -    /* start Python */ -    args = (arglist *)argl; -    args->running = 1; -    PythonRC = Py_Main(args->argc, args->argv); - -    /* enter a critical section and send the termination message */ -    DosEnterCritSec(); -    args->running = 0; -    WinPostMsg(args->Frame, WM_QUIT, NULL, NULL); - -    /* shutdown PM and terminate thread */ -    WinTerminate(hab); -    _endthread(); -} | 
