From: CSRG Date: Sun, 24 Oct 1982 11:26:38 +0000 (-0800) Subject: BSD 4_3 development X-Git-Tag: BSD-4_3~1928 X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/commitdiff_plain/8b541e465cc1072820f5fed46ba290405d53c6f7?hp=b367c65f433549276cb9c3ae32d5486cf40bfa94 BSD 4_3 development Work on file usr/src/games/number.c Synthesized-from: CSRG/cd1/4.3 --- diff --git a/usr/src/games/number.c b/usr/src/games/number.c new file mode 100644 index 0000000000..8541040ce0 --- /dev/null +++ b/usr/src/games/number.c @@ -0,0 +1,202 @@ + +static char sccsid[] = " number.c 4.1 82/10/24 "; + +int flag; +int max = 21; +char *card[] = +{ + "hundred", + "thousand", + "million", + "billion", + "trillion", + "quadrillion", + "quintillion", + "sextillion", + "septillion", + "octillion", + "nonillion", + "decillion", + "undecillion", + "duodecillion", + "tredecillion", + "quattuordecillion", + "quindecillion", + "sexdecillion", + "septendecillion", + "octodecillion", + "novemdecillion", + "vigintillion" +}; +char *unit[] = { + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine" +}; +char *teen[] = { + "ten", + "eleven", + "twelve", + "thirteen", + "fourteen", + "fifteen", + "sixteen", + "seventeen", + "eighteen", + "nineteen" +}; +char *decade[] = { + "zero", + "ten", + "twenty", + "thirty", + "forty", + "fifty", + "sixty", + "seventy", + "eighty", + "ninety" +}; +char line[100]; +main() +{ + register c, i, fraction; + int r; + + + fraction = 0; + while(c = getchar()) { + if(!digit(c)) { + fraction = (c == '.'); + putchar(c); + continue; + } + if(fraction) { + while(digit(c)) { + putchar(' '); + putchar(c); + if(!(c=getchar())) + exit(1); + } + putchar(' '); + goto out; + } + + putchar(' '); + i = 0; + line[i++] = '0'; + line[i++] = '0'; + while(c == '0') + if(!(c=getchar())) + exit(1); + while(digit(c)) { + if(i < 98) + line[i++] = c; + if(!(c=getchar())) + exit(1); + } + line[i] = 0; + r = i/3; + if(r == 0) { + print("zero"); + goto out; + } + conv(line+i-3*r, r); + +out: + fraction = (c == '.'); + nline(); + printf("...\n"); + if(c != '\n') + putchar(c); + } +} + +conv(p, c) +char *p; +{ + + if(c > max) { + conv(p, c-max); + print(card[max]); + nline(); + p += (c-max)*3; + c = max; + } + while(c > 1) { + c--; + conv(p, 1); + cprint(card[c]); + nline(); + p += 3; + } + ones(p[0]); + cprint(card[0]); + tens(p); + ones(p[2]); +} + +ones(d) +{ + if(d=='0') + return; + print(unit[d-'0']); +} + +tens(p) +char *p; +{ + + switch(p[1]) { + + case '0': + return; + + case '1': + print(teen[p[2]-'0']); + p[2] = '0'; + return; + } + + print(decade[p[1]-'0']); +} + + +digit(c) +{ + + if(c < '0' || c > '9') + return(0); + return(1); +} + +nline() +{ + + if(flag) + printf(".\n"); + flag = 0; +} + +cprint(s) +{ + + if(flag) + print(s); +} + +print(s) +{ + + if(flag) + printf(" "); + printf(s); + flag = 1; +}