#!/bin/sh

# Bzmore wrapped for bzip2, 
# adapted from zmore by Philippe Troin <phil@fifi.org> for Debian GNU/Linux.

PATH="/usr/bin:$PATH"; export PATH

prog=`echo $0 | sed 's|.*/||'`
case "$prog" in
    *less)  more=less   ;;
    *)  more=more       ;;
esac

if test "`echo -n a`" = "-n a"; then
  # looks like a SysV system:
  n1=''; n2='\c'
else
  n1='-n'; n2=''
fi
oldtty=`stty -g 2>/dev/null`
if stty -cbreak 2>/dev/null; then
  cb='cbreak'; ncb='-cbreak'
else
  # 'stty min 1' resets eof to ^a on both SunOS and SysV!
  cb='min 1 -icanon'; ncb='icanon eof ^d'
fi
if test $? -eq 0 -a -n "$oldtty"; then
   trap 'stty $oldtty 2>/dev/null; exit' 0 2 3 5 10 13 15
else
   trap 'stty $ncb echo 2>/dev/null; exit' 0 2 3 5 10 13 15
fi

if test $# = 0; then
    if test -t 0; then
    echo usage: $prog files...
    else
    bzip2 -cdfq | eval $more
    fi
else
    FIRST=1
    for FILE
    do
    if test $FIRST -eq 0; then
        echo $n1 "--More--(Next file: $FILE)$n2"
        stty $cb -echo 2>/dev/null
        ANS=`dd bs=1 count=1 2>/dev/null` 
        stty $ncb echo 2>/dev/null
        echo " "
        if test "$ANS" = 'e' -o "$ANS" = 'q'; then
            exit
        fi
    fi
    if test "$ANS" != 's'; then
        echo "------> $FILE <------"
        bzip2 -cdfq "$FILE" | eval $more
    fi
    if test -t; then
        FIRST=0
    fi
    done
fi
