view librftab/readfir.c @ 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
children
line wrap: on
line source

/*
 * 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);
}