Annotation of researchv10no/cmd/number.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * print numbers
        !             3:  */
        !             4: 
        !             5: #include <stdio.h>
        !             6: #include <ctype.h>
        !             7: 
        !             8: int    flag;
        !             9: int max  = 21;
        !            10: char   *card[] = {
        !            11:        "hundred",
        !            12:        "thousand",
        !            13:        "million",
        !            14:        "billion",
        !            15:        "trillion",
        !            16:        "quadrillion",
        !            17:        "quintillion",
        !            18:        "sextillion",
        !            19:        "septillion",
        !            20:        "octillion",
        !            21:        "nonillion",
        !            22:        "decillion",
        !            23:        "undecillion",
        !            24:        "duodecillion",
        !            25:        "tredecillion",
        !            26:        "quattuordecillion",
        !            27:        "quindecillion",
        !            28:        "sexdecillion",
        !            29:        "septendecillion",
        !            30:        "octodecillion",
        !            31:        "novemdecillion",
        !            32:        "vigintillion"
        !            33: };
        !            34: char *unit[] = {
        !            35:        "zero",
        !            36:        "one",
        !            37:        "two",
        !            38:        "three",
        !            39:        "four",
        !            40:        "five",
        !            41:        "six",
        !            42:        "seven",
        !            43:        "eight",
        !            44:        "nine"
        !            45: };
        !            46: char *teen[] = {
        !            47:        "ten",
        !            48:        "eleven",
        !            49:        "twelve",
        !            50:        "thirteen",
        !            51:        "fourteen",
        !            52:        "fifteen",
        !            53:        "sixteen",
        !            54:        "seventeen",
        !            55:        "eighteen",
        !            56:        "nineteen"
        !            57: };
        !            58: char *decade[] = {
        !            59:        "zero",
        !            60:        "ten",
        !            61:        "twenty",
        !            62:        "thirty",
        !            63:        "forty",
        !            64:        "fifty",
        !            65:        "sixty",
        !            66:        "seventy",
        !            67:        "eighty",
        !            68:        "ninety"
        !            69: };
        !            70: char   line[100];
        !            71: main()
        !            72: {
        !            73:        register c, i, fraction;
        !            74:        int r;
        !            75: 
        !            76:        setbuf(stdout, NULL);
        !            77:        fraction = 0;
        !            78:        while ((c = getchar()) != EOF)  {
        !            79:                if(!isdigit(c))  {
        !            80:                        fraction = (c == '.');
        !            81:                        putchar(c);
        !            82:                        continue;
        !            83:                }
        !            84:                if(fraction) {
        !            85:                        while(isdigit(c)) {
        !            86:                                putchar(' ');
        !            87:                                putchar(c);
        !            88:                                if ((c = getchar()) == EOF)
        !            89:                                        exit(1);
        !            90:                        }
        !            91:                        putchar(' ');
        !            92:                        goto out;
        !            93:                }
        !            94:                putchar(' ');
        !            95:                i = 0;
        !            96:                line[i++] = '0';
        !            97:                line[i++] = '0';
        !            98:                while(c == '0')
        !            99:                        if ((c = getchar()) == EOF)
        !           100:                                exit(1);
        !           101:                while(isdigit(c)) {
        !           102:                        if(i < 98)
        !           103:                                line[i++] = c;
        !           104:                        if ((c = getchar()) == EOF)
        !           105:                                exit(1);
        !           106:                }
        !           107:                line[i] = 0;
        !           108:                r = i/3;
        !           109:                if(r == 0) {
        !           110:                        print("zero");
        !           111:                        goto out;
        !           112:                }
        !           113:                conv(line+i-3*r, r);
        !           114: 
        !           115: out:
        !           116:                fraction = (c == '.');
        !           117:                nline();
        !           118:                printf("...\n");
        !           119:                if(c != '\n')
        !           120:                        putchar(c);
        !           121:        }
        !           122: }
        !           123: 
        !           124: conv(p, c)
        !           125: char *p;
        !           126: {
        !           127: 
        !           128:        if(c > max) {
        !           129:                conv(p, c-max);
        !           130:                print(card[max]);
        !           131:                nline();
        !           132:                p += (c-max)*3;
        !           133:                c = max;
        !           134:        }
        !           135:        while(c > 1) {
        !           136:                c--;
        !           137:                conv(p, 1);
        !           138:                cprint(card[c]);
        !           139:                nline();
        !           140:                p += 3;
        !           141:        }
        !           142:        ones(p[0]);
        !           143:        cprint(card[0]);
        !           144:        tens(p);
        !           145:        ones(p[2]);
        !           146: }
        !           147: 
        !           148: ones(d)
        !           149: {
        !           150:        if(d=='0')
        !           151:                return;
        !           152:        print(unit[d-'0']);
        !           153: }
        !           154: 
        !           155: tens(p)
        !           156: char *p;
        !           157: {
        !           158: 
        !           159:        switch(p[1]) {
        !           160: 
        !           161:        case '0':
        !           162:                return;
        !           163: 
        !           164:        case '1':
        !           165:                print(teen[p[2]-'0']);
        !           166:                p[2] = '0';
        !           167:                return;
        !           168:        }
        !           169: 
        !           170:        print(decade[p[1]-'0']);
        !           171: }
        !           172: 
        !           173: nline()
        !           174: {
        !           175: 
        !           176:        if(flag)
        !           177:                printf(".\n");
        !           178:        flag = 0;
        !           179: }
        !           180: 
        !           181: cprint(s)
        !           182: char *s;
        !           183: {
        !           184: 
        !           185:        if(flag)
        !           186:                print(s);
        !           187: }
        !           188: 
        !           189: print(s)
        !           190: char *s;
        !           191: {
        !           192: 
        !           193:        if(flag)
        !           194:                printf(" ");
        !           195:        printf(s);
        !           196:        flag = 1;
        !           197: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.