#! /bin/sh # $Header: /usr/rubble/home/jerry/.bin/RCS/tcx,v 0.8 1996/12/13 02:54:53 jerry Exp $ ### tcx - run an MH command in a temporary context ### Usage: tcx MH-command [args] ## ## tcx COPIES THE USER'S CURRENT MH CONTEXT FILE INTO A TEMPORARY FILE. ## THEN IT RUNS THE MH COMMAND YOU WANT. IF THE COMMAND RUN MAKES ANY ## CONTEXT CHANGES (LIKE CHANGING THE CURRENT FOLDER), IT WON'T AFFECT ## YOUR ORIGINAL MH CONTEXT. SO, FOR EXAMPLE, TO scan A FOLDER WITHOUT ## CHANGING THE CURRENT FOLDER TO IT: ## % folder -fast ## foo ## % tcx scan +bar ## ...scan listing of bar... ## % folder -fast ## foo ## ## THE SCRIPT USES SOME KLUDGERY TO TRY TO KEEP THE PUBLIC SEQUENCES ## (USUALLY IN EACH FOLDER'S .mh_sequences FILE) FROM BEING CORRUPTED ## BY STUFF LIKE pick: -sequence xxx IN THE MH PROFILE. # # DISCLAIMER: USE THIS CODE AT YOUR OWN RISK. THE AUTHOR CANNOT BE # RESPONSIBLE FOR ANY PROBLEMS YOU HAVE WITH THE SCRIPT OR ANY DAMAGES # THAT THIS SCRIPT CAUSES, DIRECTLY OR INDIRECTLY. THE USER IS ASSUMED # TO UNDERSTAND MH AND sh WELL ENOUGH TO DECIDE WHETHER OR NOT THIS # SCRIPT IS SUITABLE AND WILL WORK CORRECTLY. ETC. ETC. # # THIS PROGRAM IS IN THE PUBLIC DOMAIN. IF YOU MODIFY IT, PLEASE ADD # COMMENTS TO THE CODE THAT MARK YOUR REVISIONS CLEARLY (SO PEOPLE WILL # KNOW THAT IT ISN'T THE ORIGINAL tcx). PLEASE ALSO SEND ME A COPY OF ANY # CHANGES YOU MAKE SO THAT I CAN THINK ABOUT FOLDING THEM INTO A NEW RELEASE. # I'M ALWAYS GLAD TO GET BUG REPORTS AND SUGGESTIONS! MY ADDRESS IS # jpeek@jpeek.com. THANKS. --Jerry Peek # NOTE: TABSTOPS IN THIS CODE ARE SET AT 4 ctx=/tmp/TCXc$$ # TEMPORARY CONTEXT FILE prf=/tmp/TCXp$$ # TEMPORARY MH PROFILE case $# in 0) echo "Usage: `basename $0` MH-command [args]" 1>&2; exit;; esac # COPY OF THE PUBLIC SEQUENCES FILE MUST BE *IN CURRENT FOLDER*. THIS BOMBS: # mh-sequences: /tmp/... # SO, LOOK FOR ARGS STARTING WITH + AND MAKE PUBLIC SEQUENCE FILE THERE... # *EXCEPT* FOR refile; WHERE WE USE CURRENT FOLDER UNLESS THERE'S A -src. SIGH. for arg do case "$arg" in -src) # USING refile (I HOPE); NEXT ARG WILL HAVE CURRENT FOLDER NAME: grabnext=y ;; [+@]*) # WHEN RUNNING refile, WE IGNORE [+@] ARGS EXCEPT AFTER A -src: case "$1" in *refile) case "$grabnext" in y) curfdr="$arg" grabnext= ;; esac ;; *) curfdr="$arg" ;; esac ;; esac done # MAKE TEMP FILE FOR PUBLIC SEQUENCES. SET trap TO REMOVE IT AND OTHER FILES. # TEMP FILENAME STARTS WITH A COMMA SO OLD ONES WILL BE NUKED BY cron JOB... # IF YOUR MH SYSTEM USES SHARP (#) FOR TEMPORARY FILES, CHANGE seqname: curpath=`mhpath $curfdr` || exit seqname=",seq_temp$$" seq="$curpath/$seqname" stat=2 # DEFAULT EXIT STATUS UNTIL MH COMMAND RUNS (WE EXIT WITH ITS STATUS) trap 'rm -f $ctx $prf $seq; exit $stat' 0 1 2 15 # BUG: THIS IGNORES ANY mh-sequences ENTRY THAT USER HAD IN MH PROFILE ALREADY. # SHOULD GRAB IT AND MAKE COPY OF IT, BUT THAT'LL SLOW DOWN THIS SCRIPT... /bin/cp $curpath/.mh_sequences $seq || echo "`basename $0`: WARNING: can't copy MH sequences file from $curfdr. Continuing..." 1>&2 # MAKE TEMP CONTEXT AND PROFILE. MAKE PUBLIC SEQUENCES IN OUR SEQUENCE FILE: /bin/cp ${MHCONTEXT-`mhpath +`/context} $ctx || exit echo "mh-sequences: $seqname" | /bin/cat ${MH-${HOME-$LOGDIR}/.mh_profile} - > $prf || exit MHCONTEXT=$ctx MH=$prf "$@" stat=$? # GRAB STATUS OF MH COMMAND AND EXIT WITH IT