FreeCalypso > hg > ueda-linux
annotate ueda/sverp-bind/starpoints.c @ 16:65a515c20db8
unet-bind: starpoint entry implemented
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Sun, 02 Aug 2015 01:12:18 +0000 |
parents | |
children |
rev | line source |
---|---|
16
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 #include <stdio.h> |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 #include <stdlib.h> |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
3 #include <string.h> |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
4 #include <strings.h> |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
5 #include "struct.h" |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
6 |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
7 extern struct instance *enter_instance(); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
8 |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
9 extern char *starpoints_file; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
10 |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
11 struct outcomp *starpoint_list_head; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
12 static struct outcomp **global_tailp = &starpoint_list_head; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
13 |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
14 process_starpoints_file() |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
15 { |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
16 FILE *stream; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
17 char linebuf[256]; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
18 int lineno; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
19 register char *cp; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
20 char *instname, *numstr; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
21 int npins; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
22 register struct instance *inst; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
23 register struct outcomp *oc; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
24 |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
25 stream = fopen(starpoints_file, "r"); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
26 if (!stream) { |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
27 perror(starpoints_file); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
28 exit(1); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
29 } |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
30 for (lineno = 1; fgets(linebuf, sizeof linebuf, stream); lineno++) { |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
31 cp = index(linebuf, '\n'); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
32 if (!cp) { |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
33 fprintf(stderr, |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
34 "error: %s line %d is too long or unterminated\n", |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
35 starpoints_file, lineno); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
36 exit(1); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
37 } |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
38 *cp = '\0'; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
39 for (cp = linebuf; isspace(*cp); cp++) |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
40 ; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
41 if (*cp == '\0' || *cp == '#') |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
42 continue; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
43 instname = cp; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
44 while (*cp && !isspace(*cp)) |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
45 cp++; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
46 if (*cp) |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
47 *cp++ = '\0'; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
48 while (isspace(*cp)) |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
49 cp++; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
50 if (*cp == '\0' || *cp == '#') { |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
51 npins_error: fprintf(stderr, |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
52 "error in %s line %d: expected number of pins after the instance name\n", |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
53 starpoints_file, lineno); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
54 exit(1); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
55 } |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
56 numstr = cp; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
57 while (*cp && !isspace(*cp)) |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
58 cp++; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
59 if (*cp) |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
60 *cp++ = '\0'; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
61 if (!string_is_valid_decnum(numstr)) |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
62 goto npins_error; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
63 npins = atoi(numstr); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
64 if (npins < 2) { |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
65 fprintf(stderr, |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
66 "error in %s line %d: a starpoint must have 2 or more pins\n", |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
67 starpoints_file, lineno); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
68 exit(1); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
69 } |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
70 inst = enter_instance(instname); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
71 oc = (struct outcomp *) |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
72 malloc(sizeof(struct outcomp) + |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
73 sizeof(struct pinconn *) * npins); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
74 if (!oc) { |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
75 perror("malloc"); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
76 exit(1); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
77 } |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
78 bzero(oc, sizeof(struct outcomp) + |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
79 sizeof(struct pinconn *) * npins); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
80 oc->name = inst->name; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
81 oc->npins = npins; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
82 oc->conn_array = (struct pinconn **)(oc + 1); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
83 inst->outcomp = oc; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
84 *global_tailp = oc; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
85 global_tailp = &oc->next; |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
86 } |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
87 fclose(stream); |
65a515c20db8
unet-bind: starpoint entry implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
88 } |