#!/bin/sh # countmail --- be obnoxious about how much mail you have # Author: Noah Friedman # Created: 1993-02-22 # Public domain # $Id: countmail,v 1.3 1994/04/06 11:27:13 friedman Exp $ # Commentary: # "countmail is the work of someone in an altered state." # --Ben A. Mesander # The original idea for this program came from # Lauren P. Burka # Code: case " $* " in ' ') for dir in /usr/spool/mail /var/mail /usr/mail; do if test -d "$dir" ; then prefix="$dir/" break fi done user=${USER-${LOGNAME-`{ (whoami) 2> /dev/null; } \ || { id | sed -ne 's/.*uid=[0-9]*(// s/).*// p' }`}} set fnord "$prefix$user" shift ;; *' - '* ) _saved_args= stdin_tmpfile= stdin_file_found= while : ; do case $# in 0 ) break ;; esac case "$1" in - ) # We can only read from stdin once. case "$stdin_file_found" in t ) continue ;; esac stdin_file_found=t # Test to see if grep interprets `-' to mean stdin. # If it doesn't, then we must save stdin to a temporary file and # mutate the arguments to this script to replace `-' with the # name of that tmp file. ( if test -f - ; then cd /tmp if test -f - ; then tmpdir=/tmp/cntmail$$ mkdir "$tmpdir" cd "$tmpdir" echo chdir to "$tmpdir" trap '{ exitstat=$? cd / rm -rf "$tmpdir" trap "" 0 exit $exitstat }' 0 1 2 15 fi fi ${GREP-grep} fnord - > /dev/null 2>&1 << __EOF__ fnord __EOF__ ) case $? in 0 ) eval _saved_args$#=\$1 ;; * ) trap '{ exitstat=$? rm -f "$stdin_tmpfile" 2> /dev/null trap "" 0 exit $exitstat }' 0 1 2 15 stdin_tmpfile=/tmp/cntmail$$ ( umask 077 cat > "$stdin_tmpfile" ) eval _saved_args$#=\$stdin_tmpfile ;; esac ;; * ) eval _saved_args$#=\$1 ;; esac _saved_args="$_saved_args \"\$_saved_args$#\"" shift done eval '{ eval set fnord $_saved_args ; }' shift ;; esac set fnord `${GREP-grep} '^From ' ${1+"$@"} 2> /dev/null | wc -l` shift eval set fnord "`echo ${1+\"$@\"} | sed -ne ' s/[, ]//g s/^00*/0/g s/\(.\)\(.\)\(.\)$/\"\1 \2 \3\"/ :l /[0-9][0-9][0-9]/{ s/\([^\" ][^\" ]*\)\([^\" ]\)\([^\" ]\)\([^\" ]\)/\1\"\2 \3 \4\"/g t l } /^[0-9][0-9][0-9]/s/\([^\" ]\)\([^\" ]\)\([^\" ]\)/\"\1 \2 \3\"/ /^[0-9][0-9]/s/\([^\" ]\)\([^\" ]\)/\"\1 \2\"/ /^[0-9]/s/^\([^\" ][^\" ]*\)/\"\1\"/g;s/\"\"/\" \"/g p'`" shift result= while : ; do case $# in 0 ) break ;; esac eval `set fnord $1 shift d3='' d2='' d1='' case $# in 1 ) d1=$1 ;; 2 ) d2=$1 d1=$2 ;; 3 ) d3=$1 d2=$2 d1=$3 ;; esac echo "d3=\"$d3\" d2=\"$d2\" d1=\"$d1\""` val1='' val2='' val3='' case "$d3" in 1 ) val3=ONE ;; 6 ) val3=SIX ;; 2 ) val3=TWO ;; 7 ) val3=SEVEN ;; 3 ) val3=THREE ;; 8 ) val3=EIGHT ;; 4 ) val3=FOUR ;; 9 ) val3=NINE ;; 5 ) val3=FIVE ;; esac case "$d2" in 1 ) val2=TEEN ;; 6 ) val2=SIXTY ;; 2 ) val2=TWENTY ;; 7 ) val2=SEVENTY ;; 3 ) val2=THIRTY ;; 8 ) val2=EIGHTY ;; 4 ) val2=FORTY ;; 9 ) val2=NINETY ;; 5 ) val2=FIFTY ;; esac case "$val2" in TEEN ) val2= case "$d1" in 0 ) val1=TEN ;; 5 ) val1=FIFTEEN ;; 1 ) val1=ELEVEN ;; 6 ) val1=SIXTEEN ;; 2 ) val1=TWELVE ;; 7 ) val1=SEVENTEEN ;; 3 ) val1=THIRTEEN ;; 8 ) val1=EIGHTEEN ;; 4 ) val1=FOURTEEN ;; 9 ) val1=NINETEEN ;; esac ;; 0 ) : ;; * ) test ".$val2" != '.' -a ".$d1" != '.0' \ && val2="${val2}-" case "$d1" in 0 ) val2="$val2 " ;; 5 ) val1=FIVE ;; 1 ) val1=ONE ;; 6 ) val1=SIX ;; 2 ) val1=TWO ;; 7 ) val1=SEVEN ;; 3 ) val1=THREE ;; 8 ) val1=EIGHT ;; 4 ) val1=FOUR ;; 9 ) val1=NINE ;; esac ;; esac test ".$val3" != '.' && result="$result$val3 HUNDRED " test ".$val2" != '.' && result="$result$val2" test ".$val1" != '.' && result="$result$val1 " if test ".$d1$d2$d3" != '.000' ; then case $# in 0 | 1 ) ;; 2 ) result="${result}THOUSAND " ;; 3 ) result="${result}MILLION " ;; 4 ) result="${result}BILLION " ;; 5 ) result="${result}TRILLION " ;; 6 ) result="${result}QUADRILLION " ;; 7 ) result="${result}QUINTILLION " ;; 8 ) result="${result}SEXTILLION " ;; 9 ) result="${result}SEPTILLION " ;; 10 ) result="${result}OCTILLION " ;; 11 ) result="${result}NONILLION " ;; 12 ) result="${result}DECILLION " ;; 13 ) result="${result}UNDECILLION " ;; 14 ) result="${result}DUODECILLION " ;; 15 ) result="${result}TREDECILLION " ;; 16 ) result="${result}QUATTUORDECILLION " ;; 17 ) result="${result}QUINDECILLION " ;; 18 ) result="${result}SEXDECILLION " ;; 19 ) result="${result}SEPTENDECILLION " ;; 20 ) result="${result}OCTODECILLION " ;; 21 ) result="${result}NOVEMDECILLION " ;; 22 ) result="${result}VIGINTILLION " ;; * ) echo "countmail: you have too much mail." 1>&2; exit 1 ;; esac fi shift done s=S set fnord $result shift case "$*" in '' ) set ZERO ;; ONE ) s= ;; esac echo "$*! $* NEW MAIL MESSAGE$s! HAHAHAHAHA! " # countmail ends here