The

  CSI Ps ; Ps ; Ps t

escape sequence serves for window manipulation. We can use the

  CSI 8 ; <rows> ; <columns> t

sequence to adapt eg. the xterm window size to the selected console mode.

Reference: <http://rtfm.etla.org/xterm/ctlseq.html>

Suggested-by: Andrew Fish <af...@apple.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <ler...@redhat.com>
---
 .../Universal/Console/TerminalDxe/TerminalDxe.inf  |  1 +
 .../Universal/Console/TerminalDxe/TerminalConOut.c | 30 ++++++++++++++++++++++
 2 files changed, 31 insertions(+)

diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf 
b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
index d4bd55b..eb1c760 100644
--- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
+++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
@@ -58,6 +58,7 @@
   DebugLib
   PcdLib
   BaseLib
+  PrintLib
 
 [Guids]
   gEfiGlobalVariableGuid                        ## SOMETIMES_CONSUMES ## 
Variable:L"ErrOutDev"
diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c 
b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c
index affb3ae..ed13e51 100644
--- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c
+++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c
@@ -12,6 +12,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER 
EXPRESS OR IMPLIED.
 
 **/
 
+#include <Library/PrintLib.h>
+
 #include "Terminal.h"
 
 //
@@ -84,6 +86,16 @@ CHAR16 mClearScreenString[]        = { ESC, '[', '2', 'J', 0 
};
 CHAR16 mSetCursorPositionString[]  = { ESC, '[', '0', '0', ';', '0', '0', 'H', 
0 };
 
 //
+// Note that this is an ASCII format string, taking two INT32 arguments:
+// rows, columns.
+//
+// A %d (INT32) format specification can expand to at most 11 characters.
+//
+CHAR8 mResizeTextAreaFormatString[] = "\x1B[8;%d;%dt";
+#define RESIZE_SEQ_SIZE (sizeof mResizeTextAreaFormatString + 2 * (11 - 2))
+
+
+//
 // Body of the ConOut functions
 //
 
@@ -477,6 +489,24 @@ TerminalConOutSetMode (
     return EFI_DEVICE_ERROR;
   }
 
+  if (TerminalDevice->TerminalType == PCANSITYPE) {
+    CHAR16 ResizeSequence[RESIZE_SEQ_SIZE];
+
+    UnicodeSPrintAsciiFormat (
+      ResizeSequence,
+      sizeof ResizeSequence,
+      mResizeTextAreaFormatString,
+      (INT32) TerminalDevice->TerminalConsoleModeData[ModeNumber].Rows,
+      (INT32) TerminalDevice->TerminalConsoleModeData[ModeNumber].Columns
+      );
+    TerminalDevice->OutputEscChar = TRUE;
+    Status                        = This->OutputString (This, ResizeSequence);
+    TerminalDevice->OutputEscChar = FALSE;
+    if (EFI_ERROR (Status)) {
+      return EFI_DEVICE_ERROR;
+    }
+  }
+
   This->Mode->Mode  = (INT32) ModeNumber;
 
   Status            = This->ClearScreen (This);
-- 
1.8.3.1


------------------------------------------------------------------------------
Flow-based real-time traffic analytics software. Cisco certified tool.
Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer
Customize your own dashboards, set traffic alerts and generate reports.
Network behavioral analysis & security monitoring. All-in-one tool.
http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to