#!/bin/sh
# countmail --- be obnoxious about how much mail you have
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
# 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 <ben@piglet.cr.usgs.gov>

# The original idea for this program came from
# Lauren P. Burka <exile@gnu.ai.mit.edu>

# 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
