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

Tuesday 12 June 2012

BLOCK PARITY


[ 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;
}
int getparity(char block[])
{
int i=0,counter=0;
for(i=0;i<7;i++)
{
if(block[i]=='1') //no of 1 is even then 0 (even parity)
counter++;
}
if(counter % 2 == 0 )
return 0;
else
return 1;
}
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 xor(char block1[],char block2[],char code[])
{
int i=0;
for(i=0;i<8;i++)
{
if(block1[i]==block2[i])
code[i]='0';
else
code[i]='1';
}
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++]=getparity(block1) + 48;
block2[k++]=getparity(block2) + 48;
block1[j++]='\0';
block2[k++]='\0';

xor(block1,block2,code);

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


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


printf("\n======================================================");
printf("\nData to Be Send With Parity : %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 xor(char block1[],char block2[],char code[])
{
int i=0;
for(i=0;i<8;i++)
{
if( !( block1[i]==block2[i] && code[i]=='0' || block1[i]!=block2[i] && code[i]=='1' ) ) //if wrong then send 0
return 0;
}
return 1; //if correct then send 1
}
void main()
{
int pid,i=0;
char ans[50],block1[50],block2[50],code[50];
pid=open("pipe",O_RDONLY);
read(pid,&ans,sizeof(ans));
while(ans[i]!='\0')
{
block1[i]=ans[i];
block2[i]=ans[i+8];
code[i]=ans[i+16];
if(i>=8)
break;
i++;
}
block1[i]='\0';
block2[i]='\0';
code[i]='\0';
printf("\nblock 1  : %s",block1);
printf("\nblock 2  : %s",block2);
printf("\n===================");
printf("\ncode(XOR): %s",code);
printf("\n===================\n");
if(xor(block1,block2,code)==1)
printf("\n..............DATA IS CORRECT..............\n");
else
printf("\n..............DATA IS INCORRECT..............\n");
}


No comments:

Post a Comment