00001
00002
00003
00004
00005
00006
00007
00008 #include <display.h>
00009 #include <utility/ostream.h>
00010
00011 __BEGIN_SYS
00012
00013 const char OStream::dec_digits[] = "0123456789";
00014 const char OStream::hex_digits[] = "0123456789abcdef";
00015
00016 void OStream::print(const char * str)
00017 {
00018 Display display;
00019
00020 display.puts(str);
00021 }
00022
00023 int OStream::itoa(int v, char * s)
00024 {
00025 unsigned int i = 0, j;
00026
00027 if(!v) {
00028 s[0] = dec_digits[0];
00029 return 1;
00030 }
00031
00032 if(v < 0) {
00033 v = -v;
00034 s[i++] = '-';
00035 }
00036
00037 for(j = v; j != 0; i++, j /= 10);
00038 for(j = 0; v != 0; j++, v /= 10)
00039 s[i - 1 - j] = dec_digits[v % 10];
00040
00041 return i;
00042 }
00043
00044 int OStream::utoa(unsigned int v, char * s)
00045 {
00046 unsigned int i = 0, j;
00047
00048 if(!v) {
00049 s[0] = dec_digits[0];
00050 return 1;
00051 }
00052
00053 for(j = v; j != 0; i++, j /= 10);
00054 for(j = 0; v != 0; j++, v /= 10)
00055 s[i - 1 - j] = dec_digits[v % 10];
00056
00057 return i;
00058 }
00059
00060 int OStream::llitoa(long long int v, char * s)
00061 {
00062 unsigned int i = 0, j;
00063
00064 if(!v) {
00065 s[0] = dec_digits[0];
00066 return 1;
00067 }
00068
00069 if(v < 0) {
00070 v = -v;
00071 s[i++] = '-';
00072 }
00073
00074 for(j = v; j != 0; i++, j /= 10);
00075 for(j = 0; v != 0; j++, v /= 10)
00076 s[i - 1 - j] = dec_digits[v % 10];
00077
00078 return i;
00079 }
00080
00081 int OStream::llutoa(unsigned long long int v, char * s)
00082 {
00083 unsigned int i = 0, j;
00084
00085 if(!v) {
00086 s[0] = dec_digits[0];
00087 return 1;
00088 }
00089
00090 for(j = v; j != 0; i++, j /= 10);
00091 for(j = 0; v != 0; j++, v /= 10)
00092 s[i - 1 - j] = dec_digits[v % 10];
00093
00094 return i;
00095 }
00096
00097 int OStream::ptoa(const void * p, char * s)
00098 {
00099 unsigned int j, v = (unsigned int)p;
00100
00101 s[0] = '0';
00102 s[1] = 'x';
00103 for(j = 0; j < sizeof(void *) * 2; j++, v >>= 4)
00104 s[2 + sizeof(void *) * 2 - 1 - j]
00105 = hex_digits[v & 0xf];
00106
00107 return j + 2;
00108 }
00109
00110
00111 __END_SYS