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

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

customization updates

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