#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;

}