From 10b666f69a610c0bdc5bd60efd1d7d2bf499707d Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 2 Nov 2018 14:06:48 +0100 Subject: Basic ^C interrupt implementation. For testing, I made cat put itself into a new process group. This should eventually be done by sh between fork() and exec(). --- Kernel/Keyboard.h | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) (limited to 'Kernel/Keyboard.h') diff --git a/Kernel/Keyboard.h b/Kernel/Keyboard.h index 7f374b840a..923c3ab9aa 100644 --- a/Kernel/Keyboard.h +++ b/Kernel/Keyboard.h @@ -6,15 +6,25 @@ #include #include "IRQHandler.h" -class KeyboardClient { -public: - virtual ~KeyboardClient(); - virtual void onKeyPress(byte) = 0; -}; +class KeyboardClient; class Keyboard final : public IRQHandler, public CharacterDevice { AK_MAKE_ETERNAL public: + enum Modifier { + Mod_Alt = 0x01, + Mod_Ctrl = 0x02, + Mod_Shift = 0x04, + }; + + struct Key { + byte character { 0 }; + byte modifiers { 0 }; + bool alt() { return modifiers & Mod_Alt; } + bool ctrl() { return modifiers & Mod_Ctrl; } + bool shift() { return modifiers & Mod_Shift; } + }; + static Keyboard& the() PURE; virtual ~Keyboard() override; @@ -34,7 +44,12 @@ private: void emit(byte); KeyboardClient* m_client { nullptr }; - CircularQueue m_queue; + CircularQueue m_queue; byte m_modifiers { 0 }; }; +class KeyboardClient { +public: + virtual ~KeyboardClient(); + virtual void onKeyPress(Keyboard::Key) = 0; +}; -- cgit v1.2.3