#! /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