FreeCalypso > hg > freecalypso-reveng
diff fir/rdcommon.c @ 376:9b3e5be96bab
fir2freq: a tool for analyzing captured FIR coefficient sets
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 02 Aug 2021 04:59:46 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fir/rdcommon.c Mon Aug 02 04:59:46 2021 +0000 @@ -0,0 +1,62 @@ +/* + * 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) { + fprintf(stderr, + "%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); +}