ddeml.h 14.3 KB
Newer Older
Alexandre Julliard's avatar
Alexandre Julliard committed
1 2 3 4
/*
 * DDEML library definitions
 *
 * Copyright 1997 Alexandre Julliard
Alexandre Julliard's avatar
Alexandre Julliard committed
5
 * Copyright 1997 Len White
6 7 8 9 10 11 12 13 14 15 16 17 18
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
Alexandre Julliard's avatar
Alexandre Julliard committed
20 21
 */

22 23
#ifndef __WINE_DDEML_H
#define __WINE_DDEML_H
Alexandre Julliard's avatar
Alexandre Julliard committed
24

25 26 27 28
#ifdef __cplusplus
extern "C" {
#endif /* defined(__cplusplus) */

29 30 31 32 33 34
#ifdef _USER32_
#define WINUSERAPI
#else
#define WINUSERAPI DECLSPEC_IMPORT
#endif

35 36
/* Codepage Constants
 */
37

38 39 40
#define CP_WINANSI      1004
#define CP_WINUNICODE   1200

41
/* DDE synchronisation constants
42 43
 */

44
#define MSGF_DDEMGR 0x8001
45 46 47 48 49 50 51 52

#define QID_SYNC	0xFFFFFFFF

/*   Type variation for MS  deliberate departures from ANSI standards
 */

#define EXPENTRY CALLBACK

53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
#ifdef UNICODE
#if defined(_MSC_VER)
#define SZDDESYS_TOPIC          L"System"
#define SZDDESYS_ITEM_TOPICS    L"Topics"
#define SZDDESYS_ITEM_SYSITEMS  L"SysItems"
#define SZDDESYS_ITEM_RTNMSG    L"ReturnMessage"
#define SZDDESYS_ITEM_STATUS    L"Status"
#define SZDDESYS_ITEM_FORMATS   L"Formats"
#define SZDDESYS_ITEM_HELP      L"Help"
#define SZDDE_ITEM_ITEMLIST     L"TopicItemList"
#elif defined(__GNUC__)
#define SZDDESYS_TOPIC          (const WCHAR []){'S','y','s','t','e','m',0}
#define SZDDESYS_ITEM_TOPICS    (const WCHAR []){'T','o','p','i','c','s',0}
#define SZDDESYS_ITEM_SYSITEMS  (const WCHAR []){'S','y','s','I','t','e','m','s',0}
#define SZDDESYS_ITEM_RTNMSG    (const WCHAR []){'R','e','t','u','r','n','M','e','s','s','a','g','e',0}
#define SZDDESYS_ITEM_STATUS    (const WCHAR []){'S','t','a','t','u','s',0}
#define SZDDESYS_ITEM_FORMATS   (const WCHAR []){'F','o','r','m','a','t','s',0}
#define SZDDESYS_ITEM_HELP      (const WCHAR []){'H','e','l','p',0}
#define SZDDE_ITEM_ITEMLIST     (const WCHAR []){'T','o','p','i','c','I','t','e','m','L','i','s','t',0}
#else /* _MSC_VER/__GNUC__ */
static const WCHAR SZDDESYS_TOPIC[] = {'S','y','s','t','e','m',0};
static const WCHAR SZDDESYS_ITEM_TOPICS[] = {'T','o','p','i','c','s',0};
static const WCHAR SZDDESYS_ITEM_SYSITEMS[] = {'S','y','s','I','t','e','m','s',0};
static const WCHAR SZDDESYS_ITEM_RTNMSG[] = {'R','e','t','u','r','n','M','e','s','s','a','g','e',0};
static const WCHAR SZDDESYS_ITEM_STATUS[] = {'S','t','a','t','u','s',0};
static const WCHAR SZDDESYS_ITEM_FORMATS[] = {'F','o','r','m','a','t','s',0};
static const WCHAR SZDDESYS_ITEM_HELP[] = {'H','e','l','p',0};
static const WCHAR SZDDE_ITEM_ITEMLIST[] = {'T','o','p','i','c','I','t','e','m','L','i','s','t',0};
#endif
#else /* UNICODE */
#define SZDDESYS_TOPIC          "System"
#define SZDDESYS_ITEM_TOPICS    "Topics"
#define SZDDESYS_ITEM_SYSITEMS  "SysItems"
#define SZDDESYS_ITEM_RTNMSG    "ReturnMessage"
#define SZDDESYS_ITEM_STATUS    "Status"
#define SZDDESYS_ITEM_FORMATS   "Formats"
#define SZDDESYS_ITEM_HELP      "Help"
#define SZDDE_ITEM_ITEMLIST     "TopicItemList"
#endif
92

93 94 95 96 97 98
/***************************************************

      FLAGS Section - copied from Microsoft SDK as must be standard, probably Copyright Microsoft Corporation

***************************************************/

99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
#define     XST_NULL              0
#define     XST_INCOMPLETE        1
#define     XST_CONNECTED         2
#define     XST_INIT1             3
#define     XST_INIT2             4
#define     XST_REQSENT           5
#define     XST_DATARCVD          6
#define     XST_POKESENT          7
#define     XST_POKEACKRCVD       8
#define     XST_EXECSENT          9
#define     XST_EXECACKRCVD      10
#define     XST_ADVSENT          11
#define     XST_UNADVSENT        12
#define     XST_ADVACKRCVD       13
#define     XST_UNADVACKRCVD     14
#define     XST_ADVDATASENT      15
#define     XST_ADVDATAACKRCVD   16

#define     ST_CONNECTED            0x0001
#define     ST_ADVISE               0x0002
#define     ST_ISLOCAL              0x0004
#define     ST_BLOCKED              0x0008
#define     ST_CLIENT               0x0010
#define     ST_TERMINATED           0x0020
#define     ST_INLIST               0x0040
#define     ST_BLOCKNEXT            0x0080
#define     ST_ISSELF               0x0100

127 128 129 130 131 132 133 134 135
/*
 * DdeEnableCallback function codes
 */

#define     EC_ENABLEALL                 0
#define     EC_ENABLEONE                 ST_BLOCKNEXT
#define     EC_DISABLE                   ST_BLOCKED
#define     EC_QUERYWAITING              2

136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
/*
 * Callback filter flags for use with standard apps.
 */

#define     CBF_FAIL_SELFCONNECTIONS     0x00001000
#define     CBF_FAIL_CONNECTIONS         0x00002000
#define     CBF_FAIL_ADVISES             0x00004000
#define     CBF_FAIL_EXECUTES            0x00008000
#define     CBF_FAIL_POKES               0x00010000
#define     CBF_FAIL_REQUESTS            0x00020000
#define     CBF_FAIL_ALLSVRXACTIONS      0x0003f000

#define     CBF_SKIP_CONNECT_CONFIRMS    0x00040000
#define     CBF_SKIP_REGISTRATIONS       0x00080000
#define     CBF_SKIP_UNREGISTRATIONS     0x00100000
#define     CBF_SKIP_DISCONNECTS         0x00200000
#define     CBF_SKIP_ALLNOTIFICATIONS    0x003c0000

154
#define     CBR_BLOCK                    ((HDDEDATA)-1)
155

156 157 158
/*
 * Application command flags
 */
159 160 161
#define     APPCMD_CLIENTONLY            __MSABI_LONG(0x00000010)
#define     APPCMD_FILTERINITS           __MSABI_LONG(0x00000020)
#define     APPCMD_MASK                  __MSABI_LONG(0x00000FF0)
162 163 164 165 166

/*
 * Application classification flags
 */

167 168 169
#define     APPCLASS_STANDARD            __MSABI_LONG(0x00000000)
#define     APPCLASS_MONITOR             __MSABI_LONG(0x00000001)
#define     APPCLASS_MASK                __MSABI_LONG(0x0000000F)
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

/*
 * Callback filter flags for use with MONITOR apps - 0 implies no monitor
 * callbacks.
 */
#define     MF_HSZ_INFO                  0x01000000
#define     MF_SENDMSGS                  0x02000000
#define     MF_POSTMSGS                  0x04000000
#define     MF_CALLBACKS                 0x08000000
#define     MF_ERRORS                    0x10000000
#define     MF_LINKS                     0x20000000
#define     MF_CONV                      0x40000000

#define     MF_MASK                      0xFF000000

/*
 *	DdeNameService service name flags
 */

#define     DNS_REGISTER		 0x0001
#define     DNS_UNREGISTER		 0x0002
#define     DNS_FILTERON		 0x0004
#define     DNS_FILTEROFF         	 0x0008


/****************************************************

      End of Flags section

****************************************************/

201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216
/****************************************************

	Message Types Section

****************************************************/

#define XTYPF_NOBLOCK		0x0002		/* CBR_NOBLOCK will not work */
#define XTYPF_NODATA		0x0004		/* DDE_FDEFERUPD  */
#define XTYPF_ACKREQ		0x0008		/* DDE_FACKREQ */

#define XCLASS_MASK		0xFC00
#define XCLASS_BOOL		0x1000
#define XCLASS_DATA		0x2000
#define XCLASS_FLAGS		0x4000
#define	XCLASS_NOTIFICATION	0x8000

217
#define XTYP_ERROR		(0x0000 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK)
218
#define XTYP_ADVDATA		(0x0010 | XCLASS_FLAGS)
219 220 221 222 223 224
#define XTYP_ADVREQ		(0x0020 | XCLASS_DATA | XTYPF_NOBLOCK)
#define XTYP_ADVSTART		(0x0030 | XCLASS_BOOL)
#define XTYP_ADVSTOP		(0x0040 | XCLASS_NOTIFICATION)
#define XTYP_EXECUTE		(0x0050 | XCLASS_FLAGS)
#define XTYP_CONNECT		(0x0060 | XCLASS_BOOL | XTYPF_NOBLOCK)
#define XTYP_CONNECT_CONFIRM	(0x0070 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK)
225
#define XTYP_XACT_COMPLETE	(0x0080 | XCLASS_NOTIFICATION )
226
#define XTYP_POKE		(0x0090 | XCLASS_FLAGS)
227 228 229 230
#define XTYP_REGISTER		(0x00A0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK )
#define XTYP_REQUEST		(0x00B0 | XCLASS_DATA )
#define XTYP_DISCONNECT		(0x00C0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK )
#define XTYP_UNREGISTER		(0x00D0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK )
231
#define XTYP_WILDCONNECT	(0x00E0 | XCLASS_DATA | XTYPF_NOBLOCK)
232
#define XTYP_MONITOR		(0x00F0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK)
233 234 235

#define XTYP_MASK		0x00F0
#define XTYP_SHIFT		4
236

237 238
#define TIMEOUT_ASYNC           0xFFFFFFFF

239 240
#define CADV_LATEACK		0xFFFF

241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261
/**************************************************

	End of Message Types Section

****************************************************/

/*****************************************************

	DDE Codes for wStatus field

*****************************************************/

#define DDE_FACK		0x8000
#define DDE_FBUSY		0x4000
#define DDE_FDEFERUPD		0x4000
#define DDE_FACKREQ		0x8000
#define DDE_FRELEASE		0x2000
#define DDE_FREQUESTED		0x1000
#define DDE_FAPPSTATUS		0x00FF
#define DDE_FNOTPROCESSED	0x0000

262 263 264 265
#define DDE_FACKRESERVED        (~(DDE_FACK | DDE_FBUSY | DDE_FAPPSTATUS))
#define DDE_FADVRESERVED        (~(DDE_FACKREQ | DDE_FDEFERUPD))
#define DDE_FDATRESERVED        (~(DDE_FACKREQ | DDE_FRELEASE | DDE_FREQUESTED))
#define DDE_FPOKRESERVED        (~(DDE_FRELEASE))
266 267 268 269 270 271 272

/*****************************************************

	End of wStatus codes

*****************************************************/

273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303
/****************************************************

      Return Codes section again copied from SDK as must be same

*****************************************************/

#define     DMLERR_NO_ERROR                    0       /* must be 0 */

#define     DMLERR_FIRST                       0x4000

#define     DMLERR_ADVACKTIMEOUT               0x4000
#define     DMLERR_BUSY                        0x4001
#define     DMLERR_DATAACKTIMEOUT              0x4002
#define     DMLERR_DLL_NOT_INITIALIZED         0x4003
#define     DMLERR_DLL_USAGE                   0x4004
#define     DMLERR_EXECACKTIMEOUT              0x4005
#define     DMLERR_INVALIDPARAMETER            0x4006
#define     DMLERR_LOW_MEMORY                  0x4007
#define     DMLERR_MEMORY_ERROR                0x4008
#define     DMLERR_NOTPROCESSED                0x4009
#define     DMLERR_NO_CONV_ESTABLISHED         0x400a
#define     DMLERR_POKEACKTIMEOUT              0x400b
#define     DMLERR_POSTMSG_FAILED              0x400c
#define     DMLERR_REENTRANCY                  0x400d
#define     DMLERR_SERVER_DIED                 0x400e
#define     DMLERR_SYS_ERROR                   0x400f
#define     DMLERR_UNADVACKTIMEOUT             0x4010
#define     DMLERR_UNFOUND_QUEUE_ID            0x4011

#define     DMLERR_LAST                        0x4011

304 305
#define     HDATA_APPOWNED          	       0x0001

306 307 308 309 310 311 312
/*****************************************************

      End of Return Codes and Microsoft section

******************************************************/


313

314 315 316 317
DECLARE_HANDLE(HCONVLIST);
DECLARE_HANDLE(HCONV);
DECLARE_HANDLE(HSZ);
DECLARE_HANDLE(HDDEDATA);
Alexandre Julliard's avatar
Alexandre Julliard committed
318

319

320

321 322 323 324 325 326
/*******************************************************

	API Entry Points

*******************************************************/

327
typedef HDDEDATA (CALLBACK *PFNCALLBACK)(UINT, UINT, HCONV, HSZ, HSZ,
328
					 HDDEDATA, ULONG_PTR, ULONG_PTR);
Alexandre Julliard's avatar
Alexandre Julliard committed
329

330 331 332 333 334 335
/***************************************************

	Externally visible data structures

***************************************************/

336 337 338 339
typedef struct tagHSZPAIR
{
    HSZ hszSvc;
    HSZ hszTopic;
340
} HSZPAIR, *PHSZPAIR;
341 342

typedef struct tagCONVCONTEXT
Alexandre Julliard's avatar
Alexandre Julliard committed
343
{
344 345 346 347
    UINT  cb;
    UINT  wFlags;
    UINT  wCountryID;
    INT   iCodePage;
348 349 350
    DWORD dwLangID;
    DWORD dwSecurity;
    SECURITY_QUALITY_OF_SERVICE qos;
351
} CONVCONTEXT, *PCONVCONTEXT;
Alexandre Julliard's avatar
Alexandre Julliard committed
352

353
typedef struct tagCONVINFO
354 355
{
    DWORD		cb;
356
    DWORD_PTR 		hUser;
357 358 359 360 361 362 363 364 365 366 367 368 369 370
    HCONV		hConvPartner;
    HSZ			hszSvcPartner;
    HSZ			hszServiceReq;
    HSZ			hszTopic;
    HSZ			hszItem;
    UINT		wFmt;
    UINT		wType;
    UINT		wStatus;
    UINT		wConvst;
    UINT		wLastError;
    HCONVLIST		hConvList;
    CONVCONTEXT		ConvCtxt;
    HWND		hwnd;
    HWND		hwndPartner;
371
} CONVINFO, *PCONVINFO;
372

373
/*            Interface Definitions		*/
374

375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408
WINUSERAPI BOOL      WINAPI DdeAbandonTransaction(DWORD idInst, HCONV hConv, DWORD idTransaction);
WINUSERAPI LPBYTE    WINAPI DdeAccessData(HDDEDATA,LPDWORD);
WINUSERAPI HDDEDATA  WINAPI DdeAddData(HDDEDATA,LPBYTE,DWORD,DWORD);
WINUSERAPI HDDEDATA  WINAPI DdeClientTransaction(LPBYTE,DWORD,HCONV,HSZ,UINT,UINT,DWORD,LPDWORD);
WINUSERAPI INT       WINAPI DdeCmpStringHandles(HSZ,HSZ);
WINUSERAPI HCONV     WINAPI DdeConnect(DWORD,HSZ,HSZ,PCONVCONTEXT);
WINUSERAPI HCONVLIST WINAPI DdeConnectList(DWORD,HSZ,HSZ,HCONVLIST,PCONVCONTEXT);
WINUSERAPI HDDEDATA  WINAPI DdeCreateDataHandle(DWORD,LPBYTE,DWORD,DWORD,HSZ,UINT,UINT);
WINUSERAPI HSZ       WINAPI DdeCreateStringHandleA(DWORD,LPCSTR,INT);
WINUSERAPI HSZ       WINAPI DdeCreateStringHandleW(DWORD,LPCWSTR,INT);
#define                     DdeCreateStringHandle WINELIB_NAME_AW(DdeCreateStringHandle)
WINUSERAPI BOOL      WINAPI DdeDisconnect(HCONV);
WINUSERAPI BOOL      WINAPI DdeDisconnectList(HCONVLIST);
WINUSERAPI BOOL      WINAPI DdeEnableCallback(DWORD,HCONV,UINT);
WINUSERAPI BOOL      WINAPI DdeFreeDataHandle(HDDEDATA);
WINUSERAPI BOOL      WINAPI DdeFreeStringHandle(DWORD,HSZ);
WINUSERAPI DWORD     WINAPI DdeGetData(HDDEDATA,LPBYTE,DWORD,DWORD);
WINUSERAPI UINT      WINAPI DdeGetLastError(DWORD);
WINUSERAPI BOOL      WINAPI DdeImpersonateClient(HCONV);
WINUSERAPI UINT      WINAPI DdeInitializeA(LPDWORD,PFNCALLBACK,DWORD,DWORD);
WINUSERAPI UINT      WINAPI DdeInitializeW(LPDWORD,PFNCALLBACK,DWORD,DWORD);
#define                     DdeInitialize WINELIB_NAME_AW(DdeInitialize)
WINUSERAPI BOOL      WINAPI DdeKeepStringHandle(DWORD,HSZ);
WINUSERAPI HDDEDATA  WINAPI DdeNameService(DWORD,HSZ,HSZ,UINT);
WINUSERAPI BOOL      WINAPI DdePostAdvise(DWORD,HSZ,HSZ);
WINUSERAPI UINT      WINAPI DdeQueryConvInfo(HCONV,DWORD,PCONVINFO);
WINUSERAPI HCONV     WINAPI DdeQueryNextServer(HCONVLIST, HCONV);
WINUSERAPI DWORD     WINAPI DdeQueryStringA(DWORD, HSZ, LPSTR, DWORD, INT);
WINUSERAPI DWORD     WINAPI DdeQueryStringW(DWORD, HSZ, LPWSTR, DWORD, INT);
#define                     DdeQueryString WINELIB_NAME_AW(DdeQueryString)
WINUSERAPI HCONV     WINAPI DdeReconnect(HCONV);
WINUSERAPI BOOL      WINAPI DdeSetUserHandle(HCONV,DWORD,DWORD);
WINUSERAPI BOOL      WINAPI DdeUnaccessData(HDDEDATA);
WINUSERAPI BOOL      WINAPI DdeUninitialize(DWORD);
Alexandre Julliard's avatar
Alexandre Julliard committed
409

410 411 412 413
#ifdef __cplusplus
} /* extern "C" */
#endif /* defined(__cplusplus) */

414
#endif  /* __WINE_DDEML_H */