xref: /netbsd-src/external/gpl3/gcc/dist/libphobos/libdruntime/core/sys/windows/ddeml.d (revision 0a3071956a3a9fdebdbf7f338cf2d439b45fc728)
1 /**
2  * Windows API header module
3  *
4  * Translated from MinGW Windows headers
5  *
6  * Authors: Stewart Gordon
7  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8  * Source: $(DRUNTIMESRC core/sys/windows/_ddeml.d)
9  */
10 module core.sys.windows.ddeml;
version(Windows)11 version (Windows):
12 @system:
13 
14 version (ANSI) {} else version = Unicode;
15 pragma(lib, "user32");
16 
17 import core.sys.windows.basetsd, core.sys.windows.windef, core.sys.windows.winnt;
18 
19 mixin DECLARE_HANDLE!("HCONVLIST");
20 mixin DECLARE_HANDLE!("HCONV");
21 mixin DECLARE_HANDLE!("HSZ");
22 mixin DECLARE_HANDLE!("HDDEDATA");
23 
24 enum : int {
25     CP_WINANSI    = 1004,
26     CP_WINUNICODE = 1200
27 }
28 
29 enum : UINT {
30     XTYPF_NOBLOCK = 2,
31     XTYPF_NODATA  = 4,
32     XTYPF_ACKREQ  = 8
33 }
34 
35 enum : UINT {
36     XCLASS_MASK         = 0xFC00,
37     XCLASS_BOOL         = 0x1000,
38     XCLASS_DATA         = 0x2000,
39     XCLASS_FLAGS        = 0x4000,
40     XCLASS_NOTIFICATION = 0x8000
41 }
42 
43 enum : UINT {
44     XST_NULL,
45     XST_INCOMPLETE,
46     XST_CONNECTED,
47     XST_INIT1,
48     XST_INIT2,
49     XST_REQSENT,
50     XST_DATARCVD,
51     XST_POKESENT,
52     XST_POKEACKRCVD,
53     XST_EXECSENT,
54     XST_EXECACKRCVD,
55     XST_ADVSENT,
56     XST_UNADVSENT,
57     XST_ADVACKRCVD,
58     XST_UNADVACKRCVD,
59     XST_ADVDATASENT,
60     XST_ADVDATAACKRCVD // = 16
61 }
62 
63 enum : UINT {
64     XTYP_ERROR           = XCLASS_NOTIFICATION | XTYPF_NOBLOCK,
65     XTYP_ADVDATA         = 0x0010 | XCLASS_FLAGS,
66     XTYP_ADVREQ          = 0x0020 | XCLASS_DATA | XTYPF_NOBLOCK,
67     XTYP_ADVSTART        = 0x0030 | XCLASS_BOOL,
68     XTYP_ADVSTOP         = 0x0040 | XCLASS_NOTIFICATION,
69     XTYP_EXECUTE         = 0x0050 | XCLASS_FLAGS,
70     XTYP_CONNECT         = 0x0060 | XCLASS_BOOL | XTYPF_NOBLOCK,
71     XTYP_CONNECT_CONFIRM = 0x0070 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK,
72     XTYP_XACT_COMPLETE   = 0x0080 | XCLASS_NOTIFICATION,
73     XTYP_POKE            = 0x0090 | XCLASS_FLAGS,
74     XTYP_REGISTER        = 0x00A0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK,
75     XTYP_REQUEST         = 0x00B0 | XCLASS_DATA,
76     XTYP_DISCONNECT      = 0x00C0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK,
77     XTYP_UNREGISTER      = 0x00D0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK,
78     XTYP_WILDCONNECT     = 0x00E0 | XCLASS_DATA | XTYPF_NOBLOCK,
79     XTYP_MONITOR         = 0X00F0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK,
80     XTYP_MASK            = 0x00F0,
81     XTYP_SHIFT           = 4
82 }
83 
84 enum : UINT {
85     TIMEOUT_ASYNC = 0xFFFFFFFF
86 }
87 
88 enum : UINT {
89     QID_SYNC      = 0xFFFFFFFF
90 }
91 
92 enum : UINT {
93     ST_CONNECTED  =   1,
94     ST_ADVISE     =   2,
95     ST_ISLOCAL    =   4,
96     ST_BLOCKED    =   8,
97     ST_CLIENT     =  16,
98     ST_TERMINATED =  32,
99     ST_INLIST     =  64,
100     ST_BLOCKNEXT  = 128,
101     ST_ISSELF     = 256
102 }
103 
104 enum : UINT {
105     CADV_LATEACK  = 0xFFFF
106 }
107 
108 enum : UINT {
109     DMLERR_NO_ERROR      = 0,
110     DMLERR_FIRST         = 0x4000,
111     DMLERR_ADVACKTIMEOUT = DMLERR_FIRST,
112     DMLERR_BUSY,
113     DMLERR_DATAACKTIMEOUT,
114     DMLERR_DLL_NOT_INITIALIZED,
115     DMLERR_DLL_USAGE,
116     DMLERR_EXECACKTIMEOUT,
117     DMLERR_INVALIDPARAMETER,
118     DMLERR_LOW_MEMORY,
119     DMLERR_MEMORY_ERROR,
120     DMLERR_NOTPROCESSED,
121     DMLERR_NO_CONV_ESTABLISHED,
122     DMLERR_POKEACKTIMEOUT,
123     DMLERR_POSTMSG_FAILED,
124     DMLERR_REENTRANCY,
125     DMLERR_SERVER_DIED,
126     DMLERR_SYS_ERROR,
127     DMLERR_UNADVACKTIMEOUT,
128     DMLERR_UNFOUND_QUEUE_ID, // = 0x4011
129     DMLERR_LAST          = DMLERR_UNFOUND_QUEUE_ID
130 }
131 
132 enum : UINT {
133     DDE_FACK            = 0x8000,
134     DDE_FBUSY           = 0x4000,
135     DDE_FDEFERUPD       = 0x4000,
136     DDE_FACKREQ         = 0x8000,
137     DDE_FRELEASE        = 0x2000,
138     DDE_FREQUESTED      = 0x1000,
139     DDE_FAPPSTATUS      = 0x00ff,
140     DDE_FNOTPROCESSED   = 0,
141     DDE_FACKRESERVED    = (~(DDE_FACK|DDE_FBUSY|DDE_FAPPSTATUS)),
142     DDE_FADVRESERVED    = (~(DDE_FACKREQ|DDE_FDEFERUPD)),
143     DDE_FDATRESERVED    = (~(DDE_FACKREQ|DDE_FRELEASE|DDE_FREQUESTED)),
144     DDE_FPOKRESERVED    = (~DDE_FRELEASE)
145 }
146 
147 enum : UINT {
148     MSGF_DDEMGR         = 0x8001
149 }
150 
151 enum CBR_BLOCK = cast(HDDEDATA)-1;
152 
153 enum DWORD
154     APPCLASS_STANDARD         = 0,
155     APPCLASS_MONITOR          = 0x00000001,
156     APPCLASS_MASK             = 0x0000000F,
157     APPCMD_CLIENTONLY         = 0x00000010,
158     APPCMD_FILTERINITS        = 0x00000020,
159     APPCMD_MASK               = 0x00000FF0,
160     CBF_FAIL_SELFCONNECTIONS  = 0x00001000,
161     CBF_FAIL_CONNECTIONS      = 0x00002000,
162     CBF_FAIL_ADVISES          = 0x00004000,
163     CBF_FAIL_EXECUTES         = 0x00008000,
164     CBF_FAIL_POKES            = 0x00010000,
165     CBF_FAIL_REQUESTS         = 0x00020000,
166     CBF_FAIL_ALLSVRXACTIONS   = 0x0003f000,
167     CBF_SKIP_CONNECT_CONFIRMS = 0x00040000,
168     CBF_SKIP_REGISTRATIONS    = 0x00080000,
169     CBF_SKIP_UNREGISTRATIONS  = 0x00100000,
170     CBF_SKIP_DISCONNECTS      = 0x00200000,
171     CBF_SKIP_ALLNOTIFICATIONS = 0x003c0000,
172     MF_HSZ_INFO               = 0x01000000,
173     MF_SENDMSGS               = 0x02000000,
174     MF_POSTMSGS               = 0x04000000,
175     MF_CALLBACKS              = 0x08000000,
176     MF_ERRORS                 = 0x10000000,
177     MF_LINKS                  = 0x20000000,
178     MF_CONV                   = 0x40000000,
179     MF_MASK                   = 0xFF000000;
180 
181 enum : UINT {
182     EC_ENABLEALL    = 0,
183     EC_ENABLEONE    = ST_BLOCKNEXT,
184     EC_DISABLE      = ST_BLOCKED,
185     EC_QUERYWAITING = 2
186 }
187 
188 enum : UINT {
189     DNS_REGISTER   = 1,
190     DNS_UNREGISTER = 2,
191     DNS_FILTERON   = 4,
192     DNS_FILTEROFF  = 8
193 }
194 
195 enum : UINT {
196     HDATA_APPOWNED = 1
197 }
198 
199 enum : UINT {
200     MAX_MONITORS   = 4
201 }
202 
203 enum : int {
204     MH_CREATE  = 1,
205     MH_KEEP    = 2,
206     MH_DELETE  = 3,
207     MH_CLEANUP = 4
208 }
209 
210 extern (Windows) alias HDDEDATA
211   function(UINT, UINT, HCONV, HSZ, HSZ, HDDEDATA, ULONG_PTR, ULONG_PTR) PFNCALLBACK;
212 
213 struct HSZPAIR {
214     HSZ hszSvc;
215     HSZ hszTopic;
216 }
217 alias HSZPAIR* PHSZPAIR;
218 
219 struct CONVCONTEXT {
220     UINT                        cb = CONVCONTEXT.sizeof;
221     UINT                        wFlags;
222     UINT                        wCountryID;
223     int                         iCodePage;
224     DWORD                       dwLangID;
225     DWORD                       dwSecurity;
226     SECURITY_QUALITY_OF_SERVICE qos;
227 }
228 alias CONVCONTEXT* PCONVCONTEXT;
229 
230 struct CONVINFO {
231     DWORD       cb = CONVINFO.sizeof;
232     DWORD_PTR   hUser;
233     HCONV       hConvPartner;
234     HSZ         hszSvcPartner;
235     HSZ         hszServiceReq;
236     HSZ         hszTopic;
237     HSZ         hszItem;
238     UINT        wFmt;
239     UINT        wType;
240     UINT        wStatus;
241     UINT        wConvst;
242     UINT        wLastError;
243     HCONVLIST   hConvList;
244     CONVCONTEXT ConvCtxt;
245     HWND        hwnd;
246     HWND        hwndPartner;
247 }
248 alias CONVINFO* PCONVINFO;
249 
250 struct DDEML_MSG_HOOK_DATA {
251     UINT_PTR uiLo;
252     UINT_PTR uiHi;
253     DWORD    cbData;
254     DWORD[8] Data;
255 }
256 
257 struct MONHSZSTRUCT {
258     UINT     cb = MONHSZSTRUCT.sizeof;
259     int      fsAction;
260     DWORD    dwTime;
261     HSZ      hsz;
262     HANDLE   hTask;
263     TCHAR[1] _str = 0;
264 
265     TCHAR* str() return { return _str.ptr; }
266 }
267 alias MONHSZSTRUCT* PMONHSZSTRUCT;
268 
269 struct MONLINKSTRUCT {
270     UINT   cb = MONLINKSTRUCT.sizeof;
271     DWORD  dwTime;
272     HANDLE hTask;
273     BOOL   fEstablished;
274     BOOL   fNoData;
275     HSZ    hszSvc;
276     HSZ    hszTopic;
277     HSZ    hszItem;
278     UINT   wFmt;
279     BOOL   fServer;
280     HCONV  hConvServer;
281     HCONV  hConvClient;
282 }
283 alias MONLINKSTRUCT* PMONLINKSTRUCT;
284 
285 struct MONCONVSTRUCT {
286     UINT   cb = MONCONVSTRUCT.sizeof;
287     BOOL   fConnect;
288     DWORD  dwTime;
289     HANDLE hTask;
290     HSZ    hszSvc;
291     HSZ    hszTopic;
292     HCONV  hConvClient;
293     HCONV  hConvServer;
294 }
295 alias MONCONVSTRUCT* PMONCONVSTRUCT;
296 
297 struct MONCBSTRUCT {
298     UINT        cb = MONCBSTRUCT.sizeof;
299     DWORD       dwTime;
300     HANDLE      hTask;
301     DWORD       dwRet;
302     UINT        wType;
303     UINT        wFmt;
304     HCONV       hConv;
305     HSZ         hsz1;
306     HSZ         hsz2;
307     HDDEDATA    hData;
308     ULONG_PTR   dwData1;
309     ULONG_PTR   dwData2;
310     CONVCONTEXT cc;
311     DWORD       cbData;
312     DWORD[8]    Data;
313 }
314 alias MONCBSTRUCT* PMONCBSTRUCT;
315 
316 struct MONERRSTRUCT {
317     UINT   cb = MONERRSTRUCT.sizeof;
318     UINT   wLastError;
319     DWORD  dwTime;
320     HANDLE hTask;
321 }
322 alias MONERRSTRUCT* PMONERRSTRUCT;
323 
324 struct MONMSGSTRUCT {
325     UINT   cb = MONMSGSTRUCT.sizeof;
326     HWND   hwndTo;
327     DWORD  dwTime;
328     HANDLE hTask;
329     UINT   wMsg;
330     WPARAM wParam;
331     LPARAM lParam;
332     DDEML_MSG_HOOK_DATA dmhd;
333 }
334 alias MONMSGSTRUCT* PMONMSGSTRUCT;
335 
336 extern (Windows) {
337     BOOL DdeAbandonTransaction(DWORD, HCONV, DWORD);
338     PBYTE DdeAccessData(HDDEDATA, PDWORD);
339     HDDEDATA DdeAddData(HDDEDATA, PBYTE, DWORD, DWORD);
340     HDDEDATA DdeClientTransaction(PBYTE, DWORD, HCONV, HSZ, UINT, UINT,
341       DWORD, PDWORD);
342     int DdeCmpStringHandles(HSZ, HSZ);
343     HCONV DdeConnect(DWORD, HSZ, HSZ, PCONVCONTEXT);
344     HCONVLIST DdeConnectList(DWORD, HSZ, HSZ, HCONVLIST, PCONVCONTEXT);
345     HDDEDATA DdeCreateDataHandle(DWORD, PBYTE, DWORD, DWORD, HSZ, UINT,
346       UINT);
347     HSZ DdeCreateStringHandleA(DWORD, LPSTR, int);
348     HSZ DdeCreateStringHandleW(DWORD, LPWSTR, int);
349     BOOL DdeDisconnect(HCONV);
350     BOOL DdeDisconnectList(HCONVLIST);
351     BOOL DdeEnableCallback(DWORD, HCONV, UINT);
352     BOOL DdeFreeDataHandle(HDDEDATA);
353     BOOL DdeFreeStringHandle(DWORD, HSZ);
354     DWORD DdeGetData(HDDEDATA, PBYTE, DWORD, DWORD);
355     UINT DdeGetLastError(DWORD);
356     BOOL DdeImpersonateClient(HCONV);
357     UINT DdeInitializeA(PDWORD, PFNCALLBACK, DWORD, DWORD);
358     UINT DdeInitializeW(PDWORD, PFNCALLBACK, DWORD, DWORD);
359     BOOL DdeKeepStringHandle(DWORD, HSZ);
360     HDDEDATA DdeNameService(DWORD, HSZ, HSZ, UINT);
361     BOOL DdePostAdvise(DWORD, HSZ, HSZ);
362     UINT DdeQueryConvInfo(HCONV, DWORD, PCONVINFO);
363     HCONV DdeQueryNextServer(HCONVLIST, HCONV);
364     DWORD DdeQueryStringA(DWORD, HSZ, LPSTR, DWORD, int);
365     DWORD DdeQueryStringW(DWORD, HSZ, LPWSTR, DWORD, int);
366     HCONV DdeReconnect(HCONV);
367     BOOL DdeSetUserHandle(HCONV, DWORD, DWORD_PTR);
368     BOOL DdeUnaccessData(HDDEDATA);
369     BOOL DdeUninitialize(DWORD);
370 }
371 
372 const TCHAR[]
373     SZDDESYS_TOPIC         = "System",
374     SZDDESYS_ITEM_TOPICS   = "Topics",
375     SZDDESYS_ITEM_SYSITEMS = "SysItems",
376     SZDDESYS_ITEM_RTNMSG   = "ReturnMessage",
377     SZDDESYS_ITEM_STATUS   = "Status",
378     SZDDESYS_ITEM_FORMATS  = "Formats",
379     SZDDESYS_ITEM_HELP     = "Help",
380     SZDDE_ITEM_ITEMLIST    = "TopicItemList";
381 
382 version (Unicode) {
383     alias DdeCreateStringHandleW DdeCreateStringHandle;
384     alias DdeInitializeW DdeInitialize;
385     alias DdeQueryStringW DdeQueryString;
386 } else {
387     alias DdeCreateStringHandleA DdeCreateStringHandle;
388     alias DdeInitializeA DdeInitialize;
389     alias DdeQueryStringA DdeQueryString;
390 }
391