annotate pads2gpcb/parttype.c @ 78:be1fe110b6ab

pads2gpcb: output offset implemented
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Mon, 01 Feb 2016 02:22:37 +0000
parents 2b71943a311b
children ac13abc7dc0d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
63
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
1 #include <stdio.h>
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
2 #include <stdlib.h>
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
3 #include <ctype.h>
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
4 #include <string.h>
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
5 #include <strings.h>
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
6 #include "globals.h"
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
7 #include "struct.h"
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
8
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
9 extern struct part_decal *find_decal_by_name();
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
10 extern char *savestr();
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
11
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
12 static struct part_type *our_parttype;
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
13 static int ngates, nsignals;
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
14
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
15 static void
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
16 enter_parttype()
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
17 {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
18 struct part_type *p, **pp;
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
19 char *name = input_line_fields[0];
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
20
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
21 for (pp = &part_type_list; p = *pp; pp = &p->next)
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
22 if (!strcmp(p->name, name)) {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
23 fprintf(stderr,
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
24 "%s line %d: part type name \"%s\" already defined\n",
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
25 input_filename, input_lineno, name);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
26 exit(1);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
27 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
28 p = malloc(sizeof(struct part_type) + strlen(name) + 1);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
29 if (!p) {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
30 perror("malloc of struct part_type");
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
31 exit(1);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
32 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
33 bzero(p, sizeof(struct part_type));
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
34 p->name = (char *)(p + 1);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
35 strcpy(p->name, name);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
36 *pp = p;
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
37 our_parttype = p;
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
38 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
39
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
40 static void
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
41 find_decals()
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
42 {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
43 char *cp, *np;
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
44 struct part_decal *decal;
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
45
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
46 for (cp = input_line_fields[1]; cp; cp = np) {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
47 np = index(cp, ':');
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
48 if (np)
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
49 *np++ = '\0';
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
50 if (!*cp)
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
51 continue;
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
52 decal = find_decal_by_name(cp);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
53 if (!decal) {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
54 fprintf(stderr,
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
55 "%s line %d: part type definition refers to unknown decal name \"%s\"\n",
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
56 input_filename, input_lineno, cp);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
57 exit(1);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
58 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
59 if (our_parttype->ndecals >= MAX_DECALS_PER_PART_TYPE) {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
60 fprintf(stderr,
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
61 "%s line %d: MAX_DECALS_PER_PART_TYPE exceeded\n",
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
62 input_filename, input_lineno);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
63 exit(1);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
64 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
65 our_parttype->decals[our_parttype->ndecals++] = decal;
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
66 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
67 if (!our_parttype->ndecals) {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
68 fprintf(stderr,
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
69 "%s line %d: empty list of decals in part type def\n",
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
70 input_filename, input_lineno);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
71 exit(1);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
72 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
73 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
74
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
75 static void
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
76 process_header_line()
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
77 {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
78 if (input_line_nfields < 6) {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
79 fprintf(stderr,
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
80 "%s line %d: expected beginning of part type definition, wrong # of fields\n",
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
81 input_filename, input_lineno);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
82 exit(1);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
83 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
84 enter_parttype();
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
85 printf("Processing part type %s\n", our_parttype->name);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
86 find_decals();
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
87 ngates = atoi(input_line_fields[3]);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
88 nsignals = atoi(input_line_fields[4]);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
89 our_parttype->num_alpha_pins = atoi(input_line_fields[5]);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
90 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
91
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
92 static void
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
93 get_line_internal()
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
94 {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
95 if (!get_input_line()) {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
96 fprintf(stderr,
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
97 "error: EOF in the middle of a part type definition\n");
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
98 exit(1);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
99 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
100 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
101
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
102 static void
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
103 process_one_gate_def()
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
104 {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
105 int gatepins;
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
106
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
107 get_line_internal();
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
108 parse_input_line_fields();
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
109 if (input_line_nfields != 3 || strcmp(input_line_fields[0], "G")) {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
110 fprintf(stderr, "%s line %d: expected gate def header line\n",
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
111 input_filename, input_lineno);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
112 exit(1);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
113 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
114 gatepins = atoi(input_line_fields[2]);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
115 while (gatepins > 0) {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
116 get_line_internal();
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
117 parse_input_line_fields();
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
118 gatepins -= input_line_nfields;
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
119 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
120 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
121
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
122 static void
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
123 alloc_alpha_pins_array()
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
124 {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
125 our_parttype->alpha_pins =
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
126 malloc(sizeof(char *) * our_parttype->num_alpha_pins);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
127 if (!our_parttype->alpha_pins) {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
128 perror("malloc of alpha_pins array");
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
129 exit(1);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
130 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
131 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
132
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
133 static void
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
134 read_alpha_pins()
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
135 {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
136 int idx, i;
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
137
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
138 for (idx = 0; idx < our_parttype->num_alpha_pins; ) {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
139 get_line_internal();
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
140 parse_input_line_fields();
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
141 for (i = 0; i < input_line_nfields; i++) {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
142 if (idx >= our_parttype->num_alpha_pins) {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
143 fprintf(stderr,
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
144 "%s line %d: alpha_pins array overflow\n",
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
145 input_filename, input_lineno);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
146 exit(1);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
147 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
148 our_parttype->alpha_pins[idx++] =
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
149 savestr(input_line_fields[i]);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
150 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
151 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
152 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
153
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
154 static void
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
155 process_one_parttype()
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
156 {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
157 int i;
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
158
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
159 process_header_line();
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
160 for (i = 0; i < ngates; i++)
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
161 process_one_gate_def();
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
162 for (i = 0; i < nsignals; i++)
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
163 get_line_internal();
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
164 if (our_parttype->num_alpha_pins) {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
165 alloc_alpha_pins_array();
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
166 read_alpha_pins();
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
167 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
168 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
169
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
170 process_parttype_section()
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
171 {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
172 for (;;) {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
173 if (!get_input_line()) {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
174 fprintf(stderr, "error: EOF in PARTTYPE section\n");
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
175 exit(1);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
176 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
177 if (input_line_buf[0] == '*') {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
178 parse_starline();
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
179 if (strcmp(input_line_starkw, "REMARK"))
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
180 break;
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
181 else
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
182 continue;
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
183 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
184 parse_input_line_fields();
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
185 if (input_line_nfields)
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
186 process_one_parttype();
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
187 }
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
188 }
65
2b71943a311b pads2gpcb: PART section parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 63
diff changeset
189
2b71943a311b pads2gpcb: PART section parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 63
diff changeset
190 struct part_type *
2b71943a311b pads2gpcb: PART section parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 63
diff changeset
191 find_parttype_by_name(name)
2b71943a311b pads2gpcb: PART section parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 63
diff changeset
192 char *name;
2b71943a311b pads2gpcb: PART section parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 63
diff changeset
193 {
2b71943a311b pads2gpcb: PART section parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 63
diff changeset
194 struct part_type *p;
2b71943a311b pads2gpcb: PART section parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 63
diff changeset
195
2b71943a311b pads2gpcb: PART section parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 63
diff changeset
196 for (p = part_type_list; p; p = p->next)
2b71943a311b pads2gpcb: PART section parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 63
diff changeset
197 if (!strcmp(p->name, name))
2b71943a311b pads2gpcb: PART section parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 63
diff changeset
198 break;
2b71943a311b pads2gpcb: PART section parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 63
diff changeset
199 return(p);
2b71943a311b pads2gpcb: PART section parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 63
diff changeset
200 }