Implemented set cursor shape functionality.

diff --git a/dlls/winedos/int10.c b/dlls/winedos/int10.c
index 1d8793a..bbf592a 100644
--- a/dlls/winedos/int10.c
+++ b/dlls/winedos/int10.c
@@ -36,11 +36,10 @@
 #define SCROLL_UP 1
 #define SCROLL_DOWN 2
 
-/* FIXME: is row or column first? */
 static void BIOS_GetCursorPos(BIOSDATA*data,unsigned page,unsigned*X,unsigned*Y)
 {
-  *X = data->VideoCursorPos[page*2];
-  *Y = data->VideoCursorPos[page*2+1];
+  *X = data->VideoCursorPos[page*2];   /* column */
+  *Y = data->VideoCursorPos[page*2+1]; /* row */
 }
 
 static void BIOS_SetCursorPos(BIOSDATA*data,unsigned page,unsigned X,unsigned Y)
@@ -365,7 +364,9 @@
         break;
 
     case 0x01: /* SET CURSOR SHAPE */
-        FIXME("Set Cursor Shape - Not Supported\n");
+        TRACE("Set Cursor Shape start %d end %d options %d\n", CH_reg(context) & 0x1f, CL_reg(context) & 0x1f, CH_reg(context) & 0xe0);
+        data->VideoCursorType = CX_reg(context); /* direct copy */
+	VGA_SetCursorShape(CH_reg(context), CL_reg(context));
         break;
 
     case 0x02: /* SET CURSOR POSITION */
diff --git a/dlls/winedos/vga.c b/dlls/winedos/vga.c
index 9d90943..28545f3 100644
--- a/dlls/winedos/vga.c
+++ b/dlls/winedos/vga.c
@@ -473,6 +473,21 @@
     if (Yres) *Yres=info.dwSize.Y;
 }
 
+void VGA_SetCursorShape(unsigned char start_options, unsigned char end)
+{
+    CONSOLE_CURSOR_INFO cci;
+
+    /* standard cursor settings:
+     * 0x0607 == CGA, 0x0b0c == monochrome, 0x0d0e == EGA/VGA */
+
+    /* calculate percentage from bottom - assuming VGA (bottom 0x0e) */
+    cci.dwSize = ((end & 0x1f) - (start_options & 0x1f))/0x0e * 100; 
+    if (!cci.dwSize) cci.dwSize++; /* NULL cursor would make SCCI() fail ! */
+    cci.bVisible = ((start_options & 0x60) != 0x20); /* invisible ? */
+
+    SetConsoleCursorInfo(VGA_AlphaConsole(),&cci);
+}
+
 void VGA_SetCursorPos(unsigned X,unsigned Y)
 {
     COORD pos;
diff --git a/dlls/winedos/vga.h b/dlls/winedos/vga.h
index 5750b25..24a4ef9 100644
--- a/dlls/winedos/vga.h
+++ b/dlls/winedos/vga.h
@@ -40,6 +40,7 @@
 /* text mode */
 int VGA_SetAlphaMode(unsigned Xres,unsigned Yres);
 void VGA_GetAlphaMode(unsigned*Xres,unsigned*Yres);
+void VGA_SetCursorShape(unsigned char start_options,unsigned char end);
 void VGA_SetCursorPos(unsigned X,unsigned Y);
 void VGA_GetCursorPos(unsigned*X,unsigned*Y);
 void VGA_WriteChars(unsigned X,unsigned Y,unsigned ch,int attr,int count);
diff --git a/include/miscemu.h b/include/miscemu.h
index 14f9e72..f27d6b4 100644
--- a/include/miscemu.h
+++ b/include/miscemu.h
@@ -60,7 +60,7 @@
     WORD  VideoColumns;              /* 4a: Number of columns */
     WORD  VideoPageSize;             /* 4c: Video page size in bytes */
     WORD  VideoPageStartAddr;        /* 4e: Video page start address */
-    BYTE  VideoCursorPos[16];        /* 50: Cursor position for 8 pages */
+    BYTE  VideoCursorPos[16];        /* 50: Cursor position for 8 pages, column/row order */
     WORD  VideoCursorType;           /* 60: Video cursor type */
     BYTE  VideoCurPage;              /* 62: Video current page */
     WORD  VideoCtrlAddr WINE_PACKED; /* 63: Video controller address */