~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Wine Cross Reference
wine/dlls/user32/ddeml16.c

Version: ~ [ wine-1.5.30 ] ~ [ wine-1.5.29 ] ~ [ wine-1.5.28 ] ~ [ wine-1.5.27 ] ~ [ wine-1.5.26 ] ~ [ wine-1.5.25 ] ~ [ wine-1.5.24 ] ~ [ wine-1.5.23 ] ~ [ wine-1.5.22 ] ~ [ wine-1.5.21 ] ~ [ wine-1.5.20 ] ~ [ wine-1.5.19 ] ~ [ wine-1.5.18 ] ~ [ wine-1.5.17 ] ~ [ wine-1.5.16 ] ~ [ wine-1.5.15 ] ~ [ wine-1.5.14 ] ~ [ wine-1.5.13 ] ~ [ wine-1.5.12 ] ~ [ wine-1.5.11 ] ~ [ wine-1.5.10 ] ~ [ wine-1.5.9 ] ~ [ wine-1.5.8 ] ~ [ wine-1.5.7 ] ~ [ wine-1.4.1 ] ~ [ wine-1.5.6 ] ~ [ wine-1.5.5 ] ~ [ wine-1.5.4 ] ~ [ wine-1.5.3 ] ~ [ wine-1.5.2 ] ~ [ wine-1.5.1 ] ~ [ wine-1.5.0 ] ~ [ wine-1.4 ] ~ [ wine-1.4-rc6 ] ~ [ wine-1.4-rc5 ] ~ [ wine-1.4-rc4 ] ~ [ wine-1.4-rc3 ] ~ [ wine-1.4-rc2 ] ~ [ wine-1.4-rc1 ] ~ [ wine-1.3.37 ] ~ [ wine-1.3.36 ] ~ [ wine-1.3.35 ] ~ [ wine-1.3.34 ] ~ [ wine-1.3.33 ] ~ [ wine-1.3.32 ] ~ [ wine-1.3.31 ] ~ [ wine-1.3.30 ] ~ [ wine-1.3.29 ] ~ [ wine-1.3.28 ] ~ [ wine-1.3.27 ] ~ [ wine-1.3.26 ] ~ [ wine-1.3.25 ] ~ [ wine-1.3.24 ] ~ [ wine-1.3.23 ] ~ [ wine-1.3.22 ] ~ [ wine-1.3.21 ] ~ [ wine-1.3.20 ] ~ [ wine-1.3.19 ] ~ [ wine-1.3.18 ] ~ [ wine-1.2.3 ] ~ [ wine-1.3.17 ] ~ [ wine-1.3.16 ] ~ [ wine-1.3.15 ] ~ [ wine-1.3.14 ] ~ [ wine-1.3.13 ] ~ [ wine-1.3.12 ] ~ [ wine-1.3.11 ] ~ [ wine-1.3.10 ] ~ [ wine-1.3.9 ] ~ [ wine-1.2.2 ] ~ [ wine-1.3.8 ] ~ [ wine-1.3.7 ] ~ [ wine-1.3.6 ] ~ [ wine-1.3.5 ] ~ [ wine-1.2.1 ] ~ [ wine-1.3.4 ] ~ [ wine-1.3.3 ] ~ [ wine-1.3.2 ] ~ [ wine-1.3.1 ] ~ [ wine-1.3.0 ] ~ [ wine-1.2 ] ~ [ wine-1.2-rc7 ] ~ [ wine-1.2-rc6 ] ~ [ wine-1.2-rc5 ] ~ [ wine-1.2-rc4 ] ~ [ wine-1.2-rc3 ] ~ [ wine-1.2-rc2 ] ~ [ wine-1.2-rc1 ] ~ [ wine-1.1.44 ] ~ [ wine-1.1.43 ] ~ [ wine-1.1.42 ] ~ [ wine-1.1.41 ] ~ [ wine-1.1.40 ] ~ [ wine-1.1.39 ] ~ [ wine-1.1.38 ] ~ [ wine-1.1.37 ] ~ [ wine-1.1.36 ] ~ [ wine-1.1.35 ] ~ [ wine-1.1.34 ] ~ [ wine-1.1.33 ] ~ [ wine-1.1.32 ] ~ [ wine-1.1.31 ] ~ [ wine-1.1.30 ] ~ [ wine-1.1.29 ] ~ [ wine-1.1.28 ] ~ [ wine-1.1.27 ] ~ [ wine-1.1.26 ] ~ [ wine-1.1.25 ] ~ [ wine-1.1.24 ] ~ [ wine-1.1.23 ] ~ [ wine-1.1.22 ] ~ [ wine-1.1.21 ] ~ [ wine-1.1.20 ] ~ [ wine-1.1.19 ] ~ [ wine-1.1.18 ] ~ [ wine-1.1.17 ] ~ [ wine-1.1.16 ] ~ [ wine-1.1.15 ] ~ [ wine-1.1.14 ] ~ [ wine-1.1.13 ] ~ [ wine-1.1.12 ] ~ [ wine-1.1.11 ] ~ [ wine-1.1.10 ] ~ [ wine-1.1.9 ] ~ [ wine-1.1.8 ] ~ [ wine-1.1.7 ] ~ [ wine-1.0.1 ] ~ [ wine-1.1.6 ] ~ [ wine-1.1.5 ] ~ [ wine-1.1.4 ] ~ [ wine-1.1.3 ] ~ [ wine-1.1.2 ] ~ [ wine-1.1.1 ] ~ [ wine-1.1.0 ] ~ [ wine-1.0 ] ~

  1 /*
  2  * DDEML library
  3  *
  4  * Copyright 1997 Alexandre Julliard
  5  * Copyright 1997 Len White
  6  * Copyright 1999 Keith Matthews
  7  * Copyright 2000 Corel
  8  * Copyright 2001,2002 Eric Pouech
  9  *
 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.
 14  *
 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.
 19  *
 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 23  */
 24 
 25 #include <stdarg.h>
 26 #include <string.h>
 27 #include "windef.h"
 28 #include "winbase.h"
 29 #include "wine/windef16.h"
 30 #include "wownt32.h"
 31 #include "dde.h"
 32 #include "ddeml.h"
 33 #include "dde_private.h"
 34 #include "wine/debug.h"
 35 
 36 WINE_DEFAULT_DEBUG_CHANNEL(ddeml);
 37 
 38 
 39 typedef HDDEDATA (CALLBACK *PFNCALLBACK16)(UINT16,UINT16,HCONV,HSZ,HSZ,HDDEDATA,
 40                                            DWORD,DWORD);
 41 
 42 typedef struct
 43 {
 44     UINT16  cb;
 45     UINT16  wFlags;
 46     UINT16  wCountryID;
 47     INT16   iCodePage;
 48     DWORD   dwLangID;
 49     DWORD   dwSecurity;
 50 } CONVCONTEXT16, *LPCONVCONTEXT16;
 51 
 52 typedef struct
 53 {
 54     DWORD          cb;
 55     DWORD          hUser;
 56     HCONV          hConvPartner;
 57     HSZ            hszSvcPartner;
 58     HSZ            hszServiceReq;
 59     HSZ            hszTopic;
 60     HSZ            hszItem;
 61     UINT16         wFmt;
 62     UINT16         wType;
 63     UINT16         wStatus;
 64     UINT16         wConvst;
 65     UINT16         wLastError;
 66     HCONVLIST      hConvList;
 67     CONVCONTEXT16  ConvCtxt;
 68 } CONVINFO16, *LPCONVINFO16;
 69 
 70 static void map1632_conv_context(CONVCONTEXT* cc32, const CONVCONTEXT16* cc16)
 71 {
 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;
 78 }
 79 
 80 static void map3216_conv_context(CONVCONTEXT16* cc16, const CONVCONTEXT* cc32)
 81 {
 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;
 88 }
 89 
 90 
 91 /******************************************************************
 92  *              WDML_InvokeCallback16
 93  *
 94  *
 95  */
 96 HDDEDATA        WDML_InvokeCallback16(PFNCALLBACK pfn, UINT uType, UINT uFmt,
 97                                       HCONV hConv, HSZ hsz1, HSZ hsz2,
 98                                       HDDEDATA hdata, DWORD dwData1, DWORD dwData2)
 99 {
100     DWORD               d1 = 0;
101     HDDEDATA            ret;
102     CONVCONTEXT16       cc16;
103     WORD args[16];
104 
105     switch (uType)
106     {
107     case XTYP_CONNECT:
108     case XTYP_WILDCONNECT:
109         if (dwData1)
110         {
111             map3216_conv_context(&cc16, (const CONVCONTEXT*)dwData1);
112             d1 = MapLS(&cc16);
113         }
114         else
115         break;
116     default:
117         d1 = dwData1;
118         break;
119     }
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 );
137 
138     switch (uType)
139     {
140     case XTYP_CONNECT:
141     case XTYP_WILDCONNECT:
142         if (d1 != 0) UnMapLS(d1);
143         break;
144     }
145     return ret;
146 }
147 
148 /******************************************************************************
149  *            DdeInitialize   (DDEML.2)
150  */
151 UINT16 WINAPI DdeInitialize16(LPDWORD pidInst, PFNCALLBACK16 pfnCallback,
152                               DWORD afCmd, DWORD ulRes)
153 {
154     return WDML_Initialize(pidInst, (PFNCALLBACK)pfnCallback, afCmd, ulRes,
155                            FALSE, TRUE);
156 }
157 
158 /*****************************************************************
159  *            DdeUninitialize   (DDEML.3)
160  */
161 BOOL16 WINAPI DdeUninitialize16(DWORD idInst)
162 {
163     return (BOOL16)DdeUninitialize(idInst);
164 }
165 
166 /*****************************************************************
167  * DdeConnectList [DDEML.4]
168  */
169 
170 HCONVLIST WINAPI DdeConnectList16(DWORD idInst, HSZ hszService, HSZ hszTopic,
171                                   HCONVLIST hConvList, LPCONVCONTEXT16 pCC16)
172 {
173     CONVCONTEXT         cc;
174     CONVCONTEXT*        pCC = NULL;
175 
176     if (pCC16)
177         map1632_conv_context(pCC = &cc, pCC16);
178     return DdeConnectList(idInst, hszService, hszTopic, hConvList, pCC);
179 }
180 
181 /*****************************************************************
182  * DdeQueryNextServer [DDEML.5]
183  */
184 HCONV WINAPI DdeQueryNextServer16(HCONVLIST hConvList, HCONV hConvPrev)
185 {
186     return DdeQueryNextServer(hConvList, hConvPrev);
187 }
188 
189 /*****************************************************************
190  *            DdeDisconnectList (DDEML.6)
191  */
192 BOOL16 WINAPI DdeDisconnectList16(HCONVLIST hConvList)
193 {
194     return (BOOL16)DdeDisconnectList(hConvList);
195 }
196 
197 
198 /*****************************************************************
199  *              DdeQueryString (DDEML.23)
200  */
201 DWORD WINAPI DdeQueryString16(DWORD idInst, HSZ hsz, LPSTR lpsz, DWORD cchMax,
202                               INT16 codepage)
203 {
204     return DdeQueryStringA(idInst, hsz, lpsz, cchMax, codepage);
205 }
206 
207 /*****************************************************************
208  *            DdeConnect   (DDEML.7)
209  */
210 HCONV WINAPI DdeConnect16(DWORD idInst, HSZ hszService, HSZ hszTopic,
211                           LPCONVCONTEXT16 pCC16)
212 {
213     CONVCONTEXT         cc;
214     CONVCONTEXT*        pCC = NULL;
215 
216     if (pCC16)
217         map1632_conv_context(pCC = &cc, pCC16);
218     return DdeConnect(idInst, hszService, hszTopic, pCC);
219 }
220 
221 /*****************************************************************
222  *            DdeDisconnect   (DDEML.8)
223  */
224 BOOL16 WINAPI DdeDisconnect16(HCONV hConv)
225 {
226     return (BOOL16)DdeDisconnect(hConv);
227 }
228 
229 /*****************************************************************
230  *            DdeSetUserHandle (DDEML.10)
231  */
232 BOOL16 WINAPI DdeSetUserHandle16(HCONV hConv, DWORD id, DWORD hUser)
233 {
234     return DdeSetUserHandle(hConv, id, hUser);
235 }
236 
237 /*****************************************************************
238  *            DdeCreateDataHandle (DDEML.14)
239  */
240 HDDEDATA WINAPI DdeCreateDataHandle16(DWORD idInst, LPBYTE pSrc, DWORD cb,
241                                       DWORD cbOff, HSZ hszItem, UINT16 wFmt,
242                                       UINT16 afCmd)
243 {
244     return DdeCreateDataHandle(idInst, pSrc, cb, cbOff, hszItem, wFmt, afCmd);
245 }
246 
247 /*****************************************************************
248  *            DdeCreateStringHandle   (DDEML.21)
249  */
250 HSZ WINAPI DdeCreateStringHandle16(DWORD idInst, LPCSTR str, INT16 codepage)
251 {
252     if  (codepage)
253     {
254         return DdeCreateStringHandleA(idInst, str, codepage);
255     }
256     else
257     {
258         TRACE("Default codepage supplied\n");
259         return DdeCreateStringHandleA(idInst, str, CP_WINANSI);
260     }
261 }
262 
263 /*****************************************************************
264  *            DdeFreeStringHandle   (DDEML.22)
265  */
266 BOOL16 WINAPI DdeFreeStringHandle16(DWORD idInst, HSZ hsz)
267 {
268     return (BOOL16)DdeFreeStringHandle(idInst, hsz);
269 }
270 
271 /*****************************************************************
272  *            DdeFreeDataHandle   (DDEML.19)
273  */
274 BOOL16 WINAPI DdeFreeDataHandle16(HDDEDATA hData)
275 {
276     return (BOOL16)DdeFreeDataHandle(hData);
277 }
278 
279 /*****************************************************************
280  *            DdeKeepStringHandle   (DDEML.24)
281  */
282 BOOL16 WINAPI DdeKeepStringHandle16(DWORD idInst, HSZ hsz)
283 {
284     return DdeKeepStringHandle(idInst, hsz);
285 }
286 
287 /*****************************************************************
288  *            DdeClientTransaction  (DDEML.11)
289  */
290 HDDEDATA WINAPI DdeClientTransaction16(LPVOID pData, DWORD cbData, HCONV hConv,
291                                        HSZ hszItem, UINT16 wFmt, UINT16 wType,
292                                        DWORD dwTimeout, LPDWORD pdwResult)
293 {
294     return DdeClientTransaction((LPBYTE)pData, cbData, hConv, hszItem,
295                                 wFmt, wType, dwTimeout, pdwResult);
296 }
297 
298 /*****************************************************************
299  *
300  *            DdeAbandonTransaction (DDEML.12)
301  *
302  */
303 BOOL16 WINAPI DdeAbandonTransaction16(DWORD idInst, HCONV hConv, DWORD idTransaction)
304 {
305     return (BOOL16)DdeAbandonTransaction(idInst, hConv, idTransaction);
306 }
307 
308 /*****************************************************************
309  * DdePostAdvise [DDEML.13]
310  */
311 BOOL16 WINAPI DdePostAdvise16(DWORD idInst, HSZ hszTopic, HSZ hszItem)
312 {
313     return (BOOL16)DdePostAdvise(idInst, hszTopic, hszItem);
314 }
315 
316 /*****************************************************************
317  *            DdeAddData (DDEML.15)
318  */
319 HDDEDATA WINAPI DdeAddData16(HDDEDATA hData, LPBYTE pSrc, DWORD cb, DWORD cbOff)
320 {
321     return DdeAddData(hData, pSrc, cb, cbOff);
322 }
323 
324 /*****************************************************************
325  * DdeGetData [DDEML.16]
326  */
327 DWORD WINAPI DdeGetData16(HDDEDATA hData, LPBYTE pDst, DWORD cbMax, DWORD cbOff)
328 {
329     return DdeGetData(hData, pDst, cbMax, cbOff);
330 }
331 
332 /*****************************************************************
333  *            DdeAccessData (DDEML.17)
334  */
335 LPBYTE WINAPI DdeAccessData16(HDDEDATA hData, LPDWORD pcbDataSize)
336 {
337     FIXME("expect trouble\n");
338     /* FIXME: there's a memory leak here... */
339     return (LPBYTE)MapLS(DdeAccessData(hData, pcbDataSize));
340 }
341 
342 /*****************************************************************
343  *            DdeUnaccessData (DDEML.18)
344  */
345 BOOL16 WINAPI DdeUnaccessData16(HDDEDATA hData)
346 {
347     return DdeUnaccessData(hData);
348 }
349 
350 /*****************************************************************
351  *            DdeEnableCallback (DDEML.26)
352  */
353 BOOL16 WINAPI DdeEnableCallback16(DWORD idInst, HCONV hConv, UINT16 wCmd)
354 {
355     return DdeEnableCallback(idInst, hConv, wCmd);
356 }
357 
358 /*****************************************************************
359  *            DdeNameService  (DDEML.27)
360  */
361 HDDEDATA WINAPI DdeNameService16(DWORD idInst, HSZ hsz1, HSZ hsz2, UINT16 afCmd)
362 {
363     return DdeNameService(idInst, hsz1, hsz2, afCmd);
364 }
365 
366 /*****************************************************************
367  *            DdeGetLastError  (DDEML.20)
368  */
369 UINT16 WINAPI DdeGetLastError16(DWORD idInst)
370 {
371     return (UINT16)DdeGetLastError(idInst);
372 }
373 
374 /*****************************************************************
375  *            DdeCmpStringHandles (DDEML.36)
376  */
377 INT16 WINAPI DdeCmpStringHandles16(HSZ hsz1, HSZ hsz2)
378 {
379     return DdeCmpStringHandles(hsz1, hsz2);
380 }
381 
382 /******************************************************************
383  *              DdeQueryConvInfo (DDEML.9)
384  *
385  */
386 UINT16 WINAPI DdeQueryConvInfo16(HCONV hConv, DWORD idTransaction,
387                                  LPCONVINFO16 lpConvInfo)
388 {
389     CONVINFO    ci32;
390     CONVINFO16  ci16;
391     UINT        ret;
392 
393     ci32.cb = sizeof(ci32);
394     ci32.ConvCtxt.cb = sizeof(ci32.ConvCtxt);
395 
396     ret = DdeQueryConvInfo(hConv, idTransaction, &ci32);
397     if (ret == 0) return 0;
398 
399     ci16.hUser = ci32.hUser;
400     ci16.hConvPartner = ci32.hConvPartner;
401     ci16.hszSvcPartner = ci32.hszSvcPartner;
402     ci16.hszServiceReq = ci32.hszServiceReq;
403     ci16.hszTopic = ci32.hszTopic;
404     ci16.hszItem = ci32.hszItem;
405     ci16.wFmt = ci32.wFmt;
406     ci16.wType = ci32.wType;
407     ci16.wStatus = ci32.wStatus;
408     ci16.wConvst = ci32.wConvst;
409     ci16.wLastError = ci32.wLastError;
410     ci16.hConvList = ci32.hConvList;
411 
412     map3216_conv_context(&ci16.ConvCtxt, &ci32.ConvCtxt);
413 
414     memcpy(lpConvInfo, &ci16, lpConvInfo->cb);
415     return lpConvInfo->cb;
416 }
417 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.