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

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

* empty log message *

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