# HG changeset patch # User Mychaela Falconia # Date 1605411168 0 # Node ID 7ddfb9a67b0c11eb2663905db320e67e5fa88390 # Parent 5e91200bf6098301a69ad24c47b240846093d47b netdiff: donl-flip2pin utility written, compiles diff -r 5e91200bf609 -r 7ddfb9a67b0c .hgignore --- a/.hgignore Sun Nov 15 01:17:10 2020 +0000 +++ b/.hgignore Sun Nov 15 03:32:48 2020 +0000 @@ -23,6 +23,7 @@ ^netdiff/convert/pads2donl$ ^netdiff/convert/protel2donl$ ^netdiff/convert/tedax2donl$ +^netdiff/flip2pin/donl-flip2pin$ ^netdiff/match/donl-netmatch$ ^netdiff/match/donl-pinreport$ ^netdiff/renpart/donl-rename-parts$ diff -r 5e91200bf609 -r 7ddfb9a67b0c netdiff/flip2pin/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/netdiff/flip2pin/Makefile Sun Nov 15 03:32:48 2020 +0000 @@ -0,0 +1,16 @@ +CC= gcc +CFLAGS= -O2 +PROG= donl-flip2pin +OBJS= main.o mainproc.o readlist.o +BINDIR= /usr/local/bin + +all: ${PROG} + +${PROG}: ${OBJS} + ${CC} ${CFLAGS} -o $@ ${OBJS} + +install: + install -c -o bin -g bin -m 755 ${PROG} ${BINDIR} + +clean: + rm -f *.[ao] a.out core errs ${PROG} diff -r 5e91200bf609 -r 7ddfb9a67b0c netdiff/flip2pin/main.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/netdiff/flip2pin/main.c Sun Nov 15 03:32:48 2020 +0000 @@ -0,0 +1,20 @@ +#include +#include +#include "struct.h" + +struct flip_list *flip_list; + +main(argc, argv) + char **argv; +{ + int i; + + if (argc != 3) { + fprintf(stderr, "usage: %s input-donl flip-list-file\n", + argv[0]); + exit(1); + } + read_flip_list(argv[2]); + main_process(argv[1]); + exit(0); +} diff -r 5e91200bf609 -r 7ddfb9a67b0c netdiff/flip2pin/mainproc.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/netdiff/flip2pin/mainproc.c Sun Nov 15 03:32:48 2020 +0000 @@ -0,0 +1,115 @@ +#include +#include +#include +#include +#include +#include "struct.h" + +extern struct flip_list *flip_list; + +#define MAX_FIELDS 2 + +static char *infname; +static FILE *inf; +static char linebuf[512]; +static int lineno; +static char *fields[MAX_FIELDS]; +static unsigned nfields; + +static +get_line() +{ + if (!fgets(linebuf, sizeof linebuf, inf)) + return(0); + lineno++; + if (!index(linebuf, '\n')) { + fprintf(stderr, "%s line %d: missing newline\n", + infname, lineno); + exit(1); + } + return(1); +} + +static void +parse_into_fields() +{ + char *cp; + + nfields = 0; + for (cp = linebuf; ; ) { + while (isspace(*cp)) + cp++; + if (*cp == '\0' || *cp == '#') + break; + if (nfields >= MAX_FIELDS) { + fprintf(stderr, "%s line %d: too many fields\n", + infname, lineno); + exit(1); + } + fields[nfields++] = cp; + while (*cp && !isspace(*cp)) + cp++; + if (*cp) + *cp++ = '\0'; + } +} + +static void +process_netpoint() +{ + char *cp, *refdes, *pin; + struct flip_list *rp; + + cp = index(fields[1], '.'); + if (!cp) { + fprintf(stderr, "%s line %d: expected '.' not found\n", + infname, lineno); + exit(1); + } + *cp++ = '\0'; + refdes = fields[1]; + pin = cp; + for (rp = flip_list; rp; rp = rp->next) { + if (!strcmp(refdes, rp->refdes)) + break; + } + if (rp) { + if (!strcmp(pin, "1")) + pin = "2"; + else if (!strcmp(pin, "2")) + pin = "1"; + else { + fprintf(stderr, + "%s line %d: flip pin number is not 1 or 2\n", + infname, lineno); + exit(1); + } + } + printf("%s\t%s.%s\n", fields[0], refdes, pin); +} + +main_process(input_filename) + char *input_filename; +{ + infname = input_filename; + inf = fopen(infname, "r"); + if (!inf) { + perror(infname); + exit(1); + } + for (;;) { + if (!get_line()) + break; + parse_into_fields(); + if (!nfields) + continue; + if (nfields != 2) { + fprintf(stderr, "%s line %d: expected 2 fields\n", + infname, lineno); + exit(1); + } + process_netpoint(); + } + fclose(inf); + return(0); +} diff -r 5e91200bf609 -r 7ddfb9a67b0c netdiff/flip2pin/readlist.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/netdiff/flip2pin/readlist.c Sun Nov 15 03:32:48 2020 +0000 @@ -0,0 +1,71 @@ +#include +#include +#include +#include +#include +#include "struct.h" + +extern struct flip_list *flip_list; + +static char *infname; +static FILE *inf; +static char linebuf[256]; +static int lineno; + +static void +refdes_entry(entry) + char *entry; +{ + struct flip_list *rp, **rpp; + char *dp; + + for (rpp = &flip_list; rp = *rpp; rpp = &rp->next) { + if (!strcmp(rp->refdes, entry)) { + fprintf(stderr, "%s line %d: refdes %s given twice\n", + infname, lineno, entry); + exit(1); + } + } + rp = malloc(sizeof(struct flip_list) + strlen(entry) + 1); + dp = (char *)(rp + 1); + rp->refdes = dp; + strcpy(dp, entry); + rp->next = 0; + *rpp = rp; +} + +static void +process_line() +{ + char *cp, *np; + + for (cp = linebuf; ; ) { + while (isspace(*cp)) + cp++; + if (*cp == '\0' || *cp == '#') + break; + np = cp; + while (*cp && !isspace(*cp)) + cp++; + if (*cp) + *cp++ = '\0'; + refdes_entry(np); + } +} + +read_flip_list(input_filename) + char *input_filename; +{ + infname = input_filename; + inf = fopen(infname, "r"); + if (!inf) { + perror(infname); + exit(1); + } + while (fgets(linebuf, sizeof linebuf, inf)) { + lineno++; + process_line(); + } + fclose(inf); + return(0); +} diff -r 5e91200bf609 -r 7ddfb9a67b0c netdiff/flip2pin/struct.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/netdiff/flip2pin/struct.h Sun Nov 15 03:32:48 2020 +0000 @@ -0,0 +1,4 @@ +struct flip_list { + char *refdes; + struct flip_list *next; +};