+/**\r
+ Help info that will be displayed.\r
+**/\r
+EFI_STRING_ID HexMainMenuHelpInfo[] = {\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_TITLE),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_BLANK),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_LIST_TITLE),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_DIV),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_GO_TO_OFFSET),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_SAVE_BUFFER),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_EXIT),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_SELECT_START),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_SELECT_END),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_CUT),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_PASTE),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_OPEN_FILE),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_OPEN_DISK),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_OPEN_MEMORY),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_BLANK),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_EXIT_HELP),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_BLANK),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_BLANK),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_BLANK),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_BLANK),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_BLANK),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_BLANK),\r
+ STRING_TOKEN(STR_HEXEDIT_HELP_DIV),\r
+ 0\r
+};\r
+\r
+\r
+/**\r
+ show help menu.\r
+\r
+ @retval EFI_SUCCESS The operation was successful.\r
+**/\r
+EFI_STATUS\r
+HMainCommandDisplayHelp (\r
+ VOID\r
+ )\r
+{\r
+ INT32 CurrentLine;\r
+ CHAR16 *InfoString;\r
+ EFI_KEY_DATA KeyData;\r
+ EFI_STATUS Status;\r
+ UINTN EventIndex;\r
+ \r
+ //\r
+ // print helpInfo \r
+ //\r
+ for (CurrentLine = 0; 0 != HexMainMenuHelpInfo[CurrentLine]; CurrentLine++) {\r
+ InfoString = HiiGetString(gShellDebug1HiiHandle, HexMainMenuHelpInfo[CurrentLine]\r
+, NULL);\r
+ ShellPrintEx (0,CurrentLine+1,L"%E%s%N",InfoString); \r
+ }\r
+\r
+ //\r
+ // scan for ctrl+w\r
+ //\r
+ while (TRUE) {\r
+ Status = gBS->WaitForEvent (1, &HMainEditor.TextInputEx->WaitForKeyEx, &EventIndex);\r
+ if (EFI_ERROR (Status) || (EventIndex != 0)) {\r
+ continue;\r
+ }\r
+ Status = HMainEditor.TextInputEx->ReadKeyStrokeEx (HMainEditor.TextInputEx, &KeyData);\r
+ if (EFI_ERROR (Status)) {\r
+ continue;\r
+ }\r
+\r
+ if ((KeyData.KeyState.KeyShiftState & EFI_SHIFT_STATE_VALID) == 0) {\r
+ //\r
+ // For consoles that don't support shift state reporting,\r
+ // CTRL+W is translated to L'W' - L'A' + 1.\r
+ //\r
+ if (KeyData.Key.UnicodeChar == L'W' - L'A' + 1) {\r
+ break;\r
+ }\r
+ } else if (((KeyData.KeyState.KeyShiftState & (EFI_LEFT_CONTROL_PRESSED | EFI_RIGHT_CONTROL_PRESSED)) != 0) &&\r
+ ((KeyData.KeyState.KeyShiftState & ~(EFI_SHIFT_STATE_VALID | EFI_LEFT_CONTROL_PRESSED | EFI_RIGHT_CONTROL_PRESSED)) == 0)) {\r
+ //\r
+ // For consoles that supports shift state reporting,\r
+ // make sure that only CONTROL shift key is pressed.\r
+ //\r
+ if ((KeyData.Key.UnicodeChar == 'w') || (KeyData.Key.UnicodeChar == 'W')) {\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ // update screen with buffer's info\r
+ HBufferImageNeedRefresh = TRUE;\r
+ HBufferImageOnlyLineNeedRefresh = FALSE;\r
+ HBufferImageRefresh ();\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r