blob: a0a8a0f3514e3b55c492f48a31519021eeaa207f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
void keyboard_handler()
{
ioport_out(PIC1_COMMAND_PORT, 0x20);
uint8_t status = ioport_in(KEYBOARD_STATUS_PORT);
if (status & 0x1)
{
uint8_t keycode = ioport_in(KEYBOARD_DATA_PORT);
if(keycode<0x80)
{
ispressed[keycode]=1;
if(keycode==0x0E) backspace();
else if(keycode==0x1C) enter();
else if(keycode==0x39) space();
else if(keycode==72) keyup();
else if(keycode==80) keydown();
else if(keycode==75) keyleft();
else if(keycode==77) keyright();
else
{
char c=charcode[keycode];
if(c!=' ')
{
if(lctrl)
{
if(c=='l')
{
clear();
prompt();
printf("%s",buffer[buffer_current]);
return;
}
}
if(lshift||rshift)
{
c=shift_charcode[keycode];
}
buffer[buffer_current][buffer_index++]=c;
printf("%c",c);
}
}
}
else
{
ispressed[keycode-0x80]=0;
}
}
}
|