diff options
author | Didier Raboud <odyx@debian.org> | 2015-10-19 10:40:17 +0200 |
---|---|---|
committer | Didier Raboud <odyx@debian.org> | 2015-10-19 10:40:17 +0200 |
commit | 82a5e2a21f1cc4ea142514a1a045a63158f10256 (patch) | |
tree | 43bb3f0d058d6f632c273f1073708f2017b6d1bb /src/testpattern/compare-checksums.in | |
parent | 92976f71a4aa7f84cd8aadf013d2b03873dead7c (diff) |
Imported Upstream version 5.2.11~pre2
Diffstat (limited to 'src/testpattern/compare-checksums.in')
-rwxr-xr-x | src/testpattern/compare-checksums.in | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/src/testpattern/compare-checksums.in b/src/testpattern/compare-checksums.in new file mode 100755 index 0000000..0846424 --- /dev/null +++ b/src/testpattern/compare-checksums.in @@ -0,0 +1,109 @@ +#!@PERL@ + +use strict; + +my (%old_modes, %old_printers, %new_modes, %new_printers); + +if ($#ARGV != 1) { + die "Usage: $0 old_checksum_file new_checksum_file\n"; +} + +open(OLD, $ARGV[0]) or die("Can't open old checksum file $ARGV[0]: $!\n"); +open(NEW, $ARGV[1]) or die("Can't open new checksum file $ARGV[1]: $!\n"); + +sub get_printer($) { + my ($mode) = @_; + $mode =~ s/_PrintingMode.*//; + return $mode; +} + +sub get_mode($) { + my ($mode) = @_; + $mode =~ s/.*_PrintingMode/PrintingMode/; + return $mode; +} + +while (<OLD>) { + chomp; + my ($sum, $mode) = split(/ +[*]?/); + $mode =~ s/\.prn$//; + $old_modes{$mode} = $sum; + my ($printer) = get_printer($mode); + $old_printers{$printer} = 1; +} + +close OLD; + +while (<NEW>) { + chomp; + my ($sum, $mode) = split(/ +[*]?/); + $mode =~ s/\.prn$//; + $new_modes{$mode} = $sum; + my ($printer) = get_printer($mode); + $new_printers{$printer} = 1; +} + +my (%only_old_printers, %only_new_printers); + +foreach my $new_printer (keys %new_printers) { + if (! defined $old_printers{$new_printer}) { + $only_new_printers{$new_printer} = 1; + } +} + +foreach my $old_printer (keys %old_printers) { + if (! defined $new_printers{$old_printer}) { + $only_old_printers{$old_printer} = 1; + } +} + +my (@only_old_modes, @only_new_modes, @changed_modes); + +foreach my $old_mode (sort keys %old_modes) { + next if defined $only_old_printers{get_printer($old_mode)}; + if (defined $new_modes{$old_mode}) { + if ($new_modes{$old_mode} ne $old_modes{$old_mode}) { + push @changed_modes, $old_mode; + } + } else { + push @only_old_modes, $old_mode; + } +} + +foreach my $new_mode (sort keys %new_modes) { + next if defined $only_new_printers{get_printer($new_mode)}; + if (!defined $old_modes{$new_mode}) { + push @only_new_modes, $new_mode; + } +} + +my (@only_old_printers) = sort keys %only_old_printers; +my (@only_new_printers) = sort keys %only_new_printers; + +sub print_changes($$@) { + my ($tag, $detail, @changes) = @_; + my ($prev_printer); + return if ($#changes < 0); + print "$tag:\n"; + foreach my $m (@changes) { + my ($printer) = get_printer($m); + my ($mode) = get_mode($m); + if ($detail) { + if ($printer ne $prev_printer) { + print " $printer:\n"; + $prev_printer = $printer; + } + print " $mode\n"; + } else { + print " $mode\n"; + } + } + print "\n"; +} + +print "*** Changes from $ARGV[0] to $ARGV[1] ***\n\n"; +print_changes("Printers removed from $ARGV[1]", 0, @only_old_printers); +print_changes("Printers added to $ARGV[1]", 0, @only_new_printers); +print_changes("Modes removed from $ARGV[1]", 1, @only_old_modes); +print_changes("Modes added to $ARGV[1]", 1, @only_new_modes); +print_changes("Changed printing modes", 1, @changed_modes); |