# HG changeset patch # User Mychaela Falconia # Date 1511376767 0 # Node ID 9178594bc283a9bdeb3d13ec220688fcfc4ea06d # Parent a0f79bba0ad8fb1028ee2ec004f4912628d63fdf librftab: implemented reading of FIR coefficient tables diff -r a0f79bba0ad8 -r 9178594bc283 librftab/Makefile --- a/librftab/Makefile Wed Nov 22 18:12:04 2017 +0000 +++ b/librftab/Makefile Wed Nov 22 18:52:47 2017 +0000 @@ -1,6 +1,6 @@ CC= gcc CFLAGS= -O2 -OBJS= readtxramp.o rftablerd.o rftablewr.o +OBJS= readfir.o readtxramp.o rftablerd.o rftablewr.o LIB= librftab.a all: ${LIB} diff -r a0f79bba0ad8 -r 9178594bc283 librftab/readfir.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/librftab/readfir.c Wed Nov 22 18:52:47 2017 +0000 @@ -0,0 +1,82 @@ +/* + * Reading FIR coefficient tables from formatted ASCII files, used for the + * auw-fir command in fc-tmsh. + */ + +#include +#include +#include +#include +#include +#include +#include "../rvinterf/include/exitcodes.h" + +#include "rdcommon.c" + +static u_char *writeptr; + +static +process_number() +{ + char *field; + int rc; + long number; + + rc = get_field(&field); + if (rc < 0) + return(ERROR_USAGE); + if (!rc) { + printf("error: %s is too short for a FIR coefficient table\n", + filename); + return(ERROR_USAGE); + } + number = strtol(field, 0, 0); + *writeptr++ = number; + *writeptr++ = number >> 8; + return(0); +} + +read_fir_coeff_table(filename_arg, rdbuf) + char *filename_arg; + u_char *rdbuf; +{ + char *field; + int rc, i; + + filename = filename_arg; + rdfile = fopen(filename, "r"); + if (!rdfile) { + perror(filename); + return(ERROR_UNIX); + } + lineno = 0; + line_nfields = 0; + rc = get_field(&field); + if (rc <= 0) { +not_valid_fir_table: + printf("error: %s is not a valid FIR coefficient table file\n", + filename); + fclose(rdfile); + return(ERROR_USAGE); + } + if (strcmp(field, "fir-coeff-table")) + goto not_valid_fir_table; + writeptr = rdbuf; + for (i = 0; i < 31; i++) { + rc = process_number(); + if (rc) { + fclose(rdfile); + return(rc); + } + } + rc = get_field(&field); + fclose(rdfile); + if (rc < 0) + return(ERROR_USAGE); + if (rc) { + printf("error: %s is too long for a FIR coefficient table\n", + filename); + return(ERROR_USAGE); + } + return(0); +}