| 
									
										
										
										
											1991-02-19 12:39:46 +00:00
										 |  |  | /***********************************************************
 | 
					
						
							| 
									
										
										
										
											1995-01-04 19:12:13 +00:00
										 |  |  | Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, | 
					
						
							|  |  |  | The Netherlands. | 
					
						
							| 
									
										
										
										
											1991-02-19 12:39:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |                         All Rights Reserved | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Permission to use, copy, modify, and distribute this software and its  | 
					
						
							|  |  |  | documentation for any purpose and without fee is hereby granted,  | 
					
						
							|  |  |  | provided that the above copyright notice appear in all copies and that | 
					
						
							|  |  |  | both that copyright notice and this permission notice appear in  | 
					
						
							|  |  |  | supporting documentation, and that the names of Stichting Mathematisch | 
					
						
							|  |  |  | Centrum or CWI not be used in advertising or publicity pertaining to | 
					
						
							|  |  |  | distribution of the software without specific, written prior permission. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO | 
					
						
							|  |  |  | THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND | 
					
						
							|  |  |  | FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE | 
					
						
							|  |  |  | FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | 
					
						
							|  |  |  | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | 
					
						
							|  |  |  | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT | 
					
						
							|  |  |  | OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ******************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | /* System module */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  | Various bits of information used by the interpreter are collected in | 
					
						
							|  |  |  | module 'sys'. | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | Function member: | 
					
						
							|  |  |  | - exit(sts): call (C, POSIX) exit(sts) | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | Data members: | 
					
						
							|  |  |  | - stdin, stdout, stderr: standard file objects | 
					
						
							|  |  |  | - modules: the table of modules (dictionary) | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | - path: module search path (list of strings) | 
					
						
							|  |  |  | - argv: script arguments (list of strings) | 
					
						
							|  |  |  | - ps1, ps2: optional primary and secondary prompts (strings) | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | #include "allobjects.h"
 | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include "sysmodule.h"
 | 
					
						
							|  |  |  | #include "import.h"
 | 
					
						
							|  |  |  | #include "modsupport.h"
 | 
					
						
							| 
									
										
										
										
											1992-03-23 18:20:18 +00:00
										 |  |  | #include "osdefs.h"
 | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1992-03-23 18:20:18 +00:00
										 |  |  | object *sys_trace, *sys_profile; | 
					
						
							| 
									
										
										
										
											1995-01-09 17:46:13 +00:00
										 |  |  | int sys_checkinterval; | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | static object *sysdict; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | object * | 
					
						
							|  |  |  | sysget(name) | 
					
						
							|  |  |  | 	char *name; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return dictlookup(sysdict, name); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | FILE * | 
					
						
							|  |  |  | sysgetfile(name, def) | 
					
						
							|  |  |  | 	char *name; | 
					
						
							|  |  |  | 	FILE *def; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	FILE *fp = NULL; | 
					
						
							|  |  |  | 	object *v = sysget(name); | 
					
						
							| 
									
										
										
										
											1992-09-25 21:59:05 +00:00
										 |  |  | 	if (v != NULL && is_fileobject(v)) | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 		fp = getfilefile(v); | 
					
						
							|  |  |  | 	if (fp == NULL) | 
					
						
							|  |  |  | 		fp = def; | 
					
						
							|  |  |  | 	return fp; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int | 
					
						
							|  |  |  | sysset(name, v) | 
					
						
							|  |  |  | 	char *name; | 
					
						
							|  |  |  | 	object *v; | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1992-01-26 18:15:48 +00:00
										 |  |  | 	if (v == NULL) { | 
					
						
							|  |  |  | 		if (dictlookup(sysdict, name) == NULL) | 
					
						
							|  |  |  | 			return 0; | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			return dictremove(sysdict, name); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 	else | 
					
						
							|  |  |  | 		return dictinsert(sysdict, name, v); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static object * | 
					
						
							|  |  |  | sys_exit(self, args) | 
					
						
							|  |  |  | 	object *self; | 
					
						
							|  |  |  | 	object *args; | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1991-12-31 13:15:35 +00:00
										 |  |  | 	/* Raise SystemExit so callers may catch it or clean up. */ | 
					
						
							|  |  |  | 	err_setval(SystemExit, args); | 
					
						
							|  |  |  | 	return NULL; | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1992-03-23 18:20:18 +00:00
										 |  |  | static object * | 
					
						
							|  |  |  | sys_settrace(self, args) | 
					
						
							|  |  |  | 	object *self; | 
					
						
							|  |  |  | 	object *args; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (args == None) | 
					
						
							|  |  |  | 		args = NULL; | 
					
						
							| 
									
										
										
										
											1992-04-05 14:17:55 +00:00
										 |  |  | 	else | 
					
						
							| 
									
										
										
										
											1992-06-19 13:57:27 +00:00
										 |  |  | 		XINCREF(args); | 
					
						
							| 
									
										
										
										
											1992-04-05 14:17:55 +00:00
										 |  |  | 	XDECREF(sys_trace); | 
					
						
							| 
									
										
										
										
											1992-03-23 18:20:18 +00:00
										 |  |  | 	sys_trace = args; | 
					
						
							|  |  |  | 	INCREF(None); | 
					
						
							|  |  |  | 	return None; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static object * | 
					
						
							|  |  |  | sys_setprofile(self, args) | 
					
						
							|  |  |  | 	object *self; | 
					
						
							|  |  |  | 	object *args; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (args == None) | 
					
						
							|  |  |  | 		args = NULL; | 
					
						
							| 
									
										
										
										
											1992-04-05 14:17:55 +00:00
										 |  |  | 	else | 
					
						
							| 
									
										
										
										
											1992-06-19 13:57:27 +00:00
										 |  |  | 		XINCREF(args); | 
					
						
							| 
									
										
										
										
											1992-04-05 14:17:55 +00:00
										 |  |  | 	XDECREF(sys_profile); | 
					
						
							| 
									
										
										
										
											1992-03-23 18:20:18 +00:00
										 |  |  | 	sys_profile = args; | 
					
						
							|  |  |  | 	INCREF(None); | 
					
						
							|  |  |  | 	return None; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-01-09 17:46:13 +00:00
										 |  |  | static object * | 
					
						
							|  |  |  | sys_setcheckinterval(self, args) | 
					
						
							|  |  |  | 	object *self; | 
					
						
							|  |  |  | 	object *args; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (!newgetargs(args, "i", &sys_checkinterval)) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	INCREF(None); | 
					
						
							|  |  |  | 	return None; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1992-09-03 20:25:30 +00:00
										 |  |  | #ifdef USE_MALLOPT
 | 
					
						
							|  |  |  | /* Link with -lmalloc (or -lmpc) on an SGI */ | 
					
						
							|  |  |  | #include <malloc.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static object * | 
					
						
							|  |  |  | sys_mdebug(self, args) | 
					
						
							|  |  |  | 	object *self; | 
					
						
							|  |  |  | 	object *args; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	int flag; | 
					
						
							|  |  |  | 	if (!getargs(args, "i", &flag)) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	mallopt(M_DEBUG, flag); | 
					
						
							|  |  |  | 	INCREF(None); | 
					
						
							|  |  |  | 	return None; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif /* USE_MALLOPT */
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | static struct methodlist sys_methods[] = { | 
					
						
							|  |  |  | 	{"exit",	sys_exit}, | 
					
						
							| 
									
										
										
										
											1992-09-03 20:25:30 +00:00
										 |  |  | #ifdef USE_MALLOPT
 | 
					
						
							|  |  |  | 	{"mdebug",	sys_mdebug}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1992-03-23 18:20:18 +00:00
										 |  |  | 	{"setprofile",	sys_setprofile}, | 
					
						
							|  |  |  | 	{"settrace",	sys_settrace}, | 
					
						
							| 
									
										
										
										
											1995-01-09 17:46:13 +00:00
										 |  |  | 	{"setcheckinterval",	sys_setcheckinterval}, | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | 	{NULL,		NULL}		/* sentinel */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | static object *sysin, *sysout, *syserr; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1993-01-26 13:33:44 +00:00
										 |  |  | static object * | 
					
						
							|  |  |  | list_builtin_module_names() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	object *list = newlistobject(0); | 
					
						
							|  |  |  | 	int i; | 
					
						
							|  |  |  | 	if (list == NULL) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	for (i = 0; inittab[i].name != NULL; i++) { | 
					
						
							|  |  |  | 		object *name = newstringobject(inittab[i].name); | 
					
						
							|  |  |  | 		if (name == NULL) | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 		addlistitem(list, name); | 
					
						
							|  |  |  | 		DECREF(name); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1994-08-30 08:27:36 +00:00
										 |  |  | 	if (sortlist(list) != 0) { | 
					
						
							|  |  |  | 		DECREF(list); | 
					
						
							|  |  |  | 		list = NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1993-01-26 13:33:44 +00:00
										 |  |  | 	return list; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | void | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | initsys() | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1994-08-30 08:27:36 +00:00
										 |  |  | 	extern long getmaxint PROTO((void)); | 
					
						
							|  |  |  | 	extern char *getversion PROTO((void)); | 
					
						
							|  |  |  | 	extern char *getcopyright PROTO((void)); | 
					
						
							| 
									
										
										
										
											1991-06-04 19:40:59 +00:00
										 |  |  | 	extern int fclose PROTO((FILE *)); | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | 	object *m = initmodule("sys", sys_methods); | 
					
						
							| 
									
										
										
										
											1994-08-30 08:27:36 +00:00
										 |  |  | 	object *v; | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | 	sysdict = getmoduledict(m); | 
					
						
							|  |  |  | 	INCREF(sysdict); | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 	/* NB keep an extra ref to the std files to avoid closing them
 | 
					
						
							|  |  |  | 	   when the user deletes them */ | 
					
						
							| 
									
										
										
										
											1991-06-04 19:40:59 +00:00
										 |  |  | 	sysin = newopenfileobject(stdin, "<stdin>", "r", fclose); | 
					
						
							|  |  |  | 	sysout = newopenfileobject(stdout, "<stdout>", "w", fclose); | 
					
						
							|  |  |  | 	syserr = newopenfileobject(stderr, "<stderr>", "w", fclose); | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 	if (err_occurred()) | 
					
						
							| 
									
										
										
										
											1994-08-30 08:27:36 +00:00
										 |  |  | 		fatal("can't initialize sys.std{in,out,err}"); | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 	dictinsert(sysdict, "stdin", sysin); | 
					
						
							|  |  |  | 	dictinsert(sysdict, "stdout", sysout); | 
					
						
							|  |  |  | 	dictinsert(sysdict, "stderr", syserr); | 
					
						
							| 
									
										
										
										
											1994-08-30 08:27:36 +00:00
										 |  |  | 	dictinsert(sysdict, "version", v = newstringobject(getversion())); | 
					
						
							|  |  |  | 	XDECREF(v); | 
					
						
							|  |  |  | 	dictinsert(sysdict, "copyright", v = newstringobject(getcopyright())); | 
					
						
							|  |  |  | 	XDECREF(v); | 
					
						
							|  |  |  | 	dictinsert(sysdict, "maxint", v = newintobject(getmaxint())); | 
					
						
							|  |  |  | 	XDECREF(v); | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | 	dictinsert(sysdict, "modules", get_modules()); | 
					
						
							| 
									
										
										
										
											1993-01-26 13:33:44 +00:00
										 |  |  | 	dictinsert(sysdict, "builtin_module_names", | 
					
						
							| 
									
										
										
										
											1995-01-02 19:04:15 +00:00
										 |  |  | 		   v = list_builtin_module_names()); | 
					
						
							|  |  |  | 	XDECREF(v); | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 	if (err_occurred()) | 
					
						
							|  |  |  | 		fatal("can't insert sys.* objects in sys dict"); | 
					
						
							| 
									
										
										
										
											1990-11-18 17:41:40 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | static object * | 
					
						
							|  |  |  | makepathobject(path, delim) | 
					
						
							|  |  |  | 	char *path; | 
					
						
							|  |  |  | 	int delim; | 
					
						
							| 
									
										
										
										
											1990-11-18 17:41:40 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | 	int i, n; | 
					
						
							|  |  |  | 	char *p; | 
					
						
							|  |  |  | 	object *v, *w; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	n = 1; | 
					
						
							|  |  |  | 	p = path; | 
					
						
							|  |  |  | 	while ((p = strchr(p, delim)) != NULL) { | 
					
						
							|  |  |  | 		n++; | 
					
						
							|  |  |  | 		p++; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	v = newlistobject(n); | 
					
						
							|  |  |  | 	if (v == NULL) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	for (i = 0; ; i++) { | 
					
						
							|  |  |  | 		p = strchr(path, delim); | 
					
						
							|  |  |  | 		if (p == NULL) | 
					
						
							|  |  |  | 			p = strchr(path, '\0'); /* End of string */ | 
					
						
							|  |  |  | 		w = newsizedstringobject(path, (int) (p - path)); | 
					
						
							|  |  |  | 		if (w == NULL) { | 
					
						
							|  |  |  | 			DECREF(v); | 
					
						
							|  |  |  | 			return NULL; | 
					
						
							| 
									
										
										
										
											1990-11-18 17:41:40 +00:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | 		setlistitem(v, i, w); | 
					
						
							|  |  |  | 		if (*p == '\0') | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 		path = p+1; | 
					
						
							| 
									
										
										
										
											1990-11-18 17:41:40 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | 	return v; | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | setpythonpath(path) | 
					
						
							|  |  |  | 	char *path; | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | 	object *v; | 
					
						
							|  |  |  | 	if ((v = makepathobject(path, DELIM)) == NULL) | 
					
						
							|  |  |  | 		fatal("can't create sys.path"); | 
					
						
							|  |  |  | 	if (sysset("path", v) != 0) | 
					
						
							|  |  |  | 		fatal("can't assign sys.path"); | 
					
						
							|  |  |  | 	DECREF(v); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static object * | 
					
						
							|  |  |  | makeargvobject(argc, argv) | 
					
						
							|  |  |  | 	int argc; | 
					
						
							|  |  |  | 	char **argv; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	object *av; | 
					
						
							| 
									
										
										
										
											1992-01-14 18:42:53 +00:00
										 |  |  | 	if (argc <= 0 || argv == NULL) { | 
					
						
							|  |  |  | 		/* Ensure at least one (empty) argument is seen */ | 
					
						
							|  |  |  | 		static char *empty_argv[1] = {""}; | 
					
						
							|  |  |  | 		argv = empty_argv; | 
					
						
							|  |  |  | 		argc = 1; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | 	av = newlistobject(argc); | 
					
						
							|  |  |  | 	if (av != NULL) { | 
					
						
							| 
									
										
										
										
											1990-11-18 17:41:40 +00:00
										 |  |  | 		int i; | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | 		for (i = 0; i < argc; i++) { | 
					
						
							|  |  |  | 			object *v = newstringobject(argv[i]); | 
					
						
							|  |  |  | 			if (v == NULL) { | 
					
						
							|  |  |  | 				DECREF(av); | 
					
						
							|  |  |  | 				av = NULL; | 
					
						
							|  |  |  | 				break; | 
					
						
							| 
									
										
										
										
											1990-11-18 17:41:40 +00:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | 			setlistitem(av, i, v); | 
					
						
							| 
									
										
										
										
											1990-11-18 17:41:40 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | 	return av; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void | 
					
						
							|  |  |  | setpythonargv(argc, argv) | 
					
						
							|  |  |  | 	int argc; | 
					
						
							|  |  |  | 	char **argv; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	object *av = makeargvobject(argc, argv); | 
					
						
							|  |  |  | 	if (av == NULL) | 
					
						
							|  |  |  | 		fatal("no mem for sys.argv"); | 
					
						
							|  |  |  | 	if (sysset("argv", av) != 0) | 
					
						
							|  |  |  | 		fatal("can't assign sys.argv"); | 
					
						
							|  |  |  | 	DECREF(av); | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | } |