Признак готовности клавиатуры?Это в новом обработчике?А то я не совсем понял.
Я думал проблема в этой части
if( (Mode==1) && (inportb(0x60)== 0x22 ) )
   {
    c=inportb(0x61);
    outportb(0x61,c|0x80);
    outportb(0x61,c);
    outportb(0x20,0x20);
   }
,но покопавшись ещё раз в примере,откуда взят этот кусок,увидел,что всё совпадает.
Добавлено через 35 минут и 31 секунду:#include <dos.h>
#include <stdio.h>
#include <conio.h>
void interrupt (*old9)();
void interrupt new9();
char f=0;
void main()
{
  char string[80];
  clrscr();
  old9=_dos_getvect(0x9);
  _dos_setvect(0x9, new9);
  cprintf("\rPress Alt+Shift+F7 To Block or Unlock The g Button\n\r");
  cprintf("\rEnter A Char String>");
  scanf("%s",string);
  _dos_setvect(0x9,old9);
}
void interrupt new9()
{
  unsigned char c,value,Shift=0x02,Alt=0x08;
  value=peekb(0x40,0x17);
  if((inportb(0x60)==0x41)&&(value&Shift)&&(value&Alt))
  {
   if(f==0)
   {
    f=1;
    cprintf("\n\rThe g key is locked\n\r");
   }
   else
   {
    f=0;
    cprintf("\n\rThe g key is unlocked\n\r");
   }
   (*old9)();
  }
  if( (f==1) && (inportb(0x60)==0x22) )
  {
   c=inportb(0x61);
   outportb(0x61,c|0x80);
   outportb(0x61,c);
   outportb(0x20,0x20);
  }
  else
   (*old9)();
}
Вот так заработало.
Я так понял дело было в  (*old9)(); только вот я не пойму зачем каждый раз вызывать старый обработчик?