#!/bin/sh

# zcat, zmore, et zgrep - Ce script devra porter ces trois noms (on
#   aura recours pour cela  des liens symboliques ou durs). Il permet 
#   l'utilisateur de travailler avec des fichiers compacts de manire
#   transparente.

 Z="compress";  unZ="uncompress" ;  Zlist="" 
gz="gzip"    ; ungz="gunzip"     ; gzlist="" 
bz="bzip2"   ; unbz="bunzip2"    ; bzlist=""

# La premire tape est de tenter de localiser les noms de fichier de
# la ligne de commande. Nous procderons de manire paresseuse, en
# parcourant un  un tous ses arguments, et en testant chacun pour
# savoir s'il s'agit ou non d'un nom de fichier. Si c'est le cas, et
# s'il se termine par un suffixe de programme de compactage, nous le
# dcompactons, rcrivons le nom de fichier, et passons  la suite. 
# la fin, nous recompacterons tout ce qui aura t dcompact.

for arg 
do 
  if [ -f "$arg" ] ; then  
    case "$arg" in
       *.Z) $unZ "$arg" 
            arg="$(echo $arg | sed 's/\.Z$//')" 
            Zlist="$Zlist \"$arg\"" 
            ;;

      *.gz) $ungz "$arg" 
            arg="$(echo $arg | sed 's/\.gz$//')" 
            gzlist="$gzlist \"$arg\"" 
            ;;

     *.bz2) $unbz "$arg" 
            arg="$(echo $arg | sed 's/\.bz2$//')" 
            bzlist="$bzlist \"$arg\"" 
            ;;

    esac
  fi
  newargs="${newargs:-""} \"$arg\""
done

case $0 in
  *zcat*   ) eval  cat $newargs                 ;;
  *zmore*  ) eval more $newargs                 ;;
  *zgrep*  ) eval grep $newargs                 ;;
      *    ) echo "$0: nom de base inconnu. Je ne peux continuer." >&2; exit 1 
esac

# Maintenant, on recompacte tout

if [ ! -z "$Zlist"  ] ; then 
  eval $Z $Zlist
fi
if [ ! -z "$gzlist"] ; then 
  eval $gz $gzlist
fi
if [ ! -z "$bzlist" ] ; then 
  eval $bz $bzlist
fi

# on a fini

exit 0
