Rev 135 | Rev 142 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 135 | Rev 141 | ||
---|---|---|---|
Line 11... | Line 11... | ||
11 | $y{labels} = -200; |
11 | $y{labels} = -200; |
12 | $labelpin = 0; |
12 | $labelpin = 0; |
13 | 13 | ||
14 | # Read in the file, storing information about each pin.
|
14 | # Read in the file, storing information about each pin.
|
15 | 15 | ||
- | 16 | my $pinnumwidth = 0; |
|
- | 17 | my $blockname; |
|
- | 18 | ||
16 | while (<>) { |
19 | while (<>) { |
17 | next if /^#/; |
20 | next if /^#/; |
18 | s/^\s+//; |
21 | s/^\s+//; |
19 | s/\s+$//; |
22 | s/\s+$//; |
20 | s/[\s\t]+/ /g; |
23 | s/[\s\t]+/ /g; |
Line 59... | Line 62... | ||
59 | }
|
62 | }
|
60 | 63 | ||
61 | # Visible labels are stored as pins because their size affects the
|
64 | # Visible labels are stored as pins because their size affects the
|
62 | # size of the symbols' box.
|
65 | # size of the symbols' box.
|
63 | if (/\S/ && $side eq "labels") { |
66 | if (/\S/ && $side eq "labels") { |
- | 67 | if ($_ =~ /^block=/) { |
|
- | 68 | $blockname = $_; |
|
- | 69 | printf STDERR "Blocname %s\n", $blockname; |
|
- | 70 | next; |
|
- | 71 | }
|
|
64 | $labelpin --; |
72 | $labelpin --; |
65 | $pinside{$labelpin} = $side; |
73 | $pinside{$labelpin} = $side; |
66 | $piny{$labelpin} = $y{labels}; |
74 | $piny{$labelpin} = $y{labels}; |
67 | $pinlabel{$labelpin} = $_; |
75 | $pinlabel{$labelpin} = $_; |
68 | $y{labels} -= 200; |
76 | $y{labels} -= 200; |
Line 92... | Line 100... | ||
92 | } else { |
100 | } else { |
93 | $pinlabel{$pin} = $rest; |
101 | $pinlabel{$pin} = $rest; |
94 | }
|
102 | }
|
95 | $rlen{$pin} = &textlen($pinlabel{$pin}); |
103 | $rlen{$pin} = &textlen($pinlabel{$pin}); |
96 | 104 | ||
- | 105 | if ($pinnumwidth < &textlen($pin)) { |
|
- | 106 | $pinnumwidth = &textlen($pin); |
|
- | 107 | }
|
|
- | 108 | ||
97 | if ($side =~ /left|right/) { |
109 | if ($side =~ /left|right/) { |
98 | $y = $piny{$pin} = $y{$side}; |
110 | $y = $piny{$pin} = $y{$side}; |
99 | $y{$side} += ($busmode ? 200 : 300); |
111 | $y{$side} += ($busmode ? 200 : 300); |
100 | }
|
112 | }
|
101 | if ($side =~ /top|bottom/) { |
113 | if ($side =~ /top|bottom/) { |
Line 106... | Line 118... | ||
106 | 118 | ||
107 | }
|
119 | }
|
108 | 120 | ||
109 | }
|
121 | }
|
110 | 122 | ||
- | 123 | $pinnumwidth += 100 - ($pinnumwidth % 100); |
|
- | 124 | ||
111 | $minpin = $labelpin; |
125 | $minpin = $labelpin; |
112 | $boxwidth = 0; |
126 | $boxwidth = 0; |
113 | %bw = (); |
127 | %bw = (); |
114 | 128 | ||
115 | # for each horizontal slice of the symbol, keep track of how much
|
129 | # for each horizontal slice of the symbol, keep track of how much
|
Line 187... | Line 201... | ||
187 | 201 | ||
188 | # Adjust the position of the top/bottom pins so that, as a group,
|
202 | # Adjust the position of the top/bottom pins so that, as a group,
|
189 | # they're centered.
|
203 | # they're centered.
|
190 | for $p (keys %pinside) { |
204 | for $p (keys %pinside) { |
191 | next unless $pinside{$p} =~ /top|bottom/; |
205 | next unless $pinside{$p} =~ /top|bottom/; |
192 | $pinx{$p} += &alignpin(($boxwidth - $w{$pinside{$p}})/2) + 300; |
206 | $pinx{$p} += &alignpin(($boxwidth - $w{$pinside{$p}})/2) + $pinnumwidth; |
193 | }
|
207 | }
|
194 | 208 | ||
195 | # Labels are centered in the box.
|
209 | # Labels are centered in the box.
|
196 | # labels have to be top, lef
|
210 | # labels have to be top, lef
|
197 | for $lp ($minpin..-1) { |
211 | for $lp ($minpin..-1) { |
198 | #$pinx{$lp} = &alignpin($boxwidth/2) + 300;
|
212 | #$pinx{$lp} = &alignpin($boxwidth/2) + 300;
|
199 | $pinx{$lp} = 300; # + &textlen($pinlabel{$lp})/2; |
213 | $pinx{$lp} = $pinnumwidth; |
200 | }
|
214 | }
|
201 | 215 | ||
202 | # Version.
|
216 | # Version.
|
203 | print "v 20060123 1\n"; |
217 | print "v 20060123 1\n"; |
204 | 218 | ||
205 | # Symbol box.
|
219 | # Symbol box.
|
206 | printf("B %d %d %d %d 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1\n", |
220 | printf("B %d %d %d %d 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1\n", |
207 | 300, 300, $boxwidth, $maxy); |
221 | $pinnumwidth, 300, $boxwidth, $maxy); |
208 | 222 | ||
209 | # These are the hidden labels.
|
223 | # These are the hidden labels.
|
210 | $ax = 300 + $boxwidth; |
224 | $ax = 300 + $boxwidth; |
211 | $ay = 400 + $maxy; |
225 | $ay = 400 + $maxy; |
212 | for $a (reverse @attrs) { |
226 | for $a (reverse @attrs) { |
213 | printf("T %d %d 9 10 0 0 0 0 1\n%s\n", |
227 | printf("T %d %d 9 10 0 0 0 0 1\n%s\n", |
214 | $ax, $ay, $a); |
228 | $ax, $ay, $a); |
215 | $ay += 200; |
229 | $ay += 200; |
216 | }
|
230 | }
|
217 | 231 | ||
- | 232 | # blockname if present
|
|
- | 233 | if(defined $blockname) { |
|
- | 234 | printf("T %d %d 5 10 1 1 0 6 1\n%s\n", $boxwidth + $pinnumwidth, $maxy + 400, $blockname); |
|
- | 235 | printf STDERR "BLOCKNAME %s\n", $blockname; |
|
- | 236 | }
|
|
- | 237 | ||
218 | # Now print all the pins.
|
238 | # Now print all the pins.
|
219 | for $p (sort {$a<=>$b} keys %pinside) { |
239 | for $p (sort {$a<=>$b} keys %pinside) { |
220 | next unless $pinside{$p}; |
240 | next unless $pinside{$p}; |
221 | if ($pinside{$p} eq "left") { |
241 | if ($pinside{$p} eq "left") { |
222 | $pinx{$p} = 300; |
242 | $pinx{$p} = $pinnumwidth; |
223 | }
|
243 | }
|
224 | if ($pinside{$p} eq "right") { |
244 | if ($pinside{$p} eq "right") { |
225 | $pinx{$p} = 300 + $boxwidth; |
245 | $pinx{$p} = $pinnumwidth + $boxwidth; |
226 | }
|
246 | }
|
227 | if ($p > 0 && !$saw_pin{$p}) { |
247 | if ($p > 0 && !$saw_pin{$p}) { |
228 | print STDERR "MISSING PIN $p\n"; |
248 | print STDERR "MISSING PIN $p\n"; |
229 | $errors++; |
249 | $errors++; |
230 | } else { |
250 | } else { |
Line 289... | Line 309... | ||
289 | $pinx{$pin}+100, $piny{$pin}, |
309 | $pinx{$pin}+100, $piny{$pin}, |
290 | $pinx{$pin}, $piny{$pin}+50); |
310 | $pinx{$pin}, $piny{$pin}+50); |
291 | 311 | ||
292 | }
|
312 | }
|
293 | printf("P %d %d %d %d 1 0 0\n", |
313 | printf("P %d %d %d %d 1 0 0\n", |
294 | $pinx{$pin} - 300, $piny{$pin}, $x, $piny{$pin}); |
314 | $pinx{$pin} - $pinnumwidth, $piny{$pin}, $x, $piny{$pin}); |
295 | print "{\n"; |
315 | print "{\n"; |
296 | &pltext($pinx{$pin} + $px, $piny{$pin}, 1, $pinlabel{$pin}); |
316 | &pltext($pinx{$pin} + $px, $piny{$pin}, 1, $pinlabel{$pin}); |
297 | &ntext($pinx{$pin} -100, $piny{$pin} + 50, 6, $pin); |
317 | &ntext($pinx{$pin} -100, $piny{$pin} + 50, 6, $pin); |
298 | print "}\n"; |
318 | print "}\n"; |
299 | }
|
319 | }
|
Line 315... | Line 335... | ||
315 | $pinx{$pin}-100, $piny{$pin}, |
335 | $pinx{$pin}-100, $piny{$pin}, |
316 | $pinx{$pin}, $piny{$pin}+50); |
336 | $pinx{$pin}, $piny{$pin}+50); |
317 | 337 | ||
318 | }
|
338 | }
|
319 | printf("P %d %d %d %d 1 0 0\n", |
339 | printf("P %d %d %d %d 1 0 0\n", |
320 | $pinx{$pin} + 300, $piny{$pin}, $x, $piny{$pin}); |
340 | $pinx{$pin} + $pinnumwidth, $piny{$pin}, $x, $piny{$pin}); |
321 | print "{\n"; |
341 | print "{\n"; |
322 | &pltext($pinx{$pin} - $px, $piny{$pin}, 7, $pinlabel{$pin}); |
342 | &pltext($pinx{$pin} - $px, $piny{$pin}, 7, $pinlabel{$pin}); |
323 | &ntext($pinx{$pin} +100, $piny{$pin} + 50, 0, $pin); |
343 | &ntext($pinx{$pin} +100, $piny{$pin} + 50, 0, $pin); |
324 | print "}\n"; |
344 | print "}\n"; |
325 | }
|
345 | }
|