From 2a65c5fd0f6292952b05deb89d96cba2ff32c64c Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 27 Dec 2022 20:11:49 +0200 Subject: [PATCH] Kernel: Shell now actually prints to its TTY --- kernel/kernel/Shell.cpp | 51 ++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/kernel/kernel/Shell.cpp b/kernel/kernel/Shell.cpp index c3c1c266db..1b643f1ba4 100644 --- a/kernel/kernel/Shell.cpp +++ b/kernel/kernel/Shell.cpp @@ -9,6 +9,9 @@ #include #include +#define TTY_PRINT(...) BAN::Formatter::print([this](char c) { m_tty->PutChar(c); }, __VA_ARGS__) +#define TTY_PRINTLN(...) BAN::Formatter::println([this](char c) { m_tty->PutChar(c); }, __VA_ARGS__) + namespace Kernel { @@ -29,7 +32,7 @@ namespace Kernel void Shell::PrintPrompt() { - kprint("\e[32muser\e[m# "); + TTY_PRINT("\e[32muser\e[m# "); } void Shell::SetTTY(TTY* tty) @@ -56,11 +59,11 @@ namespace Kernel { if (arguments.Size() != 1) { - kprintln("'date' does not support command line arguments"); + TTY_PRINTLN("'date' does not support command line arguments"); return; } auto time = RTC::GetCurrentTime(); - kprintln("{}", time); + TTY_PRINTLN("{}", time); return; } @@ -68,11 +71,11 @@ namespace Kernel { if (arguments.Size() > 1) { - kprint("{}", arguments[1]); + TTY_PRINT("{}", arguments[1]); for (size_t i = 2; i < arguments.Size(); i++) - kprint(" {}", arguments[i]); + TTY_PRINT(" {}", arguments[i]); } - kprintln(""); + TTY_PRINTLN(""); return; } @@ -80,7 +83,7 @@ namespace Kernel { if (arguments.Size() != 1) { - kprintln("'clear' does not support command line arguments"); + TTY_PRINTLN("'clear' does not support command line arguments"); return; } m_tty->Clear(); @@ -95,7 +98,7 @@ namespace Kernel auto start = PIT::ms_since_boot(); ProcessCommand(new_args); auto duration = PIT::ms_since_boot() - start; - kprintln("took {} ms", duration); + TTY_PRINTLN("took {} ms", duration); return; } @@ -103,12 +106,12 @@ namespace Kernel { if (arguments.Size() != 1) { - kprintln("'cpuinfo' does not support command line arguments"); + TTY_PRINTLN("'cpuinfo' does not support command line arguments"); return; } if (!CPUID::IsAvailable()) { - kprintln("'cpuid' instruction not available"); + TTY_PRINTLN("'cpuid' instruction not available"); return; } @@ -116,16 +119,16 @@ namespace Kernel auto vendor = CPUID::GetVendor(); CPUID::GetFeatures(ecx, edx); - kprintln("Vendor: '{}'", vendor); + TTY_PRINTLN("Vendor: '{}'", vendor); bool first = true; for (int i = 0; i < 32; i++) if (ecx & ((uint32_t)1 << i)) - kprint("{}{}", first ? (first = false, "") : ", ", CPUID::FeatStringECX((uint32_t)1 << i)); + TTY_PRINT("{}{}", first ? (first = false, "") : ", ", CPUID::FeatStringECX((uint32_t)1 << i)); for (int i = 0; i < 32; i++) if (edx & ((uint32_t)1 << i)) - kprint("{}{}", first ? (first = false, "") : ", ", CPUID::FeatStringEDX((uint32_t)1 << i)); + TTY_PRINT("{}{}", first ? (first = false, "") : ", ", CPUID::FeatStringEDX((uint32_t)1 << i)); if (!first) - kprintln(""); + TTY_PRINTLN(""); return; } @@ -134,19 +137,19 @@ namespace Kernel { if (arguments.Size() != 1) { - kprintln("'random' does not support command line arguments"); + TTY_PRINTLN("'random' does not support command line arguments"); return; } if (!CPUID::IsAvailable()) { - kprintln("'cpuid' instruction not available"); + TTY_PRINTLN("'cpuid' instruction not available"); return; } uint32_t ecx, edx; CPUID::GetFeatures(ecx, edx); if (!(ecx & CPUID::Features::ECX_RDRND)) { - kprintln("cpu does not support RDRAND instruction"); + TTY_PRINTLN("cpu does not support RDRAND instruction"); return; } @@ -154,7 +157,7 @@ namespace Kernel { uint32_t random; asm volatile("rdrand %0" : "=r"(random)); - kprintln(" 0x{8H}", random); + TTY_PRINTLN(" 0x{8H}", random); } return; @@ -164,7 +167,7 @@ namespace Kernel { if (arguments.Size() != 1) { - kprintln("'reboot' does not support command line arguments"); + TTY_PRINTLN("'reboot' does not support command line arguments"); return; } uint8_t good = 0x02; @@ -175,7 +178,7 @@ namespace Kernel return; } - kprintln("unrecognized command '{}'", arguments.Front()); + TTY_PRINTLN("unrecognized command '{}'", arguments.Front()); } static bool IsSingleUnicode(BAN::StringView sv) @@ -220,7 +223,7 @@ namespace Kernel { if (!m_buffer.Empty()) { - kprint("\b \b", 3); + TTY_PRINT("\b \b", 3); uint32_t last_len = GetLastLength(m_buffer); for (uint32_t i = 0; i < last_len; i++) @@ -232,7 +235,7 @@ namespace Kernel case Keyboard::Key::Enter: case Keyboard::Key::NumpadEnter: { - kprint("\n"); + TTY_PRINT("\n"); ProcessCommand(MUST(m_buffer.SV().Split(' '))); m_buffer.Clear(); PrintPrompt(); @@ -240,7 +243,7 @@ namespace Kernel } case Keyboard::Key::Escape: - kprintln("time since boot {} ms", PIT::ms_since_boot()); + TTY_PRINTLN("time since boot {} ms", PIT::ms_since_boot()); break; case Keyboard::Key::Tab: @@ -251,7 +254,7 @@ namespace Kernel const char* utf8 = Keyboard::key_event_to_utf8(event); if (utf8) { - kprint("{}", utf8); + TTY_PRINT("{}", utf8); m_buffer.Append(utf8); } break;