]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/MainHexEditor.c
Fix Xcode, clang, and ARM build and link issues.
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / HexEdit / MainHexEditor.c
index 387a1e2d1e9c8850f8ce3c90d8a148b48891e337..ccd73a98825e4c4a9a477384db1a041a0abead7d 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,15 @@ HEFI_EDITOR_GLOBAL_EDITOR       HMainEditorConst = {
   1\r
 };\r
 \r
+/**\r
+  Move cursor to specified lines.\r
+\r
+  @retval EFI_SUCCESS   The operation was successful.\r
+**/\r
 EFI_STATUS\r
 HMainCommandGoToOffset (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description: \r
-\r
-  move cursor to specified lines\r
-\r
-Arguments:  \r
-\r
-  None\r
-\r
-Returns:  \r
-\r
-  EFI_SUCCESS\r
-\r
---*/\r
 {\r
   UINTN       Size;\r
   UINT64      Offset;\r
@@ -157,29 +144,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 +167,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 +358,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 +444,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 +482,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 +520,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 +595,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 +655,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 +748,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
@@ -933,7 +849,9 @@ Returns:
           HMainEditor.BufferImage->FileImage->ReadOnly,\r
           FALSE,\r
           HMainEditor.ScreenSize.Column,\r
-          HMainEditor.ScreenSize.Row\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
           );\r
         Done = TRUE;\r
         break;\r
@@ -1063,28 +981,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
@@ -1158,7 +1066,9 @@ Returns:
           HMainEditor.BufferImage->FileImage->ReadOnly,\r
           FALSE,\r
           HMainEditor.ScreenSize.Column,\r
-          HMainEditor.ScreenSize.Row\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
           );\r
         Done = TRUE;\r
         break;\r
@@ -1316,28 +1226,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
@@ -1409,7 +1309,9 @@ Returns:
           HMainEditor.BufferImage->FileImage->ReadOnly,\r
           FALSE,\r
           HMainEditor.ScreenSize.Column,\r
-          HMainEditor.ScreenSize.Row\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
           );\r
         Done = TRUE;\r
         break;\r
@@ -1598,27 +1500,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
@@ -1748,26 +1639,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
@@ -1807,26 +1688,35 @@ 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
+  BOOLEAN NameChange;\r
+  BOOLEAN ReadChange;\r
 \r
-Returns:  \r
+  NameChange = FALSE;\r
+  ReadChange = FALSE;\r
 \r
-  EFI_SUCCESS\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
+  if ( HMainEditor.BufferImage->FileImage != NULL && \r
+       HBufferImageBackupVar.FileImage != NULL && \r
+       HMainEditor.BufferImage->FileImage->ReadOnly != HBufferImageBackupVar.FileImage->ReadOnly ) {\r
+    ReadChange = TRUE;\r
+  }\r
 \r
---*/\r
-{\r
   //\r
   // to aVOID screen flicker\r
   // the stall value is from experience\r
@@ -1834,28 +1724,48 @@ Returns:
   gBS->Stall (50);\r
 \r
   //\r
-  // call the four components refresh function\r
+  // call the components refresh function\r
   //\r
-  MainTitleBarRefresh (\r
-    HMainEditor.BufferImage->BufferType == FileTypeFileBuffer?HMainEditor.BufferImage->FileImage->FileName:HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer?HMainEditor.BufferImage->DiskImage->Name:NULL,\r
-    HMainEditor.BufferImage->BufferType,\r
-    HMainEditor.BufferImage->FileImage->ReadOnly,\r
-    HMainEditor.BufferImage->Modified,\r
-    HMainEditor.ScreenSize.Column,\r
-    HMainEditor.ScreenSize.Row\r
-    );\r
-  HBufferImageRefresh ();\r
-  StatusBarRefresh (\r
-    HEditorFirst,\r
-    HMainEditor.ScreenSize.Row,\r
-    HMainEditor.ScreenSize.Column,\r
-    0,\r
-    0,\r
-    TRUE\r
-    );\r
-  MenuBarRefresh (    \r
-    HMainEditor.ScreenSize.Row,\r
-    HMainEditor.ScreenSize.Column);\r
+  if (HEditorFirst \r
+    || NameChange\r
+    || HMainEditor.BufferImage->BufferType != HBufferImageBackupVar.BufferType \r
+    || HBufferImageBackupVar.Modified != HMainEditor.BufferImage->Modified \r
+    || ReadChange ) {\r
+\r
+    MainTitleBarRefresh (\r
+      HMainEditor.BufferImage->BufferType == FileTypeFileBuffer&&HMainEditor.BufferImage->FileImage!=NULL?HMainEditor.BufferImage->FileImage->FileName:HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer&&HMainEditor.BufferImage->DiskImage!=NULL?HMainEditor.BufferImage->DiskImage->Name:NULL,\r
+      HMainEditor.BufferImage->BufferType,\r
+      (BOOLEAN)(HMainEditor.BufferImage->FileImage!=NULL?HMainEditor.BufferImage->FileImage->ReadOnly:FALSE),\r
+      HMainEditor.BufferImage->Modified,\r
+      HMainEditor.ScreenSize.Column,\r
+      HMainEditor.ScreenSize.Row,\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
+  if (HEditorFirst\r
+    || HBufferImageBackupVar.DisplayPosition.Row != HMainEditor.BufferImage->DisplayPosition.Row \r
+    || HBufferImageBackupVar.DisplayPosition.Column != HMainEditor.BufferImage->DisplayPosition.Column \r
+    || StatusBarGetRefresh()) {\r
+\r
+    StatusBarRefresh (\r
+      HEditorFirst,\r
+      HMainEditor.ScreenSize.Row,\r
+      HMainEditor.ScreenSize.Column,\r
+      0,\r
+      0,\r
+      TRUE\r
+      );\r
+    HBufferImageRefresh ();\r
+  }\r
+\r
+  if (HEditorFirst) {\r
+    MenuBarRefresh (    \r
+      HMainEditor.ScreenSize.Row,\r
+      HMainEditor.ScreenSize.Column);\r
+    HBufferImageRefresh ();\r
+  }\r
 \r
   //\r
   // EditorFirst is now set to FALSE\r
@@ -1865,7 +1775,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
@@ -2001,7 +1921,7 @@ HMainEditorHandleMouseInput (
     //\r
     // release LButton\r
     //\r
-    if (*BeforeLeftButtonDown == TRUE) {\r
+    if (*BeforeLeftButtonDown) {\r
       Action = TRUE;\r
     }\r
     //\r
@@ -2017,27 +1937,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
@@ -2097,11 +2007,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
@@ -2117,8 +2027,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
@@ -2254,9 +2164,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