]> git.saurik.com Git - wxWidgets.git/blame - wxPython/wxSWIG/swig_lib/python/embed13.i
SetSelection() may be used for both single and multi selection listboxes
[wxWidgets.git] / wxPython / wxSWIG / swig_lib / python / embed13.i
CommitLineData
c90f71dd
RD
1//
2// embed.i
3// SWIG file embedding the Python interpreter in something else.
4// This file is based on Python-1.3, but it might work with
5// later versions.
6//
7// This file makes it possible to extend Python and all of its
8// built-in functions without having to hack it's setup script.
9//
10
11#ifdef AUTODOC
12%subsection "embed13.i"
13%text %{
14This module provides support for building a new version of the
15Python 1.3 executable. This will be necessary on systems that do
16not support shared libraries and may be necessary with C++
17extensions. This file contains everything you need to build
18a new version of Python from include files and libraries normally
19installed with the Python language.
20
21This module is functionally equivalent to the embed.i library,
22but has a number of changes needed to work with older versions
23of Python.
24%}
25#else
26%echo "embed.i : Using Python 1.3"
27#endif
28
29
30
31
32%wrapper %{
33
34#ifndef NEED_GETOPT
35#include <unistd.h>
36#endif
37
38#include <pythonrun.h>
39typedef struct SWIGPyTab {
40 char *name;
41 void (*initfunc)();
42} SWIGPyTab;
43
44#ifdef __cplusplus
45extern "C"
46#endif
47void SWIG_init(void); /* Forward reference */
48
49#define inittab python_inittab
50
51/* Grab Python's inittab[] structure */
52
53#ifdef __cplusplus
54extern "C" {
55#endif
56#include <config.c>
57
58#undef inittab
59
60
61/* Now define our own version of it.
62 God forbid someone have more than 1000 built-in modules! */
63
64SWIGPyTab inittab[1000];
65
66static int swig_num_modules = 0;
67
68/* Function for adding modules to Python */
69
70static void swig_add_module(char *name, void (*initfunc)()) {
71 inittab[swig_num_modules].name = name;
72 inittab[swig_num_modules].initfunc = initfunc;
73 swig_num_modules++;
74 inittab[swig_num_modules].name = (char *) 0;
75 inittab[swig_num_modules].initfunc = (void (*)()) 0;
76}
77
78/* Function to add all of Python's build in modules to our interpreter */
79
80static void swig_add_builtin() {
81 int i = 0;
82 while (python_inittab[i].name) {
83 swig_add_module(python_inittab[i].name, python_inittab[i].initfunc);
84 i++;
85 }
86
87 /* Add SWIG builtin function */
88 swig_add_module(SWIG_name, SWIG_init);
89#ifdef SWIGMODINIT
90 SWIGMODINIT
91#endif
92}
93#ifdef __cplusplus
94}
95#endif
96
97/* Interface to getopt(): */
98extern int optind;
99extern char *optarg;
100
101#ifdef NEED_GETOPT
102#ifdef __cplusplus
103extern "C" int getopt(int, char **, char *);
104#else
105extern int getopt(); /* PROTO((int, char **, char *)); -- not standardized */
106#endif
107#endif
108
109extern int Py_DebugFlag; /* For parser.c, declared in pythonrun.c */
110extern int Py_VerboseFlag; /* For import.c, declared in pythonrun.c */
111extern int Py_SuppressPrintingFlag; /* For ceval.c, declared in pythonrun.c */
112
113/* Subroutines that live in their own file */
114#ifdef __cplusplus
115extern "C" {
116extern int isatty(int fd);
117extern int PySys_SetArgv(int, char **);
118#endif
119extern char *getversion();
120extern char *getcopyright();
121#ifdef __cplusplus
122}
123#endif
124
125/* For getprogramname(); set by main() */
126static char *argv0;
127
128/* For getargcargv(); set by main() */
129static char **orig_argv;
130static int orig_argc;
131
132/* Short usage message (with %s for argv0) */
133static char *usage_line =
134"usage: %s [-d] [-i] [-s] [-u ] [-v] [-c cmd | file | -] [arg] ...\n";
135
136/* Long usage message, split into parts < 512 bytes */
137static char *usage_top = "\n\
138Options and arguments (and corresponding environment variables):\n\
139-d : debug output from parser (also PYTHONDEBUG=x)\n\
140-i : inspect interactively after running script (also PYTHONINSPECT=x)\n\
141-s : suppress printing of top level expressions (also PYTHONSUPPRESS=x)\n\
142-u : unbuffered stdout and stderr (also PYTHONUNBUFFERED=x)\n\
143-v : verbose (trace import statements) (also PYTHONVERBOSE=x)\n\
144-c cmd : program passed in as string (terminates option list)\n\
145";
146static char *usage_bot = "\
147file : program read from script file\n\
148- : program read from stdin (default; interactive mode if a tty)\n\
149arg ...: arguments passed to program in sys.argv[1:]\n\
150\n\
151Other environment variables:\n\
152PYTHONSTARTUP: file executed on interactive startup (no default)\n\
153PYTHONPATH : colon-separated list of directories prefixed to the\n\
154 default module search path. The result is sys.path.\n\
155";
156
157/* Main program */
158
159int
160main(int argc, char **argv) {
161 int c;
162 int sts;
163 char *command = NULL;
164 char *filename = NULL;
165 FILE *fp = stdin;
166 char *p;
167 int inspect = 0;
168 int unbuffered = 0;
169
170 swig_add_builtin(); /* Add SWIG built-in modules */
171 orig_argc = argc; /* For getargcargv() */
172 orig_argv = argv;
173 argv0 = argv[0]; /* For getprogramname() */
174
175 if ((p = getenv("PYTHONDEBUG")) && *p != '\0')
176 Py_DebugFlag = 1;
177 if ((p = getenv("PYTHONSUPPRESS")) && *p != '\0')
178 Py_SuppressPrintingFlag = 1;
179 if ((p = getenv("PYTHONVERBOSE")) && *p != '\0')
180 Py_VerboseFlag = 1;
181 if ((p = getenv("PYTHONINSPECT")) && *p != '\0')
182 inspect = 1;
183 if ((p = getenv("PYTHONUNBUFFERED")) && *p != '\0')
184 unbuffered = 1;
185
186 while ((c = getopt(argc, argv, "c:disuv")) != EOF) {
187 if (c == 'c') {
188 /* -c is the last option; following arguments
189 that look like options are left for the
190 the command to interpret. */
191 command = (char *) malloc(strlen(optarg) + 2);
192 if (command == NULL)
193 Py_FatalError(
194 "not enough memory to copy -c argument");
195 strcpy(command, optarg);
196 strcat(command, "\n");
197 break;
198 }
199
200 switch (c) {
201
202 case 'd':
203 Py_DebugFlag++;
204 break;
205
206 case 'i':
207 inspect++;
208 break;
209
210 case 's':
211 Py_SuppressPrintingFlag++;
212 break;
213
214 case 'u':
215 unbuffered++;
216 break;
217
218 case 'v':
219 Py_VerboseFlag++;
220 break;
221
222 /* This space reserved for other options */
223
224 default:
225 fprintf(stderr, usage_line, argv[0]);
226 fprintf(stderr, usage_top);
227 fprintf(stderr, usage_bot);
228 exit(2);
229 /*NOTREACHED*/
230
231 }
232 }
233
234 if (unbuffered) {
235#ifndef MPW
236 setbuf(stdout, (char *)NULL);
237 setbuf(stderr, (char *)NULL);
238#else
239 /* On MPW (3.2) unbuffered seems to hang */
240 setvbuf(stdout, (char *)NULL, _IOLBF, BUFSIZ);
241 setvbuf(stderr, (char *)NULL, _IOLBF, BUFSIZ);
242#endif
243 }
244
245 if (command == NULL && optind < argc &&
246 strcmp(argv[optind], "-") != 0)
247 filename = argv[optind];
248
249 if (Py_VerboseFlag ||
250 command == NULL && filename == NULL && isatty((int)fileno(fp)))
251 fprintf(stderr, "Python %s\n%s\n",
252 getversion(), getcopyright());
253
254 if (filename != NULL) {
255 if ((fp = fopen(filename, "r")) == NULL) {
256 fprintf(stderr, "%s: can't open file '%s'\n",
257 argv[0], filename);
258 exit(2);
259 }
260 }
261
262 Py_Initialize();
263 if (command != NULL) {
264 /* Backup optind and force sys.argv[0] = '-c' */
265 optind--;
266 argv[optind] = "-c";
267 }
268
269 PySys_SetArgv(argc-optind, argv+optind);
270
271 if (command) {
272 sts = PyRun_SimpleString(command) != 0;
273 }
274 else {
275 if (filename == NULL && isatty((int)fileno(fp))) {
276 char *startup = getenv("PYTHONSTARTUP");
277 if (startup != NULL && startup[0] != '\0') {
278 FILE *fp = fopen(startup, "r");
279 if (fp != NULL) {
280 (void) PyRun_SimpleFile(fp, startup);
281 PyErr_Clear();
282 fclose(fp);
283 }
284 }
285 }
286 sts = PyRun_AnyFile(
287 fp, filename == NULL ? "<stdin>" : filename) != 0;
288 if (filename != NULL)
289 fclose(fp);
290 }
291
292 if (inspect && isatty((int)fileno(stdin)) &&
293 (filename != NULL || command != NULL))
294 sts = PyRun_AnyFile(stdin, "<stdin>") != 0;
295
296 Py_Exit(sts);
297 /*NOTREACHED*/
298}
299
300
301/* Return the program name -- some code out there needs this. */
302
303#ifdef __cplusplus
304extern "C"
305#endif
306
307char *
308getprogramname()
309{
310 return argv0;
311}
312
313
314/* Make the *original* argc/argv available to other modules.
315 This is rare, but it is needed by the secureware extension. */
316
317#ifdef __cplusplus
318extern "C"
319#endif
320void
321getargcargv(int *argc,char ***argv)
322{
323 *argc = orig_argc;
324 *argv = orig_argv;
325}
326
327/* Total Hack to get getpath.c to compile under C++ */
328
329#ifdef __cplusplus
330#define malloc (char *) malloc
331extern "C" {
332#endif
333#include <getpath.c>
334#ifdef __cplusplus
335}
336#undef malloc
337#endif
338
339%}
340
341
342