/** @file\r
This module provide help function for displaying unicode string.\r
\r
- Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>\r
- 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
+ Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+ 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
+ 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
**/\r
\r
//\r
{(CHAR16)0x1FFF, 1},\r
/*\r
- * Merge the blocks and replace them with the above entry as they fall to \r
+ * Merge the blocks and replace them with the above entry as they fall to\r
* the same category and they are all narrow glyph. This will reduce search\r
* time and table size. The merge will omit the reserved code.\r
*\r
//\r
{(CHAR16)0x2FFF, 1},\r
/*\r
- * Merge the blocks and replace them with the above entry as they fall to \r
+ * Merge the blocks and replace them with the above entry as they fall to\r
* the same category and they are all narrow glyph. This will reduce search\r
* time and table size. The merge will omit the reserved code.\r
*\r
//\r
{(CHAR16)0x33FF, 2},\r
/*\r
- * Merge the blocks and replace them with the above entry as they fall to \r
+ * Merge the blocks and replace them with the above entry as they fall to\r
* the same category and they are all wide glyph. This will reduce search\r
* time and table size. The merge will omit the reserved code.\r
*\r
//\r
{(CHAR16)0x9FFF, 2},\r
/*\r
- * Merge the blocks and replace them with the above entry as they fall to \r
+ * Merge the blocks and replace them with the above entry as they fall to\r
* the same category and they are all wide glyph. This will reduce search\r
* time and table size. The merge will omit the reserved code.\r
*\r
* Remove the above item if below is un-commented.\r
*\r
- {(CHAR16)0x4DFF, 0}, // Reserved. 0x3400-0x4DBF as CJK unified ideographs \r
+ {(CHAR16)0x4DFF, 0}, // Reserved. 0x3400-0x4DBF as CJK unified ideographs\r
// extension A in ver3.0. 0x3400-0x4DFF\r
{(CHAR16)0x9FFF, 2}, // CJK unified ideographs. 0x4E00-0x9FFF\r
*\r
//\r
{(CHAR16)0xD7FF, 2},\r
/*\r
- * Merge the blocks and replace them with the above entry as they fall to \r
+ * Merge the blocks and replace them with the above entry as they fall to\r
* the same category and they are all wide glyph. This will reduce search\r
* time and table size. The merge will omit the reserved code.\r
*\r
Item = NULL;\r
Low = 0;\r
High = (sizeof (mUnicodeWidthTable)) / (sizeof (UNICODE_WIDTH_ENTRY)) - 1;\r
- while (Low <= High) { \r
+ while (Low <= High) {\r
Index = (Low + High) >> 1;\r
Item = &(mUnicodeWidthTable[Index]);\r
if (Index == 0) {\r
of the Unicode characters in String can not be determined, then 0 is returned. The display\r
width of String can be computed by summing the display widths of each Unicode character\r
in String. Unicode characters that are narrow glyphs have a width of 1, and Unicode\r
- characters that are width glyphs have a width of 2. \r
+ characters that are width glyphs have a width of 2.\r
If String is not aligned on a 16-bit boundary, then ASSERT().\r
\r
@param String A pointer to a Null-terminated Unicode string.\r
\r
@return The display length of the Null-terminated Unicode string specified by String.\r
- \r
+\r
**/\r
UINTN\r
EFIAPI\r
}\r
\r
/**\r
- Draws a dialog box to the console output device specified by \r
+ Draws a dialog box to the console output device specified by\r
ConOut defined in the EFI_SYSTEM_TABLE and waits for a keystroke\r
- from the console input device specified by ConIn defined in the \r
+ from the console input device specified by ConIn defined in the\r
EFI_SYSTEM_TABLE.\r
\r
If there are no strings in the variable argument list, then ASSERT().\r
If all the strings in the variable argument list are empty, then ASSERT().\r
\r
@param[in] Attribute Specifies the foreground and background color of the popup.\r
- @param[out] Key A pointer to the EFI_KEY value of the key that was \r
+ @param[out] Key A pointer to the EFI_KEY value of the key that was\r
pressed. This is an optional parameter that may be NULL.\r
If it is NULL then no wait for a keypress will be performed.\r
@param[in] ... The variable argument list that contains pointers to Null-\r
- terminated Unicode strings to display in the dialog box. \r
+ terminated Unicode strings to display in the dialog box.\r
The variable argument list is terminated by a NULL.\r
\r
**/\r
VOID\r
EFIAPI\r
CreatePopUp (\r
- IN UINTN Attribute, \r
+ IN UINTN Attribute,\r
OUT EFI_INPUT_KEY *Key, OPTIONAL\r
...\r
)\r
{\r
+ EFI_STATUS Status;\r
VA_LIST Args;\r
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut;\r
EFI_SIMPLE_TEXT_OUTPUT_MODE SavedConsoleMode;\r
UINTN EventIndex;\r
\r
//\r
- // Determine the length of the longest line in the popup and the the total \r
+ // Determine the length of the longest line in the popup and the the total\r
// number of lines in the popup\r
//\r
VA_START (Args, Key);\r
// Cache a pointer to the Simple Text Output Protocol in the EFI System Table\r
//\r
ConOut = gST->ConOut;\r
- \r
+\r
//\r
// Save the current console cursor position and attributes\r
//\r
ASSERT (Line != NULL);\r
\r
//\r
- // Draw top of popup box \r
+ // Draw top of popup box\r
//\r
SetMem16 (Line, (MaxLength + 2) * 2, BOXDRAW_HORIZONTAL);\r
Line[0] = BOXDRAW_DOWN_RIGHT;\r
// Wait for a keystroke\r
//\r
if (Key != NULL) {\r
- gBS->WaitForEvent (1, &gST->ConIn->WaitForKey, &EventIndex);\r
- gST->ConIn->ReadKeyStroke (gST->ConIn, Key);\r
+ while (TRUE) {\r
+ Status = gST->ConIn->ReadKeyStroke (gST->ConIn, Key);\r
+ if (!EFI_ERROR (Status)) {\r
+ break;\r
+ }\r
+\r
+ //\r
+ // If we encounter error, continue to read another key in.\r
+ //\r
+ if (Status != EFI_NOT_READY) {\r
+ continue;\r
+ }\r
+ gBS->WaitForEvent (1, &gST->ConIn->WaitForKey, &EventIndex);\r
+ }\r
}\r
}\r