#! /bin/sh
#
# Written by Jakub Jelinek 1995
# Updated by Christian Gennerat 1999
#
# (C) 1995,1999 The Free Software Foundation.
#
#

DZIP=/usr/bin
XZIP="$DZIP/zip -g"
XDZIP="$DZIP/zip -d"
XUNZIP="$DZIP/unzip"
XZIPINFO="$DZIP/unzip -Z"
#
#If you don't have zipinfo, set ZIPINFO=
#

mczipfs_list ()
{
DOZIPINFO=no
if test -n "$XZIPINFO"; then
    DOZIPINFO=
    $XZIPINFO -l "$1" | gawk -v uid=${UID-0} -v zipfile="$1" -v xunzip=${XUNZIP-unzip} '
/^Archive/ { next }
/^[0-9]*\ file/ { next }
/unx/ { 
split($0,a,":")
nam = substr(a[2],4)
if ($1 ~ /^l/ ) {
    arrow=" -> "
    linkname=""
    cmd=xunzip " -p " zipfile " " nam
    cmd | getline linkname
} else {
    arrow=""
    linkname=""
}

if (nam ~ /^\^/)
    nam=substr(nam, 2)
split($8, a, "-")
if (a[3] < 50)
    a[3] = 2000 + a[3]
else
    a[3] = 1900 + a[3]
printf "%s   1 %-8d %-8d %8d %3s %2d %4d %s %s%s%s\n", $1, uid, 0, $4, a[2], a[1], a[3], $9, nam, arrow, linkname
next
}
{
exit 214
}' 2>/dev/null
    if test $? = 214; then
        DOZIPINFO=no
    fi
fi
if test -n "$DOZIPINFO"; then
    $XUNZIP -v "$1" | gawk -v uid=${UID-0} '
BEGIN { hyphens=0 }
/^Archive/ { next }
/^\ Length/ { next }
/^\ ?------/ { if (hyphens > 0) exit 0; hyphens=1; next }
{ 
if (hyphens < 1) next;
if ($8 ~ /^\^/)
    $8=substr($8, 2)
if ($8 ~ /\/$/)
    printf "drwxr-xr-x   1 %-8d %-8d %8d %s %s %s\n", uid, 0, $1, $5, $6, $8
else
    printf "-rw-r--r--   1 %-8d %-8d %8d %s %s %s\n", uid, 0, $1, $5, $6, $8 
}' 2>/dev/null
fi
}

mczipfs_mkdir ()
{
# preserve pwd. It is clean, but is it necessary?
    pwd=`pwd`
# Create a directory and create in it a tmp directory with the good name     
    dir=tmpdir.${RANDOM}
    mkdir $dir
    cd $dir
    mkdir -p "$2"  
    $XZIP "$1" "$2" &>/dev/null
    cd $pwd
    rm -rf $dir
}

mczipfs_copyin ()
{
# preserve pwd. It is clean, but is it necessary?
    pwd=`pwd`
# Create a directory and copy in it the tmp file with the good name     
    mkdir $3.dir
    cd $3.dir
    di="${2%/*}"
# if file is to be written upper in the archive tree, make fake dir
    if test "$di" != "${2##*/}" ; then
        mkdir -p "$di" 
    fi
# (cp -p) to preserve date, but $2 is dated now!
    cp -p $3 "$3.dir/$2" 
    $XZIP "$1" "$2" >/dev/null
    cd $pwd
    rm -rf $3.dir
}

mczipfs_copyout ()
{
    $XUNZIP -p "$1" "$2" > "$3" 2>/dev/null
}

mczipfs_rm ()
{
    $XDZIP "$1" "$2" &>/dev/null
}

mczipfs_rmdir ()
{
    $XDZIP "$1" "$2"/ &>/dev/null
}

umask 077

#echo "`date +%T` ${0##*/} $1 $2 to=$3 tmp=$4" >>/tmp/${0##*/}.log
case "$1" in
  list)    mczipfs_list    "$2"; exit 0;;
  rm)      mczipfs_rm      "$2" "$3" ; exit 0;;
  rmdir)   mczipfs_rmdir   "$2" "$3" ; exit 0;;
  mkdir)   mczipfs_mkdir   "$2" "$3" ; exit 0;;
  copyin)  mczipfs_copyin  "$2" "$3" "$4" ; exit 0;;
  copyout) mczipfs_copyout "$2" "$3" "$4" ; exit 0;;
esac
exit 1
