diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 3df0885..097c4da 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -71,13 +71,6 @@
 #include <time.h>
 #endif /* !unix */
 
-/* XXX This is bogus -- times() is defined in posixmodule.c */
-#ifdef DO_TIMES
-#include <sys/times.h>
-#include <sys/param.h>
-#include <errno.h>
-#endif
-
 #ifdef SYSV
 /* Access timezone stuff */
 #ifdef OLDTZ				/* ANSI prepends underscore to these */
@@ -227,32 +220,6 @@
 
 #endif /* DO_MILLI */
 
-#ifdef DO_TIMES
-
-static object *
-time_times(self, args)
-	object *self;
-	object *args;
-{
-	struct tms t;
-	clock_t c;
-	if (!getnoarg(args))
-		return NULL;
-	errno = 0;
-	c = times(&t);
-	if (c == (clock_t) -1) {
-		err_errno(IOError);
-		return NULL;
-	}
-	return mkvalue("(dddd)",
-		       (double)t.tms_utime / HZ,
-		       (double)t.tms_stime / HZ,
-		       (double)t.tms_cutime / HZ,
-		       (double)t.tms_cstime / HZ);
-}
-
-#endif
-
 
 static object *
 time_convert(when, function)
@@ -268,7 +235,7 @@
 		       p->tm_min,
 		       p->tm_sec,
 		       (p->tm_wday + 6) % 7, /* Want Monday == 0 */
-		       p->tm_yday,
+		       p->tm_yday + 1, /* Want January, 1 == 1 */
 		       p->tm_isdst);
 }
 
@@ -294,6 +261,62 @@
 	return time_convert((time_t)when, localtime);
 }
 
+static int
+gettmarg(args, p)
+	object *args;
+	struct tm *p;
+{
+	if (!getargs(args, "(iiiiiiiii)",
+		     &p->tm_year,
+		     &p->tm_mon,
+		     &p->tm_mday,
+		     &p->tm_hour,
+		     &p->tm_min,
+		     &p->tm_sec,
+		     &p->tm_wday,
+		     &p->tm_yday,
+		     &p->tm_isdst))
+		return 0;
+	if (p->tm_year >= 1900)
+		p->tm_year -= 1900;
+	p->tm_mon--;
+	p->tm_wday = (p->tm_wday + 1) % 7;
+	p->tm_yday--;
+	return 1;
+}
+
+static object *
+time_asctime(self, args)
+	object *self;
+	object *args;
+{
+	struct tm buf;
+	char *p;
+	if (!gettmarg(args, &buf))
+		return NULL;
+	p = asctime(&buf);
+	if (p[24] == '\n')
+		p[24] = '\0';
+	return newstringobject(p);
+}
+
+static object *
+time_ctime(self, args)
+	object *self;
+	object *args;
+{
+	double dt;
+	time_t tt;
+	char *p;
+	if (!getargs(args, "d", &dt))
+		return NULL;
+	tt = dt;
+	p = ctime(&tt);
+	if (p[24] == '\n')
+		p[24] = '\0';
+	return newstringobject(p);
+}
+
 /* Some very old systems may not have mktime().  Comment it out then! */
 
 static object *
@@ -302,20 +325,8 @@
 	object *args;
 {
 	struct tm buf;
-	if (!getargs(args, "(iiiiiiiii)",
-		     &buf.tm_year,
-		     &buf.tm_mon,
-		     &buf.tm_mday,
-		     &buf.tm_hour,
-		     &buf.tm_min,
-		     &buf.tm_sec,
-		     &buf.tm_wday,
-		     &buf.tm_yday,
-		     &buf.tm_isdst))
+	if (!gettmarg(args, &buf))
 		return NULL;
-	if (buf.tm_year >= 1900)
-		buf.tm_year -= 1900;
-	buf.tm_mon--;
 	return newintobject((long)mktime(&buf));
 }
 
@@ -324,13 +335,12 @@
 	{"millisleep",	time_millisleep},
 	{"millitimer",	time_millitimer},
 #endif /* DO_MILLI */
-#ifdef DO_TIMES
-	{"times",	time_times},
-#endif
 	{"sleep",	time_sleep},
 	{"time",	time_time},
 	{"gmtime",	time_gmtime},
 	{"localtime",	time_localtime},
+	{"asctime",	time_asctime},
+	{"ctime",	time_ctime},
 	{"mktime",	time_mktime},
 	{NULL,		NULL}		/* sentinel */
 };
diff --git a/Parser/listnode.c b/Parser/listnode.c
index 07c66ac..a914bab 100644
--- a/Parser/listnode.c
+++ b/Parser/listnode.c
@@ -40,7 +40,7 @@
 
 static int level, atbol;
 
-void
+static void
 listnode(fp, n)
 	FILE *fp;
 	node *n;
diff --git a/Python/ceval.c b/Python/ceval.c
index 1c12d9c..8ed4663 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -49,6 +49,9 @@
 #define CHECKEXC 1	/* Double-check exception checking */
 #endif
 
+/* Global option, may be set by main() */
+int killprint;
+
 
 /* Forward declarations */
 
@@ -639,6 +642,11 @@
 				softspace(x, 1);
 				err = writeobject(v, x, 0);
 				flushline();
+				if (killprint) {
+					err_setstr(RuntimeError,
+					      "printing expression statement");
+					x = 0;
+				}
 			}
 			DECREF(v);
 			break;
diff --git a/Python/frozenmain.c b/Python/frozenmain.c
index 90d1623..8bc136a 100644
--- a/Python/frozenmain.c
+++ b/Python/frozenmain.c
@@ -30,28 +30,43 @@
 
 extern int debugging;
 extern int verbose;
+extern int killprint;
 
 main(argc, argv)
 	int argc;
 	char **argv;
 {
 	char *p;
+	int n, inspect, sts;
 	int n;
+
 	if ((p = getenv("PYTHONDEBUG")) && *p != '\0')
 		debugging = 1;
 	if ((p = getenv("PYTHONVERBOSE")) && *p != '\0')
 		verbose = 1;
-	initargs(&argc, &argv); /* Defined in config*.c */
+	if ((p = getenv("PYTHONINSPECT")) && *p != '\0')
+		inspect = 1;
+	if ((p = getenv("PYTHONKILLPRINT")) && *p != '\0')
+		killprint = 1;
+
+	initargs(&argc, &argv);
 	initall();
 	setpythonargv(argc, argv);
+
 	n = init_frozen("__main__");
 	if (n == 0)
 		fatal("__main__ not frozen");
 	if (n < 0) {
 		print_error();
-		goaway(1);
+		sts = 1;
 	}
 	else
-		goaway(0);
+		sts = 0;
+
+	if (inspect && isatty((int)fileno(stdin)) &&
+	    (filename != NULL || command != NULL))
+		sts = run(stdin, "<stdin>") != 0;
+
+	goaway(sts);
 	/*NOTREACHED*/
 }
diff --git a/Python/pythonmain.c b/Python/pythonmain.c
index 760e5da..ac1d86a 100644
--- a/Python/pythonmain.c
+++ b/Python/pythonmain.c
@@ -26,8 +26,9 @@
 
 #include "allobjects.h"
 
-extern int debugging; /* Needed by parser.c */
-extern int verbose; /* Needed by import.c */
+extern int debugging; /* Defined in parser.c */
+extern int verbose; /* Defined in import.c */
+extern int killprint; /* Defined in ceval.c */
 
 /* Interface to getopt(): */
 extern int optind;
@@ -52,10 +53,14 @@
 		debugging = 1;
 	if ((p = getenv("PYTHONVERBOSE")) && *p != '\0')
 		verbose = 1;
+	if ((p = getenv("PYTHONINSPECT")) && *p != '\0')
+		inspect = 1;
+	if ((p = getenv("PYTHONKILLPRINT")) && *p != '\0')
+		killprint = 1;
 	
-	initargs(&argc, &argv); /* Defined in config*.c */
+	initargs(&argc, &argv);
 
-	while ((c = getopt(argc, argv, "c:div")) != EOF) {
+	while ((c = getopt(argc, argv, "c:dikv")) != EOF) {
 		if (c == 'c') {
 			/* -c is the last option; following arguments
 			   that look like options are left for the
@@ -77,6 +82,10 @@
 			inspect++;
 			break;
 
+		case 'k':
+			killprint++;
+			break;
+
 		case 'v':
 			verbose++;
 			break;
@@ -85,8 +94,25 @@
 
 		default:
 			fprintf(stderr,
-				"usage: %s [-c cmd | file | -] [arg] ...\n",
+"usage: %s [-d] [-i] [-k] [-v] [-c cmd | file | -] [arg] ...\n",
 				argv[0]);
+			fprintf(stderr, "\
+\n\
+Options and arguments (and corresponding environment variables):\n\
+-d     : debug output from parser (also PYTHONDEBUG=x)\n\
+-i     : inspect interactively after running script (also PYTHONINSPECT=x)\n\
+-k     : kill printing expression statement (also PYTHONKILLPRINT=x)\n\
+-v     : verbose (trace import statements) (also PYTHONVERBOSE=x)\n\
+-c cmd : program passed in as string (terminates option list)\n\
+file   : program read from script file\n\
+-      : program read from stdin (default; interactive mode if a tty)\n\
+arg ...: arguments passed to program in sys.argv[1:]\n\
+\n\
+Other environment variables:\n\
+PYTHONSTARTUP: file executed on interactive startup (no default)\n\
+PYTHONPATH   : colon-separated list of directories prefixed to the\n\
+               default module search path.  The result is sys.path.\n\
+");
 			exit(2);
 			/*NOTREACHED*/
 
