]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Support call of SendForm() from Callback(), i.e. nested call of SendForm().
authorxdu2 <xdu2@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 26 Oct 2009 03:06:06 +0000 (03:06 +0000)
committerxdu2 <xdu2@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 26 Oct 2009 03:06:06 +0000 (03:06 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9364 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
MdeModulePkg/Universal/SetupBrowserDxe/Setup.h
MdeModulePkg/Universal/SetupBrowserDxe/Ui.c
MdeModulePkg/Universal/SetupBrowserDxe/Ui.h

index ae73f09938bd8b6776cb0d27bdfa552b1e9a3593..05e690527daf03ff642ba52adb3bb893424b2d10 100644 (file)
@@ -29,6 +29,9 @@ EFI_HII_DATABASE_PROTOCOL         *mHiiDatabase;
 EFI_HII_STRING_PROTOCOL           *mHiiString;\r
 EFI_HII_CONFIG_ROUTING_PROTOCOL   *mHiiConfigRouting;\r
 \r
 EFI_HII_STRING_PROTOCOL           *mHiiString;\r
 EFI_HII_CONFIG_ROUTING_PROTOCOL   *mHiiConfigRouting;\r
 \r
+UINTN           gBrowserContextCount = 0;\r
+LIST_ENTRY      gBrowserContextList = INITIALIZE_LIST_HEAD_VARIABLE (gBrowserContextList);\r
+\r
 BANNER_DATA           *gBannerData;\r
 EFI_HII_HANDLE        gFrontPageHandle;\r
 UINTN                 gClassOfVfr;\r
 BANNER_DATA           *gBannerData;\r
 EFI_HII_HANDLE        gFrontPageHandle;\r
 UINTN                 gClassOfVfr;\r
@@ -38,8 +41,6 @@ BOOLEAN               gNvUpdateRequired;
 EFI_HII_HANDLE        gHiiHandle;\r
 UINT16                gDirection;\r
 EFI_SCREEN_DESCRIPTOR gScreenDimensions;\r
 EFI_HII_HANDLE        gHiiHandle;\r
 UINT16                gDirection;\r
 EFI_SCREEN_DESCRIPTOR gScreenDimensions;\r
-BOOLEAN               gUpArrow;\r
-BOOLEAN               gDownArrow;\r
 \r
 //\r
 // Browser Global Strings\r
 \r
 //\r
 // Browser Global Strings\r
@@ -85,7 +86,7 @@ EFI_GUID  gSetupBrowserGuid = {
   0xab368524, 0xb60c, 0x495b, {0xa0, 0x9, 0x12, 0xe8, 0x5b, 0x1a, 0xea, 0x32}\r
 };\r
 \r
   0xab368524, 0xb60c, 0x495b, {0xa0, 0x9, 0x12, 0xe8, 0x5b, 0x1a, 0xea, 0x32}\r
 };\r
 \r
-FORM_BROWSER_FORMSET  *gOldFormSet = NULL;\r
+FORM_BROWSER_FORMSET  *gOldFormSet;\r
 \r
 FUNCTIION_KEY_SETTING gFunctionKeySettingTable[] = {\r
   //\r
 \r
 FUNCTIION_KEY_SETTING gFunctionKeySettingTable[] = {\r
   //\r
@@ -216,6 +217,11 @@ SendForm (
   UINTN                         Index;\r
   FORM_BROWSER_FORMSET          *FormSet;\r
 \r
   UINTN                         Index;\r
   FORM_BROWSER_FORMSET          *FormSet;\r
 \r
+  //\r
+  // Save globals used by SendForm()\r
+  //\r
+  SaveBrowserContext ();\r
+\r
   Status = EFI_SUCCESS;\r
   ZeroMem (&gScreenDimensions, sizeof (EFI_SCREEN_DESCRIPTOR));\r
 \r
   Status = EFI_SUCCESS;\r
   ZeroMem (&gScreenDimensions, sizeof (EFI_SCREEN_DESCRIPTOR));\r
 \r
@@ -236,7 +242,8 @@ SendForm (
     if ((gScreenDimensions.RightColumn < ScreenDimensions->RightColumn) ||\r
         (gScreenDimensions.BottomRow < ScreenDimensions->BottomRow)\r
         ) {\r
     if ((gScreenDimensions.RightColumn < ScreenDimensions->RightColumn) ||\r
         (gScreenDimensions.BottomRow < ScreenDimensions->BottomRow)\r
         ) {\r
-      return EFI_INVALID_PARAMETER;\r
+      Status = EFI_INVALID_PARAMETER;\r
+      goto Done;\r
     } else {\r
       //\r
       // Local dimension validation.\r
     } else {\r
       //\r
       // Local dimension validation.\r
@@ -255,7 +262,8 @@ SendForm (
         ) {\r
         CopyMem (&gScreenDimensions, (VOID *) ScreenDimensions, sizeof (EFI_SCREEN_DESCRIPTOR));\r
       } else {\r
         ) {\r
         CopyMem (&gScreenDimensions, (VOID *) ScreenDimensions, sizeof (EFI_SCREEN_DESCRIPTOR));\r
       } else {\r
-        return EFI_INVALID_PARAMETER;\r
+        Status = EFI_INVALID_PARAMETER;\r
+        goto Done;\r
       }\r
     }\r
   }\r
       }\r
     }\r
   }\r
@@ -287,6 +295,7 @@ SendForm (
       Selection->FormId = FormId;\r
     }\r
 \r
       Selection->FormId = FormId;\r
     }\r
 \r
+    gOldFormSet = NULL;\r
     gNvUpdateRequired = FALSE;\r
 \r
     do {\r
     gNvUpdateRequired = FALSE;\r
 \r
     do {\r
@@ -338,6 +347,12 @@ SendForm (
   gST->ConOut->SetAttribute (gST->ConOut, EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK));\r
   gST->ConOut->ClearScreen (gST->ConOut);\r
 \r
   gST->ConOut->SetAttribute (gST->ConOut, EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK));\r
   gST->ConOut->ClearScreen (gST->ConOut);\r
 \r
+Done:\r
+  //\r
+  // Restore globals used by SendForm()\r
+  //\r
+  RestoreBrowserContext ();\r
+\r
   return Status;\r
 }\r
 \r
   return Status;\r
 }\r
 \r
@@ -2511,3 +2526,164 @@ InitializeFormSet (
 \r
   return Status;\r
 }\r
 \r
   return Status;\r
 }\r
+\r
+\r
+/**\r
+  Save globals used by previous call to SendForm(). SendForm() may be called from \r
+  HiiConfigAccess.Callback(), this will cause SendForm() be reentried.\r
+  So, save globals of previous call to SendForm() and restore them upon exit.\r
+\r
+**/\r
+VOID\r
+SaveBrowserContext (\r
+  VOID\r
+  )\r
+{\r
+  BROWSER_CONTEXT  *Context;\r
+\r
+  gBrowserContextCount++;\r
+  if (gBrowserContextCount == 1) {\r
+    //\r
+    // This is not reentry of SendForm(), no context to save\r
+    //\r
+    return;\r
+  }\r
+\r
+  Context = AllocatePool (sizeof (BROWSER_CONTEXT));\r
+  ASSERT (Context != NULL);\r
+\r
+  Context->Signature = BROWSER_CONTEXT_SIGNATURE;\r
+\r
+  //\r
+  // Save FormBrowser context\r
+  //\r
+  Context->BannerData           = gBannerData;\r
+  Context->ClassOfVfr           = gClassOfVfr;\r
+  Context->FunctionKeySetting   = gFunctionKeySetting;\r
+  Context->ResetRequired        = gResetRequired;\r
+  Context->NvUpdateRequired     = gNvUpdateRequired;\r
+  Context->Direction            = gDirection;\r
+  Context->FunctionNineString   = gFunctionNineString;\r
+  Context->FunctionTenString    = gFunctionTenString;\r
+  Context->EnterString          = gEnterString;\r
+  Context->EnterCommitString    = gEnterCommitString;\r
+  Context->EnterEscapeString    = gEnterEscapeString;\r
+  Context->EscapeString         = gEscapeString;\r
+  Context->SaveFailed           = gSaveFailed;\r
+  Context->MoveHighlight        = gMoveHighlight;\r
+  Context->MakeSelection        = gMakeSelection;\r
+  Context->DecNumericInput      = gDecNumericInput;\r
+  Context->HexNumericInput      = gHexNumericInput;\r
+  Context->ToggleCheckBox       = gToggleCheckBox;\r
+  Context->PromptForData        = gPromptForData;\r
+  Context->PromptForPassword    = gPromptForPassword;\r
+  Context->PromptForNewPassword = gPromptForNewPassword;\r
+  Context->ConfirmPassword      = gConfirmPassword;\r
+  Context->ConfirmError         = gConfirmError;\r
+  Context->PassowordInvalid     = gPassowordInvalid;\r
+  Context->PressEnter           = gPressEnter;\r
+  Context->EmptyString          = gEmptyString;\r
+  Context->AreYouSure           = gAreYouSure;\r
+  Context->YesResponse          = gYesResponse;\r
+  Context->NoResponse           = gNoResponse;\r
+  Context->MiniString           = gMiniString;\r
+  Context->PlusString           = gPlusString;\r
+  Context->MinusString          = gMinusString;\r
+  Context->AdjustNumber         = gAdjustNumber;\r
+  Context->SaveChanges          = gSaveChanges;\r
+  Context->OptionMismatch       = gOptionMismatch;\r
+  Context->PromptBlockWidth     = gPromptBlockWidth;\r
+  Context->OptionBlockWidth     = gOptionBlockWidth;\r
+  Context->HelpBlockWidth       = gHelpBlockWidth;\r
+  Context->OldFormSet           = gOldFormSet;\r
+  Context->MenuRefreshHead      = gMenuRefreshHead;\r
+\r
+  CopyMem (&Context->ScreenDimensions, &gScreenDimensions, sizeof (gScreenDimensions));\r
+  CopyMem (&Context->MenuOption, &gMenuOption, sizeof (gMenuOption));\r
+\r
+  //\r
+  // Insert to FormBrowser context list\r
+  //\r
+  InsertHeadList (&gBrowserContextList, &Context->Link);\r
+}\r
+\r
+\r
+/**\r
+  Restore globals used by previous call to SendForm().\r
+\r
+**/\r
+VOID\r
+RestoreBrowserContext (\r
+  VOID\r
+  )\r
+{\r
+  LIST_ENTRY       *Link;\r
+  BROWSER_CONTEXT  *Context;\r
+\r
+  ASSERT (gBrowserContextCount != 0);\r
+  gBrowserContextCount--;\r
+  if (gBrowserContextCount == 0) {\r
+    //\r
+    // This is not reentry of SendForm(), no context to restore\r
+    //\r
+    return;\r
+  }\r
+\r
+  ASSERT (!IsListEmpty (&gBrowserContextList));\r
+\r
+  Link = GetFirstNode (&gBrowserContextList);\r
+  Context = BROWSER_CONTEXT_FROM_LINK (Link);\r
+\r
+  //\r
+  // Restore FormBrowser context\r
+  //\r
+  gBannerData           = Context->BannerData;\r
+  gClassOfVfr           = Context->ClassOfVfr;\r
+  gFunctionKeySetting   = Context->FunctionKeySetting;\r
+  gResetRequired        = Context->ResetRequired;\r
+  gNvUpdateRequired     = Context->NvUpdateRequired;\r
+  gDirection            = Context->Direction;\r
+  gFunctionNineString   = Context->FunctionNineString;\r
+  gFunctionTenString    = Context->FunctionTenString;\r
+  gEnterString          = Context->EnterString;\r
+  gEnterCommitString    = Context->EnterCommitString;\r
+  gEnterEscapeString    = Context->EnterEscapeString;\r
+  gEscapeString         = Context->EscapeString;\r
+  gSaveFailed           = Context->SaveFailed;\r
+  gMoveHighlight        = Context->MoveHighlight;\r
+  gMakeSelection        = Context->MakeSelection;\r
+  gDecNumericInput      = Context->DecNumericInput;\r
+  gHexNumericInput      = Context->HexNumericInput;\r
+  gToggleCheckBox       = Context->ToggleCheckBox;\r
+  gPromptForData        = Context->PromptForData;\r
+  gPromptForPassword    = Context->PromptForPassword;\r
+  gPromptForNewPassword = Context->PromptForNewPassword;\r
+  gConfirmPassword      = Context->ConfirmPassword;\r
+  gConfirmError         = Context->ConfirmError;\r
+  gPassowordInvalid     = Context->PassowordInvalid;\r
+  gPressEnter           = Context->PressEnter;\r
+  gEmptyString          = Context->EmptyString;\r
+  gAreYouSure           = Context->AreYouSure;\r
+  gYesResponse          = Context->YesResponse;\r
+  gNoResponse           = Context->NoResponse;\r
+  gMiniString           = Context->MiniString;\r
+  gPlusString           = Context->PlusString;\r
+  gMinusString          = Context->MinusString;\r
+  gAdjustNumber         = Context->AdjustNumber;\r
+  gSaveChanges          = Context->SaveChanges;\r
+  gOptionMismatch       = Context->OptionMismatch;\r
+  gPromptBlockWidth     = Context->PromptBlockWidth;\r
+  gOptionBlockWidth     = Context->OptionBlockWidth;\r
+  gHelpBlockWidth       = Context->HelpBlockWidth;\r
+  gOldFormSet           = Context->OldFormSet;\r
+  gMenuRefreshHead      = Context->MenuRefreshHead;\r
+\r
+  CopyMem (&gScreenDimensions, &Context->ScreenDimensions, sizeof (gScreenDimensions));\r
+  CopyMem (&gMenuOption, &Context->MenuOption, sizeof (gMenuOption));\r
+\r
+  //\r
+  // Remove from FormBrowser context list\r
+  //\r
+  RemoveEntryList (&Context->Link);\r
+  gBS->FreePool (Context);\r
+}\r
index 3fc7ed2816b8c765d6548e208548b242161341a4..d375b2155136dbe5493293be7afeabb661792180 100644 (file)
@@ -443,6 +443,64 @@ typedef struct {
   LIST_ENTRY                      FormListHead;         // Form list (FORM_BROWSER_FORM)\r
 } FORM_BROWSER_FORMSET;\r
 \r
   LIST_ENTRY                      FormListHead;         // Form list (FORM_BROWSER_FORM)\r
 } FORM_BROWSER_FORMSET;\r
 \r
+#define BROWSER_CONTEXT_SIGNATURE  SIGNATURE_32 ('B', 'C', 'T', 'X')\r
+\r
+typedef struct {\r
+  UINTN                 Signature;\r
+  LIST_ENTRY            Link;\r
+\r
+  //\r
+  // Globals defined in Setup.c\r
+  //\r
+  BANNER_DATA           *BannerData;\r
+  UINTN                 ClassOfVfr;\r
+  UINTN                 FunctionKeySetting;\r
+  BOOLEAN               ResetRequired;\r
+  BOOLEAN               NvUpdateRequired;\r
+  UINT16                Direction;\r
+  EFI_SCREEN_DESCRIPTOR ScreenDimensions;\r
+  CHAR16                *FunctionNineString;\r
+  CHAR16                *FunctionTenString;\r
+  CHAR16                *EnterString;\r
+  CHAR16                *EnterCommitString;\r
+  CHAR16                *EnterEscapeString;\r
+  CHAR16                *EscapeString;\r
+  CHAR16                *SaveFailed;\r
+  CHAR16                *MoveHighlight;\r
+  CHAR16                *MakeSelection;\r
+  CHAR16                *DecNumericInput;\r
+  CHAR16                *HexNumericInput;\r
+  CHAR16                *ToggleCheckBox;\r
+  CHAR16                *PromptForData;\r
+  CHAR16                *PromptForPassword;\r
+  CHAR16                *PromptForNewPassword;\r
+  CHAR16                *ConfirmPassword;\r
+  CHAR16                *ConfirmError;\r
+  CHAR16                *PassowordInvalid;\r
+  CHAR16                *PressEnter;\r
+  CHAR16                *EmptyString;\r
+  CHAR16                *AreYouSure;\r
+  CHAR16                *YesResponse;\r
+  CHAR16                *NoResponse;\r
+  CHAR16                *MiniString;\r
+  CHAR16                *PlusString;\r
+  CHAR16                *MinusString;\r
+  CHAR16                *AdjustNumber;\r
+  CHAR16                *SaveChanges;\r
+  CHAR16                *OptionMismatch;\r
+  CHAR16                PromptBlockWidth;\r
+  CHAR16                OptionBlockWidth;\r
+  CHAR16                HelpBlockWidth;\r
+  FORM_BROWSER_FORMSET  *OldFormSet;\r
+\r
+  //\r
+  // Globals defined in Ui.c\r
+  //\r
+  LIST_ENTRY           MenuOption;\r
+  VOID                 *MenuRefreshHead;\r
+} BROWSER_CONTEXT;\r
+\r
+#define BROWSER_CONTEXT_FROM_LINK(a)  CR (a, BROWSER_CONTEXT, Link, BROWSER_CONTEXT_SIGNATURE)\r
 \r
 extern EFI_HII_DATABASE_PROTOCOL         *mHiiDatabase;\r
 extern EFI_HII_STRING_PROTOCOL           *mHiiString;\r
 \r
 extern EFI_HII_DATABASE_PROTOCOL         *mHiiDatabase;\r
 extern EFI_HII_STRING_PROTOCOL           *mHiiString;\r
@@ -457,8 +515,6 @@ extern BOOLEAN               gNvUpdateRequired;
 extern EFI_HII_HANDLE        gHiiHandle;\r
 extern UINT16                gDirection;\r
 extern EFI_SCREEN_DESCRIPTOR gScreenDimensions;\r
 extern EFI_HII_HANDLE        gHiiHandle;\r
 extern UINT16                gDirection;\r
 extern EFI_SCREEN_DESCRIPTOR gScreenDimensions;\r
-extern BOOLEAN               gUpArrow;\r
-extern BOOLEAN               gDownArrow;\r
 \r
 extern FORM_BROWSER_FORMSET  *gOldFormSet;\r
 \r
 \r
 extern FORM_BROWSER_FORMSET  *gOldFormSet;\r
 \r
@@ -976,6 +1032,26 @@ GetIfrBinaryData (
   OUT UINT8            **BinaryData\r
   );\r
 \r
   OUT UINT8            **BinaryData\r
   );\r
 \r
+/**\r
+  Save globals used by previous call to SendForm(). SendForm() may be called from \r
+  HiiConfigAccess.Callback(), this will cause SendForm() be reentried.\r
+  So, save globals of previous call to SendForm() and restore them upon exit.\r
+\r
+**/\r
+VOID\r
+SaveBrowserContext (\r
+  VOID\r
+  );\r
+\r
+/**\r
+  Restore globals used by previous call to SendForm().\r
+\r
+**/\r
+VOID\r
+RestoreBrowserContext (\r
+  VOID\r
+  );\r
+\r
 /**\r
   This is the routine which an external caller uses to direct the browser\r
   where to obtain it's information.\r
 /**\r
   This is the routine which an external caller uses to direct the browser\r
   where to obtain it's information.\r
index 62c40e3606e9c1c8066f3e3e330b9853e0844be0..dacc472652dcfa6b8c249aa7f98995cc6b14983d 100644 (file)
@@ -15,7 +15,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include "Ui.h"\r
 #include "Setup.h"\r
 \r
 #include "Ui.h"\r
 #include "Setup.h"\r
 \r
-LIST_ENTRY          Menu;\r
+LIST_ENTRY          gMenuOption;\r
 LIST_ENTRY          gMenuList = INITIALIZE_LIST_HEAD_VARIABLE (gMenuList);\r
 MENU_REFRESH_ENTRY  *gMenuRefreshHead;\r
 \r
 LIST_ENTRY          gMenuList = INITIALIZE_LIST_HEAD_VARIABLE (gMenuList);\r
 MENU_REFRESH_ENTRY  *gMenuRefreshHead;\r
 \r
@@ -145,7 +145,7 @@ UiInitMenu (
   VOID\r
   )\r
 {\r
   VOID\r
   )\r
 {\r
-  InitializeListHead (&Menu);\r
+  InitializeListHead (&gMenuOption);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -160,8 +160,8 @@ UiFreeMenu (
 {\r
   UI_MENU_OPTION  *MenuOption;\r
 \r
 {\r
   UI_MENU_OPTION  *MenuOption;\r
 \r
-  while (!IsListEmpty (&Menu)) {\r
-    MenuOption = MENU_OPTION_FROM_LINK (Menu.ForwardLink);\r
+  while (!IsListEmpty (&gMenuOption)) {\r
+    MenuOption = MENU_OPTION_FROM_LINK (gMenuOption.ForwardLink);\r
     RemoveEntryList (&MenuOption->Link);\r
 \r
     //\r
     RemoveEntryList (&MenuOption->Link);\r
 \r
     //\r
@@ -645,7 +645,7 @@ UiAddMenuOption (
       MenuOption->ReadOnly = TRUE;\r
     }\r
 \r
       MenuOption->ReadOnly = TRUE;\r
     }\r
 \r
-    InsertTailList (&Menu, &MenuOption->Link);\r
+    InsertTailList (&gMenuOption, &MenuOption->Link);\r
   }\r
 \r
   return MenuOption;\r
   }\r
 \r
   return MenuOption;\r
@@ -1353,11 +1353,11 @@ ValueIsScroll (
 \r
   Temp = Direction ? CurrentPos->BackLink : CurrentPos->ForwardLink;\r
 \r
 \r
   Temp = Direction ? CurrentPos->BackLink : CurrentPos->ForwardLink;\r
 \r
-  if (Temp == &Menu) {\r
+  if (Temp == &gMenuOption) {\r
     return TRUE;\r
   }\r
 \r
     return TRUE;\r
   }\r
 \r
-  for (; Temp != &Menu; Temp = Direction ? Temp->BackLink : Temp->ForwardLink) {\r
+  for (; Temp != &gMenuOption; Temp = Direction ? Temp->BackLink : Temp->ForwardLink) {\r
     MenuOption = MENU_OPTION_FROM_LINK (Temp);\r
     if (IsSelectable (MenuOption)) {\r
       return FALSE;\r
     MenuOption = MENU_OPTION_FROM_LINK (Temp);\r
     if (IsSelectable (MenuOption)) {\r
       return FALSE;\r
@@ -1399,7 +1399,7 @@ MoveToNextStatement (
     if (IsSelectable (NextMenuOption)) {\r
       break;\r
     }\r
     if (IsSelectable (NextMenuOption)) {\r
       break;\r
     }\r
-    if ((GoUp ? Pos->BackLink : Pos->ForwardLink) == &Menu) {\r
+    if ((GoUp ? Pos->BackLink : Pos->ForwardLink) == &gMenuOption) {\r
       HitEnd = TRUE;\r
       break;\r
     }\r
       HitEnd = TRUE;\r
       break;\r
     }\r
@@ -1420,7 +1420,7 @@ MoveToNextStatement (
       if (IsSelectable (NextMenuOption)) {\r
         break;\r
       }\r
       if (IsSelectable (NextMenuOption)) {\r
         break;\r
       }\r
-      if ((!GoUp ? Pos->BackLink : Pos->ForwardLink) == &Menu) {\r
+      if ((!GoUp ? Pos->BackLink : Pos->ForwardLink) == &gMenuOption) {\r
         ASSERT (FALSE);\r
         break;\r
       }\r
         ASSERT (FALSE);\r
         break;\r
       }\r
@@ -1643,6 +1643,8 @@ UiDisplayMenu (
   BOOLEAN                         NewLine;\r
   BOOLEAN                         Repaint;\r
   BOOLEAN                         SavedValue;\r
   BOOLEAN                         NewLine;\r
   BOOLEAN                         Repaint;\r
   BOOLEAN                         SavedValue;\r
+  BOOLEAN                         UpArrow;\r
+  BOOLEAN                         DownArrow;\r
   EFI_STATUS                      Status;\r
   EFI_INPUT_KEY                   Key;\r
   LIST_ENTRY                      *Link;\r
   EFI_STATUS                      Status;\r
   EFI_INPUT_KEY                   Key;\r
   LIST_ENTRY                      *Link;\r
@@ -1679,8 +1681,8 @@ UiDisplayMenu (
   DefaultId           = 0;\r
 \r
   OutputString        = NULL;\r
   DefaultId           = 0;\r
 \r
   OutputString        = NULL;\r
-  gUpArrow            = FALSE;\r
-  gDownArrow          = FALSE;\r
+  UpArrow             = FALSE;\r
+  DownArrow           = FALSE;\r
   SkipValue           = 0;\r
   OldSkipValue        = 0;\r
   MenuRefreshEntry    = gMenuRefreshHead;\r
   SkipValue           = 0;\r
   OldSkipValue        = 0;\r
   MenuRefreshEntry    = gMenuRefreshHead;\r
@@ -1708,7 +1710,7 @@ UiDisplayMenu (
   Selection->OptionCol = gPromptBlockWidth + 1 + LocalScreen.LeftColumn;\r
   Selection->Statement = NULL;\r
 \r
   Selection->OptionCol = gPromptBlockWidth + 1 + LocalScreen.LeftColumn;\r
   Selection->Statement = NULL;\r
 \r
-  TopOfScreen = Menu.ForwardLink;\r
+  TopOfScreen = gMenuOption.ForwardLink;\r
   Repaint     = TRUE;\r
   MenuOption  = NULL;\r
 \r
   Repaint     = TRUE;\r
   MenuOption  = NULL;\r
 \r
@@ -1734,7 +1736,7 @@ UiDisplayMenu (
   //\r
   // Get user's selection\r
   //\r
   //\r
   // Get user's selection\r
   //\r
-  NewPos = Menu.ForwardLink;\r
+  NewPos = gMenuOption.ForwardLink;\r
 \r
   gST->ConOut->EnableCursor (gST->ConOut, FALSE);\r
   UpdateStatusBar (REFRESH_STATUS_BAR, (UINT8) 0, TRUE);\r
 \r
   gST->ConOut->EnableCursor (gST->ConOut, FALSE);\r
   UpdateStatusBar (REFRESH_STATUS_BAR, (UINT8) 0, TRUE);\r
@@ -1744,7 +1746,7 @@ UiDisplayMenu (
   while (TRUE) {\r
     switch (ControlFlag) {\r
     case CfInitialization:\r
   while (TRUE) {\r
     switch (ControlFlag) {\r
     case CfInitialization:\r
-      if (IsListEmpty (&Menu)) {\r
+      if (IsListEmpty (&gMenuOption)) {\r
         ControlFlag = CfReadKey;\r
       } else {\r
         ControlFlag = CfCheckSelection;\r
         ControlFlag = CfReadKey;\r
       } else {\r
         ControlFlag = CfCheckSelection;\r
@@ -1766,8 +1768,8 @@ UiDisplayMenu (
         //\r
         // Display menu\r
         //\r
         //\r
         // Display menu\r
         //\r
-        gDownArrow      = FALSE;\r
-        gUpArrow        = FALSE;\r
+        DownArrow       = FALSE;\r
+        UpArrow         = FALSE;\r
         Row             = TopRow;\r
 \r
         Temp            = SkipValue;\r
         Row             = TopRow;\r
 \r
         Temp            = SkipValue;\r
@@ -1784,7 +1786,7 @@ UiDisplayMenu (
         UiFreeRefreshList ();\r
         MinRefreshInterval = 0;\r
 \r
         UiFreeRefreshList ();\r
         MinRefreshInterval = 0;\r
 \r
-        for (Link = TopOfScreen; Link != &Menu; Link = Link->ForwardLink) {\r
+        for (Link = TopOfScreen; Link != &gMenuOption; Link = Link->ForwardLink) {\r
           MenuOption          = MENU_OPTION_FROM_LINK (Link);\r
           MenuOption->Row     = Row;\r
           MenuOption->Col     = Col;\r
           MenuOption          = MENU_OPTION_FROM_LINK (Link);\r
           MenuOption->Row     = Row;\r
           MenuOption->Col     = Col;\r
@@ -1989,7 +1991,7 @@ UiDisplayMenu (
 \r
           if (Row > BottomRow) {\r
             if (!ValueIsScroll (FALSE, Link)) {\r
 \r
           if (Row > BottomRow) {\r
             if (!ValueIsScroll (FALSE, Link)) {\r
-              gDownArrow = TRUE;\r
+              DownArrow = TRUE;\r
             }\r
 \r
             Row = BottomRow + 1;\r
             }\r
 \r
             Row = BottomRow + 1;\r
@@ -1998,10 +2000,10 @@ UiDisplayMenu (
         }\r
 \r
         if (!ValueIsScroll (TRUE, TopOfScreen)) {\r
         }\r
 \r
         if (!ValueIsScroll (TRUE, TopOfScreen)) {\r
-          gUpArrow = TRUE;\r
+          UpArrow = TRUE;\r
         }\r
 \r
         }\r
 \r
-        if (gUpArrow) {\r
+        if (UpArrow) {\r
           gST->ConOut->SetAttribute (gST->ConOut, ARROW_TEXT | ARROW_BACKGROUND);\r
           PrintAt (\r
             LocalScreen.LeftColumn + gPromptBlockWidth + gOptionBlockWidth + 1,\r
           gST->ConOut->SetAttribute (gST->ConOut, ARROW_TEXT | ARROW_BACKGROUND);\r
           PrintAt (\r
             LocalScreen.LeftColumn + gPromptBlockWidth + gOptionBlockWidth + 1,\r
@@ -2012,7 +2014,7 @@ UiDisplayMenu (
           gST->ConOut->SetAttribute (gST->ConOut, FIELD_TEXT | FIELD_BACKGROUND);\r
         }\r
 \r
           gST->ConOut->SetAttribute (gST->ConOut, FIELD_TEXT | FIELD_BACKGROUND);\r
         }\r
 \r
-        if (gDownArrow) {\r
+        if (DownArrow) {\r
           gST->ConOut->SetAttribute (gST->ConOut, ARROW_TEXT | ARROW_BACKGROUND);\r
           PrintAt (\r
             LocalScreen.LeftColumn + gPromptBlockWidth + gOptionBlockWidth + 1,\r
           gST->ConOut->SetAttribute (gST->ConOut, ARROW_TEXT | ARROW_BACKGROUND);\r
           PrintAt (\r
             LocalScreen.LeftColumn + gPromptBlockWidth + gOptionBlockWidth + 1,\r
@@ -2043,10 +2045,10 @@ UiDisplayMenu (
       Repaint     = FALSE;\r
 \r
       if (Selection->QuestionId != 0) {\r
       Repaint     = FALSE;\r
 \r
       if (Selection->QuestionId != 0) {\r
-        NewPos = Menu.ForwardLink;\r
+        NewPos = gMenuOption.ForwardLink;\r
         SavedMenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
 \r
         SavedMenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
 \r
-        while (SavedMenuOption->ThisTag->QuestionId != Selection->QuestionId && NewPos->ForwardLink != &Menu) {\r
+        while (SavedMenuOption->ThisTag->QuestionId != Selection->QuestionId && NewPos->ForwardLink != &gMenuOption) {\r
           NewPos     = NewPos->ForwardLink;\r
           SavedMenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
         }\r
           NewPos     = NewPos->ForwardLink;\r
           SavedMenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
         }\r
@@ -2439,21 +2441,21 @@ UiDisplayMenu (
         // If the screen has no menu items, and the user didn't select UiReset\r
         // ignore the selection and go back to reading keys.\r
         //\r
         // If the screen has no menu items, and the user didn't select UiReset\r
         // ignore the selection and go back to reading keys.\r
         //\r
-        if (IsListEmpty (&Menu)) {\r
+        if (IsListEmpty (&gMenuOption)) {\r
           ControlFlag = CfReadKey;\r
           break;\r
         }\r
         //\r
         // if there is nothing logical to place a cursor on, just move on to wait for a key.\r
         //\r
           ControlFlag = CfReadKey;\r
           break;\r
         }\r
         //\r
         // if there is nothing logical to place a cursor on, just move on to wait for a key.\r
         //\r
-        for (Link = Menu.ForwardLink; Link != &Menu; Link = Link->ForwardLink) {\r
+        for (Link = gMenuOption.ForwardLink; Link != &gMenuOption; Link = Link->ForwardLink) {\r
           NextMenuOption = MENU_OPTION_FROM_LINK (Link);\r
           if (IsSelectable (NextMenuOption)) {\r
             break;\r
           }\r
         }\r
 \r
           NextMenuOption = MENU_OPTION_FROM_LINK (Link);\r
           if (IsSelectable (NextMenuOption)) {\r
             break;\r
           }\r
         }\r
 \r
-        if (Link == &Menu) {\r
+        if (Link == &gMenuOption) {\r
           ControlFlag = CfPrepareToReadKey;\r
           break;\r
         }\r
           ControlFlag = CfPrepareToReadKey;\r
           break;\r
         }\r
@@ -2744,7 +2746,7 @@ UiDisplayMenu (
 \r
       SavedListEntry = TopOfScreen;\r
 \r
 \r
       SavedListEntry = TopOfScreen;\r
 \r
-      if (NewPos->BackLink != &Menu) {\r
+      if (NewPos->BackLink != &gMenuOption) {\r
         NewLine = TRUE;\r
         //\r
         // Adjust Date/Time position before we advance forward.\r
         NewLine = TRUE;\r
         //\r
         // Adjust Date/Time position before we advance forward.\r
@@ -2754,7 +2756,7 @@ UiDisplayMenu (
         //\r
         // Caution that we have already rewind to the top, don't go backward in this situation.\r
         //\r
         //\r
         // Caution that we have already rewind to the top, don't go backward in this situation.\r
         //\r
-        if (NewPos->BackLink != &Menu) {\r
+        if (NewPos->BackLink != &gMenuOption) {\r
           NewPos = NewPos->BackLink;\r
         }\r
 \r
           NewPos = NewPos->BackLink;\r
         }\r
 \r
@@ -2799,8 +2801,8 @@ UiDisplayMenu (
           // it means that we hit the begining MenuOption that can be focused\r
           // so we simply scroll to the top\r
           //\r
           // it means that we hit the begining MenuOption that can be focused\r
           // so we simply scroll to the top\r
           //\r
-          if (SavedListEntry != Menu.ForwardLink) {\r
-            TopOfScreen = Menu.ForwardLink;\r
+          if (SavedListEntry != gMenuOption.ForwardLink) {\r
+            TopOfScreen = gMenuOption.ForwardLink;\r
             Repaint     = TRUE;\r
           }\r
         }\r
             Repaint     = TRUE;\r
           }\r
         }\r
@@ -2830,7 +2832,7 @@ UiDisplayMenu (
     case CfUiPageUp:\r
       ControlFlag     = CfCheckSelection;\r
 \r
     case CfUiPageUp:\r
       ControlFlag     = CfCheckSelection;\r
 \r
-      if (NewPos->BackLink == &Menu) {\r
+      if (NewPos->BackLink == &gMenuOption) {\r
         NewLine = FALSE;\r
         Repaint = FALSE;\r
         break;\r
         NewLine = FALSE;\r
         Repaint = FALSE;\r
         break;\r
@@ -2841,7 +2843,7 @@ UiDisplayMenu (
       Link      = TopOfScreen;\r
       PreviousMenuOption = MENU_OPTION_FROM_LINK (Link);\r
       Index = BottomRow;\r
       Link      = TopOfScreen;\r
       PreviousMenuOption = MENU_OPTION_FROM_LINK (Link);\r
       Index = BottomRow;\r
-      while ((Index >= TopRow) && (Link->BackLink != &Menu)) {\r
+      while ((Index >= TopRow) && (Link->BackLink != &gMenuOption)) {\r
         Index = Index - PreviousMenuOption->Skip;\r
         Link = Link->BackLink;\r
         PreviousMenuOption = MENU_OPTION_FROM_LINK (Link);\r
         Index = Index - PreviousMenuOption->Skip;\r
         Link = Link->BackLink;\r
         PreviousMenuOption = MENU_OPTION_FROM_LINK (Link);\r
@@ -2859,7 +2861,7 @@ UiDisplayMenu (
         // This happens when there is no MenuOption can be focused from\r
         // Current MenuOption to the first MenuOption\r
         //\r
         // This happens when there is no MenuOption can be focused from\r
         // Current MenuOption to the first MenuOption\r
         //\r
-        TopOfScreen = Menu.ForwardLink;\r
+        TopOfScreen = gMenuOption.ForwardLink;\r
       }\r
       Index += Difference;\r
       if (Index < TopRow) {\r
       }\r
       Index += Difference;\r
       if (Index < TopRow) {\r
@@ -2884,7 +2886,7 @@ UiDisplayMenu (
     case CfUiPageDown:\r
       ControlFlag     = CfCheckSelection;\r
 \r
     case CfUiPageDown:\r
       ControlFlag     = CfCheckSelection;\r
 \r
-      if (NewPos->ForwardLink == &Menu) {\r
+      if (NewPos->ForwardLink == &gMenuOption) {\r
         NewLine = FALSE;\r
         Repaint = FALSE;\r
         break;\r
         NewLine = FALSE;\r
         Repaint = FALSE;\r
         break;\r
@@ -2895,7 +2897,7 @@ UiDisplayMenu (
       Link    = TopOfScreen;\r
       NextMenuOption = MENU_OPTION_FROM_LINK (Link);\r
       Index = TopRow;\r
       Link    = TopOfScreen;\r
       NextMenuOption = MENU_OPTION_FROM_LINK (Link);\r
       Index = TopRow;\r
-      while ((Index <= BottomRow) && (Link->ForwardLink != &Menu)) {\r
+      while ((Index <= BottomRow) && (Link->ForwardLink != &gMenuOption)) {\r
         Index = Index + NextMenuOption->Skip;\r
         Link           = Link->ForwardLink;\r
         NextMenuOption = MENU_OPTION_FROM_LINK (Link);\r
         Index = Index + NextMenuOption->Skip;\r
         Link           = Link->ForwardLink;\r
         NextMenuOption = MENU_OPTION_FROM_LINK (Link);\r
@@ -2940,7 +2942,7 @@ UiDisplayMenu (
       SavedListEntry = NewPos;\r
       DistanceValue  = AdjustDateAndTimePosition (FALSE, &NewPos);\r
 \r
       SavedListEntry = NewPos;\r
       DistanceValue  = AdjustDateAndTimePosition (FALSE, &NewPos);\r
 \r
-      if (NewPos->ForwardLink != &Menu) {\r
+      if (NewPos->ForwardLink != &gMenuOption) {\r
         MenuOption      = MENU_OPTION_FROM_LINK (NewPos);\r
         NewLine         = TRUE;\r
         NewPos          = NewPos->ForwardLink;\r
         MenuOption      = MENU_OPTION_FROM_LINK (NewPos);\r
         NewLine         = TRUE;\r
         NewPos          = NewPos->ForwardLink;\r
index 881675881af5048f69ea488eb1bb593308b0735f..9d1bbae70b45a477c5a968e1bf762a48d4767ac6 100644 (file)
@@ -190,6 +190,7 @@ typedef struct {
 } SCREEN_OPERATION_T0_CONTROL_FLAG;\r
 \r
 \r
 } SCREEN_OPERATION_T0_CONTROL_FLAG;\r
 \r
 \r
+extern LIST_ENTRY          gMenuOption;\r
 extern MENU_REFRESH_ENTRY  *gMenuRefreshHead;\r
 extern UI_MENU_SELECTION   *gCurrentSelection;\r
 extern BOOLEAN             mHiiPackageListUpdated;\r
 extern MENU_REFRESH_ENTRY  *gMenuRefreshHead;\r
 extern UI_MENU_SELECTION   *gCurrentSelection;\r
 extern BOOLEAN             mHiiPackageListUpdated;\r