]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/MainHexEditor.c
ShellPkg: Added the Ctrl based hot key for hexedit
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / HexEdit / MainHexEditor.c
index 58c25f81d4d9ef08a0f451df8959578e4e1bbcab..fec71243156233ba43859cf0488696e6f193e626 100644 (file)
@@ -37,8 +37,6 @@ BOOLEAN                         HEditorMouseAction;
 extern HEFI_EDITOR_BUFFER_IMAGE HBufferImage;\r
 extern HEFI_EDITOR_BUFFER_IMAGE HBufferImageBackupVar;\r
 \r
-extern HEFI_EDITOR_CLIPBOARD    HClipBoard;\r
-\r
 extern BOOLEAN                  HBufferImageMouseNeedRefresh;\r
 extern BOOLEAN                  HBufferImageNeedRefresh;\r
 extern BOOLEAN                  HBufferImageOnlyLineNeedRefresh;\r
@@ -51,7 +49,6 @@ HEFI_EDITOR_GLOBAL_EDITOR       HMainEditorBackupVar;
 //\r
 HEFI_EDITOR_GLOBAL_EDITOR       HMainEditorConst = {\r
   &HBufferImage,\r
-  &HClipBoard,\r
   {\r
     0,\r
     0\r
@@ -68,25 +65,80 @@ HEFI_EDITOR_GLOBAL_EDITOR       HMainEditorConst = {
   1\r
 };\r
 \r
-EFI_STATUS\r
-HMainCommandGoToOffset (\r
-  VOID\r
-  )\r
-/*++\r
+/**\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
-Routine Description: \r
 \r
-  move cursor to specified lines\r
+/**\r
+  show help menu.\r
 \r
-Arguments:  \r
+  @retval EFI_SUCCESS             The operation was successful.\r
+**/\r
+EFI_STATUS\r
+HMainCommandDisplayHelp (\r
+  VOID\r
+  )\r
+{\r
+  INTN     CurrentLine=0;\r
+  CHAR16 * InfoString;\r
+  EFI_INPUT_KEY  Key;\r
+  \r
+  // print helpInfo      \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
+  // scan for ctrl+w\r
+  do {\r
+    gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
+  } while(SCAN_CONTROL_W != Key.UnicodeChar); \r
 \r
-  None\r
+  // update screen with buffer's info\r
+  HBufferImageNeedRefresh = TRUE;\r
+  HBufferImageOnlyLineNeedRefresh = FALSE;\r
+  HBufferImageRefresh ();\r
 \r
-Returns:  \r
+  return EFI_SUCCESS;\r
+}\r
 \r
-  EFI_SUCCESS\r
+/**\r
+  Move cursor to specified lines.\r
 \r
---*/\r
+  @retval EFI_SUCCESS   The operation was successful.\r
+**/\r
+EFI_STATUS\r
+HMainCommandGoToOffset (\r
+  VOID\r
+  )\r
 {\r
   UINTN       Size;\r
   UINT64      Offset;\r
@@ -157,29 +209,19 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Save current opened buffer.\r
+  If is file buffer, you can save to current file name or \r
+  save to another file name.\r
+\r
+  @retval EFI_SUCCESS             The operation was successful.\r
+  @retval EFI_OUT_OF_RESOURCES    A memory allocation occured.\r
+  @retval EFI_LOAD_ERROR          A load error occured.\r
+**/\r
 EFI_STATUS\r
 HMainCommandSaveBuffer (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description: \r
-\r
-  save current opened buffer . \r
-  if is file buffer, you can save to current file name or \r
-  save to another file name\r
-\r
-Arguments:  \r
-\r
-  None\r
-\r
-Returns:  \r
-\r
-  EFI_SUCCESS\r
-  EFI_OUT_OF_RESOURCES\r
-  EFI_LOAD_ERROR\r
-\r
---*/\r
 {\r
   EFI_STATUS          Status;\r
   BOOLEAN             Done;\r
@@ -190,7 +232,7 @@ Returns:
   SHELL_FILE_HANDLE   ShellFileHandle;\r
 \r
   if (HMainEditor.BufferImage->BufferType != FileTypeFileBuffer) {\r
-    if (HMainEditor.BufferImage->Modified == FALSE) {\r
+    if (!HMainEditor.BufferImage->Modified) {\r
       return EFI_SUCCESS;\r
     }\r
 \r
@@ -381,7 +423,7 @@ Returns:
     //\r
     // if the file is read only, so can not write back to it.\r
     //\r
-    if (HMainEditor.BufferImage->FileImage->ReadOnly == TRUE) {\r
+    if (HMainEditor.BufferImage->FileImage->ReadOnly) {\r
       StatusBarSetStatusString (L"Access Denied");\r
       SHELL_FREE_NON_NULL (FileName);\r
       return EFI_SUCCESS;\r
@@ -467,27 +509,17 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Load a disk buffer editor.\r
+\r
+  @retval EFI_SUCCESS             The operation was successful.\r
+  @retval EFI_OUT_OF_RESOURCES    A memory allocation occured.\r
+  @retval EFI_LOAD_ERROR          A load error occured.\r
+**/\r
 EFI_STATUS\r
 HMainCommandSelectStart (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description: \r
-\r
-  Load a disk buffer editor\r
-\r
-Arguments:  \r
-\r
-  None\r
-\r
-Returns:  \r
-\r
-   EFI_SUCCESS\r
-   EFI_LOAD_ERROR\r
-   EFI_OUT_OF_RESOURCES\r
-\r
---*/\r
 {\r
   UINTN Start;\r
 \r
@@ -515,27 +547,17 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Load a disk buffer editor.\r
+\r
+  @retval EFI_SUCCESS             The operation was successful.\r
+  @retval EFI_OUT_OF_RESOURCES    A memory allocation occured.\r
+  @retval EFI_LOAD_ERROR          A load error occured.\r
+**/\r
 EFI_STATUS\r
 HMainCommandSelectEnd (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description: \r
-\r
-  Load a disk buffer editor\r
-\r
-Arguments:  \r
-\r
-  None\r
-\r
-Returns:  \r
-\r
-   EFI_SUCCESS\r
-   EFI_LOAD_ERROR\r
-   EFI_OUT_OF_RESOURCES\r
-\r
---*/\r
 {\r
   UINTN End;\r
 \r
@@ -563,27 +585,17 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Cut current line to clipboard.\r
+\r
+  @retval EFI_SUCCESS             The operation was successful.\r
+  @retval EFI_OUT_OF_RESOURCES    A memory allocation occured.\r
+  @retval EFI_LOAD_ERROR          A load error occured.\r
+**/\r
 EFI_STATUS\r
 HMainCommandCut (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description: \r
-\r
-  cut current line to clipboard\r
-\r
-Arguments:  \r
-\r
-  None\r
-\r
-Returns:  \r
-\r
-  EFI_SUCCESS\r
-  EFI_OUT_OF_RESOURCES\r
-  EFI_LOAD_ERROR\r
-\r
---*/\r
 {\r
   UINTN             Index;\r
   HEFI_EDITOR_LINE  *Line;\r
@@ -648,28 +660,17 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Paste line to file buffer.\r
+\r
+  @retval EFI_SUCCESS             The operation was successful.\r
+  @retval EFI_OUT_OF_RESOURCES    A memory allocation occured.\r
+  @retval EFI_LOAD_ERROR          A load error occured.\r
+**/\r
 EFI_STATUS\r
 HMainCommandPaste (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description: \r
-\r
-  paste line to file buffer\r
-\r
-Arguments:  \r
-\r
-  None\r
-\r
-Returns:  \r
-\r
-  EFI_SUCCESS\r
-  EFI_OUT_OF_RESOURCES\r
-  EFI_LOAD_ERROR\r
-\r
-\r
---*/\r
 {\r
 \r
   BOOLEAN           OnlyLineRefresh;\r
@@ -719,27 +720,17 @@ Returns:
 \r
 }\r
 \r
+/**\r
+  Exit editor.\r
+\r
+  @retval EFI_SUCCESS             The operation was successful.\r
+  @retval EFI_OUT_OF_RESOURCES    A memory allocation occured.\r
+  @retval EFI_LOAD_ERROR          A load error occured.\r
+**/\r
 EFI_STATUS\r
 HMainCommandExit (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description: \r
-\r
-  exit editor\r
-\r
-Arguments:  \r
-\r
-  None\r
-\r
-Returns:  \r
-\r
-  EFI_SUCCESS\r
-  EFI_OUT_OF_RESOURCES\r
-  EFI_LOAD_ERROR\r
-\r
---*/\r
 {\r
   EFI_STATUS  Status;\r
 \r
@@ -822,27 +813,17 @@ Returns:
 \r
 }\r
 \r
+/**\r
+  Load a file from disk to editor.\r
+\r
+  @retval EFI_SUCCESS             The operation was successful.\r
+  @retval EFI_OUT_OF_RESOURCES    A memory allocation occured.\r
+  @retval EFI_LOAD_ERROR          A load error occured.\r
+**/\r
 EFI_STATUS\r
 HMainCommandOpenFile (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description: \r
-\r
-  Load a file from disk to editor\r
-\r
-Arguments:  \r
-\r
-  None\r
-\r
-Returns:  \r
-\r
-   EFI_SUCCESS\r
-   EFI_LOAD_ERROR\r
-   EFI_OUT_OF_RESOURCES\r
-\r
---*/\r
 {\r
   BOOLEAN                         Done;\r
   EFI_STATUS                      Status;\r
@@ -1065,28 +1046,18 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Load a disk buffer editor.\r
+\r
+  @retval EFI_SUCCESS             The operation was successful.\r
+  @retval EFI_OUT_OF_RESOURCES    A memory allocation occured.\r
+  @retval EFI_LOAD_ERROR          A load error occured.\r
+  @retval EFI_NOT_FOUND           The disk was not found.\r
+**/\r
 EFI_STATUS\r
 HMainCommandOpenDisk (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description: \r
-\r
-  Load a disk buffer editor\r
-\r
-Arguments:  \r
-\r
-  None\r
-\r
-Returns:  \r
-\r
-   EFI_SUCCESS\r
-   EFI_LOAD_ERROR\r
-   EFI_OUT_OF_RESOURCES\r
-   EFI_NOT_FOUND\r
-\r
---*/\r
 {\r
   UINT64                          Size;\r
   UINT64                          Offset;\r
@@ -1320,28 +1291,18 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Load memory content to editor\r
+\r
+  @retval EFI_SUCCESS             The operation was successful.\r
+  @retval EFI_OUT_OF_RESOURCES    A memory allocation occured.\r
+  @retval EFI_LOAD_ERROR          A load error occured.\r
+  @retval EFI_NOT_FOUND           The disk was not found.\r
+**/\r
 EFI_STATUS\r
 HMainCommandOpenMemory (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description: \r
-\r
-  Load memory content to editor\r
-\r
-Arguments:  \r
-\r
-  None\r
-\r
-Returns:  \r
-\r
-   EFI_SUCCESS\r
-   EFI_LOAD_ERROR\r
-   EFI_OUT_OF_RESOURCES\r
-   EFI_NOT_FOUND\r
-\r
---*/\r
 {\r
   UINT64                          Size;\r
   UINT64                          Offset;\r
@@ -1543,6 +1504,36 @@ Returns:
 \r
 }\r
 \r
+MENU_ITEM_FUNCTION HexMainControlBasedMenuFunctions[] = {\r
+  NULL,\r
+  NULL,                      /* Ctrl - A */\r
+  NULL,                      /* Ctrl - B */\r
+  NULL,                      /* Ctrl - C */\r
+  HMainCommandSelectEnd,     /* Ctrl - D */\r
+  HMainCommandDisplayHelp,   /* Ctrl - E */\r
+  NULL,                      /* Ctrl - F */\r
+  HMainCommandGoToOffset,    /* Ctrl - G */\r
+  NULL,                      /* Ctrl - H */\r
+  HMainCommandOpenDisk,      /* Ctrl - I */\r
+  NULL,                      /* Ctrl - J */\r
+  NULL,                      /* Ctrl - K */\r
+  NULL,                      /* Ctrl - L */\r
+  HMainCommandOpenMemory,    /* Ctrl - M */\r
+  NULL,                      /* Ctrl - N */\r
+  HMainCommandOpenFile,      /* Ctrl - O */\r
+  NULL,                      /* Ctrl - P */\r
+  HMainCommandExit,          /* Ctrl - Q */\r
+  NULL,                      /* Ctrl - R */\r
+  HMainCommandSaveBuffer,    /* Ctrl - S */\r
+  HMainCommandSelectStart,   /* Ctrl - T */\r
+  NULL,                      /* Ctrl - U */\r
+  HMainCommandPaste,         /* Ctrl - V */\r
+  NULL,                      /* Ctrl - W */\r
+  HMainCommandCut,           /* Ctrl - X */\r
+  NULL,                      /* Ctrl - Y */\r
+  NULL,                      /* Ctrl - Z */\r
+};\r
+\r
 CONST EDITOR_MENU_ITEM HexEditorMenuItems[] = {\r
   {\r
     STRING_TOKEN(STR_HEXEDIT_LIBMENUBAR_GO_TO_OFFSET),\r
@@ -1604,27 +1595,16 @@ CONST EDITOR_MENU_ITEM HexEditorMenuItems[] = {
   }\r
 };\r
 \r
+/**\r
+  Init function for MainEditor\r
 \r
+  @retval EFI_SUCCESS             The operation was successful.\r
+  @retval EFI_LOAD_ERROR          A load error occured.\r
+**/\r
 EFI_STATUS\r
 HMainEditorInit (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description: \r
-\r
-  Init function for MainEditor\r
-\r
-Arguments:  \r
-\r
-  None\r
-\r
-Returns:  \r
-\r
-  EFI_SUCCESS\r
-  EFI_LOAD_ERROR\r
-\r
---*/\r
 {\r
   EFI_STATUS  Status;\r
   EFI_HANDLE  *HandleBuffer;\r
@@ -1713,6 +1693,11 @@ Returns:
     return EFI_LOAD_ERROR;\r
   }\r
 \r
+  Status = ControlHotKeyInit (HexMainControlBasedMenuFunctions);\r
+  if (EFI_ERROR (Status)) {\r
+    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_MAINEDITOR_MAINMENU), gShellDebug1HiiHandle);\r
+    return EFI_LOAD_ERROR;\r
+  }\r
   Status = MenuBarInit (HexEditorMenuItems);\r
   if (EFI_ERROR (Status)) {\r
     ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_MAINEDITOR_MAINMENU), gShellDebug1HiiHandle);\r
@@ -1754,26 +1739,16 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Cleanup function for MainEditor.\r
+\r
+  @retval EFI_SUCCESS             The operation was successful.\r
+  @retval EFI_LOAD_ERROR          A load error occured.\r
+**/\r
 EFI_STATUS\r
 HMainEditorCleanup (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description: \r
-\r
-  cleanup function for MainEditor\r
-\r
-Arguments:  \r
-\r
-  None\r
-\r
-Returns:  \r
-\r
-  EFI_SUCCESS\r
-  EFI_LOAD_ERROR\r
-\r
---*/\r
 {\r
   EFI_STATUS  Status;\r
 \r
@@ -1813,25 +1788,15 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Refresh function for MainEditor.\r
+\r
+  @retval EFI_SUCCESS             The operation was successful.\r
+**/\r
 EFI_STATUS\r
 HMainEditorRefresh (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description: \r
-\r
-  Refresh function for MainEditor\r
-\r
-Arguments:  \r
-\r
-  None\r
-\r
-Returns:  \r
-\r
-  EFI_SUCCESS\r
-\r
---*/\r
 {\r
   BOOLEAN NameChange;\r
   BOOLEAN ReadChange;\r
@@ -1839,12 +1804,28 @@ Returns:
   NameChange = FALSE;\r
   ReadChange = FALSE;\r
 \r
-  if ( HMainEditor.BufferImage->FileImage != NULL && \r
-       HMainEditor.BufferImage->FileImage->FileName != NULL && \r
-       HBufferImageBackupVar.FileImage != NULL && \r
-       HBufferImageBackupVar.FileImage->FileName != NULL && \r
-       StrCmp (HMainEditor.BufferImage->FileImage->FileName, HBufferImageBackupVar.FileImage->FileName) != 0 ) {\r
-    NameChange = TRUE;\r
+  if (HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer) {\r
+    if (HMainEditor.BufferImage->DiskImage != NULL &&\r
+        HBufferImageBackupVar.DiskImage != NULL &&\r
+        (HMainEditor.BufferImage->DiskImage->Offset != HBufferImageBackupVar.DiskImage->Offset || \r
+           HMainEditor.BufferImage->DiskImage->Size != HBufferImageBackupVar.DiskImage->Size) ){\r
+      NameChange = TRUE;\r
+    }\r
+  } else if (HMainEditor.BufferImage->BufferType == FileTypeMemBuffer) {\r
+    if (HMainEditor.BufferImage->MemImage != NULL &&\r
+        HBufferImageBackupVar.MemImage != NULL &&\r
+        (HMainEditor.BufferImage->MemImage->Offset != HBufferImageBackupVar.MemImage->Offset || \r
+           HMainEditor.BufferImage->MemImage->Size != HBufferImageBackupVar.MemImage->Size) ){\r
+      NameChange = TRUE;\r
+    }\r
+  } else if (HMainEditor.BufferImage->BufferType == FileTypeFileBuffer) {\r
+    if ( HMainEditor.BufferImage->FileImage != NULL && \r
+         HMainEditor.BufferImage->FileImage->FileName != NULL && \r
+         HBufferImageBackupVar.FileImage != NULL && \r
+         HBufferImageBackupVar.FileImage->FileName != NULL && \r
+         StrCmp (HMainEditor.BufferImage->FileImage->FileName, HBufferImageBackupVar.FileImage->FileName) != 0 ) {\r
+      NameChange = TRUE;\r
+    }\r
   }\r
   if ( HMainEditor.BufferImage->FileImage != NULL && \r
        HBufferImageBackupVar.FileImage != NULL && \r
@@ -1874,8 +1855,8 @@ Returns:
       HMainEditor.BufferImage->Modified,\r
       HMainEditor.ScreenSize.Column,\r
       HMainEditor.ScreenSize.Row,\r
-      HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer?HMainEditor.BufferImage->DiskImage->Offset:HMainEditor.BufferImage->BufferType == FileTypeMemBuffer?HMainEditor.BufferImage->MemImage->Offset:0,\r
-      HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer?HMainEditor.BufferImage->DiskImage->Size  :HMainEditor.BufferImage->BufferType == FileTypeMemBuffer?HMainEditor.BufferImage->MemImage->Size  :0\r
+      HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer&&HMainEditor.BufferImage->DiskImage!=NULL?HMainEditor.BufferImage->DiskImage->Offset:HMainEditor.BufferImage->BufferType == FileTypeMemBuffer&&HMainEditor.BufferImage->MemImage!=NULL?HMainEditor.BufferImage->MemImage->Offset:0,\r
+      HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer&&HMainEditor.BufferImage->DiskImage!=NULL?HMainEditor.BufferImage->DiskImage->Size  :HMainEditor.BufferImage->BufferType == FileTypeMemBuffer&&HMainEditor.BufferImage->MemImage!=NULL?HMainEditor.BufferImage->MemImage->Size  :0\r
       );\r
     HBufferImageRefresh ();\r
   }\r
@@ -1888,17 +1869,14 @@ Returns:
       HEditorFirst,\r
       HMainEditor.ScreenSize.Row,\r
       HMainEditor.ScreenSize.Column,\r
-      0,\r
-      0,\r
-      TRUE\r
+      (UINTN)(-1),\r
+      (UINTN)(-1),\r
+      FALSE\r
       );\r
     HBufferImageRefresh ();\r
   }\r
 \r
   if (HEditorFirst) {\r
-    MenuBarRefresh (    \r
-      HMainEditor.ScreenSize.Row,\r
-      HMainEditor.ScreenSize.Column);\r
     HBufferImageRefresh ();\r
   }\r
 \r
@@ -1910,7 +1888,17 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
-STATIC\r
+/**\r
+  Handle the mouse input.\r
+\r
+  @param[in] MouseState             The current mouse state.\r
+  @param[out] BeforeLeftButtonDown  helps with selections.\r
+\r
+  @retval EFI_SUCCESS             The operation was successful.\r
+  @retval EFI_OUT_OF_RESOURCES    A memory allocation occured.\r
+  @retval EFI_LOAD_ERROR          A load error occured.\r
+  @retval EFI_NOT_FOUND           The disk was not found.\r
+**/\r
 EFI_STATUS\r
 HMainEditorHandleMouseInput (\r
   IN  EFI_SIMPLE_POINTER_STATE       MouseState,\r
@@ -2046,7 +2034,7 @@ HMainEditorHandleMouseInput (
     //\r
     // release LButton\r
     //\r
-    if (*BeforeLeftButtonDown == TRUE) {\r
+    if (*BeforeLeftButtonDown) {\r
       Action = TRUE;\r
     }\r
     //\r
@@ -2062,27 +2050,17 @@ HMainEditorHandleMouseInput (
   return EFI_NOT_FOUND;\r
 }\r
 \r
+/**\r
+  Handle user key input. will route it to other components handle function.\r
+\r
+  @retval EFI_SUCCESS             The operation was successful.\r
+  @retval EFI_OUT_OF_RESOURCES    A memory allocation occured.\r
+  @retval EFI_LOAD_ERROR          A load error occured.\r
+**/\r
 EFI_STATUS\r
 HMainEditorKeyInput (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description: \r
-\r
-  Handle user key input. will route it to other components handle function\r
-\r
-Arguments:  \r
-\r
-  None\r
-\r
-Returns:  \r
-\r
-  EFI_SUCCESS\r
-  EFI_LOAD_ERROR\r
-  EFI_OUT_OF_RESOURCES\r
-\r
---*/\r
 {\r
   EFI_INPUT_KEY             Key;\r
   EFI_STATUS                Status;\r
@@ -2142,11 +2120,11 @@ Returns:
         Status            = HMainEditorHandleMouseInput (MouseState, &MouseIsDown);\r
 \r
         if (!EFI_ERROR (Status)) {\r
-          if (BeforeMouseIsDown == FALSE) {\r
+          if (!BeforeMouseIsDown) {\r
             //\r
             // mouse down\r
             //\r
-            if (MouseIsDown == TRUE) {\r
+            if (MouseIsDown) {\r
               FRow              = HBufferImage.BufferPosition.Row;\r
               FCol              = HBufferImage.BufferPosition.Column;\r
               SelectStartBackup = HMainEditor.SelectStart;\r
@@ -2162,8 +2140,8 @@ Returns:
             //\r
             // begin to drag\r
             //\r
-            if (MouseIsDown == TRUE) {\r
-              if (FirstDown == TRUE) {\r
+            if (MouseIsDown) {\r
+              if (FirstDown) {\r
                 if (MouseState.RelativeMovementX || MouseState.RelativeMovementY) {\r
                   HMainEditor.SelectStart = 0;\r
                   HMainEditor.SelectEnd   = 0;\r
@@ -2257,8 +2235,9 @@ Returns:
       // clear previous status string\r
       //\r
       StatusBarSetRefresh();\r
-\r
-      if (Key.ScanCode == SCAN_NULL) {\r
+      if (EFI_SUCCESS == MenuBarDispatchControlHotKey(&Key)) {\r
+        Status = EFI_SUCCESS;\r
+      } else if (Key.ScanCode == SCAN_NULL) {\r
         Status = HBufferImageHandleInput (&Key);\r
       } else if (((Key.ScanCode >= SCAN_UP) && (Key.ScanCode <= SCAN_PAGE_DOWN))) {\r
         Status = HBufferImageHandleInput (&Key);\r
@@ -2299,9 +2278,13 @@ Returns:
         case FileTypeMemBuffer:\r
           OldSize = HBufferImage.MemImage->Size;\r
           break;\r
+        \r
+        default:\r
+          OldSize = 0;\r
+          break;\r
         }\r
 \r
-        if (LengthChange == FALSE) {\r
+        if (!LengthChange) {\r
           if (OldSize != Size) {\r
             StatusBarSetStatusString (L"Disk/Mem Buffer Length should not be changed");\r
           }\r