#include
"dos.h"
#include
"iostream.h"
int
adapter=0x3d8;
int
clkcnt=0,mntr=1,sf=0;
int mtick=182;
unsigned
ax,dx,si,es;
void
interrupt (*prev_9)();
void
interrupt our_9();
void
interrupt (*prev_8)();
void
interrupt our_8();
main()
{
unsigned long far *ptr_9;
unsigned long far *ptr_8;
ptr_9=(unsigned long far*)(9*4);
prev_9=(void (interrupt far*)())*ptr_9;
*ptr_9=(unsigned long)our_9;
ptr_8=(unsigned long far*)(8*4);
prev_8=(void (interrupt far*)())*ptr_8;
*ptr_8=(unsigned long)our_8;
keep(0,2500);
return 0;
}
void
interrupt our_9()
{
void monitoron();
cout<<"\into out_9";
ax=_AX;
enable();
sf=1;
if(mntr!=1)
monitoron();
_AX=ax;
disable();
(*prev_9)();
return;
}
void
interrupt our_8()
{
void monitoroff();
ax=_AX;
if(sf!=1)
{
if(clkcnt>=mtick)
{
sf=1;
monitoroff();
}
else
clkcnt++;
}
else
{
clkcnt=0;
sf=0;
}
_AX=ax;
(*prev_8)();
return;
}
void
monitoron()
{
disable();
cout<<"\ninto on";
ax=_AX;
dx=_DX;
es=_ES;
si=_SI;
_AL=peekb(0x40,0x65);
_SI=si;
_ES=es;
outportb(adapter,_AL);
mntr=1;
_DX=dx;
_AX=ax;
enable();
return;
}
void
monitoroff()
{
disable();
cout<<"\ninto off";
ax=_AX;
dx=_DX;
outportb(adapter,0x25);
mntr=2;
_DX=dx;
_AX=ax;
enable();
return;
}