#!/usr/bin/perl -w
#
#  $Id: grepldif,v 1.1 2002/06/11 14:37:29 dgregor Exp $
#
# Copyright (c) 2002 Daniel J. Gregor, Jr.
# All rights reserved.
# 
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 
#    - Redistributions of source code must retain the above copyright
#      notice, this list of conditions and the following disclaimer.
#    - Redistributions in binary form must reproduce the above
#      copyright notice, this list of conditions and the following
#      disclaimer in the documentation and/or other materials provided
#      with the distribution.
# 
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
# 

use Getopt::Std;

getopts('inv', \%opts);

if (@ARGV < 1) {
	die "usage: $0 <perl regexp> [<files>]\n";
}

$regexp = shift(@ARGV);

$count = 0;
$entry = "";
while (<>) {
	chomp();

	if (m/^$/ && $entry ne "") {
		$count++;
		check_match();
	} else {
		$entry .= $_;
		$entry .= "\n";
	}
}

if ($entry ne "") {
	check_match();
}

sub check_match {
	$match = 0;

	if ($opts{'i'}) {
		if ($entry =~ m/$regexp/i) {
			$match++;
		}
	} else {
		if ($entry =~ m/$regexp/) {
			$match++;
		}
	}

	if ($match) {
		if (!$opts{'v'}) {
			print $opts{'n'} ? $count . ":" : "", $entry, "\n";
		}
	} else {
		if ($opts{'v'}) {
			print $opts{'n'} ? $count . ":" : "", $entry, "\n";
		}
	}

	$entry = "";
}
