#
# Open up a pipe and then page the output.
# I wrote this in a race with Archon (hop, 1997)
#

#
# Usage: 
#  $0  - name of the pipe
#  $1- - stuff to run
#
alias less_pipe
{
	@ line = 0

	if ([$1])
	{
		^on ^exec "$0 *" {
			@ lessline[$line] = [$1-]
			@ line++
		}
		^on ^exec_error "$0 *" {
			echo *** Error on exec: $*
		}
		^on ^exec_exit "$0 *" {
			on exec -"$0 *"
			on exec_error -"$0 *"
			on exec_exit -"$0 *"
			less_array lessline 0 $line
		}
		exec -name $*
	}
}

/*
 * $0 is the array name to use
 * $1 is the starting line
 * $2 is the final line
 */
alias less_array
{
	local line $1
	local cr 0
	local rows $winsize()

	while ((line < [$2]) && (cr < rows))
	{
		echo $($0[$line])
		assign -$0[$line]
		@ line++, cr++
	}

	if (cr >= rows)
	{
		@ aaa.array_name = [$0]
		@ aaa.next_line = line
		@ aaa.final_line = [$2]

		input_char "Enter q to quit, or anything else to continue "
		{
			if ([$0] != [q])
			{
				^less_array $aaa.array_name $aaa.next_line $aaa.final_line
			}
		}
	}
}

#hop'97
