:
##########################################################################
# Title      :	uncpio - unpack cpio file
# Author     :	Heiner Steven <heiner.steven@odn.de>
# Date	     :	1994-09-23
# Requires   :	cpio, icat, uncompress
# Category   :	File Utilities
# SCCS-Id.   :	@(#) uncpio	1.2 03/12/19
##########################################################################
# Description
#
##########################################################################

PN=`basename "$0"`			# Program name
VER='1.2'

usage () {
    echo >&2 "$PN - unarchive cpio archive, $VER (stv '95)
usage: $PN [-vu] [archive...]
    -v    print extracted file names
    -u    unconditionally overwrite existing files

If the specified archive does not exist, the files
    archive.cpz, archive.cpio

and compressed versions of archive.cpio are also tried."
    exit 1
}

msg () {
    for i
    do echo "$PN: $i" >&2
    done
}

fatal () { msg "$@"; exit 1; }

set -- `getopt huv "$@"`
CpioOpt=dm				# Options for cpio
while [ $# -gt 0 ]
do
    case "$1" in
	-h)	usage;;
	-v)	CpioOpt="${CpioOpt}v";;
	-u)	CpioOpt="${CpioOpt}u";;
	--)	shift; break;;
	-*)	usage;;
	*)	break;;			# File name
    esac
    shift
done

Err=0
if [ $# -lt 1 ]
then					# read from stdin -- uncompressed
    cpio -i$CpioOpt || fatal "error extracting from standard input"
else
    for file in $*			# no blanks permitted in file name
    do
	if [ -f "$file" -a -r "$file" ]
	then				# file exists
	    # If input is no cpio-archive, try 'icat' to
	    # uncompress input
	    echo "$file -	\c" >&2
	    cpio -i$CpioOpt < "$file" 2> /dev/null || 
		icat "$file" | cpio -i$CpioOpt
	elif [ -f "$file.cpio" -a -r "$file.cpio" ]
	then
	    cpio -i$CpioOpt < $file.cpio
	elif [ -f "$file.cpz" -a -r "$file.cpz" ]
	then				# compressed
	    echo "$file.cpz -	\c" >&2
	    uncompress < $file.cpz | cpio -i$CpioOpt
	elif [ -n "`ls $file.cpio.* 2> /dev/null`" ]
	then
	    icat $file.cpio.* | cpio -i$CpioOpt
	else
	    msg "$file not found - ignored"
	    Err=`expr $Err + 1`
	fi
    done
fi
exit $Err
