1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
#!@PERL@
use strict;
my (%old_modes, %old_printers, %new_modes, %new_printers);
my ($detail1) = 0;
while ($#ARGV >= 0 && $ARGV[0] eq '-d') {
$detail1++;
shift @ARGV;
}
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);
if (! $detail1) {
print "$tag:\n";
}
foreach my $m (@changes) {
my ($printer) = get_printer($m);
my ($mode) = get_mode($m);
if ($detail > 1) {
print "${printer}_${mode}\n";
} elsif ($detail) {
if ($printer ne $prev_printer) {
print " $printer:\n";
$prev_printer = $printer;
}
print " $mode\n";
} else {
print " $mode\n";
}
}
print "\n";
}
if (! $detail1) {
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 + $detail1, @changed_modes);
|