update for HEAD-2003091401
[reactos.git] / lib / msvcrt / stdlib / witow.c
1 /* $Id$
2  *
3  * COPYRIGHT:   See COPYING in the top level directory
4  * PROJECT:     ReactOS system libraries
5  * FILE:        lib/msvcrt/stdlib/itow.c
6  * PURPOSE:     converts a integer to wchar_t
7  * PROGRAMER:   
8  * UPDATE HISTORY:
9  *              1995: Created
10  *              1998: Added ltoa Boudewijn Dekker
11  *              2000: derived from ./itoa.c by ea
12  */
13 /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
14
15 #include <msvcrt/errno.h>
16 #include <msvcrt/stdlib.h>
17 #include <msvcrt/internal/file.h>
18
19
20 /*
21  * @implemented
22  */
23 wchar_t* _i64tow(__int64 value, wchar_t* string, int radix)
24 {
25   wchar_t tmp[65];
26   wchar_t* tp = tmp;
27   int i;
28   unsigned v;
29   int sign;
30   wchar_t* sp;
31
32   if (radix > 36 || radix <= 1) {
33     __set_errno(EDOM);
34     return 0;
35   }
36
37   sign = (radix == 10 && value < 0);
38   if (sign)
39     v = -value;
40   else
41     v = (unsigned)value;
42   while (v || tp == tmp) {
43     i = v % radix;
44     v = v / radix;
45     if (i < 10)
46       *tp++ = i+L'0';
47     else
48       *tp++ = i + L'a' - 10;
49   }
50
51   if (string == 0)
52     string = (wchar_t*)malloc(((tp-tmp)+sign+1)*sizeof(wchar_t));
53   sp = string;
54
55   if (sign)
56     *sp++ = L'-';
57   while (tp > tmp)
58     *sp++ = *--tp;
59   *sp = 0;
60   return string;
61 }
62
63 /*
64  * @implemented
65  */
66 wchar_t* _ui64tow(unsigned __int64 value, wchar_t* string, int radix)
67 {
68   wchar_t tmp[65];
69   wchar_t* tp = tmp;
70   long i;
71   unsigned long v = value;
72   wchar_t* sp;
73
74   if (radix > 36 || radix <= 1) {
75     __set_errno(EDOM);
76     return 0;
77   }
78
79   while (v || tp == tmp) {
80     i = v % radix;
81     v = v / radix;
82     if (i < 10)
83       *tp++ = i+L'0';
84     else
85       *tp++ = i + L'a' - 10;
86   }
87
88   if (string == 0)
89     string = (wchar_t*)malloc(((tp-tmp)+1)*sizeof(wchar_t));
90   sp = string;
91
92   while (tp > tmp)
93     *sp++ = *--tp;
94   *sp = 0;
95   return string;
96 }