Добавил:
Mymnan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Сборка Часть1 / avmis_labs / лабы / 1. клавиатура / KLAVA
.CPP#include <dos.h>
#include <conio.h>
#include <stdio.h>
void interrupt (*old9)(); /* OLD HANDLER*/
void interrupt far new9(); /* NEW HANDLER*/
void far *readvect (int in); /* READ VECTOR */
void writevect (int in,void far *h); /* WRITE VECTOR */
unsigned char F6_code=64; /* scan-code "F4" */
unsigned char key6_code=7;/* scan-code "r" */
int f=0; /* Flag */
union REGS rr;
struct SREGS sr;
/*--------------------------------------------------------*/
void main()
{
char string[80];
clrscr();
old9=(void (interrupt far*)())readvect(9);
writevect(9,(void far *)new9);
cprintf("\n\n\r\"hot\" combination: ");
cprintf("Right Shift, Left Ctrl, F6\n\r");
cprintf("button:6 ");
cprintf("\r\nEnter string>");
scanf("%s",string);
writevect(9,(void far *)old9);
}
/*--------------------------------------------------------*/
/* READ VECTOR */
void far *readvect(int in)
{
rr.h.ah=0x35;
rr.h.al=in;
intdosx(&rr,&rr,&sr);
return((void far*)MK_FP(sr.es,rr.x.bx));
}
/*--------------------------------------------------------*/
/* WRITE VECTOR */
void writevect(int in,void far *h)
{
rr.h.ah=0x25;
rr.h.al=in;
sr.ds=FP_SEG(h);
rr.x.dx=FP_OFF(h);
intdosx(&rr,&rr,&sr);
}
/*--------------------------------------------------------*/
/* NEW HANDLER*/
void interrupt far new9()
{
unsigned char c,x,y;
unsigned char byte17,byte18;
unsigned char mask=0x01;
unsigned char mask17=0x04;
unsigned char mask18=0x01;
byte17=peekb(0x40,0x17);
byte18=peekb(0x40,0x18);
if((inportb(0x60)==F6_code)&&(byte17&mask)&&
(byte17&mask17)&&((byte18&mask18)))
{
cputs("\7");
if(f==0) f=1;
else f=0;
(*old9)();
}
if( (f==1) && (inportb(0x60)==key6_code) )
{
c=inportb(0x61);
outportb(0x61,c|0x80);
outportb(0x61,c);
outportb(0x20,0x20);
}
else
(*old9)();
}