/*++\r
\r
-Copyright (c) 2006, Intel Corporation \r
-All rights reserved. This program and the accompanying materials \r
-are licensed and made available under the terms and conditions of the BSD License \r
-which accompanies this distribution. The full text of the license may be found at \r
-http://opensource.org/licenses/bsd-license.php \r
- \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+Copyright (c) 2006 - 2007, Intel Corporation\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
Module Name:\r
\r
#include "Ui.h"\r
#include "Colors.h"\r
\r
-#ifndef EFI_MAX\r
#define EFI_MAX(_a, _b) ((_a) > (_b) ? (_a) : (_b))\r
-#endif\r
\r
EFI_STATUS\r
-ReadString (\r
+ReadString(\r
IN UI_MENU_OPTION *MenuOption,\r
OUT CHAR16 *StringPtr\r
)\r
)\r
{\r
EFI_STATUS Status;\r
- UINTN PasswordSize;\r
UINTN ScreenSize;\r
CHAR16 NullCharacter;\r
CHAR16 Space[2];\r
UINTN DimensionsWidth;\r
UINTN DimensionsHeight;\r
EFI_IFR_DATA_ENTRY *DataEntry;\r
+ UINTN WidthOfString;\r
\r
DimensionsWidth = gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn;\r
DimensionsHeight = gScreenDimensions.BottomRow - gScreenDimensions.TopRow;\r
\r
VariableDefinition = NULL;\r
- PasswordSize = 0;\r
NullCharacter = CHAR_NULL;\r
Space[0] = L' ';\r
Space[1] = CHAR_NULL;\r
// Upon error, we will likely receive a string to print out\r
// Display error popup\r
//\r
- ScreenSize = EFI_MAX(GetStringWidth (Packet->String), GetStringWidth (gPressEnter)) / 2;\r
+ WidthOfString = GetStringWidth (Packet->String);\r
+ ScreenSize = EFI_MAX(WidthOfString, GetStringWidth (gPressEnter)) / 2;\r
CreatePopUp (ScreenSize, 4, &NullCharacter, Packet->String, gPressEnter, &NullCharacter);\r
gBS->FreePool (Packet);\r
\r
} while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);\r
}\r
\r
- gBS->FreePool (TempString);\r
- gBS->FreePool (TempString2);\r
- return EFI_NOT_READY;\r
+ Status = EFI_NOT_READY;\r
+ goto Done;\r
}\r
}\r
\r
if (Confirmation) {\r
if (EFI_ERROR (Status)) {\r
if (Packet->String == NULL) {\r
- ScreenSize = EFI_MAX (GetStringWidth (gConfirmError), GetStringWidth (gPressEnter)) / 2;\r
+ WidthOfString = GetStringWidth (gConfirmError);\r
+ ScreenSize = EFI_MAX (WidthOfString, GetStringWidth (gPressEnter)) / 2;\r
CreatePopUp (ScreenSize, 4, &NullCharacter, gConfirmError, gPressEnter, &NullCharacter);\r
} else {\r
- ScreenSize = EFI_MAX (GetStringWidth (Packet->String), GetStringWidth (gPressEnter)) / 2;\r
+ WidthOfString = GetStringWidth (Packet->String);\r
+ ScreenSize = EFI_MAX (WidthOfString, GetStringWidth (gPressEnter)) / 2;\r
CreatePopUp (ScreenSize, 4, &NullCharacter, Packet->String, gPressEnter, &NullCharacter);\r
gBS->FreePool (Packet);\r
}\r
Status = WaitForKeyStroke (&Key);\r
\r
if (Key.UnicodeChar == CHAR_CARRIAGE_RETURN) {\r
- gBS->FreePool (TempString);\r
- gBS->FreePool (TempString2);\r
- return EFI_NOT_READY;\r
+ Status = EFI_NOT_READY;\r
+ goto Done;\r
}\r
} while (1);\r
} else {\r
- gBS->FreePool (TempString);\r
- gBS->FreePool (TempString2);\r
- return EFI_NOT_READY;\r
+ Status = EFI_NOT_READY;\r
+ goto Done;\r
}\r
} else {\r
//\r
}\r
\r
if (PromptForPassword && EFI_ERROR (Status)) {\r
- gBS->FreePool (TempString);\r
- gBS->FreePool (TempString2);\r
- return EFI_DEVICE_ERROR;\r
+ Status = EFI_DEVICE_ERROR;\r
+ goto Done;\r
}\r
}\r
}\r
// Otherwise, kick and error box, and return an error\r
//\r
if (StrCmp (TempString, TempString2) == 0) {\r
- gBS->FreePool (TempString);\r
- gBS->FreePool (TempString2);\r
- return EFI_SUCCESS;\r
+ Status = EFI_SUCCESS;\r
+ goto Done;\r
} else {\r
- ScreenSize = EFI_MAX (GetStringWidth (gConfirmError), GetStringWidth (gPressEnter)) / 2;\r
+ WidthOfString = GetStringWidth (gConfirmError);\r
+ ScreenSize = EFI_MAX (WidthOfString, GetStringWidth (gPressEnter)) / 2;\r
CreatePopUp (ScreenSize, 4, &NullCharacter, gConfirmError, gPressEnter, &NullCharacter);\r
StringPtr[0] = CHAR_NULL;\r
do {\r
Status = WaitForKeyStroke (&Key);\r
if (Key.UnicodeChar == CHAR_CARRIAGE_RETURN) {\r
- gBS->FreePool (TempString);\r
- gBS->FreePool (TempString2);\r
- return EFI_DEVICE_ERROR;\r
+ Status = EFI_DEVICE_ERROR;\r
+ goto Done;\r
}\r
} while (1);\r
}\r
//\r
// I was asked for a password, return it back in StringPtr\r
//\r
- gBS->FreePool (TempString);\r
- gBS->FreePool (TempString2);\r
- return EFI_SUCCESS;\r
+ Status = EFI_SUCCESS;\r
+ goto Done;\r
} else {\r
//\r
// If the two passwords were not the same kick an error popup\r
} while (!ConfirmationComplete);\r
\r
} while (1);\r
+\r
+Done:\r
gBS->FreePool (TempString);\r
gBS->FreePool (TempString2);\r
return Status;\r
\r
Routine Description:\r
\r
- This routine reads a numeric value from the user input. \r
+ This routine reads a numeric value from the user input.\r
\r
Arguments:\r
\r
ManualInput - If the input is manual or not.\r
\r
Tag - Pointer to all the attributes and values associated with a tag.\r
- \r
+\r
Value - Pointer to the numeric value that is going to be read.\r
\r
-Returns: \r
+Returns:\r
\r
EFI_SUCCESS - If numerical input is read successfully\r
EFI_DEVICE_ERROR - If operation fails\r
- \r
+\r
--*/\r
{\r
EFI_INPUT_KEY Key;\r
CHAR16 NullCharacter;\r
CHAR16 *StringPtr;\r
EFI_FILE_FORM_TAGS *FileFormTags;\r
- EFI_STATUS Status;\r
EFI_VARIABLE_DEFINITION *VariableDefinition;\r
UINTN Loop;\r
\r
goto TheKey2;\r
}\r
\r
- Status = WaitForKeyStroke (&Key);\r
+ WaitForKeyStroke (&Key);\r
\r
TheKey2:\r
switch (Key.UnicodeChar) {\r
Tag->Value = (UINT16) Number;\r
*Value = (UINT16) Number;\r
UnicodeValueToString (\r
- FormattedNumber, \r
- FALSE, \r
- (UINTN) Number, \r
+ FormattedNumber,\r
+ FALSE,\r
+ (UINTN) Number,\r
(sizeof (FormattedNumber) / sizeof (FormattedNumber[0]))\r
);\r
Number = (UINT16) GetStringWidth (FormattedNumber);\r
CreatePopUp (GetStringWidth (StringPtr) / 2, 3, &NullCharacter, StringPtr, &NullCharacter);\r
\r
do {\r
- Status = WaitForKeyStroke (&Key);\r
+ WaitForKeyStroke (&Key);\r
\r
switch (Key.UnicodeChar) {\r
\r
OUT UINT16 *KeyValue\r
)\r
{\r
- EFI_STATUS Status;\r
EFI_INPUT_KEY Key;\r
UINTN Index;\r
UINTN TempIndex;\r
UINTN MenuLinesInView;\r
UINTN PopUpWidth;\r
CHAR16 Character;\r
- UINTN FirstOption;\r
BOOLEAN FirstOptionFoundFlag;\r
INT32 SavedAttribute;\r
EFI_TAG TagBackup;\r
BOOLEAN ShowDownArrow;\r
BOOLEAN ShowUpArrow;\r
UINTN DimensionsWidth;\r
- UINTN DimensionsHeight;\r
\r
DimensionsWidth = gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn;\r
- DimensionsHeight = gScreenDimensions.BottomRow - gScreenDimensions.TopRow;\r
\r
TempValue = 0;\r
TempIndex = 0;\r
Count = 0;\r
PopUpWidth = 0;\r
\r
- FirstOption = MenuOption->TagIndex;\r
FirstOptionFoundFlag = FALSE;\r
\r
StringPtr = AllocateZeroPool ((gOptionBlockWidth + 1) * 2);\r
if (MenuOption->Tags[Index].Operand == EFI_IFR_ONE_OF_OPTION_OP &&\r
!MenuOption->Tags[Index].Suppress) {\r
if (!FirstOptionFoundFlag) {\r
- FirstOption = Index;\r
FirstOptionFoundFlag = TRUE;\r
}\r
\r
//\r
if (StrLen (StringPtr) > (PopUpWidth - 1)) {\r
TempStringPtr = AllocateZeroPool (sizeof (CHAR16) * (PopUpWidth - 1));\r
+ ASSERT (TempStringPtr != NULL);\r
CopyMem (TempStringPtr, StringPtr, (sizeof (CHAR16) * (PopUpWidth - 5)));\r
gBS->FreePool (StringPtr);\r
StringPtr = TempStringPtr;\r
KeyInitialized = TRUE;\r
}\r
\r
- Status = WaitForKeyStroke (&Key);\r
+ WaitForKeyStroke (&Key);\r
\r
TheKey:\r
switch (Key.UnicodeChar) {\r
} else {\r
if (Key.ScanCode == SCAN_UP) {\r
TempIndex = Index - 1;\r
- \r
+\r
//\r
// Keep going until meets meaningful tag.\r
//\r
*Value = TempValue;\r
}\r
\r
- gST->ConOut->SetAttribute (gST->ConOut, SavedAttribute);\r
- return EFI_SUCCESS;\r
+ goto Done;\r
\r
default:\r
break;\r
}\r
} while (1);\r
\r
+Done:\r
gST->ConOut->SetAttribute (gST->ConOut, SavedAttribute);\r
return EFI_SUCCESS;\r
}\r