# HG changeset patch # User Mychaela Falconia # Date 1511374324 0 # Node ID a0f79bba0ad8fb1028ee2ec004f4912628d63fdf # Parent a9bd4b15f502d740fbc0f9659bfd5caca082d181 librftab: reading of Tx ramp template files split from rftablerd module diff -r a9bd4b15f502 -r a0f79bba0ad8 librftab/Makefile --- a/librftab/Makefile Wed Nov 22 06:23:52 2017 +0000 +++ b/librftab/Makefile Wed Nov 22 18:12:04 2017 +0000 @@ -1,6 +1,6 @@ CC= gcc CFLAGS= -O2 -OBJS= rftablerd.o rftablewr.o +OBJS= readtxramp.o rftablerd.o rftablewr.o LIB= librftab.a all: ${LIB} diff -r a9bd4b15f502 -r a0f79bba0ad8 librftab/rdcommon.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/librftab/rdcommon.c Wed Nov 22 18:12:04 2017 +0000 @@ -0,0 +1,61 @@ +/* + * This C file is not a compilation unit in itself, but is the common piece + * (a set of static variables and functions) included in the librftab modules + * responsible for reading different kinds of ASCII tables. + */ + +#define MAX_FIELDS_PER_LINE 64 + +static char *filename; +static FILE *rdfile; +static unsigned lineno; +static char linebuf[256], *line_fields[MAX_FIELDS_PER_LINE]; +static unsigned line_nfields, line_field_ptr; + +static int +read_line() +{ + char *cp; + + if (!fgets(linebuf, sizeof linebuf, rdfile)) + return(0); + lineno++; + cp = linebuf; + for (line_nfields = 0; ; ) { + while (isspace(*cp)) + cp++; + if (*cp == '\0' || *cp == '#') + break; + if (line_nfields >= MAX_FIELDS_PER_LINE) { + printf("%s line %d: too many fields on one line\n", + filename, lineno); + return(-1); + } + line_fields[line_nfields++] = cp; + while (*cp && !isspace(*cp)) + cp++; + if (*cp) + *cp++ = '\0'; + } + return(1); +} + +static +get_field(retp) + char **retp; +{ + int rc; + + if (line_field_ptr < line_nfields) { + *retp = line_fields[line_field_ptr++]; + return(1); + } + do { + rc = read_line(); + if (rc <= 0) + return(rc); + } while (!line_nfields); + *retp = line_fields[0]; + line_field_ptr = 1; + return(1); +} diff -r a9bd4b15f502 -r a0f79bba0ad8 librftab/readtxramp.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/librftab/readtxramp.c Wed Nov 22 18:12:04 2017 +0000 @@ -0,0 +1,102 @@ +/* + * Reading Tx ramp templates from formatted ASCII files, used for the ttw + * command in fc-tmsh. + */ + +#include +#include +#include +#include +#include +#include +#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); +} diff -r a9bd4b15f502 -r a0f79bba0ad8 librftab/rftablerd.c --- a/librftab/rftablerd.c Wed Nov 22 06:23:52 2017 +0000 +++ b/librftab/rftablerd.c Wed Nov 22 18:12:04 2017 +0000 @@ -12,65 +12,12 @@ #include #include "../rvinterf/include/exitcodes.h" -#define MAX_FIELDS_PER_LINE 64 +#include "rdcommon.c" -static char *filename; -static FILE *rdfile; -static unsigned lineno; -static char linebuf[256], *line_fields[MAX_FIELDS_PER_LINE]; -static unsigned line_nfields, line_field_ptr; static char *format; static u_char *writeptr; static unsigned written_size, maxsize; -static int -read_line() -{ - char *cp; - - if (!fgets(linebuf, sizeof linebuf, rdfile)) - return(0); - lineno++; - cp = linebuf; - for (line_nfields = 0; ; ) { - while (isspace(*cp)) - cp++; - if (*cp == '\0' || *cp == '#') - break; - if (line_nfields >= MAX_FIELDS_PER_LINE) { - printf("%s line %d: too many fields on one line\n", - filename, lineno); - return(-1); - } - line_fields[line_nfields++] = cp; - while (*cp && !isspace(*cp)) - cp++; - if (*cp) - *cp++ = '\0'; - } - return(1); -} - -static -get_field(retp) - char **retp; -{ - int rc; - - if (line_field_ptr < line_nfields) { - *retp = line_fields[line_field_ptr++]; - return(1); - } - do { - rc = read_line(); - if (rc <= 0) - return(rc); - } while (!line_nfields); - *retp = line_fields[0]; - line_field_ptr = 1; - return(1); -} - static process_number(size) { @@ -423,89 +370,3 @@ *size_ret = written_size; return(rc); } - -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); -}