#! /bin/sh
#
# Written by Guus Jansman
#
# This is a parser for Cabinet archives in Midnight Commander. You need
# the GPL cabextract program (version >= 1.0) written by Stuart Caie.

   # Limitations:
   # - Archives can only be viewed
   # - Problems with empty directories as created by MsCab (non-standard cab files)
UNCAB=cabextract

   mccabfs_list ()
   {
   $UNCAB -lq "$1" 2>/dev/null | gawk -v uuid=${UID-0} '
   BEGIN { flag=0; date="JanFebMarAprMayJunJulAugSepOctNovDec" }
   /^-------/ { flag++; if (flag > 1) exit 0; next }
   /^$/ { next }
   {
   if (flag == 0) next
   perm="-rw-r--r--"
   uid=uuid
   gid=0
   line=substr($0, index($0, "|")+2)
   day=substr(line, 1, 2)
   month=substr(date, (substr(line, 4, 2)-1)*3+1, 3)
   year=substr(line, 7, 4)
   hour=substr(line, 12, 2)
   minute=substr(line, 15, 2)
   size=$1
   if (substr(size, length(size)) == "|")
   size=substr(size, 1, length(size)-1)
   name=substr(line, 23)
   gsub(/\\/, "/", name)
   if (substr(name, length(name)) == "/")
   {
   name=substr(name, 1, length(name)-1)
   perm="drwxr-xr-x"
   }
   printf "%s 1 %-8d %-8d %8d %3s %02d %04d %02d:%02d %s\n", perm, uid,
   gid, size, month, day, year, hour, minute, name
   }'
   }
mccabfs_copyout ()
{
 $UNCAB -F "$2" -p "$1" > "$3" 2>/dev/null
}

umask 077
cmd="$1"
shift
case "$cmd" in
   list)    mccabfs_list    "$@" ;;
   copyout) mccabfs_copyout "$@" ;;
   *)       exit 1 ;;
esac
exit 0
