aboutsummaryrefslogtreecommitdiff
path: root/include/06.keyboard/keyboard12.c
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;
	}
    }
}