//Program to add crc check bit
#include<stdio.h>
#include<string.h>
#define N strlen(g)
char t[ 28 ] , cs[ 28 ] , g[ ] = "1101" ;
int a, e, c;
void xor( ) {
for ( c = 1 ; c < N; c++ )
cs[ c] = ( ( cs[ c] == g[ c] ) ? '0' : '1' ) ;
}
void crc( ) {
for ( e= 0 ; e< N; e++ )
cs[ e] = t[ e] ;
do {
if ( cs[ 0 ] == '1' )
xor( ) ;
for ( c= 0 ; c< N- 1 ; c++ )
cs[ c] = cs[ c+ 1 ] ;
cs[ c] = t[ e++ ] ;
} while ( e<= a+ N- 1 ) ;
}
int main( )
{
printf ( "\n ----------------------------------------" ) ; printf ( "\n Generatng polynomial : %s" , g
) ; for ( e= a; e< a+ N- 1 ; e++ )
t[ e] = '0' ;
printf ( "\n ----------------------------------------" ) ; printf ( "\n Modified data is : %s" , t
) ; printf ( "\n ----------------------------------------" ) ; crc( ) ;
printf ( "\n Checksum is : %s" , cs
) ; for ( e= a; e< a+ N- 1 ; e++ )
t[ e] = cs[ e- a] ;
printf ( "\n ----------------------------------------" ) ; printf ( "\n Final codeword is : %s" , t
) ; printf ( "\n ----------------------------------------" ) ; printf ( "\n Test error detection 0(yes) 1(no)? : " ) ; if ( e== 0 )
{
do {
printf ( "\n Enter the position where error is to be inserted : " ) ; } while ( e== 0 || e> a+ N- 1 ) ;
t[ e- 1 ] = ( t[ e- 1 ] == '0' ) ? '1' : '0' ;
printf ( "\n ----------------------------------------" ) ; printf ( "\n Erroneous data : %s\n " , t
) ; }
crc( ) ;
for ( e= 0 ; ( e< N- 1 ) && ( cs[ e] != '1' ) ; e++ ) ;
if ( e< N- 1 )
printf ( "\n Error detected\n \n " ) ; else
printf ( "\n No error detected\n \n " ) ; printf ( "\n ----------------------------------------\n " ) ; return 0 ;
}
Ly9Qcm9ncmFtIHRvIGFkZCBjcmMgY2hlY2sgYml0CgojaW5jbHVkZTxzdGRpby5oPgojaW5jbHVkZTxzdHJpbmcuaD4KI2RlZmluZSBOIHN0cmxlbihnKQoKY2hhciB0WzI4XSxjc1syOF0sZ1tdPSIxMTAxIjsKaW50IGEsZSxjOwoKdm9pZCB4b3IoKXsKICAgIGZvcihjID0gMTtjIDwgTjsgYysrKQogICAgY3NbY10gPSAoKCBjc1tjXSA9PSBnW2NdKT8nMCc6JzEnKTsKfQoKdm9pZCBjcmMoKXsKICAgIGZvcihlPTA7ZTxOO2UrKykKICAgICAgICBjc1tlXT10W2VdOwogICAgZG97CiAgICAgICAgaWYoY3NbMF09PScxJykKICAgICAgICAgICAgeG9yKCk7CiAgICAgICAgZm9yKGM9MDtjPE4tMTtjKyspCiAgICAgICAgICAgIGNzW2NdPWNzW2MrMV07CiAgICAgICAgY3NbY109dFtlKytdOwogICAgfXdoaWxlKGU8PWErTi0xKTsKfQoKaW50IG1haW4oKQp7CiAgICBwcmludGYoIlxuRW50ZXIgZGF0YSA6ICIpOwogICAgc2NhbmYoIiVzIix0KTsKICAgIHByaW50ZigiXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICBwcmludGYoIlxuR2VuZXJhdG5nIHBvbHlub21pYWwgOiAlcyIsZyk7CiAgICBhPXN0cmxlbih0KTsKICAgIGZvcihlPWE7ZTxhK04tMTtlKyspCiAgICAgICAgdFtlXT0nMCc7CiAgICBwcmludGYoIlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgcHJpbnRmKCJcbk1vZGlmaWVkIGRhdGEgaXMgOiAlcyIsdCk7CiAgICBwcmludGYoIlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgY3JjKCk7CiAgICBwcmludGYoIlxuQ2hlY2tzdW0gaXMgOiAlcyIsY3MpOwogICAgZm9yKGU9YTtlPGErTi0xO2UrKykKICAgICAgICB0W2VdPWNzW2UtYV07CiAgICBwcmludGYoIlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgcHJpbnRmKCJcbkZpbmFsIGNvZGV3b3JkIGlzIDogJXMiLHQpOwogICAgcHJpbnRmKCJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKICAgIHByaW50ZigiXG5UZXN0IGVycm9yIGRldGVjdGlvbiAwKHllcykgMShubyk/IDogIik7CiAgICBzY2FuZigiJWQiLCZlKTsKICAgIGlmKGU9PTApCiAgICB7CiAgICAgICAgZG97CiAgICAgICAgICAgIHByaW50ZigiXG5FbnRlciB0aGUgcG9zaXRpb24gd2hlcmUgZXJyb3IgaXMgdG8gYmUgaW5zZXJ0ZWQgOiAiKTsKICAgICAgICAgICAgc2NhbmYoIiVkIiwmZSk7CiAgICAgICAgfXdoaWxlKGU9PTAgfHwgZT5hK04tMSk7CiAgICAgICAgdFtlLTFdPSh0W2UtMV09PScwJyk/JzEnOicwJzsKICAgICAgICBwcmludGYoIlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgICAgIHByaW50ZigiXG5FcnJvbmVvdXMgZGF0YSA6ICVzXG4iLHQpOwogICAgfQogICAgY3JjKCk7CiAgICBmb3IoZT0wOyhlPE4tMSkgJiYgKGNzW2VdIT0nMScpO2UrKyk7CiAgICAgICAgaWYoZTxOLTEpCiAgICAgICAgICAgIHByaW50ZigiXG5FcnJvciBkZXRlY3RlZFxuXG4iKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHByaW50ZigiXG5ObyBlcnJvciBkZXRlY3RlZFxuXG4iKTsKICAgICAgICAgICAgcHJpbnRmKCJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogICAgICAgIHJldHVybiAwOwp9Cg==