#!/usr/bin/perl


my ($begcolor,$bold,$resetcolor) = ("\033[","1;","\033[0m");
my ($red,$blue,$green,$yellow,$white,$black) = ("31m","34m","32m","33m","37m","30m");

my %colors = (
	'red'   => "31m" , 
	'blue'  => "34m" ,
	'green' => "32m" ,
	'yellow'=> "33m" ,
	'white' => "37m" ,
	'black' => "30m" 
);

my %rules;

sub parse_conf {
	my $lines,$fg,$bg;
	open(CONF,"/etc/colorlog/colorlog.conf") ||
	open(CONF,"/usr/local/etc/colorlog/colorlog.conf") ||
	open(CONF,"./colorlog.conf") || die "Unable to read conf";
	while(chomp($line = <CONF>)){
		next unless ($line =~ /^(\S+)\s+(.*)$/);
		my ($string,$rule) = ($1,$2);
		if($string =~ /:/){ ($fg,$bg) = split(/:/,$string); }
		else { ($fg,$bg) = ($string,'black'); }
		die "Unknow colors $fg $colors{$fg}" if(($colors{$fg} eq '' && $fg ne 'null') || ($colors{$bg} eq '' && $bg ne 'null'));
		$rules{$rule} = "$colors{$fg}:$colors{$bg}";
	}
}

sub print_colors {
	my ($fg,$bg,$text) = (@_);
	return if($bg eq '' || $fg eq '');
	$bg =~ /(\d+)m/;
	$bg = ($1+10)."m";
	print "$begcolor$fg$begcolor$bg$text$endcolor";
}

##################################### MAIN #######################################
my $line;
&parse_conf;
open(CONS,"/dev/xconsole");
while($line = <CONS>){
	my ($fg,$bg);
	my $printed=0;
	foreach my $regexp(keys(%rules)){ 
		if($line =~ /$regexp/){
			($fg,$bg) = split(/:/,$rules{$regexp});
			&print_colors($fg,$bg,$line);
			$printed = 1;
			last;
		}
	}
	if($printed != 1) {
		&print_colors($colors{'white'},$colors{'black'},"$line");
	}
}
