Fix wide character functions to return character count in character
[wine] / misc / ddeml.c
1 /*
2  * DDEML library
3  *
4  * Copyright 1997 Alexandre Julliard
5  * Copyright 1997 Len White
6  */
7
8 /* Only empty stubs for now */
9
10 #include "ddeml.h"
11 #include "debug.h"
12 #include "atom.h"
13
14 /* FIXME: What are these values? */
15 #define DMLERR_NO_ERROR         0
16
17 static LONG     DDE_current_handle;
18
19
20 /******************************************************************************
21  *            DdeInitialize16   (DDEML.2)
22  */
23 UINT16 WINAPI DdeInitialize16( LPDWORD pidInst, PFNCALLBACK16 pfnCallback,
24                                DWORD afCmd, DWORD ulRes)
25 {
26     return (UINT16)DdeInitialize32A(pidInst,(PFNCALLBACK32)pfnCallback,
27                                     afCmd, ulRes);
28 }
29
30
31 /******************************************************************************
32  *            DdeInitialize32A   (USER32.106)
33  */
34 UINT32 WINAPI DdeInitialize32A( LPDWORD pidInst, PFNCALLBACK32 pfnCallback,
35                                 DWORD afCmd, DWORD ulRes )
36 {
37     return DdeInitialize32W(pidInst,pfnCallback,afCmd,ulRes);
38 }
39
40
41 /******************************************************************************
42  * DdeInitialize32W [USER32.107]
43  * Registers an application with the DDEML
44  *
45  * PARAMS
46  *    pidInst     [I] Pointer to instance identifier
47  *    pfnCallback [I] Pointer to callback function
48  *    afCmd       [I] Set of command and filter flags
49  *    ulRes       [I] Reserved
50  *
51  * RETURNS
52  *    Success: DMLERR_NO_ERROR
53  *    Failure: DMLERR_DLL_USAGE, DMLERR_INVALIDPARAMETER, DMLERR_SYS_ERROR
54  */
55 UINT32 WINAPI DdeInitialize32W( LPDWORD pidInst, PFNCALLBACK32 pfnCallback,
56                                 DWORD afCmd, DWORD ulRes )
57 {
58     FIXME(ddeml, "(%p,%p,0x%lx,%ld): stub\n",pidInst,pfnCallback,afCmd,ulRes);
59
60     if(pidInst)
61       *pidInst = 0;
62
63     if( ulRes )
64         ERR(dde, "Reserved value not zero?  What does this mean?\n");
65
66     return DMLERR_NO_ERROR;
67 }
68
69
70 /*****************************************************************
71  *            DdeUninitialize16   (DDEML.3)
72  */
73 BOOL16 WINAPI DdeUninitialize16( DWORD idInst )
74 {
75     return (BOOL16)DdeUninitialize32( idInst );
76 }
77
78
79 /*****************************************************************
80  * DdeUninitialize32 [USER32.119]  Frees DDEML resources
81  *
82  * PARAMS
83  *    idInst [I] Instance identifier
84  *
85  * RETURNS
86  *    Success: TRUE
87  *    Failure: FALSE
88  */
89 BOOL32 WINAPI DdeUninitialize32( DWORD idInst )
90 {
91     FIXME(ddeml, "(%ld): stub\n", idInst);
92     return TRUE;
93 }
94
95
96 /*****************************************************************
97  * DdeConnectList16 [DDEML.4]
98  */
99 HCONVLIST WINAPI DdeConnectList16( DWORD idInst, HSZ hszService, HSZ hszTopic,
100                  HCONVLIST hConvList, LPCONVCONTEXT16 pCC )
101 {
102     return DdeConnectList32(idInst, hszService, hszTopic, hConvList, 
103                             (LPCONVCONTEXT32)pCC);
104 }
105
106
107 /******************************************************************************
108  * DdeConnectList32 [USER32.93]  Establishes conversation with DDE servers
109  *
110  * PARAMS
111  *    idInst     [I] Instance identifier
112  *    hszService [I] Handle to service name string
113  *    hszTopic   [I] Handle to topic name string
114  *    hConvList  [I] Handle to conversation list
115  *    pCC        [I] Pointer to structure with context data
116  *
117  * RETURNS
118  *    Success: Handle to new conversation list
119  *    Failure: 0
120  */
121 HCONVLIST WINAPI DdeConnectList32( DWORD idInst, HSZ hszService, HSZ hszTopic,
122                  HCONVLIST hConvList, LPCONVCONTEXT32 pCC )
123 {
124     FIXME(ddeml, "(%ld,%ld,%ld,%ld,%p): stub\n", idInst, hszService, hszTopic,
125           hConvList,pCC);
126     return 1;
127 }
128
129
130 /*****************************************************************
131  * DdeQueryNextServer16 [DDEML.5]
132  */
133 HCONV WINAPI DdeQueryNextServer16( HCONVLIST hConvList, HCONV hConvPrev )
134 {
135     return DdeQueryNextServer32(hConvList, hConvPrev);
136 }
137
138
139 /*****************************************************************
140  * DdeQueryNextServer32 [USER32.112]
141  */
142 HCONV WINAPI DdeQueryNextServer32( HCONVLIST hConvList, HCONV hConvPrev )
143 {
144     FIXME(ddeml, "(%ld,%ld): stub\n",hConvList,hConvPrev);
145     return 0;
146 }
147
148
149 /*****************************************************************
150  *            DdeDisconnectList (DDEML.6)
151  */
152 BOOL16 WINAPI DdeDisconnectList16( HCONVLIST hConvList )
153 {
154     return (BOOL16)DdeDisconnectList32(hConvList);
155 }
156
157
158 /******************************************************************************
159  * DdeDisconnectList32 [USER32.98]  Destroys list and terminates conversations
160  *
161  * RETURNS
162  *    Success: TRUE
163  *    Failure: FALSE
164  */
165 BOOL32 WINAPI DdeDisconnectList32(
166     HCONVLIST hConvList) /* [in] Handle to conversation list */
167 {
168     FIXME(ddeml, "(%ld): stub\n", hConvList);
169     return TRUE;
170 }
171
172
173 /*****************************************************************
174  *            DdeConnect16   (DDEML.7)
175  */
176 HCONV WINAPI DdeConnect16( DWORD idInst, HSZ hszService, HSZ hszTopic,
177                            LPCONVCONTEXT16 pCC )
178 {
179     FIXME( ddeml, "empty stub\n" );
180     return 0;
181 }
182
183
184 /*****************************************************************
185  *            DdeConnect32   (USER32.92)
186  */
187 HCONV WINAPI DdeConnect32( DWORD idInst, HSZ hszService, HSZ hszTopic,
188                            LPCONVCONTEXT32 pCC )
189 {
190     FIXME(ddeml, "(0x%lx,%ld,%ld,%p): stub\n",idInst,hszService,hszTopic,
191           pCC);
192     return 0;
193 }
194
195
196 /*****************************************************************
197  *            DdeDisconnect16   (DDEML.8)
198  */
199 BOOL16 WINAPI DdeDisconnect16( HCONV hConv )
200 {
201     return (BOOL16)DdeDisconnect32( hConv );
202 }
203
204 /*****************************************************************
205  *            DdeSetUserHandle (DDEML.10)
206  */
207 BOOL16 WINAPI DdeSetUserHandle( HCONV hConv, DWORD id, DWORD hUser )
208 {
209     FIXME( ddeml, "(%ld,%ld,%ld): stub\n",hConv,id, hUser );
210     return 0;
211 }
212
213 /*****************************************************************
214  *            DdeCreateDataHandle (DDEML.14)
215  */
216 HDDEDATA WINAPI DdeCreateDataHandle( DWORD idInst, LPBYTE pSrc, DWORD cb, 
217                                      DWORD cbOff, HSZ hszItem, UINT16 wFmt, 
218                                      UINT16 afCmd )
219 {
220     FIXME( ddeml, "(%ld,%p,%ld,%ld,%ld,%d,%d): stub\n",idInst,pSrc,cb,cbOff,
221            hszItem, wFmt, afCmd );
222     return 0;
223 }
224
225 /*****************************************************************
226  *            DdeDisconnect32   (USER32.97)
227  */
228 BOOL32 WINAPI DdeDisconnect32( HCONV hConv )
229 {
230     FIXME( ddeml, "empty stub\n" );
231     return 0;
232 }
233
234
235 /*****************************************************************
236  *            DdeReconnect   (DDEML.37) (USER32.115)
237  */
238 HCONV WINAPI DdeReconnect( HCONV hConv )
239 {
240     FIXME( ddeml, "empty stub\n" );
241     return 0;
242 }
243
244
245 /*****************************************************************
246  *            DdeCreateStringHandle16   (DDEML.21)
247  */
248 HSZ WINAPI DdeCreateStringHandle16( DWORD idInst, LPCSTR str, INT16 codepage )
249 {
250     return DdeCreateStringHandle32A( idInst, str, codepage );
251 }
252
253
254 /*****************************************************************
255  * DdeCreateStringHandle32A [USER32.95]
256  *
257  * RETURNS
258  *    Success: String handle
259  *    Failure: 0
260  */
261 HSZ WINAPI DdeCreateStringHandle32A( DWORD idInst, LPCSTR psz, INT32 codepage )
262 { TRACE(ddeml, "(%ld,%s,%d): stub\n",idInst,debugstr_a(psz),codepage);
263   
264   if (codepage==1004)  /*fixme: should be CP_WINANSI*/
265     return GlobalAddAtom32A (psz);
266   else
267     return 0;  
268 }
269
270
271 /******************************************************************************
272  * DdeCreateStringHandle32W [USER32.96]  Creates handle to identify string
273  *
274  * RETURNS
275  *    Success: String handle
276  *    Failure: 0
277  */
278 HSZ WINAPI DdeCreateStringHandle32W(
279     DWORD idInst,   /* [in] Instance identifier */
280     LPCWSTR psz,    /* [in] Pointer to string */
281     INT32 codepage) /* [in] Code page identifier */
282 {
283     FIXME(ddeml, "(%ld,%s,%d): stub\n",idInst,debugstr_w(psz),codepage);
284     DDE_current_handle++;
285     return DDE_current_handle;
286 }
287
288
289 /*****************************************************************
290  *            DdeFreeStringHandle16   (DDEML.22)
291  */
292 BOOL16 WINAPI DdeFreeStringHandle16( DWORD idInst, HSZ hsz )
293 {
294     return (BOOL32)DdeFreeStringHandle32( idInst, hsz );
295 }
296
297
298 /*****************************************************************
299  *            DdeFreeStringHandle32   (USER32.101)
300  * RETURNS: success: nonzero
301  *          fail:    zero
302  */
303 BOOL32 WINAPI DdeFreeStringHandle32( DWORD idInst, HSZ hsz )
304 {   TRACE( ddeml, "(%ld,%ld): stub\n",idInst, hsz );
305     return GlobalDeleteAtom (hsz) ? hsz : 0;
306 }
307
308
309 /*****************************************************************
310  *            DdeFreeDataHandle16   (DDEML.19)
311  */
312 BOOL16 WINAPI DdeFreeDataHandle16( HDDEDATA hData )
313 {
314     return (BOOL32)DdeFreeDataHandle32( hData );
315 }
316
317
318 /*****************************************************************
319  *            DdeFreeDataHandle32   (USER32.100)
320  */
321 BOOL32 WINAPI DdeFreeDataHandle32( HDDEDATA hData )
322 {
323     FIXME( ddeml, "empty stub\n" );
324     return TRUE;
325 }
326
327
328 /*****************************************************************
329  *            DdeKeepStringHandle16   (DDEML.24)
330  */
331 BOOL16 WINAPI DdeKeepStringHandle16( DWORD idInst, HSZ hsz )
332 {
333     return (BOOL32)DdeKeepStringHandle32( idInst, hsz );
334 }
335
336
337 /*****************************************************************
338  *            DdeKeepStringHandle32  (USER32.108)
339  */
340 BOOL32 WINAPI DdeKeepStringHandle32( DWORD idInst, HSZ hsz )
341 {
342     FIXME( ddeml, "empty stub\n" );
343     return TRUE;
344 }
345
346
347 /*****************************************************************
348  *            DdeClientTransaction16  (DDEML.11)
349  */
350 HDDEDATA WINAPI DdeClientTransaction16( LPVOID pData, DWORD cbData,
351                                         HCONV hConv, HSZ hszItem, UINT16 wFmt,
352                                         UINT16 wType, DWORD dwTimeout,
353                                         LPDWORD pdwResult )
354 {
355     return DdeClientTransaction32( (LPBYTE)pData, cbData, hConv, hszItem,
356                                    wFmt, wType, dwTimeout, pdwResult );
357 }
358
359
360 /*****************************************************************
361  *            DdeClientTransaction32  (USER32.90)
362  */
363 HDDEDATA WINAPI DdeClientTransaction32( LPBYTE pData, DWORD cbData,
364                                         HCONV hConv, HSZ hszItem, UINT32 wFmt,
365                                         UINT32 wType, DWORD dwTimeout,
366                                         LPDWORD pdwResult )
367 {
368     FIXME( ddeml, "empty stub\n" );
369     return 0;
370 }
371
372 /*****************************************************************
373  *            DdeAbandonTransaction (DDEML.12)
374  */
375 BOOL16 WINAPI DdeAbandonTransaction( DWORD idInst, HCONV hConv, 
376                                      DWORD idTransaction )
377 {
378     FIXME( ddeml, "empty stub\n" );
379     return 0;
380 }
381
382
383 /*****************************************************************
384  * DdePostAdvise16 [DDEML.13]
385  */
386 BOOL16 WINAPI DdePostAdvise16( DWORD idInst, HSZ hszTopic, HSZ hszItem )
387 {
388     return (BOOL16)DdePostAdvise32(idInst, hszTopic, hszItem);
389 }
390
391
392 /******************************************************************************
393  * DdePostAdvise32 [USER32.110]  Send transaction to DDE callback function.
394  *
395  * RETURNS
396  *    Success: TRUE
397  *    Failure: FALSE
398  */
399 BOOL32 WINAPI DdePostAdvise32(
400     DWORD idInst, /* [in] Instance identifier */
401     HSZ hszTopic, /* [in] Handle to topic name string */
402     HSZ hszItem)  /* [in] Handle to item name string */
403 {
404     FIXME(ddeml, "(%ld,%ld,%ld): stub\n",idInst,hszTopic,hszItem);
405     return TRUE;
406 }
407
408
409 /*****************************************************************
410  *            DdeAddData (DDEML.15)
411  */
412 HDDEDATA WINAPI DdeAddData( HDDEDATA hData, LPBYTE pSrc, DWORD cb,
413                             DWORD cbOff )
414 {
415     FIXME( ddeml, "empty stub\n" );
416     return 0;
417 }
418
419
420 /******************************************************************************
421  * DdeGetData32 [USER32.102]  Copies data from DDE object ot local buffer
422  *
423  * RETURNS
424  *    Size of memory object associated with handle
425  */
426 DWORD WINAPI DdeGetData32(
427     HDDEDATA hData, /* [in] Handle to DDE object */
428     LPBYTE pDst,    /* [in] Pointer to destination buffer */
429     DWORD cbMax,    /* [in] Amount of data to copy */
430     DWORD cbOff)    /* [in] Offset to beginning of data */
431 {
432     FIXME(ddeml, "(%ld,%p,%ld,%ld): stub\n",hData,pDst,cbMax,cbOff);
433     return cbMax;
434 }
435
436
437 /*****************************************************************
438  * DdeGetData16 [DDEML.16]
439  */
440 DWORD WINAPI DdeGetData16(
441     HDDEDATA hData,
442     LPBYTE pDst,
443     DWORD cbMax, 
444     DWORD cbOff)
445 {
446     return DdeGetData32(hData, pDst, cbMax, cbOff);
447 }
448
449
450 /*****************************************************************
451  *            DdeAccessData (DDEML.17)
452  */
453 LPBYTE WINAPI DdeAccessData( HDDEDATA hData, LPDWORD pcbDataSize )
454 {
455      FIXME( ddeml, "empty stub\n" );
456      return 0;
457 }
458
459 /*****************************************************************
460  *            DdeUnaccessData (DDEML.18)
461  */
462 BOOL16 WINAPI DdeUnaccessData( HDDEDATA hData )
463 {
464      FIXME( ddeml, "empty stub\n" );
465      return 0;
466 }
467
468 /*****************************************************************
469  *            DdeEnableCallback (DDEML.26)
470  */
471 BOOL16 WINAPI DdeEnableCallback( DWORD idInst, HCONV hConv, UINT16 wCmd )
472 {
473      FIXME( ddeml, "empty stub\n" );
474      return 0;
475 }
476
477 /*****************************************************************
478  *            DdeNameService16  (DDEML.27)
479  */
480 HDDEDATA WINAPI DdeNameService16( DWORD idInst, HSZ hsz1, HSZ hsz2,
481                                   UINT16 afCmd )
482 {
483     return DdeNameService32( idInst, hsz1, hsz2, afCmd );
484 }
485
486
487 /******************************************************************************
488  * DdeNameService32 [USER32.109]  {Un}registers service name of DDE server
489  *
490  * PARAMS
491  *    idInst [I] Instance identifier
492  *    hsz1   [I] Handle to service name string
493  *    hsz2   [I] Reserved
494  *    afCmd  [I] Service name flags
495  *
496  * RETURNS
497  *    Success: Non-zero
498  *    Failure: 0
499  */
500 HDDEDATA WINAPI DdeNameService32( DWORD idInst, HSZ hsz1, HSZ hsz2,
501                 UINT32 afCmd )
502 {
503     FIXME(ddeml, "(%ld,%ld,%ld,%d): stub\n",idInst,hsz1,hsz2,afCmd);
504     return 1;
505 }
506
507
508 /*****************************************************************
509  *            DdeGetLastError16  (DDEML.20)
510  */
511 UINT16 WINAPI DdeGetLastError16( DWORD idInst )
512 {
513     return (UINT16)DdeGetLastError32( idInst );
514 }
515
516
517 /******************************************************************************
518  * DdeGetLastError32 [USER32.103]  Gets most recent error code
519  *
520  * PARAMS
521  *    idInst [I] Instance identifier
522  *
523  * RETURNS
524  *    Last error code
525  */
526 UINT32 WINAPI DdeGetLastError32( DWORD idInst )
527 {
528     FIXME(ddeml, "(%ld): stub\n",idInst);
529     return 0;
530 }
531
532
533 /*****************************************************************
534  *            DdeCmpStringHandles (DDEML.36)
535  */
536 int WINAPI DdeCmpStringHandles( HSZ hsz1, HSZ hsz2 )
537 {
538      FIXME( ddeml, "empty stub\n" );
539      return 0;
540 }
541
542
543 /*****************************************************************
544  *            PackDDElParam (USER32.414)
545  *
546  * RETURNS
547  *   success: nonzero
548  *   failure: zero
549  */
550 UINT32 WINAPI PackDDElParam32(UINT32 msg, UINT32 uiLo, UINT32 uiHi)
551 {
552     FIXME(ddeml, "stub.\n");
553     return 0;
554 }
555
556
557 /*****************************************************************
558  *            UnpackDDElParam (USER32.562)
559  *
560  * RETURNS
561  *   success: nonzero
562  *   failure: zero
563  */
564 UINT32 WINAPI UnpackDDElParam32(UINT32 msg, UINT32 lParam,
565                                 UINT32 *uiLo, UINT32 *uiHi)
566 {
567     FIXME(ddeml, "stub.\n");
568     return 0;
569 }
570
571
572 /*****************************************************************
573  *            FreeDDElParam (USER32.204)
574  *
575  * RETURNS
576  *   success: nonzero
577  *   failure: zero
578  */
579 UINT32 WINAPI FreeDDElParam32(UINT32 msg, UINT32 lParam)
580 {
581     FIXME(ddeml, "stub.\n");
582     return 0;
583 }