[FREELDR]
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Wed, 26 Dec 2012 01:40:18 +0000 (01:40 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Wed, 26 Dec 2012 01:40:18 +0000 (01:40 +0000)
- Show the selected boot options as NTLDR does (in light blue under the "For troubleshooting... press F8" message).- The different safe modes are now mutually exclusive, as they must be.
- They can be coupled to the "boot logging", "vga mode" and "debugging" modes, enlarging possibilities (contrary to NTLDR. However you'll remark that these combinations are allowed when set with msconfig...).
- Since the safe modes come by default with boot logging, don't show "Boot Logging" when one of the safe modes is selected, but instead show the corresponding safe mode name.
- Modify the needed functions.

svn path=/trunk/; revision=58008

14 files changed:
reactos/boot/freeldr/freeldr/arch/i386/custom.c
reactos/boot/freeldr/freeldr/bootmgr.c
reactos/boot/freeldr/freeldr/include/options.h
reactos/boot/freeldr/freeldr/include/ui.h
reactos/boot/freeldr/freeldr/include/ui/gui.h
reactos/boot/freeldr/freeldr/include/ui/noui.h
reactos/boot/freeldr/freeldr/include/ui/tui.h
reactos/boot/freeldr/freeldr/options.c
reactos/boot/freeldr/freeldr/ui/directui.c
reactos/boot/freeldr/freeldr/ui/minitui.c
reactos/boot/freeldr/freeldr/ui/noui.c
reactos/boot/freeldr/freeldr/ui/tui.c
reactos/boot/freeldr/freeldr/ui/tuimenu.c
reactos/boot/freeldr/freeldr/ui/ui.c

index 10fe4e4..680a76c 100644 (file)
@@ -44,6 +44,7 @@ VOID OptionMenuCustomBoot(VOID)
        ULONG   SelectedMenuItem;
 
        if (!UiDisplayMenu("Please choose a boot method:", "",
+                          FALSE,
                           CustomBootMenuList,
                           CustomBootMenuCount,
                           0, -1,
index 001a320..16e2c7d 100644 (file)
@@ -273,6 +273,7 @@ VOID RunLoader(VOID)
                if (!UiDisplayMenu("Please select the operating system to start:",
                                   "For troubleshooting and advanced startup options for "
                                       "ReactOS, press F8.",
+                                  TRUE,
                                   OperatingSystemDisplayNames,
                                   OperatingSystemCount,
                                   DefaultOperatingSystem,
index f9abd0b..a365373 100644 (file)
@@ -20,4 +20,5 @@
 #pragma once
 
 VOID   DoOptionsMenu(VOID);
+VOID   DisplayBootTimeOptions(VOID);
 VOID   AppendBootTimeOptions(PCHAR BootOptions);
index cc37961..d419893 100644 (file)
@@ -70,7 +70,7 @@ VOID  UiMessageBoxCritical(PCSTR MessageText);                                // Displays a message box on th
 VOID   UiDrawProgressBarCenter(ULONG Position, ULONG Range, PCHAR ProgressText);                       // Draws the progress bar showing nPos percent filled
 VOID   UiDrawProgressBar(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom, ULONG Position, ULONG Range, PCHAR ProgressText);                   // Draws the progress bar showing nPos percent filled
 VOID   UiShowMessageBoxesInSection(PCSTR SectionName);         // Displays all the message boxes in a given section
-VOID   UiEscapeString(PCHAR String);                                                   // Processes a string and changes all occurances of "\n" to '\n'
+VOID   UiEscapeString(PCHAR String);                                                   // Processes a string and changes all occurrences of "\n" to '\n'
 BOOLEAN        UiEditBox(PCSTR MessageText, PCHAR EditTextBuffer, ULONG Length);
 
 UCHAR  UiTextToColor(PCSTR ColorText);                                         // Converts the text color into it's equivalent color value
@@ -91,8 +91,9 @@ typedef struct tagUI_MENU_INFO
 {
        PCSTR           MenuHeader;
        PCSTR           MenuFooter;
+       BOOLEAN         ShowBootOptions;
 
-       PCSTR           *MenuItemList;
+       PCSTR*          MenuItemList;
        ULONG           MenuItemCount;
        LONG            MenuTimeRemaining;
        ULONG           SelectedMenuItem;
@@ -105,7 +106,7 @@ typedef struct tagUI_MENU_INFO
 
 typedef BOOLEAN (*UiMenuKeyPressFilterCallback)(ULONG KeyPress);
 
-BOOLEAN        UiDisplayMenu(PCSTR MenuHeader, PCSTR MenuFooter, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter);
+BOOLEAN        UiDisplayMenu(PCSTR MenuHeader, PCSTR MenuFooter, BOOLEAN ShowBootOptions, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter);
 
 ///////////////////////////////////////////////////////////////////////////////////////
 //
@@ -135,7 +136,7 @@ typedef struct tagUIVTBL
        VOID (*FadeInBackdrop)(VOID);
        VOID (*FadeOut)(VOID);
 
-       BOOLEAN (*DisplayMenu)(PCSTR MenuHeader, PCSTR MenuFooter, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter);
+       BOOLEAN (*DisplayMenu)(PCSTR MenuHeader, PCSTR MenuFooter, BOOLEAN ShowBootOptions, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter);
        VOID (*DrawMenu)(PUI_MENU_INFO MenuInfo);
 } UIVTBL, *PUIVTBL;
 
index f2412f1..a5dcbc4 100644 (file)
@@ -48,6 +48,6 @@ UCHAR GuiTextToFillStyle(PCSTR FillStyleText);                                // Converts the text fill into
 // Menu Functions
 //
 ///////////////////////////////////////////////////////////////////////////////////////
-BOOLEAN        GuiDisplayMenu(PCSTR MenuHeader, PCSTR MenuFooter, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem);
+BOOLEAN        GuiDisplayMenu(PCSTR MenuHeader, PCSTR MenuFooter, BOOLEAN ShowBootOptions, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem);
 
 extern const UIVTBL GuiVtbl;
index 8342504..2c5d03a 100644 (file)
@@ -41,5 +41,5 @@ VOID NoUiFadeOut(VOID);
 //
 ///////////////////////////////////////////////////////////////////////////////////////
 
-BOOLEAN NoUiDisplayMenu(PCSTR MenuHeader, PCSTR MenuFooter, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter);
+BOOLEAN NoUiDisplayMenu(PCSTR MenuHeader, PCSTR MenuFooter, BOOLEAN ShowBootOptions, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter);
 VOID NoUiDrawMenu(PUI_MENU_INFO MenuInfo);
index da80885..96611b9 100644 (file)
@@ -63,7 +63,7 @@ VOID  TuiDrawMenu(PUI_MENU_INFO MenuInfo);
 VOID   NTAPI TuiDrawMenuBox(PUI_MENU_INFO MenuInfo);
 VOID   NTAPI TuiDrawMenuItem(PUI_MENU_INFO MenuInfo, ULONG MenuItemNumber);
 ULONG  NTAPI TuiProcessMenuKeyboardEvent(PUI_MENU_INFO MenuInfo, UiMenuKeyPressFilterCallback KeyPressFilter);
-BOOLEAN        TuiDisplayMenu(PCSTR MenuHeader, PCSTR MenuFooter, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter);
+BOOLEAN        TuiDisplayMenu(PCSTR MenuHeader, PCSTR MenuFooter, BOOLEAN ShowBootOptions, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter);
 
 /* Definitions for corners, depending on HORIZ and VERT */
 #define UL             (0xda)
index b2c3a57..3f28156 100644 (file)
@@ -37,6 +37,7 @@ PCSTR OptionsMenuList[] =
 
        NULL,
 
+       "Start ReactOS normally",
 #ifdef HAS_OPTION_MENU_CUSTOM_BOOT
        "Custom Boot",
 #endif
@@ -60,41 +61,27 @@ PCSTR FrldrDbgMsg = "Enable FreeLdr debug channels\n"
                     "  +peloader\n"
                     "NOTE: all letters must be lowercase, no spaces allowed.";
 
-enum OptionMenuItems
+//
+// The boot options are mutually exclusive.
+//
+enum BootOption
 {
-       SAFE_MODE = 0,
-       SAFE_MODE_WITH_NETWORKING = 1,
-       SAFE_MODE_WITH_COMMAND_PROMPT = 2,
+       NO_OPTION = 0,
 
-       SEPARATOR1 = 3,
+       SAFE_MODE,
+       SAFE_MODE_WITH_NETWORKING,
+       SAFE_MODE_WITH_COMMAND_PROMPT,
 
-       ENABLE_BOOT_LOGGING = 4,
-       ENABLE_VGA_MODE = 5,
-       LAST_KNOWN_GOOD_CONFIGURATION = 6,
-       DIRECTORY_SERVICES_RESTORE_MODE = 7,
-       DEBUGGING_MODE = 8,
-       FREELDR_DEBUGGING = 9,
-
-       SEPARATOR2 = 10,
-
-#ifdef HAS_OPTION_MENU_CUSTOM_BOOT
-       CUSTOM_BOOT = 11,
-#endif
-#ifdef HAS_OPTION_MENU_REBOOT
-       REBOOT = 12,
-#endif
+       LAST_KNOWN_GOOD_CONFIGURATION,
+       DIRECTORY_SERVICES_RESTORE_MODE,
 };
 
 ULONG OptionsMenuItemCount = sizeof(OptionsMenuList) / sizeof(OptionsMenuList[0]);
 
-BOOLEAN SafeMode = FALSE;
-BOOLEAN SafeModeWithNetworking = FALSE;
-BOOLEAN SafeModeWithCommandPrompt = FALSE;
-BOOLEAN BootLogging = FALSE;
-BOOLEAN VgaMode = FALSE;
-BOOLEAN LastKnownGoodConfiguration = FALSE;
-BOOLEAN DirectoryServicesRepairMode = FALSE;
-BOOLEAN DebuggingMode = FALSE;
+static enum BootOption BootOptionChoice = NO_OPTION;
+static BOOLEAN BootLogging = FALSE;
+static BOOLEAN VgaMode = FALSE;
+static BOOLEAN DebuggingMode = FALSE;
 
 VOID DoOptionsMenu(VOID)
 {
@@ -102,6 +89,7 @@ VOID DoOptionsMenu(VOID)
        CHAR  DebugChannelString[100];
 
        if (!UiDisplayMenu("Select an option:", "",
+                          TRUE,
                           OptionsMenuList,
                           OptionsMenuItemCount,
                           0, -1,
@@ -118,65 +106,164 @@ VOID DoOptionsMenu(VOID)
 
        switch (SelectedMenuItem)
        {
-       case SAFE_MODE:
-               SafeMode = TRUE;
-               BootLogging = TRUE;
-               break;
-       case SAFE_MODE_WITH_NETWORKING:
-               SafeModeWithNetworking = TRUE;
-               BootLogging = TRUE;
-               break;
-       case SAFE_MODE_WITH_COMMAND_PROMPT:
-               SafeModeWithCommandPrompt = TRUE;
-               BootLogging = TRUE;
-               break;
-       //case SEPARATOR1:
-       //      break;
-       case ENABLE_BOOT_LOGGING:
-               BootLogging = TRUE;
-               break;
-       case ENABLE_VGA_MODE:
-               VgaMode = TRUE;
-               break;
-       case LAST_KNOWN_GOOD_CONFIGURATION:
-               LastKnownGoodConfiguration = TRUE;
-               break;
-       case DIRECTORY_SERVICES_RESTORE_MODE:
-               DirectoryServicesRepairMode = TRUE;
-               break;
-       case DEBUGGING_MODE:
-               DebuggingMode = TRUE;
-               break;
-       case FREELDR_DEBUGGING:
-               DebugChannelString[0]=0;
-               if (UiEditBox(FrldrDbgMsg, DebugChannelString, 100))
-                       DbgParseDebugChannels(DebugChannelString);
-               break;
-       //case SEPARATOR2:
-       //      break;
+               case 0: // Safe Mode
+                       BootOptionChoice = SAFE_MODE;
+                       BootLogging = TRUE;
+                       break;
+               case 1: // Safe Mode with Networking
+                       BootOptionChoice = SAFE_MODE_WITH_NETWORKING;
+                       BootLogging = TRUE;
+                       break;
+               case 2: // Safe Mode with Command Prompt
+                       BootOptionChoice = SAFE_MODE_WITH_COMMAND_PROMPT;
+                       BootLogging = TRUE;
+                       break;
+               // case 3: // Separator
+               //     break;
+               case 4: // Enable Boot Logging
+                       BootLogging = TRUE;
+                       break;
+               case 5: // Enable VGA Mode
+                       VgaMode = TRUE;
+                       break;
+               case 6: // Last Known Good Configuration
+                       BootOptionChoice = LAST_KNOWN_GOOD_CONFIGURATION;
+                       break;
+               case 7: // Directory Services Restore Mode
+                       BootOptionChoice = DIRECTORY_SERVICES_RESTORE_MODE;
+                       break;
+               case 8: // Debugging Mode
+                       DebuggingMode = TRUE;
+                       break;
+               case 9: // FreeLdr debugging
+                       DebugChannelString[0] = 0;
+                       if (UiEditBox(FrldrDbgMsg,
+                                     DebugChannelString,
+                                     sizeof(DebugChannelString) / sizeof(DebugChannelString[0])))
+                       {
+                               DbgParseDebugChannels(DebugChannelString);
+                       }
+                       break;
+               // case 10: // Separator
+               //     break;
+               case 11: // Start ReactOS normally
+                       // Reset all the parameters to their default values.
+                       BootOptionChoice = NO_OPTION;
+                       BootLogging = FALSE;
+                       VgaMode = FALSE;
+                       DebuggingMode = FALSE;
+                       break;
 #ifdef HAS_OPTION_MENU_CUSTOM_BOOT
-       case CUSTOM_BOOT:
-               OptionMenuCustomBoot();
-               break;
+               case 12: // Custom Boot
+                       OptionMenuCustomBoot();
+                       break;
 #endif
 #ifdef HAS_OPTION_MENU_REBOOT
-       case REBOOT:
-               OptionMenuReboot();
-               break;
+               case 13: // Reboot
+                       OptionMenuReboot();
+                       break;
 #endif
        }
 }
 
+VOID DisplayBootTimeOptions(VOID)
+{
+       CHAR BootOptions[260] = "";
+
+       switch (BootOptionChoice)
+       {
+               case SAFE_MODE:
+                       strcat(BootOptions, OptionsMenuList[0]);
+                       break;
+
+               case SAFE_MODE_WITH_NETWORKING:
+                       strcat(BootOptions, OptionsMenuList[1]);
+                       break;
+
+               case SAFE_MODE_WITH_COMMAND_PROMPT:
+                       strcat(BootOptions, OptionsMenuList[2]);
+                       break;
+
+               case LAST_KNOWN_GOOD_CONFIGURATION:
+                       strcat(BootOptions, OptionsMenuList[6]);
+                       break;
+
+               case DIRECTORY_SERVICES_RESTORE_MODE:
+                       strcat(BootOptions, OptionsMenuList[7]);
+                       break;
+
+               default:
+                       break;
+       }
+
+       if (BootLogging)
+       {
+               if ( (BootOptionChoice != SAFE_MODE) &&
+                    (BootOptionChoice != SAFE_MODE_WITH_NETWORKING) &&
+                    (BootOptionChoice != SAFE_MODE_WITH_COMMAND_PROMPT) )
+               {
+                       if (BootOptionChoice != NO_OPTION)
+                       {
+                               strcat(BootOptions, ", ");
+                       }
+                       strcat(BootOptions, OptionsMenuList[4]);
+               }
+       }
+
+       if (VgaMode)
+       {
+               if ((BootOptionChoice != NO_OPTION) ||
+                    BootLogging)
+               {
+                       strcat(BootOptions, ", ");
+               }
+               strcat(BootOptions, OptionsMenuList[5]);
+       }
+
+       if (DebuggingMode)
+       {
+               if ((BootOptionChoice != NO_OPTION) ||
+                    BootLogging || VgaMode)
+               {
+                       strcat(BootOptions, ", ");
+               }
+               strcat(BootOptions, OptionsMenuList[8]);
+       }
+
+       /* Display the chosen boot options */
+       UiDrawText(0,
+                  UiScreenHeight - 2,
+                  BootOptions,
+                  ATTR(COLOR_LIGHTBLUE, UiMenuBgColor));
+}
+
 VOID AppendBootTimeOptions(PCHAR BootOptions)
 {
-       if (SafeMode)
-               strcat(BootOptions, " /SAFEBOOT:MINIMAL /SOS"); //FIXME: NOGUIBOOT should also be specified
+       switch (BootOptionChoice)
+       {
+               case SAFE_MODE:
+                       strcat(BootOptions, " /SAFEBOOT:MINIMAL /SOS"); //FIXME: NOGUIBOOT should also be specified
+                       break;
+
+               case SAFE_MODE_WITH_NETWORKING:
+                       strcat(BootOptions, " /SAFEBOOT:NETWORK /SOS"); //FIXME: NOGUIBOOT should also be specified
+                       break;
+
+               case SAFE_MODE_WITH_COMMAND_PROMPT:
+                       strcat(BootOptions, " /SAFEBOOT:MINIMAL(ALTERNATESHELL) /SOS"); //FIXME: NOGUIBOOT should also be specified
+                       break;
 
-       if (SafeModeWithNetworking)
-               strcat(BootOptions, " /SAFEBOOT:NETWORK /SOS"); //FIXME: NOGUIBOOT should also be specified
+               case LAST_KNOWN_GOOD_CONFIGURATION:
+                       DbgPrint("Last known good configuration is not supported yet!\n");
+                       break;
 
-       if (SafeModeWithCommandPrompt)
-               strcat(BootOptions, " /SAFEBOOT:MINIMAL(ALTERNATESHELL) /SOS"); //FIXME: NOGUIBOOT should also be specified
+               case DIRECTORY_SERVICES_RESTORE_MODE:
+                       strcat(BootOptions, " /SAFEBOOT:DSREPAIR /SOS");
+                       break;
+
+               default:
+                       break;
+       }
 
        if (BootLogging)
                strcat(BootOptions, " /BOOTLOG");
@@ -184,12 +271,6 @@ VOID AppendBootTimeOptions(PCHAR BootOptions)
        if (VgaMode)
                strcat(BootOptions, " /BASEVIDEO");
 
-       if (LastKnownGoodConfiguration)
-               DbgPrint("Last known good configuration is not supported yet!\n");
-
-       if (DirectoryServicesRepairMode)
-               strcat(BootOptions, " /SAFEBOOT:DSREPAIR /SOS");
-
        if (DebuggingMode)
                strcat(BootOptions, " /DEBUG");
 }
index ca1b949..9a54e1c 100644 (file)
@@ -384,6 +384,12 @@ UiDrawMenu(IN PUI_MENU_INFO MenuInfo)
     {
         UiDrawMenuItem(MenuInfo, i);
     }
+
+    /* Display the boot options if needed */
+    if (MenuInfo->ShowBootOptions)
+    {
+        DisplayBootTimeOptions();
+    }
 }
 
 ULONG
@@ -502,6 +508,7 @@ UiCalcMenuBoxSize(IN PUI_MENU_INFO MenuInfo)
 BOOLEAN
 UiDisplayMenu(IN PCSTR MenuHeader,
               IN PCSTR MenuFooter,
+              IN BOOLEAN ShowBootOptions,
               IN PCSTR MenuItemList[],
               IN ULONG MenuItemCount,
               IN ULONG DefaultMenuItem,
@@ -526,6 +533,7 @@ UiDisplayMenu(IN PCSTR MenuHeader,
     /* Setup the MENU_INFO structure */
     MenuInformation.MenuHeader = MenuHeader;
     MenuInformation.MenuFooter = MenuFooter;
+    MenuInformation.ShowBootOptions = ShowBootOptions;
     MenuInformation.MenuItemList = MenuItemList;
     MenuInformation.MenuItemCount = MenuItemCount;
     MenuInformation.MenuTimeRemaining = MenuTimeOut;
index f33860f..692805c 100644 (file)
@@ -123,6 +123,14 @@ MiniTuiDrawMenu(PUI_MENU_INFO MenuInfo)
         TuiDrawMenuItem(MenuInfo, i);
     }
 
+    //
+    // Display the boot options if needed
+    //
+    if (MenuInfo->ShowBootOptions)
+    {
+        DisplayBootTimeOptions();
+    }
+
     VideoCopyOffScreenBufferToVRAM();
 }
 
index f705ed9..187cfe1 100644 (file)
@@ -109,7 +109,7 @@ VOID NoUiFadeOut(VOID)
 //
 ///////////////////////////////////////////////////////////////////////////////////////
 
-BOOLEAN NoUiDisplayMenu(PCSTR MenuHeader, PCSTR MenuFooter, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter)
+BOOLEAN NoUiDisplayMenu(PCSTR MenuHeader, PCSTR MenuFooter, BOOLEAN ShowBootOptions, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter)
 {
        *SelectedMenuItem = DefaultMenuItem;
        return TRUE;
index a9d134f..cec9a33 100644 (file)
@@ -128,7 +128,7 @@ VOID TuiDrawBackdrop(VOID)
        //
        // Draw title text
        //
-       TuiDrawText( (UiScreenWidth / 2) - ((ULONG)strlen(UiTitleBoxTitleText) / 2),
+       TuiDrawText( (UiScreenWidth - (ULONG)strlen(UiTitleBoxTitleText)) / 2,
                        2,
                        UiTitleBoxTitleText,
                        ATTR(UiTitleBoxFgColor, UiTitleBoxBgColor));
index 0eb4c35..ee43f38 100644 (file)
@@ -16,6 +16,7 @@
 BOOLEAN
 TuiDisplayMenu(PCSTR MenuHeader,
                PCSTR MenuFooter,
+               BOOLEAN ShowBootOptions,
                PCSTR MenuItemList[],
                ULONG MenuItemCount,
                ULONG DefaultMenuItem,
@@ -45,6 +46,7 @@ TuiDisplayMenu(PCSTR MenuHeader,
     //
     MenuInformation.MenuHeader = MenuHeader;
     MenuInformation.MenuFooter = MenuFooter;
+    MenuInformation.ShowBootOptions = ShowBootOptions;
     MenuInformation.MenuItemList = MenuItemList;
     MenuInformation.MenuItemCount = MenuItemCount;
     MenuInformation.MenuTimeRemaining = MenuTimeOut;
@@ -225,6 +227,12 @@ TuiDrawMenu(PUI_MENU_INFO MenuInfo)
         TuiDrawMenuItem(MenuInfo, i);
     }
 
+    /* Display the boot options if needed */
+    if (MenuInfo->ShowBootOptions)
+    {
+        DisplayBootTimeOptions();
+    }
+
     VideoCopyOffScreenBufferToVRAM();
 }
 
index 03de23c..d36b028 100644 (file)
@@ -442,9 +442,9 @@ VOID UiTruncateStringEllipsis(PCHAR StringText, ULONG MaxChars)
        }
 }
 
-BOOLEAN UiDisplayMenu(PCSTR MenuHeader, PCSTR MenuFooter, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter)
+BOOLEAN UiDisplayMenu(PCSTR MenuHeader, PCSTR MenuFooter, BOOLEAN ShowBootOptions, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter)
 {
-       return UiVtbl.DisplayMenu(MenuHeader, MenuFooter, MenuItemList, MenuItemCount, DefaultMenuItem, MenuTimeOut, SelectedMenuItem, CanEscape, KeyPressFilter);
+       return UiVtbl.DisplayMenu(MenuHeader, MenuFooter, ShowBootOptions, MenuItemList, MenuItemCount, DefaultMenuItem, MenuTimeOut, SelectedMenuItem, CanEscape, KeyPressFilter);
 }
 
 VOID UiFadeInBackdrop(VOID)