#include #include #include #include #include #include "rs.h" static void *rs; static int first=1; void rs_encode_(int *dgen, int *sent) // Encode JT65 data dgen[12], producing sent[63]. { int dat1[12]; int b[51]; int i; if(first) { // Initialize the JT65 codec rs=init_rs_int(6,0x43,3,1,51,0); first=0; } // Reverse data order for the Karn codec. for(i=0; i<12; i++) { dat1[i]=dgen[11-i]; } // Compute the parity symbols encode_rs_int(rs,dat1,b); // Move parity symbols and data into sent[] array, in reverse order. for (i = 0; i < 51; i++) sent[50-i] = b[i]; for (i = 0; i < 12; i++) sent[i+51] = dat1[11-i]; } void rs_decode_(int *recd0, int *era0, int *numera0, int *decoded, int *nerr) // Decode JT65 received data recd0[63], producing decoded[12]. // Erasures are indicated in era0[numera]. The number of corrected // errors is *nerr. If the data are uncorrectable, *nerr=-1 is returned. { int numera; int i; int era_pos[50]; int recd[63]; if(first) { rs=init_rs_int(6,0x43,3,1,51,0); first=0; } numera=*numera0; for(i=0; i<12; i++) recd[i]=recd0[62-i]; for(i=0; i<51; i++) recd[12+i]=recd0[50-i]; if(numera) for(i=0; i