kernel32: Add a test for threads state when a process is being terminated.
[wine] / include / mlang.idl
1 /*
2  * Copyright (C) 2004 Mike McCormack
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18
19 #ifndef DO_NO_IMPORTS
20 import "unknwn.idl";
21 #endif
22
23 interface IStream;
24
25 cpp_quote("#define CPIOD_PEEK          0x40000000")
26 cpp_quote("#define CPIOD_FORCE_PROMPT  0x80000000")
27
28 [
29   object,
30   uuid(359f3443-bd4a-11d0-b188-00aa0038c969),
31   pointer_default(unique)
32 ]
33 interface IMLangCodePages : IUnknown
34 {
35     HRESULT GetCharCodePages(      
36         [in] WCHAR chSrc,
37         [out] DWORD *pdwCodePages);
38     HRESULT GetStrCodePages(      
39         [in, size_is(cchSrc)] const WCHAR *pszSrc,
40         [in] LONG cchSrc,
41         [in] DWORD dwPriorityCodePages,
42         [out] DWORD *pdwCodePages,
43         [out] LONG *pcchCodePages);
44     HRESULT CodePageToCodePages(      
45         [in] UINT uCodePage,
46         [out] DWORD *pdwCodePages);
47     HRESULT CodePagesToCodePage(      
48         [in] DWORD dwCodePages,
49         [in] UINT uDefaultCodePage,
50         [out] UINT *puCodePage);
51 }
52
53 [
54   object,
55   uuid(359f3441-bd4a-11d0-b188-00aa0038c969),
56   pointer_default(unique)
57 ]
58 interface IMLangFontLink : IMLangCodePages
59 {
60     HRESULT GetFontCodePages(
61         [in] HDC hDC,
62         [in] HFONT hFont,
63         [out] DWORD *pdwCodePages );
64
65     HRESULT MapFont(      
66         [in] HDC hDC,
67         [in] DWORD dwCodePages,
68         [in] HFONT hSrcFont,
69         [out] HFONT *phDestFont);
70
71     HRESULT ReleaseFont(      
72         [in] HFONT hFont);
73
74     HRESULT ResetFontMapping();
75 }
76
77 [
78   object,
79   uuid(ae5f1430-388b-11d2-8380-00c04f8f5da1),
80   pointer_default(unique)
81 ]
82 interface IEnumScript : IUnknown
83 {
84     const USHORT MAX_SCRIPT_NAME = 48;
85     const USHORT MAX_MIMEFACE_NAME = 32;
86
87     typedef BYTE SCRIPT_ID;
88     typedef __int64 SCRIPT_IDS;
89
90     typedef enum tagSCRIPTCONTF
91     {
92         sidDefault = 0,
93         sidMerge = sidDefault + 1,
94         sidAsciiSym = sidMerge + 1,
95         sidAsciiLatin = sidAsciiSym + 1,
96         sidLatin = sidAsciiLatin + 1,
97         sidGreek = sidLatin + 1,
98         sidCyrillic = sidGreek + 1,
99         sidArmenian = sidCyrillic + 1,
100         sidHebrew = sidArmenian + 1,
101         sidArabic = sidHebrew + 1,
102         sidDevanagari = sidArabic + 1,
103         sidBengali = sidDevanagari + 1,
104         sidGurmukhi = sidBengali + 1,
105         sidGujarati = sidGurmukhi + 1,
106         sidOriya = sidGujarati + 1,
107         sidTamil = sidOriya + 1,
108         sidTelugu = sidTamil + 1,
109         sidKannada = sidTelugu + 1,
110         sidMalayalam = sidKannada + 1,
111         sidThai = sidMalayalam + 1,
112         sidLao = sidThai + 1,
113         sidTibetan = sidLao + 1,
114         sidGeorgian = sidTibetan + 1,
115         sidHangul = sidGeorgian + 1,
116         sidKana = sidHangul + 1,
117         sidBopomofo = sidKana + 1,
118         sidHan = sidBopomofo + 1,
119         sidEthiopic = sidHan + 1,
120         sidCanSyllabic = sidEthiopic + 1,
121         sidCherokee = sidCanSyllabic + 1,
122         sidYi = sidCherokee + 1,
123         sidBraille = sidYi + 1,
124         sidRunic = sidBraille + 1,
125         sidOgham = sidRunic + 1,
126         sidSinhala = sidOgham + 1,
127         sidSyriac = sidSinhala + 1,
128         sidBurmese = sidSyriac + 1,
129         sidKhmer = sidBurmese + 1,
130         sidThaana = sidKhmer + 1,
131         sidMongolian = sidThaana + 1,
132         sidUserDefined = sidMongolian + 1,
133         sidLim = sidUserDefined + 1,
134         sidFEFirst = sidHangul,
135         sidFELast = sidHan
136     } SCRIPTCONTF;
137
138     typedef enum tagSCRIPTFONTCONTF
139     {
140         SCRIPTCONTF_FIXED_FONT = 0x1,
141         SCRIPTCONTF_PROPORTIONAL_FONT = 0x2,
142         SCRIPTCONTF_SCRIPT_USER = 0x10000,
143         SCRIPTCONTF_SCRIPT_HIDE = 0x20000,
144         SCRIPTCONTF_SCRIPT_SYSTEM = 0x40000
145     } SCRIPTFONTCONTF;
146
147     typedef struct tagSCRIPFONTINFO
148     {
149         SCRIPT_IDS scripts;
150         WCHAR wszFont[MAX_MIMEFACE_NAME];
151     } SCRIPTFONTINFO, *PSCRIPTFONTINFO;
152
153     typedef struct tagSCRIPTINFO {
154         SCRIPT_ID ScriptId;
155         UINT uiCodePage;
156         WCHAR wszDescription[MAX_SCRIPT_NAME];
157         WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME];
158         WCHAR wszProportionalFont[MAX_MIMEFACE_NAME];
159     } SCRIPTINFO, *PSCRIPTINFO;
160
161     HRESULT Clone( 
162         [out] IEnumScript **ppEnum);
163
164     HRESULT Next(      
165         [in] ULONG celt,
166         [out] PSCRIPTINFO rgelt,
167         [out] ULONG *pceltFetched);
168
169     HRESULT Reset();
170
171     HRESULT Skip(      
172         [in] ULONG celt);
173 }
174
175 [
176   object,
177   uuid(dccfc162-2b38-11d2-b7ec-00c04f8f5d9a),
178   pointer_default(unique)
179 ]
180 interface IMLangFontLink2 : IMLangCodePages
181 {
182     typedef struct tagUNICODERANGE
183     {
184         WCHAR wcFrom;
185         WCHAR wcTo;
186     } UNICODERANGE;
187
188     typedef [unique] IMLangFontLink2 *PMLANGFONTLINK2;
189
190     HRESULT GetFontCodePages(
191         [in] HDC hDC,
192         [in] HFONT hFont,
193         [out] DWORD *pdwCodePages );
194
195     HRESULT ReleaseFont(
196         [in] HFONT hFont);
197
198     HRESULT ResetFontMapping();
199
200     HRESULT MapFont(
201         [in] HDC hDC,
202         [in] DWORD dwCodePages,
203         [in] WCHAR chSrc,
204         [out] HFONT *pFont);
205
206     HRESULT GetFontUnicodeRanges(
207         [in] HDC hDC,
208         [in,out] UINT *puiRanges,
209         [out] UNICODERANGE* pUranges);
210
211     HRESULT GetScriptFontInfo(
212         [in] SCRIPT_ID sid,
213         [in] DWORD dwFlags,
214         [in,out] UINT *puiFonts,
215         [out] SCRIPTFONTINFO* pScriptFont);
216
217     HRESULT CodePageToScriptID(
218         [in] UINT uiCodePage,
219         [out] SCRIPT_ID *pSid);
220 }
221
222 [
223  object,
224  uuid(c04d65ce-b70d-11d0-b188-00aa0038c969),
225  pointer_default(unique)
226 ]
227 interface IMLangString : IUnknown
228 {
229 #ifdef NEWMLSTR
230     HRESULT LockMLStr(
231         [in] LONG lPos,
232         [in] DWORD dwFlags,
233         [out] DWORD* pdwCookie,
234         [out] LONG* plActualPos,
235         [out] LONG* plActualLen);
236
237     HRESULT UnlockMLStr(
238         [in] DWORD dwCookie);
239 #else
240     HRESULT Sync(
241         [in] BOOL fNoAccess);
242 #endif
243     HRESULT GetLength(
244         [out, retval] LONG* plLen);
245     HRESULT SetMLStr(
246         [in] LONG lDestPos,
247         [in] LONG lDestLen,
248         [in] IUnknown *pSrcMLStr,
249         [in] LONG lSrcPos,
250         [in] LONG lSrcLen);
251 #ifdef NEWMLSTR
252     HRESULT RegisterAttr(
253         [in] IUnknown *pUnk,
254         [out] DWORD* pdwCookie);
255     HRESULT UnregisterAttr(
256         [in] DWORD dwCookie);
257     HRESULT EnumAttr(
258         [out] IEnumUnknown **ppEnumUnk);
259     HRESULT FindAttr(
260         [in] REFIID riid,
261         [in] LPARAM lParam,
262         [out] IUnknown **ppUnk);
263 #else
264     HRESULT GetMLStr(
265         [in] LONG lSrcPos,
266         [in] LONG lSrcLen,
267         [in] IUnknown *pUnkOuter,
268         [in] DWORD dwClsContext,
269         [in] const IID* piid,
270         [out] IUnknown** ppDestMLStr,
271         [out] LONG* plDestPos,
272         [out] LONG* plDestLen);
273 #endif
274 }
275
276 [
277  object,
278  uuid(f5be2ee1-bfd7-11d0-b188-00aa0038c969),
279  pointer_default(unique)
280 ]
281 interface IMLangLineBreakConsole : IUnknown
282 {
283     HRESULT BreakLineML(
284         [in] IMLangString* pSrcMLStr,
285         [in] LONG lSrcPos,
286         [in] LONG lSrcLen,
287         [in] LONG cMinColumns,
288         [in] LONG cMaxColumns,
289         [out] LONG* plLineLen,
290         [out] LONG* plSkipLen);
291
292     HRESULT BreakLineW(
293         [in] LCID locale,
294         [in, size_is(cchSrc)] const WCHAR* pszSrc,
295         [in] LONG cchSrc,
296         [in] LONG cMaxColumns,
297         [out] LONG* pcchLine,
298         [out] LONG* pcchSkip );
299
300     HRESULT BreakLineA(
301         [in] LCID locale,
302         [in] UINT uCodePage,
303         [in, size_is(cchSrc)] const CHAR* pszSrc,
304         [in] LONG cchSrc,
305         [in] LONG cMaxColumns,
306         [out] LONG* pcchLine,
307         [out] LONG* pcchSkip);
308 }
309
310 [
311   object,
312   uuid(275c23e3-3747-11d0-9fea-00aa003f8646),
313   pointer_default(unique)
314 ]
315 interface IEnumCodePage : IUnknown
316 {
317     const USHORT MAX_MIMECP_NAME = 64;
318     const USHORT MAX_MIMECSET_NAME = 50;
319
320     typedef enum tagMIMECONTF
321     {
322         MIMECONTF_MAILNEWS = 0x00000001,
323         MIMECONTF_BROWSER = 0x00000002,
324         MIMECONTF_MINIMAL = 0x00000004,
325         MIMECONTF_IMPORT = 0x00000008,
326         MIMECONTF_SAVABLE_MAILNEWS = 0x00000100,
327         MIMECONTF_SAVABLE_BROWSER = 0x00000200,
328         MIMECONTF_EXPORT = 0x00000400,
329         MIMECONTF_PRIVCONVERTER = 0x00010000,
330         MIMECONTF_VALID = 0x00020000,
331         MIMECONTF_VALID_NLS = 0x00040000,
332         MIMECONTF_MIME_IE4 = 0x10000000,
333         MIMECONTF_MIME_LATEST = 0x20000000,
334         MIMECONTF_MIME_REGISTRY = 0x40000000
335     } MIMECONTF;
336
337     typedef struct tagMIMECPINFO {
338         DWORD dwFlags;
339         UINT uiCodePage;
340         UINT uiFamilyCodePage;
341         WCHAR wszDescription[MAX_MIMECP_NAME];
342         WCHAR wszWebCharset[MAX_MIMECSET_NAME];
343         WCHAR wszHeaderCharset[MAX_MIMECSET_NAME];
344         WCHAR wszBodyCharset[MAX_MIMECSET_NAME];
345         WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME];
346         WCHAR wszProportionalFont[MAX_MIMEFACE_NAME];
347         BYTE bGDICharset;
348     } MIMECPINFO, *PMIMECPINFO;
349
350     typedef struct tagMIMECSETINFO
351     {
352         UINT uiCodePage;
353         UINT uiInternetEncoding;
354         WCHAR wszCharset[MAX_MIMECSET_NAME];
355     } MIMECSETINFO, *PMIMECSETINFO;
356
357     HRESULT Clone( 
358         [out] IEnumCodePage **ppEnum);
359
360     HRESULT Next(      
361         [in] ULONG celt,
362         [out] PMIMECPINFO rgelt,
363         [out] ULONG *pceltFetched);
364
365     HRESULT Reset();
366
367     HRESULT Skip(      
368         [in] ULONG celt);
369 }
370
371 [
372   object,
373   uuid(d66d6f98-cdaa-11d0-b822-00c04fc9b31f),
374   pointer_default(unique)
375 ]
376 interface IMLangConvertCharset : IUnknown
377 {
378     typedef enum tagMLCONVCHARF
379     {
380         MLCONVCHARF_AUTODETECT      = 1,
381         MLCONVCHARF_ENTITIZE        = 2,
382         MLCONVCHARF_NCR_ENTITIZE    = 2,
383         MLCONVCHARF_NAME_ENTITIZE   = 4,
384         MLCONVCHARF_USEDEFCHAR      = 8,
385         MLCONVCHARF_NOBESTFITCHARS  = 16,
386         MLCONVCHARF_DETECTJPN       = 32
387     } MLCONVCHAR;
388
389     HRESULT Initialize(      
390         [in] UINT uiSrcCodePage,
391         [in] UINT uiDstCodePage,
392         [in] DWORD dwProperty);
393
394     HRESULT GetSourceCodePage(      
395         [out] UINT *puiSrcCodePage);
396
397     HRESULT GetDestinationCodePage(      
398         [out] UINT *puiDstCodePage);
399
400     HRESULT GetProperty(      
401         [out] DWORD *pdwProperty);
402
403     HRESULT DoConversion(      
404         [in] BYTE *pSrcStr,
405         [in,out] UINT *pcSrcSize,
406         [in] BYTE *pDstStr,
407         [in,out] UINT *pcDstSize);
408
409     HRESULT DoConversionToUnicode(      
410         [in] CHAR *pSrcStr,
411         [in,out] UINT *pcSrcSize,
412         [in] WCHAR *pDstStr,
413         [in,out] UINT *pcDstSize);
414
415     HRESULT DoConversionFromUnicode(      
416         [in] WCHAR *pSrcStr,
417         [in,out] UINT *pcSrcSize,
418         [in] CHAR *pDstStr,
419         [in,out] UINT *pcDstSize);
420 }
421
422 [
423     uuid(d66d6f99-cdaa-11d0-b822-00c04fc9b31f)
424 ]
425 coclass CMLangConvertCharset
426 {
427     [default] interface IMLangConvertCharset;
428 };
429
430 [
431   object,
432   uuid(3dc39d1d-c030-11d0-b81b-00c04fc9b31f),
433   pointer_default(unique)
434 ]
435 interface IEnumRfc1766 : IUnknown
436 {
437     const USHORT MAX_RFC1766_NAME = 6;
438     const USHORT MAX_LOCALE_NAME = 32;
439
440     typedef struct tagRFC1766INFO
441     {
442         LCID lcid;
443         WCHAR wszRfc1766[MAX_RFC1766_NAME];
444         WCHAR wszLocaleName[MAX_LOCALE_NAME];
445     } RFC1766INFO, *PRFC1766INFO;
446
447     HRESULT Clone( 
448         [out] IEnumRfc1766 **ppEnum);
449
450     HRESULT Next(      
451         [in] ULONG celt,
452         [out] PRFC1766INFO rgelt,
453         [out] ULONG *pceltFetched);
454
455     HRESULT Reset();
456
457     HRESULT Skip(      
458         [in] ULONG celt);
459 }
460
461 [
462   object,
463   uuid(275c23e1-3747-11d0-9fea-00aa003f8646),
464   pointer_default(unique)
465 ]
466 interface IMultiLanguage : IUnknown
467 {
468     HRESULT GetNumberOfCodePageInfo(      
469         [out] UINT *pcCodePage);
470
471     HRESULT GetCodePageInfo(      
472         [in] UINT uiCodePage,
473         [out] PMIMECPINFO pCodePageInfo);
474
475     HRESULT GetFamilyCodePage(      
476         [in] UINT uiCodePage,
477         [out] UINT *puiFamilyCodePage);
478
479     HRESULT EnumCodePages(      
480         [in] DWORD grfFlags,
481         [out] IEnumCodePage **ppEnumCodePage);
482
483     HRESULT GetCharsetInfo(      
484         [in] BSTR Charset,
485         [in] PMIMECSETINFO pCharsetInfo);
486
487     HRESULT IsConvertible(      
488         [in] DWORD dwSrcEncoding,
489         [in] DWORD dwDstEncoding);
490
491     HRESULT ConvertString(      
492         [in,out] DWORD *pdwMode,
493         [in] DWORD dwSrcEncoding,
494         [in] DWORD dwDstEncoding,
495         [in] BYTE *pSrcStr,
496         [in,out] UINT *pcSrcSize,
497         [in] BYTE *pDstStr,
498         [in,out] UINT *pcDstSize);
499
500     HRESULT ConvertStringToUnicode(      
501         [in,out] DWORD *pdwMode,
502         [in] DWORD dwEncoding,
503         [in] CHAR *pSrcStr,
504         [in,out] UINT *pcSrcSize,
505         [in] WCHAR *pDstStr,
506         [in,out] UINT *pcDstSize);
507
508     HRESULT ConvertStringFromUnicode(      
509         [in,out] DWORD *pdwMode,
510         [in] DWORD dwEncoding,
511         [in] WCHAR *pSrcStr,
512         [in,out] UINT *pcSrcSize,
513         [in] CHAR *pDstStr,
514         [in,out] UINT *pcDstSize);
515
516     HRESULT ConvertStringReset();
517
518     HRESULT GetRfc1766FromLcid(      
519         [in] LCID Locale,
520         [out] BSTR *pbstrRfc1766);
521
522     HRESULT GetLcidFromRfc1766(      
523         [out] LCID *pLocale,
524         [in] BSTR bstrRfc1766);
525
526     HRESULT EnumRfc1766(      
527         [out] IEnumRfc1766 **ppEnumRfc1766);
528
529     HRESULT GetRfc1766Info(      
530         [in] LCID Locale,
531         [out] PRFC1766INFO pRfc1766Info);
532
533     HRESULT CreateConvertCharset(      
534         [in] UINT uiSrcCodePage,
535         [in] UINT uiDstCodePage,
536         [in] DWORD dwProperty,
537         [out] IMLangConvertCharset **ppMLangConvertCharset);
538
539 }
540
541 [
542   object,
543   uuid(dccfc164-2b38-11d2-b7ec-00c04f8f5d9a),
544   pointer_default(unique)
545 ]
546 interface IMultiLanguage2 : IUnknown
547 {
548     typedef struct tagDetectEncodingInfo
549     {
550         UINT nLangID;
551         UINT nCodePage;
552         INT nDocPercent;
553         INT nConfidence;
554     } DetectEncodingInfo, *pDetectEncodingInfo;
555
556     HRESULT GetNumberOfCodePageInfo(      
557         [out] UINT *pcCodePage);
558
559     HRESULT GetCodePageInfo(      
560         [in] UINT uiCodePage,
561         [in] LANGID LangId,
562         [out] PMIMECPINFO pCodePageInfo);
563
564     HRESULT GetFamilyCodePage(      
565         [in] UINT uiCodePage,
566         [out] UINT *puiFamilyCodePage);
567
568     HRESULT EnumCodePages(      
569         [in] DWORD grfFlags,
570         [in] LANGID LangId,
571         [out] IEnumCodePage **ppEnumCodePage);
572
573     HRESULT GetCharsetInfo(      
574         [in] BSTR Charset,
575         [in] PMIMECSETINFO pCharsetInfo);
576
577     HRESULT IsConvertible(      
578         [in] DWORD dwSrcEncoding,
579         [in] DWORD dwDstEncoding);
580
581     HRESULT ConvertString(      
582         [in,out] DWORD *pdwMode,
583         [in] DWORD dwSrcEncoding,
584         [in] DWORD dwDstEncoding,
585         [in] BYTE *pSrcStr,
586         [in,out] UINT *pcSrcSize,
587         [in] BYTE *pDstStr,
588         [in,out] UINT *pcDstSize);
589
590     HRESULT ConvertStringToUnicode(      
591         [in,out] DWORD *pdwMode,
592         [in] DWORD dwEncoding,
593         [in] CHAR *pSrcStr,
594         [in,out] UINT *pcSrcSize,
595         [in] WCHAR *pDstStr,
596         [in,out] UINT *pcDstSize);
597
598     HRESULT ConvertStringFromUnicode(      
599         [in,out] DWORD *pdwMode,
600         [in] DWORD dwEncoding,
601         [in] WCHAR *pSrcStr,
602         [in,out] UINT *pcSrcSize,
603         [in] CHAR *pDstStr,
604         [in,out] UINT *pcDstSize);
605
606     HRESULT ConvertStringReset();
607
608     HRESULT GetRfc1766FromLcid(      
609         [in] LCID Locale,
610         [out] BSTR *pbstrRfc1766);
611
612     HRESULT GetLcidFromRfc1766(      
613         [out] LCID *pLocale,
614         [in] BSTR bstrRfc1766);
615
616     HRESULT EnumRfc1766(      
617         [in] LANGID LangId,
618         [out] IEnumRfc1766 **ppEnumRfc1766);
619
620     HRESULT GetRfc1766Info(      
621         [in] LCID Locale,
622         [in] LANGID LangId,
623         [out] PRFC1766INFO pRfc1766Info);
624
625     HRESULT CreateConvertCharset(      
626         [in] UINT uiSrcCodePage,
627         [in] UINT uiDstCodePage,
628         [in] DWORD dwProperty,
629         [out] IMLangConvertCharset **ppMLangConvertCharset);
630
631     HRESULT ConvertStringInIStream(      
632         [in,out] DWORD *pdwMode,
633         [in] DWORD dwFlag,
634         [in] WCHAR *lpFallBack,
635         [in] DWORD dwSrcEncoding,
636         [in] DWORD dwDstEncoding,
637         [in] IStream *pstmIn,
638         [in] IStream *pstmOut);
639
640     HRESULT ConvertStringToUnicodeEx(      
641         [in,out] DWORD *pdwMode,
642         [in] DWORD dwEncoding,
643         [in] CHAR *pSrcStr,
644         [in,out] UINT *pcSrcSize,
645         [in] WCHAR *pDstStr,
646         [in,out] UINT *pcDstSize,
647         [in] DWORD dwFlag,
648         [in] WCHAR *lpFallBack);
649
650     HRESULT ConvertStringFromUnicodeEx(
651         [in,out] DWORD *pdwMode,
652         [in] DWORD dwEncoding,
653         [in] WCHAR *pSrcStr,
654         [in,out] UINT *pcSrcSize,
655         [in] CHAR *pDstStr,
656         [in,out] UINT *pcDstSize,
657         [in] DWORD dwFlag,
658         [in] WCHAR *lpFallBack);
659
660     HRESULT DetectCodepageInIStream(      
661         [in] DWORD dwFlag,
662         [in] DWORD dwPrefWinCodePage,
663         [in] IStream *pstmIn,
664         [in,out] DetectEncodingInfo *lpEncoding,
665         [in,out] INT *pnScores);
666
667     HRESULT DetectInputCodepage(      
668         [in] DWORD dwFlag,
669         [in] DWORD dwPrefWinCodePage,
670         [in] CHAR *pSrcStr,
671         [in,out] INT *pcSrcSize,
672         [in,out] DetectEncodingInfo *lpEncoding,
673         [in,out] INT *pnScores);
674
675     HRESULT ValidateCodePage(
676         [in] UINT uiCodePage,
677         [in] HWND hwnd);
678
679     HRESULT GetCodePageDescription(      
680         [in] UINT uiCodePage,
681         [in] LCID lcid,
682         [in,out,size_is(cchWideChar)] LPWSTR lpWideCharStr,
683         [in] int cchWideChar);
684
685     HRESULT IsCodePageInstallable(
686         [in] UINT uiCodePage);
687
688     HRESULT SetMimeDBSource(      
689         [in] MIMECONTF dwSource);
690
691     HRESULT GetNumberOfScripts(      
692         [out] UINT *pnScripts);
693
694     HRESULT EnumScripts(      
695         [in] DWORD dwFlags,
696         [in] LANGID LangId,
697         [out] IEnumScript **ppEnumScript);
698
699     HRESULT ValidateCodePageEx( /* undocumented on MSDN */
700         [in] UINT uiCodePage,
701         [in] HWND hwnd,
702         [in] DWORD dwfIODControl);
703 }
704
705 [
706     object,
707     uuid(4e5868ab-b157-4623-9acc-6a1d9caebe04),
708     pointer_default(unique)
709 ]
710 interface IMultiLanguage3 : IMultiLanguage2
711 {
712     typedef [unique] IMultiLanguage3 *LPMULTILANGUAGE3;
713     HRESULT DetectOutboundCodePage(
714         [in] DWORD dwFlags,
715         [in] LPCWSTR lpWideCharStr,
716         [in] UINT cchWideChar,
717         [in] UINT *puiPreferredCodePages,
718         [in] UINT nPreferredCodePages,
719         [in] UINT *puiDetectedCodePages,
720         [in, out] UINT *pnDetectedCodePages,
721         [in] WCHAR *lpSpecialChar);
722
723     HRESULT DetectOutboundCodePageInIStream(
724         [in] DWORD dwFlags,
725         [in] IStream *pStrIn,
726         [in] UINT *puiPreferredCodePages,
727         [in] UINT nPreferredCodePages,
728         [in] UINT *puiDetectedCodePages,
729         [in, out] UINT *pnDetectedCodePages,
730         [in] WCHAR *lpSpecialChar);
731 }
732
733 [
734     uuid(275C23E2-3747-11d0-9FEA-00AA003f8646)
735 ]
736 coclass CMultiLanguage
737 {
738     [default] interface IMultiLanguage;
739     interface IMLangCodePages;
740     interface IMLangFontLink;
741     /* interface IMLangLineBreakConsole; */
742     interface IMLangFontLink2;
743 }
744
745 cpp_quote("STDAPI LcidToRfc1766A(LCID, LPSTR, INT);")
746 cpp_quote("STDAPI LcidToRfc1766W(LCID, LPWSTR, INT);")
747 cpp_quote("#define LcidToRfc1766 WINELIB_NAME_AW(LcidToRfc1766)")
748
749 cpp_quote("STDAPI Rfc1766ToLcidA(LCID *, LPCSTR);")
750 cpp_quote("STDAPI Rfc1766ToLcidW(LCID *, LPCWSTR);")
751 cpp_quote("#define Rfc1766ToLcid WINELIB_NAME_AW(Rfc1766ToLcid)")
752
753 cpp_quote("STDAPI GetGlobalFontLinkObject(void **unknown);")
754 cpp_quote("STDAPI IsConvertINetStringAvailable(DWORD, DWORD);")
755 cpp_quote("STDAPI ConvertINetString(LPDWORD, DWORD, DWORD, LPCSTR, LPINT, LPSTR, LPINT);")
756 cpp_quote("STDAPI ConvertINetMultiByteToUnicode(LPDWORD, DWORD, LPCSTR, LPINT, LPWSTR, LPINT);")
757 cpp_quote("STDAPI ConvertINetUnicodeToMultiByte(LPDWORD, DWORD, LPCWSTR, LPINT, LPSTR, LPINT);")