#! /bin/sh
# $Header: /home/jerry/.bin/RCS/pickthis,v 1.6 92/08/10 10:56:17 jerry mh_contrib $
###	pickthis - search messages (default: all) for one with same subject
###	Usage: pickthis [+folder|@folder] [msgs to search]
##
##	pickthis GRABS THE Subject: HEADER FROM THE CURRENT MESSAGE,
##	STRIPS OFF ANY Re:, RE:, ETC. FROM THE FRONT OF THE SUBJECT,
##	THEN SEARCHES FOR OTHER MESSAGES WITH THAT SUBJECT.  
##	IT STORES THE LIST OF MESSAGES IN THE SEQUENCE NAMED picked
##	(SO YOU CAN USE THEM LATER); IT scanS THE SEQUENCE BEFORE IT QUITS.
##
##	BY DEFAULT, pickthis SEARCHES ALL MESSAGES IN THE CURRENT FOLDER.
##	IF YOU GIVE IT A LIST OF MESSAGES OR A FOLDER NAME, IT'LL SEARCH THOSE.
#
#	NOTE TO HACKERS: TABSTOPS 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

myname="`basename $0`"

# GET SUBJECT OF THIS MESSAGE WITHOUT ANY Re: ON FRONT.
# ESCAPE METACHARACTERS LIKE [, ], ETC.:
if subj="`scan -width 300 -format '%{subject}' cur`"
then
	subj=`echo "$subj" |
	sed -e '
	/^[Rr][Ee]:/ {
	:rezap
			s/^[Rr][Ee]: *//
			/^[Rr][Ee]:/b rezap
	}
	s/\*/\\\\*/g
	s/\./\\\\./g
	s/\\$/\\\\$/g
	s/\]/\\\\]/g
	s/\[/\\\\[/g'`
else
	echo 1>&2 "$myname quitting: can't find subject of current message:
	$subj" 
	exit 1
fi

for arg
do
	case "$arg" in
	[+@]*)
		case "$gotfdr" in
		"")	gotfdr=yes ;;
		*)	echo "$myname quitting: '$arg': only one folder at a time!" 1>&2
			exit
			;;
		esac

		# MAKE SURE FOLDER EXISTS SO folder WON'T ASK "create?" (GRRRR...):
		if [ -d `mhpath $arg` ]
		then
			if folder -push $arg > /dev/null
			then
				# SET trap TO POP FOLDER STACK:
				trap 'folder -pop >/dev/null; exit' 0
				trap 'echo $myname: Interrupt!  Cleaning up...' 1 2 15
			else
				echo "$myname quitting: can't push folder $arg onto stack?" 1>&2
				exit 1
			fi
		else
			echo "$myname quitting: folder '${arg}' doesn't exist?"
			exit 1
		fi
		;;
	*)	range="$range $arg" ;;
	esac
done

# SEARCH FOR MESSAGE AND scan IF WE FOUND ANY.  DEFAULT TO all MSGS IN FOLDER:
if pick -subject "$subj" $range -seq picked
then
	# THIS exitS WITH scan'S EXIT STATUS:
	scan picked
	exit
else
	exit 1
fi
