add ga_inl, ga_inr
[ghc-base.git] / cbits / consUtils.c
index 7c50c7b..b20eb7a 100644 (file)
 #define _get_osfhandle get_osfhandle
 #endif
 
+int is_console__(int fd) {
+    DWORD st;
+    HANDLE h;
+    if (!_isatty(fd)) {
+        /* TTY must be a character device */
+        return 0;
+    }
+    h = (HANDLE)_get_osfhandle(fd);
+    if (h == INVALID_HANDLE_VALUE) {
+        /* Broken handle can't be terminal */
+        return 0;
+    }
+    if (!GetConsoleMode(h, &st)) {
+        /* GetConsoleMode appears to fail when it's not a TTY.  In
+           particular, it's what most of our terminal functions
+           assume works, so if it doesn't work for all intents
+           and purposes we're not dealing with a terminal. */
+        return 0;
+    }
+    return 1;
+}
+
+
 int
 set_console_buffering__(int fd, int cooked)
 {