#! /bin/sh # $Id: showpr,v 2.5 1995/04/26 20:02:49 jerry book3 $ ### showpr - show MH message(s) with pr(1), custom heading, maybe mhl(1) ### Usage: showpr [fdr] [msgs] [-mhl] [-format 'mh-format-str'] [-pr 'pr-opts'] ## ## THE EASY WAY TO PRINT MESSAGES IN MH ISN'T ESPECIALLY GREAT. YOU CAN ## PRINT YOUR MAIL MESSAGES LIKE THIS (ASSUMING YOUR PRINTER PROGRAM IS ## NAMED lpr), BUT ALL THE MESSAGES WILL BE RUN TOGETHER: ## % show 23 24 29 | lpr ## OR, YOU CAN USE pr(1) TO MAKE SIMPLE HEADERS (WITH THE FOLDER AND ## MESSAGE NUMBER), PAGE NUMBERS, AND START EACH MESSAGE ON A NEW PAGE: ## % show -showproc pr 23 24 29 | lpr ## ## THE showpr PROGRAM LETS YOU DO MORE. IT CAN USE mhl, IF YOU WANT, TO ## CLEAN UP THE MESSAGE BEFORE PRINTING. YOU CAN CUSTOMIZE THE PAGE HEADING ## -- INCLUDING THE MESSAGE SUBJECT, FOR INSTANCE. AND YOU CAN PASS OPTIONS TO ## pr, TO TELL IT HOW TO FORMAT YOUR MESSAGE. FINALLY, YOU CAN STORE DEFAULT ## showpr OPTIONS IN YOUR MH PROFILE, BECAUSE showpr CALLS THE mhprofile ## SCRIPT TO GET THEM. ## ## THE COMMAND LINE USES mh-format STRINGS LIKE THE ONES YOU'D GIVE TO ## THE scan COMMAND. HERE ARE SOME EXAMPLES. SOME OF THESE MIGHT LOOK ## COMPLICATED, BUT REMEMBER THAT YOU CAN STORE ANY SET OF OPTIONS AS ## DEFAULTS IN YOUR MH PROFILE: ## ## TO PRINT THE CURRENT MESSAGE, WITH THE MESSAGE SUBJECT IN EACH PAGE ## HEADING (IF YOU HAVEN'T PUT ANY showpr OPTIONS IN YOUR MH PROFILE): ## % showpr | lpr ## TO PRINT THE LAST 3 MESSAGES, WITH THE MESSAGE SUBJECT IN EACH PAGE ## HEADING; FORMAT THE MESSAGES WITH mhl; AND TELL pr TO USE ## ITS OPTIONS -f (SEPARATE PAGES WITH FORMFEEDS) AND -l50 ## (MAKE PAGE LENGTH 50 LINES): ## % showpr -mhl -pr '-f -l50' last:3 ## (YOU CAN SHORTEN THOSE OPTIONS TO -m AND -p, IF YOU WANT.) ## ## HERE'S MORE. TO PRINT THE LAST 3 MESSAGES WITH mhl FORMATTING, WITH ## THE "From" ADDRESS AND MESSAGE DATE IN THE HEADING, LIKE THIS: ## Mar 11 08:49 1990 From: al@phlabs.ph.com Date: 11/23/89 Page 2 ## USE A COMMAND LINE LIKE THIS (SPLIT ONTO TWO LINES FOR READABILITY): ## showpr -m -f 'from: %(friendly{from}) \ ## date: %(mon{date})/%(mday{date})/%(year{date})' last:3 | lpr ## TO MAKE THAT EASIER, YOU COULD PUT THE FOLLOWING LINE IN ## YOUR MH PROFILE (NOTE: ALTHOUGH IT'S SPLIT ONTO TWO LINES ## HERE, YOU SHOULD PUT IT ALL ON *ONE* LINE IN YOUR MH PROFILE): ## showpr: -m -f 'from: %(friendly{from}) \ ## date: %(mon{date})/%(mday{date})/%(year{date})' ## THEN GET THAT FORMATTING AND PRINT YOUR MESSAGES WITH: ## % showpr last:3 | lpr ## ## FINALLY, ABOUT mhl. YOU CAN MAKE AN mhl FORM FILE NAMED mhl.showpr ## AND PUT IT IN YOUR MH DIRECTORY (LIKE /xxx/yyy/Mail/mhl.showpr). ## IF YOU DO, AND IF YOU USE THE -mhl OPTION, THEN showpr WILL ## FORMAT YOUR MESSAGES WITH mhl -form mhl.showpr. ## OTHERWISE, THE -mhl OPTION USES THE STANDARD mhl.format FILE. ## ## NOTE TO HACKERS: TABSTOPS ARE SET AT 4 IN THIS CODE folopts="-nolist -nototal -nopack" mh=/usr/local/mh # WHERE MOST MH PROGRAMS LIVE mhl=/usr/local/lib/mh/mhl # WHERE mhl LIVES myname="`basename $0`" pr=/bin/pr prwidth=55 # MAX WIDTH OF -h FIELD IN $pr + 5 FOR MSG NUM scanopts="-noclear -noheader -noreverse" stat=1 # DEFAULT EXIT STATUS, RESET TO 0 BEFORE NORMAL EXIT usage="usage: $myname [fdr] [msgs] [-mhl] [-format 'mh-format-str'] [-pr 'pr-opts']" # RESET "COMMAND LINE" PARAMETERS. FIRST, AN x, WHICH WE # shift AWAY, IN CASE THERE ARE NO OTHER PARAMETERS. # THEN, MH PROFILE OPTIONS (IGNORE mhparam RETURN STATUS). # LAST, ORIGINAL COMMAND LINE ARGS (WITH SHELL BUG PATCH): eval set x `$mh/mhparam $myname` '${1+"$@"}' shift # PARSE set ARGS. IF OPTIONS REPEATED, LAST ONES PREVAIL: while : do case "$1" in "") break ;; # NO MORE ARGUMENTS [+@]*) newfdr="$1" ;; -h*) # HELP: echo "$usage \$Revision: 2.5 $ \$Date: 1995/04/26 20:02:49 $" exit ;; -m*) # SET mhlopts AS FLAG TO USE mhl. mhlopts="-nobell -noclear -nofaceproc -nomoreproc" # USE mhl.showpr FILE, IF ANY: if test -r `$mh/mhpath +`/mhl.showpr then mhlopts="$mhlopts -form mhl.showpr" fi ;; -f*) case "$2" in "") echo "$usage (Missing string after '$1')." 1>&2 exit ;; *) format="$2"; shift ;; esac ;; -p*) case "$2" in "") echo "$usage (Missing string after '$1')." 1>&2 exit ;; +*|-*) propts="$2"; shift ;; *) echo "$usage (Bad options after '$1')." 1>&2 exit ;; esac ;; *) msgs="$msgs $1" ;; esac shift done # SET FORMAT OF pr HEADER. IF NO -format OPTION, AND IF NO # "showpr:" LINE IN MH PROFILE, DEFAULT TO MESSAGE SUBJECT: : ${format='%{subject}'} # CHANGE FOLDER (IF USER GAVE ONE), GET NAME. folder="`$mh/folder $folopts -fast $newfdr`" cd `$mh/mhpath +` || exit # cd TO MH DIRECTORY # scan ALL MESSAGES; FEED TO LOOP. IF NONE, DEFAULT TO cur: scan -width $prwidth $scanopts -format "%(msg) $format" ${msgs-cur} | while read msgnum heading do # IF MESSAGE UNREADABLE, MH 6.6 scan PRINTS (TO stdout!) # LIKE THIS, WITH LEADING BLANKS UNLESS msgnum > 999: # <msgnum> unreadable # IF THERE ARE LEADING BLANKS, SOME sh'S WILL COPY BOTH # MESSAGE NUMBER AND unreadable INTO $heading, AND LEAVE # $msgnum EMPTY. TRY TO CATCH BOTH CASES: case "$msgnum" in "") echo "$myname: skipping, message $msgnum $heading" 1>&2; continue ;; esac case "$heading" in unreadable) echo "$myname: skipping unreadable message '$msgnum'." 1>&2; continue ;; esac msgpath=$folder/$msgnum case "$mhlopts" in "") $pr $propts -h "$heading" $msgpath || break ;; *) $mhl $mhlopts $msgpath | $pr $propts -h "$heading" || break ;; esac done stat=0 exit
[Table of Contents] [Index] [Return to Explanation of showpr]
This file is from the third edition of the book MH & xmh: Email for Users & Programmers, ISBN 1-56592-093-7, by Jerry Peek. Copyright © 1991, 1992, 1995 by O'Reilly & Associates, Inc. This file is freely-available; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation. For more information, see the file copying.htm.
Suggestions are welcome: Jerry Peek <jpeek@jpeek.com>