From 4a4af7b24fbb38cce0ce89255b5c5cfc1e760057 Mon Sep 17 00:00:00 2001
From: Steven Franke <s.j.franke@icloud.com>
Date: Sun, 13 Mar 2016 05:48:07 +0000
Subject: [PATCH] Remove more old stuff.

git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6529 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
---
 lib/sfrsd/Makefile         |  24 ---
 lib/sfrsd/Makefile.win32   |  24 ---
 lib/sfrsd/char.h           |  56 ------
 lib/sfrsd/decode_rs.c      | 268 -----------------------------
 lib/sfrsd/encode_rs.c      |  47 ------
 lib/sfrsd/fixed.h          |  38 -----
 lib/sfrsd/init_rs.c        | 121 -------------
 lib/sfrsd/int.h            |  54 ------
 lib/sfrsd/kvasd.dat        | Bin 1080 -> 0 bytes
 lib/sfrsd/kvasd7.dat       | Bin 2048 -> 0 bytes
 lib/sfrsd/kvasd_bmfail.dat | Bin 2048 -> 0 bytes
 lib/sfrsd/kvasd_sample.dat | Bin 1080 -> 0 bytes
 lib/sfrsd/rs.h             |  16 --
 lib/sfrsd/rstest.c         | 133 ---------------
 lib/sfrsd/sfrsd.c          | 338 -------------------------------------
 15 files changed, 1119 deletions(-)
 delete mode 100644 lib/sfrsd/Makefile
 delete mode 100644 lib/sfrsd/Makefile.win32
 delete mode 100644 lib/sfrsd/char.h
 delete mode 100644 lib/sfrsd/decode_rs.c
 delete mode 100644 lib/sfrsd/encode_rs.c
 delete mode 100644 lib/sfrsd/fixed.h
 delete mode 100644 lib/sfrsd/init_rs.c
 delete mode 100644 lib/sfrsd/int.h
 delete mode 100644 lib/sfrsd/kvasd.dat
 delete mode 100644 lib/sfrsd/kvasd7.dat
 delete mode 100644 lib/sfrsd/kvasd_bmfail.dat
 delete mode 100644 lib/sfrsd/kvasd_sample.dat
 delete mode 100644 lib/sfrsd/rs.h
 delete mode 100644 lib/sfrsd/rstest.c
 delete mode 100644 lib/sfrsd/sfrsd.c

diff --git a/lib/sfrsd/Makefile b/lib/sfrsd/Makefile
deleted file mode 100644
index 7f525596a..000000000
--- a/lib/sfrsd/Makefile
+++ /dev/null
@@ -1,24 +0,0 @@
-srcdir = .
-prefix = /usr/local
-exec_prefix=${prefix}
-CC=gcc
-
-CFLAGS=-I/usr/local/include  -Wall -O3
-
-all: sfrsd
-
-encode_rs_int.o: encode_rs.c
-	gcc -DBIGSYM=1 $(CFLAGS) -c -o $@ $^
-
-decode_rs_int.o: decode_rs.c
-	gcc -DBIGSYM=1 $(CFLAGS) -c -o $@ $^
-
-init_rs_int.o: init_rs.c
-	gcc -DBIGSYM=1 $(CFLAGS) -c -o $@ $^
-
-sfrsd: sfrsd.o encode_rs_int.o decode_rs_int.o init_rs_int.o
-	gcc -g -o $@ $^
-
-clean:
-	rm -f *.o *.a sfrsd
-
diff --git a/lib/sfrsd/Makefile.win32 b/lib/sfrsd/Makefile.win32
deleted file mode 100644
index 6a3755a0d..000000000
--- a/lib/sfrsd/Makefile.win32
+++ /dev/null
@@ -1,24 +0,0 @@
-srcdir = .
-prefix = /usr/local
-exec_prefix=${prefix}
-CC=gcc
-
-CFLAGS=-I/usr/local/include  -Wall -O3
-
-all: sfrsd.exe
-
-encode_rs_int.o: encode_rs.c
-	gcc -DBIGSYM=1 $(CFLAGS) -c -o $@ $^
-
-decode_rs_int.o: decode_rs.c
-	gcc -DBIGSYM=1 $(CFLAGS) -c -o $@ $^
-
-init_rs_int.o: init_rs.c
-	gcc -DBIGSYM=1 $(CFLAGS) -c -o $@ $^
-
-sfrsd.exe: sfrsd.o encode_rs_int.o decode_rs_int.o init_rs_int.o
-	gcc -g -DWIN32 -o $@ $^
-
-clean:
-	rm -f *.o *.a sfrsd.exe
-
diff --git a/lib/sfrsd/char.h b/lib/sfrsd/char.h
deleted file mode 100644
index 2fbcb504a..000000000
--- a/lib/sfrsd/char.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Include file to configure the RS codec for character symbols
- *
- * Copyright 2002, Phil Karn, KA9Q
- * May be used under the terms of the GNU General Public License (GPL)
- */
-
-#define DTYPE unsigned char
-
-/* Reed-Solomon codec control block */
-struct rs {
-  unsigned int mm;              /* Bits per symbol */
-  unsigned int nn;              /* Symbols per block (= (1<<mm)-1) */
-  unsigned char *alpha_to;      /* log lookup table */
-  unsigned char *index_of;      /* Antilog lookup table */
-  unsigned char *genpoly;       /* Generator polynomial */
-  unsigned int nroots;     /* Number of generator roots = number of parity symbols */
-  unsigned char fcr;        /* First consecutive root, index form */
-  unsigned char prim;       /* Primitive element, index form */
-  unsigned char iprim;      /* prim-th root of 1, index form */
-};
-
-static inline int modnn(struct rs *rs,int x){
-  while (x >= rs->nn) {
-    x -= rs->nn;
-    x = (x >> rs->mm) + (x & rs->nn);
-  }
-  return x;
-}
-#define MODNN(x) modnn(rs,x)
-
-#define MM (rs->mm)
-#define NN (rs->nn)
-#define ALPHA_TO (rs->alpha_to) 
-#define INDEX_OF (rs->index_of)
-#define GENPOLY (rs->genpoly)
-#define NROOTS (rs->nroots)
-#define FCR (rs->fcr)
-#define PRIM (rs->prim)
-#define IPRIM (rs->iprim)
-#define A0 (NN)
-
-#define ENCODE_RS encode_rs_char
-#define DECODE_RS decode_rs_char
-#define INIT_RS init_rs_char
-#define FREE_RS free_rs_char
-
-void ENCODE_RS(void *p,DTYPE *data,DTYPE *parity);
-int DECODE_RS(void *p,DTYPE *data,int *eras_pos,int no_eras);
-void *INIT_RS(unsigned int symsize,unsigned int gfpoly,unsigned int fcr,
-		   unsigned int prim,unsigned int nroots);
-void FREE_RS(void *p);
-
-
-
-
-
diff --git a/lib/sfrsd/decode_rs.c b/lib/sfrsd/decode_rs.c
deleted file mode 100644
index 91f582ac1..000000000
--- a/lib/sfrsd/decode_rs.c
+++ /dev/null
@@ -1,268 +0,0 @@
-/* Reed-Solomon decoder
- * Copyright 2002 Phil Karn, KA9Q
- * May be used under the terms of the GNU General Public License (GPL)
- * Modified by Steve Franke, K9AN, for use in a soft-symbol RS decoder
- */
-
-#ifdef DEBUG
-#include <stdio.h>
-#endif
-
-#include <string.h>
-
-#define NULL ((void *)0)
-#define	min(a,b)	((a) < (b) ? (a) : (b))
-
-#ifdef FIXED
-#include "fixed.h"
-#elif defined(BIGSYM)
-#include "int.h"
-#else
-#include "char.h"
-#endif
-
-int DECODE_RS(
-#ifndef FIXED
-              void *p,
-#endif
-              DTYPE *data, int *eras_pos, int no_eras, int calc_syn){
-    
-#ifndef FIXED
-    struct rs *rs = (struct rs *)p;
-#endif
-    int deg_lambda, el, deg_omega;
-    int i, j, r,k;
-    DTYPE u,q,tmp,num1,num2,den,discr_r;
-    DTYPE lambda[NROOTS+1];	// Err+Eras Locator poly
-    static DTYPE s[51];					 // and syndrome poly
-    DTYPE b[NROOTS+1], t[NROOTS+1], omega[NROOTS+1];
-    DTYPE root[NROOTS], reg[NROOTS+1], loc[NROOTS];
-    int syn_error, count;
-    
-    if( calc_syn ) {
-        /* form the syndromes; i.e., evaluate data(x) at roots of g(x) */
-        for(i=0;i<NROOTS;i++)
-            s[i] = data[0];
-        
-        for(j=1;j<NN;j++){
-            for(i=0;i<NROOTS;i++){
-                if(s[i] == 0){
-                    s[i] = data[j];
-                } else {
-                    s[i] = data[j] ^ ALPHA_TO[MODNN(INDEX_OF[s[i]] + (FCR+i)*PRIM)];
-                }
-            }
-        }
-        
-        /* Convert syndromes to index form, checking for nonzero condition */
-        syn_error = 0;
-        for(i=0;i<NROOTS;i++){
-            syn_error |= s[i];
-            s[i] = INDEX_OF[s[i]];
-        }
-        
-        
-        if (!syn_error) {
-            /* if syndrome is zero, data[] is a codeword and there are no
-             * errors to correct. So return data[] unmodified
-             */
-            count = 0;
-            goto finish;
-        }
-        
-    }
-    
-    memset(&lambda[1],0,NROOTS*sizeof(lambda[0]));
-    lambda[0] = 1;
-    
-    if (no_eras > 0) {
-        /* Init lambda to be the erasure locator polynomial */
-        lambda[1] = ALPHA_TO[MODNN(PRIM*(NN-1-eras_pos[0]))];
-        for (i = 1; i < no_eras; i++) {
-            u = MODNN(PRIM*(NN-1-eras_pos[i]));
-            for (j = i+1; j > 0; j--) {
-                tmp = INDEX_OF[lambda[j - 1]];
-                if(tmp != A0)
-                    lambda[j] ^= ALPHA_TO[MODNN(u + tmp)];
-            }
-        }
-        
-#if DEBUG >= 1
-        /* Test code that verifies the erasure locator polynomial just constructed
-         Needed only for decoder debugging. */
-        
-        /* find roots of the erasure location polynomial */
-        for(i=1;i<=no_eras;i++)
-            reg[i] = INDEX_OF[lambda[i]];
-        
-        count = 0;
-        for (i = 1,k=IPRIM-1; i <= NN; i++,k = MODNN(k+IPRIM)) {
-            q = 1;
-            for (j = 1; j <= no_eras; j++)
-                if (reg[j] != A0) {
-                    reg[j] = MODNN(reg[j] + j);
-                    q ^= ALPHA_TO[reg[j]];
-                }
-            if (q != 0)
-                continue;
-            /* store root and error location number indices */
-            root[count] = i;
-            loc[count] = k;
-            count++;
-        }
-        if (count != no_eras) {
-            printf("count = %d no_eras = %d\n lambda(x) is WRONG\n",count,no_eras);
-            count = -1;
-            goto finish;
-        }
-#if DEBUG >= 2
-        printf("\n Erasure positions as determined by roots of Eras Loc Poly:\n");
-        for (i = 0; i < count; i++)
-            printf("%d ", loc[i]);
-        printf("\n");
-#endif
-#endif
-    }
-    for(i=0;i<NROOTS+1;i++)
-        b[i] = INDEX_OF[lambda[i]];
-    
-    /*
-     * Begin Berlekamp-Massey algorithm to determine error+erasure
-     * locator polynomial
-     */
-    r = no_eras;
-    el = no_eras;
-    while (++r <= NROOTS) {	/* r is the step number */
-        /* Compute discrepancy at the r-th step in poly-form */
-        discr_r = 0;
-        for (i = 0; i < r; i++){
-            if ((lambda[i] != 0) && (s[r-i-1] != A0)) {
-                discr_r ^= ALPHA_TO[MODNN(INDEX_OF[lambda[i]] + s[r-i-1])];
-            }
-        }
-        discr_r = INDEX_OF[discr_r];	/* Index form */
-        if (discr_r == A0) {
-            /* 2 lines below: B(x) <-- x*B(x) */
-            memmove(&b[1],b,NROOTS*sizeof(b[0]));
-            b[0] = A0;
-        } else {
-            /* 7 lines below: T(x) <-- lambda(x) - discr_r*x*b(x) */
-            t[0] = lambda[0];
-            for (i = 0 ; i < NROOTS; i++) {
-                if(b[i] != A0)
-                    t[i+1] = lambda[i+1] ^ ALPHA_TO[MODNN(discr_r + b[i])];
-                else
-                    t[i+1] = lambda[i+1];
-            }
-            if (2 * el <= r + no_eras - 1) {
-                el = r + no_eras - el;
-                /*
-                 * 2 lines below: B(x) <-- inv(discr_r) *
-                 * lambda(x)
-                 */
-                for (i = 0; i <= NROOTS; i++)
-                    b[i] = (lambda[i] == 0) ? A0 : MODNN(INDEX_OF[lambda[i]] - discr_r + NN);
-            } else {
-                /* 2 lines below: B(x) <-- x*B(x) */
-                memmove(&b[1],b,NROOTS*sizeof(b[0]));
-                b[0] = A0;
-            }
-            memcpy(lambda,t,(NROOTS+1)*sizeof(t[0]));
-        }
-    }
-    
-    /* Convert lambda to index form and compute deg(lambda(x)) */
-    deg_lambda = 0;
-    for(i=0;i<NROOTS+1;i++){
-        lambda[i] = INDEX_OF[lambda[i]];
-        if(lambda[i] != A0)
-            deg_lambda = i;
-    }
-    /* Find roots of the error+erasure locator polynomial by Chien search */
-    memcpy(&reg[1],&lambda[1],NROOTS*sizeof(reg[0]));
-    count = 0;		/* Number of roots of lambda(x) */
-    for (i = 1,k=IPRIM-1; i <= NN; i++,k = MODNN(k+IPRIM)) {
-        q = 1; /* lambda[0] is always 0 */
-        for (j = deg_lambda; j > 0; j--){
-            if (reg[j] != A0) {
-                reg[j] = MODNN(reg[j] + j);
-                q ^= ALPHA_TO[reg[j]];
-            }
-        }
-        if (q != 0)
-            continue; /* Not a root */
-        /* store root (index-form) and error location number */
-#if DEBUG>=2
-        printf("count %d root %d loc %d\n",count,i,k);
-#endif
-        root[count] = i;
-        loc[count] = k;
-        /* If we've already found max possible roots,
-         * abort the search to save time
-         */
-        if(++count == deg_lambda)
-            break;
-    }
-    if (deg_lambda != count) {
-        /*
-         * deg(lambda) unequal to number of roots => uncorrectable
-         * error detected
-         */
-        count = -1;
-        goto finish;
-    }
-    /*
-     * Compute err+eras evaluator poly omega(x) = s(x)*lambda(x) (modulo
-     * x**NROOTS). in index form. Also find deg(omega).
-     */
-    deg_omega = 0;
-    for (i = 0; i < NROOTS;i++){
-        tmp = 0;
-        j = (deg_lambda < i) ? deg_lambda : i;
-        for(;j >= 0; j--){
-            if ((s[i - j] != A0) && (lambda[j] != A0))
-                tmp ^= ALPHA_TO[MODNN(s[i - j] + lambda[j])];
-        }
-        if(tmp != 0)
-            deg_omega = i;
-        omega[i] = INDEX_OF[tmp];
-    }
-    omega[NROOTS] = A0;
-    
-    /*
-     * Compute error values in poly-form. num1 = omega(inv(X(l))), num2 =
-     * inv(X(l))**(FCR-1) and den = lambda_pr(inv(X(l))) all in poly-form
-     */
-    for (j = count-1; j >=0; j--) {
-        num1 = 0;
-        for (i = deg_omega; i >= 0; i--) {
-            if (omega[i] != A0)
-                num1  ^= ALPHA_TO[MODNN(omega[i] + i * root[j])];
-        }
-        num2 = ALPHA_TO[MODNN(root[j] * (FCR - 1) + NN)];
-        den = 0;
-        
-        /* lambda[i+1] for i even is the formal derivative lambda_pr of lambda[i] */
-        for (i = min(deg_lambda,NROOTS-1) & ~1; i >= 0; i -=2) {
-            if(lambda[i+1] != A0)
-                den ^= ALPHA_TO[MODNN(lambda[i+1] + i * root[j])];
-        }
-        if (den == 0) {
-#if DEBUG >= 1
-            printf("\n ERROR: denominator = 0\n");
-#endif
-            count = -1;
-            goto finish;
-        }
-        /* Apply error to data */
-        if (num1 != 0) {
-            data[loc[j]] ^= ALPHA_TO[MODNN(INDEX_OF[num1] + INDEX_OF[num2] + NN - INDEX_OF[den])];
-        }
-    }
-finish:
-    if(eras_pos != NULL){
-        for(i=0;i<count;i++)
-            eras_pos[i] = loc[i];
-    }
-    return count;
-}
diff --git a/lib/sfrsd/encode_rs.c b/lib/sfrsd/encode_rs.c
deleted file mode 100644
index 9d56d0bf1..000000000
--- a/lib/sfrsd/encode_rs.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* 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(
-#ifndef FIXED
-void *p,
-#endif
-DTYPE *data, DTYPE *bb){
-#ifndef FIXED
-  struct rs *rs = (struct rs *)p;
-#endif
-  int i, j;
-  DTYPE feedback;
-
-  memset(bb,0,NROOTS*sizeof(DTYPE));
-
-  for(i=0;i<NN-NROOTS;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;
-  }
-}
diff --git a/lib/sfrsd/fixed.h b/lib/sfrsd/fixed.h
deleted file mode 100644
index 9f0ddd9a4..000000000
--- a/lib/sfrsd/fixed.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Configure the RS codec with fixed parameters for CCSDS standard
- * (255,223) code over GF(256). Note: the conventional basis is still
- * used; the dual-basis mappings are performed in [en|de]code_rs_ccsds.c
- *
- * Copyright 2002 Phil Karn, KA9Q
- * May be used under the terms of the GNU General Public License (GPL)
- */
-#define DTYPE unsigned char
-
-static inline int mod255(int x){
-  while (x >= 255) {
-    x -= 255;
-    x = (x >> 8) + (x & 255);
-  }
-  return x;
-}
-#define MODNN(x) mod255(x)
-
-extern unsigned char CCSDS_alpha_to[];
-extern unsigned char CCSDS_index_of[];
-extern unsigned char CCSDS_poly[];
-
-#define MM 8
-#define NN 255
-#define ALPHA_TO CCSDS_alpha_to
-#define INDEX_OF CCSDS_index_of
-#define GENPOLY CCSDS_poly
-#define NROOTS 32
-#define FCR 112
-#define PRIM 11
-#define IPRIM 116
-#define A0 (NN)
-
-#define ENCODE_RS encode_rs_8
-#define DECODE_RS decode_rs_8
-
-void ENCODE_RS(DTYPE *data,DTYPE *parity);
-int DECODE_RS(DTYPE *data, int *eras_pos, int no_eras);
diff --git a/lib/sfrsd/init_rs.c b/lib/sfrsd/init_rs.c
deleted file mode 100644
index ce9e8cb70..000000000
--- a/lib/sfrsd/init_rs.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/* Initialize a RS codec
- *
- * Copyright 2002 Phil Karn, KA9Q
- * May be used under the terms of the GNU General Public License (GPL)
- */
-#include <stdlib.h>
-
-#ifdef CCSDS
-#include "ccsds.h"
-#elif defined(BIGSYM)
-#include "int.h"
-#else
-#include "char.h"
-#endif
-
-#define NULL ((void *)0)
-
-void FREE_RS(void *p){
-  struct rs *rs = (struct rs *)p;
-
-  free(rs->alpha_to);
-  free(rs->index_of);
-  free(rs->genpoly);
-  free(rs);
-}
-
-/* Initialize a Reed-Solomon codec
- * symsize = symbol size, bits (1-8)
- * gfpoly = Field generator polynomial coefficients
- * fcr = first root of RS code generator polynomial, index form
- * prim = primitive element to generate polynomial roots
- * nroots = RS code generator polynomial degree (number of roots)
- */
-void *INIT_RS(unsigned int symsize,unsigned int gfpoly,unsigned fcr,unsigned prim,
-		unsigned int nroots){
-  struct rs *rs;
-  int i, j, sr,root,iprim;
-
-  if(symsize > 8*sizeof(DTYPE))
-    return NULL; /* Need version with ints rather than chars */
-
-  if(fcr >= (1<<symsize))
-    return NULL;
-  if(prim == 0 || prim >= (1<<symsize))
-    return NULL;
-  if(nroots >= (1<<symsize))
-    return NULL; /* Can't have more roots than symbol values! */
-
-  rs = (struct rs *)calloc(1,sizeof(struct rs));
-  rs->mm = symsize;
-  rs->nn = (1<<symsize)-1;
-
-  rs->alpha_to = (DTYPE *)malloc(sizeof(DTYPE)*(rs->nn+1));
-  if(rs->alpha_to == NULL){
-    free(rs);
-    return NULL;
-  }
-  rs->index_of = (DTYPE *)malloc(sizeof(DTYPE)*(rs->nn+1));
-  if(rs->index_of == NULL){
-    free(rs->alpha_to);
-    free(rs);
-    return NULL;
-  }
-
-  /* Generate Galois field lookup tables */
-  rs->index_of[0] = A0; /* log(zero) = -inf */
-  rs->alpha_to[A0] = 0; /* alpha**-inf = 0 */
-  sr = 1;
-  for(i=0;i<rs->nn;i++){
-    rs->index_of[sr] = i;
-    rs->alpha_to[i] = sr;
-    sr <<= 1;
-    if(sr & (1<<symsize))
-      sr ^= gfpoly;
-    sr &= rs->nn;
-  }
-  if(sr != 1){
-    /* field generator polynomial is not primitive! */
-    free(rs->alpha_to);
-    free(rs->index_of);
-    free(rs);
-    return NULL;
-  }
-
-  /* Form RS code generator polynomial from its roots */
-  rs->genpoly = (DTYPE *)malloc(sizeof(DTYPE)*(nroots+1));
-  if(rs->genpoly == NULL){
-    free(rs->alpha_to);
-    free(rs->index_of);
-    free(rs);
-    return NULL;
-  }
-  rs->fcr = fcr;
-  rs->prim = prim;
-  rs->nroots = nroots;
-
-  /* Find prim-th root of 1, used in decoding */
-  for(iprim=1;(iprim % prim) != 0;iprim += rs->nn)
-    ;
-  rs->iprim = iprim / prim;
-
-  rs->genpoly[0] = 1;
-  for (i = 0,root=fcr*prim; i < nroots; i++,root += prim) {
-    rs->genpoly[i+1] = 1;
-
-    /* Multiply rs->genpoly[] by  @**(root + x) */
-    for (j = i; j > 0; j--){
-      if (rs->genpoly[j] != 0)
-	rs->genpoly[j] = rs->genpoly[j-1] ^ rs->alpha_to[modnn(rs,rs->index_of[rs->genpoly[j]] + root)];
-      else
-	rs->genpoly[j] = rs->genpoly[j-1];
-    }
-    /* rs->genpoly[0] can never be zero */
-    rs->genpoly[0] = rs->alpha_to[modnn(rs,rs->index_of[rs->genpoly[0]] + root)];
-  }
-  /* convert rs->genpoly[] to index form for quicker encoding */
-  for (i = 0; i <= nroots; i++)
-    rs->genpoly[i] = rs->index_of[rs->genpoly[i]];
-
-  return rs;
-}
diff --git a/lib/sfrsd/int.h b/lib/sfrsd/int.h
deleted file mode 100644
index ada5bfd4c..000000000
--- a/lib/sfrsd/int.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Include file to configure the RS codec for integer symbols
- *
- * Copyright 2002, Phil Karn, KA9Q
- * May be used under the terms of the GNU General Public License (GPL)
- */
-#define DTYPE int
-
-/* Reed-Solomon codec control block */
-struct rs {
-  unsigned int mm;   /* Bits per symbol */
-  unsigned int nn;   /* Symbols per block (= (1<<mm)-1) */
-  int *alpha_to;      /* log lookup table */
-  int *index_of;      /* Antilog lookup table */
-  int *genpoly;       /* Generator polynomial */
-  unsigned int nroots;     /* Number of generator roots = number of parity symbols */
-  unsigned int fcr;        /* First consecutive root, index form */
-  unsigned int prim;       /* Primitive element, index form */
-  unsigned int iprim;      /* prim-th root of 1, index form */
-};
-
-static inline int modnn(struct rs *rs,int x){
-  while (x >= rs->nn) {
-    x -= rs->nn;
-    x = (x >> rs->mm) + (x & rs->nn);
-  }
-  return x;
-}
-#define MODNN(x) modnn(rs,x)
-
-#define MM (rs->mm)
-#define NN (rs->nn)
-#define ALPHA_TO (rs->alpha_to) 
-#define INDEX_OF (rs->index_of)
-#define GENPOLY (rs->genpoly)
-#define NROOTS (rs->nroots)
-#define FCR (rs->fcr)
-#define PRIM (rs->prim)
-#define IPRIM (rs->iprim)
-#define A0 (NN)
-
-#define ENCODE_RS encode_rs_int
-#define DECODE_RS decode_rs_int
-#define INIT_RS init_rs_int
-#define FREE_RS free_rs_int
-
-void ENCODE_RS(void *p,DTYPE *data,DTYPE *parity);
-int DECODE_RS(void *p,DTYPE *data,int *eras_pos,int no_eras, int calc_syn);
-void *INIT_RS(unsigned int symsize,unsigned int gfpoly,unsigned int fcr,
-		   unsigned int prim,unsigned int nroots);
-void FREE_RS(void *p);
-
-
-
-
diff --git a/lib/sfrsd/kvasd.dat b/lib/sfrsd/kvasd.dat
deleted file mode 100644
index 94874a1ae03904608c7b315ff6000949c6cdc6ca..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1080
zcma)*$u2}e6oxO_JkK!%LCiC4Na$<f6(p8cUc=U!m6de7jGcv-U?Ub1HeBDAu9NiA
zNxrUA=loT5Zk_7tXqG*H6{l@kmOViWlwbmeU<(GI0}f#tI$;qS(p>#8EI|%znf1U4
zxV{YTwF}$O3Ti!L6DFY>TxU+5=eU0}Sko-@!#Y&b+?;V^=B#T4tkarj!1Eg680Nq;
z)b4@b>{(-A{V!0!bs8V*{PPs^`@(k&?QinWlI|{z>O*sz{Ew7V`v5;_9@@7wzh`u9
zoTL8^pDFJA1}?$xF5nw-Fz4L0QLnM^&B-emUk2~fyC{QqISB4+ANAY8J2W;0(HHOE
z{(9#**wbFvhY{ETdtx8l%lSqcUF$mcGVWV&?^RImdA^f1Fz?(q;&=popx*c7UY=)f
zt)U4jumHx#LGxW%#{pRHJZRp7=J$v1eQD~#cZ|F_eS4|7R#P7u{{#BoiKg}ftV0W}
uHELI&KF-na0(+t#xl4R|p_L#9bDC>K3w>=?`}IFyyviS<!0L1V@&5o);ZR%v

diff --git a/lib/sfrsd/kvasd7.dat b/lib/sfrsd/kvasd7.dat
deleted file mode 100644
index a7f548dd30c015452c7cce312eac32a6a285d030..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2048
zcmeH`$x6gP5J2NPF1U=~f~XU9a92ifSBz)xeoww&{>z)6<4MN%pc|Sd$XtaKJgRH$
zrYafE6~)*0=nYkT!V*lw1{}i!oWd<!!6F>OWjJr4_n-p{V2yekHbI#HYtG;mj17Wq
z-4x7&cdUWA_UOSXc)#(xpbyZK@C4SZfN${K`h25x=J$g>L7QV=-_s4}b@UM|!>EDx
z%=eMlb#k^gwbQe)JRW^f*JI?w++17x6YBGr?=_zLwW}oN{%63QIp0TcW+hyJbK3`f
z?qU~uFdMWr+Roh_I%D^${~TVx*mbbopLlNx-fMq*c$eRZb?)*8%=5dj=QEVx&UU~z
z48V6;cMtB=I=>xz+DGvo?F#%>{dStfy{F<Fqtx*bbZV#PnAYUWV}Iqu++17Z44WkG
dy(w1VjQ0&4EHduD;>?_TEA0f@3H<*F`~q4IP{sfN

diff --git a/lib/sfrsd/kvasd_bmfail.dat b/lib/sfrsd/kvasd_bmfail.dat
deleted file mode 100644
index a6965c3b7a67de702498b17a6a3795dadcd40c41..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2048
zcmeH`H%>!A5I{}NIVX`bCW{P4f`)<~N-jV{j|(KO00qYYaRnOWd(co?1YzETUFnM(
zAbF(sXEx1F*nd@>O6Br}eN^fRwn4iBhF~_>wdgbqz%ER|GPu7C_MjX}0@LUP*n~QW
z;~s4Hje~bo!7z-#80e=1yr%`6S88A#GT>Qbm<RW7fHBO0_fLZJZD1~~umWAM1IFW>
z`qAeW7-s<*;ToR9_%mqN2H^pW!Erw58+0eUKsL;M1?|3OI8BV5dk^CV^m$_KDA>kp
zEN^fNAMgmCy@#1#JC-}}&QZw0CB!wg=dJxK#5>};_bh_a2iC&=S|e+y&t6!Ada%~^
z*4`=h(ewJT?)K65;$CZC3if3c?3;CO0()%l+-vWAOV&!!HU|9}w=sFPAKGCF^lJ>x
z`%d&}jFr$08JGZLSDS}t++*E++iJzwFTng2bBr>G;a>eIaqR@#zWc_qpqOVAb2*NK
zpndy__n!S&zn{Zk$G)4x0qD;<DrvCqNii4qn43A<_oTRH{e1KGJt^jVMeychpB*Rv
X6@8n-F#P>jm?}!K0>uja^9p<eL9|I5

diff --git a/lib/sfrsd/kvasd_sample.dat b/lib/sfrsd/kvasd_sample.dat
deleted file mode 100644
index de2bf635bcb8c0df6a50872823d619ca57e25d52..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1080
zcmb7@H%@~=5JpYL<R}pYHYS*ybC9_MqTnDDR6YnCh>jaj&>|r^3J~T!yn`(C3yG25
zKf61#v*Fu6pUdSQ-fHKa_<LA@Rw%<f?4|w~ei_zMe+J(U>#zlFPyy>qfUy!dzW~NY
zpci&w8eGS*P0;i!a170G2K}%EUEo~TcdP@<ErR=UKdX>W{X_g5xHspW!U;Ifb6L+b
z*^k;a+EvhJah>AkMBXRu=Z3!X-XUxLUt^xZ`0KB^cl4`i%(LylW$HiSy&LD5<M<<d
zfMYkw+kQ#yqvWH8v0E4iYt4f9QUEm^1n=BC)Esvo8(^;Y+6}%NW0NopYP=7|)j+M)
z%W-R|v3IY=Lofgpa7}gd?f3?)sXmL~8*|LKdvtG6%Xha8zM&$R*8^p+mbvcn07k*J
z+(Qd!)w;|4UZuD>k=I1qw;O$$-)GeS$JAZxtGl1?1+A#vsJjVMpjMhWYU%s;%$mA~
hMO}5*%nfr5YpbI=sFU}pX6CDp^S!h9SNw;(voC=mPE7y+

diff --git a/lib/sfrsd/rs.h b/lib/sfrsd/rs.h
deleted file mode 100644
index c2b807d15..000000000
--- a/lib/sfrsd/rs.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* User include file for the Reed-Solomon codec
- * Copyright 2002, Phil Karn KA9Q
- * May be used under the terms of the GNU General Public License (GPL)
- */
-
-/* General purpose RS codec, integer symbols */
-void encode_rs_int(void *rs,int *data,int *parity);
-int decode_rs_int(void *rs,int *data,int *eras_pos,int no_eras, int calc_syn);
-void *init_rs_int(int symsize,int gfpoly,int fcr,
-		  int prim,int nroots,int pad);
-void free_rs_int(void *rs);
-
-/* Tables to map from conventional->dual (Taltab) and
- * dual->conventional (Tal1tab) bases
- */
-extern unsigned char Taltab[],Tal1tab[];
diff --git a/lib/sfrsd/rstest.c b/lib/sfrsd/rstest.c
deleted file mode 100644
index 11c67e1ea..000000000
--- a/lib/sfrsd/rstest.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
-./jt65code "Hi there"
-     Message                 Decoded                Err? Type
---------------------------------------------------------------------------
- 1.  HI THERE                HI THERE                    6:    Free text 
-
-Packed message, 6-bit symbols  25 57  1  8 29 22 61 14 46 15 56 28
-
-Information-carrying channel symbols
-   34 27 12 48 28 59 12 38 25 47 21 40 46  9 12 24 36  7  4 15 49
-   50  6 49 56  2 19 15  7 59 22  7  5 14 20  3 29 56  2  9 17 14
-   45 26 43 31 17 10 50 31  2 25 57  1  8 29 22 61 14 46 15 56 28
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <string.h>
-#include "rs.h"
-#include "init_random_seed.h"
-
-static void *rs;
-
-int main(){
-  int hi_there[]={25,57,1,8,29,22,61,14,46,15,56,28};
-  int data[12], revdat[12];
-  int parity[51];
-  int rxdat[63], errlocs[63];
-  int era_pos[51];
-  int i, numera, nerr, nn=63;
-
-  FILE *datfile;
-  //nsec,xlambda,maxe,nads,mrsym,mrprob,mr2sym,mr2prob
-  int nsec, maxe, nads;
-  float xlambda;
-  int mrsym[63],mrprob[63],mr2sym[63],mr2prob[63];
-  int nsec2,ncount,dat4[12];
-
-  init_random_seed();
-
-  datfile=fopen("kvasd.dat","rb");
-  if( !datfile ) {
-    printf("Unable to open kvasd.dat\n");
-    return 1;
-  } else {
-    fread(&nsec,sizeof(int),1,datfile);
-    fread(&xlambda,sizeof(float),1,datfile);
-    fread(&maxe,sizeof(int),1,datfile);
-    fread(&nads,sizeof(int),1,datfile);
-    fread(&mrsym,sizeof(int),63,datfile);
-    fread(&mrprob,sizeof(int),63,datfile);
-    fread(&mr2sym,sizeof(int),63,datfile);
-    fread(&mr2prob,sizeof(int),63,datfile);
-    fread(&nsec2,sizeof(int),1,datfile);
-    fread(&ncount,sizeof(int),1,datfile);
-    fread(&dat4,sizeof(int),12,datfile);
-    fclose(datfile);
-    printf("%d %f %d %d \n",nsec,xlambda,maxe,nads);
-    for (i=0; i<63; i++) printf("%d ",mrsym[i]);
-    printf("\n");
-//    for (i=0; i<63; i++) printf("%d ",mrprob[i]);
-//    printf("\n");
-//    for (i=0; i<63; i++) printf("%d ",mr2sym[i]);
-//    printf("\n");
-//    for (i=0; i<63; i++) printf("%d ",mr2prob[i]);
-//    printf("\n");
-//    printf("%d %d \n",nsec2,ncount);
-    printf("kv decode: ");
-    for (i=0; i<12; i++) printf("%d ",dat4[i]);
-    printf("\n");
-  }
-
-  // initialize the ka9q reed solomon encoder/decoder
-  unsigned int symsize=6, gfpoly=0x43, fcr=3, prim=1, nroots=51;
-  rs=init_rs_int(symsize, gfpoly, fcr, prim, nroots, 0);
-
-  // copy the 'hi there' message to the data vector
-//  memcpy(data,hi_there,sizeof(hi_there));
-//  memcpy(data,dat4,sizeof(dat4));
-
-//  printf("data symbols\n");
-//  for( i=0; i<12; i++) {
-//    revdat[i]=data[11-i];
-//    printf("%d ",data[i]);
-//  }
-//  printf("\n");
-
-//  encode_rs_int(rs,revdat,parity);
-
-//set up the received symbol vector
-//  for( i=0; i<63; i++ ) {
-//    if( i < 12 ) rxdat[i]=revdat[i];
-//    if( i >=12 ) rxdat[i]=parity[i-12];
-//  }
-
-/*
-  int errval, errloc;
-  int num_errors=0;
-  printf("num_errors = %d\n",num_errors);
-  for( i=0; i<num_errors; i++) {
-    do {
-      errval = rand() & nn;
-    } while(errval == 0);  //generate random 
-
-    do {
-      errloc = rand() % nn;
-    } while(errlocs[errloc]!=0); 
-
-    errlocs[errloc] = errval;
-    rxdat[errloc] ^= errval;
-  } 
-*/
-
-  numera=0;
-  printf("channel symbols\n");
-  for( i=0; i<63; i++ ) {
-    rxdat[i]=mrsym[i];
-    printf("%d ",rxdat[i]);
-  }
-  printf("\n");
-
-  nerr=decode_rs_int(rs,rxdat,era_pos,numera);
-
-  printf("nerr %d\n",nerr);
-
-  printf("decoded data\n");
-  for(i=0; i<63; i++) printf("%d ",rxdat[i]);
-  printf("\n");
-
-  exit(0);
-}
-
-
diff --git a/lib/sfrsd/sfrsd.c b/lib/sfrsd/sfrsd.c
deleted file mode 100644
index 45192e56a..000000000
--- a/lib/sfrsd/sfrsd.c
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- sfrsd.c
- 
- A soft-decision decoder for the JT65 (63,12) Reed-Solomon code.
- 
- This decoding scheme is built around Phil Karn's Berlekamp-Massey
- errors and erasures decoder. The approach is inspired by a number of
- publications, including the stochastic Chase decoder described
- in "Stochastic Chase Decoding of Reed-Solomon Codes", by Leroux et al.,
- IEEE Communications Letters, Vol. 14, No. 9, September 2010 and
- "Soft-Decision Decoding of Reed-Solomon Codes Using Successive Error-
- and-Erasure Decoding," by Soo-Woong Lee and B. V. K. Vijaya Kumar.
- 
- Steve Franke K9AN, Urbana IL, September 2015
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <time.h>
-#include <string.h>
-#include "rs.h"
-#include "init_random_seed.h"
-
-static void *rs;
-
-//***************************************************************************
-void usage(void)
-{
-    printf("Usage: sfrsd [options...] <path to kvasd.dat>\n");
-    printf("       input file should be in kvasd format\n");
-    printf("\n");
-    printf("Options:\n");
-    printf("       -n number of random erasure vectors to try\n");
-    printf("       -v verbose\n");
-}
-
-int main(int argc, char *argv[]){
-    
-    extern char *optarg;
-    extern int optind;
-    
-    int rxdat[63], rxprob[63], rxdat2[63], rxprob2[63];
-    int workdat[63], correct[63];
-    int era_pos[51];
-    int c, i, numera, nerr, nn=63, kk=12;
-    char *infile;
-    
-    FILE *datfile, *logfile;
-    int nsec, maxe, nads;
-    float xlambda;
-    int mrsym[63],mrprob[63],mr2sym[63],mr2prob[63];
-    int nsec2,ncount,dat4[12],bestdat[12];
-    int ntrials=10000;
-    int verbose=0;
-    int nhard=0,nhard_min=32768,nsoft=0,nsoft_min=32768, ncandidates;
-    
-    while ( (c = getopt(argc, argv, "n:qv")) !=-1 ) {
-        switch (c) {
-                case 'n':
-                ntrials=(int)strtof(optarg,NULL);
-                printf("ntrials set to %d\n",ntrials);
-                break;
-                case 'v':
-                verbose=1;
-                break;
-                case 'q': //accept (and ignore) -q option for WSJT10 compatibility
-                break;
-                case '?':
-                usage();
-                exit(1);
-        }
-    }
-    
-    if( optind+1 > argc) {
-        //        usage();
-        //        exit(1);
-        infile="kvasd.dat";
-    } else {
-        infile=argv[optind];
-    }
-    
-    logfile=fopen("/tmp/sfrsd.log","a");
-    if( !logfile ) {
-        printf("Unable to open sfrsd.log\n");
-        exit(1);
-    }
-    
-    datfile=fopen(infile,"rb");
-    if( !datfile ) {
-        printf("Unable to open kvasd.dat\n");
-        exit(1);
-    } else {
-        fread(&nsec,sizeof(int),1,datfile);
-        fread(&xlambda,sizeof(float),1,datfile);
-        fread(&maxe,sizeof(int),1,datfile);
-        fread(&nads,sizeof(int),1,datfile);
-        fread(&mrsym,sizeof(int),63,datfile);
-        fread(&mrprob,sizeof(int),63,datfile);
-        fread(&mr2sym,sizeof(int),63,datfile);
-        fread(&mr2prob,sizeof(int),63,datfile);
-        fread(&nsec2,sizeof(int),1,datfile);
-        fread(&ncount,sizeof(int),1,datfile);
-        //        printf("ncount %d\n",ncount);
-        fread(&dat4,sizeof(int),12,datfile);
-        fclose(datfile);
-    }
-    
-    // initialize the ka9q reed solomon encoder/decoder
-    unsigned int symsize=6, gfpoly=0x43, fcr=3, prim=1, nroots=51;
-    rs=init_rs_int(symsize, gfpoly, fcr, prim, nroots, 0);
-    
-    /*    // debug
-     int revdat[12], parity[51], correct[63];
-     for (i=0; i<12; i++) {
-     revdat[i]=dat4[11-i];
-     printf("%d ",revdat[i]);
-     }
-     printf("\n");
-     encode_rs_int(rs,revdat,parity);
-     for (i=0; i<63; i++) {
-     if( i<12 ) {
-     correct[i]=revdat[i];
-     printf("%d ",parity[i]);
-     } else {
-     correct[i]=parity[i-12];
-     }
-     }
-     printf("\n");
-     */
-    
-    // reverse the received symbol vector for bm decoder
-    for (i=0; i<63; i++) {
-        rxdat[i]=mrsym[62-i];
-        rxprob[i]=mrprob[62-i];
-        rxdat2[i]=mr2sym[62-i];
-        rxprob2[i]=mr2prob[62-i];
-    }
-    
-    // sort the mrsym probabilities to find the least reliable symbols
-    int k, pass, tmp, nsym=63;
-    int probs[63], indexes[63];
-    for (i=0; i<63; i++) {
-        indexes[i]=i;
-        probs[i]=rxprob[i]; // must un-comment sfrsd metrics in demod64a
-        
-    }
-    for (pass = 1; pass <= nsym-1; pass++) {
-        for (k = 0; k < nsym - pass; k++) {
-            if( probs[k] < probs[k+1] ) {
-                tmp = probs[k];
-                probs[k] = probs[k+1];
-                probs[k+1] = tmp;
-                tmp = indexes[k];
-                indexes[k] = indexes[k+1];
-                indexes[k+1] = tmp;
-            }
-        }
-    }
-    
-    // see if we can decode using BM HDD (and calculate the syndrome vector)
-    memset(era_pos,0,51*sizeof(int));
-    numera=0;
-    memcpy(workdat,rxdat,sizeof(rxdat));
-    nerr=decode_rs_int(rs,workdat,era_pos,numera,1);
-    if( nerr >= 0 ) {
-        fprintf(logfile,"   BM decode nerrors= %3d : ",nerr);
-        for(i=0; i<12; i++) printf("%2d ",workdat[11-i]);
-        fprintf(logfile,"\n");
-        fclose(logfile);
-        exit(0);
-    }
-    
-    // generate random erasure-locator vectors and see if any of them
-    // decode. This will generate a list of potential codewords. The
-    // "soft" distance between each codeword and the received word is
-    // used to decide which codeword is "best".
-    //
-
-    init_random_seed();
-
-    float p_erase;
-    int thresh, nsum;
-    ncandidates=0;
-    
-    
-    for( k=0; k<ntrials; k++) {
-        memset(era_pos,0,51*sizeof(int));
-        memcpy(workdat,rxdat,sizeof(rxdat));
-        
-        // mark a subset of the symbols as erasures
-        numera=0;
-        for (i=0; i<nn; i++) {
-            p_erase=0.0;
-            if( probs[62-i] >= 255 ) {
-                p_erase = 0.5;
-            } else if ( probs[62-i] >= 196 ) {
-                p_erase = 0.6;
-            } else if ( probs[62-i] >= 128 ) {
-                p_erase = 0.6;
-            } else if ( probs[62-i] >= 32 ) {
-                p_erase = 0.6;
-            } else {
-                p_erase = 0.8;
-            }
-            thresh = p_erase*100;
-            long int ir;
-            ir=rand();
-            if( ((ir % 100) < thresh ) && numera < 51 ) {
-                era_pos[numera]=indexes[62-i];
-                numera=numera+1;
-            }
-        }
-        
-        nerr=decode_rs_int(rs,workdat,era_pos,numera,0);
-        
-        if( nerr >= 0 ) {
-            ncandidates=ncandidates+1;
-            for(i=0; i<12; i++) dat4[i]=workdat[11-i];
-            //            fprintf(logfile,"loop1 decode nerr= %3d : ",nerr);
-            //            for(i=0; i<12; i++) fprintf(logfile, "%2d ",dat4[i]);
-            //            fprintf(logfile,"\n");
-            nhard=0;
-            nsoft=0;
-            nsum=0;
-            for (i=0; i<63; i++) {
-                nsum=nsum+rxprob[i];
-                if( workdat[i] != rxdat[i] ) {
-                    nhard=nhard+1;
-                    nsoft=nsoft+rxprob[i];
-                }
-            }
-            if( nsum != 0 ) {
-                nsoft=63*nsoft/nsum;
-                if( (nsoft < nsoft_min) ) {
-                    nsoft_min=nsoft;
-                    nhard_min=nhard;
-                    memcpy(bestdat,dat4,12*sizeof(int));
-                    memcpy(correct,workdat,63*sizeof(int));
-                }
-                
-            } else {
-                fprintf(logfile,"error - nsum %d nsoft %d nhard %d\n",nsum,nsoft,nhard);
-            }
-	    //            if( ncandidates >= 5000 ) {
-            if( ncandidates >= ntrials/2 ) {
-                break;
-            }
-        }
-    }
-    
-    fprintf(logfile,"%d candidates after stochastic loop\n",ncandidates);
-    
-    // do Forney Generalized Minimum Distance pattern
-    for (k=0; k<25; k++) {
-        memset(era_pos,0,51*sizeof(int));
-        numera=2*k;
-        for (i=0; i<numera; i++) {
-            era_pos[i]=indexes[62-i];
-        }
-        
-        memcpy(workdat,rxdat,sizeof(rxdat));
-        nerr=decode_rs_int(rs,workdat,era_pos,numera,0);
-        
-        if( nerr >= 0 ) {
-            ncandidates=ncandidates+1;
-            for(i=0; i<12; i++) dat4[i]=workdat[11-i];
-            //            fprintf(logfile,"GMD decode nerr= %3d : ",nerr);
-            //            for(i=0; i<12; i++) fprintf(logfile, "%2d ",dat4[i]);
-            //            fprintf(logfile,"\n");
-            nhard=0;
-            nsoft=0;
-            nsum=0;
-            for (i=0; i<63; i++) {
-                nsum=nsum+rxprob[i];
-                if( workdat[i] != rxdat[i] ) {
-                    nhard=nhard+1;
-                    nsoft=nsoft+rxprob[i];
-                }
-            }
-            if( nsum != 0 ) {
-                nsoft=63*nsoft/nsum;
-                if( (nsoft < nsoft_min) ) {
-                    nsoft_min=nsoft;
-                    nhard_min=nhard;
-                    memcpy(bestdat,dat4,12*sizeof(int));
-                    memcpy(correct,workdat,63*sizeof(int));
-                }
-                
-            } else {
-                fprintf(logfile,"error - nsum %d nsoft %d nhard %d\n",nsum,nsoft,nhard);
-            }
-	    //            if( ncandidates >=5000 ) {
-            if( ncandidates >= ntrials/2 ) {
-                break;
-            }
-        }
-    }
-    
-    fprintf(logfile,"%d candidates after GMD\n",ncandidates);
-    
-    if( (ncandidates >= 0) && (nsoft_min < 36) && (nhard_min < 44) ) {
-        for (i=0; i<63; i++) {
-            fprintf(logfile,"%3d %3d %3d %3d %3d %3d\n",i,correct[i],rxdat[i],rxprob[i],rxdat2[i],rxprob2[i]);
-            //            fprintf(logfile,"%3d %3d %3d %3d %3d\n",i,workdat[i],rxdat[i],rxprob[i],rxdat2[i],rxprob2[i]);
-        }
-        
-        fprintf(logfile,"**** ncandidates %d nhard %d nsoft %d nsum %d\n",ncandidates,nhard_min,nsoft_min,nsum);
-    } else {
-        nhard_min=-1;
-        memset(bestdat,0,12*sizeof(int));
-    }
-    datfile=fopen(infile,"wb");
-    if( !datfile ) {
-        printf("Unable to open kvasd.dat\n");
-        return 1;
-    } else {
-        fwrite(&nsec,sizeof(int),1,datfile);
-        fwrite(&xlambda,sizeof(float),1,datfile);
-        fwrite(&maxe,sizeof(int),1,datfile);
-        fwrite(&nads,sizeof(int),1,datfile);
-        fwrite(&mrsym,sizeof(int),63,datfile);
-        fwrite(&mrprob,sizeof(int),63,datfile);
-        fwrite(&mr2sym,sizeof(int),63,datfile);
-        fwrite(&mr2prob,sizeof(int),63,datfile);
-        fwrite(&nsec2,sizeof(int),1,datfile);
-        fwrite(&nhard_min,sizeof(int),1,datfile);
-        fwrite(&bestdat,sizeof(int),12,datfile);
-        fclose(datfile);
-    }
-    
-    fprintf(logfile,"exiting sfrsd\n");
-    fflush(logfile);
-    fclose(logfile);
-    exit(0);
-}
-
-