Root/swpcmp/swpcmp

1#!/usr/bin/perl
2
3sub usage
4{
5    print STDERR "usage: $0 name=name ... [file ...]\n";
6    exit(1);
7}
8
9
10&usage if $ARGV[0] =~ /^-/;
11&usage if !@ARGV;
12
13while ($ARGV[0] =~ /=/) {
14    die "already renaming component $`" if defined $map{$`};
15    die "already renaming component $'" if defined $map{$'};
16    $map{$`} = $';
17    $map{$'} = $`;
18    shift @ARGV;
19}
20
21undef $mod;
22while (<>) {
23    if (/^\$MODULE\s+(\S+)\s*$/) {
24        die "\$MODULE within \$MODULE" if $mod;
25        $mod = 1;
26        $fp = $1;
27        undef $name;
28    }
29    if (!$mod) {
30        print;
31        next;
32    }
33    if (/^(T0\s.*")([^"]+)("\s*)$/) {
34        die "duplicate name \"$name\" vs. \"$2\"" if defined $name;
35        $name = $2;
36        if (defined $map{$name}) {
37            print "$1$map{$name}$3";
38        } else {
39            print;
40        }
41    } else {
42        print;
43    }
44    if (/^\$EndMODULE/) {
45        die "module has no name" unless defined $name;
46        if (defined $map{$name}) {
47            if ($mod{$map{$name}}) {
48                die "footprint mismatch: $name/$fp vs. ".
49                    $map{$name}."/".$fp{$map{$name}} unless
50                    $fp eq $fp{$map{$name}};
51                delete $map{$map{$name}};
52                delete $map{$name};
53            } else {
54                $mod{$name} = 1;
55                $fp{$name} = $fp;
56            }
57        }
58        $mod = 0;
59    }
60}
61
62die "EOF within module" if $mod;
63for (keys %map) {
64    die "not swapped: ".join(", ", sort keys %map);
65}
66

Archive Download this file

Branches:
master



interactive