diff --git a/lib/superfox/Makefile b/lib/superfox/Makefile index 290e897da..69e00eb88 100644 --- a/lib/superfox/Makefile +++ b/lib/superfox/Makefile @@ -15,17 +15,18 @@ CFLAGS= -O9 -Wall %.o: %.F90 ${FC} ${FFLAGS} -c $< -all: rstest rs_125_49 +all: rs_sf.a rstest rs_125_49 -OBJS1 = rstest.o init_rs_sf.o encode_rs_sf.o decode_rs_sf.o \ - rs_sf.o ran1.o +OBJS1 = rstest.o ran1.o rstest: $(OBJS1) - $(FC) -o rstest $(OBJS1) + $(FC) -o rstest $(OBJS1) rs_sf.a -OBJS2 = rs_125_49.o init_rs_sf.o encode_rs_sf.o decode_rs_sf.o \ - rs_sf.o ran1.o get_crc14.o +OBJS2 = rs_125_49.o ran1.o get_crc14.o rs_125_49: $(OBJS2) - $(FC) -o rs_125_49 $(OBJS2) + $(FC) -o rs_125_49 $(OBJS2) rs_sf.a + +rs_sf.a: init_rs_sf.o encode_rs_sf.o decode_rs_sf.o rs_sf.o + ar -crs rs_sf.a init_rs_sf.o encode_rs_sf.o decode_rs_sf.o rs_sf.o init_rs_sf.o: init_rs.c gcc -DBIGSYM=1 $(CFLAGS) -c -o $@ $^ @@ -36,4 +37,4 @@ decode_rs_sf.o: decode_rs.c .PHONY : clean clean: - -rm -f *.o rstest.exe + -rm -f *.o *.a *.exe diff --git a/lib/superfox/rs_125_49.f90 b/lib/superfox/rs_125_49.f90 index 13d576d2c..2c2ff09a9 100644 --- a/lib/superfox/rs_125_49.f90 +++ b/lib/superfox/rs_125_49.f90 @@ -10,7 +10,7 @@ program rs_125_49 ! integer dat(KK) !Decoded data, i*4 integer dat(256) !Decoded data, i*4 integer era(NN) - character c357*357,c14*14 + character c357*357,c14*14,chkmsg*15 nargs=iargc() if(nargs.ne.1) then @@ -60,18 +60,16 @@ program rs_125_49 nera=0 call rs_decode_sf(gsym,era,nera,dat,nfixed) - write(*,1008) -1008 format(/'Decoded result:') - write(*,1002) dat(1:KK) - if(nfixed.ge.0) write(*,1100) nerr,nfixed -1100 format(/'nerr:',i3,' nfixed:',i3) - if(nfixed.lt.0) write(*,1102) nerr,nfixed -1102 format(/'nerr:',i3,' nfixed:',i3,', decode failed.') - write(c357,'(51b7.7)') dat(1:KK) read(c357,'(357i1)') dgen1 call get_crc14(dgen1,7*KK,ncrc) - if(ncrc.ne.0) print*,'CRC check failed' - if(ncrc.eq.0) print*,'CRC check is OK' + + write(*,1008) +1008 format(/'Decoded result:') + chkmsg='Decode failed' + if(nfixed.ge.0 .and. ncrc.eq.0) chkmsg='CRC check OK' + write(*,1002) dat(1:KK) + write(*,1100) nerr,nfixed,trim(chkmsg) +1100 format(/'nerr:',i3,' nfixed:',i3,', ',a) 999 end program rs_125_49 diff --git a/lib/superfox/rstest.f90 b/lib/superfox/rstest.f90 index 55ce379e6..76b40adf9 100644 --- a/lib/superfox/rstest.f90 +++ b/lib/superfox/rstest.f90 @@ -5,6 +5,7 @@ program rstest integer gsym0(255) !Encoded data, Karn integer gsym(255) !Encoded data with errors integer dat(235) !Decoded data, i*4 + integer iera(0:200) !Positions of erasures nargs=iargc() if(nargs.ne.4) then @@ -21,7 +22,7 @@ program rstest read(arg,*) kk call getarg(4,arg) read(arg,*) nerr - + ! Initialize the Karn codec nq=2**mm nfz=3 @@ -29,7 +30,7 @@ program rstest ! Generate and random symbols with values 0 to nq-1 do i=1,kk - dgen(i)=(nq-0.0001)*ran1(idum) + dgen(i)=int(nq*ran1(idum)) enddo write(*,1000) @@ -50,16 +51,15 @@ program rstest 1006 format(/'Recovered channel symbols, with errors:') write(*,1002) gsym(1:nn) - call rs_decode_sf(gsym,era,0,dat,nfixed) - ibad=0 - do i=1,kk - if(dat(i).ne.dgen(i)) ibad=ibad+1 - enddo + nera=0 + iera=0 + call rs_decode_sf(gsym,iera,nera,dat,nfixed) + ibad=count(dat(1:kk).ne.dgen(1:kk)) write(*,1008) 1008 format(/'Decoded result:') write(*,1002) dat(1:kk) - write(*,1100) nerr,nfixed,ibad -1100 format(/'nerr:',i3,' nfixed:',i3,' ibad:',i3) + write(*,1100) nerr,nfixed +1100 format(/'nerr:',i3,' nfixed:',i3) 999 end program rstest