You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.9 KiB
102 lines
2.9 KiB
#!/usr/bin/perl
|
|
#
|
|
# Copyright (c) 2006 David Thompson
|
|
# da.thompson@yahoo.com
|
|
# Fri Nov 17 20:41:23 PST 2006
|
|
# License: GPL
|
|
|
|
# Purpose of this script is to process config files and
|
|
# produce a comparision chart of values. The input files
|
|
# are simple series of parameter definitions, of the form
|
|
# 'name=value' pairs, whitespace and comments are correctly
|
|
# ignored. Invoke on multiple config files to compare
|
|
# parameter values for all files, try this,
|
|
# cd /usr/local/share/uncrustify
|
|
# cmpcfg.pl *.cfg
|
|
|
|
# first build hashes from all input files
|
|
# 1. %name is a master hash of all parameter names found
|
|
# across all files, we use a hash to remember the keys,
|
|
# we don't compare about the values stored for each key
|
|
# 2. %table is a per file 2 dimensional hash array indexed
|
|
# by the current filename and parameter; ie, this hash
|
|
# stores the 'name=value' pairs on per file basis
|
|
foreach my $file (@ARGV) {
|
|
open FH, "<$file"
|
|
or die "Can't open file: $file";
|
|
while (<FH>) {
|
|
chomp;
|
|
next if (/^[ \t]*$/); # ignore blank lines
|
|
next if (/^[ \t]*#/); # ignore comment lines
|
|
s/#.*$//; # strip trailing comments
|
|
s/^[ \t]*//; # strip leading whitespace
|
|
s/[ \t]*$//; # strip trailing whitespace
|
|
s/[ \t]*=[ \t]*/=/; # remove whitespace around '='
|
|
$_ = lc; # lowercase everything
|
|
($name, $value) = split /=/; # extract name and value
|
|
$names{$name} = $name; # master hash of all names
|
|
$table{$file}{$name} = $value; # per file hash of names
|
|
}
|
|
close FH;
|
|
}
|
|
|
|
# find longest parameter name
|
|
# we'll use this later for report printing
|
|
foreach $name (sort keys %names) {
|
|
if (length($name) > $maxlen) {
|
|
$maxlen = length($name);
|
|
}
|
|
}
|
|
$maxlen += 4; # add extra padding
|
|
|
|
# return string centered in specified width
|
|
sub center {
|
|
($wid, $str) = @_;
|
|
$flg = 0;
|
|
while (length($str) < $wid) {
|
|
if ($flg) {
|
|
$flg = 0;
|
|
$str = " " . $str;
|
|
} else {
|
|
$flg = 1;
|
|
$str = $str . " ";
|
|
}
|
|
}
|
|
return $str;
|
|
}
|
|
|
|
# print legend for filenames
|
|
$cnt = 0;
|
|
foreach $file (@ARGV) {
|
|
$cnt++;
|
|
print " <$cnt> $file\n";
|
|
}
|
|
|
|
# blank line separates legend & header
|
|
print "\n";
|
|
|
|
# print header line
|
|
print " " x $maxlen . " ";
|
|
$cnt = 0;
|
|
foreach (@ARGV) {
|
|
$cnt++;
|
|
$fmt = "<$cnt>";
|
|
print " ".¢er(6, $fmt);
|
|
}
|
|
print "\n";
|
|
|
|
# print body of report, one line per parameter name
|
|
foreach $name (sort keys %names) {
|
|
printf "%-*s ", $maxlen, $name;
|
|
foreach $file (@ARGV) {
|
|
if (defined($table{$file}{$name})) {
|
|
print " ".¢er(6, $table{$file}{$name});
|
|
} else {
|
|
# parameter not defined for this file
|
|
print " ".¢er(6, "*");
|
|
}
|
|
}
|
|
print "\n";
|
|
}
|
|
|