source: trunk/src/kernel32/lang.cpp@ 7959

Last change on this file since 7959 was 7959, checked in by sandervl, 24 years ago

country updates

File size: 29.1 KB
Line 
1/* $Id: lang.cpp,v 1.42 2002-02-19 12:51:40 sandervl Exp $ */
2/*
3 * Win32 language API functions for OS/2
4 *
5 * Copyright 1998 Sander van Leeuwen
6 * Copyright 1998 Patrick Haller
7 * Copyright 1999 Przemyslaw Dobrowolski
8 *
9 *
10 * Project Odin Software License can be found in LICENSE.TXT
11 *
12 */
13#include <os2win.h>
14#include <winnls.h>
15#include <stdlib.h>
16#include <stdio.h>
17#include <string.h>
18#include <odinwrap.h>
19#include <heapstring.h>
20#include <win\winreg.h>
21#include <winos2def.h>
22#include "unicode.h"
23#include "oslibmisc.h"
24#include <wprocess.h>
25#include <uniconv.h>
26
27#define DBG_LOCALLOG DBG_lang
28#include "dbglocal.h"
29
30ODINDEBUGCHANNEL(KERNEL32-LANG)
31
32static ULONG defaultLanguage = 0;
33
34//******************************************************************************
35//******************************************************************************
36void WIN32API SetDefaultLanguage(DWORD deflang)
37{
38 defaultLanguage = deflang;
39}
40//******************************************************************************
41//******************************************************************************
42ULONG GetLanguageId()
43{
44 if(defaultLanguage == 0) {
45 switch(OSLibQueryCountry()) {
46 case CTRY_USA:
47 defaultLanguage = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
48 break;
49 case CTRY_CANADA://TODO: french-canadian
50 defaultLanguage = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
51 break;
52 case CTRY_LATIN_AMERICA:
53 defaultLanguage = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH);
54 break;
55 case CTRY_RUSSIA:
56 defaultLanguage = MAKELANGID(LANG_RUSSIAN, SUBLANG_RUSSIAN);
57 break;
58 case CTRY_GREECE:
59 defaultLanguage = MAKELANGID(LANG_GREEK, SUBLANG_DEFAULT);
60 break;
61 case CTRY_NETHERLANDS:
62 defaultLanguage = MAKELANGID(LANG_DUTCH, SUBLANG_DUTCH);
63 break;
64 case CTRY_BELGIUM://TODO: french-belgian
65 defaultLanguage = MAKELANGID(LANG_DUTCH, SUBLANG_DUTCH_BELGIAN);
66 break;
67 case CTRY_FRANCE:
68 defaultLanguage = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH);
69 break;
70 case CTRY_SPAIN:
71 defaultLanguage = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH);
72 break;
73 case CTRY_ITALY:
74 defaultLanguage = MAKELANGID(LANG_ITALIAN, SUBLANG_ITALIAN);
75 break;
76 case CTRY_SWITZERLAND:
77 defaultLanguage = MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_SWISS);
78 break;
79 case CTRY_AUSTRIA:
80 defaultLanguage = MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_AUSTRIAN);
81 break;
82 case CTRY_UNITED_KINGDOM:
83 defaultLanguage = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_UK);
84 break;
85 case CTRY_IRELAND:
86 defaultLanguage = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_EIRE);
87 break;
88 case CTRY_DENMARK:
89 defaultLanguage = MAKELANGID(LANG_DANISH, SUBLANG_DEFAULT);
90 break;
91 case CTRY_SWEDEN:
92 defaultLanguage = MAKELANGID(LANG_SWEDISH, SUBLANG_DEFAULT);
93 break;
94 case CTRY_NORWAY:
95 defaultLanguage = MAKELANGID(LANG_NORWEGIAN, SUBLANG_DEFAULT);
96 break;
97 case CTRY_GERMANY:
98 defaultLanguage = MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN);
99 break;
100 case CTRY_MEXICO:
101 defaultLanguage = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MEXICAN);
102 break;
103 case CTRY_BRAZIL:
104 defaultLanguage = MAKELANGID(LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN);
105 break;
106 case CTRY_AUSTRALIA:
107 defaultLanguage = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_AUS);
108 break;
109 case CTRY_NEW_ZEALAND:
110 defaultLanguage = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_NZ);
111 break;
112 case CTRY_JAPAN:
113 defaultLanguage = MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT);
114 break;
115 case CTRY_KOREA:
116 defaultLanguage = MAKELANGID(LANG_KOREAN, SUBLANG_DEFAULT);
117 break;
118 case CTRY_SINGAPORE:
119 defaultLanguage = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SINGAPORE);
120 break;
121 case CTRY_HONG_KONG:
122 defaultLanguage = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_HONGKONG);
123 break;
124 case CTRY_CHINA:
125 defaultLanguage = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL);
126 break;
127 case CTRY_TAIWAN:
128 defaultLanguage = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL);
129 break;
130 case CTRY_TURKEY:
131 defaultLanguage = MAKELANGID(LANG_TURKISH, SUBLANG_DEFAULT);
132 break;
133 case CTRY_PORTUGAL:
134 defaultLanguage = MAKELANGID(LANG_PORTUGUESE, SUBLANG_DEFAULT);
135 break;
136 case CTRY_LUXEMBOURG:
137 defaultLanguage = MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_LUXEMBOURG);
138 break;
139 case CTRY_ICELAND:
140 defaultLanguage = MAKELANGID(LANG_ICELANDIC, SUBLANG_DEFAULT);
141 break;
142 case CTRY_FINLAND:
143 defaultLanguage = MAKELANGID(LANG_FINNISH, SUBLANG_DEFAULT);
144 break;
145 case CTRY_BULGARIA:
146 defaultLanguage = MAKELANGID(LANG_BULGARIAN, SUBLANG_DEFAULT);
147 break;
148 case CTRY_CROATIA:
149 defaultLanguage = MAKELANGID(LANG_CROATIAN, SUBLANG_CROATIAN);
150 break;
151 case CTRY_SLOVENIA:
152 defaultLanguage = MAKELANGID(LANG_SLOVENIAN, SUBLANG_DEFAULT);
153 break;
154 case CTRY_CZECH_REPUBLIC:
155 defaultLanguage = MAKELANGID(LANG_CZECH, SUBLANG_DEFAULT);
156 break;
157 case CTRY_SLOVAK_REPUBLIC:
158 defaultLanguage = MAKELANGID(LANG_SLOVAK, SUBLANG_DEFAULT);
159 break;
160 case CTRY_POLAND:
161 defaultLanguage = MAKELANGID(LANG_POLISH, SUBLANG_DEFAULT);
162 break;
163 default:
164 defaultLanguage = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_UK);
165 break;
166 }
167 }
168 return defaultLanguage;
169}
170//******************************************************************************
171//******************************************************************************
172LCID WIN32API GetUserDefaultLCID(void)
173{
174 dprintf2(("KERNEL32: GetUserDefaultLCID: returns %x", MAKELCID(GetLanguageId(), SORT_DEFAULT)));
175 return(MAKELCID(GetLanguageId(), SORT_DEFAULT));
176}
177//******************************************************************************
178//******************************************************************************
179LCID WIN32API GetSystemDefaultLCID(void)
180{
181 dprintf2(("KERNEL32: GetSystemDefaultLCID: returns %x", GetUserDefaultLCID()));
182 return GetUserDefaultLCID();
183}
184//******************************************************************************
185//******************************************************************************
186LANGID WIN32API GetUserDefaultLangID()
187{
188 dprintf2(("KERNEL32: GetUserDefaultLangID, returns %x", GetLanguageId()));
189 return(GetLanguageId());
190}
191//******************************************************************************
192//******************************************************************************
193LANGID WIN32API GetSystemDefaultLangID(void)
194{
195 dprintf2(("KERNEL32: GetSystemDefaultLangID returns %x", GetUserDefaultLangID()));
196 return GetUserDefaultLangID();
197}
198
199//******************************************************************************
200//******************************************************************************
201static BOOL LocaleFromUniStr(LPWSTR lpUniStr, LPWSTR wbuf, ULONG *pLen)
202{
203 if (wbuf)
204 {
205 if (*pLen > lstrlenW(lpUniStr))
206 lstrcpyW(wbuf,lpUniStr);
207 else
208 {
209 SetLastError(ERROR_INSUFFICIENT_BUFFER);
210 *pLen=0;
211 return FALSE;
212 }
213 }
214
215 *pLen=lstrlenW(lpUniStr)+1; // + null terminator
216
217 return TRUE;
218}
219//replaced by Wine functions in ole2nls.c
220#if 0
221//******************************************************************************
222//******************************************************************************
223static BOOL LocaleFromUniChar(WCHAR wcUniChar, LPWSTR wbuf, ULONG *pLen)
224{
225 if (wbuf)
226 {
227// if (*pLen >= sizeof(WCHAR))
228 if (*pLen >= 2)
229 {
230 wbuf[0]=(WCHAR)'0'+wcUniChar;
231 wbuf[1]=0;
232 }
233 else
234 {
235 SetLastError(ERROR_INSUFFICIENT_BUFFER);
236 *pLen=0;
237 return FALSE;
238 }
239 }
240
241 *pLen=2;
242
243 return TRUE;
244}
245
246/*****************************************************************************
247 * Name : DWORD GetLocaleInfoW
248 * Purpose : The GetLocaleInfoW function returns specific locale information
249 * Parameters: LCID lcid locale identifier
250 * LCTYPE LCType type of information
251 * LPSTRW wbuf address of buffer for information
252 * int len size of buffer
253 * Variables :
254 * Result : size of target buffer
255 * Remark : In this version LOCALE_SYSTEM_DEFAULT == LOCALE_USER_DEFAULT
256 *
257 * LOCALE_STHOUSAND - with some languages returns OS/2 separator not Windows!
258 * LOCALE_IMEASURE - return '0' like English US
259 * LOCALE_INEGNUMBER - return '1' like English US
260 * LOCALE_ICURRDIGITS - return '2' like English US
261 * LOCALE_IDATE are identical as LOCALE_ILDATE (must be fixed?)
262 * LOCALE_SGROUPING and
263 * LOCALE_SMONGROUPING are tested only with Polish & English languages
264 * LOCALE_SMONTHNAME13 and
265 * LOCALE_SABBERVMONTHNAME13 - returns empty string like English US
266 * LOCALE_FONTSIGNATURE - return empty string like English US
267 *
268 * Status : FULLY TESTED
269 *
270 * Author : Przemyslaw Dobrowolski [Tue, 1999/07/22 17:07]
271 *****************************************************************************/
272int WIN32API GetLocaleInfoW(LCID lcid, LCTYPE LCType, LPWSTR wbuf,
273 int len)
274{
275 LocaleObject locale_object = NULL;
276 struct UniLconv *puni_lconv = NULL;
277 WCHAR *pInfoItem;
278 int rc;
279 COUNTRYCODE Country = {0};
280 COUNTRYINFO CtryInfo = {0};
281 ULONG ulInfoLen = 0;
282
283 dprintf(("KERNEL32: OS2GetLocaleInfoW lcID=%d,lcType=%x,wbuf=%X,len=%d\n",lcid,LCType,wbuf,len));
284
285 if (len && (! wbuf) )
286 {
287 SetLastError(ERROR_INSUFFICIENT_BUFFER);
288 return 0;
289 }
290
291 if (wbuf) *wbuf==0;
292
293 rc=UniCreateLocaleObject(UNI_UCS_STRING_POINTER,(UniChar *)L"", &locale_object);
294
295 if ( rc == ULS_SUCCESS )
296 {
297 UniQueryLocaleInfo(locale_object, &puni_lconv);
298
299 DosQueryCtryInfo(sizeof(COUNTRYINFO), &Country, &CtryInfo, &ulInfoLen);
300
301 ulInfoLen = len; // Now we use this variable as returned length info
302
303 LCType &= ~(LOCALE_NOUSEROVERRIDE|LOCALE_USE_CP_ACP);
304
305 switch(LCType)
306 {
307 case LOCALE_SDECIMAL:
308 LocaleFromUniStr(puni_lconv->decimal_point,wbuf,&ulInfoLen);
309 break;
310
311 case LOCALE_IMEASURE: // Fixme!
312 // only like English US
313 LocaleFromUniChar(0,wbuf,&ulInfoLen);
314 break;
315
316 case LOCALE_INEGNUMBER: // Fixme!
317 // only like English US
318 LocaleFromUniChar(1,wbuf,&ulInfoLen);
319 break;
320
321 case LOCALE_ICURRDIGITS:// Fixme!
322 // only like English US
323 LocaleFromUniChar(2,wbuf,&ulInfoLen);
324 break;
325
326 case LOCALE_STHOUSAND:
327 LocaleFromUniStr(puni_lconv->thousands_sep,wbuf,&ulInfoLen);
328 //MN: hack for Czech language; weird value returned here (0xA0 instead of 0x20)
329 if(defaultLanguage == CTRY_CZECH_REPUBLIC) {
330 ((BYTE*)wbuf)[0] = ((BYTE*)wbuf)[0] & 0x7F;
331 }
332 break;
333
334 case LOCALE_SGROUPING: // tested only with Polish & English
335 if (wbuf)
336 {
337 if (puni_lconv->grouping)
338 {
339 if (len >= 3*sizeof(WCHAR))
340 {
341 wbuf[0]='0'+*puni_lconv->grouping;
342 wbuf[1]=(WCHAR)';';
343 wbuf[2]=(WCHAR)'0';
344 wbuf[3]=0;
345 ulInfoLen=4;
346 }
347 else
348 {
349 SetLastError(ERROR_INSUFFICIENT_BUFFER);
350 break;
351 }
352 }
353 else
354 {
355 wbuf[0]=20; // Windows return space!!
356 ulInfoLen=2;
357 }
358 }
359 else
360 ulInfoLen=2;
361 break;
362
363 case LOCALE_SMONGROUPING: // tested only with Polish & English
364 if (wbuf)
365 {
366 if (puni_lconv->mon_grouping)
367 {
368 if (len >= 3*sizeof(WCHAR))
369 {
370 wbuf[0]='0'+*puni_lconv->mon_grouping;
371 wbuf[1]=(WCHAR)';';
372 wbuf[2]=(WCHAR)'0';
373 wbuf[3]=0;
374 ulInfoLen=4;
375 }
376 else
377 {
378 SetLastError(ERROR_INSUFFICIENT_BUFFER);
379 break;
380 }
381 }
382 else
383 {
384 wbuf[0]=20; // Windows return space!!
385 ulInfoLen=2;
386 }
387 }
388 else
389 ulInfoLen=2;
390 break;
391
392
393 case LOCALE_SCURRENCY:
394 LocaleFromUniStr(puni_lconv->currency_symbol,wbuf,&ulInfoLen);
395 break;
396
397 case LOCALE_SMONDECIMALSEP:
398 LocaleFromUniStr(puni_lconv->mon_decimal_point,wbuf,&ulInfoLen);
399 break;
400
401 case LOCALE_SMONTHOUSANDSEP:
402 LocaleFromUniStr(puni_lconv->mon_thousands_sep,wbuf,&ulInfoLen);
403 break;
404
405 case LOCALE_SPOSITIVESIGN:
406 LocaleFromUniStr(puni_lconv->positive_sign,wbuf,&ulInfoLen);
407 break;
408
409 case LOCALE_SNEGATIVESIGN:
410 LocaleFromUniStr(puni_lconv->negative_sign,wbuf,&ulInfoLen);
411 break;
412
413 case LOCALE_IPOSSIGNPOSN:
414 LocaleFromUniChar(puni_lconv->p_sign_posn,wbuf,&ulInfoLen);
415 break;
416
417 case LOCALE_INEGSIGNPOSN:
418 LocaleFromUniChar(puni_lconv->n_sign_posn,wbuf,&ulInfoLen);
419 break;
420
421 case LOCALE_IPOSSYMPRECEDES:
422 LocaleFromUniChar(puni_lconv->p_cs_precedes,wbuf,&ulInfoLen);
423 break;
424
425 case LOCALE_IPOSSEPBYSPACE:
426 LocaleFromUniChar(puni_lconv->p_sep_by_space,wbuf,&ulInfoLen);
427 break;
428
429 case LOCALE_INEGSYMPRECEDES:
430 LocaleFromUniChar(puni_lconv->n_cs_precedes,wbuf,&ulInfoLen);
431 break;
432
433 case LOCALE_INEGSEPBYSPACE:
434 LocaleFromUniChar(puni_lconv->n_sep_by_space,wbuf,&ulInfoLen);
435 break;
436
437 case LOCALE_S1159:
438 UniQueryLocaleItem(locale_object, AM_STR,&pInfoItem);
439 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
440 UniFreeMem(pInfoItem);
441 break;
442
443 case LOCALE_S2359:
444 UniQueryLocaleItem(locale_object, PM_STR,&pInfoItem);
445 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
446 UniFreeMem(pInfoItem);
447 break;
448
449 case LOCALE_IDEFAULTLANGUAGE:
450 strcpyW(wbuf, (LPWSTR)L"0409");
451 ulInfoLen = 5;
452 break;
453 case LOCALE_ILANGUAGE:
454 UniQueryLocaleItem(locale_object, XWINLOCALE,&pInfoItem);
455 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
456 UniFreeMem(pInfoItem);
457 break;
458
459 case LOCALE_INEGCURR:
460 UniQueryLocaleItem(locale_object, INEGCURR,&pInfoItem);
461 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
462 UniFreeMem(pInfoItem);
463 break;
464
465 case LOCALE_ICURRENCY:
466 UniQueryLocaleItem(locale_object, ICURRENCY,&pInfoItem);
467 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
468 UniFreeMem(pInfoItem);
469 break;
470
471
472
473 case LOCALE_SNATIVELANGNAME:
474 case LOCALE_SLANGUAGE:
475 UniQueryLocaleItem(locale_object, SLANGUAGE,&pInfoItem);
476 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
477 UniFreeMem(pInfoItem);
478 break;
479
480 case LOCALE_SABBREVLANGNAME:
481 UniQueryLocaleItem(locale_object, SABBREVLANGNAME,&pInfoItem);
482 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
483 UniFreeMem(pInfoItem);
484 break;
485
486 case LOCALE_IDEFAULTCOUNTRY:
487 case LOCALE_ICOUNTRY:
488 UniQueryLocaleItem(locale_object, ICOUNTRY,&pInfoItem);
489 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
490 UniFreeMem(pInfoItem);
491 break;
492
493 case LOCALE_SENGLANGUAGE:
494 UniQueryLocaleItem(locale_object, SENGLANGUAGE,&pInfoItem);
495 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
496 UniFreeMem(pInfoItem);
497 break;
498
499 case LOCALE_SENGCOUNTRY:
500 case LOCALE_SCOUNTRY:
501 UniQueryLocaleItem(locale_object, SENGCOUNTRYNAME,&pInfoItem);
502 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
503 UniFreeMem(pInfoItem);
504 break;
505
506 case LOCALE_SABBREVCTRYNAME:
507 UniQueryLocaleItem(locale_object, SABBREVCTRYNAME,&pInfoItem);
508 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
509 UniFreeMem(pInfoItem);
510 break;
511
512 case LOCALE_SNATIVECTRYNAME:
513 UniQueryLocaleItem(locale_object, SCOUNTRY,&pInfoItem);
514 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
515 UniFreeMem(pInfoItem);
516 break;
517
518 case LOCALE_SNATIVEDIGITS:
519 UniQueryLocaleItem(locale_object, SNATIVEDIGITS,&pInfoItem);
520 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
521 UniFreeMem(pInfoItem);
522 break;
523
524
525 case LOCALE_IDEFAULTCODEPAGE:
526 UniQueryLocaleItem(locale_object, ICODEPAGE,&pInfoItem);
527 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
528 UniFreeMem(pInfoItem);
529 break;
530
531 case LOCALE_IDEFAULTANSICODEPAGE:
532 UniQueryLocaleItem(locale_object, IANSICODEPAGE,&pInfoItem);
533 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
534 UniFreeMem(pInfoItem);
535 break;
536
537 case LOCALE_IDEFAULTMACCODEPAGE:
538 UniQueryLocaleItem(locale_object, IMACCODEPAGE,&pInfoItem);
539 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
540 UniFreeMem(pInfoItem);
541 break;
542
543 case LOCALE_SLIST:
544 UniQueryLocaleItem(locale_object, LISTSEP,&pInfoItem);
545 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
546 UniFreeMem(pInfoItem);
547 break;
548
549 case LOCALE_SINTLSYMBOL:
550 UniQueryLocaleItem(locale_object, SINTLSYMBOL,&pInfoItem);
551 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
552 UniFreeMem(pInfoItem);
553 break;
554
555 case LOCALE_IFIRSTDAYOFWEEK:
556 UniQueryLocaleItem(locale_object, IFIRSTDAYOFWEEK, &pInfoItem);
557 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
558 UniFreeMem(pInfoItem);
559 break;
560
561 case LOCALE_SDAYNAME7:
562 UniQueryLocaleItem(locale_object, DAY_1,&pInfoItem);
563 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
564 UniFreeMem(pInfoItem);
565 break;
566
567 case LOCALE_SDAYNAME1:
568 UniQueryLocaleItem(locale_object, DAY_2,&pInfoItem);
569 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
570 UniFreeMem(pInfoItem);
571 break;
572
573 case LOCALE_SDAYNAME2:
574 UniQueryLocaleItem(locale_object, DAY_3,&pInfoItem);
575 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
576 UniFreeMem(pInfoItem);
577 break;
578
579 case LOCALE_SDAYNAME3:
580 UniQueryLocaleItem(locale_object, DAY_4,&pInfoItem);
581 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
582 UniFreeMem(pInfoItem);
583 break;
584
585 case LOCALE_SDAYNAME4:
586 UniQueryLocaleItem(locale_object, DAY_5,&pInfoItem);
587 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
588 UniFreeMem(pInfoItem);
589 break;
590
591 case LOCALE_SDAYNAME5:
592 UniQueryLocaleItem(locale_object, DAY_6,&pInfoItem);
593 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
594 UniFreeMem(pInfoItem);
595 break;
596
597 case LOCALE_SDAYNAME6:
598 UniQueryLocaleItem(locale_object, DAY_7,&pInfoItem);
599 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
600 UniFreeMem(pInfoItem);
601 break;
602
603 case LOCALE_SABBREVDAYNAME7:
604 UniQueryLocaleItem(locale_object, ABDAY_1,&pInfoItem);
605 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
606 UniFreeMem(pInfoItem);
607 break;
608
609 case LOCALE_SABBREVDAYNAME1:
610 UniQueryLocaleItem(locale_object, ABDAY_2,&pInfoItem);
611 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
612 UniFreeMem(pInfoItem);
613 break;
614
615 case LOCALE_SABBREVDAYNAME2:
616 UniQueryLocaleItem(locale_object, ABDAY_3,&pInfoItem);
617 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
618 UniFreeMem(pInfoItem);
619 break;
620
621 case LOCALE_SABBREVDAYNAME3:
622 UniQueryLocaleItem(locale_object, ABDAY_4,&pInfoItem);
623 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
624 UniFreeMem(pInfoItem);
625 break;
626
627 case LOCALE_SABBREVDAYNAME4:
628 UniQueryLocaleItem(locale_object, ABDAY_5,&pInfoItem);
629 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
630 UniFreeMem(pInfoItem);
631 break;
632
633 case LOCALE_SABBREVDAYNAME5:
634 UniQueryLocaleItem(locale_object, ABDAY_6,&pInfoItem);
635 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
636 UniFreeMem(pInfoItem);
637 break;
638
639 case LOCALE_SABBREVDAYNAME6:
640 UniQueryLocaleItem(locale_object, ABDAY_7,&pInfoItem);
641 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
642 UniFreeMem(pInfoItem);
643 break;
644
645 case LOCALE_SMONTHNAME1:
646 UniQueryLocaleItem(locale_object, MON_1,&pInfoItem);
647 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
648 UniFreeMem(pInfoItem);
649 break;
650
651 case LOCALE_SMONTHNAME2:
652 UniQueryLocaleItem(locale_object, MON_2,&pInfoItem);
653 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
654 UniFreeMem(pInfoItem);
655 break;
656
657 case LOCALE_SMONTHNAME3:
658 UniQueryLocaleItem(locale_object, MON_3,&pInfoItem);
659 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
660 UniFreeMem(pInfoItem);
661 break;
662
663 case LOCALE_SMONTHNAME4:
664 UniQueryLocaleItem(locale_object, MON_4,&pInfoItem);
665 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
666 UniFreeMem(pInfoItem);
667 break;
668
669 case LOCALE_SMONTHNAME5:
670 UniQueryLocaleItem(locale_object, MON_5,&pInfoItem);
671 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
672 UniFreeMem(pInfoItem);
673 break;
674
675 case LOCALE_SMONTHNAME6:
676 UniQueryLocaleItem(locale_object, MON_6,&pInfoItem);
677 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
678 UniFreeMem(pInfoItem);
679 break;
680
681 case LOCALE_SMONTHNAME7:
682 UniQueryLocaleItem(locale_object, MON_7,&pInfoItem);
683 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
684 UniFreeMem(pInfoItem);
685 break;
686
687 case LOCALE_SMONTHNAME8:
688 UniQueryLocaleItem(locale_object, MON_8,&pInfoItem);
689 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
690 UniFreeMem(pInfoItem);
691 break;
692
693 case LOCALE_SMONTHNAME9:
694 UniQueryLocaleItem(locale_object, MON_9,&pInfoItem);
695 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
696 UniFreeMem(pInfoItem);
697 break;
698
699 case LOCALE_SMONTHNAME10:
700 UniQueryLocaleItem(locale_object, MON_10,&pInfoItem);
701 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
702 UniFreeMem(pInfoItem);
703 break;
704
705 case LOCALE_SMONTHNAME11:
706 UniQueryLocaleItem(locale_object, MON_11,&pInfoItem);
707 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
708 UniFreeMem(pInfoItem);
709 break;
710
711 case LOCALE_SMONTHNAME12:
712 UniQueryLocaleItem(locale_object, MON_12,&pInfoItem);
713 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
714 UniFreeMem(pInfoItem);
715 break;
716
717 case LOCALE_FONTSIGNATURE: // FixMe!!!
718 case LOCALE_SABBREVMONTHNAME13:
719 case LOCALE_SMONTHNAME13:
720 if(wbuf) {
721 *wbuf = 0;
722 }
723 LocaleFromUniStr((LPWSTR)L"\0",wbuf,&ulInfoLen);
724 break;
725
726 case LOCALE_SABBREVMONTHNAME1:
727 UniQueryLocaleItem(locale_object, ABMON_1,&pInfoItem);
728 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
729 UniFreeMem(pInfoItem);
730 break;
731
732 case LOCALE_SABBREVMONTHNAME2:
733 UniQueryLocaleItem(locale_object, ABMON_2,&pInfoItem);
734 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
735 UniFreeMem(pInfoItem);
736 break;
737
738 case LOCALE_SABBREVMONTHNAME3:
739 UniQueryLocaleItem(locale_object, ABMON_3,&pInfoItem);
740 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
741 UniFreeMem(pInfoItem);
742 break;
743
744 case LOCALE_SABBREVMONTHNAME4:
745 UniQueryLocaleItem(locale_object, ABMON_4,&pInfoItem);
746 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
747 UniFreeMem(pInfoItem);
748 break;
749
750 case LOCALE_SABBREVMONTHNAME5:
751 UniQueryLocaleItem(locale_object, ABMON_5,&pInfoItem);
752 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
753 UniFreeMem(pInfoItem);
754 break;
755
756 case LOCALE_SABBREVMONTHNAME6:
757 UniQueryLocaleItem(locale_object, ABMON_6,&pInfoItem);
758 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
759 UniFreeMem(pInfoItem);
760 break;
761
762 case LOCALE_SABBREVMONTHNAME7:
763 UniQueryLocaleItem(locale_object, ABMON_7,&pInfoItem);
764 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
765 UniFreeMem(pInfoItem);
766 break;
767
768 case LOCALE_SABBREVMONTHNAME8:
769 UniQueryLocaleItem(locale_object, ABMON_8,&pInfoItem);
770 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
771 UniFreeMem(pInfoItem);
772 break;
773
774 case LOCALE_SABBREVMONTHNAME9:
775 UniQueryLocaleItem(locale_object, ABMON_9,&pInfoItem);
776 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
777 UniFreeMem(pInfoItem);
778 break;
779
780 case LOCALE_SABBREVMONTHNAME10:
781 UniQueryLocaleItem(locale_object, ABMON_10,&pInfoItem);
782 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
783 UniFreeMem(pInfoItem);
784 break;
785
786 case LOCALE_SABBREVMONTHNAME11:
787 UniQueryLocaleItem(locale_object, ABMON_11,&pInfoItem);
788 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
789 UniFreeMem(pInfoItem);
790 break;
791
792 case LOCALE_SABBREVMONTHNAME12:
793 UniQueryLocaleItem(locale_object, ABMON_12,&pInfoItem);
794 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
795 UniFreeMem(pInfoItem);
796 break;
797
798 case LOCALE_SDATE:
799 UniQueryLocaleItem(locale_object, DATESEP,&pInfoItem);
800 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
801 UniFreeMem(pInfoItem);
802 break;
803
804 case LOCALE_STIME:
805 UniQueryLocaleItem(locale_object, TIMESEP,&pInfoItem);
806 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
807 UniFreeMem(pInfoItem);
808 break;
809
810 case LOCALE_IDATE:
811 case LOCALE_ILDATE:
812 LocaleFromUniChar(CtryInfo.fsDateFmt,wbuf,&ulInfoLen);
813 break;
814
815 case LOCALE_ITIME:
816 UniQueryLocaleItem(locale_object, TIMESEP,&pInfoItem);
817 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
818 UniFreeMem(pInfoItem);
819 break;
820
821 case LOCALE_SSHORTDATE:
822 UniQueryLocaleItem(locale_object, WSHORTDATE,&pInfoItem);
823 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
824 UniFreeMem(pInfoItem);
825 break;
826
827 case LOCALE_SLONGDATE:
828 UniQueryLocaleItem(locale_object, WLONGDATE,&pInfoItem);
829 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
830 UniFreeMem(pInfoItem);
831 break;
832
833
834 case LOCALE_STIMEFORMAT:
835 UniQueryLocaleItem(locale_object, WTIMEFORMAT,&pInfoItem);
836 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
837 UniFreeMem(pInfoItem);
838 break;
839
840 case LOCALE_SISO639LANGNAME:
841 UniQueryLocaleItem(locale_object, SISO639LANGNAME,&pInfoItem);
842 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
843 UniFreeMem(pInfoItem);
844 break;
845
846 case LOCALE_SISO3166CTRYNAME:
847 UniQueryLocaleItem(locale_object, SISO3166CTRYNAME,&pInfoItem);
848 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
849 UniFreeMem(pInfoItem);
850 break;
851
852 default:
853 dprintf(("KERNEL32: OS2GetLocaleInfoW: LCType %X not yet supported\n", LCType));
854 if (wbuf)
855 {
856 wbuf[0] = (WCHAR) '1';
857 wbuf[1] = 0;
858 }
859 ulInfoLen=2;
860 break;
861
862 }
863 UniFreeLocaleInfo(puni_lconv);
864 UniFreeLocaleObject(locale_object);
865 }
866 else
867 return (0);
868
869 dprintf(("KERNEL32: OS2GetLocaleInfoW returned %d\n",ulInfoLen));
870
871 return (ulInfoLen);
872}
873/*****************************************************************************
874 * Name : DWORD GetLocaleInfoA
875 * Purpose : The GetLocaleInfoA function returns specific locale information
876 * Parameters: LCID lcid locale identifier
877 * LCTYPE LCType type of information
878 * LPSTR buf address of buffer for information
879 * int len size of buffer
880 * Variables :
881 * Result : size of target buffer
882 * Remark : In this version LOCALE_SYSTEM_DEFAULT == LOCALE_USER_DEFAULT
883 * look into GetLocaleInfoW
884 *
885 * Status : TESTED
886 *
887 * Author : Przemyslaw Dobrowolski [Tue, 1999/07/21 12:18]
888 *****************************************************************************/
889int WIN32API GetLocaleInfoA(LCID lcid, LCTYPE LCType, LPSTR buf, int len)
890{
891 LPWSTR lpWStr;
892 int ret_len;
893
894 if (len && (! buf) )
895 {
896 SetLastError(ERROR_INSUFFICIENT_BUFFER);
897 return 0;
898 }
899
900 dprintf(("KERNEL32: GetLocaleInfoA lcID=%d,lcType=%x,buf=%X,len=%d\n",lcid,LCType,buf,len));
901
902 if (buf)
903 lpWStr=(LPWSTR)malloc(len*(sizeof(WCHAR)));
904 else
905 lpWStr=NULL; // Query for buffer size
906
907 ret_len = CALL_ODINFUNC(GetLocaleInfoW)(lcid, LCType, lpWStr, len);
908
909 if (ret_len && buf)
910 UnicodeToAscii(lpWStr,buf);
911
912 if (lpWStr) free(lpWStr); // free prevooisly allocated memory
913
914 dprintf(("KERNEL32: GetLocaleInfoA returned %d -> %s",ret_len, (ret_len) ? buf : NULL));
915
916 return (ret_len);
917}
918#endif
919//******************************************************************************
920//******************************************************************************
921LCID WIN32API GetThreadLocale()
922{
923 TEB *teb = GetThreadTEB();
924
925 if(teb == NULL) {
926 dprintf(("KERNEL32: ERROR: GetThreadLocale teb == NULL!"));
927 return FALSE;
928 }
929 dprintf(("KERNEL32: GetThreadLocale returned %x", teb->o.odin.lcid));
930 return(teb->o.odin.lcid);
931}
932//******************************************************************************
933//******************************************************************************
934BOOL WIN32API SetThreadLocale(LCID locale)
935{
936 TEB *teb = GetThreadTEB();
937
938 if(teb == NULL) {
939 dprintf(("KERNEL32: ERROR SetThreadLocale teb == NULL!"));
940 return FALSE;
941 }
942 dprintf(("KERNEL32: SetThreadLocale %x", locale));
943 teb->o.odin.lcid = locale;
944 return(TRUE);
945}
946//******************************************************************************
947//******************************************************************************
Note: See TracBrowser for help on using the repository browser.