Allow to choose between 800x600x16 and 640x480x8 as default resolution in first stage installer.
Modified: trunk/reactos/bootdata/txtsetup.sif
Modified: trunk/reactos/subsys/system/usetup/settings.c

Modified: trunk/reactos/bootdata/txtsetup.sif
--- trunk/reactos/bootdata/txtsetup.sif	2005-12-23 17:46:17 UTC (rev 20312)
+++ trunk/reactos/bootdata/txtsetup.sif	2005-12-23 18:03:12 UTC (rev 20313)
@@ -66,9 +66,10 @@
 halmp.dll    = 2,hal.dll
 
 [Display]
-;<id> = <user friendly name>,<spare>,<service key name>
-vga = "VGA Display",,Vga
-vbe = "VESA Display",,VBE
+;<id> = <user friendly name>,<spare>,<service key name>,<hight>,<width>,<bpp>
+vga = "VGA Display (640x680x8)",,Vga,640,480,8
+vbe_lowres = "VESA Display (640x680x8)",,VBE,640,480,8
+vbe = "VESA Display (800x600x16)",,VBE,800,600,16
 
 [Map.Display]
 ;<id> = <pnp id string>

Modified: trunk/reactos/subsys/system/usetup/settings.c
--- trunk/reactos/subsys/system/usetup/settings.c	2005-12-23 17:46:17 UTC (rev 20312)
+++ trunk/reactos/subsys/system/usetup/settings.c	2005-12-23 18:03:12 UTC (rev 20313)
@@ -521,12 +521,14 @@
       return FALSE;
     }
 
+  /* Enable the right driver */
   if (!InfGetDataField(Context, 3, &ServiceName))
     {
       DPRINT("InfGetDataField() failed\n");
       return FALSE;
     }
 
+  ASSERT(wcslen(ServiceName) < 10);
   DPRINT("Service name: %S\n", ServiceName);
 
   StartValue = 1;
@@ -536,13 +538,75 @@
 				 REG_DWORD,
 				 &StartValue,
 				 sizeof(ULONG));
-  InfFreeContext(Context);
+
   if (!NT_SUCCESS(Status))
     {
       DPRINT("RtlWriteRegistryValue() failed (Status %lx)\n", Status);
       return FALSE;
     }
 
+  /* Set the resolution */
+  WCHAR RegPath [255];
+  swprintf(RegPath, L"\\Registry\\Machine\\System\\CurrentControlSet\\Hardware Profiles\\Current\\System\\CurrentControlSet\\Services\\%s\\Device0", ServiceName);
+
+  PWCHAR Buffer;
+  if (!InfGetDataField(Context, 4, &Buffer))
+    {
+      DPRINT("InfGetDataField() failed\n");
+      return FALSE;
+    }
+  ULONG Width = wcstoul(Buffer, NULL, 10);
+  Status = RtlWriteRegistryValue(RTL_REGISTRY_ABSOLUTE,
+				 RegPath, 
+				 L"DefaultSettings.XResolution",
+				 REG_DWORD,
+				 &Width,
+				 sizeof(ULONG));
+  if (!NT_SUCCESS(Status))
+    {
+      DPRINT("RtlWriteRegistryValue() failed (Status %lx)\n", Status);
+      return FALSE;
+    }
+
+  
+  if (!InfGetDataField(Context, 5, &Buffer))
+    {
+      DPRINT("InfGetDataField() failed\n");
+      return FALSE;
+    }
+  ULONG Hight = wcstoul(Buffer, 0, 0);
+  Status = RtlWriteRegistryValue(RTL_REGISTRY_ABSOLUTE,
+				 RegPath,
+				 L"DefaultSettings.YResolution",
+				 REG_DWORD,
+				 &Hight,
+				 sizeof(ULONG));
+  if (!NT_SUCCESS(Status))
+    {
+      DPRINT("RtlWriteRegistryValue() failed (Status %lx)\n", Status);
+      return FALSE;
+    }
+
+  if (!InfGetDataField(Context, 6, &Buffer))
+    {
+      DPRINT("InfGetDataField() failed\n");
+      return FALSE;
+    }
+  ULONG Bpp = wcstoul(Buffer, 0, 0);
+  Status = RtlWriteRegistryValue(RTL_REGISTRY_ABSOLUTE,
+				 RegPath,
+				 L"DefaultSettings.BitsPerPel",
+				 REG_DWORD,
+				 &Bpp,
+				 sizeof(ULONG));
+  if (!NT_SUCCESS(Status))
+    {
+      DPRINT("RtlWriteRegistryValue() failed (Status %lx)\n", Status);
+      return FALSE;
+    }
+
+  InfFreeContext(Context);
+
   DPRINT("ProcessDisplayRegistry() done\n");
 
   return TRUE;