]> rtime.felk.cvut.cz Git - fpga/plasma.git/blob - tools/count.c
Local copy of Plasma MIPS project.
[fpga/plasma.git] / tools / count.c
1 /*count.c*/
2 int putchar(int value);
3 int puts(const char *string);
4
5 char *name[] = {
6    "", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine",
7    "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",
8    "sixteen", "seventeen", "eighteen", "nineteen",
9    "", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy",
10    "eighty", "ninety"
11 };
12
13 char *xtoa(unsigned long num)
14 {
15    static char buf[12];
16    int i, digit;
17    buf[8] = 0;
18    for (i = 7; i >= 0; --i)
19    {
20       digit = num & 0xf;
21       buf[i] = digit + (digit < 10 ? '0' : 'A' - 10);
22       num >>= 4;
23    }
24    return buf;
25 }
26
27 char *itoa10(unsigned long num)
28 {
29    static char buf[12];
30    int i;
31    buf[10] = 0;
32    for (i = 9; i >= 0; --i)
33    {
34       buf[i] = (char)((num % 10) + '0');
35       num /= 10;
36    }
37    return buf;
38 }
39
40 void number_text(unsigned long number)
41 {
42    int digit;
43    puts(itoa10(number));
44    puts(": ");
45    if(number >= 1000000000)
46    {
47       digit = number / 1000000000;
48       puts(name[digit]);
49       puts(" billion ");
50       number %= 1000000000;
51    }
52    if(number >= 100000000)
53    {
54       digit = number / 100000000;
55       puts(name[digit]);
56       puts(" hundred ");
57       number %= 100000000;
58       if(number < 1000000)
59       {
60          puts("million ");
61       }
62    }
63    if(number >= 20000000)
64    {
65       digit = number / 10000000;
66       puts(name[digit + 20]);
67       putchar(' ');
68       number %= 10000000;
69       if(number < 1000000)
70       {
71          puts("million ");
72       }
73    }
74    if(number >= 1000000)
75    {
76       digit = number / 1000000;
77       puts(name[digit]);
78       puts(" million ");
79       number %= 1000000;
80    }
81    if(number >= 100000)
82    {
83       digit = number / 100000;
84       puts(name[digit]);
85       puts(" hundred ");
86       number %= 100000;
87       if(number < 1000)
88       {
89          puts("thousand ");
90       }
91    }
92    if(number >= 20000)
93    {
94       digit = number / 10000;
95       puts(name[digit + 20]);
96       putchar(' ');
97       number %= 10000;
98       if(number < 1000)
99       {
100          puts("thousand ");
101       }
102    }
103    if(number >= 1000)
104    {
105       digit = number / 1000;
106       puts(name[digit]);
107       puts(" thousand ");
108       number %= 1000;
109    }
110    if(number >= 100)
111    {
112       digit = number / 100;
113       puts(name[digit]);
114       puts(" hundred ");
115       number %= 100;
116    }
117    if(number >= 20)
118    {
119       digit = number / 10;
120       puts(name[digit + 20]);
121       putchar(' ');
122       number %= 10;
123    }
124    puts(name[number]);
125    putchar ('\r');
126    putchar ('\n');
127 }
128
129
130 int main()
131 {
132    unsigned long number, i=0;
133
134    number = 3;
135    for(i = 0;; ++i)
136    {
137       number_text(number);
138       number *= 3;
139       //++number;
140    }
141 }
142