3 use strict qw(refs vars);
10 m/^(\d+)\t(\S.*\S)\s+/ or die;
11 $pin2otherdesc[$1]= $2;
16 m/^(\w+)\:(\d+)$/ or die "$_ ?";
17 foreach (my $i=0; $i<$2; $i++) { push @boards, $1; }
23 foreach my $board (0..$#boards) {
24 my $bkind= $boards[$board];
25 next if exists $boardpin2point{$bkind};
27 open NI, "$bkind.net-info" or die "$bkind $!";
30 while (s/\\\n$//) { $_ .= <NI>; }
33 my ($netname, $type, $pins) = m/^(\w+)\s+(\w+)\s+(\S.*)?$/
35 next unless defined $pins;
38 $pins =~ m/\sPIC-(\d+)\s/ or next;
42 $indivpin=$1 if $pins =~ m/\sINDIV0-(\d+)\s/;
44 $netname= "__${netname}__";
45 $netname =~ s/__pt(\d+)__/__/ or next;
51 $boardpin2point{$bkind}[$pin]= $point;
52 $boardpin2indiv{$bkind}[$pin]= $indivpin;
53 $pinboard2other[$pin]{$bkind}= $netname;
55 NI->error and die "$bkind $!";
61 \@Include { points-pin-alloc.setup }
78 my $format= join ' | ', @formats;
79 my $formatname= $formats{$format};
80 if (!defined $formatname) {
81 $formatname= $nextformat++;
82 $formats{$format}= $formatname;
83 print " ${formatname}format { $format }\n";
85 $body .= "\@Row${formatname}\n ".join("\n ", @cells)."\n";
90 my ($fmt, $data) = @_;
91 my $ix= $cellix++; #"C".scalar @cells;
92 push @formats, '@Cell rule { yes } '.$fmt." $ix";
93 push @cells, "$ix { $data }";
98 cell('indent { right }', '@B "board"');
99 foreach my $board (0..$#boards) { cell('',''); }
105 cell('', '@B { alternative uses }');
106 foreach my $board (0..$#boards) {
107 cell('', "$boards[$board]");
113 foreach my $pin (0..$#pinboard2other) {
114 my $netnames= $pinboard2other[$pin];
115 next unless $netnames;
117 $netnames{$_}=1 foreach grep { /\S/ && !m/^icsp_/ } values %$netnames;
118 $netnames= join '/', sort keys %netnames;
119 push @outrows, { Pin => $pin, Others => $netnames,
121 ($netnames !~ /\S/ ? -10 :
122 -($netnames =~ m/spare/g))
126 foreach my $outrow (sort { $a->{Priority} <=> $b->{Priority}
127 || $a->{Others} cmp $b->{Others}
128 || $a->{Pin} <=> $b->{Pin}
130 my $pin= $outrow->{Pin};
131 my $netnames= $outrow->{Others};
133 cell('indent { right }', $pin);
134 my $desc= $pin2otherdesc[$pin];
135 my $cell= "{Courier Base} \@Font \"$netnames\"";
136 $cell .= "//1fx \"$desc\"" if $netnames =~ /\S/ && defined $desc;
137 cell('margin { 0.1f }', "10p \@Font {$cell}");
138 foreach my $board (0..$#boards) {
139 my $bkind= $boards[$board];
140 my $point= $boardpin2point{$bkind}[$pin];
141 my $indivpin= $boardpin2indiv{$bkind}[$pin];
142 my $rhs= defined($indivpin) ? "I.$indivpin" : '"*"';
143 if (!defined $point) {
144 cell('paint { lightgrey }', '');
146 cell('margin { 0.1f }', "10p \@Font { PT$point //1vx $rhs }");
149 cell('indent { right }', $pin);
152 print "{\n",$body,"}\n";
154 my $revid= `../.git-revid`;
155 chomp($revid) or die $?;
156 $revid =~ s/[\"\\]/\\$&/g;
164 STDOUT->error and die $!;
167 40 (useable for point only)
168 39 (useable for point only)
171 38 (Interrupt on change)
172 37 (Interrupt on change)
173 35 External Interrupt 2
174 34 External Interrupt 1
175 33 External Interrupt 0
176 30 ECCP1 PWM output D
177 29 ECCP1 PWM output C
178 28 ECCP1 PWM output B
179 27 ECCP1 PWM output A
182 22 Comparator 2 input
183 2 Analogue in 0 / Comparator ref out
185 15 Timer 1 osc out / Timer 1,3 ext clock in