]> git.proxmox.com Git - mirror_edk2.git/commitdiff
fix for word wrapping.
authorjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 15 Apr 2011 18:20:40 +0000 (18:20 +0000)
committerjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 15 Apr 2011 18:20:40 +0000 (18:20 +0000)
fix for SimpleTextInEx callbacks.
remove an ASSERT.
fix for -noconsolein parameter.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11544 6f19259b-4bc3-4df7-8a09-765794883524

ShellPkg/Application/Shell/ConsoleLogger.c
ShellPkg/Application/Shell/FileHandleWrappers.c
ShellPkg/Application/Shell/Shell.c
ShellPkg/Application/Shell/Shell.h
ShellPkg/Application/Shell/ShellProtocol.c
ShellPkg/Library/UefiShellLevel3CommandsLib/Pause.c
ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.uni

index 58518cabe94238afd230c1b172c6093fba06759e..01104e673593894c9e5793a593b8dadee429022b 100644 (file)
@@ -729,7 +729,7 @@ ConsoleLoggerPrintWithPageBreak(
       //\r
       // check if that is the last column\r
       //\r
-      if ((INTN)ConsoleInfo->ColsPerScreen == ConsoleInfo->OurConOut.Mode->CursorColumn - 1) {\r
+      if ((INTN)ConsoleInfo->ColsPerScreen == ConsoleInfo->OurConOut.Mode->CursorColumn + 1) {\r
         //\r
         // output a line similar to the linefeed character.\r
         //\r
@@ -753,7 +753,7 @@ ConsoleLoggerPrintWithPageBreak(
         //\r
         // Update LineStart Variable\r
         //\r
-        LineStart = Walker;\r
+        LineStart = Walker + 1;\r
 \r
         //\r
         // increment row count and zero the column\r
@@ -810,12 +810,22 @@ ConsoleLoggerOutputString (
   IN  CHAR16                          *WString\r
   )\r
 {\r
+  EFI_INPUT_KEY               Key;\r
+  UINTN                       EventIndex;\r
   CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo;\r
   ConsoleInfo = CONSOLE_LOGGER_PRIVATE_DATA_FROM_THIS(This);\r
   if (ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoConsoleOut) {\r
     return (EFI_UNSUPPORTED);\r
   }\r
   ASSERT(ShellInfoObject.ConsoleInfo == ConsoleInfo);\r
+  if (ShellInfoObject.HaltOutput) {\r
+    //\r
+    // just get some key\r
+    //\r
+    gBS->WaitForEvent (1, &gST->ConIn->WaitForKey, &EventIndex);\r
+    gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
+    ShellInfoObject.HaltOutput = FALSE;\r
+  }\r
   if (!ShellInfoObject.ConsoleInfo->Enabled) {\r
     return (EFI_DEVICE_ERROR);\r
   } else if (ShellInfoObject.PageBreakEnabled) {\r
index b2163bebb950cab8185bfe72f8cd7e8671807e5d..3cadc41e0b390771c5f4ad91d10c85b93cb29e39 100644 (file)
@@ -249,7 +249,7 @@ FileInterfaceStdErrRead(
   File style interface for NUL file (Read).\r
   \r
   @param[in] This             Ignored.\r
-  @param[in,out] BufferSize   Ignored.\r
+  @param[in,out] BufferSize   Poiner to 0 upon return.\r
   @param[out] Buffer          Ignored.\r
   \r
   @retval EFI_SUCCESS Always.\r
@@ -262,6 +262,7 @@ FileInterfaceNulRead(
   OUT     VOID              *Buffer\r
   )\r
 {\r
+  *BufferSize = 0;\r
   return (EFI_SUCCESS);\r
 }\r
 \r
index a56967189bba7ca7e4b7c09e55ac983a18c0a26f..ae4c0606e343de4a4768090e662c8842282be079 100644 (file)
@@ -55,7 +55,8 @@ SHELL_INFO ShellInfoObject = {
   NULL,\r
   NULL,\r
   NULL,\r
-  NULL\r
+  NULL,\r
+  FALSE\r
 };\r
 \r
 STATIC CONST CHAR16 mScriptExtension[]      = L".NSH";\r
@@ -155,17 +156,11 @@ UefiMain (
   IN EFI_SYSTEM_TABLE  *SystemTable\r
   )\r
 {\r
-  EFI_STATUS  Status;\r
-  CHAR16      *TempString;\r
-  UINTN       Size;\r
-//    EFI_INPUT_KEY                 Key;\r
-\r
-//  gST->ConOut->OutputString(gST->ConOut, L"ReadKeyStroke Calling\r\n");\r
-//\r
-//  Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
-//\r
-//  gST->ConOut->OutputString(gST->ConOut, L"ReadKeyStroke Done\r\n");\r
-//  gBS->Stall (1000000);\r
+  EFI_STATUS                      Status;\r
+  CHAR16                          *TempString;\r
+  UINTN                           Size;\r
+  EFI_HANDLE                      ConInHandle;\r
+  EFI_SIMPLE_TEXT_INPUT_PROTOCOL  *OldConIn;\r
 \r
   if (PcdGet8(PcdShellSupportLevel) > 3) {\r
     return (EFI_UNSUPPORTED);\r
@@ -361,6 +356,18 @@ UefiMain (
         Status = InternalEfiShellStartCtrlSMonitor();\r
       }\r
 \r
+      if (!EFI_ERROR(Status) && ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoConsoleIn) {\r
+        //\r
+        // close off the gST->ConIn\r
+        //\r
+        OldConIn      = gST->ConIn;\r
+        ConInHandle   = gST->ConsoleInHandle;\r
+        gST->ConIn = CreateSimpleTextInOnFile((SHELL_FILE_HANDLE)&FileInterfaceNulFile, &gST->ConsoleInHandle);\r
+      } else {\r
+        OldConIn      = NULL;\r
+        ConInHandle   = NULL;\r
+      }\r
+\r
       if (!EFI_ERROR(Status) && PcdGet8(PcdShellSupportLevel) >= 1) {\r
         //\r
         // process the startup script or launch the called app.\r
@@ -399,6 +406,11 @@ UefiMain (
           Status = DoShellPrompt();\r
         } while (!ShellCommandGetExit());\r
       }\r
+      if (OldConIn != NULL && ConInHandle != NULL) {\r
+        CloseSimpleTextInOnFile (gST->ConIn);\r
+        gST->ConIn            = OldConIn;\r
+        gST->ConsoleInHandle  = ConInHandle;\r
+      }\r
     }\r
   }\r
 \r
@@ -548,8 +560,6 @@ IsScriptOnlyCommand(
   return (FALSE);\r
 }\r
 \r
-\r
-\r
 /**\r
   This function will populate the 2 device path protocol parameters based on the\r
   global gImageHandle.  The DevPath will point to the device path for the handle that has\r
@@ -598,6 +608,11 @@ GetDevicePathsForImageAndFile (
     if (!EFI_ERROR (Status)) {\r
       *DevPath  = DuplicateDevicePath (ImageDevicePath);\r
       *FilePath = DuplicateDevicePath (LoadedImage->FilePath);\r
+      gBS->CloseProtocol(\r
+                  LoadedImage->DeviceHandle,\r
+                  &gEfiDevicePathProtocolGuid,\r
+                  gImageHandle,\r
+                  NULL);\r
     }\r
     gBS->CloseProtocol(\r
                 gImageHandle,\r
@@ -620,6 +635,7 @@ STATIC CONST SHELL_PARAM_ITEM mShellParamList[] = {
   {L"-delay",         TypeValue},\r
   {NULL, TypeMax}\r
   };\r
+\r
 /**\r
   Process all Uefi Shell 2.0 command line options.\r
 \r
index 3699fb233de76b79d242610bad5e4db9d6557b56..51ec4f3a4bd275699d9e0afd55767202cfbccd82 100644 (file)
@@ -50,6 +50,7 @@
 #include "ShellEnvVar.h"\r
 #include "ConsoleLogger.h"\r
 #include "ShellManParser.h"\r
+#include "ConsoleWrappers.h"\r
 \r
 typedef struct {\r
   LIST_ENTRY        Link;           ///< Standard linked list handler.\r
@@ -113,6 +114,7 @@ typedef struct {
   EFI_HANDLE                    CtrlSNotifyHandle2;   ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
   EFI_HANDLE                    CtrlSNotifyHandle3;   ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
   EFI_HANDLE                    CtrlSNotifyHandle4;   ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
+  BOOLEAN                       HaltOutput;           ///< TRUE to start a CTRL-S halt.\r
 } SHELL_INFO;\r
 \r
 extern SHELL_INFO ShellInfoObject;\r
index 2d587ea03b1f3838144bd61ce40f17a46841db9c..8b2e89041b8c62d59529392b70bc9d8bf0901580 100644 (file)
@@ -3326,8 +3326,6 @@ NotificationFunction(
   IN EFI_KEY_DATA *KeyData\r
   )\r
 {\r
-  EFI_INPUT_KEY Key;\r
-  UINTN         EventIndex;\r
 //  ShellPrintEx(-1,-1,L"  <Notify>  ");\r
    if ((KeyData->Key.UnicodeChar == L'c' || KeyData->Key.UnicodeChar == 3) &&\r
       (KeyData->KeyState.KeyShiftState == (EFI_SHIFT_STATE_VALID|EFI_LEFT_CONTROL_PRESSED) || KeyData->KeyState.KeyShiftState  == (EFI_SHIFT_STATE_VALID|EFI_RIGHT_CONTROL_PRESSED))\r
@@ -3339,11 +3337,7 @@ NotificationFunction(
   } else if  ((KeyData->Key.UnicodeChar == L's') &&\r
               (KeyData->KeyState.KeyShiftState  == (EFI_SHIFT_STATE_VALID|EFI_LEFT_CONTROL_PRESSED) || KeyData->KeyState.KeyShiftState  == (EFI_SHIFT_STATE_VALID|EFI_RIGHT_CONTROL_PRESSED))\r
               ){ \r
-    //\r
-    // just get some key\r
-    //\r
-    gBS->WaitForEvent (1, &gST->ConIn->WaitForKey, &EventIndex);\r
-    gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
+    ShellInfoObject.HaltOutput = TRUE;\r
   }\r
   return (EFI_SUCCESS);\r
 }\r
index facacaac7dee6e47868392540244c9b1c4e4d6a9..d6ed793579d430edce72be83f33fbc59e339d41b 100644 (file)
@@ -82,9 +82,8 @@ ShellCommandRunPause (
       } else {\r
         Status = ShellPromptForResponse(ShellPromptResponseTypeQuitContinue, NULL, (VOID**)&Resp);\r
       }\r
-      ASSERT_EFI_ERROR(Status);\r
 \r
-      if (Resp == NULL || *Resp == ShellPromptResponseQuit) {\r
+      if (EFI_ERROR(Status) || Resp == NULL || *Resp == ShellPromptResponseQuit) {\r
         ShellCommandRegisterExit(TRUE);\r
         ShellStatus = SHELL_ABORTED;\r
       }\r
index 346b464e8235aa2684b8d8c8a5074d873562bc3a..a50aa28d26827168cae93a10b28e328641fe9230 100644 (file)
Binary files a/ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.uni and b/ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.uni differ