view librftab/readtxramp.c @ 624:7485e75d9477

srec-regions: removed unnecessary prohibition against address going backward
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 27 Feb 2020 08:12:11 +0000
parents a0f79bba0ad8
children
line wrap: on
line source

/*
 * Reading Tx ramp templates from formatted ASCII files, used for the ttw
 * 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_txramp_number()
{
	char *field;
	int rc;
	u_long number;

	rc = get_field(&field);
	if (rc < 0)
		return(ERROR_USAGE);
	if (!rc) {
		printf("error: %s is too short for a Tx ramp template\n",
			filename);
		return(ERROR_USAGE);
	}
	number = strtoul(field, 0, 0);
	*writeptr++ = number;
	return(0);
}

static
read_txramp_16num()
{
	int i, rc;

	for (i = 0; i < 16; i++) {
		rc = process_txramp_number();
		if (rc)
			return(rc);
	}
	return(0);
}

read_tx_ramp_template(filename_arg, rdbuf)
	char *filename_arg;
	u_char *rdbuf;
{
	char *field;
	int rc;

	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_ramp_file:
		printf("error: %s is not a valid Tx ramp template file\n",
			filename);
		fclose(rdfile);
		return(ERROR_USAGE);
	}
	if (strcmp(field, "ramp-up"))
		goto not_valid_ramp_file;
	writeptr = rdbuf;
	rc = read_txramp_16num();
	if (rc) {
		fclose(rdfile);
		return(rc);
	}
	rc = get_field(&field);
	if (rc <= 0)
		goto not_valid_ramp_file;
	if (strcmp(field, "ramp-down"))
		goto not_valid_ramp_file;
	rc = read_txramp_16num();
	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 Tx ramp template\n",
			filename);
		return(ERROR_USAGE);
	}
	return(0);
}