BrowserCallback\r
},\r
{\r
- UnicodeVSPrint\r
+ UnicodeVSPrint,\r
+ UnicodeVSPrintAsciiFormat,\r
+ UnicodeValueToString, \r
+ AsciiVSPrint, \r
+ AsciiVSPrintUnicodeFormat,\r
+ AsciiValueToString\r
}\r
};\r
\r
BOOLEAN gResetRequired;\r
BOOLEAN gNvUpdateRequired;\r
EFI_HII_HANDLE gHiiHandle;\r
-BOOLEAN gFirstIn;\r
UINT16 gDirection;\r
EFI_SCREEN_DESCRIPTOR gScreenDimensions;\r
BOOLEAN gUpArrow;\r
CHAR16 *gFunctionTenString;\r
CHAR16 *gEnterString;\r
CHAR16 *gEnterCommitString;\r
+CHAR16 *gEnterEscapeString;\r
CHAR16 *gEscapeString;\r
CHAR16 *gSaveFailed;\r
CHAR16 *gMoveHighlight;\r
CHAR16 *gPlusString;\r
CHAR16 *gMinusString;\r
CHAR16 *gAdjustNumber;\r
+CHAR16 *gSaveChanges;\r
+CHAR16 *gOptionMismatch;\r
\r
CHAR16 gPromptBlockWidth;\r
CHAR16 gOptionBlockWidth;\r
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest OPTIONAL\r
)\r
{\r
- EFI_STATUS Status;\r
- UI_MENU_SELECTION *Selection;\r
- UINTN Index;\r
- FORM_BROWSER_FORMSET *FormSet;\r
+ EFI_STATUS Status;\r
+ UI_MENU_SELECTION *Selection;\r
+ UINTN Index;\r
+ FORM_BROWSER_FORMSET *FormSet;\r
+ EFI_CONSOLE_CONTROL_PROTOCOL *ConsoleControl;\r
\r
Status = EFI_SUCCESS;\r
ZeroMem (&gScreenDimensions, sizeof (EFI_SCREEN_DESCRIPTOR));\r
//\r
// Ensure we are in Text mode\r
//\r
- if (gFirstIn) {\r
- gFirstIn = FALSE;\r
- gST->ConOut->SetAttribute (gST->ConOut, EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK));\r
- DisableQuietBoot ();\r
+ gST->ConOut->SetAttribute (gST->ConOut, EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK));\r
+\r
+ Status = gBS->LocateProtocol (&gEfiConsoleControlProtocolGuid, NULL, (VOID **) &ConsoleControl);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
}\r
+ //\r
+ // Set console control to text mode.\r
+ //\r
+ ConsoleControl->SetMode (ConsoleControl, EfiConsoleControlScreenText);\r
\r
for (Index = 0; Index < HandleCount; Index++) {\r
Selection = AllocateZeroPool (sizeof (UI_MENU_SELECTION));\r
\r
} while (Selection->Action == UI_ACTION_REFRESH_FORMSET);\r
\r
- gBS->FreePool (Selection);\r
+ FreePool (Selection);\r
}\r
\r
if (ActionRequest != NULL) {\r
if (*ResultsDataSize < BufferSize) {\r
*ResultsDataSize = BufferSize;\r
\r
- gBS->FreePool (ConfigResp);\r
+ FreePool (ConfigResp);\r
return EFI_BUFFER_TOO_SMALL;\r
}\r
\r
*ResultsDataSize = BufferSize;\r
CopyMem (ResultsData, StrPtr, BufferSize);\r
\r
- gBS->FreePool (ConfigResp);\r
+ FreePool (ConfigResp);\r
} else {\r
//\r
// Prepare <ConfigResp>\r
//\r
// Initialize Driver private data\r
//\r
- gFirstIn = TRUE;\r
BannerData = AllocateZeroPool (sizeof (BANNER_DATA));\r
ASSERT (BannerData != NULL);\r
\r
//\r
// Install Print protocol\r
//\r
+ Status = gBS->InstallProtocolInterface (\r
+ &mPrivateData.Handle,\r
+ &gEfiPrint2ProtocolGuid,\r
+ EFI_NATIVE_INTERFACE,\r
+ &mPrivateData.Print\r
+ );\r
+\r
+ //\r
+ // Install Ecp Print protocol, which is defined in\r
+ // Edk\Foundation\Protocol\Print\Print.h with protocol\r
+ // GUID of { 0xdf2d868e, 0x32fc, 0x4cf0, {0x8e, 0x6b, 0xff, 0xd9, 0x5d, 0x13, 0x43, 0xd0 }}\r
+ // This is support previous module that written to consume this protocol.\r
+ // \r
Status = gBS->InstallProtocolInterface (\r
&mPrivateData.Handle,\r
&gEfiPrintProtocolGuid,\r
Status = HiiLibGetString (HiiHandle, Token, String, &BufferLength);\r
\r
if (Status == EFI_BUFFER_TOO_SMALL) {\r
- gBS->FreePool (String);\r
+ FreePool (String);\r
String = AllocateZeroPool (BufferLength);\r
ASSERT (String != NULL);\r
\r
IN CHAR16 *Src\r
)\r
{\r
- SafeFreePool (*Dest);\r
+ if (*Dest != NULL) {\r
+ FreePool (*Dest);\r
+ }\r
*Dest = AllocateCopyPool (StrSize (Src), Src);\r
ASSERT (*Dest != NULL);\r
}\r
StrCpy (NewString, *Dest);\r
StrCat (NewString, Src);\r
\r
- gBS->FreePool (*Dest);\r
+ FreePool (*Dest);\r
*Dest = NewString;\r
}\r
\r
Node = NAME_VALUE_NODE_FROM_LINK (Link);\r
\r
if (StrCmp (Name, Node->Name) == 0) {\r
- SafeFreePool (Node->EditValue);\r
+ if (Node->EditValue != NULL) {\r
+ FreePool (Node->EditValue);\r
+ }\r
Node->EditValue = AllocateCopyPool (StrSize (Value), Value);\r
ASSERT (Node->EditValue != NULL);\r
return EFI_SUCCESS;\r
CHAR16 *Progress;\r
CHAR16 *Result;\r
CHAR16 *Value;\r
+ CHAR16 *StringPtr;\r
UINTN Length;\r
BOOLEAN IsBufferStorage;\r
BOOLEAN IsString;\r
Status = HexStringToBuf (Dst, &StorageWidth, Value, NULL);\r
}\r
\r
- gBS->FreePool (Value);\r
+ FreePool (Value);\r
}\r
} else {\r
//\r
Value = Value + 6;\r
}\r
if (*Value != '=') {\r
- gBS->FreePool (Result);\r
+ FreePool (Result);\r
return EFI_NOT_FOUND;\r
}\r
//\r
// Skip '=', point to value\r
//\r
Value = Value + 1;\r
+\r
+ //\r
+ // Suppress <AltResp> if any\r
+ //\r
+ StringPtr = Value;\r
+ while (*StringPtr != L'\0' && *StringPtr != L'&') {\r
+ StringPtr++;\r
+ }\r
+ *StringPtr = L'\0';\r
+\r
if (!IsBufferStorage && IsString) {\r
//\r
// Convert Config String to Unicode String, e.g "0041004200430044" => "ABCD"\r
} else {\r
Status = HexStringToBuf (Dst, &StorageWidth, Value, NULL);\r
if (EFI_ERROR (Status)) {\r
- gBS->FreePool (Result);\r
+ FreePool (Result);\r
return Status;\r
}\r
}\r
} else {\r
SetValueByName (Storage, Question->VariableName, Value);\r
}\r
- gBS->FreePool (Result);\r
+ FreePool (Result);\r
}\r
\r
return Status;\r
}\r
\r
Status = SetValueByName (Storage, Question->VariableName, Value);\r
- gBS->FreePool (Value);\r
+ FreePool (Value);\r
}\r
\r
if (!Cached) {\r
&Progress\r
);\r
if (EFI_ERROR (Status)) {\r
- gBS->FreePool (ConfigResp);\r
+ FreePool (ConfigResp);\r
return Status;\r
}\r
}\r
- gBS->FreePool (ConfigResp);\r
+ FreePool (ConfigResp);\r
\r
//\r
// Synchronize shadow Buffer\r
do {\r
CreateDialog (4, TRUE, 0, NULL, &Key, gEmptyString, PopUp, gPressEnter, gEmptyString);\r
} while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);\r
- gBS->FreePool (PopUp);\r
+ FreePool (PopUp);\r
}\r
\r
return EFI_NOT_READY;\r
&Progress\r
);\r
if (EFI_ERROR (Status)) {\r
- gBS->FreePool (ConfigResp);\r
+ FreePool (ConfigResp);\r
return Status;\r
}\r
}\r
- gBS->FreePool (ConfigResp);\r
+ FreePool (ConfigResp);\r
\r
//\r
// Config success, update storage shadow Buffer\r
Question = FORM_BROWSER_STATEMENT_FROM_LINK (Link);\r
Link = GetNextNode (&Form->StatementListHead, Link);\r
\r
+ //\r
+ // If Question is suppressed, don't reset it to default\r
+ //\r
+ if (Question->SuppressExpression != NULL) {\r
+ Status = EvaluateExpression (FormSet, Form, Question->SuppressExpression);\r
+ if (!EFI_ERROR (Status) && Question->SuppressExpression->Result.Value.b) {\r
+ continue;\r
+ }\r
+ }\r
+\r
//\r
// Reset Question to its default value\r
//\r
}\r
\r
Status = ConfigRespToStorage (Storage, Result);\r
- gBS->FreePool (Result);\r
+ FreePool (Result);\r
return Status;\r
}\r
\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
-\r
+ ASSERT (HiiPackageList != NULL);\r
+ \r
//\r
// Get Form package from this HII package List\r
//\r
Package = ((UINT8 *) HiiPackageList) + Offset;\r
CopyMem (&PackageHeader, Package, sizeof (EFI_HII_PACKAGE_HEADER));\r
\r
- if (PackageHeader.Type == EFI_HII_PACKAGE_FORM) {\r
+ if (PackageHeader.Type == EFI_HII_PACKAGE_FORMS) {\r
//\r
// Search FormSet in this Form Package\r
//\r
//\r
// Form package not found in this Package List\r
//\r
- gBS->FreePool (HiiPackageList);\r
+ FreePool (HiiPackageList);\r
return EFI_NOT_FOUND;\r
}\r
\r
*BinaryLength = PackageHeader.Length - Offset2;\r
*BinaryData = AllocateCopyPool (*BinaryLength, OpCodeData);\r
\r
- gBS->FreePool (HiiPackageList);\r
+ FreePool (HiiPackageList);\r
\r
if (*BinaryData == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r