xref: /netbsd/games/countmail/countmail (revision bf9ec67e)
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