From: Ian Jackson Date: Sat, 4 Dec 2010 18:29:24 +0000 (+0000) Subject: pcb/points-pin-alloc: use actual INDIV0 etc. pin info and net info X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=d4319b079e41136023f056b4978bc6fa70d2f4c6;p=trains.git pcb/points-pin-alloc: use actual INDIV0 etc. pin info and net info --- diff --git a/pcb/points-pin-alloc-gen b/pcb/points-pin-alloc-gen index ac574be..d1ecc34 100755 --- a/pcb/points-pin-alloc-gen +++ b/pcb/points-pin-alloc-gen @@ -5,24 +5,25 @@ use strict qw(refs vars); use POSIX; use IO::Handle; -our @boards; -foreach (@ARGV) { - m/^(\w+)\:(\d+)$/ or die "$_ ?"; - foreach (my $i=0; $i<$2; $i++) { push @boards, $1; } -} - -our @pins; our @pin2otherdesc; while () { m/^(\d+)\t(\S.*\S)\s+/ or die; - push @pins, $1; $pin2otherdesc[$1]= $2; } +our @boards; +foreach (@ARGV) { + m/^(\w+)\:(\d+)$/ or die "$_ ?"; + foreach (my $i=0; $i<$2; $i++) { push @boards, $1; } +} + our %boardpin2point; +our %boardpin2indiv; +our @pinboard2other; foreach my $board (0..$#boards) { my $bkind= $boards[$board]; next if exists $boardpin2point{$bkind}; + open NI, "$bkind.net-info" or die "$bkind $!"; while () { next if m/^\#/; @@ -32,14 +33,24 @@ foreach my $board (0..$#boards) { my ($netname, $type, $pins) = m/^(\w+)\s+(\w+)\s+(\S.*)?$/ or die "$_ ?"; next unless defined $pins; + $pins= " $pins "; $pins =~ m/\sPIC-(\d+)\s/ or next; my $pin= $1; + + my $indivpin; + $indivpin=$1 if $pins =~ m/\sINDIV0-(\d+)\s/; + $netname= "__${netname}__"; - $netname =~ m/__pt(\d+)__/ or next; + $netname =~ s/__pt(\d+)__/__/ or next; my $point= $1; - die "$netname $pin" unless defined $pin2otherdesc[$pin]; + + $netname =~ s/^__//; + $netname =~ s/__$//; + $netname =~ s,__,/,g; $boardpin2point{$bkind}[$pin]= $point; + $boardpin2indiv{$bkind}[$pin]= $indivpin; + $pinboard2other[$pin]{$bkind}= $netname; } NI->error and die "$bkind $!"; close NI; @@ -98,16 +109,41 @@ foreach my $board (0..$#boards) { cell('', '@B pin'); endrow(); -foreach my $pin (@pins) { +our @outrows; +foreach my $pin (0..$#pinboard2other) { + my $netnames= $pinboard2other[$pin]; + next unless $netnames; + my %netnames; + $netnames{$_}=1 foreach grep { /\S/ && !m/^icsp_/ } values %$netnames; + $netnames= join '/', sort keys %netnames; + push @outrows, { Pin => $pin, Others => $netnames, + Priority => + ($netnames !~ /\S/ ? -10 : + -($netnames =~ m/spare/g)) + }; +} + +foreach my $outrow (sort { $a->{Priority} <=> $b->{Priority} + || $a->{Others} cmp $b->{Others} + || $a->{Pin} <=> $b->{Pin} + } @outrows) { + my $pin= $outrow->{Pin}; + my $netnames= $outrow->{Others}; startrow(); cell('indent { right }', $pin); - cell('', "\"$pin2otherdesc[$pin]\""); + my $desc= $pin2otherdesc[$pin]; + my $cell= "{Courier Base} \@Font \"$netnames\""; + $cell .= "//1fx \"$desc\"" if $netnames =~ /\S/ && defined $desc; + cell('margin { 0.1f }', "10p \@Font {$cell}"); foreach my $board (0..$#boards) { - my $point= $boardpin2point{$boards[$board]}[$pin]; + my $bkind= $boards[$board]; + my $point= $boardpin2point{$bkind}[$pin]; + my $indivpin= $boardpin2indiv{$bkind}[$pin]; + my $rhs= defined($indivpin) ? "I.$indivpin" : '"*"'; if (!defined $point) { cell('paint { lightgrey }', ''); } else { - cell('marginhorizontal { 0.1f }', "10p \@Font PT$point"); + cell('margin { 0.1f }', "10p \@Font { PT$point //1vx $rhs }"); } } cell('indent { right }', $pin); @@ -120,7 +156,7 @@ chomp($revid) or die $?; $revid =~ s/[\"\\]/\\$&/g; print <