source: trunk/src/kernel32/old/lang.cpp@ 955

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

Backup copy of old kernel32

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