diff --git a/Python/pythonmain.c b/Python/pythonmain.c
index 7504bc8..1ffba19 100644
--- a/Python/pythonmain.c
+++ b/Python/pythonmain.c
@@ -1,25 +1,10 @@
 /* Python interpreter main program */
 
-/* XXX This is still a mess */
-
-#ifdef THINK_C
-#define USE_STDWIN
-#endif
-
 #include <stdio.h>
 #include <ctype.h>
 #include "string.h"
 
-#ifdef USE_STDWIN
-#include "stdwin.h"
-int use_stdwin;
-#endif
-
-#ifdef USE_AUDIO
-#include "asa.h"
-#endif
-
-extern char *getenv();
+extern char *getpythonpath();
 
 #include "PROTO.h"
 #include "grammar.h"
@@ -33,54 +18,17 @@
 
 extern grammar gram; /* From graminit.c */
 
-#ifndef PYTHONPATH
-
-#ifdef THINK_C
-
-#define PYTHONPATH ": :mod"
-
-#else /* !THINK_C */
-
-#ifdef AMOEBA
-#define PYTHONPATH ".:/profile/module/python"
-#else /* !AMOEBA */
-#define PYTHONPATH ".:/usr/local/lib/python"
-#endif /* !AMOEBA */
-
-#endif /* !THINK_C */
-
-#endif /* !PYTHONPATH */
-
 int debugging;
 
 main(argc, argv)
 	int argc;
 	char **argv;
 {
-	char *path;
 	char *filename = NULL;
 	FILE *fp = stdin;
 	int ret;
-	
-#ifdef USE_STDWIN
-#ifdef THINK_C
-	wsetstdio(1);
-#else THINK_C
-	/* Must use "python -s" now to get stdwin support */
-	if (argc > 1 && strcmp(argv[1], "-s") == 0)
-		argv[1] = argv[0],
-		argc--, argv++,
-#endif /* !THINK_C */
-		use_stdwin = 1;
-	if (use_stdwin)
-		winitargs(&argc, &argv);
-#endif /* USE_STDWIN */
-	
-#ifdef THINK_C_not_today
-	printf("argc = %d, argv[0] = '%s'\n", argc, argv[0]);
-	if (argc <= 1)
-		askargs(&argc, &argv);
-#endif
+
+	initargs(&argc, &argv);
 	
 	initintr(); /* For intrcheck() */
 	
@@ -101,43 +49,10 @@
 	inittime();
 	initmath();
 	
-#ifndef THINK_C
-	path = getenv("PYTHONPATH");
-	if (path == NULL)
-#endif
-		path = PYTHONPATH;
-	setpythonpath(path);
+	setpythonpath(getpythonpath());
 	
 	initrun();
-	
-#ifdef USE_POSIX
-	initposix();
-#endif
-
-#ifdef THINK_C
-	initmac();
-#endif
-
-#ifdef USE_AUDIO
-	initaudio();
-#endif
-	
-#ifdef USE_AMOEBA
-	initamoeba();
-#endif
-	
-#ifdef USE_STDWIN
-	if (use_stdwin)
-		initstdwin();
-#endif
-	
-#ifdef USE_GL
-	initgl();
-#endif
-	
-#ifdef USE_PANEL
-	initpanel();
-#endif
+	initcalls();
 	
 	if (!isatty(fileno(fp))) {
 		ret = runfile(fp, file_input, (char *)NULL, (char *)NULL);
@@ -176,21 +91,12 @@
 goaway(sts)
 	int sts;
 {
-	closerun();
-#ifdef USE_STDWIN
-	if (use_stdwin)
-		wdone();
-#endif
-#ifdef USE_AUDIO
-	asa_done();
-#endif
 #ifdef THINK_C
-#ifndef TRACE_REFS
-	/* Avoid 'click mouse to continue' in Lightspeed C */
 	if (sts == 0)
 		Click_On(0);
 #endif
-#endif	
+	closerun();
+	donecalls();
 	exit(sts);
 	/*NOTREACHED*/
 }
@@ -211,8 +117,6 @@
 	return execute(n) == 0 ? E_DONE : E_ERROR;
 }
 
-#ifdef THINK_C
-
 /* Ask a yes/no question */
 
 int
@@ -227,6 +131,8 @@
 	return buf[0] == 'y' || buf[0] == 'Y';
 }
 
+#ifdef THINK_C
+
 /* Check for file descriptor connected to interactive device.
    Pretend that stdin is always interactive, other files never. */
 
@@ -237,57 +143,6 @@
 	return fd == fileno(stdin);
 }
 
-/* Kludge to get arguments on the Mac */
-
-#define MAXARGS 20
-
-static char *
-nextarg(pnext)
-	char **pnext;
-{
-	char *ret;
-	char *p = *pnext;
-	while (isspace(*p))
-		p++;
-	if (*p == '\0')
-		return NULL;
-	ret = p;
-	while (!isspace(*p))
-		p++;
-	if (*p != '\0')
-		*p++ = '\0';
-	*pnext = p;
-	return ret;
-}
-
-static
-askargs(pargc, pargv)
-	int *pargc;
-	char ***pargv; /* sic */
-{
-	static char buf[256];
-	static char *argv[MAXARGS];
-	int argc;
-	char *p, *next;
-	fprintf(stderr, "Args: ");
-	if (fgets(buf, sizeof buf, stdin) == NULL)
-		return;
-	next = buf;
-	if ((p = nextarg(&next)) == NULL)
-		return;
-	if (*pargc > 0)
-		argv[0] = (*pargv)[0];
-	else
-		argv[0] = "PYTHON";
-	argc = 1;
-	argv[argc++] = p;
-	while (argc+1 < MAXARGS && (p = nextarg(&next)) != NULL)
-		argv[argc++] = p;
-	argv[argc] = NULL;
-	*pargc = argc;
-	*pargv = argv;
-}
-
 #endif
 
 /*	WISH LIST
