eb7aa6132f4bc0835b4254b7f79ac8b018d120fc
[reactos.git] / reactos / lib / ntdll / stdlib / itow.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: lib/ntdll/stdlib/itow.c
5 * PURPOSE: converts an integer to Unicode
6 * PROGRAMER:
7 * UPDATE HISTORY:
8 * 1995: Created
9 * 1998: Added ltoa Boudewijn Dekker
10 */
11 /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
12 #include <ntdll.h>
13
14 /*
15 * @implemented
16 */
17 wchar_t *
18 _i64tow(__int64 value, wchar_t *string, int radix)
19 {
20 wchar_t tmp[65];
21 wchar_t *tp = tmp;
22 __int64 i;
23 unsigned __int64 v;
24 __int64 sign;
25 wchar_t *sp;
26
27 if (radix > 36 || radix <= 1)
28 {
29 return 0;
30 }
31
32 sign = (radix == 10 && value < 0);
33 if (sign)
34 v = -value;
35 else
36 v = (unsigned __int64)value;
37 while (v || tp == tmp)
38 {
39 i = v % radix;
40 v = v / radix;
41 if (i < 10)
42 *tp++ = i+L'0';
43 else
44 *tp++ = i + L'a' - 10;
45 }
46
47 sp = string;
48 if (sign)
49 *sp++ = L'-';
50 while (tp > tmp)
51 *sp++ = *--tp;
52 *sp = 0;
53 return string;
54 }
55
56
57 /*
58 * @implemented
59 */
60 wchar_t *
61 _ui64tow(unsigned __int64 value, wchar_t *string, int radix)
62 {
63 wchar_t tmp[65];
64 wchar_t *tp = tmp;
65 __int64 i;
66 unsigned __int64 v;
67 wchar_t *sp;
68
69 if (radix > 36 || radix <= 1)
70 {
71 return 0;
72 }
73
74 v = (unsigned __int64)value;
75 while (v || tp == tmp)
76 {
77 i = v % radix;
78 v = v / radix;
79 if (i < 10)
80 *tp++ = i+L'0';
81 else
82 *tp++ = i + L'a' - 10;
83 }
84
85 sp = string;
86 while (tp > tmp)
87 *sp++ = *--tp;
88 *sp = 0;
89 return string;
90 }
91
92
93 /*
94 * @implemented
95 */
96 wchar_t *
97 _itow(int value, wchar_t *string, int radix)
98 {
99 wchar_t tmp[33];
100 wchar_t *tp = tmp;
101 int i;
102 unsigned v;
103 int sign;
104 wchar_t *sp;
105
106 if (radix > 36 || radix <= 1)
107 {
108 return 0;
109 }
110
111 sign = (radix == 10 && value < 0);
112 if (sign)
113 v = -value;
114 else
115 v = (unsigned)value;
116 while (v || tp == tmp)
117 {
118 i = v % radix;
119 v = v / radix;
120 if (i < 10)
121 *tp++ = i+L'0';
122 else
123 *tp++ = i + L'a' - 10;
124 }
125
126 sp = string;
127 if (sign)
128 *sp++ = L'-';
129 while (tp > tmp)
130 *sp++ = *--tp;
131 *sp = 0;
132 return string;
133 }
134
135
136 /*
137 * @implemented
138 */
139 wchar_t *
140 _ltow(long value, wchar_t *string, int radix)
141 {
142 wchar_t tmp[33];
143 wchar_t *tp = tmp;
144 long i;
145 unsigned long v;
146 int sign;
147 wchar_t *sp;
148
149 if (radix > 36 || radix <= 1)
150 {
151 return 0;
152 }
153
154 sign = (radix == 10 && value < 0);
155 if (sign)
156 v = -value;
157 else
158 v = (unsigned long)value;
159 while (v || tp == tmp)
160 {
161 i = v % radix;
162 v = v / radix;
163 if (i < 10)
164 *tp++ = i+L'0';
165 else
166 *tp++ = i + L'a' - 10;
167 }
168
169 sp = string;
170 if (sign)
171 *sp++ = L'-';
172 while (tp > tmp)
173 *sp++ = *--tp;
174 *sp = 0;
175 return string;
176 }
177
178
179 /*
180 * @implemented
181 */
182 wchar_t *
183 _ultow(unsigned long value, wchar_t *string, int radix)
184 {
185 wchar_t tmp[33];
186 wchar_t *tp = tmp;
187 long i;
188 unsigned long v = value;
189 wchar_t *sp;
190
191 if (radix > 36 || radix <= 1)
192 {
193 return 0;
194 }
195
196 while (v || tp == tmp)
197 {
198 i = v % radix;
199 v = v / radix;
200 if (i < 10)
201 *tp++ = i+L'0';
202 else
203 *tp++ = i + L'a' - 10;
204 }
205
206 sp = string;
207 while (tp > tmp)
208 *sp++ = *--tp;
209 *sp = 0;
210 return string;
211 }