changeset 314:a0f79bba0ad8

librftab: reading of Tx ramp template files split from rftablerd module
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 22 Nov 2017 18:12:04 +0000
parents a9bd4b15f502
children 9178594bc283
files librftab/Makefile librftab/rdcommon.c librftab/readtxramp.c librftab/rftablerd.c
diffstat 4 files changed, 165 insertions(+), 141 deletions(-) [+]
line wrap: on
line diff
--- 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}
--- /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);
+}
--- /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 <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);
+}
--- 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 <stdlib.h>
 #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);
-}