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

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

Added support for Russian country code

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