#include<graphics.h>
#include<dos.h>
#include<stdio.h>
void mainscreen1(int sx,int sy,int ex,int ey);
void mainscreen2(int sx,int sy,int ex,int ey);
void mainscreen3(int sx,int sy,int ex,int ey);
void mainscreen4(int sx,int sy,int ex,int ey);
void mainscreen5(int sx,int sy,int ex,int ey);
void biossettings();
void connector();
void hardware();
void systemrequirements(void);
union REGS i,o;
int initmouse();
void showmouseptr();
void restrictmouseptr();
void getmousepos();

void exitf();

void main()
{
int sx,sy,ex,ey;
int gd=DETECT,gm;
initgraph(&gd,&gm,"e:\\tc\\bgi");
setviewport(1,1,640,470,1);
if( initmouse()==0)
{
closegraph();
restorecrtmode();
printf("Mouse Driver is not loaded");
exit(1);
}
restrictmouseptr(1,1,640,480);
showmouseptr();

sx=15;
sy=10;
ex=630;
ey=470;
mainscreen1(sx,sy,ex,ey);
mainscreen2(sx,sy,ex,ey);
systemrequirements();


getch();
}

void mainscreen1(int sx,int sy,int ex,int ey)
{
   setfillstyle(1,7);
   bar(sx,sy,ex,ey);
   setfillstyle(1,7);
   setcolor(15);
   line(sx,sy,sx,ey);
   line(sx,sy,ex,sy);
   line(sx,sy,sx,ey);
   line(sx,sy,ex,sy);
   setcolor(0);
   line(ex,sy,ex,ey);
   line(ex,sy,ex,ey);
   line(sx,ey,ex,ey);
   line(sx,ey,ex,ey);


   settextstyle(0,0,0);
   setfillstyle(1,1);
   bar(sx+2,sy+2,ex-2,sy+20);
   setcolor(13);
   settextstyle(8,0,1);
   outtextxy(sx+160,sy-5,"SYSTEM  REQUIREMENTS ");
   //for x
   setfillstyle(1,7);
   bar(ex-15,sy+4,ex-4,sy+15);
   setcolor(15);
   line(ex-15,sy+4,ex-4,sy+4);
   line(ex-15,sy+4,ex-15,sy+15);
   setcolor(0);
   line(ex-15,sy+15,ex-4,sy+15);
   line(ex-4,sy+4,ex-4,sy+15);
   setcolor(1);
   settextstyle(0,0,1);
   outtextxy(ex-13,sy+5,"x");
   setfillstyle(1,7);
}

void mainscreen2(int sx,int sy,int ex,int ey)
{
  sx=sx+15;
  sy=sy+24;
  ex=ex-17;
  ey=ey-9;
 setcolor(0);

   line(sx,sy,sx,ey);
   line(sx,sy,ex,sy);
   line(sx,sy,sx,ey);
   line(sx,sy,ex,sy);
   setcolor(15);
   line(ex,sy,ex,ey);
   line(ex,sy,ex,ey);
   line(sx,ey,ex,ey);
   line(sx,ey,ex,ey);


  }

void systemrequirements()
{
int button,x,y,i=0,frequency;
settextstyle(1,0,1);
setcolor(RED);
outtextxy(50,70,"OPERATING SYSTEM REQUIRED   ");
setcolor(BROWN);
settextstyle(1,0,3);
outtextxy(360,66,":");
settextstyle(3,0,1);
setcolor(BLUE);
outtextxy(390,70,"WINDOWS 98");
settextstyle(1,0,1);
setcolor(RED);
outtextxy(50,90,"CONNECTOR CONFIGURATION");
setcolor(BROWN);
settextstyle(1,0,3);
outtextxy(360,86,":");

settextstyle(3,0,1);
setcolor(BLUE);
outtextxy(390,90,"AB CONNECTOR");
settextstyle(1,0,1);
setcolor(RED);
outtextxy(50,110,"PORT ADDRESS");
setcolor(BROWN);
settextstyle(1,0,3);
outtextxy(360,106,":");

settextstyle(3,0,1);
setcolor(BLUE);
outtextxy(390,110,"0X378(BASE ADDRESS)");

settextstyle(1,0,1);
setcolor(RED);
outtextxy(50,130,"CONNECTOR 'A' CONFIGURATION");
setcolor(BROWN);
settextstyle(1,0,3);
outtextxy(360,126,":");

settextstyle(3,0,1);
setcolor(BLUE);
outtextxy(390,130,"IEEE-1284A DB25");
settextstyle(1,0,1);
setcolor(RED);
outtextxy(50,150,"CONNECTOR 'B' CONFIGURATION");
setcolor(BROWN);
settextstyle(1,0,3);
outtextxy(360,146,":");

settextstyle(3,0,1);
setcolor(BLUE);
outtextxy(390,150,"IEEE-1284B ");
outtextxy(390,170,"36 pin .085 CENTERLINE");
outtextxy(390,190,"CENTRONICS connector");
settextstyle(1,0,1);
setcolor(RED);
outtextxy(50,210,"EXTERNAL POWER SUPPLY");
setcolor(BROWN);
settextstyle(1,0,3);
outtextxy(360,206,":");

settextstyle(3,0,1);
setcolor(BLUE);
outtextxy(390,210,"5V ,200mA");
settextstyle(1,0,1);
setcolor(RED);
outtextxy(50,230,"MODE ");
setcolor(BROWN);
settextstyle(1,0,3);
outtextxy(360,226,":");

settextstyle(3,0,1);
setcolor(BLUE);
outtextxy(390,230,"BIDIRECTIONAL");
settextstyle(1,0,1);
setcolor(RED);
outtextxy(50,250,"TRANSFER SPEED ");
setcolor(BROWN);
settextstyle(1,0,3);
outtextxy(360,246,":");

settextstyle(3,0,1);
setcolor(BLUE);
outtextxy(390,250,"50-150KB/sec");
setcolor(GREEN);
setlinestyle(0,15,0);
settextstyle(1,0,1);
line(30,300,612,300);
setcolor(MAGENTA);
outtextxy(200,300,"For Advance Settings Click Below");
setcolor(GREEN);
line(30,324,612,324);
setcolor(0);
outtextxy(110,368,"Bios ");
  setcolor(15);
  line(100,360,100,400);
  line(100,360,160,360);
  setcolor(0);
  line(160,360,160,400);
  line(100,400,160,400);
  settextstyle(1,0,1);
  setcolor(0);
  outtextxy(550,368,"Exit ");
  setcolor(15);
  line(540,360,540,400);
  line(540,360,600,360);
  setcolor(0);
  line(600,360,600,400);
  line(540,400,600,400);
  settextstyle(1,0,1);
  outtextxy(236,368,"Connector");
  setcolor(15);
  line(230,360,230,400);
  line(230,360,330,360);
  setcolor(0);
  line(330,360,330,400);
  line(230,400,330,400);
      outtextxy(404,368,"NEXT ");
  setcolor(15);
  line(400,360,400,400);
  line(400,360,460,360);
  setcolor(0);
  line(460,360,460,400);
  line(400,400,460,400);
  while(!kbhit())
  {

  getmousepos(&button,&x,&y);
  if((button&1)==1)
  {
  for(frequency=2000;frequency<5000;frequency++)
  sound(frequency);
   nosound();
    if(x>100&&x<160&&y>360&&y<400)
    {
    i=1;
    biossettings();
    }
  if(x>230&&x<330&&y>360&&y<400)
  {
  i=1;
  connector();
  }
  if(x>400&&x<460&&y>360&&y<400)
  {
  i=1;
  hardware();
  }
  if(x>540&&x<600&&y>360&&y<400)
  {
  i=1;
  exitf();
  }
  if(i==1) break;
  }}
}

initmouse()
{
i.x.ax=0;
int86(0x33,&i,&o);
return(o.x.ax);
}

void showmouseptr()
{
i.x.ax=1;
int86(0x33,&i,&o);
}

void restrictmouseptr(int x1, int y1, int x2, int y2)
{
i.x.ax=7;
i.x.cx=x1;
i.x.dx=x2;
int86(0x33,&i,&o);

i.x.ax=8;
i.x.cx=y1;
i.x.dx=y2;
int86(0x33,&i,&o);
}

 void getmousepos(int *button, int *x, int *y)
{
i.x.ax=3;
int86(0x33,&i,&o);
*button=o.x.bx;
*x=o.x.cx;
*y=o.x.dx;
}
void connector()
{

int sx,sy,ex,ey,x,y,button,frequency,i=0;
cleardevice();
sx=15;
sy=10;
ex=630;
ey=470;
mainscreen3(sx,sy,ex,ey);
mainscreen2(sx,sy,ex,ey);
settextstyle(1,0,1);
setcolor(RED);
outtextxy(50,70,"MAXIMUM LENGTH   ");
setcolor(BROWN);
settextstyle(1,0,3);
outtextxy(360,66,":");
settextstyle(3,0,1);
setcolor(BLUE);
outtextxy(390,70,"10 Meters");
settextstyle(1,0,1);
setcolor(RED);
outtextxy(50,90,"CONNECTOR CONFIGURATION");
setcolor(BROWN);
settextstyle(1,0,3);
outtextxy(360,86,":");

settextstyle(3,0,1);
setcolor(BLUE);
outtextxy(390,90,"AB CONNECTOR");
settextstyle(1,0,1);
setcolor(RED);
outtextxy(50,110,"SPECIFIC IMPEDANCE");
setcolor(BROWN);
settextstyle(1,0,3);
outtextxy(360,106,":");

settextstyle(3,0,1);
setcolor(BLUE);
outtextxy(390,110,"62(+/- 6) Ohm");

settextstyle(1,0,1);
setcolor(RED);
outtextxy(50,130,"CONNECTOR 'A' CONFIGURATION");
setcolor(BROWN);
settextstyle(1,0,3);
outtextxy(360,126,":");

settextstyle(3,0,1);
setcolor(BLUE);
outtextxy(390,130,"IEEE-1284A DB25");
settextstyle(1,0,1);
setcolor(RED);
outtextxy(50,150,"CONNECTOR 'B' CONFIGURATION");
setcolor(BROWN);
settextstyle(1,0,3);
outtextxy(360,146,":");

settextstyle(3,0,1);
setcolor(BLUE);
outtextxy(390,150,"IEEE-1284B ");
outtextxy(390,170,"36 pin .085 CENTERLINE");
outtextxy(390,190,"CENTRONICS connector");
settextstyle(1,0,1);
setcolor(RED);
outtextxy(50,210,"MAXIMUM CAPACITANCE");
setcolor(BROWN);
settextstyle(1,0,3);
outtextxy(360,206,":");

settextstyle(3,0,1);
setcolor(BLUE);
outtextxy(390,210,"107 pF/MHz @1MHz");
settextstyle(1,0,1);
setcolor(RED);
outtextxy(50,230,"Each Conductor in Twisted  Pair ");

settextstyle(1,0,1);
setcolor(RED);
outtextxy(50,250,"Full Shield 85% Optical Braid Over ");


    settextstyle(1,0,1);
  setcolor(0);
  outtextxy(550,368,"Exit ");
  setcolor(15);
  line(540,360,540,400);
  line(540,360,600,360);
  setcolor(0);
  line(600,360,600,400);
  line(540,400,600,400);
  settextstyle(1,0,1);
  setcolor(0);
outtextxy(110,368,"Bios ");
  setcolor(15);
  line(100,360,100,400);
  line(100,360,160,360);
  setcolor(0);
  line(160,360,160,400);
  line(100,400,160,400);
  settextstyle(1,0,1);

  outtextxy(404,368,"NEXT ");
  setcolor(15);
  line(400,360,400,400);
  line(400,360,460,360);
  setcolor(0);
  line(460,360,460,400);
  line(400,400,460,400);
  while(!kbhit())
  {

  getmousepos(&button,&x,&y);
  if((button&1)==1)
  {
  for(frequency=2000;frequency<5000;frequency++)
  sound(frequency);
   nosound();

  if(x>100&&x<160&&y>360&&y<400)
    {
    i=1;
    biossettings();
    }
  
  if(x>400&&x<460&&y>360&&y<400)
  {
  i=1;
  hardware();
  }
  if(x>540&&x<600&&y>360&&y<400)
  {
  i=1;
  exitf();
  }
  if(i==1) break;
  }}
    }

void biossettings()
{
int sx,sy,ex,ey,frequency,button,i=0,x,y;
cleardevice();
sx=15;
sy=10;
ex=630;
ey=470;
mainscreen4(sx,sy,ex,ey);
mainscreen2(sx,sy,ex,ey);
setcolor(BLUE);
outtextxy(50,100,"Press Delete key or Control+F2 to enter BIOS");
outtextxy(50,120,"Goto Advanced");
outtextxy(50,140,"Choose Peripheral Configuration");
outtextxy(250,180,"Set according to given below");
setcolor(15);
outtextxy(100,230,"Parallel Port");
outtextxy(300,230,"[enable]");
outtextxy(100,250,"Mode");
outtextxy(300,250,"[Bi-directional]");
outtextxy(100,270,"Base I/O Address");
outtextxy(300,270,"[378]");
outtextxy(100,290,"Interrupt");
outtextxy(300,290,"[IRQ 7]");
 settextstyle(1,0,1);
  setcolor(0);
  outtextxy(550,368,"Exit ");
  setcolor(15);
  line(540,360,540,400);
  line(540,360,600,360);
  setcolor(0);
  line(600,360,600,400);
  line(540,400,600,400);
  settextstyle(1,0,1);
  outtextxy(236,368,"Connector");
  setcolor(15);
  line(230,360,230,400);
  line(230,360,330,360);
  setcolor(0);
  line(330,360,330,400);
  line(230,400,330,400);
      outtextxy(404,368,"NEXT ");
  setcolor(15);
  line(400,360,400,400);
  line(400,360,460,360);
  setcolor(0);
  line(460,360,460,400);
  line(400,400,460,400);
  while(!kbhit())
  {

  getmousepos(&button,&x,&y);
  if((button&1)==1)
  {
  for(frequency=2000;frequency<5000;frequency++)
  sound(frequency);
   nosound();

  if(x>230&&x<330&&y>360&&y<400)
  {
  i=1;
  connector();
  }
  if(x>400&&x<460&&y>360&&y<400)
  {
  i=1;
  hardware();
  }
  if(x>540&&x<600&&y>360&&y<400)
  {
  i=1;
  exitf();
  }
  if(i==1) break;
  }}

}

void hardware()
{
int sx,sy,ex,ey;
cleardevice();
sx=15;
sy=10;
ex=630;
ey=470;
mainscreen5(sx,sy,ex,ey);
mainscreen2(sx,sy,ex,ey);
}


void mainscreen3(int sx,int sy,int ex,int ey)
{
   setfillstyle(1,7);
   bar(sx,sy,ex,ey);
   setfillstyle(1,7);
   setcolor(15);
   line(sx,sy,sx,ey);
   line(sx,sy,ex,sy);
   line(sx,sy,sx,ey);
   line(sx,sy,ex,sy);
   setcolor(0);
   line(ex,sy,ex,ey);
   line(ex,sy,ex,ey);
   line(sx,ey,ex,ey);
   line(sx,ey,ex,ey);


   settextstyle(0,0,0);
   setfillstyle(1,1);
   bar(sx+2,sy+2,ex-2,sy+20);
   setcolor(13);
   settextstyle(8,0,1);
   outtextxy(sx+160,sy-5,"CONNECTOR CONFIGURATION ");
   //for x
   setfillstyle(1,7);
   bar(ex-15,sy+4,ex-4,sy+15);
   setcolor(15);
   line(ex-15,sy+4,ex-4,sy+4);
   line(ex-15,sy+4,ex-15,sy+15);
   setcolor(0);
   line(ex-15,sy+15,ex-4,sy+15);
   line(ex-4,sy+4,ex-4,sy+15);
   setcolor(1);
   settextstyle(0,0,1);
   outtextxy(ex-13,sy+5,"x");
   setfillstyle(1,7);
}

void mainscreen4(int sx,int sy,int ex,int ey)
{
   setfillstyle(1,7);
   bar(sx,sy,ex,ey);
   setfillstyle(1,7);
   setcolor(15);
   line(sx,sy,sx,ey);
   line(sx,sy,ex,sy);
   line(sx,sy,sx,ey);
   line(sx,sy,ex,sy);
   setcolor(0);
   line(ex,sy,ex,ey);
   line(ex,sy,ex,ey);
   line(sx,ey,ex,ey);
   line(sx,ey,ex,ey);


   settextstyle(0,0,0);
   setfillstyle(1,1);
   bar(sx+2,sy+2,ex-2,sy+20);
   setcolor(13);
   settextstyle(8,0,1);
   outtextxy(sx+210,sy-5,"BIOS  SETTINGS ");
   //for x
   setfillstyle(1,7);
   bar(ex-15,sy+4,ex-4,sy+15);
   setcolor(15);
   line(ex-15,sy+4,ex-4,sy+4);
   line(ex-15,sy+4,ex-15,sy+15);
   setcolor(0);
   line(ex-15,sy+15,ex-4,sy+15);
   line(ex-4,sy+4,ex-4,sy+15);
   setcolor(1);
   settextstyle(0,0,1);
   outtextxy(ex-13,sy+5,"x");
   setfillstyle(1,7);
}


void mainscreen5(int sx,int sy,int ex,int ey)
{
   setfillstyle(1,7);
   bar(sx,sy,ex,ey);
   setfillstyle(1,7);
   setcolor(15);
   line(sx,sy,sx,ey);
   line(sx,sy,ex,sy);
   line(sx,sy,sx,ey);
   line(sx,sy,ex,sy);
   setcolor(0);
   line(ex,sy,ex,ey);
   line(ex,sy,ex,ey);
   line(sx,ey,ex,ey);
   line(sx,ey,ex,ey);


   settextstyle(0,0,0);
   setfillstyle(1,1);
   bar(sx+2,sy+2,ex-2,sy+20);
   setcolor(13);
   settextstyle(8,0,1);
   outtextxy(sx+160,sy-5,"HARDWARE ");
   //for x
   setfillstyle(1,7);
   bar(ex-15,sy+4,ex-4,sy+15);
   setcolor(15);
   line(ex-15,sy+4,ex-4,sy+4);
   line(ex-15,sy+4,ex-15,sy+15);
   setcolor(0);
   line(ex-15,sy+15,ex-4,sy+15);
   line(ex-4,sy+4,ex-4,sy+15);
   setcolor(1);
   settextstyle(0,0,1);
   outtextxy(ex-13,sy+5,"x");
   setfillstyle(1,7);
}

void exitf()
{
exit(0);
}