53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /* Reed-Solomon encoder
 | |
|  * Copyright 2002, Phil Karn, KA9Q
 | |
|  * May be used under the terms of the GNU General Public License (GPL)
 | |
|  */
 | |
| #include <string.h>
 | |
| 
 | |
| #ifdef FIXED
 | |
| #include "fixed.h"
 | |
| #elif defined(BIGSYM)
 | |
| #include "int.h"
 | |
| #else
 | |
| #include "char.h"
 | |
| #endif
 | |
| 
 | |
| void ENCODE_RS(
 | |
| #ifdef FIXED
 | |
| DTYPE *data, DTYPE *bb,int pad){
 | |
| #else
 | |
| void *p,DTYPE *data, DTYPE *bb){
 | |
|   struct rs *rs = (struct rs *)p;
 | |
| #endif
 | |
|   int i, j;
 | |
|   DTYPE feedback;
 | |
| 
 | |
| #ifdef FIXED
 | |
|   /* Check pad parameter for validity */
 | |
|   if(pad < 0 || pad >= NN)
 | |
|     return;
 | |
| #endif
 | |
| 
 | |
|   memset(bb,0,NROOTS*sizeof(DTYPE));
 | |
| 
 | |
|   for(i=0;i<NN-NROOTS-PAD;i++){
 | |
|     feedback = INDEX_OF[data[i] ^ bb[0]];
 | |
|     if(feedback != A0){      /* feedback term is non-zero */
 | |
| #ifdef UNNORMALIZED
 | |
|       /* This line is unnecessary when GENPOLY[NROOTS] is unity, as it must
 | |
|        * always be for the polynomials constructed by init_rs()
 | |
|        */
 | |
|       feedback = MODNN(NN - GENPOLY[NROOTS] + feedback);
 | |
| #endif
 | |
|       for(j=1;j<NROOTS;j++)
 | |
| 	bb[j] ^= ALPHA_TO[MODNN(feedback + GENPOLY[NROOTS-j])];
 | |
|     }
 | |
|     /* Shift */
 | |
|     memmove(&bb[0],&bb[1],sizeof(DTYPE)*(NROOTS-1));
 | |
|     if(feedback != A0)
 | |
|       bb[NROOTS-1] = ALPHA_TO[MODNN(feedback + GENPOLY[0])];
 | |
|     else
 | |
|       bb[NROOTS-1] = 0;
 | |
|   }
 | |
| }
 | 
