#!/usr/bin/perl -w
#
# This script is (c) Petr Baudis <pasky@pasky.ji.cz>
#
# You may be charged anytime for using of it :P
#
# It takes output of last(1) and summarizes the times (no matter
# which user is logged in, so prop. pre-grep it)
#

=test1
msemler  pts/1        pc115-46.feld.cv Tue Apr  3 17:47 - 18:38  (00:51)
msemler  pts/0        pc115-46.feld.cv Tue Apr  3 17:40 - 18:38  (00:58)
msemler  pts/2        pc115-72.feld.cv Tue Apr  3 11:00 - 13:46  (02:45)
msemler  pts/1        pc115-72.feld.cv Tue Apr  3 11:00 - 12:13  (01:13)
msemler  pts/0        pc115-72.feld.cv Tue Apr  3 10:54 - 12:09  (01:14)
=cut

=test2
msemler  pts/0        pc115-70.feld.cv Fri Apr  6 17:58 - 19:44  (01:45)
msemler  pts/3        pc115-70.feld.cv Fri Apr  6 17:45 - down   (00:09)
msemler  pts/2        pc115-70.feld.cv Fri Apr  6 16:10 - down   (01:44)
msemler  pts/1        pc115-70.feld.cv Fri Apr  6 16:10 - down   (01:44)
msemler  pts/0        pc115-70.feld.cv Fri Apr  6 16:03 - down   (01:51)
msemler  pts/1        pc115-71.feld.cv Fri Apr  6 09:32 - 09:37  (00:04)
=cut

			       $i=$f=0;while($in=
				       <>
   ){chomp($in);@in=split(/\s+/,$in);splice(@in,0,3);@st=splice(@in,0,4);
open(Z,"date -d \"@st\" +\%s |");$stime=<Z>;chomp($stime);close Z;splice(@in,0,2);
  $duration=shift(@in);$duration=~s/\((.+)\)/$1/;@dur=split(/:/,$duration);
			$dtime=$dur[0]*3600+$dur[1]*60;
			     $etime=$stime+$dtime;
	 if(!$f){$f++;$s[$i]=$stime;$e[$i]=$etime;}elsif($stime>$e[$i]
	       or$etime<$s[$i]){$i++;$s[$i]=$stime;$e[$i]=$etime;
	   }else{if($stime<$s[$i]and$etime>$s[$i]){$s[$i]=$stime;}if(
		$etime>$e[$i]and$stime<$e[$i]){$e[$i]=$etime;}}
 }for($i=0;$i<@s;$i++){print localtime($s[$i])." -- ".localtime($e[$i])."\n";}
