#!@POSIX_SHELL@

# Copyright (C) 2001, 2002, 2007 Free Software Foundation
# Copyright (C) 1992, 1993 Jean-loup Gailly

# Modified for XZ Utils by Andrew Dudman and Lasse Collin.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

#SET_PATH - This line is a placeholder to ease patching this script.

# Instead of unsetting XZ_OPT, just make sure that xz will use file format
# autodetection. This way memory usage limit and thread limit can be
# specified via XZ_OPT.
xz='@xz@ --format=auto'

version='xzmore (@PACKAGE_NAME@) @VERSION@'

usage="Usage: ${0##*/} [OPTION]... [FILE]...
Like 'more', but operate on the uncompressed contents of xz compressed FILEs.

Report bugs to <@PACKAGE_BUGREPORT@>."

case $1 in
	--help)    echo "$usage" || exit 2; exit;;
	--version) echo "$version" || exit 2; exit;;
esac

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 && test -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"; exit 1
	else
		$xz -cdfq | eval "${PAGER:-more}"
	fi
else
	FIRST=1
	for FILE; do
		< "$FILE" || continue
		if test $FIRST -eq 0; then
			printf "%s--More--(Next file: %s)" "" "$FILE"
			stty $cb -echo 2>/dev/null
			ANS=`dd bs=1 count=1 2>/dev/null`
			stty $ncb echo 2>/dev/null
			echo " "
			case "$ANS" in
				[eq]) exit;;
			esac
		fi
		if test "$ANS" != 's'; then
			echo "------> $FILE <------"
			$xz -cdfq -- "$FILE" | eval "${PAGER:-more}"
		fi
		if test -t 1; then
			FIRST=0
		fi
	done
fi
