diff options
author | Guido van Rossum <guido@python.org> | 1999-01-08 15:56:28 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1999-01-08 15:56:28 (GMT) |
commit | 2c1f6be38eee454038837769ef7d9b72011430ef (patch) | |
tree | ae05f50f00309518100692c1471adcb3dc58dfbf | |
parent | b6584cac1ecbf6d93bb112cc6dcc30b82aa9735d (diff) | |
download | cpython-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...
-rw-r--r-- | Python/pythonrun.c | 47 |
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 |