#pragma once #include #include #include #include namespace Kernel { class Shell { public: Shell(TTY*); Shell(const Shell&) = delete; void SetPrompt(BAN::StringView); void Run(); private: void ReRenderBuffer() const; BAN::Vector ParseArguments(BAN::StringView) const; void ProcessCommand(const BAN::Vector&); void KeyEventCallback(Input::KeyEvent); private: TTY* m_tty; BAN::Vector m_old_buffer; BAN::Vector m_buffer; BAN::String m_prompt; uint32_t m_prompt_length = 0; struct { uint32_t line = 0; uint32_t col = 0; uint32_t index = 0; } m_cursor_pos; }; }