#! /bin/sh
# $Header: /home/jerry/.bin/RCS/nx,v 1.8 92/08/09 23:26:34 jerry mh_contrib $
###	nx - remove current message after 1 minute; show next message now
###	Usage: nx [-noverbose]
###	mrm - remove current message after 1 minute
###	Usage: mrm [-noverbose]
##
##	IF YOU HAVE MH SET TO annoTATE A MESSAGE THAT YOU'RE REPLYING TO
##	OR FORWARDING, AND YOU DO SOMETHING LIKE THIS:
##		% repl
##		...do the reply...
##		What now? push
##		% rmm
##		% next
##	YOU CAN GET ERROR MESSAGES FROM THE BACKGROUND LIKE:
##		Unable to rename 56 to ,56; continuing...
##	OR WORSE.
##
##	mrm AND nx WORK AROUND THIS PROBLEM BY KEEPING TRACK OF THE CURRENT
##	MESSAGE NUMBER AND FOLDER -- IT STARTS A BACKGROUND JOB THAT DELETES
##	THE MESSAGE AFTER A SET TIME (NOW, IT'S 60 SECONDS).
##	nx ALSO DOES THE MH next COMMAND TO SHOW THE NEXT MESSAGE -- GOOD
##	WHEN YOU'RE READING NEW MAIL MESSAGES.
##
##	TO KEEP FROM MESSING UP THE CURRENT CONTEXT WHEN IT REMOVES THE
##	MESSAGE, mrm & nx MAKE A NEW MH CONTEXT FILE IN /tmp BEFORE
##	DROPPING ITSELF INTO THE BACKGROUND.  THIS MEANS THAT mrm & nx CAN
##	"REMEMBER" THE CURRENT FOLDER (IN THE NEW 
##	context FILE) AND REMOVE THE OLD MESSAGE ANY TIME THEY WANT,
##	WITHOUT AFFECTING THE MH SYSTEM RUNNING UNDER THE REAL $HOME.
#
#	TO INSTALL, PUT IN A FILE NAMED nx AND LINK mrm TO THAT FILE:
#		% ln nx mrm
#
#	NOTE TO HACKERS: TABSTOPS IN THIS CODE ARE SET AT 4.
#
#	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
stime=60		# HOW LONG TO WAIT BEFORE REMOVING MESSAGE

case "$0" in
*mrm) ;;
*nx) shownext=yep ;;
*)	echo "$0: Help!  I don't know how to run myself!?!" 1>&2
	exit 1
	;;
esac

case "$1" in
-n*) shutup=yes ;;
"") ;;
*)	echo "Usage: `basename $0` [-n(overbose)]" 1>&2 ; exit 1 ;;
esac

msgpath="`$mh/mhpath cur`"
if test $? -ne 0 -o \( ! -f $msgpath \)
then
	echo "`basename $0`: can't find message to remove." 1>&2
	exit 1
fi

case "$shutup" in
"") echo "Removing $msgpath in background..." 1>&2 ;;
esac

# FOR FASTER RESPONSE, DO AS MUCH WORK AS WE CAN IN THE BACKGROUND...
(temp=/tmp/NX.err$$
exec 1> $temp 2>&1	# THROW ALL OUTPUT INTO $temp

# DO THIS IN A LONG CHAIN OF ifS SO WE ALWAYS LEAVE IF SOMETHING BOMBS.
# (I TRIED A trap, BUT THE SUB-SHELL exit DIDN'T SPRING IT.)

# PUT FOLDER NAME IN $folder AND MESSAGE NUMBER IN $msg:
eval `echo $msgpath | sed 's@^\(.*\)/\([1-9][0-9]*\)@folder=\1 msg=\2@'`
# IF THAT WORKED, NOW SET OUR TEMPORARY CURRENT FOLDER & MESSAGE
# NUMBER.
if [ ! -d "$folder" -o ! -f "$folder/$msg" ]
then
	# BARF ERROR INTO MAIL MESSAGE AND QUIT:
	echo "Quitting early: bad directory '$folder'
	and/or file '$msg'
	in $msgpath."
else
	# MAKE TEMPORARY CONTEXT FILE:
	ctx=/tmp/NX$$
	echo "Current-Folder: $folder" >$ctx || exit 1

	sleep $stime
	MHCONTEXT=$ctx $mh/rmm $msg
fi

# IF $temp HAS ANYTHING IN IT, MAIL THE ERROR (UNDER 4.3BSD, WE CAN'T
# JUST WRITE TO SCREEN; ANYWAY, USER MIGHT HAVE LOGGED OFF):
test -s $temp && $mh/mhmail $USER -s "$0 ERROR rmm-ing $msgpath" <$temp
/bin/rm -f $temp $ctx
exit
) &

case "$shownext" in
yep) $mh/next ;;
esac
