home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_08_08 / 8n08084a < prev    next >
Text File  |  1990-07-18  |  1KB  |  40 lines

  1.  
  2.  
  3.  
  4. #define  ACK_BIT 128               /* keyboard acknowledge bit */
  5. #define  HOT_Key  30               /* scan code for toggle key */
  6.  
  7. static void interrupt (*old_int)(); /* original int 0x09 */
  8. static int toggle;                  /* Toggled value */
  9.  
  10. void interrupt my_interrupt()      /* ours */
  11.      {
  12.      unsigned char scan_code, ack;
  13.  
  14.      scan_code = inportb(0x60);    /* scan code from 8255 PIC */
  15.      if (scan_code == HOT_Key)     /* the one we watch */
  16.           {
  17.           toggle ^= 1;             /* our toggle */
  18.           scan_code = inportb(0x61);       /* control port */
  19.           outportb(0x61,scan_code | ACK_BIT);
  20.                                                /* send keyboard ACK */
  21.           outportb(0x61,scan_code); /* clear ack*/
  22.  
  23.           outportb(0x20,0x20);     /* enable hardware interrupts */
  24.           }
  25.      else
  26.           (*old_int)();            /* normal processing */
  27.      }
  28.  
  29. void install()
  30.      {
  31.      old_int = _getvect(0x9);      /* save old one */
  32.      _setvect(0x9,my_interrupt);    /* install new one */
  33.      }
  34.  
  35. void remove()
  36.      {
  37.      _setvect(0x9,old_int);         /* restore original state */
  38.      }
  39.  
  40.