FreeCalypso > hg > ueda-linux
annotate netdiff/convert/tedax2donl.c @ 136:65f87111090c
netdiff: tedax2donl written
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 07 Sep 2020 03:02:42 +0000 |
parents | |
children | 6f528e2a9e23 |
rev | line source |
---|---|
136
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This program converts a tEDAx netlist into our |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * Diff-Oriented Netlist (DONL) format. |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 */ |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include <ctype.h> |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <stdio.h> |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <stdlib.h> |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <string.h> |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <strings.h> |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #define MAX_FIELDS 32 |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 static char *infname; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 static FILE *inf; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 static char linebuf[512]; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 static int lineno; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 static char *fields[MAX_FIELDS]; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 static unsigned nfields; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 static |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 get_line() |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 if (!fgets(linebuf, sizeof linebuf, inf)) |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 return(0); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 lineno++; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 if (!index(linebuf, '\n')) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 fprintf(stderr, "%s line %d: missing newline\n", |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 infname, lineno); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 exit(1); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 return(1); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 static void |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 parse_into_fields() |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 char *cp; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 nfields = 0; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 for (cp = linebuf; ; ) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 while (isspace(*cp)) |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 cp++; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 if (*cp == '\0' || *cp == '#') |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 break; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 if (nfields >= MAX_FIELDS) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 fprintf(stderr, "%s line %d: too many fields\n", |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 infname, lineno); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 exit(1); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 fields[nfields++] = cp; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 while (*cp) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 if (isspace(*cp)) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 *cp++ = '\0'; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 break; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 if (*cp++ != '\\') |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 continue; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 switch (*cp++) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 case '\\': |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 case 'n': |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 case 'r': |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 case 't': |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 case ' ': |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 case '\t': |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 continue; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 default: |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 fprintf(stderr, "%s line %d: invalid escape\n", |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 infname, lineno); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 exit(1); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 static void |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 get_tedax_header() |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 do { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 if (!get_line()) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 fprintf(stderr, "%s: EOF before tEDAx header\n", |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 infname); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 exit(1); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 parse_into_fields(); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 } while (!nfields); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 if (strcmp(fields[0], "tEDAx")) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 fprintf(stderr, "%s line %d: expected tEDAx header\n", |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 infname, lineno); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 exit(1); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 if (nfields != 2 || strcmp(fields[1], "v1")) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 fprintf(stderr, "%s line %d: expected tEDAx v1\n", |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 infname, lineno); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 exit(1); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 static void |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 skip_wrong_block() |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 for (;;) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 if (!get_line()) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 fprintf(stderr, |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 "%s: EOF in the middle of a skip block\n", |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 infname, lineno); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 exit(1); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 if (!nfields) |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 continue; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 if (!strcmp(fields[0], "begin")) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 fprintf(stderr, "%s line %d: nested block beginning\n", |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 infname, lineno); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 exit(1); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 if (!strcmp(fields[0], "end")) |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 return; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 static void |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 find_begin_netlist() |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 for (;;) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 do { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 if (!get_line()) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 fprintf(stderr, |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 "%s: EOF before beginning of netlist block\n", |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 infname); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 exit(1); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 parse_into_fields(); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 } while (!nfields); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 if (strcmp(fields[0], "begin")) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 fprintf(stderr, "%s line %d: expected begin line\n", |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 infname, lineno); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 exit(1); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 if (nfields != 4) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 fprintf(stderr, |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 "%s line %d: begin line has wrong number of fields\n", |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 infname, lineno); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 exit(1); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 if (!strcmp(fields[1], "netlist")) |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 break; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 skip_wrong_block(); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 if (strcmp(fields[2], "v1")) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 fprintf(stderr, |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 "%s line %d: netlist block has wrong version\n", |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 infname, lineno); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 exit(1); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 static void |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 process_netlist_block() |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 for (;;) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 if (!get_line()) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 fprintf(stderr, |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 "%s: EOF in the middle of the netlist block\n", |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 infname, lineno); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 exit(1); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 if (!nfields) |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 continue; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 if (!strcmp(fields[0], "begin")) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 fprintf(stderr, "%s line %d: nested block beginning\n", |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 infname, lineno); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 exit(1); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 if (!strcmp(fields[0], "end")) |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 return; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 if (strcmp(fields[0], "conn")) |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 continue; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 if (nfields != 4) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 fprintf(stderr, |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 "%s line %d: conn line has wrong number of fields\n", |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 infname, lineno); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 exit(1); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 printf("%s\t%s.%s\n", fields[1], fields[2], fields[3]); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 main(argc, argv) |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 char **argv; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 if (argc != 2) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 fprintf(stderr, "usage: %s tedax-netlist-file\n", argv[0]); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 exit(1); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 infname = argv[1]; |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 inf = fopen(infname, "r"); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 if (!inf) { |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 perror(infname); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 exit(1); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 } |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 get_tedax_header(); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 find_begin_netlist(); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 process_netlist_block(); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 exit(0); |
65f87111090c
netdiff: tedax2donl written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 } |