Date: Thu, 22 Sep 94 00:18:00 PDT From: gim AT step DOT stanford DOT edu (GimHong Tan) To: djgpp AT sun DOT soe DOT clarkson DOT edu Subject: Keyboard Interrupt Handler Hi, I'm trying to write a keyboard handler in real-mode. However, compiling the program I have below resulted in the variable pres being decremented to 19 and any further key-press or key-release would not change the variable pres. As I'm not too familiar dos-level programming it might be something I've missed but then again it could be some issues in setting interrupt vectors I've ignored. Could some gurus shed some light in this matter? Thanks. GimHong Tan -------------------------------------------------------------------------- #include #include #include #include _go32_dpmi_registers regs; int pres = 20; #define KEYBOARD x9 void my_handler(_go32_dpmi_registers *r) { pres--; } void main() { _go32_dpmi_seginfo info; _go32_dpmi_seginfo old_vector; extern Go32_Info_Block _go32_info_block; _go32_dpmi_get_real_mode_interrupt_vector(KEYBOARD, &old_vector); info.pm_offset = my_handler; _go32_dpmi_allocate_real_mode_callback_iret(&info, ®s); _go32_dpmi_set_real_mode_interrupt_vector(KEYBOARD, &info); while(pres>) { printf("pres = %d\n", pres); } _go32_dpmi_set_real_mode_interrupt_vector(KEYBOARD, &old_vector); _go32_dpmi_free_real_mode_callback(&info); }