Признак готовности клавиатуры?Это в новом обработчике?А то я не совсем понял.
Я думал проблема в этой части
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)(); только вот я не пойму зачем каждый раз вызывать старый обработчик?