OpenCores
URL https://opencores.org/ocsvn/mips789/mips789/trunk

Subversion Repositories mips789

[/] [mips789/] [branches/] [avendor/] [bench/] [count/] [count.c] - Blame information for rev 53

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.