Copy wininet to branch
[reactos.git] / reactos / subsys / system / cmd / locale.c
1 /*
2 * LOCALE.C - locale handling.
3 *
4 *
5 * History:
6 *
7 * 09-Jan-1999 (Eric Kohl <ekohl@abo.rhein-zeitung.de>)
8 * Started.
9 *
10 * 20-Jan-1999 (Eric Kohl <ekohl@abo.rhein-zeitung.de>)
11 * Unicode safe!
12 */
13
14 #include "precomp.h"
15
16
17 TCHAR cDateSeparator;
18 TCHAR cTimeSeparator;
19 TCHAR cThousandSeparator;
20 TCHAR cDecimalSeparator;
21 INT nDateFormat;
22 INT nTimeFormat;
23 TCHAR aszDayNames[7][8];
24 INT nNumberGroups;
25
26
27 VOID InitLocale (VOID)
28 {
29 #ifdef LOCALE_WINDOWS
30 TCHAR szBuffer[256];
31 INT i;
32
33 /* date settings */
34 GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_SDATE, szBuffer, 256);
35 CharToOem (szBuffer, szBuffer);
36 cDateSeparator = szBuffer[0];
37 GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_IDATE, szBuffer, 256);
38 nDateFormat = _ttoi (szBuffer);
39
40 /* time settings */
41 GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_STIME, szBuffer, 256);
42 CharToOem (szBuffer, szBuffer);
43 cTimeSeparator = szBuffer[0];
44 GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_ITIME, szBuffer, 256);
45 nTimeFormat = _ttoi (szBuffer);
46
47 /* number settings */
48 GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_STHOUSAND, szBuffer, 256);
49 CharToOem (szBuffer, szBuffer);
50 cThousandSeparator = szBuffer[0];
51 GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, szBuffer, 256);
52 CharToOem (szBuffer, szBuffer);
53 cDecimalSeparator = szBuffer[0];
54 GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_SGROUPING, szBuffer, 256);
55 nNumberGroups = _ttoi (szBuffer);
56
57 /* days of week */
58 for (i = 0; i < 7; i++)
59 {
60 GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_SABBREVDAYNAME1 + i, szBuffer, 256);
61 CharToOem (szBuffer, szBuffer);
62 _tcscpy (aszDayNames[(i+1)%7], szBuffer); /* little hack */
63 }
64 #endif
65
66 #ifdef LOCALE_GERMAN
67 LPTSTR names [7] = {_T("So"), _T("Mo"), _T("Di"), _T("Mi"), _T("Do"), _T("Fr"), _T("Sa")};
68 INT i;
69
70 /* date settings */
71 cDateSeparator = '.';
72 nDateFormat = 1; /* ddmmyy */
73
74 /* time settings */
75 cTimeSeparator = ':';
76 nTimeFormat = 1; /* 24 hour */
77
78 /* number settings */
79 cThousandSeparator = '.';
80 cDecimalSeparator = ',';
81 nNumberGroups = 3;
82
83 /* days of week */
84 for (i = 0; i < 7; i++)
85 _tcscpy (aszDayNames[i], names[i]);
86 #endif
87
88 #ifdef LOCALE_DEFAULT
89 LPTSTR names [7] = {_T("Sun"), _T("Mon"), _T("Tue"), _T("Wed"), _T("Thu"), _T("Fri"), _T("Sat")};
90 INT i;
91
92 /* date settings */
93 cDateSeparator = '-';
94 nDateFormat = 0; /* mmddyy */
95
96 /* time settings */
97 cTimeSeparator = ':';
98 nTimeFormat = 0; /* 12 hour */
99
100 /* number settings */
101 cThousandSeparator = ',';
102 cDecimalSeparator = '.';
103 nNumberGroups = 3;
104
105 /* days of week */
106 for (i = 0; i < 7; i++)
107 _tcscpy (aszDayNames[i], names[i]);
108 #endif
109 }
110
111
112 VOID PrintDate (VOID)
113 {
114 #ifdef __REACTOS__
115 SYSTEMTIME st;
116
117 GetLocalTime (&st);
118
119 switch (nDateFormat)
120 {
121 case 0: /* mmddyy */
122 default:
123 ConOutPrintf (_T("%s %02d%c%02d%c%04d"),
124 aszDayNames[st.wDayOfWeek], st.wMonth, cDateSeparator, st.wDay, cDateSeparator, st.wYear);
125 break;
126
127 case 1: /* ddmmyy */
128 ConOutPrintf (_T("%s %02d%c%02d%c%04d"),
129 aszDayNames[st.wDayOfWeek], st.wDay, cDateSeparator, st.wMonth, cDateSeparator, st.wYear);
130 break;
131
132 case 2: /* yymmdd */
133 ConOutPrintf (_T("%s %04d%c%02d%c%02d"),
134 aszDayNames[st.wDayOfWeek], st.wYear, cDateSeparator, st.wMonth, cDateSeparator, st.wDay);
135 break;
136 }
137 #else
138 TCHAR szDate[32];
139
140 GetDateFormat (LOCALE_USER_DEFAULT, DATE_SHORTDATE, NULL, NULL,
141 szDate, sizeof (szDate));
142 ConOutPrintf (_T("%s"), szDate);
143 #endif
144 }
145
146
147 VOID PrintTime (VOID)
148 {
149 #ifdef __REACTOS__
150 SYSTEMTIME st;
151
152 GetLocalTime (&st);
153
154 switch (nTimeFormat)
155 {
156 case 0: /* 12 hour format */
157 default:
158 ConOutPrintf (_T("Current time is %2d%c%02d%c%02d%c%02d%c\n"),
159 (st.wHour == 0 ? 12 : (st.wHour <= 12 ? st.wHour : st.wHour - 12)),
160 cTimeSeparator, st.wMinute, cTimeSeparator, st.wSecond, cDecimalSeparator,
161 st.wMilliseconds / 10, (st.wHour <= 11 ? 'a' : 'p'));
162 break;
163
164 case 1: /* 24 hour format */
165 ConOutPrintf (_T("Current time is %2d%c%02d%c%02d%c%02d\n"),
166 st.wHour, cTimeSeparator, st.wMinute, cTimeSeparator,
167 st.wSecond, cDecimalSeparator, st.wMilliseconds / 10);
168 break;
169 }
170 #else
171 TCHAR szTime[32];
172
173 GetTimeFormat (LOCALE_USER_DEFAULT, 0, NULL, NULL,
174 szTime, sizeof (szTime));
175 ConOutPrintf (_T("Current time is: %s\n"), szTime);
176 #endif
177 }