#! /bin/sh
# ^^^ THIS SHELL NEEDS BUILT-IN test COMMAND FOR SPEED
# $Header: /home/jerry/.bin/RCS/nexts,v 1.3 92/08/09 23:26:33 jerry mh_contrib $
###	nexts - show next message in an MH sequence
###	Usage: nexts [sequence-name] [+folder]
##
##	IF YOU TYPE AN MH SEQUENCE NAME ON ITS COMMAND LINE, AND THE CURRENT
##	MESSAGE IS BEFORE THE FIRST MESSAGE IN THAT SEQUENCE, nexts SHOWS
##	THE FIRST MESSAGE IN THAT SEQUENCE.   OTHERWISE, IT SHOWS THE
##	NEXT MESSAGE IN THAT SEQUENCE.  IT USES THE MH show PROGRAM.
##
##	THE SEQUENCE NAME YOU'RE VIEWING IS STORED IN A FILE NAMED
##	.nexts.seqname IN THE MH FOLDER DIRECTORY ITSELF.  THIS MEANS
##	THAT YOU CAN HAVE LOTS OF little FILES HANGING AROUND;
##	ALSO, IF SOMEONE ELSE IS LOGGED ON TO YOUR ACCOUNT AND THEY
##	CHANGE THE SEQUENCE NAME, THEIR CHANGE WILL AFFECT YOU.
##	STILL, THIS IS A GOOD COMPROMISE FOR PEOPLE USING WINDOWS, ETC.
##
##	MH 6.7.2 CAN DO THE SAME THING WITHOUT THIS PROGRAM.  EXAMPLE:
##		show unseen:next
#
#	NOTE TO HACKERS: TABSTOPS ARE SET AT 4 IN THIS CODE
#
#	USE AT YOUR OWN RISK.  SEEMS TO WORK, BUT IT'S YOUR RESPONSIBILITY!
#	PLEASE TELL ME ABOUT BUGS AND FIXES: Jerry Peek, jerry@ora.com

mh=/usr/local/mh	# WHERE MH COMMANDS LIVE

for arg
do
	case "$arg" in
	[+@]*)
		case "$fol" in
		"")	fol="$arg" ;;
		*)	echo "`basename $0`: only one folder at a time!" 1>&2; exit 1;;
		esac
		;;
	*)	# NOT A FOLDER, SO IT MUST BE A SEQUENCE NAME:
		case "$seq" in
		"")	seq="$arg" ;;
		*)	echo "`basename $0`: '$arg'?  Only one sequence!" 1>&2; exit 1;;
		esac
		;;
	esac
done

# IF NO SEQUENCE GIVEN, READ DEFAULT:
seqfile="`$mh/mhpath $fol`/.nexts.seqname" || exit 1
if [ -z "$seq" -a -r "$seqfile" ]; then
	# USE SEQUENCE NAME STORED IN FILE
	seq="`/bin/cat $seqfile`" || exit 1
elif [ -n "$seq" ]; then
	# STORE SEQUENCE NAME IN FILE (MAYBE CREATING IT TOO):
	echo "$seq" >$seqfile || exit 1
else
	echo "`basename $0` quitting: I'm confused." 1>&2
	exit 1
fi

# PUT CURRENT MESSAGE NUMBER IN $3; IF NONE, GETS THE STRING "(null)"
set x `$mh/mark -list -seq cur $fol` || exit 1
curmsg="$3"

# GET MESSAGE NUMBERS TO DEAL WITH INTO $1, $2, ETC.; IF NONE, EXIT:
set x `$mh/scan -format '%(msg)' $seq` || exit 1

test -z "$2" && exit 1	# IF NO MESSAGES IN LIST (IF $2 IS EMPTY), EXIT

case "$curmsg" in

"(null)") $mh/show $2; exit ;;	# NO CURRENT MESSAGE; SHOW FIRST ONE

[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9])
	# THERE'S A CURRENT MESSAGE; FIND NEXT ONE IN SEQUENCE:
	shift
	for msg
	do
		if [ $msg -gt $curmsg ]
		then
			show $msg
			exit 0	# BREAK LOOP AND QUIT...
		fi
	done
	# IF GET HERE, LOOP DIDN'T FIND A NEXT MESSAGE.  QUIT:
	echo "`basename $0`: no next message in '$seq' sequence in ${fol-current folder}" 1>&2
	exit 0
	;;

*)	echo "`basename $0': current message is '$curmsg'!?!" 1>&2
	exit 1
	;;
esac
