1
0
mirror of git://projects.qi-hardware.com/wernermisc.git synced 2024-12-18 20:45:00 +02:00
wernermisc/m1r4/dsv/bomshelf
Werner Almesberger dd3c0c205b m1r4/dsv/bomshelf: support adding components to the BOM
Also removed a comment that is now in Makefile.
2012-03-06 17:47:50 -03:00

107 lines
1.8 KiB
Perl
Executable File

#!/usr/bin/perl
sub csv
{
my $s = $_[0];
my @a = ();
while (1) {
if ($s =~ /^"/) {
die unless $s =~ /^"([^"]*)"(,\s*)?/;
push(@a, $1);
$s = $';
return @a unless length $2;
} elsif ($s =~ /,\s*/) {
push(@a, $`);
$s = $';
} else {
push(@a, $s);
return @a;
}
}
}
while (<>) {
chop;
@f = &csv($_);
next unless $f[0] =~ /^[0-9]+$/;
die "duplicate part $f[3]" if defined $cr{$f[3]};
$f[1] =~ s/\(DNP\)//g;
$cr{$f[3]} = $f[1];
$url{$f[3]} = $f[4];
$dsc{$f[3]} = $f[6];
for (&csv($f[1])) {
warn "\"$_\" used for $r{$_} and $f[3]" if defined $r{$_};
$r{$_} = $f[3];
}
}
open(F, "SUPPLEMENT") || die "open SUPPLEMENT: $!";
while (<F>) {
chop;
next if /^\s*#/;
next if /^\s*$/;
if (/^[Cc]:\s*/) {
undef $p if $clear;
$clear = 0;
if (defined $p) {
$cr{$p} = $';
for $c (&csv($')) {
warn "\"$c\" (supplement) used for $r{$c} ".
"and $p" if defined $r{$c};
$r{$c} = $p;
}
next;
}
die "unknown component reference $'" unless defined $r{$'};
$p = $r{$'};
next;
}
if (/^[Pp]:\s*/) {
$p = $';
$clear = 0;
next if defined $cr{$p};
@a = grep { $_ =~ /^$p/ } keys %cr;
die "key $p* is ambiguous" if scalar @a > 1;
if (!@a) {
@a = grep { $_ =~ /$p/ } keys %cr;
die "key *$p* is ambiguous" if scalar @a > 1;
if (!@a) {
warn "adding $p as supplement";
next;
}
}
$p = $a[0];
next;
}
if (/^[Aa]:\s*/) {
$a{$p} .= "," if defined $a{$p};
$a{$p} .= $';
$clear = 1;
next;
}
if (/^[Dd]:\s*/) {
$url{$p} = $';
$clear = 1;
next;
}
die "don't recognize \"$_\"";
}
for (sort keys %cr) {
next if $url{$_} eq "";
print "# $dsc{$_}\n" unless $dsc{$_} eq "";
print "N: $_\n";
for $a (&csv($cr{$_})) {
print "A: $a\n";
}
if (defined $a{$_}) {
for $a (&csv($a{$_})) {
print "A: $a\n";
}
}
print "D: $url{$_}\n\n";
}