4 * Copyright 1997 Alexandre Julliard
5 * Copyright 1997 Len White
6 * Copyright 1999 Keith Matthews
8 * Copyright 2001,2002 Eric Pouech
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2.1 of the License, or (at your option) any later version.
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with this library; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29 #include "wine/windef16.h"
33 #include "dde/dde_private.h"
34 #include "wine/debug.h"
36 WINE_DEFAULT_DEBUG_CHANNEL(ddeml
);
39 typedef HDDEDATA (CALLBACK
*PFNCALLBACK16
)(UINT16
,UINT16
,HCONV
,HSZ
,HSZ
,HDDEDATA
,
50 } CONVCONTEXT16
, *LPCONVCONTEXT16
;
67 CONVCONTEXT16 ConvCtxt
;
68 } CONVINFO16
, *LPCONVINFO16
;
70 static void map1632_conv_context(CONVCONTEXT
* cc32
, const CONVCONTEXT16
* cc16
)
72 cc32
->cb
= sizeof(*cc32
);
73 cc32
->wFlags
= cc16
->wFlags
;
74 cc32
->wCountryID
= cc16
->wCountryID
;
75 cc32
->iCodePage
= cc16
->iCodePage
;
76 cc32
->dwLangID
= cc16
->dwLangID
;
77 cc32
->dwSecurity
= cc16
->dwSecurity
;
80 static void map3216_conv_context(CONVCONTEXT16
* cc16
, const CONVCONTEXT
* cc32
)
82 cc16
->cb
= sizeof(*cc16
);
83 cc16
->wFlags
= cc32
->wFlags
;
84 cc16
->wCountryID
= cc32
->wCountryID
;
85 cc16
->iCodePage
= cc32
->iCodePage
;
86 cc16
->dwLangID
= cc32
->dwLangID
;
87 cc16
->dwSecurity
= cc32
->dwSecurity
;
91 /******************************************************************
92 * WDML_InvokeCallback16
96 HDDEDATA
WDML_InvokeCallback16(PFNCALLBACK pfn
, UINT uType
, UINT uFmt
,
97 HCONV hConv
, HSZ hsz1
, HSZ hsz2
,
98 HDDEDATA hdata
, DWORD dwData1
, DWORD dwData2
)
108 case XTYP_WILDCONNECT
:
111 map3216_conv_context(&cc16
, (const CONVCONTEXT
*)dwData1
);
120 args
[15] = HIWORD(uType
);
121 args
[14] = LOWORD(uType
);
122 args
[13] = HIWORD(uFmt
);
123 args
[12] = LOWORD(uFmt
);
124 args
[11] = HIWORD(hConv
);
125 args
[10] = LOWORD(hConv
);
126 args
[9] = HIWORD(hsz1
);
127 args
[8] = LOWORD(hsz1
);
128 args
[7] = HIWORD(hsz2
);
129 args
[6] = LOWORD(hsz2
);
130 args
[5] = HIWORD(hdata
);
131 args
[4] = LOWORD(hdata
);
132 args
[3] = HIWORD(d1
);
133 args
[2] = LOWORD(d1
);
134 args
[1] = HIWORD(dwData2
);
135 args
[0] = LOWORD(dwData2
);
136 WOWCallback16Ex( (DWORD
)pfn
, WCB16_PASCAL
, sizeof(args
), args
, (DWORD
*)&ret
);
141 case XTYP_WILDCONNECT
:
142 if (d1
!= 0) UnMapLS(d1
);
148 /******************************************************************************
149 * DdeInitialize (DDEML.2)
151 UINT16 WINAPI
DdeInitialize16(LPDWORD pidInst
, PFNCALLBACK16 pfnCallback
,
152 DWORD afCmd
, DWORD ulRes
)
154 return WDML_Initialize(pidInst
, (PFNCALLBACK
)pfnCallback
, afCmd
, ulRes
, TRUE
);
157 /*****************************************************************
158 * DdeUninitialize (DDEML.3)
160 BOOL16 WINAPI
DdeUninitialize16(DWORD idInst
)
162 return (BOOL16
)DdeUninitialize(idInst
);
165 /*****************************************************************
166 * DdeConnectList [DDEML.4]
169 HCONVLIST WINAPI
DdeConnectList16(DWORD idInst
, HSZ hszService
, HSZ hszTopic
,
170 HCONVLIST hConvList
, LPCONVCONTEXT16 pCC16
)
173 CONVCONTEXT
* pCC
= NULL
;
176 map1632_conv_context(pCC
= &cc
, pCC16
);
177 return DdeConnectList(idInst
, hszService
, hszTopic
, hConvList
, pCC
);
180 /*****************************************************************
181 * DdeQueryNextServer [DDEML.5]
183 HCONV WINAPI
DdeQueryNextServer16(HCONVLIST hConvList
, HCONV hConvPrev
)
185 return DdeQueryNextServer(hConvList
, hConvPrev
);
188 /*****************************************************************
189 * DdeDisconnectList (DDEML.6)
191 BOOL16 WINAPI
DdeDisconnectList16(HCONVLIST hConvList
)
193 return (BOOL16
)DdeDisconnectList(hConvList
);
197 /*****************************************************************
198 * DdeQueryString (DDEML.23)
200 DWORD WINAPI
DdeQueryString16(DWORD idInst
, HSZ hsz
, LPSTR lpsz
, DWORD cchMax
,
203 return DdeQueryStringA(idInst
, hsz
, lpsz
, cchMax
, codepage
);
206 /*****************************************************************
207 * DdeConnect (DDEML.7)
209 HCONV WINAPI
DdeConnect16(DWORD idInst
, HSZ hszService
, HSZ hszTopic
,
210 LPCONVCONTEXT16 pCC16
)
213 CONVCONTEXT
* pCC
= NULL
;
216 map1632_conv_context(pCC
= &cc
, pCC16
);
217 return DdeConnect(idInst
, hszService
, hszTopic
, pCC
);
220 /*****************************************************************
221 * DdeDisconnect (DDEML.8)
223 BOOL16 WINAPI
DdeDisconnect16(HCONV hConv
)
225 return (BOOL16
)DdeDisconnect(hConv
);
228 /*****************************************************************
229 * DdeSetUserHandle (DDEML.10)
231 BOOL16 WINAPI
DdeSetUserHandle16(HCONV hConv
, DWORD id
, DWORD hUser
)
233 return DdeSetUserHandle(hConv
, id
, hUser
);
236 /*****************************************************************
237 * DdeCreateDataHandle (DDEML.14)
239 HDDEDATA WINAPI
DdeCreateDataHandle16(DWORD idInst
, LPBYTE pSrc
, DWORD cb
,
240 DWORD cbOff
, HSZ hszItem
, UINT16 wFmt
,
243 return DdeCreateDataHandle(idInst
, pSrc
, cb
, cbOff
, hszItem
, wFmt
, afCmd
);
246 /*****************************************************************
247 * DdeCreateStringHandle (DDEML.21)
249 HSZ WINAPI
DdeCreateStringHandle16(DWORD idInst
, LPCSTR str
, INT16 codepage
)
253 return DdeCreateStringHandleA(idInst
, str
, codepage
);
257 TRACE("Default codepage supplied\n");
258 return DdeCreateStringHandleA(idInst
, str
, CP_WINANSI
);
262 /*****************************************************************
263 * DdeFreeStringHandle (DDEML.22)
265 BOOL16 WINAPI
DdeFreeStringHandle16(DWORD idInst
, HSZ hsz
)
267 return (BOOL16
)DdeFreeStringHandle(idInst
, hsz
);
270 /*****************************************************************
271 * DdeFreeDataHandle (DDEML.19)
273 BOOL16 WINAPI
DdeFreeDataHandle16(HDDEDATA hData
)
275 return (BOOL16
)DdeFreeDataHandle(hData
);
278 /*****************************************************************
279 * DdeKeepStringHandle (DDEML.24)
281 BOOL16 WINAPI
DdeKeepStringHandle16(DWORD idInst
, HSZ hsz
)
283 return (BOOL
)DdeKeepStringHandle(idInst
, hsz
);
286 /*****************************************************************
287 * DdeClientTransaction (DDEML.11)
289 HDDEDATA WINAPI
DdeClientTransaction16(LPVOID pData
, DWORD cbData
, HCONV hConv
,
290 HSZ hszItem
, UINT16 wFmt
, UINT16 wType
,
291 DWORD dwTimeout
, LPDWORD pdwResult
)
293 return DdeClientTransaction((LPBYTE
)pData
, cbData
, hConv
, hszItem
,
294 wFmt
, wType
, dwTimeout
, pdwResult
);
297 /*****************************************************************
299 * DdeAbandonTransaction (DDEML.12)
302 BOOL16 WINAPI
DdeAbandonTransaction16(DWORD idInst
, HCONV hConv
, DWORD idTransaction
)
304 return (BOOL16
)DdeAbandonTransaction(idInst
, hConv
, idTransaction
);
307 /*****************************************************************
308 * DdePostAdvise [DDEML.13]
310 BOOL16 WINAPI
DdePostAdvise16(DWORD idInst
, HSZ hszTopic
, HSZ hszItem
)
312 return (BOOL16
)DdePostAdvise(idInst
, hszTopic
, hszItem
);
315 /*****************************************************************
316 * DdeAddData (DDEML.15)
318 HDDEDATA WINAPI
DdeAddData16(HDDEDATA hData
, LPBYTE pSrc
, DWORD cb
, DWORD cbOff
)
320 return DdeAddData(hData
, pSrc
, cb
, cbOff
);
323 /*****************************************************************
324 * DdeGetData [DDEML.16]
326 DWORD WINAPI
DdeGetData16(HDDEDATA hData
, LPBYTE pDst
, DWORD cbMax
, DWORD cbOff
)
328 return DdeGetData(hData
, pDst
, cbMax
, cbOff
);
331 /*****************************************************************
332 * DdeAccessData (DDEML.17)
334 LPBYTE WINAPI
DdeAccessData16(HDDEDATA hData
, LPDWORD pcbDataSize
)
336 FIXME("expect trouble\n");
337 /* FIXME: there's a memory leak here... */
338 return (LPBYTE
)MapLS(DdeAccessData(hData
, pcbDataSize
));
341 /*****************************************************************
342 * DdeUnaccessData (DDEML.18)
344 BOOL16 WINAPI
DdeUnaccessData16(HDDEDATA hData
)
346 return DdeUnaccessData(hData
);
349 /*****************************************************************
350 * DdeEnableCallback (DDEML.26)
352 BOOL16 WINAPI
DdeEnableCallback16(DWORD idInst
, HCONV hConv
, UINT16 wCmd
)
354 return DdeEnableCallback(idInst
, hConv
, wCmd
);
357 /*****************************************************************
358 * DdeNameService (DDEML.27)
360 HDDEDATA WINAPI
DdeNameService16(DWORD idInst
, HSZ hsz1
, HSZ hsz2
, UINT16 afCmd
)
362 return DdeNameService(idInst
, hsz1
, hsz2
, afCmd
);
365 /*****************************************************************
366 * DdeGetLastError (DDEML.20)
368 UINT16 WINAPI
DdeGetLastError16(DWORD idInst
)
370 return (UINT16
)DdeGetLastError(idInst
);
373 /*****************************************************************
374 * DdeCmpStringHandles (DDEML.36)
376 INT16 WINAPI
DdeCmpStringHandles16(HSZ hsz1
, HSZ hsz2
)
378 return DdeCmpStringHandles(hsz1
, hsz2
);
381 /******************************************************************
382 * DdeQueryConvInfo (DDEML.9)
385 UINT16 WINAPI
DdeQueryConvInfo16(HCONV hConv
, DWORD idTransaction
,
386 LPCONVINFO16 lpConvInfo
)
392 ci32
.cb
= sizeof(ci32
);
393 ci32
.ConvCtxt
.cb
= sizeof(ci32
.ConvCtxt
);
395 ret
= DdeQueryConvInfo(hConv
, idTransaction
, &ci32
);
396 if (ret
== 0) return 0;
398 ci16
.hUser
= ci32
.hUser
;
399 ci16
.hConvPartner
= ci32
.hConvPartner
;
400 ci16
.hszSvcPartner
= ci32
.hszSvcPartner
;
401 ci16
.hszServiceReq
= ci32
.hszServiceReq
;
402 ci16
.hszTopic
= ci32
.hszTopic
;
403 ci16
.hszItem
= ci32
.hszItem
;
404 ci16
.wFmt
= ci32
.wFmt
;
405 ci16
.wType
= ci32
.wType
;
406 ci16
.wStatus
= ci32
.wStatus
;
407 ci16
.wConvst
= ci32
.wConvst
;
408 ci16
.wLastError
= ci32
.wLastError
;
409 ci16
.hConvList
= ci32
.hConvList
;
411 map3216_conv_context(&ci16
.ConvCtxt
, &ci32
.ConvCtxt
);
413 memcpy(lpConvInfo
, &ci16
, lpConvInfo
->cb
);
414 return lpConvInfo
->cb
;