#!/bin/sh
# uz [file...]
# lz [file...]
#
# If called "uz", gunzips and extracts a gzip'd tar'd archive.
# If called "lz", gunzips and shows a listing of a gzip'd tar'd archive.
#
# Requires: gzip and tar in the user's path.  Should work with most tars.
# "-" is now used for backwards compatibility with antique tars, e.g. SCO.
#
# 1994/02/19    DCN    Created (as a trivial, but useful script)
# 1994/12/01    DCN    Combined uz and lz, added suffix handling
# 2002/09/11    DCN    Added bzip2 support
#
# Copyright (C) 1994, 2002 David C. Niemi (niemi at tuxers dot net)
# The author requires that any copies or derived works include this
# copyright notice; no other restrictions are placed on its use.
#

set -e
set -u

## Default unzipping command
uzcmd='gzip -cd'

case $0 in
*uz)
    tarparam="-pxvf"
    action="Extracting from "
    ;;
*lz)
    tarparam="-tvf"
    action="Reading directory of "
    ;;
*)
    echo "$0: expect to be named either \"uz\" or \"lz\"." >&2
    exit 1
    ;;
esac

if [ $# = 0 ]; then
    echo "$action standard input." >&2
    $uzcmd - | tar "$tarparam" -
    exit 0
fi

while [ $# -ge 1 ]; do
    echo >&2
    found=

    for suffix in "" .gz .tgz .tar.gz .z .tar.z .taz .tpz .Z .tar.Z .tar.bz2; do
        if [ -r "${1}$suffix" ]; then
            found=$1$suffix
            break
        fi
    done

    case $found in
        *.tar.bz2 | *.tb2)
            uzcmd='bzip2 -cd'
            ;;
    esac
    if [ -z "$found" ]; then
        echo "$0: could not read \"$1\"." >&2
    else
        echo "$action \"$found\"." >&2
        $uzcmd -- "$found" | tar "$tarparam" -
    fi
    shift
done

exit 0