1#!/bin/sh 2# $NetBSD: countmail,v 1.3 1998/08/15 09:16:27 mycroft Exp $ 3 4# 5# Copyright (c) 1998 The NetBSD Foundation, Inc. 6# All rights reserved. 7# 8# This code is derived from software contributed to The NetBSD Foundation 9# by Charles M. Hannum. 10# 11# Redistribution and use in source and binary forms, with or without 12# modification, are permitted provided that the following conditions 13# are met: 14# 1. Redistributions of source code must retain the above copyright 15# notice, this list of conditions and the following disclaimer. 16# 2. Redistributions in binary form must reproduce the above copyright 17# notice, this list of conditions and the following disclaimer in the 18# documentation and/or other materials provided with the distribution. 19# 3. All advertising materials mentioning features or use of this software 20# must display the following acknowledgement: 21# This product includes software developed by the NetBSD 22# Foundation, Inc. and its contributors. 23# 4. Neither the name of The NetBSD Foundation nor the names of its 24# contributors may be used to endorse or promote products derived 25# from this software without specific prior written permission. 26# 27# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 28# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 29# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 30# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 31# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 32# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 33# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 34# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 35# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 36# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 37# POSSIBILITY OF SUCH DAMAGE. 38# 39 40# Count the messages in your mailbox, using only POSIX shell builtins. 41# 42# Caveats: 43# 44# The read loop is horrendously slow on every implementation I've 45# tried. I suggest using from(1) and wc(1) instead, though these are 46# not shell builtins. 47 48# for krb. 49#set -- `from -t` 50#v=$3 51set -- `from | wc -l` 52v=$1 53#v=`from | wc -l` 54 55#v=0 56#exec 0</var/mail/$USER 57#while read line; do 58# case "$line" in 59# "From "*) v=$(($v + 1)) ;; 60# esac 61#done 62#exec 0<&- 63 64result= 65g=0 66 67while :; do 68 69 case $v in 70 0 | '') break ;; 71 ?) v=00$v ;; 72 ??) v=0$v ;; 73 esac 74 75 case $v in 76 *000) ;; 77 *) 78 case $g in 79 0) ;; 80 1) val=THOUSAND ;; 81 2) val=MILLION ;; 82 3) val=BILLION ;; 83 4) val=TRILLION ;; 84 5) val=QUADRILLION ;; 85 6) val=QUINTILLION ;; 86 7) val=SEXTILLION ;; 87 8) val=SEPTILLION ;; 88 *) 89 echo "YOU HAVE TOO MUCH MAIL!" 1>&2 90 exit 1 91 ;; 92 esac 93 94 case $g in 95 0) ;; 96 *) result="$val $result" ;; 97 esac 98 ;; 99 esac 100 101 g=$(($g + 1)) 102 103 case $v in 104 *?10) val=TEN ;; 105 *?11) val=ELEVEN ;; 106 *?12) val=TWELVE ;; 107 *?13) val=THIRTEEN ;; 108 *?14) val=FOURTEEN ;; 109 *?15) val=FIFTEEN ;; 110 *?16) val=SIXTEEN ;; 111 *?17) val=SEVENTEEN ;; 112 *?18) val=EIGHTEEN ;; 113 *?19) val=NINETEEN ;; 114 *) 115 case $v in 116 *?2?) val=TWENTY ;; 117 *?3?) val=THIRTY ;; 118 *?4?) val=FOURTY ;; 119 *?5?) val=FIFTY ;; 120 *?6?) val=SIXTY ;; 121 *?7?) val=SEVENTY ;; 122 *?8?) val=EIGHTY ;; 123 *?9?) val=NINETY ;; 124 *) val= ;; 125 esac 126 127 case $v in 128 *?0? | *??0) ;; 129 *) val=${val}- ;; 130 esac 131 132 case $v in 133 *??1) val=${val}ONE ;; 134 *??2) val=${val}TWO ;; 135 *??3) val=${val}THREE ;; 136 *??4) val=${val}FOUR ;; 137 *??5) val=${val}FIVE ;; 138 *??6) val=${val}SIX ;; 139 *??7) val=${val}SEVEN ;; 140 *??8) val=${val}EIGHT ;; 141 *??9) val=${val}NINE ;; 142 esac 143 ;; 144 esac 145 146 case $v in 147 *?00) ;; 148 *) result="$val $result" ;; 149 esac 150 151 case $v in 152 *1??) val=ONE ;; 153 *2??) val=TWO ;; 154 *3??) val=THREE ;; 155 *4??) val=FOUR ;; 156 *5??) val=FIVE ;; 157 *6??) val=SIX ;; 158 *7??) val=SEVEN ;; 159 *8??) val=EIGHT ;; 160 *9??) val=NINE ;; 161 esac 162 163 case $v in 164 *0??) ;; 165 *) result="$val HUNDRED $result" ;; 166 esac 167 168 v=${v%%???} 169 170done 171 172plural=S 173 174case "$result" in 175 "") result=ZERO ;; 176 "ONE ") plural= ;; 177esac 178 179set -- $result 180 181echo "$*! 182 183$* NEW MAIL MESSAGE$plural! 184 185HAHAHAHAHA!" 186