329 lines
8.8 KiB
C
329 lines
8.8 KiB
C
/* -*- tab-width: 8; c-basic-offset: 8 -*- */
|
|
|
|
/*
|
|
* DDEML library
|
|
*
|
|
* Copyright 1997 Alexandre Julliard
|
|
* Copyright 1997 Len White
|
|
* Copyright 1999 Keith Matthews
|
|
* Copyright 2000 Corel
|
|
* Copyright 2001 Eric Pouech
|
|
*/
|
|
|
|
#include <string.h>
|
|
#include "winbase.h"
|
|
#include "windef.h"
|
|
#include "wine/windef16.h"
|
|
#include "wingdi.h"
|
|
#include "winuser.h"
|
|
#include "winerror.h"
|
|
#include "dde.h"
|
|
#include "ddeml.h"
|
|
#include "dde/dde_private.h"
|
|
#include "debugtools.h"
|
|
|
|
DEFAULT_DEBUG_CHANNEL(ddeml);
|
|
|
|
|
|
typedef HDDEDATA CALLBACK (*PFNCALLBACK16)(UINT16,UINT16,HCONV,HSZ,HSZ,HDDEDATA,DWORD,DWORD);
|
|
|
|
typedef struct
|
|
{
|
|
UINT16 cb;
|
|
UINT16 wFlags;
|
|
UINT16 wCountryID;
|
|
INT16 iCodePage;
|
|
DWORD dwLangID;
|
|
DWORD dwSecurity;
|
|
} CONVCONTEXT16, *LPCONVCONTEXT16;
|
|
|
|
typedef struct
|
|
{
|
|
DWORD cb;
|
|
DWORD hUser;
|
|
HCONV hConvPartner;
|
|
HSZ hszSvcPartner;
|
|
HSZ hszServiceReq;
|
|
HSZ hszTopic;
|
|
HSZ hszItem;
|
|
UINT16 wFmt;
|
|
UINT16 wType;
|
|
UINT16 wStatus;
|
|
UINT16 wConvst;
|
|
UINT16 wLastError;
|
|
HCONVLIST hConvList;
|
|
CONVCONTEXT16 ConvCtxt;
|
|
} CONVINFO16, *LPCONVINFO16;
|
|
|
|
/* ### start build ### */
|
|
extern LONG CALLBACK WDML_CallTo16_long_llllllll (FARPROC16,LONG,LONG,LONG,LONG,LONG,LONG,LONG,LONG);
|
|
/* ### stop build ### */
|
|
|
|
/******************************************************************
|
|
* WDML_InvokeCallback16
|
|
*
|
|
*
|
|
*/
|
|
HDDEDATA WDML_InvokeCallback16(PFNCALLBACK pfn, UINT uType, UINT uFmt, HCONV hConv,
|
|
HSZ hsz1, HSZ hsz2, HDDEDATA hdata,
|
|
DWORD dwData1, DWORD dwData2)
|
|
{
|
|
return WDML_CallTo16_long_llllllll((FARPROC16)pfn, uType, uFmt, hConv,
|
|
hsz1, hsz2, hdata, dwData1, dwData2);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* DdeInitialize (DDEML.2)
|
|
*/
|
|
UINT16 WINAPI DdeInitialize16(LPDWORD pidInst, PFNCALLBACK16 pfnCallback,
|
|
DWORD afCmd, DWORD ulRes)
|
|
{
|
|
return WDML_Initialize(pidInst, (PFNCALLBACK)pfnCallback, afCmd, ulRes, FALSE, TRUE);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeUninitialize (DDEML.3)
|
|
*/
|
|
BOOL16 WINAPI DdeUninitialize16(DWORD idInst)
|
|
{
|
|
FIXME(" stub calling DdeUninitialize\n");
|
|
return (BOOL16)DdeUninitialize(idInst);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeConnectList [DDEML.4]
|
|
*/
|
|
|
|
HCONVLIST WINAPI DdeConnectList16(DWORD idInst, HSZ hszService, HSZ hszTopic,
|
|
HCONVLIST hConvList, LPCONVCONTEXT16 pCC)
|
|
{
|
|
return DdeConnectList(idInst, hszService, hszTopic, hConvList,
|
|
(LPCONVCONTEXT)pCC);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeQueryNextServer [DDEML.5]
|
|
*/
|
|
HCONV WINAPI DdeQueryNextServer16(HCONVLIST hConvList, HCONV hConvPrev)
|
|
{
|
|
return DdeQueryNextServer(hConvList, hConvPrev);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeDisconnectList (DDEML.6)
|
|
*/
|
|
BOOL16 WINAPI DdeDisconnectList16(HCONVLIST hConvList)
|
|
{
|
|
return (BOOL16)DdeDisconnectList(hConvList);
|
|
}
|
|
|
|
|
|
/*****************************************************************
|
|
* DdeQueryString (DDEML.23)
|
|
*/
|
|
DWORD WINAPI DdeQueryString16(DWORD idInst, HSZ hsz, LPSTR lpsz, DWORD cchMax, INT16 codepage)
|
|
{
|
|
FIXME("(%ld, 0x%x, %p, %ld, %d): stub \n",
|
|
idInst, hsz, lpsz, cchMax, codepage);
|
|
return 0;
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeConnect (DDEML.7)
|
|
*/
|
|
HCONV WINAPI DdeConnect16(DWORD idInst, HSZ hszService, HSZ hszTopic,
|
|
LPCONVCONTEXT16 pCC16)
|
|
{
|
|
CONVCONTEXT cc;
|
|
CONVCONTEXT* pCC = NULL;
|
|
|
|
if (pCC16) {
|
|
pCC = &cc;
|
|
cc.cb = sizeof(cc);
|
|
cc.wFlags = pCC16->wFlags;
|
|
cc.iCodePage = pCC16->iCodePage;
|
|
cc.dwLangID = pCC16->dwLangID;
|
|
cc.dwSecurity = pCC16->dwSecurity;
|
|
}
|
|
return DdeConnect(idInst, hszService, hszTopic, pCC);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeDisconnect (DDEML.8)
|
|
*/
|
|
BOOL16 WINAPI DdeDisconnect16(HCONV hConv)
|
|
{
|
|
return (BOOL16)DdeDisconnect(hConv);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeSetUserHandle (DDEML.10)
|
|
*/
|
|
BOOL16 WINAPI DdeSetUserHandle16(HCONV hConv, DWORD id, DWORD hUser)
|
|
{
|
|
return DdeSetUserHandle(hConv, id, hUser);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeCreateDataHandle (DDEML.14)
|
|
*/
|
|
HDDEDATA WINAPI DdeCreateDataHandle16(DWORD idInst, LPBYTE pSrc, DWORD cb,
|
|
DWORD cbOff, HSZ hszItem, UINT16 wFmt,
|
|
UINT16 afCmd)
|
|
{
|
|
return DdeCreateDataHandle(idInst, pSrc, cb, cbOff, hszItem, wFmt, afCmd);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeCreateStringHandle (DDEML.21)
|
|
*/
|
|
HSZ WINAPI DdeCreateStringHandle16(DWORD idInst, LPCSTR str, INT16 codepage)
|
|
{
|
|
if (codepage)
|
|
{
|
|
return DdeCreateStringHandleA(idInst, str, codepage);
|
|
}
|
|
else
|
|
{
|
|
TRACE("Default codepage supplied\n");
|
|
return DdeCreateStringHandleA(idInst, str, CP_WINANSI);
|
|
}
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeFreeStringHandle (DDEML.22)
|
|
*/
|
|
BOOL16 WINAPI DdeFreeStringHandle16(DWORD idInst, HSZ hsz)
|
|
{
|
|
TRACE("idInst %ld hsz 0x%x\n",idInst,hsz);
|
|
return (BOOL)DdeFreeStringHandle(idInst, hsz);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeFreeDataHandle (DDEML.19)
|
|
*/
|
|
BOOL16 WINAPI DdeFreeDataHandle16(HDDEDATA hData)
|
|
{
|
|
return (BOOL)DdeFreeDataHandle(hData);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeKeepStringHandle (DDEML.24)
|
|
*/
|
|
BOOL16 WINAPI DdeKeepStringHandle16(DWORD idInst, HSZ hsz)
|
|
{
|
|
return (BOOL)DdeKeepStringHandle(idInst, hsz);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeClientTransaction (DDEML.11)
|
|
*/
|
|
HDDEDATA WINAPI DdeClientTransaction16(LPVOID pData, DWORD cbData,
|
|
HCONV hConv, HSZ hszItem, UINT16 wFmt,
|
|
UINT16 wType, DWORD dwTimeout,
|
|
LPDWORD pdwResult)
|
|
{
|
|
return DdeClientTransaction((LPBYTE)pData, cbData, hConv, hszItem,
|
|
wFmt, wType, dwTimeout, pdwResult);
|
|
}
|
|
|
|
/*****************************************************************
|
|
*
|
|
* DdeAbandonTransaction (DDEML.12)
|
|
*
|
|
*/
|
|
BOOL16 WINAPI DdeAbandonTransaction16(DWORD idInst, HCONV hConv,
|
|
DWORD idTransaction)
|
|
{
|
|
return DdeAbandonTransaction(idInst, hConv, idTransaction);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdePostAdvise [DDEML.13]
|
|
*/
|
|
BOOL16 WINAPI DdePostAdvise16(DWORD idInst, HSZ hszTopic, HSZ hszItem)
|
|
{
|
|
return (BOOL16)DdePostAdvise(idInst, hszTopic, hszItem);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeAddData (DDEML.15)
|
|
*/
|
|
HDDEDATA WINAPI DdeAddData16(HDDEDATA hData, LPBYTE pSrc, DWORD cb,
|
|
DWORD cbOff)
|
|
{
|
|
return DdeAddData(hData, pSrc, cb, cbOff);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeGetData [DDEML.16]
|
|
*/
|
|
DWORD WINAPI DdeGetData16(
|
|
HDDEDATA hData,
|
|
LPBYTE pDst,
|
|
DWORD cbMax,
|
|
DWORD cbOff)
|
|
{
|
|
return DdeGetData(hData, pDst, cbMax, cbOff);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeAccessData (DDEML.17)
|
|
*/
|
|
LPBYTE WINAPI DdeAccessData16(HDDEDATA hData, LPDWORD pcbDataSize)
|
|
{
|
|
/* FIXME: there's a memory leak here... */
|
|
return (LPBYTE)MapLS(DdeAccessData(hData, pcbDataSize));
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeUnaccessData (DDEML.18)
|
|
*/
|
|
BOOL16 WINAPI DdeUnaccessData16(HDDEDATA hData)
|
|
{
|
|
return DdeUnaccessData(hData);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeEnableCallback (DDEML.26)
|
|
*/
|
|
BOOL16 WINAPI DdeEnableCallback16(DWORD idInst, HCONV hConv, UINT16 wCmd)
|
|
{
|
|
return DdeEnableCallback(idInst, hConv, wCmd);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeNameService (DDEML.27)
|
|
*/
|
|
HDDEDATA WINAPI DdeNameService16(DWORD idInst, HSZ hsz1, HSZ hsz2,
|
|
UINT16 afCmd)
|
|
{
|
|
return DdeNameService(idInst, hsz1, hsz2, afCmd);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeGetLastError (DDEML.20)
|
|
*/
|
|
UINT16 WINAPI DdeGetLastError16(DWORD idInst)
|
|
{
|
|
return (UINT16)DdeGetLastError(idInst);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* DdeCmpStringHandles (DDEML.36)
|
|
*/
|
|
INT16 WINAPI DdeCmpStringHandles16(HSZ hsz1, HSZ hsz2)
|
|
{
|
|
return DdeCmpStringHandles(hsz1, hsz2);
|
|
}
|
|
|
|
/******************************************************************
|
|
* DdeQueryConvInfo (DDEML.9)
|
|
*
|
|
*/
|
|
UINT16 WINAPI DdeQueryConvInfo16(HCONV hconv, DWORD idTransaction, LPCONVINFO16 lpConvInfo)
|
|
{
|
|
FIXME("stub.\n");
|
|
return 0;
|
|
}
|