1 |
#!/bin/env perl
|
2 |
#
|
3 |
# Replaces for fast simulation
|
4 |
#
|
5 |
# Usage: $0 <file> <replaces file>
|
6 |
# Replaces in <file> from <replaces file>
|
7 |
|
8 |
use strict;
|
9 |
|
10 |
die "Usage: $0 <file> <replaces>\n" if ( @ARGV != 2 );
|
11 |
|
12 |
my $cfgFile = $ARGV[0];
|
13 |
my $replaceFile = $ARGV[1];
|
14 |
|
15 |
my %replaces;
|
16 |
|
17 |
# Get list of replaces
|
18 |
open(IN,$replaceFile) or die "Couldn't open $replaceFile: $!";
|
19 |
while( <IN> ) {
|
20 |
if ( /replace\s+(\S+)(\s*=.*)[#|\/\/]?/ ) {
|
21 |
my $key = $1;
|
22 |
my $value = $2;
|
23 |
# Check for multi-line value
|
24 |
while ( &countBraces($value) > 0 ) {
|
25 |
my $line = <IN>;
|
26 |
$value .= $line;
|
27 |
}
|
28 |
$replaces{$key} = $value;
|
29 |
}
|
30 |
}
|
31 |
close(IN);
|
32 |
|
33 |
# Open temporary file
|
34 |
my $temp = $cfgFile.".tmp";
|
35 |
open(TEMP,">$temp") or die "Couldn't open $temp: $!";
|
36 |
|
37 |
# Scan cfgfile and replace
|
38 |
open(CFG,$cfgFile) or die "Couldn't open $cfgFile: $!";
|
39 |
while ( <CFG> ) {
|
40 |
chomp();
|
41 |
my $line = $_;
|
42 |
my $matched = 0;
|
43 |
foreach my $replace ( keys %replaces ) {
|
44 |
next if ( !$replaces{$replace} );
|
45 |
if ( $line =~ /$replace/ ) {
|
46 |
print TEMP "replace ".$replace.$replaces{$replace}."\n";
|
47 |
$replaces{$replace} = 0;
|
48 |
++$matched;
|
49 |
last;
|
50 |
}
|
51 |
}
|
52 |
if ( !$matched ) {
|
53 |
print TEMP $line."\n";
|
54 |
}
|
55 |
}
|
56 |
close(CFG);
|
57 |
|
58 |
|
59 |
# Add missing items at the end of file (things that are only replaced in FastSim)
|
60 |
# Print header
|
61 |
print TEMP <<HEADER
|
62 |
############################
|
63 |
# Fast simulation replaces #
|
64 |
############################
|
65 |
HEADER
|
66 |
;
|
67 |
foreach my $replace ( keys %replaces ) {
|
68 |
next if ( !$replaces{$replace} );
|
69 |
print TEMP "replace ".$replace.$replaces{$replace}."\n";
|
70 |
}
|
71 |
close(TEMP) or die "Couldn't close $temp: $!";
|
72 |
rename($temp,$cfgFile);
|
73 |
|
74 |
|
75 |
#______________________________________________________________________
|
76 |
# Count number of braces
|
77 |
# Opening adds one, closing removes one
|
78 |
sub countBraces {
|
79 |
|
80 |
my $string = shift;
|
81 |
my $nBraces = 0;
|
82 |
my $char = "";
|
83 |
|
84 |
while ( length($string)>0 ) {
|
85 |
$char = chop($string);
|
86 |
++$nBraces if ( $char =~ /\{/ );
|
87 |
--$nBraces if ( $char =~ /\}/ );
|
88 |
}
|
89 |
|
90 |
return $nBraces;
|
91 |
|
92 |
}
|