Saturday, 4 October 2014

A Calculator in C Using Graphics & Mouse Operations

#include"graphics.h"
#include"dos.h"
#include"stdio.h"
#include"math.h"
union REGS i,o;
char *text[]={ "7","8","9","*",
  "4","5","6","/",
  "1","2","3","+",
  "0","00",".","-",
 "M","M+","M-","+/-",
 "MR","MC","x^2","sr",
 "OFF","AC","CE","="};


int k=0,pass,op,prop,newnum=1,bt,memo=1,d=0,sq;
long double num=0,accum,m;


void normalbutton(int ,int ,int ,int,char**);

void main()

{
int gd=DETECT,gm,x1,x2,y1,y2,i,j,maxx,maxy,x,y,button;
char *text1[]={""","T","o"," ","K","n","o","w"," ","a","b","o",
"u","t"," ","m","e"," ","l","o","g","o","n"," ",":"};
char *text2[]={"w","w","w",".","g","e","o","c","i","t","i","e","s",
".","c","o","m","/","t","a","l","k","d","e","e","p",
"e","s","h"};

initgraph(&gd,&gm,"");

if(initmouse()==0)
 {
  closegraph();
  restorecrtmode();
  printf("
Mouse driver not loded");
  exit(1);
  }
  showmouseptr();
//  x=y=50;
  movemouseptr(&x,&y);

setbkcolor(11);
setcolor(1);
rectangle(198,140,417,163);
rectangle(199,141,418,164);
rectangle(197,139,416,162);
rectangle(185,130,430,450);
rectangle(184,129,431,451);
rectangle(182,127,433,454);
rectangle(181,126,434,453);


//setfillstyle(SOLID_FILL,3);
//bar(200,142,415,161);

outtextxy(200,50,"A Calculator in C");
outtextxy(200,100,"Press OFF button to exit....");
y1=140;
y2=160;

for(j=0;j<7;j++)
 {
  x1=200;
  x2=235;
  y1+=40;
  y2+=40;

   for(i=0;i<4;i++)
  {
   normalbutton(x1,x2,y1,y2,text);
   x1+=60;
   x2+=60;
   }
 }


 while(1)
  {


getmousepos(&button,&x,&y);


y1=140;
y2=160;
/*
if( (x>400&&x<450) && (y>400&&y<420) )
  { if((button & 1)==1)
 { sound(500);
delay(5);
exit();
 }
  }
*/
for(j=0;j<7;j++)
 {
  x1=200;
  x2=235;
  y1+=40;
  y2+=40;

   for(i=0;i<4;i++)
  {

if((x<x2&&x>x1)&&(y<y2&&y>y1))
   {
if((button & 1)==1)
{  gotoxy(28,10);
// printf("%d",ch=*text[j*4+i]);
// printf("char is %c",ch);
bt=j*4+i;
 // printf("char is %d",j*4+i);
setcolor(11);
outtextxy(x1+12,y1+7,text[j*4+i]);

if(num>pow(10.0,18))
exit();
sound(500);delay(10);nosound();
delay(250);
sound(400);delay(10);
nosound();
switch (bt)
{
case  8 :
  addnum(1);
  break;
case  9 :
  addnum(2);
  break;
case  10 :
  addnum(3);
  break;
case  4 :
  addnum(4);
  break;
case  5 :
  addnum(5);
  break;
case  6 :
  addnum(6);
  break;
case  0 :
  addnum(7);
  break;
case  1 :
  addnum(8);
  break;
case  2 :
  addnum(9);
  break;
case  12 :
  addnum(0);
  break;
case  11 :
  // plus
  operation(1);
  break;

case  15 :
  // minus
  operation(2);
  break;
case  3 :
  // multiplication
  operation(3);
  break;
case  7 :
  // division
  operation(4);
  break;
case 13:
  doublezero();
  break;
case  14 :
  decimal();
  break;

case 16:
  mem();
  break;
case 20:
  recallmem();
  break;
case 19:
  plusminus();
  break;
case 17:
  plusm();
  break;
case 18:
  minusm();
  break;
case 21:
  clearm();
  break;
case 22 :
  square();
  break;
case 23:

  sqroot();
  break;
case 24:
 // OFF
  hidemouseptr();
  setcolor(1);
  for(j=0;j<20;j++)
{
for(i=75;i<481;i+=20)

  line(0,0+i+j,640,j+0+i);

  delay(100);
}
  setcolor(14);
  outtextxy(225,200,"Thanks for using it !");
  delay(2000);
  setcolor(13);
for(j=0;j<20;j++)
{
for(i=0;i<640;i+=20)

  line(0+i+j,0,j+0+i,640);

  delay(100);
}
  setcolor(1);

  for(i=0;i<25;i++)
 {
outtextxy(75+10*i,200,text1[i]);
  sound(3000);
  delay(50);
  nosound();
 }
  for(i=0;i<29;i++)
 {
outtextxy(125+10*i,225,text2[i]);
  sound(3000);
  delay(50);
  nosound();
 }


  delay(2500);
  sound(5000);
  delay(10);
  exit();
  break;
case 25:
 allclear();
 break;

case 26:
 clear();
 break;

case 27:
//  equalto
  operation(5);
  break;



}
setcolor(1);
outtextxy(x1+12,y1+7,text[j*4+i]);

}
   }
x1+=60;
x2+=60;

   }

 }

  }



}

void normalbutton(int x1,int x2,int y1,int y2,char **text)
{
setcolor(15);
rectangle(x1-2,y1-2,x2+1,y2+1);
rectangle(x1-1,y1-1,x2+2,y2+2);
setcolor(7);
rectangle(x1,y1,x2+2,y2+2);
rectangle(x1,y1,x2+1,y2+1);

setfillstyle(SOLID_FILL,14);
bar(x1,y1,x2,y2);
setcolor(1);
outtextxy(x1+12,y1+7,text[k]);
k++;
}
/* initmouse */
initmouse()
{
 i.x.ax=0;
 int86 (0x33,&i,&o);
 return(o.x.ax);
}
hidemouseptr()
{
i.x.ax=2;
int86(0x33,&i,&o);
}

/* displays mouse pointer */
showmouseptr()
{
 i.x.ax=1;
 int86(0x33,&i,&o);
 return 0;
}

/*gets mouse coordinates and button status*/

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;
 return 0;
}
/* Move mouse ptr to x,y */
movemouseptr(int *x,int *y)
{
 i.x.ax=4;
 int86(0x33,&i,&o);
 o.x.cx=*x;
 o.x.dx=*y;
 return 0;
}

addnum(int pass)
{   if(sq)
newnum=1;

if(newnum)
 {      if(d)
{
 num=pass/(pow(10.0,d));
 d++;
 newnum=0;
}
else
{  num=pass;
  newnum=0;
}
 }
else
{
/*  if(num==0)
 {    if(d)
{
 num=num+pass/(pow(10.0,d));
 d++;
}
 else
 num=pass;
  }
*/
// else
  {    if(d)
{
  if(num<0)
num=num-pass/(pow(10.0,d));
  else
num=num+pass/(pow(10.0,d));
 d++;
}
else
{
num=num*10+pass;
}
}
}
 printf("%25.5Lf",num);
}

operation(int opr)
{  long double pnum;
   pnum=num;

   if(newnum && (prop != 5) && memo)
   {
   }
   else
  {  newnum=1;
d=0;
sq=0;
switch(prop)
{
case 1:
accum=accum+pnum;
break;
case 2:
accum=accum-pnum;
break;
case 3:
accum=accum*pnum;
break;
case 4:
accum=accum/pnum;
break;
default:
  accum=pnum;
}
  }
prop=opr;
num=accum;
 printf("%25.5Lf",num);
}

allclear()
{
 sq=0;
 accum=0;
 num=0;
 d=0;
 newnum=1;
 printf("%25.5Lf",num);
}

mem()
{
 m=num;
}
recallmem()
{
 memo=0;
 printf("%25.5Lf",m);
 num=m;
}
plusminus()
{ if(num!=0)
  { num*=-1;
printf("%25.5Lf",num);
  }
}


plusm()
{
m+=num;
}
minusm()
{
m-=num;
}
clearm()
{
m=0;
}
decimal()
{
 if(!d)
  {d=1;
if(newnum==1)
{
num=0;
}
  printf("%25.5Lf",num);
  }
}

square()
{ sq=1;
 num*=num;
 printf("%25.5Lf",num);
// newnum=1;
}
sqroot()
{ sq=1;
 num=pow(num,0.5);
 printf("%25.5Lf",num);
// newnum=1;
}
doublezero()
{
 if(d)
   {
// num=num+pass/(pow(100.0,d));
d++;
d++;
   }
 else
  num*=100;
 printf("%25.5Lf",num);
}

clear()
{
num=0;
printf("%25.5Lf",num);
}

No comments:

Post a Comment