changeset 315:9178594bc283

librftab: implemented reading of FIR coefficient tables
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 22 Nov 2017 18:52:47 +0000
parents a0f79bba0ad8
children 0f2db8baf8db
files librftab/Makefile librftab/readfir.c
diffstat 2 files changed, 83 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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}
--- /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 <sys/types.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <string.h>
+#include <strings.h>
+#include <stdlib.h>
+#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);
+}