1#!/bin/sh
2#
3# $NetBSD: zgrep,v 1.6 2008/04/27 09:27:55 nakayama Exp $
4#
5# Copyright (c) 2003 Thomas Klausner.
6#
7# Redistribution and use in source and binary forms, with or without
8# modification, are permitted provided that the following conditions
9# are met:
10# 1. Redistributions of source code must retain the above copyright
11#    notice, this list of conditions and the following disclaimer.
12# 2. Redistributions in binary form must reproduce the above copyright
13#    notice, this list of conditions and the following disclaimer in the
14#    documentation and/or other materials provided with the distribution.
15#
16# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27grep=/usr/bin/grep
28zcat=/usr/bin/zcat
29
30endofopts=0
31pattern_found=0
32grep_args=""
33hyphen=0
34silent=0
35
36prg=$0
37
38# handle being called 'zegrep' or 'zfgrep'
39case ${prg} in
40    *zegrep)
41	grep_args="-E";;
42    *zfgrep)
43	grep_args="-F";;
44esac
45
46# skip all options and pass them on to grep taking care of options
47# with arguments, and if -e was supplied
48
49while [ $# -gt 0 -a ${endofopts} -eq 0 ]
50do
51    case $1 in
52    # from GNU grep-2.5.1 -- keep in sync!
53	-[ABCDXdefm])
54	    if [ $# -lt 2 ]
55		then
56		echo "${prg}: missing argument for $1 flag" >&2
57		exit 1
58	    fi
59	    case $1 in
60		-e)
61		    pattern="$2"
62		    pattern_found=1
63		    shift 2
64		    break
65		    ;;
66		*)
67		    ;;
68	    esac
69	    grep_args="${grep_args} $1 $2"
70	    shift 2
71	    ;;
72	--)
73	    shift
74	    endofopts=1
75	    ;;
76	-)
77	    hyphen=1
78	    shift
79	    ;;
80	-h)
81	    silent=1
82	    shift
83	    ;;
84	-*)
85	    grep_args="${grep_args} $1"
86	    shift
87	    ;;
88	*)
89	    # pattern to grep for
90	    endofopts=1
91	    ;;
92    esac
93done
94
95# if no -e option was found, take next argument as grep-pattern
96if [ ${pattern_found} -lt 1 ]
97then
98    if [ $# -ge 1 ]; then
99	pattern="$1"
100	shift
101    elif [ ${hyphen} -gt 0 ]; then
102	pattern="-"
103    else
104	echo "${prg}: missing pattern" >&2
105	exit 1
106    fi
107fi
108
109# call grep ...
110if [ $# -lt 1 ]
111then
112    # ... on stdin
113    ${zcat} -fq - | ${grep} ${grep_args} -- "${pattern}" -
114else
115    # ... on all files given on the command line
116    if [ ${silent} -lt 1 ]; then
117	grep_args="-H ${grep_args}"
118    fi
119    while [ $# -gt 0 ]
120    do
121	${zcat} -fq -- "$1" | ${grep} --label="${1}" ${grep_args} -- "${pattern}" -
122	shift
123    done
124fi
125
126exit 0
127