update for HEAD-2003091401
[reactos.git] / drivers / dd / vga / display / main / enable.c
index 0a932a2..a0dfb60 100644 (file)
@@ -7,7 +7,7 @@
  *
  */
 
-#include "gdiinfo.h"
+#include "../vgaddi.h"
 #include "../vgavideo/vgavideo.h"
 #define NDEBUG
 #include <debug.h>
@@ -61,13 +61,131 @@ DRVFN FuncList[] =
 #endif
 };
 
+GDIINFO gaulCap = {
+  GDI_DRIVER_VERSION,
+  DT_RASDISPLAY,         // ulTechnology
+  0,                     // ulHorzSize
+  0,                     // ulVertSize
+  0,                     // ulHorzRes (filled in at initialization)
+  0,                     // ulVertRes (filled in at initialization)
+  4,                     // cBitsPixel
+  1,                     // cPlanes
+  16,                    // ulNumColors
+  0,                     // flRaster (DDI reserved field)
+
+  96,                    // ulLogPixelsX (must be set to 96 according to MSDN)
+  96,                    // ulLogPixelsY (must be set to 96 according to MSDN)
+
+  TC_RA_ABLE | TC_SCROLLBLT,  // flTextCaps
+
+  6,                     // ulDACRed
+  6,                     // ulDACGree
+  6,                     // ulDACBlue
+
+  0x0024,                // ulAspectX  (one-to-one aspect ratio)
+  0x0024,                // ulAspectY
+  0x0033,                // ulAspectXY
+
+  1,                     // xStyleStep
+  1,                     // yStyleSte;
+  3,                     // denStyleStep
+
+  { 0, 0 },              // ptlPhysOffset
+  { 0, 0 },              // szlPhysSize
+
+  0,                     // ulNumPalReg (win3.1 16 color drivers say 0 too)
+
+// These fields are for halftone initialization.
+
+  {                                         // ciDevice, ColorInfo
+    { 6700, 3300, 0 },                      // Red
+    { 2100, 7100, 0 },                      // Green
+    { 1400,  800, 0 },                      // Blue
+    { 1750, 3950, 0 },                      // Cyan
+    { 4050, 2050, 0 },                      // Magenta
+    { 4400, 5200, 0 },                      // Yellow
+    { 3127, 3290, 0 },                      // AlignmentWhite
+    20000,                                  // RedGamma
+    20000,                                  // GreenGamma
+    20000,                                  // BlueGamma
+    0, 0, 0, 0, 0, 0
+  },
+
+  0,                                         // ulDevicePelsDPI
+  PRIMARY_ORDER_CBA,                         // ulPrimaryOrder
+  HT_PATSIZE_4x4_M,                          // ulHTPatternSize
+  HT_FORMAT_4BPP_IRGB,                       // ulHTOutputFormat
+  HT_FLAG_ADDITIVE_PRIMS,                    // flHTFlags
+
+  0,                                         // ulVRefresh
+  8,                                         // ulBltAlignment
+  0,                                         // ulPanningHorzRes
+  0,                                         // ulPanningVertRes
+};
+
+// Palette for VGA
+
+typedef struct _VGALOGPALETTE
+{
+   USHORT ident;
+   USHORT NumEntries;
+   PALETTEENTRY PaletteEntry[16];
+} VGALOGPALETTE;
+
+const VGALOGPALETTE VGApalette =
+{
+
+0x400,  // driver version
+16,     // num entries
+{
+  { 0x00, 0x00, 0x00, 0x00 }, // 0
+  { 0x80, 0x00, 0x00, 0x00 }, // 1
+  { 0x00, 0x80, 0x00, 0x00 }, // 2
+  { 0x80, 0x80, 0x00, 0x00 }, // 3
+  { 0x00, 0x00, 0x80, 0x00 }, // 4
+  { 0x80, 0x00, 0x80, 0x00 }, // 5
+  { 0x00, 0x80, 0x80, 0x00 }, // 6
+  { 0x80, 0x80, 0x80, 0x00 }, // 7
+  { 0xc0, 0xc0, 0xc0, 0x00 }, // 8
+  { 0xff, 0x00, 0x00, 0x00 }, // 9
+  { 0x00, 0xff, 0x00, 0x00 }, // 10
+  { 0xff, 0xff, 0x00, 0x00 }, // 11
+  { 0x00, 0x00, 0xff, 0x00 }, // 12
+  { 0xff, 0x00, 0xff, 0x00 }, // 13
+  { 0x00, 0xff, 0xff, 0x00 }, // 14
+  { 0xff, 0xff, 0xff, 0x00 } // 15
+}
+};
+
+// Devinfo structure passed back to the engine in DrvEnablePDEV
+
+#define SYSTM_LOGFONT {16,7,0,0,700,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,VARIABLE_PITCH | FF_DONTCARE, L"System"}
+#define HELVE_LOGFONT {12,9,0,0,400,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_STROKE_PRECIS,PROOF_QUALITY,VARIABLE_PITCH | FF_DONTCARE, L"MS Sans Serif"}
+#define COURI_LOGFONT {12,9,0,0,400,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_STROKE_PRECIS,PROOF_QUALITY,FIXED_PITCH | FF_DONTCARE, L"Courier"}
+
+DEVINFO devinfoVGA =
+{
+  (GCAPS_OPAQUERECT | GCAPS_HORIZSTRIKE | GCAPS_ALTERNATEFILL | GCAPS_MONO_DITHER | GCAPS_COLOR_DITHER |
+   GCAPS_WINDINGFILL | GCAPS_DITHERONREALIZE
+   ),       // Graphics capabilities
+
+  SYSTM_LOGFONT,  // Default font description
+  HELVE_LOGFONT,  // ANSI variable font description
+  COURI_LOGFONT,  // ANSI fixed font description
+  0,              // Count of device fonts
+  BMF_4BPP,       // preferred DIB format
+  8,              // Width of color dither
+  8,              // Height of color dither
+  0               // Default palette to use for this device
+};
+
 
 BOOL STDCALL
 DrvEnableDriver(IN ULONG EngineVersion,
                IN ULONG SizeOfDED,
                OUT PDRVENABLEDATA DriveEnableData)
 {
-  EngDebugPrint("VGADDI", "DrvEnableDriver called...\n", 0);
+/*  EngDebugPrint("VGADDI", "DrvEnableDriver called...\n", 0); */
 
   vgaPreCalc();
 
@@ -110,10 +228,10 @@ DrvDisableDriver(VOID)
 //    IN LPWSTR      LogAddress    
 //    IN ULONG       PatternCount  number of patterns expected
 //    OUT HSURF *    SurfPatterns  array to contain pattern handles
-//    IN ULONG       CapsSize      the size of the DevCaps object passed in
-//    OUT ULONG *    DevCaps       Device Capabilities object
+//    IN ULONG       GDIInfoSize   the size of the GDIInfo object passed in
+//    OUT GDIINFO *  GDIInfo       GDI Info object
 //    IN ULONG       DevInfoSize   the size of the DevInfo object passed in
-//    OUT DEVINFO *  DI            Device Info object
+//    OUT DEVINFO *  DevInfo       Device Info object
 //    IN LPWSTR      DevDataFile   ignore
 //    IN LPWSTR      DeviceName    Device name
 //    IN HANDLE      Driver        handle to KM driver
@@ -125,10 +243,10 @@ DrvEnablePDEV(IN DEVMODEW *DM,
              IN LPWSTR LogAddress,
              IN ULONG PatternCount,
              OUT HSURF *SurfPatterns,
-             IN ULONG CapsSize,
-             OUT ULONG *DevCaps,
+             IN ULONG GDIInfoSize,
+             OUT GDIINFO *GDIInfo,
              IN ULONG DevInfoSize,
-             OUT DEVINFO *DI,
+             OUT DEVINFO *DevInfo,
              IN LPWSTR DevDataFile,
              IN LPWSTR DeviceName,
              IN HANDLE Driver)
@@ -149,13 +267,21 @@ DrvEnablePDEV(IN DEVMODEW *DM,
   PDev->ptlExtent.y = 0;
   PDev->cExtent = 0;
   PDev->flCursor = CURSOR_DOWN;
-  // FIXME: fill out DevCaps
-  // FIXME: full out DevInfo
 
-  devinfoVGA.hpalDefault = EngCreatePalette(PAL_INDEXED, 16, (PULONG *)VGApalette.PaletteEntry, 0, 0, 0);
-DPRINT("Palette from Driver: %u\n", devinfoVGA.hpalDefault);
-  *DI = devinfoVGA;
-DPRINT("Palette from Driver 2: %u and DI is %08x\n", DI->hpalDefault, DI);
+  gaulCap.ulHorzRes = 640;
+  gaulCap.ulVertRes = 480;
+  if (sizeof(GDIINFO) < GDIInfoSize)
+    {
+    GDIInfoSize = sizeof(GDIINFO);
+    }
+  memcpy(GDIInfo, &gaulCap, GDIInfoSize);
+
+  devinfoVGA.hpalDefault = EngCreatePalette(PAL_INDEXED, 16, (ULONG *) VGApalette.PaletteEntry, 0, 0, 0);
+  if (sizeof(DEVINFO) < DevInfoSize)
+    {
+    DevInfoSize = sizeof(DEVINFO);
+    }
+  memcpy(DevInfo, &devinfoVGA, DevInfoSize);
 
   return(PDev);
 }
@@ -330,7 +456,7 @@ DrvEnableSurface(IN DHPDEV PDev)
   DHSURF dhsurf;
   HSURF hsurf;
 
-  DPRINT1("DrvEnableSurface() called\n");
+  DPRINT("DrvEnableSurface() called\n");
 
   // Initialize the VGA
   if (!VGAInitialized)
@@ -341,7 +467,6 @@ DrvEnableSurface(IN DHPDEV PDev)
        }
       VGAInitialized = TRUE;
     }
-CHECKPOINT1;
 
   // dhsurf is of type DEVSURF, which is the drivers specialized surface type
   dhsurf = (DHSURF)EngAllocMem(0, sizeof(DEVSURF), ALLOC_TAG);
@@ -389,7 +514,7 @@ CHECKPOINT1;
   if (EngAssociateSurface(hsurf, ppdev->GDIDevHandle, HOOK_BITBLT | HOOK_PAINT | HOOK_LINETO | HOOK_COPYBITS |
     HOOK_TRANSPARENTBLT))
   {
-    EngDebugPrint("VGADDI:", "Successfully associated surface\n", 0);
+/*    EngDebugPrint("VGADDI:", "Successfully associated surface\n", 0); */
     ppdev->SurfHandle = hsurf;
     ppdev->AssociatedSurf = pdsurf;