view rfcal/vcxo-manual/readmeas.c @ 181:dcab0be3f67a

started manual VCXO calibration code: fc-vcxo-linear utility written
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 12 Apr 2017 06:45:45 +0000
parents
children
line wrap: on
line source

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include "meas.h"

read_meas_file(filename, meas_table, nmeas)
	char *filename;
	struct meas *meas_table;
{
	FILE *f;
	char linebuf[256], *cp, *np;
	int lineno;
	struct meas *mtp;
	int got_meas;

	f = fopen(filename, "r");
	if (!f) {
		perror(filename);
		exit(1);
	}
	mtp = meas_table;
	got_meas = 0;
	for (lineno = 1; fgets(linebuf, sizeof linebuf, f); lineno++) {
		for (cp = linebuf; isspace(*cp); cp++)
			;
		if (*cp == '\0' || *cp == '#')
			continue;
		if (!isdigit(*cp) && *cp != '-' && *cp != '+') {
inv:			fprintf(stderr, "%s line %d: invalid syntax\n",
				filename, lineno);
			exit(1);
		}
		np = cp++;
		while (isdigit(*cp))
			cp++;
		if (!isspace(*cp))
			goto inv;
		mtp->dac_value = atoi(np);
		while (isspace(*cp))
			cp++;
		if (!isdigit(*cp) && *cp != '-' && *cp != '+')
			goto inv;
		np = cp++;
		while (isdigit(*cp))
			cp++;
		if (*cp && !isspace(*cp))
			goto inv;
		mtp->freq_offset = atoi(np);
		mtp++;
		got_meas++;
		if (got_meas >= nmeas)
			break;
	}
	fclose(f);
	if (got_meas < nmeas) {
		fprintf(stderr, "error: need %d measurements, got %d in %s\n",
			nmeas, got_meas, filename);
		exit(1);
	}
	return 0;
}