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