Release 980503
[wine/multimedia.git] / ole / ole2nls.c
blobec8d038844118bfff9bce592b3706026d5774d98
1 /*
2 * OLE2NLS library
4 * Copyright 1995 Martin von Loewis
5 * Copyright 1998 David Lee Lambert
6 */
8 #include <string.h>
9 #include <ctype.h>
10 #include <stdio.h>
11 #include <stdlib.h>
12 #include "windows.h"
13 #include "heap.h"
14 #include "ole.h"
15 #include "options.h"
16 #include "winnls.h"
17 #include "winreg.h"
18 #include "winerror.h"
19 #include "debug.h"
21 /* Locale name to id map. used by EnumSystemLocales, GetLocalInfoA
22 * MUST contain all #defines from winnls.h
23 * last entry has NULL name, 0 id.
24 */
25 #define LOCALE_ENTRY(x) {#x,LOCALE_##x}
26 static struct tagLOCALE_NAME2ID {
27 char *name;
28 DWORD id;
29 } locale_name2id[]= {
30 LOCALE_ENTRY(ILANGUAGE),
31 LOCALE_ENTRY(SLANGUAGE),
32 LOCALE_ENTRY(SENGLANGUAGE),
33 LOCALE_ENTRY(SABBREVLANGNAME),
34 LOCALE_ENTRY(SNATIVELANGNAME),
35 LOCALE_ENTRY(ICOUNTRY),
36 LOCALE_ENTRY(SCOUNTRY),
37 LOCALE_ENTRY(SENGCOUNTRY),
38 LOCALE_ENTRY(SABBREVCTRYNAME),
39 LOCALE_ENTRY(SNATIVECTRYNAME),
40 LOCALE_ENTRY(IDEFAULTLANGUAGE),
41 LOCALE_ENTRY(IDEFAULTCOUNTRY),
42 LOCALE_ENTRY(IDEFAULTCODEPAGE),
43 LOCALE_ENTRY(IDEFAULTANSICODEPAGE),
44 LOCALE_ENTRY(SLIST),
45 LOCALE_ENTRY(IMEASURE),
46 LOCALE_ENTRY(SDECIMAL),
47 LOCALE_ENTRY(STHOUSAND),
48 LOCALE_ENTRY(SGROUPING),
49 LOCALE_ENTRY(IDIGITS),
50 LOCALE_ENTRY(ILZERO),
51 LOCALE_ENTRY(INEGNUMBER),
52 LOCALE_ENTRY(SNATIVEDIGITS),
53 LOCALE_ENTRY(SCURRENCY),
54 LOCALE_ENTRY(SINTLSYMBOL),
55 LOCALE_ENTRY(SMONDECIMALSEP),
56 LOCALE_ENTRY(SMONTHOUSANDSEP),
57 LOCALE_ENTRY(SMONGROUPING),
58 LOCALE_ENTRY(ICURRDIGITS),
59 LOCALE_ENTRY(IINTLCURRDIGITS),
60 LOCALE_ENTRY(ICURRENCY),
61 LOCALE_ENTRY(INEGCURR),
62 LOCALE_ENTRY(SDATE),
63 LOCALE_ENTRY(STIME),
64 LOCALE_ENTRY(SSHORTDATE),
65 LOCALE_ENTRY(SLONGDATE),
66 LOCALE_ENTRY(STIMEFORMAT),
67 LOCALE_ENTRY(IDATE),
68 LOCALE_ENTRY(ILDATE),
69 LOCALE_ENTRY(ITIME),
70 LOCALE_ENTRY(ITIMEMARKPOSN),
71 LOCALE_ENTRY(ICENTURY),
72 LOCALE_ENTRY(ITLZERO),
73 LOCALE_ENTRY(IDAYLZERO),
74 LOCALE_ENTRY(IMONLZERO),
75 LOCALE_ENTRY(S1159),
76 LOCALE_ENTRY(S2359),
77 LOCALE_ENTRY(ICALENDARTYPE),
78 LOCALE_ENTRY(IOPTIONALCALENDAR),
79 LOCALE_ENTRY(IFIRSTDAYOFWEEK),
80 LOCALE_ENTRY(IFIRSTWEEKOFYEAR),
81 LOCALE_ENTRY(SDAYNAME1),
82 LOCALE_ENTRY(SDAYNAME2),
83 LOCALE_ENTRY(SDAYNAME3),
84 LOCALE_ENTRY(SDAYNAME4),
85 LOCALE_ENTRY(SDAYNAME5),
86 LOCALE_ENTRY(SDAYNAME6),
87 LOCALE_ENTRY(SDAYNAME7),
88 LOCALE_ENTRY(SABBREVDAYNAME1),
89 LOCALE_ENTRY(SABBREVDAYNAME2),
90 LOCALE_ENTRY(SABBREVDAYNAME3),
91 LOCALE_ENTRY(SABBREVDAYNAME4),
92 LOCALE_ENTRY(SABBREVDAYNAME5),
93 LOCALE_ENTRY(SABBREVDAYNAME6),
94 LOCALE_ENTRY(SABBREVDAYNAME7),
95 LOCALE_ENTRY(SMONTHNAME1),
96 LOCALE_ENTRY(SMONTHNAME2),
97 LOCALE_ENTRY(SMONTHNAME3),
98 LOCALE_ENTRY(SMONTHNAME4),
99 LOCALE_ENTRY(SMONTHNAME5),
100 LOCALE_ENTRY(SMONTHNAME6),
101 LOCALE_ENTRY(SMONTHNAME7),
102 LOCALE_ENTRY(SMONTHNAME8),
103 LOCALE_ENTRY(SMONTHNAME9),
104 LOCALE_ENTRY(SMONTHNAME10),
105 LOCALE_ENTRY(SMONTHNAME11),
106 LOCALE_ENTRY(SMONTHNAME12),
107 LOCALE_ENTRY(SMONTHNAME13),
108 LOCALE_ENTRY(SABBREVMONTHNAME1),
109 LOCALE_ENTRY(SABBREVMONTHNAME2),
110 LOCALE_ENTRY(SABBREVMONTHNAME3),
111 LOCALE_ENTRY(SABBREVMONTHNAME4),
112 LOCALE_ENTRY(SABBREVMONTHNAME5),
113 LOCALE_ENTRY(SABBREVMONTHNAME6),
114 LOCALE_ENTRY(SABBREVMONTHNAME7),
115 LOCALE_ENTRY(SABBREVMONTHNAME8),
116 LOCALE_ENTRY(SABBREVMONTHNAME9),
117 LOCALE_ENTRY(SABBREVMONTHNAME10),
118 LOCALE_ENTRY(SABBREVMONTHNAME11),
119 LOCALE_ENTRY(SABBREVMONTHNAME12),
120 LOCALE_ENTRY(SABBREVMONTHNAME13),
121 LOCALE_ENTRY(SPOSITIVESIGN),
122 LOCALE_ENTRY(SNEGATIVESIGN),
123 LOCALE_ENTRY(IPOSSIGNPOSN),
124 LOCALE_ENTRY(INEGSIGNPOSN),
125 LOCALE_ENTRY(IPOSSYMPRECEDES),
126 LOCALE_ENTRY(IPOSSEPBYSPACE),
127 LOCALE_ENTRY(INEGSYMPRECEDES),
128 LOCALE_ENTRY(INEGSEPBYSPACE),
129 /* LOCALE_ENTRY(FONTSIGNATURE),*/
130 {NULL,0},
133 const struct map_lcid2str {
134 LCID langid;
135 const char *langname;
136 } languages[]={
137 {0x0401,"Arabisch"},
138 {0x0402,"Bulgarisch"},
139 {0x0403,"Katalanisch"},
140 {0x0404,"Traditionales Chinesisch"},
141 {0x0405,"Tschecisch"},
142 {0x0406,"Ddnisch"},
143 {0x0407,"Deutsch"},
144 {0x0408,"Griechisch"},
145 {0x0409,"Amerikanisches Englisch"},
146 {0x040A,"Kastilisches Spanisch"},
147 {0x040B,"Finnisch"},
148 {0x040C,"Franzvsisch"},
149 {0x040D,"Hebrdisch"},
150 {0x040E,"Ungarisch"},
151 {0x040F,"Isldndisch"},
152 {0x0410,"Italienisch"},
153 {0x0411,"Japanisch"},
154 {0x0412,"Koreanisch"},
155 {0x0413,"Niederldndisch"},
156 {0x0414,"Norwegisch-Bokmal"},
157 {0x0415,"Polnisch"},
158 {0x0416,"Brasilianisches Portugiesisch"},
159 {0x0417,"Rdtoromanisch"},
160 {0x0418,"Rumdnisch"},
161 {0x0419,"Russisch"},
162 {0x041A,"Kroatoserbisch (lateinisch)"},
163 {0x041B,"Slowenisch"},
164 {0x041C,"Albanisch"},
165 {0x041D,"Schwedisch"},
166 {0x041E,"Thai"},
167 {0x041F,"T|rkisch"},
168 {0x0420,"Urdu"},
169 {0x0421,"Bahasa"},
170 {0x0804,"Vereinfachtes Chinesisch"},
171 {0x0807,"Schweizerdeutsch"},
172 {0x0809,"Britisches Englisch"},
173 {0x080A,"Mexikanisches Spanisch"},
174 {0x080C,"Belgisches Franzvsisch"},
175 {0x0810,"Schweizerisches Italienisch"},
176 {0x0813,"Belgisches Niederldndisch"},
177 {0x0814,"Norgwegisch-Nynorsk"},
178 {0x0816,"Portugiesisch"},
179 {0x081A,"Serbokratisch (kyrillisch)"},
180 {0x0C1C,"Kanadisches Franzvsisch"},
181 {0x100C,"Schweizerisches Franzvsisch"},
182 {0x0000,"Unbekannt"},
185 /***********************************************************************
186 * GetUserDefaultLCID (OLE2NLS.1)
188 LCID WINAPI GetUserDefaultLCID()
190 /* Default sorting, neutral sublanguage */
191 switch(Options.language)
193 /* case LANG_Bu: return 0x02; */ /* Bulgarian */
194 /* case LANG_Ch: return 0x04; */ /* Chinese */
195 case LANG_Cz: return 0x05; /* Czech */
196 case LANG_Da: return 0x06; /* Danish */
197 case LANG_De: return 0x07; /* German */
198 /* case LANG_Gr: return 0x08; */ /* Greek */
199 case LANG_En: return 0x09; /* English */
200 case LANG_Es: return 0x0a; /* Spanish */
201 case LANG_Fi: return 0x0b; /* Finnish */
202 case LANG_Fr: return 0x0c; /* French */
203 case LANG_Hu: return 0x0e; /* Hungarian */
204 /* case LANG_Ic: return 0x0f; */ /* Icelandic */
205 case LANG_It: return 0x10; /* Italian */
206 /* case LANG_Jp: return 0x11; */ /* Japanese */
207 case LANG_Ko: return 0x12; /* Korean */
208 /* case LANG_Du: return 0x13; */ /* Dutch */
209 case LANG_No: return 0x14; /* Norwegian */
210 case LANG_Pl: return 0x15; /* Polish */
211 case LANG_Po: return 0x16; /* Portuguese */
212 /* case LANG_Ro: return 0x18; */ /* Romanian */
213 /* case LANG_Ru: return 0x19; */ /* Russian */
214 /* case LANG_Cr: return 0x1a; */ /* Croatian */
215 /* case LANG_Sl: return 0x1b; */ /* Slovak */
216 case LANG_Sw: return 0x1d; /* Swedish */
217 /* case LANG_Tu: return 0x1f; */ /* Turkish */
218 /* case LANG_Sv: return 0x24; */ /* Slovenian */
219 case LANG_Eo: return 0x25; /* Esperanto (not official) */
220 case LANG_Ca: return 0x26; /* Catalan */
222 default:
223 return 0x00; /* Neutral language */
227 /***********************************************************************
228 * GetSystemDefaultLCID (OLE2NLS.2)
230 LCID WINAPI GetSystemDefaultLCID()
232 return GetUserDefaultLCID();
235 /***********************************************************************
236 * GetUserDefaultLangID (OLE2NLS.3)
238 LANGID WINAPI GetUserDefaultLangID()
240 return (WORD)GetUserDefaultLCID();
243 /***********************************************************************
244 * GetSystemDefaultLangID (OLE2NLS.4)
246 LANGID WINAPI GetSystemDefaultLangID()
248 return GetUserDefaultLangID();
251 /***********************************************************************
252 * GetLocaleInfoA (OLE2NLS.5)
253 * Is the last parameter really WORD for Win16?
255 INT16 WINAPI GetLocaleInfo16(LCID lcid,LCTYPE LCType,LPSTR buf,INT16 len)
257 return GetLocaleInfo32A(lcid,LCType,buf,len);
260 INT32 WINAPI GetLocaleInfo32A(LCID lcid,LCTYPE LCType,LPSTR buf,INT32 len)
262 char *retString;
263 int found,i;
265 TRACE(ole,"(%8lX,%8lX,%p,%4X)\n",
266 lcid,LCType,buf,len);
268 LCType &= ~(LOCALE_NOUSEROVERRIDE|LOCALE_USE_CP_ACP);
270 /* As an option, we could obtain the value from win.ini.
271 This would not match the Wine compile-time option.
272 Also, not all identifiers are available from win.ini */
273 retString=0;
274 /* If we are through all of this, retLen should not be zero anymore.
275 If it is, the value is not supported */
276 i=0;
277 while (locale_name2id[i].name!=NULL) {
278 if (LCType == locale_name2id[i].id) {
279 retString = locale_name2id[i].name;
280 break;
282 i++;
284 if (!retString) {
285 WARN(ole,"Unkown LC type %lX\n",LCType);
286 return 0;
289 #define LOCVAL(type,value) case type:retString=value;break;
291 /* Now, the language specific definitions. They don't have to be
292 complete */
293 found=1;
294 switch(Options.language)
296 case LANG_De:
297 switch (LCType) {
298 /* This definitions apply to Germany only. Users in Austria
299 or Switzerland might want to modify them */
300 LOCVAL(LOCALE_ILANGUAGE,"9")
301 LOCVAL(LOCALE_SLANGUAGE,"Deutsch")
302 LOCVAL(LOCALE_SENGLANGUAGE,"German")
303 LOCVAL(LOCALE_SABBREVLANGNAME,"deu")
304 LOCVAL(LOCALE_SNATIVELANGNAME,"Deutsch")
305 LOCVAL(LOCALE_ICOUNTRY,"49")
306 LOCVAL(LOCALE_SCOUNTRY,"Deutschland")
307 LOCVAL(LOCALE_SENGCOUNTRY,"Deutschland")
308 LOCVAL(LOCALE_SABBREVCTRYNAME,"De")
309 LOCVAL(LOCALE_SNATIVECTRYNAME,"Deutschland")
310 LOCVAL(LOCALE_IDEFAULTLANGUAGE,"9")
311 LOCVAL(LOCALE_IDEFAULTCOUNTRY,"49")
312 LOCVAL(LOCALE_IDEFAULTCODEPAGE,"851")
313 /* Dunno
314 LOCVAL(LOCALE_IDEFAULTANSICODEPAGE)
316 LOCVAL(LOCALE_SLIST,";")
317 LOCVAL(LOCALE_IMEASURE,"0")
318 LOCVAL(LOCALE_SDECIMAL,",")
319 LOCVAL(LOCALE_STHOUSAND,".")
321 LOCVAL(LOCALE_SGROUPING)
323 LOCVAL(LOCALE_IDIGITS,"2")
324 LOCVAL(LOCALE_ILZERO,"1")
326 LOCVAL(LOCALE_INEGNUMBER)
327 Is this "0123456789" ??
328 LOCVAL(LOCALE_SNATIVEDIGITS)
330 LOCVAL(LOCALE_SCURRENCY,"DM")
332 LOCVAL(LOCALE_SINTLSYMBOL)
333 LOCVAL(LOCALE_SMONDECIMALSEP)
334 LOCVAL(LOCALE_SMONTHOUSANDSEP)
335 LOCVAL(LOCALE_SMONGROUPING)
337 LOCVAL(LOCALE_ICURRDIGITS,"2")
339 LOCVAL(LOCALE_IINTLCURRDIGITS)
341 LOCVAL(LOCALE_ICURRENCY,"3")
342 LOCVAL(LOCALE_INEGCURR,"8")
343 LOCVAL(LOCALE_SDATE,".")
344 LOCVAL(LOCALE_STIME,":")
345 LOCVAL(LOCALE_SSHORTDATE,"dd.MM.yyyy")
346 LOCVAL(LOCALE_SLONGDATE,"ddd, d. MMMM yyyy")
348 LOCVAL(LOCALE_STIMEFORMAT)
350 LOCVAL(LOCALE_IDATE,"1")
352 LOCVAL(LOCALE_ILDATE)
354 LOCVAL(LOCALE_ITIME,"1")
356 LOCVAL(LOCALE_ITIMEMARKPOSN)
357 LOCVAL(LOCALE_ICENTURY)
359 LOCVAL(LOCALE_ITLZERO,"1")
361 LOCVAL(LOCALE_IDAYLZERO)
362 LOCVAL(LOCALE_IMONLZERO)
363 LOCVAL(LOCALE_S1159)
364 LOCVAL(LOCALE_S2359)
365 LOCVAL(LOCALE_ICALENDARTYPE)
366 LOCVAL(LOCALE_IOPTIONALCALENDAR)
367 LOCVAL(LOCALE_IFIRSTDAYOFWEEK)
368 LOCVAL(LOCALE_IFIRSTWEEKOFYEAR)
370 LOCVAL(LOCALE_SDAYNAME1,"Montag")
371 LOCVAL(LOCALE_SDAYNAME2,"Dienstag")
372 LOCVAL(LOCALE_SDAYNAME3,"Mittwoch")
373 LOCVAL(LOCALE_SDAYNAME4,"Donnerstag")
374 LOCVAL(LOCALE_SDAYNAME5,"Freitag")
375 LOCVAL(LOCALE_SDAYNAME6,"Sonnabend")
376 LOCVAL(LOCALE_SDAYNAME7,"Sonntag")
377 LOCVAL(LOCALE_SABBREVDAYNAME1,"Mo")
378 LOCVAL(LOCALE_SABBREVDAYNAME2,"Di")
379 LOCVAL(LOCALE_SABBREVDAYNAME3,"Mi")
380 LOCVAL(LOCALE_SABBREVDAYNAME4,"Do")
381 LOCVAL(LOCALE_SABBREVDAYNAME5,"Fr")
382 LOCVAL(LOCALE_SABBREVDAYNAME6,"Sa")
383 LOCVAL(LOCALE_SABBREVDAYNAME7,"So")
384 LOCVAL(LOCALE_SMONTHNAME1,"Januar")
385 LOCVAL(LOCALE_SMONTHNAME2,"Februar")
386 LOCVAL(LOCALE_SMONTHNAME3,"März")
387 LOCVAL(LOCALE_SMONTHNAME4,"April")
388 LOCVAL(LOCALE_SMONTHNAME5,"Mai")
389 LOCVAL(LOCALE_SMONTHNAME6,"Juni")
390 LOCVAL(LOCALE_SMONTHNAME7,"Juli")
391 LOCVAL(LOCALE_SMONTHNAME8,"August")
392 LOCVAL(LOCALE_SMONTHNAME9,"September")
393 LOCVAL(LOCALE_SMONTHNAME10,"Oktober")
394 LOCVAL(LOCALE_SMONTHNAME11,"November")
395 LOCVAL(LOCALE_SMONTHNAME12,"Dezember")
396 LOCVAL(LOCALE_SMONTHNAME13,"")
397 LOCVAL(LOCALE_SABBREVMONTHNAME1,"Jan")
398 LOCVAL(LOCALE_SABBREVMONTHNAME2,"Feb")
399 LOCVAL(LOCALE_SABBREVMONTHNAME3,"Mär")
400 LOCVAL(LOCALE_SABBREVMONTHNAME4,"Apr")
401 LOCVAL(LOCALE_SABBREVMONTHNAME5,"Mai")
402 LOCVAL(LOCALE_SABBREVMONTHNAME6,"Jun")
403 LOCVAL(LOCALE_SABBREVMONTHNAME7,"Jul")
404 LOCVAL(LOCALE_SABBREVMONTHNAME8,"Aug")
405 LOCVAL(LOCALE_SABBREVMONTHNAME9,"Sep")
406 LOCVAL(LOCALE_SABBREVMONTHNAME10,"Okt")
407 LOCVAL(LOCALE_SABBREVMONTHNAME11,"Nov")
408 LOCVAL(LOCALE_SABBREVMONTHNAME12,"Dez")
409 LOCVAL(LOCALE_SABBREVMONTHNAME13,"")
411 LOCVAL(LOCALE_SPOSITIVESIGN)
412 LOCVAL(LOCALE_SNEGATIVESIGN)
413 LOCVAL(LOCALE_IPOSSIGNPOSN)
414 LOCVAL(LOCALE_INEGSIGNPOSN)
415 LOCVAL(LOCALE_IPOSSYMPRECEDES)
416 LOCVAL(LOCALE_IPOSSEPBYSPACE)
417 LOCVAL(LOCALE_INEGSYMPRECEDES)
418 LOCVAL(LOCALE_INEGSEPBYSPACE)
420 default: found=0;break;
422 break; /* LANG(De) */
424 case LANG_Da:
425 switch (LCType) {
426 LOCVAL(LOCALE_ILANGUAGE,"6")
427 LOCVAL(LOCALE_SLANGUAGE,"Dansk")
428 LOCVAL(LOCALE_SENGLANGUAGE,"Danish")
429 LOCVAL(LOCALE_SABBREVLANGNAME,"dan")
430 LOCVAL(LOCALE_SNATIVELANGNAME,"Dansk")
431 LOCVAL(LOCALE_ICOUNTRY,"45")
432 LOCVAL(LOCALE_SCOUNTRY,"Danmark")
433 LOCVAL(LOCALE_SENGCOUNTRY,"Denmark")
434 LOCVAL(LOCALE_SABBREVCTRYNAME,"DK")
435 LOCVAL(LOCALE_SNATIVECTRYNAME,"Danmark")
436 LOCVAL(LOCALE_IDEFAULTLANGUAGE,"6")
437 LOCVAL(LOCALE_IDEFAULTCOUNTRY,"45")
438 /* LOCVAL(LOCALE_IDEFAULTCODEPAGE) */
439 /* LOCVAL(LOCALE_IDEFAULTANSICODEPAGE) */
440 LOCVAL(LOCALE_SLIST,";")
441 LOCVAL(LOCALE_IMEASURE,"0")
442 LOCVAL(LOCALE_SDECIMAL,",")
443 LOCVAL(LOCALE_STHOUSAND,".")
444 /* LOCVAL(LOCALE_SGROUPING) */
445 LOCVAL(LOCALE_IDIGITS,"2")
446 LOCVAL(LOCALE_ILZERO,"1")
447 /* LOCVAL(LOCALE_INEGNUMBER) */
448 /* LOCVAL(LOCALE_SNATIVEDIGITS) */
449 LOCVAL(LOCALE_SCURRENCY,"kr")
450 /* LOCVAL(LOCALE_SINTLSYMBOL) */
451 LOCVAL(LOCALE_SMONDECIMALSEP,",")
452 LOCVAL(LOCALE_SMONTHOUSANDSEP,".")
453 /* LOCVAL(LOCALE_SMONGROUPING) */
454 LOCVAL(LOCALE_ICURRDIGITS,"2")
455 /* LOCVAL(LOCALE_IINTLCURRDIGITS) */
456 LOCVAL(LOCALE_ICURRENCY,"3")
457 LOCVAL(LOCALE_INEGCURR,"8")
458 LOCVAL(LOCALE_SDATE,".")
459 LOCVAL(LOCALE_STIME,":")
460 LOCVAL(LOCALE_SSHORTDATE,"dd/MM-yyyy")
461 LOCVAL(LOCALE_SLONGDATE,"ddd, d. MMMM yyyy")
462 /* LOCVAL(LOCALE_STIMEFORMAT) */
463 LOCVAL(LOCALE_IDATE,"1")
464 /* LOCVAL(LOCALE_ILDATE) */
465 LOCVAL(LOCALE_ITIME,"1")
466 /* LOCVAL(LOCALE_ITIMEMARKPOSN) */
467 /* LOCVAL(LOCALE_ICENTURY) */
468 LOCVAL(LOCALE_ITLZERO,"1")
469 /* LOCVAL(LOCALE_IDAYLZERO) */
470 /* LOCVAL(LOCALE_IMONLZERO) */
471 LOCVAL(LOCALE_S1159, "")
472 LOCVAL(LOCALE_S2359, "")
473 /* LOCVAL(LOCALE_ICALENDARTYPE) */
474 /* LOCVAL(LOCALE_IOPTIONALCALENDAR) */
475 /* LOCVAL(LOCALE_IFIRSTDAYOFWEEK) */
476 /* LOCVAL(LOCALE_IFIRSTWEEKOFYEAR) */
477 LOCVAL(LOCALE_SDAYNAME1,"Mandag")
478 LOCVAL(LOCALE_SDAYNAME2,"Tirsdag")
479 LOCVAL(LOCALE_SDAYNAME3,"Onsdag")
480 LOCVAL(LOCALE_SDAYNAME4,"Torsdag")
481 LOCVAL(LOCALE_SDAYNAME5,"Fredag")
482 LOCVAL(LOCALE_SDAYNAME6,"Lørdag")
483 LOCVAL(LOCALE_SDAYNAME7,"Søndag")
484 LOCVAL(LOCALE_SABBREVDAYNAME1,"Ma")
485 LOCVAL(LOCALE_SABBREVDAYNAME2,"Ti")
486 LOCVAL(LOCALE_SABBREVDAYNAME3,"On")
487 LOCVAL(LOCALE_SABBREVDAYNAME4,"To")
488 LOCVAL(LOCALE_SABBREVDAYNAME5,"Fr")
489 LOCVAL(LOCALE_SABBREVDAYNAME6,"Lø")
490 LOCVAL(LOCALE_SABBREVDAYNAME7,"Sø")
491 LOCVAL(LOCALE_SMONTHNAME1,"Januar")
492 LOCVAL(LOCALE_SMONTHNAME2,"Februar")
493 LOCVAL(LOCALE_SMONTHNAME3,"Marts")
494 LOCVAL(LOCALE_SMONTHNAME4,"April")
495 LOCVAL(LOCALE_SMONTHNAME5,"Maj")
496 LOCVAL(LOCALE_SMONTHNAME6,"Juni")
497 LOCVAL(LOCALE_SMONTHNAME7,"Juli")
498 LOCVAL(LOCALE_SMONTHNAME8,"August")
499 LOCVAL(LOCALE_SMONTHNAME9,"September")
500 LOCVAL(LOCALE_SMONTHNAME10,"Oktober")
501 LOCVAL(LOCALE_SMONTHNAME11,"November")
502 LOCVAL(LOCALE_SMONTHNAME12,"December")
503 LOCVAL(LOCALE_SMONTHNAME13,"")
504 LOCVAL(LOCALE_SABBREVMONTHNAME1,"Jan")
505 LOCVAL(LOCALE_SABBREVMONTHNAME2,"Feb")
506 LOCVAL(LOCALE_SABBREVMONTHNAME3,"Mar")
507 LOCVAL(LOCALE_SABBREVMONTHNAME4,"Apr")
508 LOCVAL(LOCALE_SABBREVMONTHNAME5,"Maj")
509 LOCVAL(LOCALE_SABBREVMONTHNAME6,"Jun")
510 LOCVAL(LOCALE_SABBREVMONTHNAME7,"Jul")
511 LOCVAL(LOCALE_SABBREVMONTHNAME8,"Aug")
512 LOCVAL(LOCALE_SABBREVMONTHNAME9,"Sep")
513 LOCVAL(LOCALE_SABBREVMONTHNAME10,"Okt")
514 LOCVAL(LOCALE_SABBREVMONTHNAME11,"Nov")
515 LOCVAL(LOCALE_SABBREVMONTHNAME12,"Dec")
516 LOCVAL(LOCALE_SABBREVMONTHNAME13,"")
517 LOCVAL(LOCALE_SPOSITIVESIGN, "")
518 LOCVAL(LOCALE_SNEGATIVESIGN, "-")
519 LOCVAL(LOCALE_IPOSSIGNPOSN, "3")
520 LOCVAL(LOCALE_INEGSIGNPOSN, "3")
521 LOCVAL(LOCALE_IPOSSYMPRECEDES, "1")
522 LOCVAL(LOCALE_IPOSSEPBYSPACE, "0")
523 LOCVAL(LOCALE_INEGSYMPRECEDES, "1")
524 LOCVAL(LOCALE_INEGSEPBYSPACE, "0")
525 default: found=0;break;
527 break; /* LANG(Da) */
529 case LANG_En:
530 switch (LCType) {
531 LOCVAL(LOCALE_ILANGUAGE, "0409")
532 LOCVAL(LOCALE_SLANGUAGE, "English (United States)")
533 LOCVAL(LOCALE_SENGLANGUAGE, "English")
534 LOCVAL(LOCALE_SABBREVLANGNAME, "ENU")
535 LOCVAL(LOCALE_SNATIVELANGNAME, "English")
536 LOCVAL(LOCALE_ICOUNTRY, "1")
537 LOCVAL(LOCALE_SCOUNTRY, "United States")
538 LOCVAL(LOCALE_SENGCOUNTRY, "United States")
539 LOCVAL(LOCALE_SABBREVCTRYNAME, "USA")
540 LOCVAL(LOCALE_SNATIVECTRYNAME, "United States")
541 LOCVAL(LOCALE_IDEFAULTLANGUAGE, "0409")
542 LOCVAL(LOCALE_IDEFAULTCOUNTRY, "1")
543 LOCVAL(LOCALE_IDEFAULTCODEPAGE, "437")
544 LOCVAL(LOCALE_IDEFAULTANSICODEPAGE, "1252")
545 LOCVAL(LOCALE_SLIST, ",")
546 LOCVAL(LOCALE_IMEASURE, "1")
547 LOCVAL(LOCALE_SDECIMAL, ".")
548 LOCVAL(LOCALE_STHOUSAND, ",")
549 LOCVAL(LOCALE_SGROUPING, "3;0")
550 LOCVAL(LOCALE_IDIGITS, "2")
551 LOCVAL(LOCALE_ILZERO, "1")
552 LOCVAL(LOCALE_INEGNUMBER, "1")
553 LOCVAL(LOCALE_SNATIVEDIGITS, "0123456789")
554 LOCVAL(LOCALE_SCURRENCY, "$")
555 LOCVAL(LOCALE_SINTLSYMBOL, "USD")
556 LOCVAL(LOCALE_SMONDECIMALSEP, ".")
557 LOCVAL(LOCALE_SMONTHOUSANDSEP, ",")
558 LOCVAL(LOCALE_SMONGROUPING, "3;0")
559 LOCVAL(LOCALE_ICURRDIGITS, "2")
560 LOCVAL(LOCALE_IINTLCURRDIGITS, "2")
561 LOCVAL(LOCALE_ICURRENCY, "0")
562 LOCVAL(LOCALE_INEGCURR, "0")
563 LOCVAL(LOCALE_SDATE, "/")
564 LOCVAL(LOCALE_STIME, ":")
565 LOCVAL(LOCALE_SSHORTDATE, "M/d/yy")
566 LOCVAL(LOCALE_SLONGDATE, "dddd, MMMM dd, yyyy")
567 LOCVAL(LOCALE_STIMEFORMAT, "h:mm:ss tt")
568 LOCVAL(LOCALE_IDATE, "0")
569 LOCVAL(LOCALE_ILDATE, "0")
570 LOCVAL(LOCALE_ITIME, "0")
571 LOCVAL(LOCALE_ITIMEMARKPOSN, "0")
572 LOCVAL(LOCALE_ICENTURY, "0")
573 LOCVAL(LOCALE_ITLZERO, "0")
574 LOCVAL(LOCALE_IDAYLZERO, "0")
575 LOCVAL(LOCALE_IMONLZERO, "0")
576 LOCVAL(LOCALE_S1159, "AM")
577 LOCVAL(LOCALE_S2359, "PM")
578 LOCVAL(LOCALE_ICALENDARTYPE, "1")
579 LOCVAL(LOCALE_IOPTIONALCALENDAR, "0")
580 LOCVAL(LOCALE_IFIRSTDAYOFWEEK, "6")
581 LOCVAL(LOCALE_IFIRSTWEEKOFYEAR, "0")
582 LOCVAL(LOCALE_SDAYNAME1, "Monday")
583 LOCVAL(LOCALE_SDAYNAME2, "Tuesday")
584 LOCVAL(LOCALE_SDAYNAME3, "Wednesday")
585 LOCVAL(LOCALE_SDAYNAME4, "Thursday")
586 LOCVAL(LOCALE_SDAYNAME5, "Friday")
587 LOCVAL(LOCALE_SDAYNAME6, "Saturday")
588 LOCVAL(LOCALE_SDAYNAME7, "Sunday")
589 LOCVAL(LOCALE_SABBREVDAYNAME1, "Mon")
590 LOCVAL(LOCALE_SABBREVDAYNAME2, "Tue")
591 LOCVAL(LOCALE_SABBREVDAYNAME3, "Wed")
592 LOCVAL(LOCALE_SABBREVDAYNAME4, "Thu")
593 LOCVAL(LOCALE_SABBREVDAYNAME5, "Fri")
594 LOCVAL(LOCALE_SABBREVDAYNAME6, "Sat")
595 LOCVAL(LOCALE_SABBREVDAYNAME7, "Sun")
596 LOCVAL(LOCALE_SMONTHNAME1, "January")
597 LOCVAL(LOCALE_SMONTHNAME2, "February")
598 LOCVAL(LOCALE_SMONTHNAME3, "March")
599 LOCVAL(LOCALE_SMONTHNAME4, "April")
600 LOCVAL(LOCALE_SMONTHNAME5, "May")
601 LOCVAL(LOCALE_SMONTHNAME6, "June")
602 LOCVAL(LOCALE_SMONTHNAME7, "July")
603 LOCVAL(LOCALE_SMONTHNAME8, "August")
604 LOCVAL(LOCALE_SMONTHNAME9, "September")
605 LOCVAL(LOCALE_SMONTHNAME10, "October")
606 LOCVAL(LOCALE_SMONTHNAME11, "November")
607 LOCVAL(LOCALE_SMONTHNAME12, "December")
608 LOCVAL(LOCALE_SMONTHNAME13, "")
609 LOCVAL(LOCALE_SABBREVMONTHNAME1, "Jan")
610 LOCVAL(LOCALE_SABBREVMONTHNAME2, "Feb")
611 LOCVAL(LOCALE_SABBREVMONTHNAME3, "Mar")
612 LOCVAL(LOCALE_SABBREVMONTHNAME4, "Apr")
613 LOCVAL(LOCALE_SABBREVMONTHNAME5, "May")
614 LOCVAL(LOCALE_SABBREVMONTHNAME6, "Jun")
615 LOCVAL(LOCALE_SABBREVMONTHNAME7, "Jul")
616 LOCVAL(LOCALE_SABBREVMONTHNAME8, "Aug")
617 LOCVAL(LOCALE_SABBREVMONTHNAME9, "Sep")
618 LOCVAL(LOCALE_SABBREVMONTHNAME10, "Oct")
619 LOCVAL(LOCALE_SABBREVMONTHNAME11, "Nov")
620 LOCVAL(LOCALE_SABBREVMONTHNAME12, "Dec")
621 LOCVAL(LOCALE_SABBREVMONTHNAME13, "")
622 LOCVAL(LOCALE_SPOSITIVESIGN, "")
623 LOCVAL(LOCALE_SNEGATIVESIGN, "-")
624 LOCVAL(LOCALE_IPOSSIGNPOSN, "3")
625 LOCVAL(LOCALE_INEGSIGNPOSN, "0")
626 LOCVAL(LOCALE_IPOSSYMPRECEDES, "1")
627 LOCVAL(LOCALE_IPOSSEPBYSPACE, "0")
628 LOCVAL(LOCALE_INEGSYMPRECEDES, "1")
629 LOCVAL(LOCALE_INEGSEPBYSPACE, "0")
630 default: found=0;break;
632 break; /* LANG(En) */
634 case LANG_Eo:
635 switch (LCType) {
636 /* LOCVAL(LOCALE_ILANGUAGE,"9") ISO numerical ID for language TODO */
637 LOCVAL(LOCALE_SLANGUAGE,"Esperanto")
638 LOCVAL(LOCALE_SENGLANGUAGE,"Esperanto")
639 /* LOCVAL(LOCALE_SABBREVLANGNAME,"deu") */
640 LOCVAL(LOCALE_SNATIVELANGNAME,"Esperanto")
641 /* LOCVAL(LOCALE_ICOUNTRY,"49") not official in any one country */
642 /* LOCVAL(LOCALE_SCOUNTRY,"Deutschland") */
643 /* LOCVAL(LOCALE_SENGCOUNTRY,"Germany") */
644 /* LOCVAL(LOCALE_SABBREVCTRYNAME,"De") */
645 /* LOCVAL(LOCALE_SNATIVECTRYNAME,"Deutschland") */
646 /* LOCVAL(LOCALE_IDEFAULTLANGUAGE,"9") ISO ID of lang TODO */
647 /* LOCVAL(LOCALE_IDEFAULTCOUNTRY,"49") */
648 LOCVAL(LOCALE_IDEFAULTCODEPAGE,"3") /* is this right? TODO */
649 LOCVAL(LOCALE_IDEFAULTANSICODEPAGE,"3") /* is this right? TODO */
650 LOCVAL(LOCALE_SLIST,";")
651 LOCVAL(LOCALE_IMEASURE,"0")
652 LOCVAL(LOCALE_SDECIMAL,",")
653 LOCVAL(LOCALE_STHOUSAND,".")
654 /* LOCVAL(LOCALE_SGROUPING) */
655 LOCVAL(LOCALE_IDIGITS,"2")
656 LOCVAL(LOCALE_ILZERO,"1")
657 /* LOCVAL(LOCALE_INEGNUMBER) */
658 /* LOCVAL(LOCALE_SNATIVEDIGITS) */
659 LOCVAL(LOCALE_SCURRENCY,"NLG") /* accounting currency of UEA */
660 /* LOCVAL(LOCALE_SINTLSYMBOL) */
661 /* LOCVAL(LOCALE_SMONDECIMALSEP) */
662 /* LOCVAL(LOCALE_SMONTHOUSANDSEP) */
663 /* LOCVAL(LOCALE_SMONGROUPING) */
664 /* LOCVAL(LOCALE_ICURRDIGITS,"2") */
665 /* LOCVAL(LOCALE_IINTLCURRDIGITS) */
666 LOCVAL(LOCALE_ICURRENCY,"3")
667 LOCVAL(LOCALE_INEGCURR,"8")
668 LOCVAL(LOCALE_SDATE,".")
669 LOCVAL(LOCALE_STIME,":")
670 LOCVAL(LOCALE_SSHORTDATE,"yyyy.mm.dd")
671 LOCVAL(LOCALE_SLONGDATE,"ddd, d. MMMM yyyy")
672 /* LOCVAL(LOCALE_STIMEFORMAT) */
673 LOCVAL(LOCALE_IDATE,"1")
674 /* LOCVAL(LOCALE_ILDATE) */
675 LOCVAL(LOCALE_ITIME,"1")
676 /* LOCVAL(LOCALE_ITIMEMARKPOSN) */
677 /* LOCVAL(LOCALE_ICENTURY) */
678 LOCVAL(LOCALE_ITLZERO,"1")
679 /* LOCVAL(LOCALE_IDAYLZERO) */
680 /* LOCVAL(LOCALE_IMONLZERO) */
681 /* LOCVAL(LOCALE_S1159) */
682 /* LOCVAL(LOCALE_S2359) */
683 /* LOCVAL(LOCALE_ICALENDARTYPE) */
684 /* LOCVAL(LOCALE_IOPTIONALCALENDAR) */
685 /* LOCVAL(LOCALE_IFIRSTDAYOFWEEK) */
686 /* LOCVAL(LOCALE_IFIRSTWEEKOFYEAR) */
687 LOCVAL(LOCALE_SDAYNAME1,"lundo")
688 LOCVAL(LOCALE_SDAYNAME2,"mardo")
689 LOCVAL(LOCALE_SDAYNAME3,"merkredo")
690 LOCVAL(LOCALE_SDAYNAME4,"¼aýdo")
691 LOCVAL(LOCALE_SDAYNAME5,"vendredo")
692 LOCVAL(LOCALE_SDAYNAME6,"sabato")
693 LOCVAL(LOCALE_SDAYNAME7,"dimanæo")
694 LOCVAL(LOCALE_SABBREVDAYNAME1,"lu")
695 LOCVAL(LOCALE_SABBREVDAYNAME2,"ma")
696 LOCVAL(LOCALE_SABBREVDAYNAME3,"me")
697 LOCVAL(LOCALE_SABBREVDAYNAME4,"¼a")
698 LOCVAL(LOCALE_SABBREVDAYNAME5,"ve")
699 LOCVAL(LOCALE_SABBREVDAYNAME6,"sa")
700 LOCVAL(LOCALE_SABBREVDAYNAME7,"di")
701 LOCVAL(LOCALE_SMONTHNAME1,"januaro")
702 LOCVAL(LOCALE_SMONTHNAME2,"februaro")
703 LOCVAL(LOCALE_SMONTHNAME3,"marto")
704 LOCVAL(LOCALE_SMONTHNAME4,"aprilo")
705 LOCVAL(LOCALE_SMONTHNAME5,"majo")
706 LOCVAL(LOCALE_SMONTHNAME6,"junio")
707 LOCVAL(LOCALE_SMONTHNAME7,"julio")
708 LOCVAL(LOCALE_SMONTHNAME8,"aýgusto")
709 LOCVAL(LOCALE_SMONTHNAME9,"septembro")
710 LOCVAL(LOCALE_SMONTHNAME10,"oktobro")
711 LOCVAL(LOCALE_SMONTHNAME11,"novembro")
712 LOCVAL(LOCALE_SMONTHNAME12,"decembro")
713 LOCVAL(LOCALE_SMONTHNAME13,"")
714 LOCVAL(LOCALE_SABBREVMONTHNAME1,"jan")
715 LOCVAL(LOCALE_SABBREVMONTHNAME2,"feb")
716 LOCVAL(LOCALE_SABBREVMONTHNAME3,"mar")
717 LOCVAL(LOCALE_SABBREVMONTHNAME4,"apr")
718 LOCVAL(LOCALE_SABBREVMONTHNAME5,"maj")
719 LOCVAL(LOCALE_SABBREVMONTHNAME6,"jun")
720 LOCVAL(LOCALE_SABBREVMONTHNAME7,"jul")
721 LOCVAL(LOCALE_SABBREVMONTHNAME8,"aýg")
722 LOCVAL(LOCALE_SABBREVMONTHNAME9,"sep")
723 LOCVAL(LOCALE_SABBREVMONTHNAME10,"okt")
724 LOCVAL(LOCALE_SABBREVMONTHNAME11,"nov")
725 LOCVAL(LOCALE_SABBREVMONTHNAME12,"dec")
726 LOCVAL(LOCALE_SABBREVMONTHNAME13,"")
727 /* LOCVAL(LOCALE_SPOSITIVESIGN) */
728 /* LOCVAL(LOCALE_SNEGATIVESIGN) */
729 /* LOCVAL(LOCALE_IPOSSIGNPOSN) */
730 /* LOCVAL(LOCALE_INEGSIGNPOSN) */
731 /* LOCVAL(LOCALE_IPOSSYMPRECEDES) */
732 /* LOCVAL(LOCALE_IPOSSEPBYSPACE) */
733 /* LOCVAL(LOCALE_INEGSYMPRECEDES) */
734 /* LOCVAL(LOCALE_INEGSEPBYSPACE) */
735 default: found=0;break;
737 break; /* LANG(Eo) */
739 case LANG_Fi:
740 switch (LCType) {
741 LOCVAL(LOCALE_ILANGUAGE,"11")
742 LOCVAL(LOCALE_SLANGUAGE,"Suomi")
743 LOCVAL(LOCALE_SENGLANGUAGE,"Finnish")
744 LOCVAL(LOCALE_SABBREVLANGNAME,"fin")
745 LOCVAL(LOCALE_SNATIVELANGNAME,"suomi")
746 LOCVAL(LOCALE_ICOUNTRY,"49")
747 LOCVAL(LOCALE_SCOUNTRY,"Suomi")
748 LOCVAL(LOCALE_SENGCOUNTRY,"Finland")
749 LOCVAL(LOCALE_SABBREVCTRYNAME,"Fin")
750 LOCVAL(LOCALE_SNATIVECTRYNAME,"Suomi")
751 LOCVAL(LOCALE_IDEFAULTLANGUAGE,"11")
752 LOCVAL(LOCALE_IDEFAULTCOUNTRY,"358")
754 LOCVAL(LOCALE_IDEFAULTCODEPAGE)
755 LOCVAL(LOCALE_IDEFAULTANSICODEPAGE)
757 LOCVAL(LOCALE_SLIST,";")
758 LOCVAL(LOCALE_IMEASURE,"0")
759 LOCVAL(LOCALE_SDECIMAL,",")
760 LOCVAL(LOCALE_STHOUSAND,".")
762 LOCVAL(LOCALE_SGROUPING)
764 LOCVAL(LOCALE_IDIGITS,"2")
765 LOCVAL(LOCALE_ILZERO,"1")
767 LOCVAL(LOCALE_INEGNUMBER)
768 Is this "0123456789" ??
769 LOCVAL(LOCALE_SNATIVEDIGITS)
771 LOCVAL(LOCALE_SCURRENCY,"mk")
773 LOCVAL(LOCALE_SINTLSYMBOL)
774 LOCVAL(LOCALE_SMONDECIMALSEP)
775 LOCVAL(LOCALE_SMONTHOUSANDSEP)
776 LOCVAL(LOCALE_SMONGROUPING)
778 LOCVAL(LOCALE_ICURRDIGITS,"2")
780 LOCVAL(LOCALE_IINTLCURRDIGITS)
782 LOCVAL(LOCALE_ICURRENCY,"3")
783 LOCVAL(LOCALE_INEGCURR,"8")
784 LOCVAL(LOCALE_SDATE,".")
785 LOCVAL(LOCALE_STIME,":")
786 LOCVAL(LOCALE_SSHORTDATE,"dd.MM.yyyy")
787 LOCVAL(LOCALE_SLONGDATE,"ddd, d. MMMM yyyy")
789 LOCVAL(LOCALE_STIMEFORMAT)
791 LOCVAL(LOCALE_IDATE,"1")
793 LOCVAL(LOCALE_ILDATE)
795 LOCVAL(LOCALE_ITIME,"1")
797 LOCVAL(LOCALE_ITIMEMARKPOSN)
798 LOCVAL(LOCALE_ICENTURY)
800 LOCVAL(LOCALE_ITLZERO,"1")
802 LOCVAL(LOCALE_IDAYLZERO)
803 LOCVAL(LOCALE_IMONLZERO)
805 LOCVAL(LOCALE_S1159, "AM")
806 LOCVAL(LOCALE_S2359, "PM")
808 LOCVAL(LOCALE_ICALENDARTYPE)
809 LOCVAL(LOCALE_IOPTIONALCALENDAR)
810 LOCVAL(LOCALE_IFIRSTDAYOFWEEK)
811 LOCVAL(LOCALE_IFIRSTWEEKOFYEAR)
813 LOCVAL(LOCALE_SDAYNAME1,"maanantai")
814 LOCVAL(LOCALE_SDAYNAME2,"tiistai")
815 LOCVAL(LOCALE_SDAYNAME3,"keskiviikko")
816 LOCVAL(LOCALE_SDAYNAME4,"torstai")
817 LOCVAL(LOCALE_SDAYNAME5,"perjantai")
818 LOCVAL(LOCALE_SDAYNAME6,"lauantai")
819 LOCVAL(LOCALE_SDAYNAME7,"sunnuntai")
820 LOCVAL(LOCALE_SABBREVDAYNAME1,"Ma")
821 LOCVAL(LOCALE_SABBREVDAYNAME2,"Ti")
822 LOCVAL(LOCALE_SABBREVDAYNAME3,"Ke")
823 LOCVAL(LOCALE_SABBREVDAYNAME4,"To")
824 LOCVAL(LOCALE_SABBREVDAYNAME5,"Pe")
825 LOCVAL(LOCALE_SABBREVDAYNAME6,"La")
826 LOCVAL(LOCALE_SABBREVDAYNAME7,"Su")
827 LOCVAL(LOCALE_SMONTHNAME1,"tammikuu")
828 LOCVAL(LOCALE_SMONTHNAME2,"helmikuu")
829 LOCVAL(LOCALE_SMONTHNAME3,"maaliskuu")
830 LOCVAL(LOCALE_SMONTHNAME4,"huhtikuu")
831 LOCVAL(LOCALE_SMONTHNAME5,"toukokuu")
832 LOCVAL(LOCALE_SMONTHNAME6,"kesäkuu")
833 LOCVAL(LOCALE_SMONTHNAME7,"heinäkuu")
834 LOCVAL(LOCALE_SMONTHNAME8,"elokuu")
835 LOCVAL(LOCALE_SMONTHNAME9,"syyskuu")
836 LOCVAL(LOCALE_SMONTHNAME10,"lokakuu")
837 LOCVAL(LOCALE_SMONTHNAME11,"marraskuu")
838 LOCVAL(LOCALE_SMONTHNAME12,"joulukuu")
839 LOCVAL(LOCALE_SMONTHNAME13,"")
840 LOCVAL(LOCALE_SABBREVMONTHNAME1,"tammi")
841 LOCVAL(LOCALE_SABBREVMONTHNAME2,"helmi")
842 LOCVAL(LOCALE_SABBREVMONTHNAME3,"maalis")
843 LOCVAL(LOCALE_SABBREVMONTHNAME4,"huhti")
844 LOCVAL(LOCALE_SABBREVMONTHNAME5,"touko")
845 LOCVAL(LOCALE_SABBREVMONTHNAME6,"kesä")
846 LOCVAL(LOCALE_SABBREVMONTHNAME7,"heinä")
847 LOCVAL(LOCALE_SABBREVMONTHNAME8,"elo")
848 LOCVAL(LOCALE_SABBREVMONTHNAME9,"syys")
849 LOCVAL(LOCALE_SABBREVMONTHNAME10,"loka")
850 LOCVAL(LOCALE_SABBREVMONTHNAME11,"marras")
851 LOCVAL(LOCALE_SABBREVMONTHNAME12,"joulu")
852 LOCVAL(LOCALE_SABBREVMONTHNAME13,"")
853 LOCVAL(LOCALE_SPOSITIVESIGN, "")
854 LOCVAL(LOCALE_SNEGATIVESIGN, "-")
856 LOCVAL(LOCALE_IPOSSIGNPOSN)
857 LOCVAL(LOCALE_INEGSIGNPOSN)
858 LOCVAL(LOCALE_IPOSSYMPRECEDES)
859 LOCVAL(LOCALE_IPOSSEPBYSPACE)
860 LOCVAL(LOCALE_INEGSYMPRECEDES)
861 LOCVAL(LOCALE_INEGSEPBYSPACE)
863 default: found=0;break;
865 break; /* LANG(Fi) */
867 case LANG_It:
868 switch (LCType) {
869 LOCVAL(LOCALE_ILANGUAGE,"9")
870 LOCVAL(LOCALE_SLANGUAGE,"Italiano")
871 LOCVAL(LOCALE_SENGLANGUAGE,"Italian")
872 LOCVAL(LOCALE_SABBREVLANGNAME,"ita")
873 LOCVAL(LOCALE_SNATIVELANGNAME,"Italiano")
874 LOCVAL(LOCALE_ICOUNTRY,"39")
875 LOCVAL(LOCALE_SCOUNTRY,"Italia")
876 LOCVAL(LOCALE_SENGCOUNTRY,"Italy")
877 LOCVAL(LOCALE_SABBREVCTRYNAME,"It")
878 LOCVAL(LOCALE_SNATIVECTRYNAME,"Italia")
879 LOCVAL(LOCALE_IDEFAULTLANGUAGE,"9")
880 LOCVAL(LOCALE_IDEFAULTCOUNTRY,"39")
881 /* Dunno
882 LOCVAL(LOCALE_IDEFAULTCODEPAGE)
883 LOCVAL(LOCALE_IDEFAULTANSICODEPAGE)
885 LOCVAL(LOCALE_SLIST,";")
886 LOCVAL(LOCALE_IMEASURE,"0")
887 LOCVAL(LOCALE_SDECIMAL,",")
888 LOCVAL(LOCALE_STHOUSAND,".")
890 LOCVAL(LOCALE_SGROUPING)
892 LOCVAL(LOCALE_IDIGITS,"2")
893 LOCVAL(LOCALE_ILZERO,"1")
895 LOCVAL(LOCALE_INEGNUMBER)
896 Is this "0123456789" ??
897 LOCVAL(LOCALE_SNATIVEDIGITS)
899 LOCVAL(LOCALE_SCURRENCY,"Lit.")
901 LOCVAL(LOCALE_SINTLSYMBOL)
902 LOCVAL(LOCALE_SMONDECIMALSEP)
903 LOCVAL(LOCALE_SMONTHOUSANDSEP)
904 LOCVAL(LOCALE_SMONGROUPING)
906 LOCVAL(LOCALE_ICURRDIGITS,"2")
908 LOCVAL(LOCALE_IINTLCURRDIGITS)
910 LOCVAL(LOCALE_ICURRENCY,"3")
911 LOCVAL(LOCALE_INEGCURR,"8")
912 LOCVAL(LOCALE_SDATE,".")
913 LOCVAL(LOCALE_STIME,":")
914 LOCVAL(LOCALE_SSHORTDATE,"dd.MM.yyyy")
915 LOCVAL(LOCALE_SLONGDATE,"ddd, d. MMMM yyyy")
917 LOCVAL(LOCALE_STIMEFORMAT)
919 LOCVAL(LOCALE_IDATE,"1")
921 LOCVAL(LOCALE_ILDATE)
923 LOCVAL(LOCALE_ITIME,"1")
925 LOCVAL(LOCALE_ITIMEMARKPOSN)
926 LOCVAL(LOCALE_ICENTURY)
928 LOCVAL(LOCALE_ITLZERO,"1")
930 LOCVAL(LOCALE_IDAYLZERO)
931 LOCVAL(LOCALE_IMONLZERO)
932 LOCVAL(LOCALE_S1159)
933 LOCVAL(LOCALE_S2359)
934 LOCVAL(LOCALE_ICALENDARTYPE)
935 LOCVAL(LOCALE_IOPTIONALCALENDAR)
936 LOCVAL(LOCALE_IFIRSTDAYOFWEEK)
937 LOCVAL(LOCALE_IFIRSTWEEKOFYEAR)
939 LOCVAL(LOCALE_SDAYNAME1,"Lunedi'")
940 LOCVAL(LOCALE_SDAYNAME2,"Martedi'")
941 LOCVAL(LOCALE_SDAYNAME3,"Mercoledi'")
942 LOCVAL(LOCALE_SDAYNAME4,"Giovedi'")
943 LOCVAL(LOCALE_SDAYNAME5,"Venerdi'")
944 LOCVAL(LOCALE_SDAYNAME6,"Sabato")
945 LOCVAL(LOCALE_SDAYNAME7,"Domenica")
946 LOCVAL(LOCALE_SABBREVDAYNAME1,"Lu")
947 LOCVAL(LOCALE_SABBREVDAYNAME2,"Ma")
948 LOCVAL(LOCALE_SABBREVDAYNAME3,"Me")
949 LOCVAL(LOCALE_SABBREVDAYNAME4,"Gi")
950 LOCVAL(LOCALE_SABBREVDAYNAME5,"Ve")
951 LOCVAL(LOCALE_SABBREVDAYNAME6,"Sa")
952 LOCVAL(LOCALE_SABBREVDAYNAME7,"Do")
953 LOCVAL(LOCALE_SMONTHNAME1,"Gennaio")
954 LOCVAL(LOCALE_SMONTHNAME2,"Febbraio")
955 LOCVAL(LOCALE_SMONTHNAME3,"Marzo")
956 LOCVAL(LOCALE_SMONTHNAME4,"Aprile")
957 LOCVAL(LOCALE_SMONTHNAME5,"Maggio")
958 LOCVAL(LOCALE_SMONTHNAME6,"Giugno")
959 LOCVAL(LOCALE_SMONTHNAME7,"Luglio")
960 LOCVAL(LOCALE_SMONTHNAME8,"Agosto")
961 LOCVAL(LOCALE_SMONTHNAME9,"Settembre")
962 LOCVAL(LOCALE_SMONTHNAME10,"Ottobre")
963 LOCVAL(LOCALE_SMONTHNAME11,"Novembre")
964 LOCVAL(LOCALE_SMONTHNAME12,"Dicembre")
965 LOCVAL(LOCALE_SMONTHNAME13,"")
966 LOCVAL(LOCALE_SABBREVMONTHNAME1,"Gen")
967 LOCVAL(LOCALE_SABBREVMONTHNAME2,"Feb")
968 LOCVAL(LOCALE_SABBREVMONTHNAME3,"Mar")
969 LOCVAL(LOCALE_SABBREVMONTHNAME4,"Apr")
970 LOCVAL(LOCALE_SABBREVMONTHNAME5,"Mag")
971 LOCVAL(LOCALE_SABBREVMONTHNAME6,"Giu")
972 LOCVAL(LOCALE_SABBREVMONTHNAME7,"Lug")
973 LOCVAL(LOCALE_SABBREVMONTHNAME8,"Ago")
974 LOCVAL(LOCALE_SABBREVMONTHNAME9,"Set")
975 LOCVAL(LOCALE_SABBREVMONTHNAME10,"Ott")
976 LOCVAL(LOCALE_SABBREVMONTHNAME11,"Nov")
977 LOCVAL(LOCALE_SABBREVMONTHNAME12,"Dic")
978 LOCVAL(LOCALE_SABBREVMONTHNAME13,"")
980 LOCVAL(LOCALE_SPOSITIVESIGN)
981 LOCVAL(LOCALE_SNEGATIVESIGN)
982 LOCVAL(LOCALE_IPOSSIGNPOSN)
983 LOCVAL(LOCALE_INEGSIGNPOSN)
984 LOCVAL(LOCALE_IPOSSYMPRECEDES)
985 LOCVAL(LOCALE_IPOSSEPBYSPACE)
986 LOCVAL(LOCALE_INEGSYMPRECEDES)
987 LOCVAL(LOCALE_INEGSEPBYSPACE)
989 default: found=0;break;
991 break; /* LANG(It) */
993 case 0x0809:
994 switch (LCType) {
995 LOCVAL(LOCALE_ILANGUAGE, "0809")
996 LOCVAL(LOCALE_SLANGUAGE, "English (United Kingdom)")
997 LOCVAL(LOCALE_SENGLANGUAGE, "English")
998 LOCVAL(LOCALE_SABBREVLANGNAME, "ENG")
999 LOCVAL(LOCALE_SNATIVELANGNAME, "English")
1000 LOCVAL(LOCALE_ICOUNTRY, "44")
1001 LOCVAL(LOCALE_SCOUNTRY, "United Kingdom")
1002 LOCVAL(LOCALE_SENGCOUNTRY, "United Kingdom")
1003 LOCVAL(LOCALE_SABBREVCTRYNAME, "GBR")
1004 LOCVAL(LOCALE_SNATIVECTRYNAME, "United Kingdom")
1005 LOCVAL(LOCALE_IDEFAULTLANGUAGE, "0809")
1006 LOCVAL(LOCALE_IDEFAULTCOUNTRY, "44")
1007 LOCVAL(LOCALE_IDEFAULTCODEPAGE, "850")
1008 LOCVAL(LOCALE_IDEFAULTANSICODEPAGE, "1252")
1009 LOCVAL(LOCALE_SLIST, ",")
1010 LOCVAL(LOCALE_IMEASURE, "0")
1011 LOCVAL(LOCALE_SDECIMAL, ".")
1012 LOCVAL(LOCALE_STHOUSAND, ",")
1013 LOCVAL(LOCALE_SGROUPING, "3;0")
1014 LOCVAL(LOCALE_IDIGITS, "2")
1015 LOCVAL(LOCALE_ILZERO, "1")
1016 LOCVAL(LOCALE_INEGNUMBER, "1")
1017 LOCVAL(LOCALE_SNATIVEDIGITS, "0123456789")
1018 LOCVAL(LOCALE_SCURRENCY, "£")
1019 LOCVAL(LOCALE_SINTLSYMBOL, "GBP")
1020 LOCVAL(LOCALE_SMONDECIMALSEP, ".")
1021 LOCVAL(LOCALE_SMONTHOUSANDSEP, ",")
1022 LOCVAL(LOCALE_SMONGROUPING, "3;0")
1023 LOCVAL(LOCALE_ICURRDIGITS, "2")
1024 LOCVAL(LOCALE_IINTLCURRDIGITS, "2")
1025 LOCVAL(LOCALE_ICURRENCY, "0")
1026 LOCVAL(LOCALE_INEGCURR, "1")
1027 LOCVAL(LOCALE_SDATE, "/")
1028 LOCVAL(LOCALE_STIME, ":")
1029 LOCVAL(LOCALE_SSHORTDATE, "dd/MM/yy")
1030 LOCVAL(LOCALE_SLONGDATE, "dd MMMM yyyy")
1031 LOCVAL(LOCALE_STIMEFORMAT, "HH:mm:ss")
1032 LOCVAL(LOCALE_IDATE, "1")
1033 LOCVAL(LOCALE_ILDATE, "1")
1034 LOCVAL(LOCALE_ITIME, "1")
1035 LOCVAL(LOCALE_ITIMEMARKPOSN, "0")
1036 LOCVAL(LOCALE_ICENTURY, "0")
1037 LOCVAL(LOCALE_ITLZERO, "1")
1038 LOCVAL(LOCALE_IDAYLZERO, "1")
1039 LOCVAL(LOCALE_IMONLZERO, "1")
1040 LOCVAL(LOCALE_S1159, "AM")
1041 LOCVAL(LOCALE_S2359, "PM")
1042 LOCVAL(LOCALE_ICALENDARTYPE, "1")
1043 LOCVAL(LOCALE_IOPTIONALCALENDAR, "0")
1044 LOCVAL(LOCALE_IFIRSTDAYOFWEEK, "0")
1045 LOCVAL(LOCALE_IFIRSTWEEKOFYEAR, "0")
1046 LOCVAL(LOCALE_SDAYNAME1, "Monday")
1047 LOCVAL(LOCALE_SDAYNAME2, "Tuesday")
1048 LOCVAL(LOCALE_SDAYNAME3, "Wednesday")
1049 LOCVAL(LOCALE_SDAYNAME4, "Thursday")
1050 LOCVAL(LOCALE_SDAYNAME5, "Friday")
1051 LOCVAL(LOCALE_SDAYNAME6, "Saturday")
1052 LOCVAL(LOCALE_SDAYNAME7, "Sunday")
1053 LOCVAL(LOCALE_SABBREVDAYNAME1, "Mon")
1054 LOCVAL(LOCALE_SABBREVDAYNAME2, "Tue")
1055 LOCVAL(LOCALE_SABBREVDAYNAME3, "Wed")
1056 LOCVAL(LOCALE_SABBREVDAYNAME4, "Thu")
1057 LOCVAL(LOCALE_SABBREVDAYNAME5, "Fri")
1058 LOCVAL(LOCALE_SABBREVDAYNAME6, "Sat")
1059 LOCVAL(LOCALE_SABBREVDAYNAME7, "Sun")
1060 LOCVAL(LOCALE_SMONTHNAME1, "January")
1061 LOCVAL(LOCALE_SMONTHNAME2, "February")
1062 LOCVAL(LOCALE_SMONTHNAME3, "March")
1063 LOCVAL(LOCALE_SMONTHNAME4, "April")
1064 LOCVAL(LOCALE_SMONTHNAME5, "May")
1065 LOCVAL(LOCALE_SMONTHNAME6, "June")
1066 LOCVAL(LOCALE_SMONTHNAME7, "July")
1067 LOCVAL(LOCALE_SMONTHNAME8, "August")
1068 LOCVAL(LOCALE_SMONTHNAME9, "September")
1069 LOCVAL(LOCALE_SMONTHNAME10, "October")
1070 LOCVAL(LOCALE_SMONTHNAME11, "November")
1071 LOCVAL(LOCALE_SMONTHNAME12, "December")
1072 LOCVAL(LOCALE_SMONTHNAME13, "")
1073 LOCVAL(LOCALE_SABBREVMONTHNAME1, "Jan")
1074 LOCVAL(LOCALE_SABBREVMONTHNAME2, "Feb")
1075 LOCVAL(LOCALE_SABBREVMONTHNAME3, "Mar")
1076 LOCVAL(LOCALE_SABBREVMONTHNAME4, "Apr")
1077 LOCVAL(LOCALE_SABBREVMONTHNAME5, "May")
1078 LOCVAL(LOCALE_SABBREVMONTHNAME6, "Jun")
1079 LOCVAL(LOCALE_SABBREVMONTHNAME7, "Jul")
1080 LOCVAL(LOCALE_SABBREVMONTHNAME8, "Aug")
1081 LOCVAL(LOCALE_SABBREVMONTHNAME9, "Sep")
1082 LOCVAL(LOCALE_SABBREVMONTHNAME10, "Oct")
1083 LOCVAL(LOCALE_SABBREVMONTHNAME11, "Nov")
1084 LOCVAL(LOCALE_SABBREVMONTHNAME12, "Dec")
1085 LOCVAL(LOCALE_SABBREVMONTHNAME13, "")
1086 LOCVAL(LOCALE_SPOSITIVESIGN, "")
1087 LOCVAL(LOCALE_SNEGATIVESIGN, "-")
1088 LOCVAL(LOCALE_IPOSSIGNPOSN, "3")
1089 LOCVAL(LOCALE_INEGSIGNPOSN, "3")
1090 LOCVAL(LOCALE_IPOSSYMPRECEDES, "1")
1091 LOCVAL(LOCALE_IPOSSEPBYSPACE, "0")
1092 LOCVAL(LOCALE_INEGSYMPRECEDES, "1")
1093 LOCVAL(LOCALE_INEGSEPBYSPACE, "0")
1094 default: found=0;break;
1096 break; /* LANG(0x0809) (U.K. English) */
1098 case LANG_Ko: /* string using codepage 949 */
1099 switch (LCType) {
1100 LOCVAL(LOCALE_ILANGUAGE,"18")
1101 LOCVAL(LOCALE_SLANGUAGE,"\307\321\261\271\276\356")
1102 LOCVAL(LOCALE_SENGLANGUAGE,"Korean")
1103 LOCVAL(LOCALE_SABBREVLANGNAME,"KOR")
1104 LOCVAL(LOCALE_SNATIVELANGNAME,"\307\321\261\271\276\356")
1105 LOCVAL(LOCALE_ICOUNTRY,"82")
1106 LOCVAL(LOCALE_SCOUNTRY,"\264\353\307\321\271\316\261\271")
1107 LOCVAL(LOCALE_SENGCOUNTRY,"Korea (South)")
1108 LOCVAL(LOCALE_SABBREVCTRYNAME,"KOR")
1109 LOCVAL(LOCALE_SNATIVECTRYNAME,"\264\353\307\321\271\316\261\271")
1110 LOCVAL(LOCALE_IDEFAULTLANGUAGE,"18")
1111 LOCVAL(LOCALE_IDEFAULTCOUNTRY,"82")
1112 LOCVAL(LOCALE_IDEFAULTCODEPAGE,"949")
1113 LOCVAL(LOCALE_IDEFAULTANSICODEPAGE,"949")
1114 LOCVAL(LOCALE_SLIST,",")
1115 LOCVAL(LOCALE_IMEASURE,"0")
1116 LOCVAL(LOCALE_SDECIMAL,".")
1117 LOCVAL(LOCALE_STHOUSAND,",")
1118 LOCVAL(LOCALE_SGROUPING,"3;0")
1119 LOCVAL(LOCALE_IDIGITS,"2")
1120 LOCVAL(LOCALE_ILZERO,"0")
1121 LOCVAL(LOCALE_INEGNUMBER,"1")
1122 LOCVAL(LOCALE_SNATIVEDIGITS,"0123456789")
1123 LOCVAL(LOCALE_SCURRENCY,"\\")
1124 LOCVAL(LOCALE_SINTLSYMBOL,"Won")
1125 LOCVAL(LOCALE_SMONDECIMALSEP,".")
1126 LOCVAL(LOCALE_SMONTHOUSANDSEP,",")
1127 LOCVAL(LOCALE_SMONGROUPING,"3;0")
1128 LOCVAL(LOCALE_ICURRDIGITS,"2")
1129 LOCVAL(LOCALE_IINTLCURRDIGITS,"2")
1130 LOCVAL(LOCALE_ICURRENCY,"3")
1131 LOCVAL(LOCALE_INEGCURR,"8")
1132 LOCVAL(LOCALE_SDATE,"/")
1133 LOCVAL(LOCALE_STIME,":")
1134 LOCVAL(LOCALE_SSHORTDATE,"yyyy/MM/dd")
1135 LOCVAL(LOCALE_SLONGDATE,"yyyy/MM/dd")
1136 LOCVAL(LOCALE_STIMEFORMAT,"h:mm:ss tt")
1137 LOCVAL(LOCALE_IDATE,"1")
1138 LOCVAL(LOCALE_ILDATE,"1")
1139 LOCVAL(LOCALE_ITIME,"1")
1140 LOCVAL(LOCALE_ITIMEMARKPOSN,"0")
1141 LOCVAL(LOCALE_ICENTURY,"0")
1142 LOCVAL(LOCALE_ITLZERO,"0")
1143 LOCVAL(LOCALE_IDAYLZERO,"0")
1144 LOCVAL(LOCALE_IMONLZERO,"0")
1145 LOCVAL(LOCALE_S1159,"\277\300\300\374")
1146 LOCVAL(LOCALE_S2359,"\277\300\310\304")
1147 LOCVAL(LOCALE_ICALENDARTYPE,"1")
1148 /* Korean Tangun Era calendar */
1149 LOCVAL(LOCALE_IOPTIONALCALENDAR,"5")
1150 LOCVAL(LOCALE_IFIRSTDAYOFWEEK,"6")
1151 LOCVAL(LOCALE_IFIRSTWEEKOFYEAR,"0")
1152 LOCVAL(LOCALE_SDAYNAME1,"\277\371\277\344\300\317")
1153 LOCVAL(LOCALE_SDAYNAME2,"\310\255\277\344\300\317")
1154 LOCVAL(LOCALE_SDAYNAME3,"\274\366\277\344\300\317")
1155 LOCVAL(LOCALE_SDAYNAME4,"\270\361\277\344\300\317")
1156 LOCVAL(LOCALE_SDAYNAME5,"\261\335\277\344\300\317")
1157 LOCVAL(LOCALE_SDAYNAME6,"\305\344\277\344\300\317")
1158 LOCVAL(LOCALE_SDAYNAME7,"\300\317\277\344\300\317")
1159 LOCVAL(LOCALE_SABBREVDAYNAME1,"\277\371")
1160 LOCVAL(LOCALE_SABBREVDAYNAME2,"\310\255")
1161 LOCVAL(LOCALE_SABBREVDAYNAME3,"\274\366")
1162 LOCVAL(LOCALE_SABBREVDAYNAME4,"\270\361")
1163 LOCVAL(LOCALE_SABBREVDAYNAME5,"\261\335")
1164 LOCVAL(LOCALE_SABBREVDAYNAME6,"\305\344")
1165 LOCVAL(LOCALE_SABBREVDAYNAME7,"\300\317")
1166 LOCVAL(LOCALE_SMONTHNAME1,"1\277\371")
1167 LOCVAL(LOCALE_SMONTHNAME2,"2\277\371")
1168 LOCVAL(LOCALE_SMONTHNAME3,"3\277\371")
1169 LOCVAL(LOCALE_SMONTHNAME4,"4\277\371")
1170 LOCVAL(LOCALE_SMONTHNAME5,"5\277\371")
1171 LOCVAL(LOCALE_SMONTHNAME6,"6\277\371")
1172 LOCVAL(LOCALE_SMONTHNAME7,"7\277\371")
1173 LOCVAL(LOCALE_SMONTHNAME8,"8\277\371")
1174 LOCVAL(LOCALE_SMONTHNAME9,"9\277\371")
1175 LOCVAL(LOCALE_SMONTHNAME10,"10\277\371")
1176 LOCVAL(LOCALE_SMONTHNAME11,"11\277\371")
1177 LOCVAL(LOCALE_SMONTHNAME12,"12\277\371")
1178 LOCVAL(LOCALE_SMONTHNAME13,"")
1179 LOCVAL(LOCALE_SABBREVMONTHNAME1,"1\277\371")
1180 LOCVAL(LOCALE_SABBREVMONTHNAME2,"2\277\371")
1181 LOCVAL(LOCALE_SABBREVMONTHNAME3,"3\277\371")
1182 LOCVAL(LOCALE_SABBREVMONTHNAME4,"4\277\371")
1183 LOCVAL(LOCALE_SABBREVMONTHNAME5,"5\277\371")
1184 LOCVAL(LOCALE_SABBREVMONTHNAME6,"6\277\371")
1185 LOCVAL(LOCALE_SABBREVMONTHNAME7,"7\277\371")
1186 LOCVAL(LOCALE_SABBREVMONTHNAME8,"8\277\371")
1187 LOCVAL(LOCALE_SABBREVMONTHNAME9,"9\277\371")
1188 LOCVAL(LOCALE_SABBREVMONTHNAME10,"10\277\371")
1189 LOCVAL(LOCALE_SABBREVMONTHNAME11,"11\277\371")
1190 LOCVAL(LOCALE_SABBREVMONTHNAME12,"12\277\371")
1191 LOCVAL(LOCALE_SABBREVMONTHNAME13,"")
1192 LOCVAL(LOCALE_SPOSITIVESIGN,"")
1193 LOCVAL(LOCALE_SNEGATIVESIGN,"-")
1194 LOCVAL(LOCALE_IPOSSIGNPOSN,"3")
1195 LOCVAL(LOCALE_INEGSIGNPOSN,"0")
1196 LOCVAL(LOCALE_IPOSSYMPRECEDES,"3")
1197 LOCVAL(LOCALE_IPOSSEPBYSPACE,"0")
1198 LOCVAL(LOCALE_INEGSYMPRECEDES,"3")
1199 LOCVAL(LOCALE_INEGSEPBYSPACE,"0")
1200 default: found=0;break;
1202 break; /* LANG(Ko) */
1204 case LANG_Hu:
1205 switch (LCType) {
1206 LOCVAL(LOCALE_ILANGUAGE,"9")
1207 LOCVAL(LOCALE_SLANGUAGE,"Magyar")
1208 LOCVAL(LOCALE_SENGLANGUAGE,"Hungarian")
1209 LOCVAL(LOCALE_SABBREVLANGNAME,"hun")
1210 LOCVAL(LOCALE_SNATIVELANGNAME,"Magyar")
1211 LOCVAL(LOCALE_ICOUNTRY,"36")
1212 LOCVAL(LOCALE_SCOUNTRY,"Magyarország")
1213 LOCVAL(LOCALE_SENGCOUNTRY,"Hungary")
1214 LOCVAL(LOCALE_SABBREVCTRYNAME,"Hu")
1215 LOCVAL(LOCALE_SNATIVECTRYNAME,"Magyarország")
1216 LOCVAL(LOCALE_IDEFAULTLANGUAGE,"9")
1217 LOCVAL(LOCALE_IDEFAULTCOUNTRY,"36")
1218 LOCVAL(LOCALE_IDEFAULTCODEPAGE,"852")
1219 LOCVAL(LOCALE_IDEFAULTANSICODEPAGE,"852")
1220 LOCVAL(LOCALE_SLIST,";")
1221 LOCVAL(LOCALE_IMEASURE,"0")
1222 LOCVAL(LOCALE_SDECIMAL,".")
1223 LOCVAL(LOCALE_STHOUSAND,",")
1225 LOCVAL(LOCALE_SGROUPING)
1227 LOCVAL(LOCALE_IDIGITS,"2")
1228 LOCVAL(LOCALE_ILZERO,"1")
1230 LOCVAL(LOCALE_INEGNUMBER)
1231 Is this "0123456789" ??
1232 LOCVAL(LOCALE_SNATIVEDIGITS)
1234 LOCVAL(LOCALE_SCURRENCY,"Ft")
1236 LOCVAL(LOCALE_SINTLSYMBOL)
1237 LOCVAL(LOCALE_SMONDECIMALSEP)
1238 LOCVAL(LOCALE_SMONTHOUSANDSEP)
1239 LOCVAL(LOCALE_SMONGROUPING)
1241 LOCVAL(LOCALE_ICURRDIGITS,"0")
1243 LOCVAL(LOCALE_IINTLCURRDIGITS)
1245 LOCVAL(LOCALE_ICURRENCY,"3")
1246 LOCVAL(LOCALE_INEGCURR,"8")
1247 LOCVAL(LOCALE_SDATE,"/")
1248 LOCVAL(LOCALE_STIME,":")
1249 LOCVAL(LOCALE_SSHORTDATE,"yyyy.MM.dd")
1250 LOCVAL(LOCALE_SLONGDATE,"ddd, yyyy. MMMM d")
1252 LOCVAL(LOCALE_STIMEFORMAT)
1254 LOCVAL(LOCALE_IDATE,"1")
1256 LOCVAL(LOCALE_ILDATE)
1258 LOCVAL(LOCALE_ITIME,"1")
1260 LOCVAL(LOCALE_ITIMEMARKPOSN)
1261 LOCVAL(LOCALE_ICENTURY)
1263 LOCVAL(LOCALE_ITLZERO,"1")
1265 LOCVAL(LOCALE_IDAYLZERO)
1266 LOCVAL(LOCALE_IMONLZERO)
1267 LOCVAL(LOCALE_S1159)
1268 LOCVAL(LOCALE_S2359)
1269 LOCVAL(LOCALE_ICALENDARTYPE)
1270 LOCVAL(LOCALE_IOPTIONALCALENDAR)
1271 LOCVAL(LOCALE_IFIRSTDAYOFWEEK)
1272 LOCVAL(LOCALE_IFIRSTWEEKOFYEAR)
1274 LOCVAL(LOCALE_SDAYNAME1,"Hétfõ")
1275 LOCVAL(LOCALE_SDAYNAME2,"Kedd")
1276 LOCVAL(LOCALE_SDAYNAME3,"Szerda")
1277 LOCVAL(LOCALE_SDAYNAME4,"Csütörtök")
1278 LOCVAL(LOCALE_SDAYNAME5,"Péntek")
1279 LOCVAL(LOCALE_SDAYNAME6,"Szombat")
1280 LOCVAL(LOCALE_SDAYNAME7,"Vasárnap")
1281 LOCVAL(LOCALE_SABBREVDAYNAME1,"Hé")
1282 LOCVAL(LOCALE_SABBREVDAYNAME2,"Ke")
1283 LOCVAL(LOCALE_SABBREVDAYNAME3,"Se")
1284 LOCVAL(LOCALE_SABBREVDAYNAME4,"Cs")
1285 LOCVAL(LOCALE_SABBREVDAYNAME5,"Pé")
1286 LOCVAL(LOCALE_SABBREVDAYNAME6,"So")
1287 LOCVAL(LOCALE_SABBREVDAYNAME7,"Va")
1288 LOCVAL(LOCALE_SMONTHNAME1,"Január")
1289 LOCVAL(LOCALE_SMONTHNAME2,"Február")
1290 LOCVAL(LOCALE_SMONTHNAME3,"Március")
1291 LOCVAL(LOCALE_SMONTHNAME4,"Április")
1292 LOCVAL(LOCALE_SMONTHNAME5,"Május")
1293 LOCVAL(LOCALE_SMONTHNAME6,"Június")
1294 LOCVAL(LOCALE_SMONTHNAME7,"Július")
1295 LOCVAL(LOCALE_SMONTHNAME8,"Augusztus")
1296 LOCVAL(LOCALE_SMONTHNAME9,"Szeptember")
1297 LOCVAL(LOCALE_SMONTHNAME10,"Október")
1298 LOCVAL(LOCALE_SMONTHNAME11,"November")
1299 LOCVAL(LOCALE_SMONTHNAME12,"December")
1300 LOCVAL(LOCALE_SMONTHNAME13,"")
1301 LOCVAL(LOCALE_SABBREVMONTHNAME1,"Jan")
1302 LOCVAL(LOCALE_SABBREVMONTHNAME2,"Feb")
1303 LOCVAL(LOCALE_SABBREVMONTHNAME3,"Már")
1304 LOCVAL(LOCALE_SABBREVMONTHNAME4,"Ápr")
1305 LOCVAL(LOCALE_SABBREVMONTHNAME5,"Máj")
1306 LOCVAL(LOCALE_SABBREVMONTHNAME6,"Jún")
1307 LOCVAL(LOCALE_SABBREVMONTHNAME7,"Júl")
1308 LOCVAL(LOCALE_SABBREVMONTHNAME8,"Aug")
1309 LOCVAL(LOCALE_SABBREVMONTHNAME9,"Sze")
1310 LOCVAL(LOCALE_SABBREVMONTHNAME10,"Okt")
1311 LOCVAL(LOCALE_SABBREVMONTHNAME11,"Nov")
1312 LOCVAL(LOCALE_SABBREVMONTHNAME12,"Dec")
1313 LOCVAL(LOCALE_SABBREVMONTHNAME13,"")
1315 LOCVAL(LOCALE_SPOSITIVESIGN)
1316 LOCVAL(LOCALE_SNEGATIVESIGN)
1317 LOCVAL(LOCALE_IPOSSIGNPOSN)
1318 LOCVAL(LOCALE_INEGSIGNPOSN)
1319 LOCVAL(LOCALE_IPOSSYMPRECEDES)
1320 LOCVAL(LOCALE_IPOSSEPBYSPACE)
1321 LOCVAL(LOCALE_INEGSYMPRECEDES)
1322 LOCVAL(LOCALE_INEGSEPBYSPACE)
1324 default: found=0;break;
1326 break; /* LANG(En) */
1328 case LANG_Pl:
1329 switch (LCType) {
1330 LOCVAL(LOCALE_ILANGUAGE,"9")
1331 LOCVAL(LOCALE_SLANGUAGE,"Polski")
1332 LOCVAL(LOCALE_SENGLANGUAGE,"Polish")
1333 LOCVAL(LOCALE_SABBREVLANGNAME, "pol")
1334 LOCVAL(LOCALE_SNATIVELANGNAME,"Polski")
1335 LOCVAL(LOCALE_ICOUNTRY,"49")
1336 LOCVAL(LOCALE_SCOUNTRY,"Polska")
1337 LOCVAL(LOCALE_SENGCOUNTRY,"Poland")
1338 LOCVAL(LOCALE_SABBREVCTRYNAME,"Pl")
1339 LOCVAL(LOCALE_SNATIVECTRYNAME,"Polska")
1340 LOCVAL(LOCALE_IDEFAULTLANGUAGE,"9")
1341 LOCVAL(LOCALE_IDEFAULTCOUNTRY,"49")
1342 LOCVAL(LOCALE_IDEFAULTCODEPAGE,"1252")
1343 LOCVAL(LOCALE_IDEFAULTANSICODEPAGE,"1252")
1344 LOCVAL(LOCALE_SLIST,";")
1345 LOCVAL(LOCALE_IMEASURE,"0")
1346 LOCVAL(LOCALE_SDECIMAL,",")
1347 LOCVAL(LOCALE_STHOUSAND," ")
1349 LOCVAL(LOCALE_SGROUPING)
1351 LOCVAL(LOCALE_IDIGITS,"2")
1352 LOCVAL(LOCALE_ILZERO,"1")
1354 LOCVAL(LOCALE_INEGNUMBER)
1355 Is this "0123456789" ??
1356 LOCVAL(LOCALE_SNATIVEDIGITS)
1358 LOCVAL(LOCALE_SCURRENCY,"z\xB3")
1360 LOCVAL(LOCALE_SINTLSYMBOL)
1361 LOCVAL(LOCALE_SMONDECIMALSEP)
1362 LOCVAL(LOCALE_SMONTHOUSANDSEP)
1363 LOCVAL(LOCALE_SMONGROUPING)
1365 LOCVAL(LOCALE_ICURRDIGITS,"2")
1367 LOCVAL(LOCALE_IINTLCURRDIGITS)
1369 LOCVAL(LOCALE_ICURRENCY,"3")
1370 LOCVAL(LOCALE_INEGCURR,"8")
1371 LOCVAL(LOCALE_SDATE,".")
1372 LOCVAL(LOCALE_STIME,":")
1373 LOCVAL(LOCALE_SSHORTDATE,"dd.MM.yyyy")
1374 LOCVAL(LOCALE_SLONGDATE,"ddd, d. MMMM yyyy")
1376 LOCVAL(LOCALE_STIMEFORMAT)
1378 LOCVAL(LOCALE_IDATE,"1")
1380 LOCVAL(LOCALE_ILDATE)
1382 LOCVAL(LOCALE_ITIME,"1")
1384 LOCVAL(LOCALE_ITIMEMARKPOSN)
1385 LOCVAL(LOCALE_ICENTURY)
1387 LOCVAL(LOCALE_ITLZERO,"1")
1389 LOCVAL(LOCALE_IDAYLZERO)
1390 LOCVAL(LOCALE_IMONLZERO)
1391 LOCVAL(LOCALE_S1159)
1392 LOCVAL(LOCALE_S2359)
1393 LOCVAL(LOCALE_ICALENDARTYPE)
1394 LOCVAL(LOCALE_IOPTIONALCALENDAR)
1395 LOCVAL(LOCALE_IFIRSTDAYOFWEEK)
1396 LOCVAL(LOCALE_IFIRSTWEEKOFYEAR)
1398 LOCVAL(LOCALE_SDAYNAME1,"Poniedzia\263ek")
1399 LOCVAL(LOCALE_SDAYNAME2,"Wtorek")
1400 LOCVAL(LOCALE_SDAYNAME3,"Sroda")
1401 LOCVAL(LOCALE_SDAYNAME4,"Czwartek")
1402 LOCVAL(LOCALE_SDAYNAME5,"Pi\xB9tek")
1403 LOCVAL(LOCALE_SDAYNAME6,"Sobota")
1404 LOCVAL(LOCALE_SDAYNAME7,"Niedziela")
1405 LOCVAL(LOCALE_SABBREVDAYNAME1,"Po")
1406 LOCVAL(LOCALE_SABBREVDAYNAME2,"Wt")
1407 LOCVAL(LOCALE_SABBREVDAYNAME3,"Sr")
1408 LOCVAL(LOCALE_SABBREVDAYNAME4,"Cz")
1409 LOCVAL(LOCALE_SABBREVDAYNAME5,"Pt")
1410 LOCVAL(LOCALE_SABBREVDAYNAME6,"So")
1411 LOCVAL(LOCALE_SABBREVDAYNAME7,"Ni")
1412 LOCVAL(LOCALE_SMONTHNAME1,"Stycze\xF1")
1413 LOCVAL(LOCALE_SMONTHNAME2,"Luty")
1414 LOCVAL(LOCALE_SMONTHNAME3,"Marzec")
1415 LOCVAL(LOCALE_SMONTHNAME4,"Kwiecie\xF1")
1416 LOCVAL(LOCALE_SMONTHNAME5,"Maj")
1417 LOCVAL(LOCALE_SMONTHNAME6,"Czerwiec")
1418 LOCVAL(LOCALE_SMONTHNAME7,"Lipiec")
1419 LOCVAL(LOCALE_SMONTHNAME8,"Sierpie\xF1")
1420 LOCVAL(LOCALE_SMONTHNAME9,"Wrzesie\xF1")
1421 LOCVAL(LOCALE_SMONTHNAME10,"Pa\237dziernik")
1422 LOCVAL(LOCALE_SMONTHNAME11,"Listapad")
1423 LOCVAL(LOCALE_SMONTHNAME12,"Grudzie\xF1")
1424 LOCVAL(LOCALE_SMONTHNAME13,"")
1425 LOCVAL(LOCALE_SABBREVMONTHNAME1,"Sty")
1426 LOCVAL(LOCALE_SABBREVMONTHNAME2,"Lut")
1427 LOCVAL(LOCALE_SABBREVMONTHNAME3,"Mar")
1428 LOCVAL(LOCALE_SABBREVMONTHNAME4,"Kwi")
1429 LOCVAL(LOCALE_SABBREVMONTHNAME5,"Maj")
1430 LOCVAL(LOCALE_SABBREVMONTHNAME6,"Cze")
1431 LOCVAL(LOCALE_SABBREVMONTHNAME7,"Lip")
1432 LOCVAL(LOCALE_SABBREVMONTHNAME8,"Sie")
1433 LOCVAL(LOCALE_SABBREVMONTHNAME9,"Wrz")
1434 LOCVAL(LOCALE_SABBREVMONTHNAME10,"Pa\x9F")
1435 LOCVAL(LOCALE_SABBREVMONTHNAME11,"Lis")
1436 LOCVAL(LOCALE_SABBREVMONTHNAME12,"Gru")
1437 LOCVAL(LOCALE_SABBREVMONTHNAME13,"")
1439 LOCVAL(LOCALE_SPOSITIVESIGN)
1440 LOCVAL(LOCALE_SNEGATIVESIGN)
1441 LOCVAL(LOCALE_IPOSSIGNPOSN)
1442 LOCVAL(LOCALE_INEGSIGNPOSN)
1443 LOCVAL(LOCALE_IPOSSYMPRECEDES)
1444 LOCVAL(LOCALE_IPOSSEPBYSPACE)
1445 LOCVAL(LOCALE_INEGSYMPRECEDES)
1446 LOCVAL(LOCALE_INEGSEPBYSPACE)
1448 default: found=0;break;
1450 break; /* LANG(Pl) */
1452 case LANG_Po:
1453 switch (LCType) {
1454 LOCVAL(LOCALE_ILANGUAGE, "0416")
1455 LOCVAL(LOCALE_SLANGUAGE, "Portugu\352s (Brasil)")
1456 LOCVAL(LOCALE_SENGLANGUAGE, "Protuguese")
1457 LOCVAL(LOCALE_SABBREVLANGNAME, "POR")
1458 LOCVAL(LOCALE_SNATIVELANGNAME, "Portugu\352s")
1459 LOCVAL(LOCALE_ICOUNTRY, "1")
1460 LOCVAL(LOCALE_SCOUNTRY, "Brasil")
1461 LOCVAL(LOCALE_SENGCOUNTRY, "Brazil")
1462 LOCVAL(LOCALE_SABBREVCTRYNAME, "BRA")
1463 LOCVAL(LOCALE_SNATIVECTRYNAME, "Brasil")
1464 LOCVAL(LOCALE_IDEFAULTLANGUAGE, "0409")
1465 LOCVAL(LOCALE_IDEFAULTCOUNTRY, "1")
1466 LOCVAL(LOCALE_IDEFAULTCODEPAGE, "437")
1467 LOCVAL(LOCALE_IDEFAULTANSICODEPAGE, "1252")
1468 LOCVAL(LOCALE_SLIST, ";")
1469 LOCVAL(LOCALE_IMEASURE, "1")
1470 LOCVAL(LOCALE_SDECIMAL, ",")
1471 LOCVAL(LOCALE_STHOUSAND, ".")
1472 LOCVAL(LOCALE_SGROUPING, "3;0")
1473 LOCVAL(LOCALE_IDIGITS, "2")
1474 LOCVAL(LOCALE_ILZERO, "1")
1475 LOCVAL(LOCALE_INEGNUMBER, "1")
1476 LOCVAL(LOCALE_SNATIVEDIGITS, "0123456789")
1477 LOCVAL(LOCALE_SCURRENCY, "$")
1478 LOCVAL(LOCALE_SINTLSYMBOL, "USD")
1479 LOCVAL(LOCALE_SMONDECIMALSEP, ",")
1480 LOCVAL(LOCALE_SMONTHOUSANDSEP, ".")
1481 LOCVAL(LOCALE_SMONGROUPING, "3;0")
1482 LOCVAL(LOCALE_ICURRDIGITS, "2")
1483 LOCVAL(LOCALE_IINTLCURRDIGITS, "2")
1484 LOCVAL(LOCALE_ICURRENCY, "0")
1485 LOCVAL(LOCALE_INEGCURR, "0")
1486 LOCVAL(LOCALE_SDATE, "/")
1487 LOCVAL(LOCALE_STIME, ":")
1488 LOCVAL(LOCALE_SSHORTDATE, "dd/MM/yy")
1489 LOCVAL(LOCALE_SLONGDATE, "dddd, MMMM dd, yyyy")
1490 LOCVAL(LOCALE_STIMEFORMAT, "h:mm:ss tt")
1491 LOCVAL(LOCALE_IDATE, "0")
1492 LOCVAL(LOCALE_ILDATE, "0")
1493 LOCVAL(LOCALE_ITIME, "0")
1494 LOCVAL(LOCALE_ITIMEMARKPOSN, "0")
1495 LOCVAL(LOCALE_ICENTURY, "0")
1496 LOCVAL(LOCALE_ITLZERO, "0")
1497 LOCVAL(LOCALE_IDAYLZERO, "0")
1498 LOCVAL(LOCALE_IMONLZERO, "0")
1499 LOCVAL(LOCALE_S1159, "AM")
1500 LOCVAL(LOCALE_S2359, "PM")
1501 LOCVAL(LOCALE_ICALENDARTYPE, "1")
1502 LOCVAL(LOCALE_IOPTIONALCALENDAR, "0")
1503 LOCVAL(LOCALE_IFIRSTDAYOFWEEK, "6")
1504 LOCVAL(LOCALE_IFIRSTWEEKOFYEAR, "0")
1505 LOCVAL(LOCALE_SDAYNAME1, "Segunda")
1506 LOCVAL(LOCALE_SDAYNAME2, "Ter\347a")
1507 LOCVAL(LOCALE_SDAYNAME3, "Quarta")
1508 LOCVAL(LOCALE_SDAYNAME4, "Quinta")
1509 LOCVAL(LOCALE_SDAYNAME5, "Sexta")
1510 LOCVAL(LOCALE_SDAYNAME6, "S\341bado")
1511 LOCVAL(LOCALE_SDAYNAME7, "Domingo")
1512 LOCVAL(LOCALE_SABBREVDAYNAME1, "Seg")
1513 LOCVAL(LOCALE_SABBREVDAYNAME2, "Ter")
1514 LOCVAL(LOCALE_SABBREVDAYNAME3, "Qua")
1515 LOCVAL(LOCALE_SABBREVDAYNAME4, "Qui")
1516 LOCVAL(LOCALE_SABBREVDAYNAME5, "Sex")
1517 LOCVAL(LOCALE_SABBREVDAYNAME6, "S\341b")
1518 LOCVAL(LOCALE_SABBREVDAYNAME7, "Dom")
1519 LOCVAL(LOCALE_SMONTHNAME1, "Janeiro")
1520 LOCVAL(LOCALE_SMONTHNAME2, "Fevereiro")
1521 LOCVAL(LOCALE_SMONTHNAME3, "Mar\347o")
1522 LOCVAL(LOCALE_SMONTHNAME4, "Abril")
1523 LOCVAL(LOCALE_SMONTHNAME5, "Maio")
1524 LOCVAL(LOCALE_SMONTHNAME6, "Junho")
1525 LOCVAL(LOCALE_SMONTHNAME7, "Julho")
1526 LOCVAL(LOCALE_SMONTHNAME8, "Agosto")
1527 LOCVAL(LOCALE_SMONTHNAME9, "Setembro")
1528 LOCVAL(LOCALE_SMONTHNAME10, "Outubro")
1529 LOCVAL(LOCALE_SMONTHNAME11, "Novembro")
1530 LOCVAL(LOCALE_SMONTHNAME12, "Dezembro")
1531 LOCVAL(LOCALE_SMONTHNAME13, "")
1532 LOCVAL(LOCALE_SABBREVMONTHNAME1, "Jan")
1533 LOCVAL(LOCALE_SABBREVMONTHNAME2, "Fev")
1534 LOCVAL(LOCALE_SABBREVMONTHNAME3, "Mar")
1535 LOCVAL(LOCALE_SABBREVMONTHNAME4, "Abr")
1536 LOCVAL(LOCALE_SABBREVMONTHNAME5, "Mai")
1537 LOCVAL(LOCALE_SABBREVMONTHNAME6, "Jun")
1538 LOCVAL(LOCALE_SABBREVMONTHNAME7, "Jul")
1539 LOCVAL(LOCALE_SABBREVMONTHNAME8, "Ago")
1540 LOCVAL(LOCALE_SABBREVMONTHNAME9, "Set")
1541 LOCVAL(LOCALE_SABBREVMONTHNAME10, "Out")
1542 LOCVAL(LOCALE_SABBREVMONTHNAME11, "Nov")
1543 LOCVAL(LOCALE_SABBREVMONTHNAME12, "Dez")
1544 LOCVAL(LOCALE_SABBREVMONTHNAME13, "")
1545 LOCVAL(LOCALE_SPOSITIVESIGN, "")
1546 LOCVAL(LOCALE_SNEGATIVESIGN, "-")
1547 LOCVAL(LOCALE_IPOSSIGNPOSN, "3")
1548 LOCVAL(LOCALE_INEGSIGNPOSN, "0")
1549 LOCVAL(LOCALE_IPOSSYMPRECEDES, "1")
1550 LOCVAL(LOCALE_IPOSSEPBYSPACE, "0")
1551 LOCVAL(LOCALE_INEGSYMPRECEDES, "1")
1552 LOCVAL(LOCALE_INEGSEPBYSPACE, "0")
1553 default: found=0;break;
1555 break; /* LANG(Po) */
1557 case LANG_Sw:
1558 switch (LCType) {
1559 LOCVAL(LOCALE_ILANGUAGE,"1d")
1560 LOCVAL(LOCALE_SLANGUAGE,"Svenska")
1561 LOCVAL(LOCALE_SENGLANGUAGE,"Swedish")
1562 LOCVAL(LOCALE_SABBREVLANGNAME,"SV")
1563 LOCVAL(LOCALE_SNATIVELANGNAME,"Svenska")
1564 LOCVAL(LOCALE_ICOUNTRY,"45")
1565 LOCVAL(LOCALE_SCOUNTRY,"SWE")
1566 LOCVAL(LOCALE_SENGCOUNTRY,"Sweden")
1567 LOCVAL(LOCALE_SABBREVCTRYNAME,"SVE")
1568 LOCVAL(LOCALE_SNATIVECTRYNAME,"Sverige")
1569 LOCVAL(LOCALE_IDEFAULTLANGUAGE,"1d")
1570 LOCVAL(LOCALE_IDEFAULTCOUNTRY,"45")
1571 /* LOCVAL(LOCALE_IDEFAULTCODEPAGE) */
1572 /* LOCVAL(LOCALE_IDEFAULTANSICODEPAGE) */
1573 LOCVAL(LOCALE_SLIST,";")
1574 LOCVAL(LOCALE_IMEASURE,"0")
1575 LOCVAL(LOCALE_SDECIMAL,",")
1576 LOCVAL(LOCALE_STHOUSAND,".")
1577 /* LOCVAL(LOCALE_SGROUPING) */
1578 LOCVAL(LOCALE_IDIGITS,"2")
1579 LOCVAL(LOCALE_ILZERO,"1")
1580 /* LOCVAL(LOCALE_INEGNUMBER) */
1581 /* LOCVAL(LOCALE_SNATIVEDIGITS) */
1582 LOCVAL(LOCALE_SCURRENCY,"kr")
1583 /* LOCVAL(LOCALE_SINTLSYMBOL) */
1584 LOCVAL(LOCALE_SMONDECIMALSEP,",")
1585 LOCVAL(LOCALE_SMONTHOUSANDSEP,".")
1586 /* LOCVAL(LOCALE_SMONGROUPING) */
1587 LOCVAL(LOCALE_ICURRDIGITS,"2")
1588 /* LOCVAL(LOCALE_IINTLCURRDIGITS) */
1589 LOCVAL(LOCALE_ICURRENCY,"3")
1590 LOCVAL(LOCALE_INEGCURR,"8")
1591 LOCVAL(LOCALE_SDATE,".")
1592 LOCVAL(LOCALE_STIME,":")
1593 LOCVAL(LOCALE_SSHORTDATE,"dd/MM-yyyy")
1594 LOCVAL(LOCALE_SLONGDATE,"ddd, d. MMMM yyyy")
1595 /* LOCVAL(LOCALE_STIMEFORMAT) */
1596 LOCVAL(LOCALE_IDATE,"1")
1597 /* LOCVAL(LOCALE_ILDATE) */
1598 LOCVAL(LOCALE_ITIME,"1")
1599 /* LOCVAL(LOCALE_ITIMEMARKPOSN) */
1600 /* LOCVAL(LOCALE_ICENTURY) */
1601 LOCVAL(LOCALE_ITLZERO,"1")
1602 /* LOCVAL(LOCALE_IDAYLZERO) */
1603 /* LOCVAL(LOCALE_IMONLZERO) */
1604 LOCVAL(LOCALE_S1159, "")
1605 LOCVAL(LOCALE_S2359, "")
1606 /* LOCVAL(LOCALE_ICALENDARTYPE) */
1607 /* LOCVAL(LOCALE_IOPTIONALCALENDAR) */
1608 /* LOCVAL(LOCALE_IFIRSTDAYOFWEEK) */
1609 /* LOCVAL(LOCALE_IFIRSTWEEKOFYEAR) */
1610 LOCVAL(LOCALE_SDAYNAME1,"Måndag")
1611 LOCVAL(LOCALE_SDAYNAME2,"Tisdag")
1612 LOCVAL(LOCALE_SDAYNAME3,"Onsdag")
1613 LOCVAL(LOCALE_SDAYNAME4,"Torsdag")
1614 LOCVAL(LOCALE_SDAYNAME5,"Fredag")
1615 LOCVAL(LOCALE_SDAYNAME6,"Lördag")
1616 LOCVAL(LOCALE_SDAYNAME7,"Söndag")
1617 LOCVAL(LOCALE_SABBREVDAYNAME1,"Må")
1618 LOCVAL(LOCALE_SABBREVDAYNAME2,"Ti")
1619 LOCVAL(LOCALE_SABBREVDAYNAME3,"On")
1620 LOCVAL(LOCALE_SABBREVDAYNAME4,"To")
1621 LOCVAL(LOCALE_SABBREVDAYNAME5,"Fr")
1622 LOCVAL(LOCALE_SABBREVDAYNAME6,"Lö")
1623 LOCVAL(LOCALE_SABBREVDAYNAME7,"Sö")
1624 LOCVAL(LOCALE_SMONTHNAME1,"Januari")
1625 LOCVAL(LOCALE_SMONTHNAME2,"Februari")
1626 LOCVAL(LOCALE_SMONTHNAME3,"Mars")
1627 LOCVAL(LOCALE_SMONTHNAME4,"April")
1628 LOCVAL(LOCALE_SMONTHNAME5,"Maj")
1629 LOCVAL(LOCALE_SMONTHNAME6,"Juni")
1630 LOCVAL(LOCALE_SMONTHNAME7,"Juli")
1631 LOCVAL(LOCALE_SMONTHNAME8,"Augusti")
1632 LOCVAL(LOCALE_SMONTHNAME9,"September")
1633 LOCVAL(LOCALE_SMONTHNAME10,"Oktober")
1634 LOCVAL(LOCALE_SMONTHNAME11,"November")
1635 LOCVAL(LOCALE_SMONTHNAME12,"December")
1636 LOCVAL(LOCALE_SMONTHNAME13,"")
1637 LOCVAL(LOCALE_SABBREVMONTHNAME1,"Jan")
1638 LOCVAL(LOCALE_SABBREVMONTHNAME2,"Feb")
1639 LOCVAL(LOCALE_SABBREVMONTHNAME3,"Mar")
1640 LOCVAL(LOCALE_SABBREVMONTHNAME4,"Apr")
1641 LOCVAL(LOCALE_SABBREVMONTHNAME5,"Maj")
1642 LOCVAL(LOCALE_SABBREVMONTHNAME6,"Jun")
1643 LOCVAL(LOCALE_SABBREVMONTHNAME7,"Jul")
1644 LOCVAL(LOCALE_SABBREVMONTHNAME8,"Aug")
1645 LOCVAL(LOCALE_SABBREVMONTHNAME9,"Sep")
1646 LOCVAL(LOCALE_SABBREVMONTHNAME10,"Okt")
1647 LOCVAL(LOCALE_SABBREVMONTHNAME11,"Nov")
1648 LOCVAL(LOCALE_SABBREVMONTHNAME12,"Dec")
1649 LOCVAL(LOCALE_SABBREVMONTHNAME13,"")
1650 LOCVAL(LOCALE_SPOSITIVESIGN, "")
1651 LOCVAL(LOCALE_SNEGATIVESIGN, "-")
1652 LOCVAL(LOCALE_IPOSSIGNPOSN, "3")
1653 LOCVAL(LOCALE_INEGSIGNPOSN, "3")
1654 LOCVAL(LOCALE_IPOSSYMPRECEDES, "1")
1655 LOCVAL(LOCALE_IPOSSEPBYSPACE, "0")
1656 LOCVAL(LOCALE_INEGSYMPRECEDES, "1")
1657 LOCVAL(LOCALE_INEGSEPBYSPACE, "0")
1658 default: found=0;break;
1660 break; /* LANG(Sw) */
1662 /*Insert other languages here*/
1664 default:
1665 found=0;
1666 break;
1667 } /* switch */
1669 if(!found) {
1670 ERR(ole,"'%s' not supported for your language.\n",
1671 retString);
1672 retString = "<WINE-NLS-unknown>";
1673 /*return 0;*/
1675 if (buf)
1676 lstrcpyn32A(buf,retString,len);
1677 return strlen(retString)+1;
1680 /***********************************************************************
1681 * GetLocaleInfo32W (KERNEL32.230)
1682 * Is the last parameter really WORD for Win16?
1684 INT32 WINAPI GetLocaleInfo32W(LCID lcid,LCTYPE LCType,LPWSTR wbuf,INT32 len)
1686 LPSTR abuf = (LPSTR)HeapAlloc(GetProcessHeap(),0,len);
1688 INT32 n = GetLocaleInfo32A(lcid, LCType, abuf, len);
1689 if (wbuf)
1690 lstrcpynAtoW(wbuf,abuf,len);
1691 HeapFree(GetProcessHeap(),0,abuf);
1692 return n;
1695 /***********************************************************************
1696 * CompareString16 (OLE2NLS.8)
1698 UINT16 WINAPI CompareString16(DWORD lcid,DWORD fdwStyle,
1699 LPCSTR s1,DWORD l1,LPCSTR s2,DWORD l2)
1701 return (UINT16)CompareString32A(lcid,fdwStyle,s1,l1,s2,l2);
1704 /***********************************************************************
1705 * CompareString32A (KERNEL32.29)
1706 * This implementation ignores the locale
1707 * FIXME
1709 UINT32 WINAPI CompareString32A(DWORD lcid, DWORD fdwStyle,
1710 LPCSTR s1, DWORD l1, LPCSTR s2,DWORD l2)
1712 int len,ret;
1713 if(fdwStyle & NORM_IGNORENONSPACE)
1714 FIXME(ole, "IGNORENONSPACE not supprted\n");
1715 if(fdwStyle & NORM_IGNORESYMBOLS)
1716 FIXME(ole, "IGNORESYMBOLS not supported\n");
1717 /* Is strcmp defaulting to string sort or to word sort?? */
1718 /* FIXME: Handle NORM_STRINGSORT */
1719 l1 = (l1==-1)?strlen(s1):l1;
1720 l2 = (l2==-1)?strlen(s2):l2;
1721 len = l1<l2 ? l1:l2;
1722 ret = (fdwStyle & NORM_IGNORECASE) ?
1723 lstrncmpi32A(s1,s2,len) : lstrncmp32A(s1,s2,len);
1724 /* not equal, return 1 or 3 */
1725 if(ret!=0)return ret+2;
1726 /* same len, return 2 */
1727 if(l1==l2)return 2;
1728 /* the longer one is lexically greater */
1729 return (l1<l2)? 1 : 3;
1732 /***********************************************************************
1733 * CompareString32W (KERNEL32.30)
1734 * This implementation ignores the locale
1735 * FIXME
1737 UINT32 WINAPI CompareString32W(DWORD lcid, DWORD fdwStyle,
1738 LPCWSTR s1, DWORD l1, LPCWSTR s2,DWORD l2)
1740 int len,ret;
1741 if(fdwStyle & NORM_IGNORENONSPACE)
1742 FIXME(ole,"IGNORENONSPACE not supprted\n");
1743 if(fdwStyle & NORM_IGNORESYMBOLS)
1744 FIXME(ole,"IGNORESYMBOLS not supported\n");
1746 /* Is strcmp defaulting to string sort or to word sort?? */
1747 /* FIXME: Handle NORM_STRINGSORT */
1748 l1 = (l1==-1)?lstrlen32W(s1):l1;
1749 l2 = (l2==-1)?lstrlen32W(s2):l2;
1750 len = l1<l2 ? l1:l2;
1751 ret = (fdwStyle & NORM_IGNORECASE) ?
1752 lstrncmpi32W(s1,s2,len) : lstrncmp32W(s1,s2,len);
1753 /* not equal, return 1 or 3 */
1754 if(ret!=0) return ret+2;
1755 /* same len, return 2 */
1756 if(l1==l2) return 2;
1757 /* the longer one is lexically greater */
1758 return (l1<l2)? 1 : 3;
1761 /***********************************************************************
1762 * SetLocaleInfoA [KERNEL32.499]
1764 BOOL16 WINAPI SetLocaleInfoA(DWORD lcid, DWORD lctype, LPCSTR data)
1766 FIXME(ole,"(%ld,%ld,%s): stub\n",lcid,lctype,data);
1767 return TRUE;
1770 /***********************************************************************
1771 * IsValidLocale [KERNEL32.361]
1773 BOOL32 WINAPI IsValidLocale(LCID lcid,DWORD flags)
1775 /* we support ANY language. Well, at least say that...*/
1776 return TRUE;
1779 /***********************************************************************
1780 * EnumSystemLocales32W [KERNEL32.93]
1782 BOOL32 WINAPI EnumSystemLocales32W( LOCALE_ENUMPROC32W lpfnLocaleEnum,
1783 DWORD flags )
1785 int i;
1786 BOOL32 ret;
1787 WCHAR buffer[200];
1788 HKEY xhkey;
1790 TRACE(win32,"(%p,%08lx)\n",lpfnLocaleEnum,flags );
1791 /* see if we can reuse the Win95 registry entries.... */
1792 if (ERROR_SUCCESS==RegOpenKey32A(HKEY_LOCAL_MACHINE,"\\System\\CurrentControlSet\\control\\Nls\\Locale\\",&xhkey)) {
1793 i=0;
1794 while (1) {
1795 if (ERROR_SUCCESS!=RegEnumKey32W(xhkey,i,buffer,sizeof(buffer)))
1796 break;
1797 if (!lpfnLocaleEnum(buffer))
1798 break;
1799 i++;
1801 RegCloseKey(xhkey);
1802 return TRUE;
1805 i=0;
1806 while (languages[i].langname!=NULL)
1808 LPWSTR cp;
1809 char xbuffer[10];
1811 sprintf(xbuffer,"%08lx",(DWORD)languages[i].langid);
1813 cp = HEAP_strdupAtoW( GetProcessHeap(), 0, xbuffer );
1814 ret = lpfnLocaleEnum(cp);
1815 HeapFree( GetProcessHeap(), 0, cp );
1816 if (!ret) break;
1817 i++;
1819 return TRUE;
1822 /***********************************************************************
1823 * EnumSystemLocales32A [KERNEL32.92]
1825 BOOL32 WINAPI EnumSystemLocales32A(LOCALE_ENUMPROC32A lpfnLocaleEnum,
1826 DWORD flags)
1828 int i;
1829 CHAR buffer[200];
1830 HKEY xhkey;
1832 TRACE(win32,"(%p,%08lx)\n",
1833 lpfnLocaleEnum,flags
1835 if (ERROR_SUCCESS==RegOpenKey32A(HKEY_LOCAL_MACHINE,"\\System\\CurrentControlSet\\control\\Nls\\Locale\\",&xhkey)) {
1836 i=0;
1837 while (1) {
1838 if (ERROR_SUCCESS!=RegEnumKey32A(xhkey,i,buffer,sizeof(buffer)))
1839 break;
1840 if (!lpfnLocaleEnum(buffer))
1841 break;
1842 i++;
1844 RegCloseKey(xhkey);
1845 return TRUE;
1847 i=0;
1848 while (languages[i].langname!=NULL) {
1849 sprintf(buffer,"%08lx",(DWORD)languages[i].langid);
1850 if (!lpfnLocaleEnum(buffer))
1851 break;
1852 i++;
1854 return TRUE;
1857 /***********************************************************************
1858 * GetStringTypeA [OLE2NLS.7]
1860 BOOL16 WINAPI GetStringType16(LCID locale,DWORD dwInfoType,LPCSTR src,
1861 INT16 cchSrc,LPWORD chartype)
1863 return GetStringTypeEx32A(locale,dwInfoType,src,cchSrc,chartype);
1865 /***********************************************************************
1866 * GetStringTypeA [KERNEL32.277]
1868 BOOL32 WINAPI GetStringType32A(LCID locale,DWORD dwInfoType,LPCSTR src,
1869 INT32 cchSrc,LPWORD chartype)
1871 return GetStringTypeEx32A(locale,dwInfoType,src,cchSrc,chartype);
1873 /***********************************************************************
1874 * GetStringTypeExA [KERNEL32.276]
1876 BOOL32 WINAPI GetStringTypeEx32A(LCID locale,DWORD dwInfoType,LPCSTR src,
1877 INT32 cchSrc,LPWORD chartype)
1879 int i;
1881 switch (dwInfoType) {
1882 case CT_CTYPE2:
1883 FIXME(ole,"CT_CTYPE2 not supported.\n");
1884 return FALSE;
1885 case CT_CTYPE3:
1886 FIXME(ole,"CT_CTYPE3 not supported.\n");
1887 return FALSE;
1888 default:break;
1890 if (cchSrc==-1)
1891 cchSrc=lstrlen32A(src);
1892 for (i=0;i<cchSrc;i++) {
1893 chartype[i] = 0;
1894 if (isdigit(src[i])) chartype[i]|=C1_DIGIT;
1895 if (isalpha(src[i])) chartype[i]|=C1_ALPHA;
1896 if (islower(src[i])) chartype[i]|=C1_LOWER;
1897 if (isupper(src[i])) chartype[i]|=C1_UPPER;
1898 if (isspace(src[i])) chartype[i]|=C1_SPACE;
1899 if (ispunct(src[i])) chartype[i]|=C1_PUNCT;
1900 if (iscntrl(src[i])) chartype[i]|=C1_CNTRL;
1901 /* FIXME: isblank() is a GNU extension */
1902 /* if (isblank(src[i])) chartype[i]|=C1_BLANK; */
1903 if ((src[i] == ' ') || (src[i] == '\t')) chartype[i]|=C1_BLANK;
1904 /* C1_XDIGIT */
1906 return TRUE;
1909 /*********************************************************************
1910 * GetStringTypeW [KERNEL32.279]
1912 * NOTES
1913 * Yes, this is missing LCID locale. MS fault.
1915 BOOL32 WINAPI GetStringType32W(DWORD dwInfoType,LPCWSTR src,INT32 cchSrc,
1916 LPWORD chartype)
1918 return GetStringTypeEx32W(0/*defaultlocale*/,dwInfoType,src,cchSrc,chartype);
1921 /*********************************************************************
1922 * GetStringTypeW [KERNEL32.278]
1923 * FIXME: unicode chars are assumed chars
1925 BOOL32 WINAPI GetStringTypeEx32W(LCID locale,DWORD dwInfoType,LPCWSTR src,
1926 INT32 cchSrc,LPWORD chartype)
1928 int i;
1930 switch (dwInfoType) {
1931 case CT_CTYPE2:
1932 FIXME(ole,"CT_CTYPE2 not supported.\n");
1933 return FALSE;
1934 case CT_CTYPE3:
1935 FIXME(ole,"CT_CTYPE3 not supported.\n");
1936 return FALSE;
1937 default:break;
1939 if (cchSrc==-1)
1940 cchSrc=lstrlen32W(src);
1941 for (i=0;i<cchSrc;i++) {
1942 chartype[i] = 0;
1943 if (isdigit(src[i])) chartype[i]|=C1_DIGIT;
1944 if (isalpha(src[i])) chartype[i]|=C1_ALPHA;
1945 if (islower(src[i])) chartype[i]|=C1_LOWER;
1946 if (isupper(src[i])) chartype[i]|=C1_UPPER;
1947 if (isspace(src[i])) chartype[i]|=C1_SPACE;
1948 if (ispunct(src[i])) chartype[i]|=C1_PUNCT;
1949 if (iscntrl(src[i])) chartype[i]|=C1_CNTRL;
1950 /* FIXME: isblank() is a GNU extension */
1951 /* if (isblank(src[i])) chartype[i]|=C1_BLANK; */
1952 if ((src[i] == ' ') || (src[i] == '\t')) chartype[i]|=C1_BLANK;
1953 /* C1_XDIGIT */
1955 return TRUE;
1958 /*****************************************************************
1959 * VerLanguageName16 [VER.10]
1961 DWORD WINAPI VerLanguageName16(UINT16 langid,LPSTR langname,UINT16 langnamelen)
1963 int i;
1964 char *buf;
1966 TRACE(ver,"(%d,%p,%d)\n",langid,langname,langnamelen);
1967 /* First, check \System\CurrentControlSet\control\Nls\Locale\<langid>
1968 * from the registry.
1970 buf=(char*)malloc(strlen("\\System\\CurrentControlSet\\control\\Nls\\Locale\\")+9);
1971 sprintf(buf,"\\System\\CurrentControlSet\\control\\Nls\\Locale\\%08x",langid);
1972 if (ERROR_SUCCESS==RegQueryValue16(HKEY_LOCAL_MACHINE,buf,langname,(LPDWORD)&langnamelen)) {
1973 langname[langnamelen-1]='\0';
1974 return langnamelen;
1976 /* if that fails, use the interal table */
1977 for (i=0;languages[i].langid!=0;i++)
1978 if (langid==languages[i].langid)
1979 break;
1980 strncpy(langname,languages[i].langname,langnamelen);
1981 langname[langnamelen-1]='\0';
1982 return strlen(languages[i].langname);
1985 /*****************************************************************
1986 * VerLanguageName32A [VERSION.9]
1988 DWORD WINAPI VerLanguageName32A(UINT32 langid,LPSTR langname,
1989 UINT32 langnamelen)
1991 return VerLanguageName16(langid,langname,langnamelen);
1994 /*****************************************************************
1995 * VerLanguageName32W [VERSION.10]
1997 DWORD WINAPI VerLanguageName32W(UINT32 langid,LPWSTR langname,
1998 UINT32 langnamelen)
2000 int i;
2001 char buffer[80];
2002 LPWSTR keyname;
2004 /* First, check \System\CurrentControlSet\control\Nls\Locale\<langid>
2005 * from the registry.
2007 sprintf(buffer,"\\System\\CurrentControlSet\\control\\Nls\\Locale\\%08x",langid);
2008 keyname = HEAP_strdupAtoW( GetProcessHeap(), 0, buffer );
2009 if (ERROR_SUCCESS==RegQueryValue32W(HKEY_LOCAL_MACHINE,keyname,langname,(LPDWORD)&langnamelen)) {
2010 HeapFree( GetProcessHeap(), 0, keyname );
2011 return langnamelen;
2013 HeapFree( GetProcessHeap(), 0, keyname );
2014 /* if that fails, use the interal table */
2015 for (i=0;languages[i].langid!=0;i++)
2016 if (langid==languages[i].langid)
2017 break;
2018 lstrcpyAtoW( langname, languages[i].langname );
2019 return strlen(languages[i].langname); /* same as strlenW(langname); */
2023 INT32 WINAPI LCMapString32A(
2024 LCID lcid,DWORD mapflags,LPCSTR srcstr,INT32 srclen,LPSTR dststr,
2025 INT32 dstlen
2027 int i,len;
2029 TRACE(string,"(0x%04lx,0x%08lx,%s,%d,%p,%d)\n",
2030 lcid,mapflags,srcstr,srclen,dststr,dstlen);
2031 if (!dstlen || !dststr) {
2032 dststr = (LPSTR)srcstr;
2034 if (!srclen) srclen = strlen(srcstr);
2035 if (!dstlen) dstlen = strlen(dststr);
2036 len = dstlen;
2037 if (srclen < len)
2038 len = srclen;
2039 if (mapflags & LCMAP_LOWERCASE) {
2040 for (i=0;i<len;i++)
2041 dststr[i]=tolower(srcstr[i]);
2042 mapflags &= ~LCMAP_LOWERCASE;
2044 if (mapflags & LCMAP_UPPERCASE) {
2045 for (i=0;i<len;i++)
2046 dststr[i]=toupper(srcstr[i]);
2047 mapflags &= ~LCMAP_UPPERCASE;
2049 if (mapflags)
2051 FIXME(ole,"(0x%04lx,0x%08lx,%p,%d,%p,%d): "
2052 "unimplemented flags: 0x%08lx\n",
2053 lcid,mapflags,srcstr,srclen,dststr,dstlen,mapflags);
2055 return len;
2058 /* FIXME: implement everyhting & correct */
2060 INT32 WINAPI LCMapString32W(
2061 LCID lcid,DWORD mapflags,LPCWSTR srcstr,INT32 srclen,LPWSTR dststr,
2062 INT32 dstlen
2064 int i,len;
2066 TRACE(string,"(0x%04lx,0x%08lx,%p,%d,%p,%d)\n",
2067 lcid,mapflags,srcstr,srclen,dststr,dstlen
2069 if (!dstlen || !dststr) {
2070 dststr = (LPWSTR)srcstr;
2072 if (!srclen) srclen = lstrlen32W(srcstr);
2073 if (!dstlen) dstlen = lstrlen32W(dststr);
2074 len = dstlen;
2075 if (srclen < len)
2076 len = srclen;
2077 if (mapflags & LCMAP_LOWERCASE) {
2078 for (i=0;i<len;i++)
2079 dststr[i]=tolower(srcstr[i]);
2080 mapflags &= ~LCMAP_LOWERCASE;
2082 if (mapflags & LCMAP_UPPERCASE) {
2083 for (i=0;i<len;i++)
2084 dststr[i]=toupper(srcstr[i]);
2085 mapflags &= ~LCMAP_UPPERCASE;
2087 if (mapflags)
2089 FIXME(ole,"(0x%04lx,0x%08lx,%p,%d,%p,%d): "
2090 "unimplemented flags: 0x%08lx\n",
2091 lcid,mapflags,srcstr,srclen,dststr,dstlen,mapflags);
2093 return len;
2096 /*****************************************************************
2098 * OLE_GetFormatA() [internal]
2101 This function implements stuff for GetDateFormat() and
2102 GetTimeFormat().
2104 d single-digit (no leading zero) day (of month)
2105 dd two-digit day (of month)
2106 ddd short day-of-week name
2107 dddd long day-of-week name
2108 M single-digit month
2109 MM two-digit month
2110 MMM short month name
2111 MMMM full month name
2112 y two-digit year, no leading 0
2113 yy two-digit year
2114 yyyy four-digit year
2115 gg era string
2116 h hours with no leading zero (12-hour)
2117 hh hours with full two digits
2118 H hours with no leading zero (24-hour)
2119 HH hours with full two digits
2120 m minutes with no leading zero
2121 mm minutes with full two digits
2122 s seconds with no leading zero
2123 ss seconds with full two digits
2124 t time marker (A or P)
2125 tt time marker (AM, PM)
2126 '' used to quote literal characters
2127 '' (within a quoted string) indicates a literal '
2129 These functions REQUIRE valid locale, date, and format.
2133 INT32 WINAPI OLE_GetFormatA(LCID locale,
2134 DWORD flags,
2135 LPSYSTEMTIME xtime,
2136 LPCSTR format,
2137 LPSTR date, INT32 datelen)
2139 INT32 inpos, outpos;
2140 int count, type, inquote, Overflow;
2141 char buf[40];
2142 int buflen;
2144 const char * _dgfmt[] = { "%d", "%02d" };
2145 const char ** dgfmt = _dgfmt - 1;
2147 /* report, for debugging */
2148 TRACE(ole, "func(%8lx,%8lx, time(d=%d,h=%d,m=%d,s=%d), fmt:\'%s\' (at %p), %p (%9s), len=%d)\n", locale, flags,
2149 xtime->wDay, xtime->wHour, xtime->wMinute, xtime->wSecond,
2150 format, format, date, date, datelen);
2152 /* initalize state variables and output buffer */
2153 inpos = outpos = 0;
2154 count = 0; inquote = 0; Overflow = 0;
2155 type = '\0';
2156 date[0] = buf[0] = '\0';
2158 for (inpos = 0;; inpos++) {
2159 /* TRACE(ole, "STATE inpos=%2d outpos=%2d count=%d inquote=%d type=%c buf,date = %c,%c\n", inpos, outpos, count, inquote, type, buf[inpos], date[outpos]); */
2160 if (inquote) {
2161 if (format[inpos] == '\'') {
2162 if (format[inpos+1] == '\'') {
2163 inpos += 1;
2164 date[outpos++] = '\'';
2165 } else {
2166 inquote = 0;
2167 continue; /* we did nothing to the output */
2169 } else if (format[inpos] == '\0') {
2170 date[outpos++] = '\0';
2171 if (outpos > datelen) Overflow = 1;
2172 break;
2173 } else {
2174 date[outpos++] = format[inpos];
2175 if (outpos > datelen) {
2176 Overflow = 1;
2177 date[outpos-1] = '\0'; /* this is the last place where
2178 it's safe to write */
2179 break;
2182 } else if ( (count && (format[inpos] != type))
2183 || count == 4
2184 || (count == 2 && strchr("ghHmst", type)) )
2186 if (type == 'd') {
2187 if (count == 4) {
2188 GetLocaleInfo32A(locale,
2189 LOCALE_SDAYNAME1
2190 + xtime->wDayOfWeek - 1,
2191 buf, sizeof(buf));
2192 } else if (count == 3) {
2193 GetLocaleInfo32A(locale,
2194 LOCALE_SABBREVDAYNAME1
2195 + xtime->wDayOfWeek - 1,
2196 buf, sizeof(buf));
2197 } else {
2198 sprintf(buf, dgfmt[count], xtime->wDay);
2200 } else if (type == 'M') {
2201 if (count == 3) {
2202 GetLocaleInfo32A(locale,
2203 LOCALE_SABBREVMONTHNAME1
2204 + xtime->wMonth - 1,
2205 buf, sizeof(buf));
2206 } else if (count == 4) {
2207 GetLocaleInfo32A(locale,
2208 LOCALE_SMONTHNAME1
2209 + xtime->wMonth - 1,
2210 buf, sizeof(buf));
2211 } else {
2212 sprintf(buf, dgfmt[count], xtime->wMonth);
2214 } else if (type == 'y') {
2215 if (count == 4) {
2216 sprintf(buf, "%d", xtime->wYear);
2217 } else if (count == 3) {
2218 strcpy(buf, "yyy");
2219 WARN(ole,
2220 "unknown format,\
2221 c=%c, n=%d\n", type, count);
2222 } else {
2223 sprintf(buf, dgfmt[count], xtime->wYear % 100);
2225 } else if (type == 'g') {
2226 if (count == 2) {
2227 FIXME(ole, "LOCALE_ICALENDARTYPE unimp.\n");
2228 strcpy(buf, "AD");
2229 } else {
2230 strcpy(buf, "g");
2231 WARN(ole,
2232 "unknown format, \
2233 c=%c, n=%d\n", type, count);
2235 } else if (type == 'h') {
2236 /* gives us hours 1:00 -- 12:00 */
2237 sprintf(buf, dgfmt[count], (xtime->wHour-1)%12 +1);
2238 } else if (type == 'H') {
2239 /* 24-hour time */
2240 sprintf(buf, dgfmt[count], xtime->wHour);
2241 } else if (type == 'm') {
2242 sprintf(buf, dgfmt[count], xtime->wMinute);
2243 } else if (type == 's') {
2244 sprintf(buf, dgfmt[count], xtime->wSecond);
2245 } else if (type == 't') {
2246 if (count == 1) {
2247 sprintf(buf, "%c", (xtime->wHour < 12) ? 'A' : 'P');
2248 } else if (count == 2) {
2249 /* sprintf(buf, "%s", (xtime->wHour < 12) ? "AM" : "PM"); */
2250 GetLocaleInfo32A(locale,
2251 (xtime->wHour<12)
2252 ? LOCALE_S1159 : LOCALE_S2359,
2253 buf, sizeof(buf));
2257 /* we need to check the next char in the format string
2258 again, no matter what happened */
2259 inpos--;
2261 /* add the contents of buf to the output */
2262 buflen = strlen(buf);
2263 if (outpos + buflen < datelen) {
2264 date[outpos] = '\0'; /* for strcat to hook onto */
2265 strcat(date, buf);
2266 outpos += buflen;
2267 } else {
2268 date[outpos] = '\0';
2269 strncat(date, buf, datelen - outpos);
2270 date[datelen - 1] = '\0';
2271 SetLastError(ERROR_INSUFFICIENT_BUFFER);
2272 WARN(ole, "insufficient buffer\n");
2273 return 0;
2276 /* reset the variables we used to keep track of this item */
2277 count = 0;
2278 type = '\0';
2279 } else if (format[inpos] == '\0') {
2280 /* we can't check for this at the loop-head, because
2281 that breaks the printing of the last format-item */
2282 date[outpos] = '\0';
2283 break;
2284 } else if (count) {
2285 /* continuing a code for an item */
2286 count +=1;
2287 continue;
2288 } else if (strchr("hHmstyMdg", format[inpos])) {
2289 type = format[inpos];
2290 count = 1;
2291 continue;
2292 } else if (format[inpos] == '\'') {
2293 inquote = 1;
2294 continue;
2295 } else {
2296 date[outpos++] = format[inpos];
2298 /* now deal with a possible buffer overflow */
2299 if (outpos >= datelen) {
2300 date[datelen - 1] = '\0';
2301 SetLastError(ERROR_INSUFFICIENT_BUFFER);
2302 return 0;
2306 if (Overflow) {
2307 SetLastError(ERROR_INSUFFICIENT_BUFFER);
2310 /* finish it off with a string terminator */
2311 outpos++;
2312 /* sanity check */
2313 if (outpos > datelen-1) outpos = datelen-1;
2314 date[outpos] = '\0';
2316 TRACE(ole, "OLE_GetFormatA returns string '%s', len %d\n",
2317 date, outpos);
2318 return outpos;
2321 /* OLE_GetFormatW [internal] */
2323 INT32 WINAPI OLE_GetFormatW(LCID locale, DWORD flags,
2324 LPSYSTEMTIME xtime,
2325 LPCWSTR format,
2326 LPWSTR output, INT32 outlen)
2328 INT32 inpos, outpos;
2329 int count, type, inquote;
2330 int Overflow; /* loop check */
2331 int usedate, usetime;
2332 WCHAR buf[40];
2333 int buflen;
2334 char abuf[40];
2335 WCHAR arg0[] = {0}, arg1[] = {'%','d',0};
2336 WCHAR arg2[] = {'%','0','2','d',0};
2337 WCHAR *argarr[] = {arg0, arg1, arg2};
2338 int datevars, timevars;
2340 /* make a debug report */
2341 lstrcpynWtoA(abuf, format, sizeof(format));
2342 TRACE(ole, "args: %8lx, %8lx, time(d=%d,h=%d,m=%d,s=%d), fmt:\'%s\' (at %p), %p with max len %d\n",
2343 locale, flags,
2344 xtime->wDay, xtime->wHour, xtime->wMinute, xtime->wSecond,
2345 abuf, format, output, outlen);
2348 /* initialize state variables */
2349 inpos = outpos = 0;
2350 count = 0;
2351 inquote = Overflow = 0;
2352 /* this is really just a sanity check */
2353 output[0] = buf[0] = 0;
2354 abuf[0] = '\0';
2355 /* for compatibility with official Windows behavior */
2356 usedate = flags & DATE_DATEVARSONLY;
2357 usetime = flags & TIME_TIMEVARSONLY;
2359 /* this loop is the core of the function */
2360 for (inpos = 0; /* we have several break points */ ; inpos++) {
2361 if (inquote) {
2362 if (format[inpos] == (WCHAR) '\'') {
2363 if (format[inpos+1] == '\'') {
2364 inpos++;
2365 output[outpos++] = '\'';
2366 } else {
2367 inquote = 0;
2368 continue;
2370 } else if (format[inpos] == 0) {
2371 output[outpos++] = 0;
2372 if (outpos > outlen) Overflow = 1;
2373 break; /* normal exit (within a quote) */
2374 } else {
2375 output[outpos++] = format[inpos]; /* copy input */
2376 if (outpos > outlen) {
2377 Overflow = 1;
2378 output[outpos-1] = 0;
2379 break;
2382 } else if ( (count && (format[inpos] != type))
2383 || ( (count==4 && type =='y') ||
2384 (count==4 && type =='M') ||
2385 (count==4 && type =='d') ||
2386 (count==2 && type =='g') ||
2387 (count==2 && type =='h') ||
2388 (count==2 && type =='H') ||
2389 (count==2 && type =='m') ||
2390 (count==2 && type =='s') ||
2391 (count==2 && type =='t') ) ) {
2392 if (type == 'd') {
2393 if (count == 3) {
2394 GetLocaleInfo32W(locale,
2395 LOCALE_SDAYNAME1 + xtime->wDayOfWeek -1,
2396 buf, sizeof(buf)/sizeof(WCHAR) );
2397 } else if (count == 3) {
2398 GetLocaleInfo32W(locale,
2399 LOCALE_SABBREVDAYNAME1 +
2400 xtime->wDayOfWeek -1,
2401 buf, sizeof(buf)/sizeof(WCHAR) );
2402 } else {
2403 wsnprintf32W(buf, 5, argarr[count], xtime->wDay );
2405 } else if (type == 'M') {
2406 if (count == 4) {
2407 GetLocaleInfo32W(locale, LOCALE_SMONTHNAME1 +
2408 xtime->wMonth -1, buf,
2409 sizeof(buf)/sizeof(WCHAR) );
2410 } else if (count == 3) {
2411 GetLocaleInfo32W(locale, LOCALE_SABBREVMONTHNAME1 +
2412 xtime->wMonth -1, buf,
2413 sizeof(buf)/sizeof(WCHAR) );
2414 } else {
2415 wsnprintf32W(buf, 5, argarr[count], xtime->wMonth);
2417 } else if (type == 'y') {
2418 if (count == 4) {
2419 wsnprintf32W(buf, 6, argarr[1] /* "%d" */,
2420 xtime->wYear);
2421 } else if (count == 3) {
2422 lstrcpynAtoW(buf, "yyy", 5);
2423 } else {
2424 wsnprintf32W(buf, 6, argarr[count],
2425 xtime->wYear % 100);
2427 } else if (type == 'g') {
2428 if (count == 2) {
2429 FIXME(ole, "LOCALE_ICALENDARTYPE unimplemented\n");
2430 lstrcpynAtoW(buf, "AD", 5);
2431 } else {
2432 /* Win API sez we copy it verbatim */
2433 lstrcpynAtoW(buf, "g", 5);
2435 } else if (type == 'h') {
2436 /* hours 1:00-12:00 --- is this right? */
2437 wsnprintf32W(buf, 5, argarr[count],
2438 (xtime->wHour-1)%12 +1);
2439 } else if (type == 'H') {
2440 wsnprintf32W(buf, 5, argarr[count],
2441 xtime->wHour);
2442 } else if (type == 'm') {
2443 wsnprintf32W(buf, 5, argarr[count],
2444 xtime->wMinute);
2445 } else if (type == 's') {
2446 wsnprintf32W(buf, 5, argarr[count],
2447 xtime->wSecond);
2448 } else if (type == 't') {
2449 GetLocaleInfo32W(locale, (xtime->wHour < 12) ?
2450 LOCALE_S1159 : LOCALE_S2359,
2451 buf, sizeof(buf) );
2452 if (count == 1) {
2453 buf[1] = 0;
2457 /* no matter what happened, we need to check this next
2458 character the next time we loop through */
2459 inpos--;
2461 /* cat buf onto the output */
2462 outlen = lstrlen32W(buf);
2463 if (outpos + buflen < outlen) {
2464 output[outpos] = 0; /* a "hook" for strcat */
2465 lstrcat32W(output, buf);
2466 outpos += buflen;
2467 } else {
2468 output[outpos] = 0;
2469 lstrcatn32W(output, buf, outlen - outpos);
2470 output[outlen - 1] = 0;
2471 Overflow = 1;
2472 break; /* Abnormal exit */
2475 /* reset the variables we used this time */
2476 count = 0;
2477 type = '\0';
2478 } else if (format[inpos] == 0) {
2479 /* we can't check for this at the beginning, because that
2480 would keep us from printing a format spec that ended the
2481 string */
2482 output[outpos] = 0;
2483 break; /* NORMAL EXIT */
2484 } else if (count) {
2485 /* how we keep track of the middle of a format spec */
2486 count++;
2487 continue;
2488 } else if ( (datevars && (format[inpos]=='d' ||
2489 format[inpos]=='M' ||
2490 format[inpos]=='y' ||
2491 format[inpos]=='g') ) ||
2492 (timevars && (format[inpos]=='H' ||
2493 format[inpos]=='h' ||
2494 format[inpos]=='m' ||
2495 format[inpos]=='s' ||
2496 format[inpos]=='t') ) ) {
2497 type = format[inpos];
2498 count = 1;
2499 continue;
2500 } else if (format[inpos] == '\'') {
2501 inquote = 1;
2502 continue;
2503 } else {
2504 /* unquoted literals */
2505 output[outpos++] = format[inpos];
2509 if (Overflow) {
2510 SetLastError(ERROR_INSUFFICIENT_BUFFER);
2511 WARN(ole, " buffer overflow\n");
2514 /* final string terminator and sanity check */
2515 outpos++;
2516 if (outpos > outlen-1) outpos = outlen-1;
2517 output[outpos] = '0';
2519 lstrcpynWtoA(abuf, output, sizeof(abuf) );
2520 TRACE(ole, " returning string \'%s\'\n", abuf);
2522 return (!Overflow) ? outlen : 0;
2527 /*****************************************************************
2528 * GetDateFormat32A() [KERNEL32.310] Makes an ASCII string of the date
2530 * This function uses format to format the date, or, if format
2531 * is NULL, uses the default for the locale. format is a string
2532 * of literal fields and characters as follows:
2534 * - d single-digit (no leading zero) day (of month)
2535 * - dd two-digit day (of month)
2536 * - ddd short day-of-week name
2537 * - dddd long day-of-week name
2538 * - M single-digit month
2539 * - MM two-digit month
2540 * - MMM short month name
2541 * - MMMM full month name
2542 * - y two-digit year, no leading 0
2543 * - yy two-digit year
2544 * - yyyy four-digit year
2545 * - gg era string
2549 INT32 WINAPI GetDateFormat32A(LCID locale,DWORD flags,
2550 LPSYSTEMTIME xtime,
2551 LPCSTR format, LPSTR date,INT32 datelen)
2554 char format_buf[40];
2555 LPCSTR thisformat;
2556 SYSTEMTIME t;
2557 LPSYSTEMTIME thistime;
2558 LCID thislocale;
2560 INT32 ret;
2562 TRACE(ole,"(0x%04lx,0x%08lx,%p,%s,%p,%d)\n",
2563 locale,flags,xtime,format,date,datelen);
2565 if (!locale) {
2566 locale = LOCALE_SYSTEM_DEFAULT;
2569 if (locale == LOCALE_SYSTEM_DEFAULT) {
2570 thislocale = GetSystemDefaultLCID();
2571 } else if (locale == LOCALE_USER_DEFAULT) {
2572 thislocale = GetUserDefaultLCID();
2573 } else {
2574 thislocale = locale;
2577 if (xtime == NULL) {
2578 GetSystemTime(&t);
2579 thistime = &t;
2580 } else {
2581 thistime = xtime;
2584 if (format == NULL) {
2585 GetLocaleInfo32A(thislocale, ((flags&DATE_LONGDATE)
2586 ? LOCALE_SLONGDATE
2587 : LOCALE_SSHORTDATE),
2588 format_buf, sizeof(format_buf));
2589 thisformat = format_buf;
2590 } else {
2591 thisformat = format;
2595 ret = OLE_GetFormatA(thislocale, flags, thistime, thisformat,
2596 date, datelen);
2599 TRACE(ole,
2600 "GetDateFormat32A() returning %d, with data=%s\n",
2601 ret, date);
2602 return ret;
2605 /* ****************************************************************
2606 * GetDateFormat32W() [KERNEL32.311] Makes a Unicode string of the date
2608 * Acts the same as GetDateFormat32A(), except that it's Unicode.
2609 * Accepts & returns sizes as counts of Unicode characters.
2612 INT32 WINAPI GetDateFormat32W(LCID locale,DWORD flags,
2613 LPSYSTEMTIME xtime,
2614 LPCWSTR format,
2615 LPWSTR date, INT32 datelen)
2617 short datearr[] = {'1','9','9','4','-','1','-','1',0};
2619 FIXME(ole, "STUB (should call OLE_GetFormatW)\n");
2620 lstrcpyn32W(date, datearr, datelen);
2621 return ( datelen < 9) ? datelen : 9;
2627 /**************************************************************************
2628 * GetNumberFormat32A (KERNEL32.355)
2630 INT32 WINAPI GetNumberFormat32A(LCID locale, DWORD dwflags,
2631 LPCSTR lpvalue, char *lpFormat,
2632 LPSTR lpNumberStr, int cchNumber)
2633 /* NOTE: type of lpFormat should be CONST NUMBERFORMAT */
2636 int n;
2638 FIXME(file,"%s: stub, no reformating done\n",lpvalue);
2640 n = strlen(lpvalue);
2641 if (cchNumber) {
2642 strncpy(lpNumberStr,lpvalue,cchNumber);
2643 if (cchNumber <= n) {
2644 lpNumberStr[cchNumber-1] = 0;
2645 n = cchNumber-1;
2648 return n;
2653 /*****************************************************************
2655 * GetTimeFormat32A() [KERNEL32.422] Makes an ASCII string of the time
2657 * Formats date according to format, or locale default if format is
2658 * NULL. The format consists of literal characters and fields as follows:
2660 * h hours with no leading zero (12-hour)
2661 * hh hours with full two digits
2662 * H hours with no leading zero (24-hour)
2663 * HH hours with full two digits
2664 * m minutes with no leading zero
2665 * mm minutes with full two digits
2666 * s seconds with no leading zero
2667 * ss seconds with full two digits
2668 * t time marker (A or P)
2669 * tt time marker (AM, PM)
2673 INT32 WINAPI
2674 GetTimeFormat32A(LCID locale, /* in */
2675 DWORD flags, /* in */
2676 LPSYSTEMTIME xtime, /* in */
2677 LPCSTR format, /* in */
2678 LPSTR timestr, /* out */
2679 INT32 timelen /* in */)
2681 LPCSTR realformat;
2682 char fmt_buf[40];
2684 TRACE(ole,"GetTimeFormat(0x%04lx,0x%08lx,%p,%s,%p,%d)\n",
2685 locale,flags,xtime,format,timestr,timelen);
2687 if (format) {
2688 realformat = format;
2689 } else if (locale) {
2690 GetLocaleInfo32A(locale, LOCALE_STIMEFORMAT,
2691 fmt_buf, sizeof(fmt_buf));
2692 realformat = fmt_buf;
2693 } else {
2694 WARN(ole, "Caller gave no locale and no format\n");
2695 realformat = "hh:mm:ss";
2697 if (!locale) {
2698 locale = GetSystemDefaultLCID();
2700 return OLE_GetFormatA(locale, flags, xtime, realformat, timestr, timelen);
2704 /* ****************************************************************
2705 * GetTimeFormat32W() [KERNEL32.423] Makes a Unicode string of the time
2711 INT32 WINAPI
2712 GetTimeFormat32W(LCID locale,DWORD flags,
2713 LPSYSTEMTIME xtime,
2714 LPCWSTR format,
2715 LPWSTR timestr,INT32 timelen)
2717 char debugbuf[40];
2718 WCHAR buf[20];
2719 LPCWSTR realformat;
2720 SYSTEMTIME t;
2721 LPSYSTEMTIME realtime;
2722 WCHAR * fmt_buf = NULL;
2723 int fmt_buf_size = 0; /* units of WCHARs */
2724 INT32 retval;
2726 lstrcpynWtoA(debugbuf, format, (sizeof(buf))/2);
2727 TRACE(ole, "GetTimeFormatW len %d flags 0x%lX format >%s<\n",
2728 timelen, flags, debugbuf);
2730 /* Enforce the Windows behavior */
2731 flags |= ~LOCALE_TIMEDATEBOTH;
2732 flags |= TIME_TIMEVARSONLY;
2734 /* take care of the format or locale not being given */
2735 if (format) {
2736 realformat = format;
2737 } else if (locale) {
2738 /* allocate memory */
2739 fmt_buf = malloc((fmt_buf_size+=7) * sizeof(WCHAR));
2740 if (!fmt_buf) {
2741 SetLastError(ERROR_INSUFFICIENT_BUFFER);
2742 WARN(ole, "could not allocate %d chars of memory\n", fmt_buf_size);
2743 return 0;
2745 while(!GetLocaleInfo32W(locale, LOCALE_STIMEFORMAT,
2746 fmt_buf, fmt_buf_size)) {
2747 fmt_buf = realloc(fmt_buf,
2748 (fmt_buf_size += 10) * sizeof(WCHAR));
2749 if (!fmt_buf) {
2750 SetLastError(ERROR_OUTOFMEMORY);
2751 WARN(ole, "could not allocate %d chars of memory\n", fmt_buf_size);
2752 return 0;
2755 realformat = fmt_buf;
2756 } else {
2757 FIXME(ole, "caller gave no locale, no format; what should we do?\n");
2758 SetLastError(ERROR_BAD_FORMAT);
2760 if (!locale) {
2761 locale = GetSystemDefaultLCID();
2764 realtime = xtime;
2765 if (!realtime) {
2766 realtime = &t;
2767 GetSystemTime(realtime);
2771 retval = OLE_GetFormatW(locale, flags, realtime, realformat, timestr, timelen);
2772 if (fmt_buf) free(fmt_buf);
2773 return retval;