dd8bdca7b931e2c98f0280390de64615910615a0
[reactos.git] / reactos / lib / msvcrt / stdlib / witow.c
1 /* $Id: witow.c,v 1.1 2002/11/24 18:42:25 robd Exp $
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 wchar_t* _i64tow(__int64 value, wchar_t* string, int radix)
21 {
22 wchar_t tmp[65];
23 wchar_t* tp = tmp;
24 int i;
25 unsigned v;
26 int sign;
27 wchar_t* sp;
28
29 if (radix > 36 || radix <= 1)
30 {
31 __set_errno(EDOM);
32 return 0;
33 }
34
35 sign = (radix == 10 && value < 0);
36 if (sign)
37 v = -value;
38 else
39 v = (unsigned)value;
40 while (v || tp == tmp)
41 {
42 i = v % radix;
43 v = v / radix;
44 if (i < 10)
45 *tp++ = i+L'0';
46 else
47 *tp++ = i + L'a' - 10;
48 }
49
50 if (string == 0)
51 string = (wchar_t*)malloc(((tp-tmp)+sign+1)*sizeof(wchar_t));
52 sp = string;
53
54 if (sign)
55 *sp++ = L'-';
56 while (tp > tmp)
57 *sp++ = *--tp;
58 *sp = 0;
59 return string;
60 }
61
62 wchar_t* _ui64tow(unsigned __int64 value, wchar_t* string, int radix)
63 {
64 wchar_t tmp[65];
65 wchar_t* tp = tmp;
66 long i;
67 unsigned long v = value;
68 wchar_t* sp;
69
70 if (radix > 36 || radix <= 1)
71 {
72 __set_errno(EDOM);
73 return 0;
74 }
75
76 while (v || tp == tmp)
77 {
78 i = v % radix;
79 v = v / radix;
80 if (i < 10)
81 *tp++ = i+L'0';
82 else
83 *tp++ = i + L'a' - 10;
84 }
85
86 if (string == 0)
87 string = (wchar_t*)malloc(((tp-tmp)+1)*sizeof(wchar_t));
88 sp = string;
89
90 while (tp > tmp)
91 *sp++ = *--tp;
92 *sp = 0;
93 return string;
94 }