Mail Archives: djgpp/1994/09/22/04:01:23
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 <stdio.h>
#include <stdlib.h>
#include <dpmi.h>
#include <go32.h>
_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);
}
- Raw text -