#!/app/stdio/shell --

# zgrep -- a wrapper around a grep program that decompresses files as needed
# Adapted from a version sent by Charles Levert <charles@comm.polymtl.ca>


case -- ${!isset EGREP} {0} { set EGREP egrep }
case -- ${!isset FGREP} {0} { set FGREP fgrep }
case -- ${!isset GREP} {0} { set GREP grep }

#echo ${shell.argv0}
case -- ${shell.argv0} ~
    {*egrep} { set grep $EGREP } ~
    {*fgrep} { set grep $FGREP } ~
    {*} { set grep $GREP }
#echo grep ${grep!q}

set pat 
set opt
set files
set list 0
set silent 0
set n 0
set max ${shell.argv!c}
#echo max $max
while -- {case -- ${!expr $n {<} $max} {0} {false}} {
    set -- arg ${shell.argv!e $n}
    #echo -- arg ${arg!q}
    case -- ${arg} {-[ef]} {
	#echo -- {-ef}
	set -- opt $opt $arg
	set -- n ${!expr $n + 1}
	set -- pat ${shell.argv!e $n}
    } {-*} {
	#echo -- {-*} ${arg}
	case -- ${arg} {*l*} {
	    set list 1
	}
	case -- ${arg} {*h*} {
	    set silent 1
	}
	set -- opt $opt $arg
    } {*} {
	#echo -- ${pat!c}
	case -- ${pat!c} {0} {
	    set -- pat $arg
	} {*} {
	    set -- files $files $arg
	}
    }
    set n ${!expr $n + 1}
}

#echo
#echo {Done processing arguments}
#echo -- opt ${opt!q}
#echo -- pat ${pat!q}
#echo -- files ${files!q}
#echo -- list $list silent $silent

case -- ${pat!c} {0} {
    echo {grep through gzip files}
    echo {usage: $prog [grep_options] pattern [files]}
    exit 1
}

case -- ${files!c} {0} {
    eval -s stat {gzip -cdfq | $grep $opt $pat}
    exit $stat
}

set res 0
for i $files {
    case $i {*.gz} {
	case $list {1} {
	    if {gzip -cdfq $i | $grep $opt $pat > /device/null} {echo $i}
	} {0} {
	    if {or {case -- ${files!c} {0} {false}} ~
		  {case -- $silent {0} {false}}} {
		eval -s res {gzip -cdfq $i | $grep $opt $pat}
	    } {
		eval -s res {gzip -cdfq $i | $grep $opt $pat | sed {s|^|${i}:|}}
	    }
	}
    } {*} {
	case $list {1} {
	    if {$grep $opt $pat $i > /device/null} {echo $i}
	} {0} {
	    if {or {case -- ${files!c} {0} {false}} ~
		  {case -- $silent {0} {false}}} {
		eval -s res {$grep $opt $pat $i}
	    } {
		eval -s res {$grep $opt $pat $i | sed {s|^|${i}:|}}
	    }
	}
    }
}

exit $res
