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

Last change on this file since 2803 was 2803, checked in by sandervl, 26 years ago

Added new logging feature

File size: 31.1 KB
Line 
1/* $Id: lang.cpp,v 1.17 2000-02-16 14:27:07 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 * Project Odin Software License can be found in LICENSE.TXT
10 *
11 */
12#include <os2win.h>
13#include <winnls.h>
14#include <stdlib.h>
15#include <stdio.h>
16#include <string.h>
17#include <odinwrap.h>
18#include <heapstring.h>
19#include <win\winreg.h>
20#include <winos2def.h>
21#include "unicode.h"
22
23#define DBG_LOCALLOG DBG_lang
24#include "dbglocal.h"
25
26ODINDEBUGCHANNEL(KERNEL32-LANG)
27
28
29//******************************************************************************
30//******************************************************************************
31BOOL WIN32API IsValidCodePage(UINT CodePage)
32{
33 dprintf(("KERNEL32: IsValidCodePage %d not implemented", CodePage));
34 return(TRUE);
35}
36//******************************************************************************
37//******************************************************************************
38LCID WIN32API GetUserDefaultLCID(void)
39{
40 dprintf(("KERNEL32: OS2GetUserDefaultLCID: always retuns US English!\n"));
41 return(0x409); //US English
42}
43//******************************************************************************
44//******************************************************************************
45LCID WIN32API GetSystemDefaultLCID(void)
46{
47 dprintf(("KERNEL32: OS2GetSystemDefaultLCID: always retuns US English!\n"));
48 return(0x409); //US English
49}
50//******************************************************************************
51//******************************************************************************
52LANGID WIN32API GetUserDefaultLangID()
53{
54 dprintf(("KERNEL32: OS2GetUserDefaultLangID, always returns US English\n"));
55 return(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
56}
57//******************************************************************************
58//******************************************************************************
59LANGID WIN32API GetSystemDefaultLangID(void)
60{
61 dprintf(("KERNEL32: OS2GetSystemDefaultLangID, always returns US English\n"));
62 return(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
63}
64
65//******************************************************************************
66//******************************************************************************
67static BOOL LocaleFromUniStr(LPWSTR lpUniStr, LPWSTR wbuf, ULONG *pLen)
68{
69 if (wbuf)
70 {
71 if (*pLen > UniStrlen(lpUniStr))
72 UniStrcpy(wbuf,lpUniStr);
73 else
74 {
75 SetLastError(ERROR_INSUFFICIENT_BUFFER);
76 *pLen=0;
77 return FALSE;
78 }
79 }
80
81 *pLen=UniStrlen(lpUniStr)+1; // + null terminator
82
83 return TRUE;
84}
85//******************************************************************************
86//******************************************************************************
87static BOOL LocaleFromUniChar(WCHAR wcUniChar, LPWSTR wbuf, ULONG *pLen)
88{
89 if (wbuf)
90 {
91// if (*pLen > sizeof(WCHAR))
92 if (*pLen > 2)
93 {
94 wbuf[0]=(WCHAR)'0'+wcUniChar;
95 wbuf[1]=0;
96 }
97 else
98 {
99 SetLastError(ERROR_INSUFFICIENT_BUFFER);
100 *pLen=0;
101 return FALSE;
102 }
103 }
104
105 *pLen=2;
106
107 return TRUE;
108}
109
110/*****************************************************************************
111 * Name : DWORD GetLocaleInfoW
112 * Purpose : The GetLocaleInfoW function returns specific locale information
113 * Parameters: LCID lcid locale identifier
114 * LCTYPE LCType type of information
115 * LPSTRW wbuf address of buffer for information
116 * int len size of buffer
117 * Variables :
118 * Result : size of target buffer
119 * Remark : In this version LOCALE_SYSTEM_DEFAULT == LOCALE_USER_DEFAULT
120 *
121 * LOCALE_STHOUSAND - with some languages returns OS/2 separator not Windows!
122 * LOCALE_IMEASURE - return '0' like English US
123 * LOCALE_INEGNUMBER - return '1' like English US
124 * LOCALE_ICURRDIGITS - return '2' like English US
125 * LOCALE_IDATE are identical as LOCALE_ILDATE (must be fixed?)
126 * LOCALE_SGROUPING and
127 * LOCALE_SMONGROUPING are tested only with Polish & English languages
128 * LOCALE_SMONTHNAME13 and
129 * LOCALE_SABBERVMONTHNAME13 - returns empty string like English US
130 * LOCALE_FONTSIGNATURE - return empty string like English US
131 *
132 * Status : FULLY TESTED
133 *
134 * Author : Przemyslaw Dobrowolski [Tue, 1999/07/22 17:07]
135 *****************************************************************************/
136ODINFUNCTION4(int, GetLocaleInfoW, LCID, lcid, LCTYPE, LCType, LPWSTR, wbuf,
137 int, len)
138{
139 LocaleObject locale_object = NULL;
140 struct UniLconv *puni_lconv = NULL;
141 WCHAR *pInfoItem;
142 int rc;
143 COUNTRYCODE Country = {0};
144 COUNTRYINFO CtryInfo = {0};
145 ULONG ulInfoLen = 0;
146
147 dprintf(("KERNEL32: OS2GetLocaleInfoW lcID=%d,lcType=%x,wbuf=%X,len=%d\n",lcid,LCType,wbuf,len));
148
149 if (len && (! wbuf) )
150 {
151 SetLastError(ERROR_INSUFFICIENT_BUFFER);
152 return 0;
153 }
154
155 if (wbuf) *wbuf==0;
156
157 rc=UniCreateLocaleObject(UNI_UCS_STRING_POINTER,(UniChar *)L"", &locale_object);
158
159 if ( rc == ULS_SUCCESS )
160 {
161 UniQueryLocaleInfo(locale_object, &puni_lconv);
162
163 DosQueryCtryInfo(sizeof(COUNTRYINFO), &Country, &CtryInfo, &ulInfoLen);
164
165 ulInfoLen = len; // Now we use this variable as returned length info
166
167 LCType &= ~(LOCALE_NOUSEROVERRIDE|LOCALE_USE_CP_ACP);
168
169 switch(LCType)
170 {
171 case LOCALE_SDECIMAL:
172 LocaleFromUniStr(puni_lconv->decimal_point,wbuf,&ulInfoLen);
173 break;
174
175 case LOCALE_IMEASURE: // Fixme!
176 // only like English US
177 LocaleFromUniChar(0,wbuf,&ulInfoLen);
178 break;
179
180 case LOCALE_INEGNUMBER: // Fixme!
181 // only like English US
182 LocaleFromUniChar(1,wbuf,&ulInfoLen);
183 break;
184
185 case LOCALE_ICURRDIGITS:// Fixme!
186 // only like English US
187 LocaleFromUniChar(2,wbuf,&ulInfoLen);
188 break;
189
190 case LOCALE_STHOUSAND:
191 LocaleFromUniStr(puni_lconv->thousands_sep,wbuf,&ulInfoLen);
192 break;
193
194 case LOCALE_SGROUPING: // tested only with Polish & English
195 if (wbuf)
196 {
197 if (puni_lconv->grouping)
198 {
199 if (len >= 3*sizeof(WCHAR))
200 {
201 wbuf[0]='0'+*puni_lconv->grouping;
202 wbuf[1]=(WCHAR)';';
203 wbuf[2]=(WCHAR)'0';
204 wbuf[3]=0;
205 ulInfoLen=4;
206 }
207 else
208 {
209 SetLastError(ERROR_INSUFFICIENT_BUFFER);
210 break;
211 }
212 }
213 else
214 {
215 wbuf[0]=20; // Windows return space!!
216 ulInfoLen=2;
217 }
218 }
219 else
220 ulInfoLen=2;
221 break;
222
223 case LOCALE_SMONGROUPING: // tested only with Polish & English
224 if (wbuf)
225 {
226 if (puni_lconv->mon_grouping)
227 {
228 if (len >= 3*sizeof(WCHAR))
229 {
230 wbuf[0]='0'+*puni_lconv->mon_grouping;
231 wbuf[1]=(WCHAR)';';
232 wbuf[2]=(WCHAR)'0';
233 wbuf[3]=0;
234 ulInfoLen=4;
235 }
236 else
237 {
238 SetLastError(ERROR_INSUFFICIENT_BUFFER);
239 break;
240 }
241 }
242 else
243 {
244 wbuf[0]=20; // Windows return space!!
245 ulInfoLen=2;
246 }
247 }
248 else
249 ulInfoLen=2;
250 break;
251
252
253 case LOCALE_SCURRENCY:
254 LocaleFromUniStr(puni_lconv->currency_symbol,wbuf,&ulInfoLen);
255 break;
256
257 case LOCALE_SMONDECIMALSEP:
258 LocaleFromUniStr(puni_lconv->mon_decimal_point,wbuf,&ulInfoLen);
259 break;
260
261 case LOCALE_SMONTHOUSANDSEP:
262 LocaleFromUniStr(puni_lconv->mon_thousands_sep,wbuf,&ulInfoLen);
263 break;
264
265 case LOCALE_SPOSITIVESIGN:
266 LocaleFromUniStr(puni_lconv->positive_sign,wbuf,&ulInfoLen);
267 break;
268
269 case LOCALE_SNEGATIVESIGN:
270 LocaleFromUniStr(puni_lconv->negative_sign,wbuf,&ulInfoLen);
271 break;
272
273 case LOCALE_IPOSSIGNPOSN:
274 LocaleFromUniChar(puni_lconv->p_sign_posn,wbuf,&ulInfoLen);
275 break;
276
277 case LOCALE_INEGSIGNPOSN:
278 LocaleFromUniChar(puni_lconv->n_sign_posn,wbuf,&ulInfoLen);
279 break;
280
281 case LOCALE_IPOSSYMPRECEDES:
282 LocaleFromUniChar(puni_lconv->p_cs_precedes,wbuf,&ulInfoLen);
283 break;
284
285 case LOCALE_IPOSSEPBYSPACE:
286 LocaleFromUniChar(puni_lconv->p_sep_by_space,wbuf,&ulInfoLen);
287 break;
288
289 case LOCALE_INEGSYMPRECEDES:
290 LocaleFromUniChar(puni_lconv->n_cs_precedes,wbuf,&ulInfoLen);
291 break;
292
293 case LOCALE_INEGSEPBYSPACE:
294 LocaleFromUniChar(puni_lconv->n_sep_by_space,wbuf,&ulInfoLen);
295 break;
296
297 case LOCALE_S1159:
298 UniQueryLocaleItem(locale_object, AM_STR,&pInfoItem);
299 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
300 UniFreeMem(pInfoItem);
301 break;
302
303 case LOCALE_S2359:
304 UniQueryLocaleItem(locale_object, PM_STR,&pInfoItem);
305 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
306 UniFreeMem(pInfoItem);
307 break;
308
309 case LOCALE_IDEFAULTLANGUAGE:
310 case LOCALE_ILANGUAGE:
311 UniQueryLocaleItem(locale_object, XWINLOCALE,&pInfoItem);
312 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
313 UniFreeMem(pInfoItem);
314 break;
315
316 case LOCALE_INEGCURR:
317 UniQueryLocaleItem(locale_object, INEGCURR,&pInfoItem);
318 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
319 UniFreeMem(pInfoItem);
320 break;
321
322 case LOCALE_ICURRENCY:
323 UniQueryLocaleItem(locale_object, ICURRENCY,&pInfoItem);
324 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
325 UniFreeMem(pInfoItem);
326 break;
327
328
329
330 case LOCALE_SNATIVELANGNAME:
331 case LOCALE_SLANGUAGE:
332 UniQueryLocaleItem(locale_object, SLANGUAGE,&pInfoItem);
333 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
334 UniFreeMem(pInfoItem);
335 break;
336
337 case LOCALE_SABBREVLANGNAME:
338 UniQueryLocaleItem(locale_object, SABBREVLANGNAME,&pInfoItem);
339 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
340 UniFreeMem(pInfoItem);
341 break;
342
343 case LOCALE_IDEFAULTCOUNTRY:
344 case LOCALE_ICOUNTRY:
345 UniQueryLocaleItem(locale_object, ICOUNTRY,&pInfoItem);
346 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
347 UniFreeMem(pInfoItem);
348 break;
349
350 case LOCALE_SENGLANGUAGE:
351 UniQueryLocaleItem(locale_object, SENGLANGUAGE,&pInfoItem);
352 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
353 UniFreeMem(pInfoItem);
354 break;
355
356 case LOCALE_SENGCOUNTRY:
357 case LOCALE_SCOUNTRY:
358 UniQueryLocaleItem(locale_object, SENGCOUNTRYNAME,&pInfoItem);
359 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
360 UniFreeMem(pInfoItem);
361 break;
362
363 case LOCALE_SABBREVCTRYNAME:
364 UniQueryLocaleItem(locale_object, SABBREVCTRYNAME,&pInfoItem);
365 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
366 UniFreeMem(pInfoItem);
367 break;
368
369 case LOCALE_SNATIVECTRYNAME:
370 UniQueryLocaleItem(locale_object, SCOUNTRY,&pInfoItem);
371 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
372 UniFreeMem(pInfoItem);
373 break;
374
375 case LOCALE_SNATIVEDIGITS:
376 UniQueryLocaleItem(locale_object, SNATIVEDIGITS,&pInfoItem);
377 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
378 UniFreeMem(pInfoItem);
379 break;
380
381
382 case LOCALE_IDEFAULTCODEPAGE:
383 UniQueryLocaleItem(locale_object, ICODEPAGE,&pInfoItem);
384 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
385 UniFreeMem(pInfoItem);
386 break;
387
388 case LOCALE_IDEFAULTANSICODEPAGE:
389 UniQueryLocaleItem(locale_object, IANSICODEPAGE,&pInfoItem);
390 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
391 UniFreeMem(pInfoItem);
392 break;
393
394 case LOCALE_IDEFAULTMACCODEPAGE:
395 UniQueryLocaleItem(locale_object, IMACCODEPAGE,&pInfoItem);
396 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
397 UniFreeMem(pInfoItem);
398 break;
399
400 case LOCALE_SLIST:
401 UniQueryLocaleItem(locale_object, LISTSEP,&pInfoItem);
402 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
403 UniFreeMem(pInfoItem);
404 break;
405
406 case LOCALE_SINTLSYMBOL:
407 UniQueryLocaleItem(locale_object, SINTLSYMBOL,&pInfoItem);
408 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
409 UniFreeMem(pInfoItem);
410 break;
411
412 case LOCALE_SDAYNAME7:
413 UniQueryLocaleItem(locale_object, DAY_1,&pInfoItem);
414 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
415 UniFreeMem(pInfoItem);
416 break;
417
418 case LOCALE_SDAYNAME1:
419 UniQueryLocaleItem(locale_object, DAY_2,&pInfoItem);
420 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
421 UniFreeMem(pInfoItem);
422 break;
423
424 case LOCALE_SDAYNAME2:
425 UniQueryLocaleItem(locale_object, DAY_3,&pInfoItem);
426 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
427 UniFreeMem(pInfoItem);
428 break;
429
430 case LOCALE_SDAYNAME3:
431 UniQueryLocaleItem(locale_object, DAY_4,&pInfoItem);
432 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
433 UniFreeMem(pInfoItem);
434 break;
435
436 case LOCALE_SDAYNAME4:
437 UniQueryLocaleItem(locale_object, DAY_5,&pInfoItem);
438 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
439 UniFreeMem(pInfoItem);
440 break;
441
442 case LOCALE_SDAYNAME5:
443 UniQueryLocaleItem(locale_object, DAY_6,&pInfoItem);
444 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
445 UniFreeMem(pInfoItem);
446 break;
447
448 case LOCALE_SDAYNAME6:
449 UniQueryLocaleItem(locale_object, DAY_7,&pInfoItem);
450 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
451 UniFreeMem(pInfoItem);
452 break;
453
454 case LOCALE_SABBREVDAYNAME7:
455 UniQueryLocaleItem(locale_object, ABDAY_1,&pInfoItem);
456 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
457 UniFreeMem(pInfoItem);
458 break;
459
460 case LOCALE_SABBREVDAYNAME1:
461 UniQueryLocaleItem(locale_object, ABDAY_2,&pInfoItem);
462 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
463 UniFreeMem(pInfoItem);
464 break;
465
466 case LOCALE_SABBREVDAYNAME2:
467 UniQueryLocaleItem(locale_object, ABDAY_3,&pInfoItem);
468 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
469 UniFreeMem(pInfoItem);
470 break;
471
472 case LOCALE_SABBREVDAYNAME3:
473 UniQueryLocaleItem(locale_object, ABDAY_4,&pInfoItem);
474 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
475 UniFreeMem(pInfoItem);
476 break;
477
478 case LOCALE_SABBREVDAYNAME4:
479 UniQueryLocaleItem(locale_object, ABDAY_5,&pInfoItem);
480 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
481 UniFreeMem(pInfoItem);
482 break;
483
484 case LOCALE_SABBREVDAYNAME5:
485 UniQueryLocaleItem(locale_object, ABDAY_6,&pInfoItem);
486 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
487 UniFreeMem(pInfoItem);
488 break;
489
490 case LOCALE_SABBREVDAYNAME6:
491 UniQueryLocaleItem(locale_object, ABDAY_7,&pInfoItem);
492 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
493 UniFreeMem(pInfoItem);
494 break;
495
496 case LOCALE_SMONTHNAME1:
497 UniQueryLocaleItem(locale_object, MON_1,&pInfoItem);
498 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
499 UniFreeMem(pInfoItem);
500 break;
501
502 case LOCALE_SMONTHNAME2:
503 UniQueryLocaleItem(locale_object, MON_2,&pInfoItem);
504 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
505 UniFreeMem(pInfoItem);
506 break;
507
508 case LOCALE_SMONTHNAME3:
509 UniQueryLocaleItem(locale_object, MON_3,&pInfoItem);
510 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
511 UniFreeMem(pInfoItem);
512 break;
513
514 case LOCALE_SMONTHNAME4:
515 UniQueryLocaleItem(locale_object, MON_4,&pInfoItem);
516 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
517 UniFreeMem(pInfoItem);
518 break;
519
520 case LOCALE_SMONTHNAME5:
521 UniQueryLocaleItem(locale_object, MON_5,&pInfoItem);
522 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
523 UniFreeMem(pInfoItem);
524 break;
525
526 case LOCALE_SMONTHNAME6:
527 UniQueryLocaleItem(locale_object, MON_6,&pInfoItem);
528 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
529 UniFreeMem(pInfoItem);
530 break;
531
532 case LOCALE_SMONTHNAME7:
533 UniQueryLocaleItem(locale_object, MON_7,&pInfoItem);
534 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
535 UniFreeMem(pInfoItem);
536 break;
537
538 case LOCALE_SMONTHNAME8:
539 UniQueryLocaleItem(locale_object, MON_8,&pInfoItem);
540 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
541 UniFreeMem(pInfoItem);
542 break;
543
544 case LOCALE_SMONTHNAME9:
545 UniQueryLocaleItem(locale_object, MON_9,&pInfoItem);
546 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
547 UniFreeMem(pInfoItem);
548 break;
549
550 case LOCALE_SMONTHNAME10:
551 UniQueryLocaleItem(locale_object, MON_10,&pInfoItem);
552 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
553 UniFreeMem(pInfoItem);
554 break;
555
556 case LOCALE_SMONTHNAME11:
557 UniQueryLocaleItem(locale_object, MON_11,&pInfoItem);
558 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
559 UniFreeMem(pInfoItem);
560 break;
561
562 case LOCALE_SMONTHNAME12:
563 UniQueryLocaleItem(locale_object, MON_12,&pInfoItem);
564 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
565 UniFreeMem(pInfoItem);
566 break;
567
568 case LOCALE_FONTSIGNATURE: // FixMe!!!
569 case LOCALE_SABBREVMONTHNAME13:
570 case LOCALE_SMONTHNAME13:
571 LocaleFromUniStr((LPWSTR)L"\0",wbuf,&ulInfoLen);
572 break;
573
574 case LOCALE_SABBREVMONTHNAME1:
575 UniQueryLocaleItem(locale_object, ABMON_1,&pInfoItem);
576 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
577 UniFreeMem(pInfoItem);
578 break;
579
580 case LOCALE_SABBREVMONTHNAME2:
581 UniQueryLocaleItem(locale_object, ABMON_2,&pInfoItem);
582 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
583 UniFreeMem(pInfoItem);
584 break;
585
586 case LOCALE_SABBREVMONTHNAME3:
587 UniQueryLocaleItem(locale_object, ABMON_3,&pInfoItem);
588 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
589 UniFreeMem(pInfoItem);
590 break;
591
592 case LOCALE_SABBREVMONTHNAME4:
593 UniQueryLocaleItem(locale_object, ABMON_4,&pInfoItem);
594 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
595 UniFreeMem(pInfoItem);
596 break;
597
598 case LOCALE_SABBREVMONTHNAME5:
599 UniQueryLocaleItem(locale_object, ABMON_5,&pInfoItem);
600 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
601 UniFreeMem(pInfoItem);
602 break;
603
604 case LOCALE_SABBREVMONTHNAME6:
605 UniQueryLocaleItem(locale_object, ABMON_6,&pInfoItem);
606 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
607 UniFreeMem(pInfoItem);
608 break;
609
610 case LOCALE_SABBREVMONTHNAME7:
611 UniQueryLocaleItem(locale_object, ABMON_7,&pInfoItem);
612 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
613 UniFreeMem(pInfoItem);
614 break;
615
616 case LOCALE_SABBREVMONTHNAME8:
617 UniQueryLocaleItem(locale_object, ABMON_8,&pInfoItem);
618 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
619 UniFreeMem(pInfoItem);
620 break;
621
622 case LOCALE_SABBREVMONTHNAME9:
623 UniQueryLocaleItem(locale_object, ABMON_9,&pInfoItem);
624 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
625 UniFreeMem(pInfoItem);
626 break;
627
628 case LOCALE_SABBREVMONTHNAME10:
629 UniQueryLocaleItem(locale_object, ABMON_10,&pInfoItem);
630 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
631 UniFreeMem(pInfoItem);
632 break;
633
634 case LOCALE_SABBREVMONTHNAME11:
635 UniQueryLocaleItem(locale_object, ABMON_11,&pInfoItem);
636 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
637 UniFreeMem(pInfoItem);
638 break;
639
640 case LOCALE_SABBREVMONTHNAME12:
641 UniQueryLocaleItem(locale_object, ABMON_12,&pInfoItem);
642 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
643 UniFreeMem(pInfoItem);
644 break;
645
646 case LOCALE_SDATE:
647 UniQueryLocaleItem(locale_object, DATESEP,&pInfoItem);
648 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
649 UniFreeMem(pInfoItem);
650 break;
651
652 case LOCALE_STIME:
653 UniQueryLocaleItem(locale_object, TIMESEP,&pInfoItem);
654 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
655 UniFreeMem(pInfoItem);
656 break;
657
658 case LOCALE_IDATE:
659 case LOCALE_ILDATE:
660 LocaleFromUniChar(CtryInfo.fsDateFmt,wbuf,&ulInfoLen);
661 break;
662
663 case LOCALE_ITIME:
664 UniQueryLocaleItem(locale_object, TIMESEP,&pInfoItem);
665 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
666 UniFreeMem(pInfoItem);
667 break;
668
669 case LOCALE_SSHORTDATE:
670 UniQueryLocaleItem(locale_object, WSHORTDATE,&pInfoItem);
671 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
672 UniFreeMem(pInfoItem);
673 break;
674
675 case LOCALE_SLONGDATE:
676 UniQueryLocaleItem(locale_object, WLONGDATE,&pInfoItem);
677 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
678 UniFreeMem(pInfoItem);
679 break;
680
681
682 case LOCALE_STIMEFORMAT:
683 UniQueryLocaleItem(locale_object, WTIMEFORMAT,&pInfoItem);
684 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
685 UniFreeMem(pInfoItem);
686 break;
687
688 case LOCALE_SISO639LANGNAME:
689 UniQueryLocaleItem(locale_object, SISO639LANGNAME,&pInfoItem);
690 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
691 UniFreeMem(pInfoItem);
692 break;
693
694 case LOCALE_SISO3166CTRYNAME:
695 UniQueryLocaleItem(locale_object, SISO3166CTRYNAME,&pInfoItem);
696 LocaleFromUniStr(pInfoItem,wbuf,&ulInfoLen);
697 UniFreeMem(pInfoItem);
698 break;
699
700 default:
701 dprintf(("KERNEL32: OS2GetLocaleInfoW: LCType %X not yet supported\n", LCType));
702 if (wbuf)
703 {
704 wbuf[0] = (WCHAR) '1';
705 wbuf[1] = 0;
706 }
707 ulInfoLen=2;
708 break;
709
710 }
711 UniFreeLocaleInfo(puni_lconv);
712 UniFreeLocaleObject(locale_object);
713 }
714 else
715 return (0);
716
717 dprintf(("KERNEL32: OS2GetLocaleInfoW returned %d\n",ulInfoLen));
718
719 return (ulInfoLen);
720}
721/*****************************************************************************
722 * Name : DWORD GetLocaleInfoA
723 * Purpose : The GetLocaleInfoA function returns specific locale information
724 * Parameters: LCID lcid locale identifier
725 * LCTYPE LCType type of information
726 * LPSTR buf address of buffer for information
727 * int len size of buffer
728 * Variables :
729 * Result : size of target buffer
730 * Remark : In this version LOCALE_SYSTEM_DEFAULT == LOCALE_USER_DEFAULT
731 * look into GetLocaleInfoW
732 *
733 * Status : TESTED
734 *
735 * Author : Przemyslaw Dobrowolski [Tue, 1999/07/21 12:18]
736 *****************************************************************************/
737ODINFUNCTION4(int, GetLocaleInfoA, LCID, lcid, LCTYPE, LCType, LPSTR, buf,
738 int, len)
739{
740 LPWSTR lpWStr;
741 int ret_len;
742
743 if (len && (! buf) )
744 {
745 SetLastError(ERROR_INSUFFICIENT_BUFFER);
746 return 0;
747 }
748
749 dprintf(("KERNEL32: OS2GetLocaleInfoA lcID=%d,lcType=%x,buf=%X,len=%d\n",lcid,LCType,buf,len));
750
751 if (buf)
752 lpWStr=(LPWSTR)malloc(len*(sizeof(WCHAR)));
753 else
754 lpWStr=NULL; // Query for buffer size
755
756 ret_len = ODIN_GetLocaleInfoW(lcid, LCType, lpWStr, len);
757
758 if (ret_len && buf)
759 {
760 UnicodeToAscii(lpWStr,buf);
761 free(lpWStr);
762 }
763
764 dprintf(("KERNEL32: OS2GetLocaleInfoA returned %d\n",ret_len));
765
766 return (ret_len);
767}
768//******************************************************************************
769//******************************************************************************
770BOOL WIN32API IsValidLocale(LCID Locale, DWORD dwFlags)
771{
772 dprintf(("KERNEL32: OS2IsValidLocale, always returns TRUE\n"));
773 return(TRUE);
774}
775//******************************************************************************
776//******************************************************************************
777LCID WIN32API GetThreadLocale()
778{
779 dprintf(("KERNEL32: OS2GetThreadLocale always return US English!\n"));
780 return(0x409); //US English
781}
782//******************************************************************************
783//******************************************************************************
784//******************************************************************************
785BOOL WIN32API SetThreadLocale( LCID locale )
786{
787 dprintf(("KERNEL32: OS2SetThreadLocale not implemented!\n"));
788 return(TRUE);
789}
790//******************************************************************************
791//******************************************************************************
792BOOL WIN32API EnumSystemLocalesA(LOCALE_ENUMPROCA lpLocaleEnumProc,
793 DWORD dwFlags)
794{
795 dprintf(("EnumSystemLocalesA %X %X\n", lpLocaleEnumProc, dwFlags));
796 if(lpLocaleEnumProc == NULL || ((dwFlags & LCID_INSTALLED) && (dwFlags & LCID_SUPPORTED))) {
797 dprintf(("Invalid parameter\n"));
798 SetLastError(ERROR_INVALID_PARAMETER);
799 return(FALSE);
800 }
801 lpLocaleEnumProc("OS/2 US English");
802 return(TRUE);
803}
804//******************************************************************************
805//******************************************************************************
806BOOL WIN32API EnumSystemLocalesW(LOCALE_ENUMPROCW lpLocaleEnumProc,
807 DWORD dwFlags)
808{
809 WCHAR locStr[32];
810
811 dprintf(("EnumSystemLocalesW %X %X\n", lpLocaleEnumProc, dwFlags));
812 if(lpLocaleEnumProc == NULL || ((dwFlags & LCID_INSTALLED) && (dwFlags & LCID_SUPPORTED))) {
813 dprintf(("Invalid parameter\n"));
814 SetLastError(ERROR_INVALID_PARAMETER);
815 return(FALSE);
816 }
817 AsciiToUnicode("OS/2 US English", locStr);
818 lpLocaleEnumProc(locStr);
819 return(TRUE);
820}
821//******************************************************************************
822//******************************************************************************
823
824
825/*****************************************************************************
826 * Name : BOOL SetLocaleInfoA
827 * Purpose : The SetLocaleInfoA function sets an item of locale information.
828 * It does so by making an entry in the process portion of the
829 * locale table. This setting only affects the user override portion
830 * of the locale settings; it does not set the system defaults.
831 * Only certain types of locale information, or LCTYPE values, can
832 * be set by this function. See the following Remarks section for a
833 * list of valid LCTYPE values.
834 * The locale information is always passed in as a null-terminated
835 * Unicode string in the Unicode (W) version of the function, and as
836 * a null-terminated ANSI string in the ANSI (A) version. No integers
837 * are allowed by this function; any numeric values must be specified
838 * as Unicode or ANSI text. Each LCTYPE has a particular format, as
839 * noted in Locale Identifiers.
840 * Parameters: LCID Locale locale identifier
841 * LCTYPE LCType type of information to set
842 * LPCTSTR lpLCData pointer to information to set
843 * Variables :
844 * Result : TRUE / FALSE
845 * Remark :
846 * Status : UNTESTED STUB
847 *
848 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
849 *****************************************************************************/
850
851BOOL WIN32API SetLocaleInfoA(LCID Locale,
852 LCTYPE LCType,
853 LPCSTR lpLCData)
854{
855 dprintf(("KERNEL32: SetLocaleInfoA(%08xh,%08xh,%08xh) not implemented.\n",
856 Locale,
857 LCType,
858 lpLCData));
859
860 return (FALSE);
861}
862
863
864/*****************************************************************************
865 * Name : BOOL SetLocaleInfoW
866 * Purpose : The SetLocaleInfoW function sets an item of locale information.
867 * It does so by making an entry in the process portion of the
868 * locale table. This setting only affects the user override portion
869 * of the locale settings; it does not set the system defaults.
870 * Only certain types of locale information, or LCTYPE values, can
871 * be set by this function. See the following Remarks section for a
872 * list of valid LCTYPE values.
873 * The locale information is always passed in as a null-terminated
874 * Unicode string in the Unicode (W) version of the function, and as
875 * a null-terminated ANSI string in the ANSI (A) version. No integers
876 * are allowed by this function; any numeric values must be specified
877 * as Unicode or ANSI text. Each LCTYPE has a particular format, as
878 * noted in Locale Identifiers.
879 * Parameters: LCID Locale locale identifier
880 * LCTYPE LCType type of information to set
881 * LPCTSTR lpLCData pointer to information to set
882 * Variables :
883 * Result : TRUE / FALSE
884 * Remark :
885 * Status : UNTESTED STUB
886 *
887 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
888 *****************************************************************************/
889
890BOOL WIN32API SetLocaleInfoW(LCID Locale,
891 LCTYPE LCType,
892 LPCWSTR lpLCData)
893{
894 dprintf(("KERNEL32: SetLocaleInfoW(%08xh,%08xh,%08xh) not implemented.\n",
895 Locale,
896 LCType,
897 lpLCData));
898
899 return (FALSE);
900}
901
902
903/*****************************************************************************
904 * Name :
905 * Purpose :
906 * Parameters:
907 * Variables :
908 * Result :
909 * Remark :
910 * Status : UNTESTED STUB
911 *
912 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
913 *****************************************************************************/
914
915ODINFUNCTION3(DWORD,VerLanguageNameA,DWORD, wLang,
916 LPSTR, szLang,
917 DWORD, nSize)
918{
919 char buffer[80];
920 LPCSTR name;
921 DWORD result;
922
923 /*
924 * First, check \System\CurrentControlSet\control\Nls\Locale\<langid>
925 * from the registry.
926 */
927
928#if 0
929PHS: disabled because if interlinkage with registry
930 sprintf( buffer,
931 "\\System\\CurrentControlSet\\control\\Nls\\Locale\\%08x",
932 wLang );
933
934 result = RegQueryValueA(HKEY_LOCAL_MACHINE,
935 buffer,
936 szLang,
937 (LPLONG)&nSize );
938 if (result == ERROR_SUCCESS ||
939 result == ERROR_MORE_DATA)
940 return nSize;
941#endif
942
943 /*
944 * If that fails, use the internal table
945 * (actually, Windows stores the names in a string table resource ...)
946 */
947
948 lstrcpynA(szLang,
949 "Language-Neutral",
950 nSize);
951
952 return strlen(szLang);
953}
954
955/*****************************************************************************
956 * Name :
957 * Purpose :
958 * Parameters:
959 * Variables :
960 * Result :
961 * Remark :
962 * Status : UNTESTED STUB
963 *
964 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
965 *****************************************************************************/
966
967ODINFUNCTION3(DWORD,VerLanguageNameW,DWORD, wLang,
968 LPWSTR, szLang,
969 DWORD, nSize)
970{
971 LPSTR szLangA;
972 DWORD rc;
973
974 if ( (szLang == NULL) ||
975 (nSize == 0) ) // validate parameters
976 return 0;
977
978 szLangA = (LPSTR)HEAP_malloc(nSize + 1);
979 rc = VerLanguageNameA(wLang,
980 szLangA,
981 nSize);
982 if (rc == ERROR_SUCCESS || rc == ERROR_MORE_DATA)
983 AsciiToUnicodeN(szLangA,
984 szLang,
985 nSize);
986 HEAP_free(szLangA);
987 return rc;
988}
989
990
Note: See TracBrowser for help on using the repository browser.