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

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

Przemysˆaw Dobrowolski GetLocaleInfoA/W changes

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