/******************************************************************************************* keys.c (C) 1992,97 MHG *******************************************************************************************/ #include #include #include "keys.h" /******************************************************************************************* DATA *******************************************************************************************/ static void interrupt (far *old_int9)(void)=0; char keyx[256]; /******************************************************************************************* EXTERNALS *******************************************************************************************/ extern unsigned char *keytail; extern unsigned char *keyhead; extern char *keybuff; /******************************************************************************************* Interrupt *******************************************************************************************/ void interrupt key_handler(void) { register char key; unsigned char p; unsigned char scan; scan = inp(0x60); key=inp(0x61); outp(0x61, (key| 0x80)); outp(0x61, key); outp(0x20,0x20); if (scan & 0x80) { keyx[scan&0x7f] = 0; } else { keyx[scan&0x7f] = 1; } p=*keytail; p++; p&=255; keybuff[p]=scan; *keytail=p; } /******************************************************************************************* Install *******************************************************************************************/ void install_keyboard_interrupt(void) { int i; for (i=0; i<128; i++) keyx[i]=0; _disable(); old_int9 = _dos_getvect(9); _dos_setvect(9,key_handler); _enable(); } /******************************************************************************************* Remove *******************************************************************************************/ void remove_keyboard_interrupt(void) { _disable(); if (old_int9) _dos_setvect(9,old_int9); _enable(); }