Hack for Windows so that if (1) the exit status is nonzero and (2) we
think we have our own DOS box (i.e. we're not started from a command
line shell), we print a message and wait for the user to hit a key
before the DOS box is closed.

The hacky heuristic for determining whether we have our *own* DOS box
(due to Mark Hammond) is to test whether we're on line zero...
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index cb6230a..78c5624 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -101,6 +101,7 @@
 
 */
 
+extern void win_pre_init(), win_pre_exit();
 void
 Py_Initialize()
 {
@@ -112,6 +113,9 @@
 	if (initialized)
 		return;
 	initialized = 1;
+#ifdef MS_WINDOWS
+	win_pre_init();
+#endif
 	
 	if ((p = getenv("PYTHONDEBUG")) && *p != '\0')
 		Py_DebugFlag = 1;
@@ -1096,6 +1100,9 @@
 #ifdef macintosh
 	PyMac_Exit(sts);
 #else
+#ifdef MS_WINDOWS
+	win_pre_exit(sts);
+#endif
 	exit(sts);
 #endif
 }
@@ -1160,3 +1167,43 @@
 	       (strcmp(filename, "<stdin>") == 0) ||
 	       (strcmp(filename, "???") == 0);
 }
+
+#ifdef MS_WINDOWS
+
+#include <windows.h>
+#include <conio.h>
+
+static int its_my_console = -1;
+
+static void
+win_pre_init()
+{
+	HANDLE console;
+	CONSOLE_SCREEN_BUFFER_INFO info;
+	if (its_my_console >= 0)
+		return;
+	its_my_console = 0;
+	console = GetStdHandle(STD_OUTPUT_HANDLE);
+	if (console == INVALID_HANDLE_VALUE)
+		return;
+	if (!GetConsoleScreenBufferInfo(console, &info)) {
+		return;
+	}
+	if (info.dwCursorPosition.Y == 0)
+		its_my_console = 1;
+}
+
+static void
+win_pre_exit(sts)
+	int sts;
+{
+	if (sts == 0)
+		return;
+	if (its_my_console <= 0)
+		return;
+	fprintf(stderr, "Hit any key to exit...");
+	fflush(stderr);
+	_getch();
+}
+
+#endif