Code: Select all
void keyboard_handler() // called by kb IRQ
{
unsigned char scancode;
// Read from the keyboard's data buffer
scancode = inportb(0x60);
if (scancode & 0x80)
{
// check if shift is released
if(scancode == 0xaa) {shift = 0;}
}
else
{
switch(scancode)
{
case 58 : toggle_caps();
break;
case 42 : shift = 1;
break;
case 54 : shift = 1;
break;
case 14 : backspace();
break;
default : kb_getln(scancode);
}
}
}
int kbd = 0;
int done = 0;
char string[200];
int num;
void kb_getln(unsigned char scancode) // called by keyboard handler
{
if(kbd == 0)
{
die(); // does C have a die() function?
}
if(scancode == 28) // If enter is pressed
{
done = 1; // signal that we are finished
}
else
{
print_character(scancode); // print the character
string[num] = keyboard[scancode]; // look up in table
num++; // increment number
}
}
char getln() // called by user
{
kbd = 1;
done = 0;
num = 0;
while(done==0) // wait until done
{
__asm__ __volatile__("hlt");
}
return string;
kbd = 0;
}
-Stephen