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

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

Compilation fixes

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