mirror of
git://projects.qi-hardware.com/eda-tools.git
synced 2024-11-22 09:27:11 +02:00
swapcmp/: swap (rename) components in a layout
This commit is contained in:
parent
eff2e8e3b9
commit
886de1554a
2
README
2
README
@ -21,5 +21,7 @@ This is a collection of utilities for Electronic Design Automation:
|
||||
- schhist: a system to walk a KiCad project's git revision history and
|
||||
generating Web-browseable graphical differences of the schematics.
|
||||
|
||||
- swpcmp: swap components in a layout
|
||||
|
||||
Each utility can have its own licensing terms. They're specified in the
|
||||
respective directory or in the file itself.
|
||||
|
65
swpcmp/swpcmp
Executable file
65
swpcmp/swpcmp
Executable file
@ -0,0 +1,65 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
sub usage
|
||||
{
|
||||
print STDERR "usage: $0 name=name ... [file ...]\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
&usage if $ARGV[0] =~ /^-/;
|
||||
&usage if !@ARGV;
|
||||
|
||||
while ($ARGV[0] =~ /=/) {
|
||||
die "already renaming component $`" if defined $map{$`};
|
||||
die "already renaming component $'" if defined $map{$'};
|
||||
$map{$`} = $';
|
||||
$map{$'} = $`;
|
||||
shift @ARGV;
|
||||
}
|
||||
|
||||
undef $mod;
|
||||
while (<>) {
|
||||
if (/^\$MODULE\s+(\S+)\s*$/) {
|
||||
die "\$MODULE within \$MODULE" if $mod;
|
||||
$mod = 1;
|
||||
$fp = $1;
|
||||
undef $name;
|
||||
}
|
||||
if (!$mod) {
|
||||
print;
|
||||
next;
|
||||
}
|
||||
if (/^(T0\s.*")([^"]+)("\s*)$/) {
|
||||
die "duplicate name \"$name\" vs. \"$2\"" if defined $name;
|
||||
$name = $2;
|
||||
if (defined $map{$name}) {
|
||||
print "$1$map{$name}$3";
|
||||
} else {
|
||||
print;
|
||||
}
|
||||
} else {
|
||||
print;
|
||||
}
|
||||
if (/^\$EndMODULE/) {
|
||||
die "module has no name" unless defined $name;
|
||||
if (defined $map{$name}) {
|
||||
if ($mod{$map{$name}}) {
|
||||
die "footprint mismatch: $name/$fp vs. ".
|
||||
$map{$name}."/".$fp{$map{$name}} unless
|
||||
$fp eq $fp{$map{$name}};
|
||||
delete $map{$map{$name}};
|
||||
delete $map{$name};
|
||||
} else {
|
||||
$mod{$name} = 1;
|
||||
$fp{$name} = $fp;
|
||||
}
|
||||
}
|
||||
$mod = 0;
|
||||
}
|
||||
}
|
||||
|
||||
die "EOF within module" if $mod;
|
||||
for (keys %map) {
|
||||
die "not swapped: ".join(", ", sort keys %map);
|
||||
}
|
Loading…
Reference in New Issue
Block a user