Added console support.

diff --git a/console/interface.c b/console/interface.c
new file mode 100644
index 0000000..8829e95
--- /dev/null
+++ b/console/interface.c
@@ -0,0 +1,156 @@
+/* interface.c */
+
+/* The primary purpose of this function is to provide CONSOLE_*
+   reotines that immediately call the appropiate driver handler.
+   This cleans up code in the individual modules considerably.
+   This could be done using a macro, but additional functionality
+   may be provided here in the future. */
+
+#include "windows.h"
+#include "console.h"
+#include "config.h"
+
+void CONSOLE_Write(char out, int fg_color, int bg_color, int attribute)
+{
+   if (driver.write)
+   {
+      driver.write(out, fg_color, bg_color, attribute);
+      if (!driver.norefresh)
+         CONSOLE_Refresh();
+   }
+}
+
+void CONSOLE_Init()
+{
+      /* Eventually, this will be a command-line choice */
+#ifndef WINE_NCURSES
+    TTY_Start(); 
+#else
+    NCURSES_Start();
+#endif
+    GENERIC_Start();
+
+   if (driver.init)
+      driver.init();
+}
+
+void CONSOLE_Close()
+{
+   if (driver.close)
+      driver.close();
+}
+
+void CONSOLE_MoveCursor(char row, char col)
+{
+   if (driver.moveCursor)
+   {
+      driver.moveCursor(row, col);
+      if (!driver.norefresh)
+         CONSOLE_Refresh();
+   }
+}
+
+void CONSOLE_ClearWindow(char row1, char col1, char row2, char col2, 
+   int bg_color, int attribute)
+{
+   if (driver.clearWindow)
+   {
+      driver.clearWindow(row1, col1, row2, col2, bg_color, attribute);
+      if (!driver.norefresh)
+         CONSOLE_Refresh();
+   }
+}
+
+void CONSOLE_ScrollUpWindow(char row1, char col1, char row2, char col2, 
+   char lines, int bg_color, int attribute)
+{
+   if (driver.scrollUpWindow)
+   {
+      driver.scrollUpWindow(row1, col1, row2, col2, lines, bg_color, 
+         attribute);
+      if (!driver.norefresh)
+         CONSOLE_Refresh();
+   }
+}
+
+void CONSOLE_ScrollDownWindow(char row1, char col1, char row2, char col2, 
+   char lines, int bg_color, int attribute)
+{
+   if (driver.scrollDownWindow)
+   {
+      driver.scrollDownWindow(row1, col1, row2, col2, lines, bg_color, 
+         attribute);
+      if (!driver.norefresh)
+         CONSOLE_Refresh();
+   }
+}
+
+int CONSOLE_CheckForKeystroke(char *scan, char *ascii)
+/* These functions need to go through a conversion layer. Scancodes
+   should *not* be determined by the driver, rather they should have
+   a conv_* function in int16.c. Yuck. */
+{
+   if (driver.checkForKeystroke)
+      return driver.checkForKeystroke(scan, ascii);
+   else
+      return FALSE;
+}
+
+void CONSOLE_GetKeystroke(char *scan, char *ascii)
+{
+   if (driver.getKeystroke)
+      return driver.getKeystroke(scan, ascii);
+}
+
+void CONSOLE_GetCursorPosition(char *row, char *col)
+{
+   if (driver.getCursorPosition)
+      return driver.getCursorPosition(row, col);
+}
+
+void CONSOLE_GetCharacterAtCursor(char *ch, int *fg, int *bg, int *a)
+{
+   if (driver.getCharacterAtCursor)
+      return driver.getCharacterAtCursor(ch, fg, bg, a);
+}
+
+void CONSOLE_Refresh()
+{
+   if (driver.refresh)
+      return driver.refresh();
+}
+
+/* This function is only at the CONSOLE level. */
+/* Admittably, calling the variable norefresh might be a bit dumb...*/
+void CONSOLE_SetRefresh(int setting)
+{
+   if (setting)
+      driver.norefresh = FALSE;
+   else
+      driver.norefresh = TRUE;
+}
+
+/* This function is only at the CONSOLE level. */
+int CONSOLE_GetRefresh()
+{
+   if (driver.norefresh)
+      return FALSE;
+   else 
+      return TRUE;
+}
+
+void CONSOLE_ClearScreen()
+{
+   if (driver.clearScreen)
+      return driver.clearScreen();
+}
+
+char CONSOLE_GetCharacter()
+{
+   /* I'm not sure if we need this really. This is a function that can be
+      accelerated that returns the next *non extended* keystroke */
+   if (driver.getCharacter)
+      return driver.getCharacter();
+   else
+      return (char) 0; /* Sure, this will probably break programs... */
+}