:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / 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 <stdlib.h>
13
14 wchar_t *
15 _i64tow(__int64 value, wchar_t *string, int radix)
16 {
17   wchar_t tmp[65];
18   wchar_t *tp = tmp;
19   __int64 i;
20   unsigned __int64 v;
21   __int64 sign;
22   wchar_t *sp;
23
24   if (radix > 36 || radix <= 1)
25   {
26     return 0;
27   }
28
29   sign = (radix == 10 && value < 0);
30   if (sign)
31     v = -value;
32   else
33     v = (unsigned __int64)value;
34   while (v || tp == tmp)
35   {
36     i = v % radix;
37     v = v / radix;
38     if (i < 10)
39       *tp++ = i+L'0';
40     else
41       *tp++ = i + L'a' - 10;
42   }
43
44   sp = string;
45   if (sign)
46     *sp++ = L'-';
47   while (tp > tmp)
48     *sp++ = *--tp;
49   *sp = 0;
50   return string;
51 }
52
53
54 wchar_t *
55 _itow(int value, wchar_t *string, int radix)
56 {
57   wchar_t tmp[33];
58   wchar_t *tp = tmp;
59   int i;
60   unsigned v;
61   int sign;
62   wchar_t *sp;
63
64   if (radix > 36 || radix <= 1)
65   {
66     return 0;
67   }
68
69   sign = (radix == 10 && value < 0);
70   if (sign)
71     v = -value;
72   else
73     v = (unsigned)value;
74   while (v || tp == tmp)
75   {
76     i = v % radix;
77     v = v / radix;
78     if (i < 10)
79       *tp++ = i+L'0';
80     else
81       *tp++ = i + L'a' - 10;
82   }
83
84   sp = string;
85   if (sign)
86     *sp++ = L'-';
87   while (tp > tmp)
88     *sp++ = *--tp;
89   *sp = 0;
90   return string;
91 }
92
93
94 wchar_t *
95 _ltow(long value, wchar_t *string, int radix)
96 {
97   wchar_t tmp[33];
98   wchar_t *tp = tmp;
99   long i;
100   unsigned long v;
101   int sign;
102   wchar_t *sp;
103
104   if (radix > 36 || radix <= 1)
105   {
106     return 0;
107   }
108
109   sign = (radix == 10 && value < 0);
110   if (sign)
111     v = -value;
112   else
113     v = (unsigned long)value;
114   while (v || tp == tmp)
115   {
116     i = v % radix;
117     v = v / radix;
118     if (i < 10)
119       *tp++ = i+L'0';
120     else
121       *tp++ = i + L'a' - 10;
122   }
123
124   sp = string;
125   if (sign)
126     *sp++ = L'-';
127   while (tp > tmp)
128     *sp++ = *--tp;
129   *sp = 0;
130   return string;
131 }
132
133
134 wchar_t *
135 _ultow(unsigned long value, wchar_t *string, int radix)
136 {
137   wchar_t tmp[33];
138   wchar_t *tp = tmp;
139   long i;
140   unsigned long v = value;
141   wchar_t *sp;
142
143   if (radix > 36 || radix <= 1)
144   {
145     return 0;
146   }
147
148   while (v || tp == tmp)
149   {
150     i = v % radix;
151     v = v / radix;
152     if (i < 10)
153       *tp++ = i+L'0';
154     else
155       *tp++ = i + L'a' - 10;
156   }
157
158   sp = string;
159   while (tp > tmp)
160     *sp++ = *--tp;
161   *sp = 0;
162   return string;
163 }