+
+ # Check to see that this entry is unique; generate a checksum
+ # and compare to any previous checksums
+ my $checksum = calc_sha1("$workdir/cddbread.$releasenum");
+ foreach my $sum (@sums) {
+ if ($checksum eq $sum) {
+ unlink("$workdir/cddbread.$releasenum");
+ $releasenum--;
+ last;
+ }
+ }
+ push (@sums, $checksum);
+ }
+} elsif ($command =~ m/calcid/) {
+# Calculate MusicBrainz ID from disc offsets; see
+# http://musicbrainz.org/doc/DiscIDCalculation
+
+ my ($first, $last, $leadin, $leadout, @offsets) = @discinfo;
+
+ my $s = Digest::SHA->new(1);
+ $s->add(sprintf "%02X", int($first));
+ $s->add(sprintf "%02X", int($last));
+
+ my @a;
+ for (my $i = 0; $i < 100; $i++) {
+ $a[$i] = 0;
+ }
+ my $i = 0;
+ foreach my $o ($leadout, @offsets) {
+ $a[$i++] = int($o) + int($leadin);
+ }
+ for (my $i = 0; $i < 100; $i++) {
+ $s->add(sprintf "%08X", $a[$i]);