Listing 4

#define ACK_BIT 128                /*  keyboard acknowledge bit */
#define HOT_Key 30                 /*  scan code for toggle key */

static void interrupt (*old_int)(); /*  original int 0x09 */
static int toggle;                  /*  Toggled value */

void interrupt my_interrupt()      /*  ours */
    {
    unsigned char scan_code, ack;
    
    scan_code = inportb(0x60);    /*  scan code from 8255 PIC */
    if (scan_code == HOT_Key)     /*  the one we watch */
        {
        toggle ^= 1;             /*  our toggle */
        scan_code = inportb(0x61);        /*  control port */
        outportb(0x61,scan_code | ACK_BIT);
                                       /*  send keyboard ACK */
        outportb(0x61,scan_code); /*  clear ack*/
        
        outportb(0x20,0x20);     /*  enable hardware interrupts */
        }
    else
        {*old_int)();            /*  normal processing */
    }

void install()
    {
    old_int = _getvect(0x9);      /*  save old one */
    _setvect(0x9,my_interrupt);    /*  install new one */
    }

void remove()
    {
    _setvect(0x9,old_int);         /*  restore original state */
    }