⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maxicode.c

📁 This is program with source code to convert ascii text files to the maxicode barcode standard.
💻 C
📖 第 1 页 / 共 5 页
字号:
          randloc += 1;        }      if ( difval > data[randloc])        {                   this_error = difval - data[randloc];	}      else	{	  this_error = data[randloc] - difval;        }      save_val = data[randloc];      data[randloc] = difval;    // cause error at location k          save_val2 = data[1];      data[1] = 1;         printf("Data [randloc=%d,1] = %d %d \n", randloc, data[randloc], data[1]);      syndromes( data, msg_len, ecclen/2);        eras_dec_rs( data, erase_posit, 0, msg_len, ecclen/2 );            if ( (data[randloc] != save_val) | ( data[1] != save_val2))        {	  printf(" Error at k = %d data[randloc] = %d save = %d \n", 		 k , data[randloc], save_val );          printf(" Error2 at k = %d data[1] = %d save = %d \n", 		 k , data[1], save_val2 );        }      data[randloc] = save_val;      data[1] = save_val2;    }  printf("Test two random errors at different locations \n");  // two random errors at random locs  for ( k = 0 ; k < 100 ; k += 1)    {       randint = random();       randint2 = random();      randint = randint & NN;      randint2 = randint2 & NN;      difval = randint % (NN+1);      difval2 = randint2 % (NN+1);      randloc = random();      randloc = randloc % 62;      randloc2 = random();      randloc2 = randloc % 62;      if (randloc == randloc2)	{          randloc = (randloc+ 1)% (NN+1);        }      if ( difval > data[randloc])        {                   this_error = difval - data[randloc];	}      else	{	  this_error = data[randloc] - difval;        }      save_val = data[randloc];      data[randloc] = difval;    // cause error at location k          save_val2 = data[1];      if ( difval2 > data[randloc2])        {                   this_error2 = difval2 - data[randloc2];	}      else	{	  this_error2 = data[randloc2] - difval2;        }      save_val2 = data[randloc2];      data[randloc2] = difval2;    // cause error at location k             printf("Data [randloc,randloc2] = %d %d \n", data[randloc], data[randloc2]);      syndromes( data, msg_len, ecclen/2);        eras_dec_rs( data, erase_posit, 0, msg_len, ecclen/2 );            if ( (data[randloc] != save_val) || ( data[randloc2] != save_val2))        {	  printf(" Error at k = %d data[randloc] = %d save = %d \n", 		 k , data[randloc], save_val );          printf(" Error2 at k = %d data[randloc2] = %d save = %d \n", 		 k , data[randloc2], save_val2 );        }      data[randloc] = save_val;      data[randloc2] = save_val2;    }  for(j =0; j < 20; j += 1)    {      printf("data[%d] =  %d \n", 42 + j, data[42+j]);    }  // three random errors at random locs  printf("Testing random triple errors \n");  for ( k = 0 ; k < 500 ; k += 1)    {       randint = random();       randint2 = random();       randint3 = random();      randint = randint & NN;      randint2 = randint2 & NN;      randint3 = randint3 & NN;      difval = randint %NN;      difval2 = randint2 % NN;      difval3 = randint3 % NN;      randloc = random();      randloc = randloc % 61;            randloc2 = random();      randloc2 = randloc % 61;      if ( randloc2 > randloc)        {	  if (randloc2 - randloc != 1)            {              if ((randloc2 - randloc) % 2 == 0)                {                  randloc3 = (randloc2 - randloc)/2;                }              else                {                  randloc3 = ( 1 + randloc2 - randloc)/2;                }	    }        }      else   // randloc2 < or = randloc1        {          if (randloc2 != 0)	    {	      randloc3 = randloc2 - 1;            }                         else            {	      randloc3 = (randloc + 1) % NN;            }	}      if (randloc == randloc2)	{          randloc = (randloc+ 1)%NN;        }      if ( randloc == randloc3)        {	  randloc = 37;        }      if ( difval > data[randloc])        {                   this_error = difval - data[randloc];	}      else	{	  this_error = data[randloc] - difval;        }      save_val = data[randloc];      data[randloc] = difval;    // cause error at location k      //  data[randloc] = save_val ^ 1;      if ( difval2 > data[randloc2])        {                   this_error2 = difval2 - data[randloc2];	}      else	{	  this_error2 = data[randloc2] - difval2;        }      save_val2 = data[randloc2];      data[randloc2] = difval2;    // cause error at location k      //  data[randloc2] = save_val2 ^ 1;      save_val3 = data[randloc3];      data[randloc3] = difval3;    // cause error at location k      //  data[randloc2] = save_val3 ^ 1;         printf("Data [randloc=%d,randloc2=%d,randloc3=%d] = %d %d %d\n",       randloc, randloc2, randloc3,         data[randloc], data[randloc2], data[randloc3] );      syndromes( data, msg_len, ecclen/2);        eras_dec_rs( data, erase_posit, 0, msg_len, ecclen/2 );            if  (data[randloc] != save_val)                     {	  printf(" Error at k = %d data[randloc] = %d save = %d \n", 		 k , data[randloc], save_val );        }      if( data[randloc2] != save_val2)                {          printf(" Error2 at k = %d data[randloc2] = %d save = %d \n", 		 k , data[randloc2], save_val2 );        }        if ( data[randloc3] != save_val3 )        {          printf(" Error3 at k = %d data[randloc3] = %d save = %d \n", 		 k , data[randloc3], save_val3 );        }      data[randloc] = save_val;      data[randloc2] = save_val2;      data[randloc3] = save_val3;    }  for(j =0; j < 20; j += 1)    {      printf("data[%d] =  %d \n", 42 + j, data[42+j]);    }  // three random errors at random locs, error at 76  printf("Begin random quad errors \n");  for ( k = 0 ; k < 100 ; k += 1)    {       randint = random();       randint2 = random()+ 17;       randint3 = random()-12;       randint4 = random()+74;      randint = randint & NN;      randint2 = randint2 & NN;      randint3 = randint3 & NN;      randint4 = randint4 & NN;      difval = randint % NN;      difval2 = randint2 %  NN;      difval3 = randint3 %  NN;      difval4 = randint4 %  NN;      save_val = data[33];      data[33] = difval;    // cause error at location k      save_val2 = data[34];      data[34] = difval2;    // cause error at location k      save_val3 = data[35];      data[35] = difval3;    // cause error at location k      save_val4 = data[36];      data[36] = difval4;    // cause error at location k      printf("Data [33,34,35,36] = %d %d %d %d\n",       data[33], data[34], data[35], data[36] );      syndromes( data, msg_len, ecclen/2);        printf("Done with syndromes \n");      eras_dec_rs( data, erase_posit, 0, msg_len, ecclen/2 );            printf("Returned from eras_dec_rs \n");      if ( (data[33] != save_val) || ( data[34] != save_val2)        || ( data[35] != save_val3 ) || ( data[36] != save_val4))        {          			  printf(" Error at k = %d data[33] = %d save = %d \n", 		 k , data[33], save_val );          printf(" Error2 at k = %d data[34] = %d save = %d \n", 		 k , data[34], save_val2 );          printf(" Error3 at k = %d data[35] = %d save = %d \n", 		 k , data[randloc3], save_val3 );          printf(" Error4 at k = %d data[36] = %d save = %d \n", 		 k , data[36], save_val4);        }      data[33] = save_val;      data[34] = save_val2;      data[35] = save_val3;      data[36] = save_val4;    }  for(j =0; j < 20; j += 1)    {      printf("data[%d] =  %d \n", 42 + j, data[42+j]);    }}void copy_ecc_bytes(){  int j;  for(j = 0; j < 10; j += 1)    {      data[j+10] = ecc_results[j];          }}void test_ecc_primary()  {int j; int save_val; int save_val2; int save_val3; int save_val4; int k; int this_error; int this_error2; int this_error3; int randint; int randint2; int randint3; int randint4; int randloc2; int randloc3; int randloc4; int randloc; int difval; int difval2; int difval3; int difval4; set_debug = 0;  data[0] = 4;  data[1] = 13;  data[2] = 63;  data[3] = 1;  data[4] = 24;  data[5] = 9;  data[6] = 59;  data[7] = 3;  data[8] = 15;  data[9] = 4;  set_debug = 0;  codeindex = 10;  generateEC(  data, 10, 10 );  /* do the error correction, 10  */  for(j = 0; j < 10; j += 1)    {      data[j+10] = ecc_results[j];          }  syndromes( data, 20, 5 );    // total data = 20  codes, 5  syndromes */                               //  10 data + 10 ecc  for (j = 0; j < 10; j += 1)    {      erase_posit[j] = 0;    }  // eras_dec_rs ( data, erasures, number_of_erasures, data length  //                        syndrome_length);  eras_dec_rs( data, erase_posit, 0 , 20, 5 );     for(j =0; j < 10; j += 1)    {      printf("data[%d] =  %d \n", 10 + j, data[10+j]);    }  codeindex = 10;  generateEC(  data, 10, 10 );  /* do the error correction, 64  */  copy_ecc_bytes();  data[0] = 5;  // cause an error in the recieved data...  syndromes( data, 20, 5);    // total data = 10 codes, 5 syndromes */   for (j = 0; j < 10; j += 1)    {      erase_posit[j] = 0;    }  printf("before data[9] = %d \n", data[9]);    eras_dec_rs( data, erase_posit, 0, 20,  5 );    printf("after data[9] = %d \n", data[9]);   data[0] = 4;  for ( k = 0 ; k < 10 ; k += 1)    {      this_error = data[k] - 5;      save_val = data[k];      data[k] = 5;         // cause error at location k            syndromes( data, 20, 5);        eras_dec_rs( data, erase_posit, 0, 20, 5 );            if (data[k] != save_val)        {	  printf(" Error at k = %d data[k] = %d save = %d \n", 		 k , data[k], save_val );        }      data[k] = save_val;    }  // test random single errors  at data[5]  printf("Testing random single errors \n");  for ( k = 0 ; k < 100 ; k += 1)    {      randint = random();      randint = randint & NN;      difval = randint;      if ( difval > data[5])        {                   this_error = difval - data[5];	}      else	{	  this_error = data[5] - difval;        }      save_val = data[5];      data[5] = difval;    // cause error at location k               syndromes( data, 20, 5);        eras_dec_rs( data, erase_posit, 0, 20, 5 );            if (data[5] != save_val)        {	  printf(" Error at k = %d data[k] = %d save = %d \n", 		 k , data[5], save_val );        }      data[5] = save_val;    }  // simple double errors  printf("Testing random double errors data[0] = random data[1] = 1 \n");  data[0] = 4;   // 4  data[1] = 13;  // 13  data[2] = 63;   data[3] = 1;  data[4] = 24;  data[5] = 9;  data[6] = 59;  data[7] = 3;  data[8] = 15;  data[9] = 4;  // one random error at 0 and error of 1 at 1  set_debug = 0;  for ( k = 0 ; k < 100 ; k += 1)    {       randint = random();      randint = randint & NN;      difval = randint;      if ( difval > data[0])        {                   this_error = difval - data[0];	}      else	{	  this_error = data[0] - difval;        }      save_val = data[0];      data[0] = difval;    // cause error at location k          save_val2 = data[1];      data[1] = 1;         printf("Data [0,1] = %d %d \n", data[0], data[1]);      syndromes( data, 20, 5);        eras_dec_rs( data, erase_posit, 0, 20, 5 );            if ( (data[0] != save_val) | ( data[1] != save_val2))        {	  printf(" Error at k = %d data[0] = %d save = %d \n", 		 k , data[0], save_val );          printf(" Error2 at k = %d data[1] = %d save = %d \n", 		 k , data[1], save_val2 );        }      data[0] = save_val;      data[1] = save_val2;    }  // random error at random loc and error at 1  printf("Testing two random errors at data[0] and data[1] \n");  for ( k = 0 ; k < 100 ; k += 1)    {       randint = random();      randint = randint & NN;      difval = randint ;      randloc = random();      randloc = randloc % 10;      if (randloc == 1)	{          randloc += 1;        }      if ( difval > data[randloc])        {                   this_error = difval - data[randloc];	}      else	{	  this_error = data[randloc] - difval;        }      save_val = data[randloc];      data[randloc] = difval;    // cause error at location k          save_val2 = data[1];      data[1] = 1;         printf("Data [randloc,1] = %d %d \n", data[randloc], data[1]);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -