xref: /netbsd/games/countmail/countmail (revision c4a72b64)
1#!/bin/sh
2#	$NetBSD: countmail,v 1.5 2002/07/02 17:18:21 mycroft Exp $
3
4#
5# Copyright (c) 1998, 2002 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
64set --
65g=0
66v=000$v
67
68while :; do
69
70  case $v in
71    '' | 0 | 00) break ;;
72    *000) ;;
73    *)
74      case $g in
75	0) x= ;;
76	1) x=THOUSAND ;;
77	2) x=MILLION ;;
78	3) x=BILLION ;;
79	4) x=TRILLION ;;
80	5) x=QUADRILLION ;;
81	6) x=QUINTILLION ;;
82	7) x=SEXTILLION ;;
83	8) x=SEPTILLION ;;
84	*)
85	  echo "YOU HAVE TOO MUCH MAIL!" 1>&2
86	  exit 1
87	  ;;
88      esac
89
90      case $v in
91	*10) y=TEN ;;
92	*11) y=ELEVEN ;;
93	*12) y=TWELVE ;;
94	*13) y=THIRTEEN ;;
95	*14) y=FOURTEEN ;;
96	*15) y=FIFTEEN ;;
97	*16) y=SIXTEEN ;;
98	*17) y=SEVENTEEN ;;
99	*18) y=EIGHTEEN ;;
100	*19) y=NINETEEN ;;
101	*2?) y=TWENTY ;;
102	*3?) y=THIRTY ;;
103	*4?) y=FORTY ;;
104	*5?) y=FIFTY ;;
105	*6?) y=SIXTY ;;
106	*7?) y=SEVENTY ;;
107	*8?) y=EIGHTY ;;
108	*9?) y=NINETY ;;
109	*) y= ;;
110      esac
111
112      case $v in
113	*[01]? | *?0) ;;
114	*) y=$y- ;;
115      esac
116
117      case $v in
118	*1?) ;;
119	*1) y=${y}ONE ;;
120	*2) y=${y}TWO ;;
121	*3) y=${y}THREE ;;
122	*4) y=${y}FOUR ;;
123	*5) y=${y}FIVE ;;
124	*6) y=${y}SIX ;;
125	*7) y=${y}SEVEN ;;
126	*8) y=${y}EIGHT ;;
127	*9) y=${y}NINE ;;
128      esac
129
130      case $v in
131	*1??) z=ONE ;;
132	*2??) z=TWO ;;
133	*3??) z=THREE ;;
134	*4??) z=FOUR ;;
135	*5??) z=FIVE ;;
136	*6??) z=SIX ;;
137	*7??) z=SEVEN ;;
138	*8??) z=EIGHT ;;
139	*9??) z=NINE ;;
140	*) z= ;;
141      esac
142
143      set $z ${z:+HUNDRED} $y $x $*
144      ;;
145  esac
146
147  g=$(($g + 1))
148  v=${v%%???}
149
150done
151
152p=S
153
154case "$*" in
155  "") set ZERO ;;
156  ONE) p= ;;
157esac
158
159echo "$*!
160
161$* NEW MAIL MESSAGE$p!
162
163HAHAHAHAHA!"
164