- implemented correctly the HSZ as local atoms and added the needed
[wine] / dlls / user / dde / ddeml16.c
1 /* -*- tab-width: 8; c-basic-offset: 8 -*- */
2
3 /*
4  * DDEML library
5  *
6  * Copyright 1997 Alexandre Julliard
7  * Copyright 1997 Len White
8  * Copyright 1999 Keith Matthews
9  * Copyright 2000 Corel
10  * Copyright 2001 Eric Pouech
11  */
12
13 #include <string.h>
14 #include "winbase.h"
15 #include "windef.h"
16 #include "wine/windef16.h"
17 #include "wingdi.h"
18 #include "winuser.h"
19 #include "winerror.h"
20 #include "dde.h"
21 #include "ddeml.h"
22 #include "dde/dde_private.h"
23 #include "debugtools.h"
24
25 DEFAULT_DEBUG_CHANNEL(ddeml);
26
27
28 typedef HDDEDATA CALLBACK (*PFNCALLBACK16)(UINT16,UINT16,HCONV,HSZ,HSZ,HDDEDATA,DWORD,DWORD);
29
30 typedef struct
31 {
32     UINT16  cb;
33     UINT16  wFlags;
34     UINT16  wCountryID;
35     INT16   iCodePage;
36     DWORD   dwLangID;
37     DWORD   dwSecurity;
38 } CONVCONTEXT16, *LPCONVCONTEXT16;
39
40 typedef struct
41 {
42     DWORD          cb;
43     DWORD          hUser;
44     HCONV          hConvPartner;
45     HSZ            hszSvcPartner;
46     HSZ            hszServiceReq;
47     HSZ            hszTopic;
48     HSZ            hszItem;
49     UINT16         wFmt;
50     UINT16         wType;
51     UINT16         wStatus;
52     UINT16         wConvst;
53     UINT16         wLastError;
54     HCONVLIST      hConvList;
55     CONVCONTEXT16  ConvCtxt;
56 } CONVINFO16, *LPCONVINFO16;
57
58 /* ### start build ### */
59 extern LONG CALLBACK WDML_CallTo16_long_llllllll    (FARPROC16,LONG,LONG,LONG,LONG,LONG,LONG,LONG,LONG);
60 /* ### stop build ### */
61
62 /******************************************************************
63  *              WDML_InvokeCallback16
64  *
65  *
66  */
67 HDDEDATA        WDML_InvokeCallback16(PFNCALLBACK pfn, UINT uType, UINT uFmt, HCONV hConv,
68                                       HSZ hsz1, HSZ hsz2, HDDEDATA hdata, 
69                                       DWORD dwData1, DWORD dwData2)
70 {
71         return WDML_CallTo16_long_llllllll((FARPROC16)pfn, uType, uFmt, hConv, 
72                                            hsz1, hsz2, hdata, dwData1, dwData2);
73 }
74
75 /******************************************************************************
76  *            DdeInitialize   (DDEML.2)
77  */
78 UINT16 WINAPI DdeInitialize16(LPDWORD pidInst, PFNCALLBACK16 pfnCallback,
79                               DWORD afCmd, DWORD ulRes)
80 {
81     return WDML_Initialize(pidInst, (PFNCALLBACK)pfnCallback, afCmd, ulRes, FALSE, TRUE);
82 }
83
84 /*****************************************************************
85  *            DdeUninitialize   (DDEML.3)
86  */
87 BOOL16 WINAPI DdeUninitialize16(DWORD idInst)
88 {
89      FIXME(" stub calling DdeUninitialize\n");
90      return (BOOL16)DdeUninitialize(idInst);
91 }
92
93 /*****************************************************************
94  * DdeConnectList [DDEML.4]
95  */
96
97 HCONVLIST WINAPI DdeConnectList16(DWORD idInst, HSZ hszService, HSZ hszTopic,
98                                   HCONVLIST hConvList, LPCONVCONTEXT16 pCC)
99 {
100      return DdeConnectList(idInst, hszService, hszTopic, hConvList, 
101                            (LPCONVCONTEXT)pCC);
102 }
103
104 /*****************************************************************
105  * DdeQueryNextServer [DDEML.5]
106  */
107 HCONV WINAPI DdeQueryNextServer16(HCONVLIST hConvList, HCONV hConvPrev)
108 {
109      return DdeQueryNextServer(hConvList, hConvPrev);
110 }
111
112 /*****************************************************************
113  *            DdeDisconnectList (DDEML.6)
114  */
115 BOOL16 WINAPI DdeDisconnectList16(HCONVLIST hConvList)
116 {
117      return (BOOL16)DdeDisconnectList(hConvList);
118 }
119
120
121 /*****************************************************************
122  *              DdeQueryString (DDEML.23)
123  */
124 DWORD WINAPI DdeQueryString16(DWORD idInst, HSZ hsz, LPSTR lpsz, DWORD cchMax, INT16 codepage)
125 {
126      FIXME("(%ld, 0x%x, %p, %ld, %d): stub \n", 
127            idInst, hsz, lpsz, cchMax, codepage);
128      return 0;
129 }
130
131 /*****************************************************************
132  *            DdeConnect   (DDEML.7)
133  */
134 HCONV WINAPI DdeConnect16(DWORD idInst, HSZ hszService, HSZ hszTopic,
135                           LPCONVCONTEXT16 pCC16)
136 {
137      CONVCONTEXT        cc;
138      CONVCONTEXT*       pCC = NULL;
139      
140      if (pCC16) {
141           pCC = &cc;
142           cc.cb = sizeof(cc);
143           cc.wFlags = pCC16->wFlags;
144           cc.iCodePage = pCC16->iCodePage;
145           cc.dwLangID = pCC16->dwLangID;
146           cc.dwSecurity = pCC16->dwSecurity;
147      }
148      return DdeConnect(idInst, hszService, hszTopic, pCC);
149 }
150
151 /*****************************************************************
152  *            DdeDisconnect   (DDEML.8)
153  */
154 BOOL16 WINAPI DdeDisconnect16(HCONV hConv)
155 {
156      return (BOOL16)DdeDisconnect(hConv);
157 }
158
159 /*****************************************************************
160  *            DdeSetUserHandle (DDEML.10)
161  */
162 BOOL16 WINAPI DdeSetUserHandle16(HCONV hConv, DWORD id, DWORD hUser)
163 {
164      return DdeSetUserHandle(hConv, id, hUser);
165 }
166
167 /*****************************************************************
168  *            DdeCreateDataHandle (DDEML.14)
169  */
170 HDDEDATA WINAPI DdeCreateDataHandle16(DWORD idInst, LPBYTE pSrc, DWORD cb, 
171                                       DWORD cbOff, HSZ hszItem, UINT16 wFmt, 
172                                       UINT16 afCmd)
173 {
174      return DdeCreateDataHandle(idInst, pSrc, cb, cbOff, hszItem, wFmt, afCmd);
175 }
176
177 /*****************************************************************
178  *            DdeCreateStringHandle   (DDEML.21)
179  */
180 HSZ WINAPI DdeCreateStringHandle16(DWORD idInst, LPCSTR str, INT16 codepage)
181 {
182      if  (codepage)
183      {
184           return DdeCreateStringHandleA(idInst, str, codepage);
185      } 
186      else 
187      {
188           TRACE("Default codepage supplied\n");
189           return DdeCreateStringHandleA(idInst, str, CP_WINANSI);
190      }
191 }
192
193 /*****************************************************************
194  *            DdeFreeStringHandle   (DDEML.22)
195  */
196 BOOL16 WINAPI DdeFreeStringHandle16(DWORD idInst, HSZ hsz)
197 {
198      TRACE("idInst %ld hsz 0x%x\n",idInst,hsz);
199      return (BOOL)DdeFreeStringHandle(idInst, hsz);
200 }
201
202 /*****************************************************************
203  *            DdeFreeDataHandle   (DDEML.19)
204  */
205 BOOL16 WINAPI DdeFreeDataHandle16(HDDEDATA hData)
206 {
207      return (BOOL)DdeFreeDataHandle(hData);
208 }
209
210 /*****************************************************************
211  *            DdeKeepStringHandle   (DDEML.24)
212  */
213 BOOL16 WINAPI DdeKeepStringHandle16(DWORD idInst, HSZ hsz)
214 {
215      return (BOOL)DdeKeepStringHandle(idInst, hsz);
216 }
217
218 /*****************************************************************
219  *            DdeClientTransaction  (DDEML.11)
220  */
221 HDDEDATA WINAPI DdeClientTransaction16(LPVOID pData, DWORD cbData,
222                                        HCONV hConv, HSZ hszItem, UINT16 wFmt,
223                                        UINT16 wType, DWORD dwTimeout,
224                                        LPDWORD pdwResult)
225 {
226      return DdeClientTransaction((LPBYTE)pData, cbData, hConv, hszItem,
227                                  wFmt, wType, dwTimeout, pdwResult);
228 }
229
230 /*****************************************************************
231  *
232  *            DdeAbandonTransaction (DDEML.12)
233  *
234  */
235 BOOL16 WINAPI DdeAbandonTransaction16(DWORD idInst, HCONV hConv, 
236                                       DWORD idTransaction)
237 {
238      return DdeAbandonTransaction(idInst, hConv, idTransaction);
239 }
240
241 /*****************************************************************
242  * DdePostAdvise [DDEML.13]
243  */
244 BOOL16 WINAPI DdePostAdvise16(DWORD idInst, HSZ hszTopic, HSZ hszItem)
245 {
246      return (BOOL16)DdePostAdvise(idInst, hszTopic, hszItem);
247 }
248
249 /*****************************************************************
250  *            DdeAddData (DDEML.15)
251  */
252 HDDEDATA WINAPI DdeAddData16(HDDEDATA hData, LPBYTE pSrc, DWORD cb,
253                              DWORD cbOff)
254 {
255      return DdeAddData(hData, pSrc, cb, cbOff);
256 }
257
258 /*****************************************************************
259  * DdeGetData [DDEML.16]
260  */
261 DWORD WINAPI DdeGetData16(
262      HDDEDATA hData,
263      LPBYTE pDst,
264      DWORD cbMax, 
265      DWORD cbOff)
266 {
267      return DdeGetData(hData, pDst, cbMax, cbOff);
268 }
269
270 /*****************************************************************
271  *            DdeAccessData (DDEML.17)
272  */
273 LPBYTE WINAPI DdeAccessData16(HDDEDATA hData, LPDWORD pcbDataSize)
274 {
275     /* FIXME: there's a memory leak here... */
276     return (LPBYTE)MapLS(DdeAccessData(hData, pcbDataSize));
277 }
278
279 /*****************************************************************
280  *            DdeUnaccessData (DDEML.18)
281  */
282 BOOL16 WINAPI DdeUnaccessData16(HDDEDATA hData)
283 {
284     return DdeUnaccessData(hData);
285 }
286
287 /*****************************************************************
288  *            DdeEnableCallback (DDEML.26)
289  */
290 BOOL16 WINAPI DdeEnableCallback16(DWORD idInst, HCONV hConv, UINT16 wCmd)
291 {
292     return DdeEnableCallback(idInst, hConv, wCmd);
293 }
294
295 /*****************************************************************
296  *            DdeNameService  (DDEML.27)
297  */
298 HDDEDATA WINAPI DdeNameService16(DWORD idInst, HSZ hsz1, HSZ hsz2,
299                                  UINT16 afCmd)
300 {
301     return DdeNameService(idInst, hsz1, hsz2, afCmd);
302 }
303
304 /*****************************************************************
305  *            DdeGetLastError  (DDEML.20)
306  */
307 UINT16 WINAPI DdeGetLastError16(DWORD idInst)
308 {
309     return (UINT16)DdeGetLastError(idInst);
310 }
311
312 /*****************************************************************
313  *            DdeCmpStringHandles (DDEML.36)
314  */
315 INT16 WINAPI DdeCmpStringHandles16(HSZ hsz1, HSZ hsz2)
316 {
317     return DdeCmpStringHandles(hsz1, hsz2);
318 }
319
320 /******************************************************************
321  *              DdeQueryConvInfo (DDEML.9)
322  *
323  */
324 UINT16 WINAPI DdeQueryConvInfo16(HCONV hconv, DWORD idTransaction, LPCONVINFO16 lpConvInfo)
325 {
326      FIXME("stub.\n");
327      return 0;
328 }