Support for frozen scripts; added -i option.
diff --git a/Include/marshal.h b/Include/marshal.h
index 9b16227..1adc2ad 100644
--- a/Include/marshal.h
+++ b/Include/marshal.h
@@ -31,3 +31,4 @@
 long rd_long PROTO((FILE *));
 int rd_short PROTO((FILE *));
 object *rd_object PROTO((FILE *));
+object *rds_object PROTO((char *, int));
diff --git a/Modules/config.c.in b/Modules/config.c.in
index 7dba37c..fe48023 100644
--- a/Modules/config.c.in
+++ b/Modules/config.c.in
@@ -82,6 +82,8 @@
 
 char *argv0; /* For dynamic loading in import.c */
 
+extern char verbose;
+
 /*ARGSUSED*/
 void
 initargs(p_argc, p_argv)
@@ -98,7 +100,11 @@
 #endif
 	wargs(p_argc, p_argv);
 #endif /* USE_STDWIN */
-	if (*p_argc < 2 && isatty(0) && isatty(1))
+#ifdef USE_FROZEN
+	if (verbose)
+#else
+	if (verbose || *p_argc < 2 && isatty(0) && isatty(1))
+#endif
 	{
 		printf("Python %s.\n", version);
 		printf(
@@ -448,3 +454,15 @@
 
 	{0,		0}		/* Sentinel */
 };
+
+#ifdef USE_FROZEN
+#include "frozen.c"
+#else
+struct frozen {
+	char *name;
+	char *code;
+	int size;
+} frozen_modules[] = {
+	{0, 0, 0}
+};
+#endif
diff --git a/Python/frozenmain.c b/Python/frozenmain.c
new file mode 100644
index 0000000..90d1623
--- /dev/null
+++ b/Python/frozenmain.c
@@ -0,0 +1,57 @@
+/***********************************************************
+Copyright 1991, 1992, 1993 by Stichting Mathematisch Centrum,
+Amsterdam, The Netherlands.
+
+                        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.
+
+******************************************************************/
+
+/* Python interpreter main program for frozen scripts */
+
+#include "allobjects.h"
+
+extern char *getenv();
+
+extern int debugging;
+extern int verbose;
+
+main(argc, argv)
+	int argc;
+	char **argv;
+{
+	char *p;
+	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 */
+	initall();
+	setpythonargv(argc, argv);
+	n = init_frozen("__main__");
+	if (n == 0)
+		fatal("__main__ not frozen");
+	if (n < 0) {
+		print_error();
+		goaway(1);
+	}
+	else
+		goaway(0);
+	/*NOTREACHED*/
+}
diff --git a/Python/import.c b/Python/import.c
index 2171f4b..4310afa 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -52,7 +52,7 @@
 extern char *argv0;
 #endif
 
-/* Magic word to reject pre-0.9.9 .pyc files */
+/* Magic word to reject .pyc files generated by other Python versions */
 
 #define MAGIC 0x99BE3AL
 
@@ -325,8 +325,11 @@
 	char *name;
 {
 	object *m;
+	int n;
 	if ((m = dictlookup(modules, name)) == NULL) {
-		if (init_builtin(name)) {
+		if ((n = init_builtin(name)) || (n = init_frozen(name))) {
+			if (n < 0)
+				return NULL;
 			if ((m = dictlookup(modules, name)) == NULL)
 				err_setstr(SystemError,
 					   "builtin module missing");
@@ -411,3 +414,38 @@
 	}
 	return 0;
 }
+
+extern struct frozen {
+	char *name;
+	char *code;
+	int size;
+} frozen_modules[];
+
+int
+init_frozen(name)
+	char *name;
+{
+	struct frozen *p;
+	codeobject *co;
+	object *m, *d, *v;
+	for (p = frozen_modules; ; p++) {
+		if (p->name == NULL)
+			return 0;
+		if (strcmp(p->name, name) == 0)
+			break;
+	}
+	if (verbose)
+		fprintf(stderr, "import %s # frozen\n", name);
+	co = (codeobject *) rds_object(p->code, p->size);
+	if (co == NULL)
+		return -1;
+	if ((m = add_module(name)) == NULL ||
+	    (d = getmoduledict(m)) == NULL ||
+	    (v = eval_code(co, d, d, (object *)NULL)) == NULL) {
+		DECREF(co);
+		return -1;
+	}
+	DECREF(co);
+	DECREF(v);
+	return 1;
+}
diff --git a/Python/marshal.c b/Python/marshal.c
index 65f7f2d..3853ff9 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -225,7 +225,8 @@
 typedef WFILE RFILE; /* Same struct with different invariants */
 
 #define r_byte(p) ((p)->fp ? getc((p)->fp) \
-			  : ((p)->ptr != (p)->end) ? *(p)->ptr++ : EOF)
+			  : ((p)->ptr != (p)->end) ? \
+		   	    (unsigned char)*(p)->ptr++ : EOF)
 
 static int
 r_string(s, n, p)
@@ -425,6 +426,19 @@
 	return r_object(&rf);
 }
 
+object *
+rds_object(str, len)
+	char *str;
+	int len;
+{
+	RFILE rf;
+	rf.fp = NULL;
+	rf.str = NULL;
+	rf.ptr = str;
+	rf.end = str + len;
+	return r_object(&rf);
+}
+
 /* And an interface for Python programs... */
 
 static object *
diff --git a/Python/pythonmain.c b/Python/pythonmain.c
index 1718611..760e5da 100644
--- a/Python/pythonmain.c
+++ b/Python/pythonmain.c
@@ -34,6 +34,8 @@
 extern char *optarg;
 extern int getopt PROTO((int, char **, char *));
 
+extern char *getenv();
+
 main(argc, argv)
 	int argc;
 	char **argv;
@@ -43,10 +45,17 @@
 	char *command = NULL;
 	char *filename = NULL;
 	FILE *fp = stdin;
+	char *p;
+	int inspect = 0;
+
+	if ((p = getenv("PYTHONDEBUG")) && *p != '\0')
+		debugging = 1;
+	if ((p = getenv("PYTHONVERBOSE")) && *p != '\0')
+		verbose = 1;
 	
 	initargs(&argc, &argv); /* Defined in config*.c */
 
-	while ((c = getopt(argc, argv, "c:dv")) != EOF) {
+	while ((c = getopt(argc, argv, "c:div")) != EOF) {
 		if (c == 'c') {
 			/* -c is the last option; following arguments
 			   that look like options are left for the
@@ -64,6 +73,10 @@
 			debugging++;
 			break;
 
+		case 'i':
+			inspect++;
+			break;
+
 		case 'v':
 			verbose++;
 			break;
@@ -118,6 +131,10 @@
 		sts = run(fp, filename == NULL ? "<stdin>" : filename) != 0;
 	}
 
+	if (inspect && isatty((int)fileno(stdin)) &&
+	    (filename != NULL || command != NULL))
+		sts = run(stdin, "<stdin>") != 0;
+
 	goaway(sts);
 	/*NOTREACHED*/
 }