#!/usr/bin/perl
#
# 22/9-99 Lars Anderson
#
# Edited so it now supports both 2 digits and 4 digits years
# Changed command line options
# 30/5-2000 Nils Østbjerg 
#
# Syntax logconv.pl <channel> <logfile>


use Time::Local;

$channel = $ARGV[0];
$in_file = $ARGV[1];

%days = (0, 'Fri', 1 ,'Sat', 2, 'Sun', 3 ,'Mon', 4 ,'Tue' ,5 ,'Wed', 6, 'Thu',7);
%months =('Jan','01','Feb','02','Mar','03','Apr','04','May','05','Jun','06','Jul','07','Aug','08','Sep','09','Oct','10','Nov','11','Dec','12');
($q1,$q2,$q3) = split(/./, $in_file, 3); $q3 =~ (/(\d+)([a-zA-Z]+)(\d+)/);
($nday , $month, $year) = ($1 ,$2, $3);
if ($year < 1900) {
    if ($year > 89) { $year += 1900;} else {$year += 2000;}
}
$time = timelocal(0,0,0,$nday,$month,$year);
$wday = (localtime($time))[6];
$out_file = $channel . "_" . $year . $months{$month} . $nday . ".log";
$day = $days{$wday};

open(OUTFILE, ">$out_file") || die "Cannot open outfile\n";

print OUTFILE "Session Start: $day $month $nday 00:00:00 $year\n";
print OUTFILE "[00:00] *** Now Talking in $channel \n";

# Open data file
open(DATA, $in_file) || die "Cannot open data file\n";

while (<DATA>)
{
#    chop;
    # Action
    if (/(\[\d+:\d+\]) (Action:) (.*)/)
    {
	print OUTFILE "$1 * $3\n";
    }

    # Part
    if (/(\[\d+:\d+\]) ([a-zA-Z0-9-\[\]\`\^\}\{_]*) \((.*)\) left \#(.*)/)
    {
	print OUTFILE "$1 *** Parts $2 ($3) ($2)\n";
    }
    # Signoff
    elsif (/(\[\d+:\d+\]) ([a-zA-Z0-9-\[\]\`\^\}\{_]*) \((.*)\) left (.*): (.*)/)
    {
	print OUTFILE "$1 *** Parts $2 ($3) ($5)\n";
    }

    # mode
    if (/(\[\d+:\d+\]) (.*): mode change \'(.*)\' by (.*)!(.*)/)
    {
	print OUTFILE "$1 *** $4 sets mode: $3\n";
    }
    # kicks
    if (/(\[\d+:\d+\]) (.*)!(.*) kicked from (.*) by (.*)!(.*): (.*)/)
    {
	print OUTFILE "$1 *** $2 was kicked by $5 ($7)\n";
    }
    # join
    if (/(\[\d+:\d+\]) (.*) \((.*)\) joined (.*)/)
    {
	print OUTFILE "$1 *** Joins: $2 ($3)\n";
    }
    # topic
    if (/(\[\d+:\d+\]) Topic changed on (.*) by (.*)!(.*): (.*)/)
    {
	print OUTFILE "$1 *** $3 changes topic to '$5'\n";
    }
    # nickchange
    if (/(\[\d+:\d+\]) Nick change: (.*) -> (.*)/)
    {
	print OUTFILE "$1 *** $2 is now known as $3\n";
    }
    # split
    if (/(\[\d+:\d+\]) (.*) \((.*)\) got netsplit./)
    {
	print OUTFILE "$1 *** Quits: $2 ($3)\n";
    }
    # rejoined
    if (/(\[\d+:\d+\]) (.*) \((.*)\) returned to (.*)/)
    {
	print OUTFILE "$1 *** Joins: $2 ($3)\n";
    }
    # chat
    if (/(\[\d+:\d+\]) <(.*)> (.*)/)
    {
	print OUTFILE "$1 <$2> $3\n";
    }

}
print OUTFILE "Session Close: $day $month $nday 23:59:59 $year\n";
close DATA;
close OUTFILE;

