#!/usr/bin/perl
#
# wingrep - look for a regular expression within a file
#
# ANSI escape sequences: BOLD    \e[1;39m
#                        NORMAL  \e[0;39m
#                        GREEN   \e[1;32m
#                        RED     \e[1;31m
#                        REVERSE \e[0;7m
#                        NORMAL  \e[0;27m
#
$usage = "Usage: wingrep [-c [-p pattern] [-f file]]\n".
         "           -p pattern   Specify regular expression to use\n".
         "           -f file      Specify file to open (\"-\" means STDIN)\n".
         "           -r           Print matches in reverse\n";

use Getopt::Std; 
use Win32::Console;
getopts('p:f:r') or die $usage;

# Process switches
$pattern = ($opt_p) ? $opt_p : 'Linux';
if ($opt_f) {
    open(FILE,"<$opt_f") or die "ERROR: $!"; # Open input file
} else {
    open(FILE,"<-") or die "ERROR: $!";      # Open STDIN for reading
}
$STDOUT = new Win32::Console(STD_OUTPUT_HANDLE);
$STDOUT->Title("Wingrep");
$normattr = $STDOUT->Attr();

$ct = 0;
$| = 1;
while (<FILE>) {
    if (/$pattern/) {
	$ct += s/($pattern)/\1/g;
        if ($opt_r) {
            $var = $_;
            while($var =~ /($pattern)/) {
                print $`;
                $STDOUT->Attr($FG_YELLOW | $BG_BLUE);
                print $1;
                $STDOUT->Attr($normattr);
                $var = $';
            }
            print $var;
        } else {
            print;
        }
    }
}
print "Pattern \"$pattern\" found $ct times.\n";
close(FILE);

