diff --git a/src/conio/ansi_cio.c b/src/conio/ansi_cio.c
index 5f87ec5b9ba419daa587ec94a7c7f646f6680dc0..7d12107ce3b8aecfd3c0e2b97f972e026876738f 100644
--- a/src/conio/ansi_cio.c
+++ b/src/conio/ansi_cio.c
@@ -44,6 +44,16 @@
 	struct termios tio_default;				/* Initial term settings */
 #endif
 
+#ifdef _WIN32
+	#ifndef ENABLE_VIRTUAL_TERMINAL_INPUT
+	#define ENABLE_VIRTUAL_TERMINAL_INPUT 0x0200
+	#endif
+	#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
+	#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
+	#endif
+#endif
+
+
 #include "ciolib.h"
 #include "ansi_cio.h"
 
@@ -931,10 +941,12 @@ int ansi_initio_cb(void)
 {
 #ifdef _WIN32
 	if(isatty(fileno(stdin))) {
-		if(!SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), 0))
+		if(!SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), ENABLE_VIRTUAL_TERMINAL_INPUT))
 			return(0);
 
-		if(!SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), 0))
+		DWORD conmode = 0;
+		GetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), &conmode);
+		if(!SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), conmode | ENABLE_VIRTUAL_TERMINAL_PROCESSING))
 			return(0);
 	}
 	setmode(fileno(stdout),_O_BINARY);