From 2c1f6be38eee454038837769ef7d9b72011430ef Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Fri, 8 Jan 1999 15:56:28 +0000 Subject: [PATCH] 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... --- Python/pythonrun.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/Python/pythonrun.c b/Python/pythonrun.c index cb6230a94eb..78c56247fac 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, "") == 0) || (strcmp(filename, "???") == 0); } + +#ifdef MS_WINDOWS + +#include +#include + +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