/* * DOS interrupt 09h handler (IRQ1 - KEYBOARD) */ #include #include #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "miscemu.h" #include "debugtools.h" #include "dosexe.h" DEFAULT_DEBUG_CHANNEL(int); #define QUEUELEN 31 static struct { BYTE queuelen,queue[QUEUELEN],ascii[QUEUELEN]; } kbdinfo; /********************************************************************** * INT_Int09Handler * * Handler for int 09h. */ void WINAPI INT_Int09Handler( CONTEXT86 *context ) { BYTE ascii, scan = INT_Int09ReadScan(&ascii); BYTE ch[2]; int cnt, c2; TRACE("scan=%02x\n",scan); if (!(scan & 0x80)) { if (ascii) { /* we already have an ASCII code, no translation necessary */ ch[0] = ascii; cnt = 1; } else { #if 0 /* FIXME: cannot call USER functions here */ UINT vkey = MapVirtualKeyA(scan&0x7f, 1); /* as in TranslateMessage, windows/input.c */ cnt = ToAscii(vkey, scan, QueueKeyStateTable, (LPWORD)ch, 0); #else cnt = 0; #endif } if (cnt>0) { for (c2=0; c2