#!/usr/bin/perl
$last = time();
$|=1;
&cleanstate();
while(<>){
    if(($curt=time()) > ($last)){
	&outputstate();
	&cleanstate();
	$last++;
	while($last < $curt){
	    push(@xvs, $ox);
	    push(@yvs, $oy);
	    &outputstate();
	    &cleanstate();
	    $last++;
	}
    }

    ($type, @v) = split;
    $v = join(" ", @v);
    if($type eq "Loc"){
	push(@xvs, $v[0]);
	$ox = $v[0];
	push(@yvs, $v[1]);
	$oy = $v[1];
    }
    elsif($type eq "Key"){
	if(($v[0] == 110) || ($v[0] == 112) || ($v[0] == 113) ||
	   ($v[0] == 32)){
	    $mail++;
	}
	else{
	    $key++;
	}
    }
    elsif($type eq "SpecialKey"){
	if(($v[0] eq "Return")){
	    $mail++;
	}
	else{
	    $skey++;
	}
    }
    elsif($type eq "WindowSwitch"){
	$ws++;
    }
}

sub cleanstate{
    @xvs = @yvs = ();
    $key = $skey = $ws = 0;
}

sub outputstate {
    return unless $#xvs >= 0;
    ($avgx, $varx) = &stats(@xvs);
    ($avgy, $vary) = &stats(@yvs);
    print "$avgx $avgy $key $skey $ws\n";
}

 sub stats {
    @d = @_;
    $tot = $n = 0;
    foreach $v (@d){
	$tot += $v;
	$n++;
    }
    if($n==0){
	$avg = 0;
    }
    else{
	$avg = $tot/$n;
    }
    $tot = $n = 0;
    foreach $v (@d){
	$tot += ($v-$avg)**2;
	$n++;
    }
    if($n!=0){
	$var = sqrt($tot/$n);
    }
    else{
	$var = 0;
    }
    return ($avg, $var);
}
