#!/bin/sh
# This is a preprocessor for 'less'.  It is used when this environment
# variable is set:   LESSOPEN="|lesspipe.sh %s"

lesspipe() {
	case "$1" in
	*.me|*.me.gz)	GROFFMACRO="-me" ;;
	*.ms|*.ms.gz)	GROFFMACRO="-ms" ;;
	*)		GROFFMACRO="-mandoc" ;;
	esac

	case "$1" in

	*.deb) dpkg -I $1 ; dpkg -c $1  2>/dev/null ;;
	*.sgml|*.sgml.gz)
		FILE=`file -L $1` ; # Check to see if gzipped
		FILE=`echo $FILE | cut -d ' ' -f 2`
		if	[ "$FILE" = "gzip" ]
		then	gzip -dc $1 > /tmp/lesspipe.$$.sgml 2>/dev/null
		else	cp $1 /tmp/lesspipe.$$.sgml 
		fi
		if [ -x /usr/bin/sgml2txt ] # needs linuxdoc-sgml
		then	cd /tmp
			sgml2txt -f -l lesspipe.$$.sgml
			cd $OLDPWD
			cat /tmp/lesspipe.$$.txt
		else	cat /tmp/lesspipe.$$.sgml
		fi
		rm -f  /tmp/lesspipe.$$.*
		;;

	# View contents of .tar and .tgz files
	*.tgz|*.tar.gz|*.tar.[zZ])
		tar tzvvf $1 2>/dev/null ;;
	*.tar)	tar tvvf  $1 2>/dev/null ;;

	# View compressed files correctly
	*.[zZ])	gzip -dc $1  2>/dev/null ;;
	*.zip)	unzip -l $1 2>/dev/null ;;

	# uncompress .gz even if the name doesn't tell it
	# if needed run groff (man, me ,ms, ecc)
	*)	FILE=`file -L $1` ; # Check to see if gzipped
		FILE=`echo $FILE | cut -d ' ' -f 2`
		if	[ "$FILE" = "gzip" ]
		then	gzip -dc $1 > /tmp/lesspipe.$$ 2>/dev/null
			FILE=`file -L /tmp/lesspipe.$$ `
			FILE=`echo $FILE | cut -d ' ' -f 2`
		else	cp $1 /tmp/lesspipe.$$ 
		fi
		if	[ "$FILE" = "troff" ]
		then	groff -s -p -t -e -Tlatin1 $GROFFMACRO /tmp/lesspipe.$$ 
		else	cat /tmp/lesspipe.$$ 
		fi
		rm -f  /tmp/lesspipe.$$
		;;
	esac
}

lesspipe $1
