www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1994/09/22/04:01:23

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 <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, &regs);
  _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 -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019