summaryrefslogtreecommitdiffstats
path: root/Python/pythonrun.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1999-01-08 15:56:28 (GMT)
committerGuido van Rossum <guido@python.org>1999-01-08 15:56:28 (GMT)
commit2c1f6be38eee454038837769ef7d9b72011430ef (patch)
treeae05f50f00309518100692c1471adcb3dc58dfbf /Python/pythonrun.c
parentb6584cac1ecbf6d93bb112cc6dcc30b82aa9735d (diff)
downloadcpython-2c1f6be38eee454038837769ef7d9b72011430ef.zip
cpython-2c1f6be38eee454038837769ef7d9b72011430ef.tar.gz
cpython-2c1f6be38eee454038837769ef7d9b72011430ef.tar.bz2
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...
Diffstat (limited to 'Python/pythonrun.c')
-rw-r--r--Python/pythonrun.c47
1 files changed, 47 insertions, 0 deletions
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 @@ Py_IsInitialized()
*/
+extern void win_pre_init(), win_pre_exit();
void
Py_Initialize()
{
@@ -112,6 +113,9 @@ Py_Initialize()
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 @@ Py_Exit(sts)
#ifdef macintosh
PyMac_Exit(sts);
#else
+#ifdef MS_WINDOWS
+ win_pre_exit(sts);
+#endif
exit(sts);
#endif
}
@@ -1160,3 +1167,43 @@ Py_FdIsInteractive(fp, filename)
(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