Allow HAL choice during first stage setup
Modified: trunk/reactos/bootdata/txtsetup.sif
Modified: trunk/reactos/subsys/system/usetup/infcache.c
Modified: trunk/reactos/subsys/system/usetup/settings.c
Modified: trunk/reactos/subsys/system/usetup/settings.h
Modified: trunk/reactos/subsys/system/usetup/usetup.c
Modified: trunk/reactos/tools/helper.mk

Modified: trunk/reactos/bootdata/txtsetup.sif
--- trunk/reactos/bootdata/txtsetup.sif	2005-02-20 20:46:59 UTC (rev 13697)
+++ trunk/reactos/bootdata/txtsetup.sif	2005-02-20 22:40:30 UTC (rev 13698)
@@ -22,7 +22,6 @@
 class2.sys    = 3
 disk.sys      = 3
 floppy.sys    = 3
-hal.dll       = 2
 keyboard.sys  = 3
 l_intl.nls    = 2
 ntfs.sys      = 3
@@ -48,7 +47,16 @@
 
 [Computer]
 pci_up = "Standard-PC"
+pci_mp = "Standard-PC Multiprocessor"
 
+[Files.pci_up]
+; <filename> = <directory_id>,<new name>
+hal.dll      = 2
+
+[Files.pci_mp]
+; <filename> = <directory_id>,<new name>
+halmp.dll    = 2,hal.dll
+
 [Display]
 ;<id> = <user friendly name>,<spare>,<service key name>
 vga = "VGA Display",,Vga

Modified: trunk/reactos/subsys/system/usetup/infcache.c
--- trunk/reactos/subsys/system/usetup/infcache.c	2005-02-20 20:46:59 UTC (rev 13697)
+++ trunk/reactos/subsys/system/usetup/infcache.c	2005-02-20 22:40:30 UTC (rev 13698)
@@ -1294,7 +1294,7 @@
 
   /* Iterate through list of sections */
   CacheSection = Cache->FirstSection;
-  while (Section != NULL)
+  while (CacheSection != NULL)
     {
       DPRINT("Comparing '%S' and '%S'\n", CacheSection->Name, Section);
 

Modified: trunk/reactos/subsys/system/usetup/settings.c
--- trunk/reactos/subsys/system/usetup/settings.c	2005-02-20 20:46:59 UTC (rev 13697)
+++ trunk/reactos/subsys/system/usetup/settings.c	2005-02-20 22:40:30 UTC (rev 13698)
@@ -29,6 +29,7 @@
 #include "precomp.h"
 #include <ntdll/rtl.h>
 #include <ntos/minmax.h>
+#include <rosrtl/string.h>
 
 #include "usetup.h"
 #include "infcache.h"
@@ -352,7 +353,29 @@
   return List;
 }
 
+BOOLEAN
+ProcessComputerFiles(HINF InfFile, PGENERIC_LIST List, PWCHAR* AdditionalSectionName)
+{
+	PGENERIC_LIST_ENTRY Entry;
+	static WCHAR SectionName[128];
+	
+	DPRINT("ProcessComputerFiles() called\n");
+	
+	Entry = GetGenericListEntry(List);
+	if (Entry == NULL)
+	{
+		DPRINT("GetGenericListEntry() failed\n");
+		return FALSE;
+	}
+	
+	wcscpy(SectionName, L"Files.");
+	wcscat(SectionName, Entry->UserData);
+	*AdditionalSectionName = SectionName;
+	
+	return TRUE;
+}
 
+
 BOOLEAN
 ProcessDisplayRegistry(HINF InfFile, PGENERIC_LIST List)
 {

Modified: trunk/reactos/subsys/system/usetup/settings.h
--- trunk/reactos/subsys/system/usetup/settings.h	2005-02-20 20:46:59 UTC (rev 13697)
+++ trunk/reactos/subsys/system/usetup/settings.h	2005-02-20 22:40:30 UTC (rev 13698)
@@ -34,6 +34,11 @@
 CreateDisplayDriverList(HINF InfFile);
 
 BOOLEAN
+ProcessComputerFiles(HINF InfFile,
+		       PGENERIC_LIST List,
+		       PWCHAR* AdditionalSectionName);
+
+BOOLEAN
 ProcessDisplayRegistry(HINF InfFile,
 		       PGENERIC_LIST List);
 

Modified: trunk/reactos/subsys/system/usetup/usetup.c
--- trunk/reactos/subsys/system/usetup/usetup.c	2005-02-20 20:46:59 UTC (rev 13697)
+++ trunk/reactos/subsys/system/usetup/usetup.c	2005-02-20 22:40:30 UTC (rev 13698)
@@ -2301,6 +2301,7 @@
 #ifndef NDEBUG
   ULONG Line;
   ULONG i;
+  PLIST_ENTRY Entry;
 #endif
 
 
@@ -2761,27 +2762,24 @@
 
 
 static BOOLEAN
-PrepareCopyPageInfFile(HINF InfFile,
+AddSectionToCopyQueue(HINF InfFile,
+		       PWCHAR SectionName,
 		       PWCHAR SourceCabinet,
 		       PINPUT_RECORD Ir)
 {
-  WCHAR PathBuffer[MAX_PATH];
   INFCONTEXT FilesContext;
   INFCONTEXT DirContext;
-  PWCHAR KeyValue;
-  ULONG Length;
-  NTSTATUS Status;
   PWCHAR FileKeyName;
   PWCHAR FileKeyValue;
   PWCHAR DirKeyValue;
   PWCHAR TargetFileName;
-
-  /* Search for the 'SourceFiles' section */
-  if (!InfFindFirstLine (InfFile, L"SourceFiles", NULL, &FilesContext))
+  
+  /* Search for the SectionName section */
+  if (!InfFindFirstLine (InfFile, SectionName, NULL, &FilesContext))
     {
-      PopupError("Setup failed to find the 'SourceFiles' section\n"
-		 "in TXTSETUP.SIF.\n",  // FIXME
-		 "ENTER = Reboot computer");
+      char Buffer[128];
+      sprintf(Buffer, "Setup failed to find the '%S' section\nin TXTSETUP.SIF.\n", SectionName);
+      PopupError(Buffer, "ENTER = Reboot computer");
 
       while(TRUE)
 	{
@@ -2795,7 +2793,7 @@
     }
 
   /*
-   * Enumerate the files in the 'SourceFiles' section
+   * Enumerate the files in the section
    * and add them to the file queue.
    */
   do
@@ -2842,8 +2840,38 @@
 	}
     }
   while (InfFindNextLine(&FilesContext, &FilesContext));
+  
+  return TRUE;
+}
 
+static BOOLEAN
+PrepareCopyPageInfFile(HINF InfFile,
+		       PWCHAR SourceCabinet,
+		       PINPUT_RECORD Ir)
+{
+  WCHAR PathBuffer[MAX_PATH];
+  INFCONTEXT DirContext;
+  PWCHAR AdditionalSectionName;
+  PWCHAR KeyValue;
+  ULONG Length;
+  NTSTATUS Status;
 
+  /* Add common files */
+  if (!AddSectionToCopyQueue(InfFile, L"SourceFiles", SourceCabinet, Ir))
+    return FALSE;
+  
+  /* Add specific files depending of computer type */
+  if (SourceCabinet == NULL)
+  {
+    if (!ProcessComputerFiles(InfFile, ComputerList, &AdditionalSectionName))
+      return FALSE;
+    if (AdditionalSectionName)
+    {
+      if (!AddSectionToCopyQueue(InfFile, AdditionalSectionName, SourceCabinet, Ir))
+        return FALSE;
+    }
+  }
+  
   /* Create directories */
 
   /*

Modified: trunk/reactos/tools/helper.mk
--- trunk/reactos/tools/helper.mk	2005-02-20 20:46:59 UTC (rev 13697)
+++ trunk/reactos/tools/helper.mk	2005-02-20 22:40:30 UTC (rev 13698)
@@ -295,6 +295,12 @@
   MK_RES_BASE := $(TARGET_NAME)
   MK_INSTALL_BASENAME := hal
   MK_INSTALL_FULLNAME := hal.dll
+  ifeq ($(TARGET_BOOTSTRAP),yes)
+    TARGET_BOOTSTRAP_NAME := hal.dll
+  else
+    TARGET_BOOTSTRAP_NAME := $(TARGET_NAME)$(MK_DEFEXT)
+  endif
+  TARGET_BOOTSTRAP := yes
 endif
 
 ifeq ($(TARGET_TYPE),bootpgm)