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);
}
--
Don't ever give up.
Even when it seems impossible,
Something will always
pull you through.
The hardest times get even
worse when you lose hope.
As long as you believe you can do it, You can.
But When you give up,
You lose !
I DONT GIVE UP.....!!!
with regards
prem sasi kumar arivukalanjiam
No comments:
Post a Comment