+#include <irq/interrupt.h>
+
+static int was_released = 0, is_caps = 0;
+
+int ps2_keyb_handler()
+{
+ uint8_t scancode = inb(PS2_DATA_PORT);
+ if (was_released) {
+ was_released = 0;
+ return 0;
+ }
+
+ if (scancode == 0xf0) {
+ was_released = 1;
+ uint8_t scancode = inb(PS2_DATA_PORT);
+ if (scancode == 0x12) {
+ is_caps = 0;
+ }
+ return 0;
+ } else {
+ if (scancode == 0x12) {
+ is_caps = 1;
+ return 0;
+ }
+ if (!is_caps) {
+ kprintc(scancodes[scancode], 0);
+ } else {
+ kprintc(scancodes[scancode] - ('a'-'A'), 0);
+ }
+ }
+ return 0;
+}