annotate PC/os2emx/pythonpm.c @ 79675:c0a2294de787 2.7

Issue #16199: Backport 2to3 typo fix from 3.2.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Thu, 11 Oct 2012 16:15:46 -0700
parents fd25030223b0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21972
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
1 /* OS/2 PM main program - creates a hidden window, and starts Python
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
2 * interpreter in a separate thread, so that Python scripts can be
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
3 * run in PM process space without a console Window. The interpreter
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
4 * is incorporated by linking in the Python DLL.
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
5 *
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
6 * As it stands, I don't think this is adequate for supporting Python
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
7 * GUI modules, as the Python thread doesn't have its own message
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
8 * queue - which is required of threads that want to create/use
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
9 * PM windows.
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
10 *
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
11 * This code owes a lot to "OS/2 Presentation Manager Programming", by
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
12 * Charles Petzold.
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
13 *
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
14 * Andrew MacIntyre <andymac@bullseye.apana.org.au>, August 2001.
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
15 * Released under the terms of the Python 2.1.1 licence - see the LICENCE
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
16 * file in the Python v2.1.1 (or later) source distribution.
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
17 * Copyright assigned to the Python Software Foundation, 2001.
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
18 */
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
19
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
20 #define INCL_DOS
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
21 #define INCL_WIN
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
22 #include <os2.h>
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
23 #include <process.h>
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
24
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
25 #include "Python.h"
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
26
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
27 /* use structure to pass command line to Python thread */
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
28 typedef struct
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
29 {
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
30 int argc;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
31 char **argv;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
32 HWND Frame;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
33 int running;
21972
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
34 } arglist;
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
35
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
36 /* make this a global to simplify access.
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
37 * it should only be set from the Python thread, or by the code that
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
38 * initiates the Python thread when the thread cannot be created.
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
39 */
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
40 int PythonRC;
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
41
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
42 extern DL_EXPORT(int) Py_Main(int, char **);
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
43 void PythonThread(void *);
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
44
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
45 int
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
46 main(int argc, char **argv)
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
47 {
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
48 ULONG FrameFlags = FCF_TITLEBAR |
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
49 FCF_SYSMENU |
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
50 FCF_SIZEBORDER |
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
51 FCF_HIDEBUTTON |
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
52 FCF_SHELLPOSITION |
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
53 FCF_TASKLIST;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
54 HAB hab;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
55 HMQ hmq;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
56 HWND Client;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
57 QMSG qmsg;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
58 arglist args;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
59 int python_tid;
21972
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
60
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
61 /* init PM and create message queue */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
62 hab = WinInitialize(0);
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
63 hmq = WinCreateMsgQueue(hab, 0);
21972
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
64
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
65 /* create a (hidden) Window to house the window procedure */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
66 args.Frame = WinCreateStdWindow(HWND_DESKTOP,
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
67 0,
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
68 &FrameFlags,
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
69 NULL,
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
70 "PythonPM",
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
71 0L,
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
72 0,
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
73 0,
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
74 &Client);
21972
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
75
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
76 /* run Python interpreter in a thread */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
77 args.argc = argc;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
78 args.argv = argv;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
79 args.running = 0;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
80 if (-1 == (python_tid = _beginthread(PythonThread, NULL, 1024 * 1024, &args)))
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
81 {
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
82 /* couldn't start thread */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
83 WinAlarm(HWND_DESKTOP, WA_ERROR);
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
84 PythonRC = 1;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
85 }
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
86 else
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
87 {
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
88 /* process PM messages, until Python exits */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
89 while (WinGetMsg(hab, &qmsg, NULLHANDLE, 0, 0))
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
90 WinDispatchMsg(hab, &qmsg);
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
91 if (args.running > 0)
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
92 DosKillThread(python_tid);
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
93 }
21972
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
94
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
95 /* destroy window, shutdown message queue and PM */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
96 WinDestroyWindow(args.Frame);
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
97 WinDestroyMsgQueue(hmq);
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
98 WinTerminate(hab);
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
99
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
100 return PythonRC;
21972
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
101 }
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
102
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
103 void PythonThread(void *argl)
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
104 {
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
105 HAB hab;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
106 arglist *args;
21972
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
107
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
108 /* PM initialisation */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
109 hab = WinInitialize(0);
21972
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
110
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
111 /* start Python */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
112 args = (arglist *)argl;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
113 args->running = 1;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
114 PythonRC = Py_Main(args->argc, args->argv);
21972
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
115
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
116 /* enter a critical section and send the termination message */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
117 DosEnterCritSec();
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
118 args->running = 0;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
119 WinPostMsg(args->Frame, WM_QUIT, NULL, NULL);
21972
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
120
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
121 /* shutdown PM and terminate thread */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
122 WinTerminate(hab);
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 21972
diff changeset
123 _endthread();
21972
4a1337906608 Create and populate OS/2 EMX port build directory:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
diff changeset
124 }