| #!/usr/local/plan9/bin/rc | 
 |  | 
 | fn read9p { | 
 | 	srv=$1; shift | 
 | 	9p read $srv >[2=1]|grep -v '^9p\:' | 
 | } | 
 |  | 
 | fn dir9p { | 
 | 	srv=$1; shift | 
 | 	9p ls $srv >[2=1]|grep -v '^9p\:' | 
 | } | 
 | 	 | 
 |  | 
 | fn catmesg { | 
 | 	# hold on for a second | 
 | 	TMP=/tmp/$USER.`{date -n}; sleep 1 | 
 | 	msg=$1; | 
 | 	read9p $msg/body >$TMP.body | 
 | 	t=`{read9p $msg/type} | 
 | 	switch($t){ | 
 | 		case text/html | 
 | 			echo ' | 
 | 					,x/<!--(-?[^\-]|--[^>]|\n)*-->/ c// | 
 | 					,x/<[^>]+>/d | 
 | 					,p | 
 | 					u | 
 | 					,y/<[^>]+>/d | 
 | 					,p | 
 | 				'| sam -d $TMP.body|[2] sed '1d;/^\?/d' | 
 | 		case text/* | 
 | 			cat $TMP.body | 
 | 		case message/* | 
 | 			cat $TMP.body | 
 | 		case multipart/related | 
 | 			if (~ `{read9p $msg/1/type} text/plain) | 
 | 				catmesg $msg/1 | 
 | 			if not if (~ `{read9p $msg/2/type} text/plain) | 
 | 				catmesg $msg/2 | 
 | 			if not { | 
 | 				for (i in `{dir9p $msg|awk '$10 ~ /[0-9][0-9]*/ {print $10}'}) | 
 | 					catmesg $msg/$i | 
 | 			} | 
 | 		case * | 
 | 			echo $t | 
 | 		# should there be more? | 
 | 	} | 
 | 	rm -f $TMP.body | 
 | } | 
 |  | 
 | if (~ $#* 0) | 
 | 	echo usage: msgcat mail/mbox/msgn && exit 1 | 
 |  | 
 | mesg=$1 | 
 | if (~ `{read9p $mesg/lines} '') | 
 | 	echo no such message $mesg && exit 2 | 
 |  | 
 | 			 | 
 | read9p $mesg/unixheader; read9p $mesg/header | 
 | echo | 
 | catmesg $mesg | 
 | echo |