blob: 24bcd77baa5dbfcfaae728e2ee243b96c6732ccb [file] [log] [blame]
Guido van Rossumb0f3c821994-08-23 13:34:25 +00001/***********************************************************
Jack Jansen42218ce1997-01-31 16:15:11 +00002Copyright 1991-1997 by Stichting Mathematisch Centrum, Amsterdam,
Guido van Rossum99546991995-01-08 14:33:34 +00003The Netherlands.
Guido van Rossumb0f3c821994-08-23 13:34:25 +00004
5 All Rights Reserved
6
7Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
9provided that the above copyright notice appear in all copies and that
10both that copyright notice and this permission notice appear in
11supporting documentation, and that the names of Stichting Mathematisch
12Centrum or CWI not be used in advertising or publicity pertaining to
13distribution of the software without specific, written prior permission.
14
15STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
16THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
17FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
18FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
21OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22
23******************************************************************/
24
Jack Jansen696c9581995-08-14 12:33:20 +000025/* Python interpreter main program */
Guido van Rossumb0f3c821994-08-23 13:34:25 +000026
Jack Jansen696c9581995-08-14 12:33:20 +000027#include "Python.h"
28#include "pythonresources.h"
29#include "import.h"
30#include "marshal.h"
Jack Jansenf6865f71996-09-04 15:24:59 +000031#include "macglue.h"
Guido van Rossumb0f3c821994-08-23 13:34:25 +000032
Jack Jansen696c9581995-08-14 12:33:20 +000033#include <Memory.h>
34#include <Resources.h>
Guido van Rossumb0f3c821994-08-23 13:34:25 +000035#include <stdio.h>
Jack Jansen696c9581995-08-14 12:33:20 +000036#include <Events.h>
37#include <Windows.h>
Jack Jansen2429c721996-03-07 15:17:11 +000038#include <Fonts.h>
Jack Jansen36b983c1997-09-09 13:53:21 +000039#include <Balloons.h>
Jack Jansenc76fd391995-02-02 14:27:31 +000040#ifdef __MWERKS__
41#include <SIOUX.h>
Jack Jansen1e8557a1995-11-10 14:51:26 +000042#define USE_SIOUX
Jack Jansen8c693211997-01-07 16:19:42 +000043#if __profile__ == 1
44#include <profiler.h>
45#endif
Jack Jansenc76fd391995-02-02 14:27:31 +000046#endif
47
Jack Jansen0168f271995-10-27 13:32:30 +000048#ifdef THINK_C
49#include <console.h>
50#endif
51
Jack Jansen696c9581995-08-14 12:33:20 +000052#define STARTUP "PythonStartup"
Jack Jansenbac428d1994-12-14 13:47:30 +000053
Jack Jansen696c9581995-08-14 12:33:20 +000054extern int Py_DebugFlag; /* For parser.c, declared in pythonrun.c */
55extern int Py_VerboseFlag; /* For import.c, declared in pythonrun.c */
Jack Jansen3f7d2b41996-09-06 22:21:07 +000056short PyMac_AppRefNum; /* RefNum of application resource fork */
Jack Jansen696c9581995-08-14 12:33:20 +000057
Jack Jansen1d2f8631996-08-02 15:16:16 +000058/* For Py_GetArgcArgv(); set by main() */
Jack Jansen696c9581995-08-14 12:33:20 +000059static char **orig_argv;
60static int orig_argc;
61
Jack Jansen7d5f9e81996-09-07 17:09:31 +000062PyMac_PrefRecord options;
Jack Jansen0168f271995-10-27 13:32:30 +000063
Jack Jansen76ceece1996-08-19 11:18:24 +000064static void Py_Main Py_PROTO((int, char **)); /* Forward */
65void PyMac_Exit Py_PROTO((int)); /* Forward */
66
Jack Jansen01fbc681996-02-28 15:42:47 +000067/* Initialize the Mac toolbox world */
68
69static void
70init_mac_world()
71{
72#ifdef THINK_C
73 printf("\n");
74#else
75 MaxApplZone();
76 InitGraf(&qd.thePort);
77 InitFonts();
78 InitWindows();
79 TEInit();
80 InitDialogs((long)0);
81 InitMenus();
82 InitCursor();
83#endif
84}
85
Jack Jansen7d5f9e81996-09-07 17:09:31 +000086/*
87** PyMac_InteractiveOptions - Allow user to set options if option key is pressed
88*/
Jack Jansen01fbc681996-02-28 15:42:47 +000089static void
Jack Jansen7d5f9e81996-09-07 17:09:31 +000090PyMac_InteractiveOptions(PyMac_PrefRecord *p, int *argcp, char ***argvp)
91{
92 KeyMap rmap;
93 unsigned char *map;
94 short item, type;
95 ControlHandle handle;
96 DialogPtr dialog;
97 Rect rect;
98 int old_argc = *argcp;
99 int i;
100
101 /*
102 ** If the preferences disallows interactive options we return,
103 ** similarly of <option> isn't pressed.
104 */
105 if (p->nointopt) return;
106
107 GetKeys(rmap);
108 map = (unsigned char *)rmap;
109 if ( ( map[0x3a>>3] & (1<<(0x3a&7)) ) == 0 ) /* option key is 3a */
110 return;
111
112 dialog = GetNewDialog(OPT_DIALOG, NULL, (WindowPtr)-1);
113 if ( dialog == NULL ) {
114 printf("Option dialog not found - cannot set options\n");
115 return;
116 }
117 SetDialogDefaultItem(dialog, OPT_OK);
118 SetDialogCancelItem(dialog, OPT_CANCEL);
119
120 /* Set default values */
121#define SET_OPT_ITEM(num, var) \
122 GetDialogItem(dialog, (num), &type, (Handle *)&handle, &rect); \
Jack Jansen08c3be31997-04-08 15:27:00 +0000123 SetControlValue(handle, (short)p->var);
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000124
125 SET_OPT_ITEM(OPT_INSPECT, inspect);
126 SET_OPT_ITEM(OPT_VERBOSE, verbose);
Jack Jansen36b983c1997-09-09 13:53:21 +0000127 SET_OPT_ITEM(OPT_OPTIMIZE, optimize);
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000128 SET_OPT_ITEM(OPT_UNBUFFERED, unbuffered);
129 SET_OPT_ITEM(OPT_DEBUGGING, debugging);
130 SET_OPT_ITEM(OPT_KEEPNORMAL, keep_normal);
131 SET_OPT_ITEM(OPT_KEEPERROR, keep_error);
Jack Jansen36b983c1997-09-09 13:53:21 +0000132 SET_OPT_ITEM(OPT_OLDEXC, oldexc);
133 SET_OPT_ITEM(OPT_NOSITE, nosite);
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000134 /* The rest are not settable interactively */
135
136#undef SET_OPT_ITEM
137
138 while (1) {
139 handle = NULL;
140 ModalDialog(NULL, &item);
141 if ( item == OPT_OK )
142 break;
143 if ( item == OPT_CANCEL ) {
Jack Jansen08c3be31997-04-08 15:27:00 +0000144 DisposeDialog(dialog);
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000145 exit(0);
146 }
Jack Jansen36b983c1997-09-09 13:53:21 +0000147 if ( item == OPT_HELP ) {
148 HMSetBalloons(!HMGetBalloons());
149 }
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000150 if ( item == OPT_CMDLINE ) {
151 int new_argc, newer_argc;
152 char **new_argv, **newer_argv;
153
154 new_argc = ccommand(&new_argv);
155 newer_argc = (new_argc-1) + old_argc;
156 newer_argv = malloc((newer_argc+1)*sizeof(char *));
157 if( !newer_argv )
158 Py_FatalError("Cannot malloc argv\n");
159 for(i=0; i<old_argc; i++)
160 newer_argv[i] = (*argvp)[i];
161 for(i=old_argc; i<=newer_argc; i++) /* Copy the NULL too */
162 newer_argv[i] = new_argv[i-old_argc+1];
163 *argvp = newer_argv;
164 *argcp = newer_argc;
165
166 /* XXXX Is it not safe to use free() here, apparently */
167 }
168#define OPT_ITEM(num, var) \
169 if ( item == (num) ) { \
170 p->var = !p->var; \
171 GetDialogItem(dialog, (num), &type, (Handle *)&handle, &rect); \
Jack Jansen08c3be31997-04-08 15:27:00 +0000172 SetControlValue(handle, (short)p->var); \
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000173 }
174
175 OPT_ITEM(OPT_INSPECT, inspect);
176 OPT_ITEM(OPT_VERBOSE, verbose);
Jack Jansen36b983c1997-09-09 13:53:21 +0000177 OPT_ITEM(OPT_OPTIMIZE, optimize);
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000178 OPT_ITEM(OPT_UNBUFFERED, unbuffered);
179 OPT_ITEM(OPT_DEBUGGING, debugging);
180 OPT_ITEM(OPT_KEEPNORMAL, keep_normal);
181 OPT_ITEM(OPT_KEEPERROR, keep_error);
Jack Jansen36b983c1997-09-09 13:53:21 +0000182 OPT_ITEM(OPT_OLDEXC, oldexc);
183 OPT_ITEM(OPT_NOSITE, nosite);
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000184
185#undef OPT_ITEM
186 }
Jack Jansen08c3be31997-04-08 15:27:00 +0000187 DisposeDialog(dialog);
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000188}
189
190/*
191** Initialization code, shared by interpreter and applets
192*/
193static void
Jack Jansen52ac0371997-01-15 15:49:08 +0000194init_common(int *argcp, char ***argvp, int embedded)
Jack Jansen01fbc681996-02-28 15:42:47 +0000195{
Jack Jansen3f7d2b41996-09-06 22:21:07 +0000196 /* Remember resource fork refnum, for later */
197 PyMac_AppRefNum = CurResFile();
198
Jack Jansen01fbc681996-02-28 15:42:47 +0000199 /* Initialize toolboxes */
200 init_mac_world();
201
202#ifdef USE_MAC_SHARED_LIBRARY
203 /* Add the shared library to the stack of resource files */
Jack Jansen87c485c1998-07-31 09:38:01 +0000204 (void)PyMac_init_process_location();
Jack Jansen01fbc681996-02-28 15:42:47 +0000205 PyMac_AddLibResources();
206#endif
207
208#if defined(USE_GUSI)
209 /* Setup GUSI */
210 GUSIDefaultSetup();
Jack Jansenf6865f71996-09-04 15:24:59 +0000211 PyMac_SetGUSISpin();
Jack Jansen3f7d2b41996-09-06 22:21:07 +0000212 PyMac_SetGUSIOptions();
Jack Jansena39f1b01997-05-23 15:35:14 +0000213 atexit(PyMac_StopGUSISpin);
Jack Jansen01fbc681996-02-28 15:42:47 +0000214#endif
215
216#ifdef USE_SIOUX
217 /* Set various SIOUX flags. Some are changed later based on options */
Jack Jansencaa7c461997-06-12 10:49:13 +0000218/* SIOUXSettings.standalone = 0; /* XXXX Attempting to keep sioux from eating events */
Jack Jansen01fbc681996-02-28 15:42:47 +0000219 SIOUXSettings.asktosaveonclose = 0;
220 SIOUXSettings.showstatusline = 0;
221 SIOUXSettings.tabspaces = 4;
222#endif
223
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000224 /* Get options from preference file (or from applet resource fork) */
225 options.keep_error = 1; /* default-default */
226 PyMac_PreferenceOptions(&options);
227
Jack Jansen52ac0371997-01-15 15:49:08 +0000228 if ( embedded ) {
229 static char *emb_argv[] = {"embedded-python", 0};
230
231 *argcp = 1;
232 *argvp = emb_argv;
233 } else {
234 /* Create argc/argv. Do it before we go into the options event loop. */
235 *argcp = PyMac_GetArgv(argvp, options.noargs);
236
237 /* Do interactive option setting, if allowed and <option> depressed */
238 PyMac_InteractiveOptions(&options, argcp, argvp);
239 }
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000240
241 /* Copy selected options to where the machine-independent stuff wants it */
242 Py_VerboseFlag = options.verbose;
Jack Jansen7330b391997-08-08 14:56:41 +0000243/* Py_SuppressPrintingFlag = options.suppress_print; */
Jack Jansen36b983c1997-09-09 13:53:21 +0000244 Py_OptimizeFlag = options.optimize;
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000245 Py_DebugFlag = options.debugging;
Jack Jansena7a89eb1997-10-07 21:48:57 +0000246 Py_NoSiteFlag = options.nosite;
247 Py_UseClassExceptionsFlag = !(options.oldexc);
Jack Jansene3ae0df1997-06-03 15:28:29 +0000248 if ( options.noargs ) {
249 /* don't process events at all without the scripts permission */
250 PyMacSchedParams scp;
251
252 PyMac_GetSchedParams(&scp);
253 scp.process_events = 0;
254 /* Should we disable command-dot as well? */
255 PyMac_SetSchedParams(&scp);
256 }
Jack Jansen36b983c1997-09-09 13:53:21 +0000257 /* XXXX dispatch oldexc and nosite */
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000258
259 /* Set buffering */
260 if (options.unbuffered) {
261#ifndef MPW
262 setbuf(stdout, (char *)NULL);
263 setbuf(stderr, (char *)NULL);
264#else
265 /* On MPW (3.2) unbuffered seems to hang */
266 setvbuf(stdout, (char *)NULL, _IOLBF, BUFSIZ);
267 setvbuf(stderr, (char *)NULL, _IOLBF, BUFSIZ);
268#endif
269 }
Jack Jansen8c693211997-01-07 16:19:42 +0000270#if __profile__ == 1
271 /* collectSummary or collectDetailed, timebase, #routines, max stack depth */
272 ProfilerInit(collectSummary, bestTimeBase, 2000, 150);
273#endif
Jack Jansen7330b391997-08-08 14:56:41 +0000274
275 /* Tell the rest of python about our argc/argv */
276 orig_argc = *argcp; /* For Py_GetArgcArgv() */
277 orig_argv = *argvp;
278 Py_SetProgramName((*argvp)[0]);
Jack Jansen01fbc681996-02-28 15:42:47 +0000279}
280
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000281/*
282** Inspection mode after script/applet termination
283*/
284static int
285run_inspect()
286{
287 int sts = 0;
288
289 if (options.inspect && isatty((int)fileno(stdin)))
290 sts = PyRun_AnyFile(stdin, "<stdin>") != 0;
291 return sts;
292}
Jack Jansen01fbc681996-02-28 15:42:47 +0000293
Jack Jansen696c9581995-08-14 12:33:20 +0000294#ifdef USE_MAC_APPLET_SUPPORT
295/* Applet support */
296
297/* Run a compiled Python Python script from 'PYC ' resource __main__ */
298static int
299run_main_resource()
300{
301 Handle h;
302 long size;
303 PyObject *code;
304 PyObject *result;
305
306 h = GetNamedResource('PYC ', "\p__main__");
307 if (h == NULL) {
308 Alert(NOPYC_ALERT, NULL);
309 return 1;
310 }
311 size = GetResourceSizeOnDisk(h);
312 HLock(h);
313 code = PyMarshal_ReadObjectFromString(*h + 8, (int)(size - 8));
314 HUnlock(h);
315 ReleaseResource(h);
316 if (code == NULL) {
317 PyErr_Print();
318 return 1;
319 }
320 result = PyImport_ExecCodeModule("__main__", code);
321 Py_DECREF(code);
322 if (result == NULL) {
323 PyErr_Print();
324 return 1;
325 }
326 Py_DECREF(result);
327 return 0;
328}
329
330/* Initialization sequence for applets */
331void
332PyMac_InitApplet()
333{
Guido van Rossumb0f3c821994-08-23 13:34:25 +0000334 int argc;
335 char **argv;
Jack Jansen696c9581995-08-14 12:33:20 +0000336 int err;
337
Jack Jansen52ac0371997-01-15 15:49:08 +0000338 init_common(&argc, &argv, 0);
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000339
Jack Jansen696c9581995-08-14 12:33:20 +0000340 Py_Initialize();
341 PySys_SetArgv(argc, argv);
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000342
Jack Jansen696c9581995-08-14 12:33:20 +0000343 err = run_main_resource();
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000344
345 err = (run_inspect() || err);
346
Jack Jansen696c9581995-08-14 12:33:20 +0000347 fflush(stderr);
348 fflush(stdout);
Jack Jansen0168f271995-10-27 13:32:30 +0000349 PyMac_Exit(err);
Jack Jansen696c9581995-08-14 12:33:20 +0000350 /* XXX Should we bother to Py_Exit(sts)? */
351}
352
Jack Jansen52ac0371997-01-15 15:49:08 +0000353/*
354** Hook for embedding python.
355*/
356void
357PyMac_Initialize()
358{
359 int argc;
360 char **argv;
361
362 init_common(&argc, &argv, 1);
363 Py_Initialize();
364 PySys_SetArgv(argc, argv);
365}
366
Jack Jansen696c9581995-08-14 12:33:20 +0000367#endif /* USE_MAC_APPLET_SUPPORT */
368
369/* For normal application */
370void
371PyMac_InitApplication()
372{
373 int argc;
374 char **argv;
375
Jack Jansen52ac0371997-01-15 15:49:08 +0000376 init_common(&argc, &argv, 0);
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000377
Jack Jansen696c9581995-08-14 12:33:20 +0000378 if ( argc > 1 ) {
379 /* We're running a script. Attempt to change current directory */
380 char curwd[256], *endp;
381
382 strcpy(curwd, argv[1]);
383 endp = strrchr(curwd, ':');
384 if ( endp && endp > curwd ) {
385 *endp = '\0';
386
387 chdir(curwd);
Jack Jansen378815c1996-03-06 16:21:34 +0000388#ifdef USE_GUSI
389 /* Change MacOS's idea of wd too */
390 PyMac_FixGUSIcd();
391#endif
Jack Jansen696c9581995-08-14 12:33:20 +0000392 }
393 }
394 Py_Main(argc, argv);
395}
396
Jack Jansen696c9581995-08-14 12:33:20 +0000397/* Main program */
398
Jack Jansen76ceece1996-08-19 11:18:24 +0000399static void
Jack Jansen696c9581995-08-14 12:33:20 +0000400Py_Main(argc, argv)
401 int argc;
402 char **argv;
403{
Jack Jansen696c9581995-08-14 12:33:20 +0000404 int sts;
405 char *command = NULL;
406 char *filename = NULL;
407 FILE *fp = stdin;
Jack Jansen696c9581995-08-14 12:33:20 +0000408
Jack Jansen696c9581995-08-14 12:33:20 +0000409 filename = argv[1];
410
411 if (Py_VerboseFlag ||
412 command == NULL && filename == NULL && isatty((int)fileno(fp)))
413 fprintf(stderr, "Python %s\n%s\n",
Jack Jansena547dca1996-07-10 15:48:25 +0000414 Py_GetVersion(), Py_GetCopyright());
Jack Jansen696c9581995-08-14 12:33:20 +0000415
416 if (filename != NULL) {
417 if ((fp = fopen(filename, "r")) == NULL) {
418 fprintf(stderr, "%s: can't open file '%s'\n",
419 argv[0], filename);
Jack Jansen0168f271995-10-27 13:32:30 +0000420 PyMac_Exit(2);
Jack Jansen696c9581995-08-14 12:33:20 +0000421 }
422 }
423
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000424 /* We initialize the menubar here, hoping SIOUX is initialized by now */
Jack Jansen3469e991996-09-06 00:30:45 +0000425 PyMac_InitMenuBar();
426
Jack Jansen696c9581995-08-14 12:33:20 +0000427 Py_Initialize();
428
429 PySys_SetArgv(argc-1, argv+1);
430
431 if (filename == NULL && isatty((int)fileno(fp))) {
432 FILE *fp = fopen(STARTUP, "r");
433 if (fp != NULL) {
434 (void) PyRun_SimpleFile(fp, STARTUP);
435 PyErr_Clear();
436 fclose(fp);
437 }
438 }
439 sts = PyRun_AnyFile(
440 fp, filename == NULL ? "<stdin>" : filename) != 0;
441 if (filename != NULL)
442 fclose(fp);
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000443
444 if ( filename != NULL || command != NULL )
445 sts = (run_inspect() || sts);
Jack Jansen696c9581995-08-14 12:33:20 +0000446
447 Py_Exit(sts);
448 /*NOTREACHED*/
449}
450
Jack Jansen0168f271995-10-27 13:32:30 +0000451/*
452** Terminate application
453*/
Jack Jansen76ceece1996-08-19 11:18:24 +0000454void
Jack Jansen0168f271995-10-27 13:32:30 +0000455PyMac_Exit(status)
456 int status;
457{
458 int keep;
Jack Jansen8c693211997-01-07 16:19:42 +0000459
460#if __profile__ == 1
461 ProfilerDump("\pPython Profiler Results");
462 ProfilerTerm();
463#endif
Jack Jansen0168f271995-10-27 13:32:30 +0000464 if ( status )
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000465 keep = options.keep_error;
Jack Jansen0168f271995-10-27 13:32:30 +0000466 else
Jack Jansen7d5f9e81996-09-07 17:09:31 +0000467 keep = options.keep_normal;
Jack Jansen0168f271995-10-27 13:32:30 +0000468
Jack Jansen1e8557a1995-11-10 14:51:26 +0000469#ifdef USE_SIOUX
470 if (keep) {
471 SIOUXSettings.standalone = 1;
472 SIOUXSettings.autocloseonquit = 0;
Jack Jansen415571c1996-03-25 15:46:03 +0000473 SIOUXSetTitle("\p\307terminated\310");
Jack Jansencaa7c461997-06-12 10:49:13 +0000474 PyMac_RestoreMenuBar();
Jack Jansene44545f1997-05-07 15:48:54 +0000475#ifdef USE_MSL
476 /*
477 ** Temporary workaround: autocloseonquit clearing does not
478 ** currently work for the MSL/GUSI combo.
479 */
480 while(getchar() > 0);
481#endif
Jack Jansen1e8557a1995-11-10 14:51:26 +0000482 }
Jack Jansen0168f271995-10-27 13:32:30 +0000483 else
484 SIOUXSettings.autocloseonquit = 1;
Jack Jansenf6865f71996-09-04 15:24:59 +0000485#endif /* USE_SIOUX */
Jack Jansen0168f271995-10-27 13:32:30 +0000486#ifdef THINK_C
487 console_options.pause_atexit = keep;
488#endif
489
490 exit(status);
491}
Jack Jansen696c9581995-08-14 12:33:20 +0000492
493/* Return the program name -- some code out there needs this. */
Jack Jansena39f1b01997-05-23 15:35:14 +0000494char *
495Py_GetProgramFullPath()
496{
Jack Jansen7330b391997-08-08 14:56:41 +0000497 return orig_argv[0];
Jack Jansena39f1b01997-05-23 15:35:14 +0000498}
499
Jack Jansen696c9581995-08-14 12:33:20 +0000500
501/* Make the *original* argc/argv available to other modules.
502 This is rare, but it is needed by the secureware extension. */
503
504void
Jack Jansen1d2f8631996-08-02 15:16:16 +0000505Py_GetArgcArgv(argc,argv)
Jack Jansen696c9581995-08-14 12:33:20 +0000506 int *argc;
507 char ***argv;
508{
509 *argc = orig_argc;
510 *argv = orig_argv;
Guido van Rossumb0f3c821994-08-23 13:34:25 +0000511}
Jack Jansen1d2f8631996-08-02 15:16:16 +0000512
513/* More cruft that shouldn't really be here, used in sysmodule.c */
514
515char *
516Py_GetPrefix()
517{
Jack Jansenac625691997-09-08 13:22:22 +0000518 return PyMac_GetPythonDir();
Jack Jansen1d2f8631996-08-02 15:16:16 +0000519}
520
521char *
522Py_GetExecPrefix()
523{
Jack Jansenac625691997-09-08 13:22:22 +0000524 return PyMac_GetPythonDir();
Jack Jansen1d2f8631996-08-02 15:16:16 +0000525}