稍作修改使之更完善
#include”dos.h”
char key_state[128], key_pressed[128];
void interrupt far (*OldInt9Handler) ();
void far interrupt NewInt9 (void)
{
char ScanCode,temp;
ScanCode = inportb (0×60);
if (ScanCode & 0×80) {
ScanCode &= 0x7f;
key_state[ScanCode] = 0;
}
else {
key_state[ScanCode] = 1;
key_pressed[ScanCode] = 1;
}
OldInt9Handler();
}
void InstallKeyboard (void)
{
int i;
for (i = 0; i < 128; i++)
key_state = key_pressed = 0;
OldInt9Handler = getvect (9);
setvect (9, NewInt9);
}
void ShutDownKeyboard (void)
{
setvect (9, OldInt9Handler);
}
int GetKey (int ScanCode)
{
int res;
res = key_state[ScanCode] | key_pressed[ScanCode];
key_pressed[ScanCode] = 0;
return res;
}
main ()
{
int i,press;
InstallKeyboard ();
while (GetKey (1)==0){
press = 0;
for (i = 0; i < 128; i++)
if (GetKey (i)) {
press = 1;
printf (“%4d”,i);
}
if (press)
printf (“\n”);
else
printf (“\nNokey!\n”);
}
ShutDownKeyboard ();
}