Implement some video routines for Xen
Modified: branches/xen/reactos/boot/freeldr/freeldr/arch/i386/machxen.c
Modified: branches/xen/reactos/boot/freeldr/freeldr/arch/i386/xenvideo.c

Modified: branches/xen/reactos/boot/freeldr/freeldr/arch/i386/machxen.c
--- branches/xen/reactos/boot/freeldr/freeldr/arch/i386/machxen.c	2005-05-16 17:19:10 UTC (rev 15345)
+++ branches/xen/reactos/boot/freeldr/freeldr/arch/i386/machxen.c	2005-05-16 18:02:10 UTC (rev 15346)
@@ -210,44 +210,12 @@
     return 0;
   }
 
-VIDEODISPLAYMODE
-XenVideoSetDisplayMode(char *DisplayMode, BOOL Init)
-  {
-    XEN_UNIMPLEMENTED("XenVideoSetDisplayMode");
-    return VideoTextMode;
-  }
-
 VOID
-XenVideoGetDisplaySize(PULONG Width, PULONG Height, PULONG Depth)
-  {
-    XEN_UNIMPLEMENTED("XenVideoGetDisplaySize");
-  }
-
-ULONG
-XenVideoGetBufferSize(VOID)
-  {
-    XEN_UNIMPLEMENTED("XenVideoGetBufferSize");
-    return 0;
-  }
-
-VOID
 XenVideoSetTextCursorPosition(ULONG X, ULONG Y)
   {
     XEN_UNIMPLEMENTED("XenVideoSetTextCursorPosition");
   }
 
-VOID
-XenVideoHideShowTextCursor(BOOL Show)
-  {
-    XEN_UNIMPLEMENTED("XenVideoHideShowTextCursor");
-  }
-
-VOID
-XenVideoCopyOffScreenBufferToVRAM(PVOID Buffer)
-  {
-    XEN_UNIMPLEMENTED("XenVideoCopyOffScreenBufferToVRAM");
-  }
-
 BOOL
 XenVideoIsPaletteFixed(VOID)
   {

Modified: branches/xen/reactos/boot/freeldr/freeldr/arch/i386/xenvideo.c
--- branches/xen/reactos/boot/freeldr/freeldr/arch/i386/xenvideo.c	2005-05-16 17:19:10 UTC (rev 15345)
+++ branches/xen/reactos/boot/freeldr/freeldr/arch/i386/xenvideo.c	2005-05-16 18:02:10 UTC (rev 15346)
@@ -90,6 +90,29 @@
       return;
     }
 
+  /* Translate some line-drawing characters */
+  if (0x80 <= Ch)
+    {
+      switch(Ch)
+        {
+        case 0xc9: /* top-left double corner */
+        case 0xbb: /* top-right double corner */
+        case 0xc8: /* bottom-left double corner */
+        case 0xbc: /* bottom-right double corner */
+          Ch = '+';
+          break;
+        case 0xcd: /* horizontal double */
+          Ch = '-';
+          break;
+        case 0xba: /* vertical double */
+          Ch = '|';
+          break;
+        case 0xb1: /* dotted pattern */
+          Ch = ' ';
+          break;
+        }
+    }
+
   if (X != CurrentX || Y != CurrentY)
     {
       AnsiMoveToPos(X, Y);
@@ -102,4 +125,48 @@
   CurrentX++;
 }
 
+VIDEODISPLAYMODE
+XenVideoSetDisplayMode(char *DisplayMode, BOOL Init)
+{
+  /* We only have one mode: text */
+  return VideoTextMode;
+}
+
+VOID
+XenVideoGetDisplaySize(PULONG Width, PULONG Height, PULONG Depth)
+{
+  *Width = COLS;
+  *Height = ROWS;
+  *Depth = 0;
+}
+
+VOID
+XenVideoHideShowTextCursor(BOOL Show)
+{
+  /* We can't hide the cursor */
+}
+
+ULONG
+XenVideoGetBufferSize(VOID)
+{
+  return COLS * ROWS * 2;
+}
+
+VOID
+XenVideoCopyOffScreenBufferToVRAM(PVOID Buffer)
+{
+  unsigned X, Y;
+  PUCHAR BufPtr = (PUCHAR) Buffer;
+
+  for (Y = 0; Y < ROWS; Y++)
+    {
+      for (X = 0; X < COLS; X++)
+        {
+          XenVideoPutChar(BufPtr[0], BufPtr[1], X, Y);
+          BufPtr += 2;
+        }
+    }
+  XenConsFlush();
+}
+
 /* EOF */