From a1587d16d511ce0b3d7bdec2db34a626150578f7 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Tue, 29 Apr 2008 01:24:41 +0000 Subject: [PATCH] Ctrl-L clears the KDL screen. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25233 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/debug/blue_screen.cpp | 8 ++++++++ src/system/kernel/debug/blue_screen.h | 1 + src/system/kernel/debug/debug.cpp | 22 ++++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/src/system/kernel/debug/blue_screen.cpp b/src/system/kernel/debug/blue_screen.cpp index 87deeccb35..ae6920e8dc 100644 --- a/src/system/kernel/debug/blue_screen.cpp +++ b/src/system/kernel/debug/blue_screen.cpp @@ -595,6 +595,14 @@ blue_screen_enter(bool debugOutput) } +void +blue_screen_clear_screen(void) +{ + sModule->clear(sScreen.attr); + move_cursor(0, 0); +} + + char blue_screen_getchar(void) { diff --git a/src/system/kernel/debug/blue_screen.h b/src/system/kernel/debug/blue_screen.h index ca713ac335..2789e832bd 100644 --- a/src/system/kernel/debug/blue_screen.h +++ b/src/system/kernel/debug/blue_screen.h @@ -16,6 +16,7 @@ extern "C" { status_t blue_screen_init(void); status_t blue_screen_enter(bool debugOutput); +void blue_screen_clear_screen(void); char blue_screen_getchar(void); void blue_screen_putchar(char c); void blue_screen_puts(const char *text); diff --git a/src/system/kernel/debug/debug.cpp b/src/system/kernel/debug/debug.cpp index a0919990fd..375d949736 100644 --- a/src/system/kernel/debug/debug.cpp +++ b/src/system/kernel/debug/debug.cpp @@ -376,6 +376,28 @@ read_line(char *buffer, int32 maxLength, length = position; } break; + case 0x1f & 'L': // CTRL-L -- clear screen + if (sBlueScreenOutput) { + // All the following needs to be transparent for the + // serial debug output. I.e. after clearing the screen + // we have to get the on-screen line into the visual state + // it should have. + + // clear screen + blue_screen_clear_screen(); + + // reprint line + buffer[length] = '\0'; + blue_screen_puts(kKDLPrompt); + blue_screen_puts(buffer); + + // reposition cursor + if (position < length) { + for (int i = length; i > position; i--) + blue_screen_puts("\x1b[1D"); + } + } + break; case 27: // escape sequence c = readChar(); if (c != '[') {