]> granicus.if.org Git - python/commitdiff
Hack for Windows so that if (1) the exit status is nonzero and (2) we
authorGuido van Rossum <guido@python.org>
Fri, 8 Jan 1999 15:56:28 +0000 (15:56 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 8 Jan 1999 15:56:28 +0000 (15:56 +0000)
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

index cb6230a94eb1cab281cd5e6146c9a245da5b5cbc..78c56247fac464610703df613cdd6bbf56919f3d 100644 (file)
@@ -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