Structure Query Language, C programming, Java, Servlet, Jsp, Unix

Tuesday 12 June 2012

CHECKSUM


[ SENDER SIDE ]

#include<stdio.h>
#include<fcntl.h>
#include<string.h>
int getbinary(int num,int pos)
{
int code=1;
code=code<<(pos-1);
if(code & num)
return 1; // 1 and 1   is 1
else
return 0;
}
void generateError(char ans[])
{
int exitflag=1,pos;
do
{
printf("Enter Position : ");
scanf("%d",&pos);
if(pos>=0 && pos<24)
{
if(ans[pos]=='1')
ans[pos]='0';
else
ans[pos]='1';
}
else
{
printf(" \t>>>Position is out of range<<<\n");
}
printf("Want to Generate More Error (1 / 0) : ");
scanf("%d",&exitflag);
}while(exitflag==1);
}
void divide(char block1[], char block2[], char ans[])
{
int i=0,j=0,k=0;
for(i=0;i<14;i++)
{
if(i<7)
block1[j++]=ans[i];
else
block2[k++]=ans[i];
}
}
int getbit(char block[],int pos)
{
return block[pos]-48;
}
void add(char block1[],char block2[],char code[])
{
int i=0,carry=0,sum;
char carryblock[8]="0000001";
for(i=6;i>=0;i--)
{
sum=carry + getbit(block1,i) + getbit(block2,i);
code[i]=sum%2 + 48;
if(sum>=2)
carry=1;
else
carry=0;
}
if(carry==1)
add(code,carryblock,code);
code[7]='\0';
}

void inverse(char code[])
{
int i=0;
for(i=0;i<7;i++)
{
if(code[i]=='0')
code[i]='1';
else
code[i]='0';
}
}
void main()
{
int num,i,flag,pid,j=0,k=0;
char block1[50],ans[50],block2[50],code[50];
pid=open("pipe",O_WRONLY);
printf("Enter number : ");
scanf("%d",&num);
for(i=7;i>0;i--)
{
block1[j++]=getbinary(num,i+7) + 48;
block2[k++]=getbinary(num,i) + 48;
}
block1[j++]='\0';
block2[k++]='\0';

add(block1,block2,code);
code[7]='\0';
printf("\nblock 1  : %s",block1);
printf("\nblock 2  : %s",block2);
printf("\n===================");
printf("\ncode(add): %s",code);
printf("\n===================\n\n");


inverse(code);

strcat(block1,block2); //concate block1 and block2 in block1
strcat(block1,code);


printf("\n======================================================");
printf("\nData to Be Send With Code : %s",block1);
printf("\n======================================================\n");


printf("\nWant to Generate Error (1 / 0) : ");
scanf("%d",&flag);
if(flag==1)
{
generateError(block1);
printf("\n======================================================");
printf("\nData to Be Send With Parity and with Error : %s",block1);
printf("\n======================================================\n");
}
write(pid,&block1,sizeof(block1));
close(pid);
}

[ RECEIVER SIDE ]


#include<stdio.h>
#include<fcntl.h>
#include<string.h>

int getbit(char block[],int pos)
{
return block[pos]-48;
}
void add(char block1[],char block2[],char code[])
{
int i=0,carry=0,sum;
char carryblock[8]="0000001";
for(i=6;i>=0;i--)
{
sum=carry + getbit(block1,i) + getbit(block2,i);
code[i]=sum%2 + 48;
if(sum>=2)
carry=1;
else
carry=0;
}
if(carry==1)
add(code,carryblock,code);
code[7]='\0';
}
void inverse(char code[])
{
int i=0;
for(i=0;i<7;i++)
{
if(code[i]=='0')
code[i]='1';
else
code[i]='0';
}
}
void main()
{
int pid,i=0,flag=1;
char ans[50],block1[50],block2[50],code[50],temp[50],result[50];
pid=open("pipe",O_RDONLY);
read(pid,&ans,sizeof(ans));
while(ans[i]!='\0')
{
block1[i]=ans[i];
block2[i]=ans[i+7];
code[i]=ans[i+14];
if(i>=7)
break;
i++;
}
block1[i]='\0';
block2[i]='\0';
code[i]='\0';


printf("\nblock 1  : %s",block1);
printf("\nblock 2  : %s",block2);
printf("\ncode     : %s",code);
printf("\n===================\n");

add(block1,block2,temp);
add(temp,code,result);
inverse(result);
for(i=0;i<7;i++)
{
if(result[i]!='0')
flag=0;
}
if(flag==1)
printf("\n..............DATA IS CORRECT..............\n");
else
printf("\n..............DATA IS INCORRECT..............\n");
}


No comments:

Post a Comment