--- /dev/null
+#!/usr/bin/perl -w
+use warnings;
+no warnings "portable";
+use FileHandle;
+use Getopt::Long;
+use Data::Dumper;
+use HADES::TrbNet;
+use Pod::Usage;
+use File::Slurp;
+use List::Util qw(min max);
+use lib '.';
+use MDC;
+
+my $baselines;
+
+my @scanlines;
+my $newbaselines;
+
+###############################################################################
+#Read baseline file and store values
+###############################################################################
+open FILE, "../pasttrec/pasttrec_baseline.db" or die $!."\npasttrec_baseline.db not found.";
+while (my $a = <FILE>) {
+ if(my @values = $a =~ /^\s*(\d+)\s+(\d)\s+(\w\w)\s+(\w\w)\s+(\w\w)\s+(\w\w)\s+(\w\w)\s+(\w\w)\s+(\w\w)\s+(\w\w)\s*$/) {
+ my $s = shift @values;
+ my $pt = shift @values;
+ $baselines->{$s}{$pt}=\@values;
+ }
+ }
+close FILE;
+
+
+###############################################################################
+#Read file with list of installed boards & MBO size
+###############################################################################
+my $addresses;
+open FILE, "../installation/mbo_positions.db" or die $!."\nmbo_positions.db not found.";
+while (my $a = <FILE>) {
+ if(my @values = $a =~ /^\s*(\d)\s+(\d)\s+(\d+)\s+(\d)\s+(\d+)\s*/) {
+ my $p = shift @values;
+ my $s = shift @values;
+ my $b = shift @values;
+ my $long = shift @values;
+ my $id = shift @values;
+
+ $addresses->{$id."0"} = MDC::get_address($p,$s,$b,0);
+ $addresses->{$id."1"} = MDC::get_address($p,$s,$b,1);
+ $addresses->{$id."2"} = MDC::get_address($p,$s,$b,2) if $long;
+ }
+ }
+close FILE;
+
+
+###############################################################################
+#Get new values
+###############################################################################
+while (my $a = <>) {
+# print $a;
+ if(my @values = $a =~ /^\s*(\d+)\s+(\d)\s+(\w\w)\s+(\w\w)\s+(\w\w)\s+(\w\w)\s+(\w\w)\s+(\w\w)\s+(\w\w)\s+(\w\w)\s*$/) {
+ push(@scanlines,$a);
+ my $s = shift @values;
+ my $pt = shift @values;
+ $s = "0".$s if($s<1000);
+ $newbaselines->{$s}{$pt}=\@values;
+ }
+ }
+
+
+
+###############################################################################
+#Extract same lines from baseline file
+###############################################################################
+my $newvalues ="";
+my $oldvalues ="";
+my @counters;
+foreach my $l (@scanlines) {
+ my @values = $l =~ /^\s*(\d+)\s+(\d)\s+(\w\w)\s+(\w\w)\s+(\w\w)\s+(\w\w)\s+(\w\w)\s+(\w\w)\s+(\w\w)\s+(\w\w)\s*$/;
+ $values[0] = "0".$values[0] if($values[0]<1000);
+
+ $oldvalues .= " $values[0]\t$values[1]\t".join("\t",@{$baselines->{$values[0]}{$values[1]}});
+ $oldvalues .= sprintf("\t%04x\n",$addresses->{$values[0]});
+
+ $newvalues .= " $values[0]\t$values[1]";
+ for(my $i=0; $i<8; $i++) {
+ my $ov = $baselines->{$values[0]}{$values[1]}[$i];
+ my $nv = $values[$i+2];
+ if($nv==$ov-1) {
+ $counters[2]++;
+ $newvalues .= "\t$ov";
+ }
+ elsif($nv==$ov+1) {
+ $counters[1]++;
+ $newvalues .= "\t$ov";
+ }
+ elsif($nv==$ov) {
+ $counters[0]++;
+ $newvalues .= "\t$ov";
+ }
+ elsif($nv==77) {
+ $counters[4]++;
+ $newvalues .= "\t$nv";
+ }
+ else {
+ $counters[3]++;
+ $newvalues .= "\t$nv";
+ }
+ }
+
+ $newvalues .= sprintf("\t%04x\n",$addresses->{$values[0]});
+ }
+
+print("$counters[0]\t identical\n");
+print("$counters[1]\t 1 lower\n");
+print("$counters[2]\t 1 higher\n");
+print("$counters[3]\t different\n");
+print("$counters[4]\t no threshold found\n");
+
+
+write_file("/tmp/mdc_newbaselines.csv",$newvalues);
+write_file("/tmp/mdc_oldbaselines.csv",$oldvalues);
+system("sort /tmp/mdc_oldbaselines.csv -k 11 -o /tmp/mdc_oldbaselines.csv");
+system("sort /tmp/mdc_newbaselines.csv -k 11 -o /tmp/mdc_newbaselines.csv");
+system("meld /tmp/mdc_oldbaselines.csv /tmp/mdc_newbaselines.csv");