#include "fs/devices/ConsoleDevice.h" #include "video/TextConsole.h" #include #include static Buffer g_console_input; Result> ConsoleDevice::create() { return (SharedPtr)TRY(make_shared()); } Result ConsoleDevice::read(u8* buf, usize, usize length) const { if (length > g_console_input.size()) length = g_console_input.size(); memcpy(buf, g_console_input.data(), length); memmove(g_console_input.data(), g_console_input.data() + length, g_console_input.size() - length); g_console_input.try_resize(g_console_input.size() - length).release_value(); return length; } Result ConsoleDevice::write(const u8* buf, usize, usize length) { TextConsole::write((const char*)buf, length); return length; } bool ConsoleDevice::blocking() const { return g_console_input.size() == 0; } void ConsoleDevice::did_press_key(char key) { *g_console_input.slice_at_end(1).value() = (u8)key; }