use strict;
use warnings;
my $s = $ARGV[0];
shift @ARGV;
my $y1 = $ARGV[0];
shift @ARGV;
my $y2 = $ARGV[0];
shift @ARGV;
my $strip=1;
if (defined $ARGV[0] && $ARGV[0] ne ""){
$strip = $ARGV[0];
shift @ARGV;
}
my (%mods, %mod2mr, %mr2mod, %mr2stmp);
my (%thcy, %mod2y);
my $fnam="$s.$y1-$y2";
my %f2f;
open (A, "aa1");
while(){
chop();
my ($mr,$auth,$com,$aem,$cem,$lines,$at,$ct,$file,$cmt) =
split(/\;/, $_, -1);
if ($file =~ /([^\{]*)\{([^ ]*) \=\> ([^\}]*)\}(.*)/){
my $a = "$1$2$4";
my $b = "$1$3$4";
$f2f{$a} = $b;
}else{
if ($file =~ /([^\= ]*) \=\> (.*)/){
my $a = "$1";
my $b = "$2";
$f2f{$a} = $b;
}
}
}
open (A, "aa1");
while(){
chop();
my ($mr,$auth,$com,$aem,$cem,$lines,$at,$ct,$file,$cmt) =
split(/\;/, $_, -1);
next if ($file =~ / \=\> /);
$file = $f2f{$file} if defined $f2f{$file};
my $year = $at/3600/24/365.25+1970;
if ($year < $y1 || $year > $y2+1){ next;}
print "$mr\;$file\;$year\n";
my $y = int ($year);
my $mod = $file;
$mods{$mod}++;
$thcy{$mod} = 1;
$mod2y{$mod}{"$y"}++;
if (!defined $mod2mr{$mod}) {
$mod2mr{$mod} = $mr;
}else{
if ($mod2mr{$mod} =~ /\b$mr\b/){}else{
$mod2mr{$mod} .= "\;$mr";
}
}
if (!defined $mr2mod{$mr}) {
$mr2mod{$mr} = $mod;
}else{
if ($mr2mod{$mr} =~ /\b$mod\b/){
}else{
$mr2mod{$mr} .= "\;$mod";
}
}
$mr2stmp{$mr} = $at;
}
print STDERR "done reading delta\n";
my $i=0;
open (A, ">$fnam.cds");
foreach my $key (sort keys %mods){
$mods{$key} = $i;
my $thc = $thcy{$key}+0;
my $ny = scalar(keys %{ $mod2y{$key} });
if ($ny>0){
$thc = $thc/$ny;
}
#print A "$i $thc $key\n";
print A "$i 1 $key\n";
$i++;
}
open (A, ">$fnam.dsc");
print A "$i ". scalar(keys %mr2mod)."\n";
$i = 0;
open (A, ">$fnam.asc");
open (B, ">$fnam.ascnam");
foreach my $key (keys %mr2mod){
my @modules=split(/\;/, $mr2mod{$key});
print B "$i\;$key";
$i++;
print A scalar (@modules) ." $mr2stmp{$key}";
foreach my $m (@modules){
print A " $mods{$m}";
print B "\;$m";
}
print A "\n";
print B "\n";
}