12 if (!length) { $_= <DATA>; last unless length; $_.=' '; s/^\s+//; }
15 } elsif (s/^\-\s+//) {
17 } elsif (s/^[ABCDE]\s+//) {
18 $port= ord($&) - ord('A');
19 } elsif (s/^([0-7])\s+//) {
20 die unless defined $port;
21 $pins[$cpin++]= sprintf "%d,%d,0x%02x",
29 print "our (\%pin_info,\%kind_count);\n"
32 $kinds= 'pt|sense|reverse';
37 $oraw.= "\$pin_info_raw{'$board'}{'$name'}= '$pins[$pin]';\n";
41 die "$pin $kind $num ?" unless defined $pins[$pin];
42 print "\$pin_info{'$board'}{'$kind'}[$num]= '$pins[$pin]';\n"
46 open B, "../pcb/$board.net" or die $!;
48 if (s/\\$//) { $_.= <B>; }
49 m/^(\w+)\s+[A-Z]\w+\s+([-_A-Z0-9 \t]+)$/;
50 $net= $1; $pins= $2; $pin= undef;
51 map { $pin=$1 if m/PIC-(\d+)/; } split /\s+/, $pins;
52 next unless defined $pin;
53 if ($net =~ m/^(?:.*__)?($kinds)(\d+)(?:__.*)?$/) {
56 $count{$kind}= $num+1 if $num>=$count{$kind};
60 if (m/^(INDIV\d?)\-(\d+)$/) {
61 push @indivnames, lc($1).'_'.$2;
65 push @indivnames, split /__/, $net;
66 $n= $count{'indiv'}++;
69 $oindiv.= "\$pin_info_indiv{'$board'}{'$_'}= $n;\n";
75 for $kind (qw(indiv), split /\|/, $kinds) {
76 printf("\$kind_count{'%s'}{'%s'}= %d;\n",
77 $board, $kind, $count{$kind})
80 print $oindiv or die $!;