1st cut implementation of DdeInitialize32W and supporting code.
diff --git a/include/ddeml.h b/include/ddeml.h index dfb08ee..cf76a8d 100644 --- a/include/ddeml.h +++ b/include/ddeml.h
@@ -16,11 +16,119 @@ #define CP_WINUNICODE 1200 #define MSGF_DDEMGR 0x8001 +/*************************************************** + + FLAGS Section - copied from Microsoft SDK as must be standard, probably Copyright Microsoft Corporation + +***************************************************/ + +/* + * 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 + +/* + * Application command flags + */ +#define APPCMD_CLIENTONLY 0x00000010L +#define APPCMD_FILTERINITS 0x00000020L +#define APPCMD_MASK 0x00000FF0L + +/* + * Application classification flags + */ + +#define APPCLASS_STANDARD 0x00000000L +#define APPCLASS_MONITOR 0x00000001L +#define APPCLASS_MASK 0x0000000FL + +/* + * 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 + +****************************************************/ + +/**************************************************** + + 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 + +/***************************************************** + + End of Return Codes and Microsoft section + +******************************************************/ + + typedef DWORD HCONVLIST; typedef DWORD HCONV; typedef DWORD HSZ; typedef DWORD HDDEDATA; +typedef CHAR *LPTSTR; typedef HDDEDATA (CALLBACK *PFNCALLBACK16)(UINT16,UINT16,HCONV,HSZ,HSZ, HDDEDATA,DWORD,DWORD); @@ -28,6 +136,12 @@ HDDEDATA,DWORD,DWORD); DECL_WINELIB_TYPE(PFNCALLBACK) +/*************************************************** + + Externally visible data structures + +***************************************************/ + typedef struct { UINT16 cb; @@ -48,6 +162,24 @@ DWORD dwSecurity; } CONVCONTEXT32, *LPCONVCONTEXT32; +// Internal data structures + + /* entry for handle table */ +typedef struct DDE_HANDLE_ENTRY { + BOOL16 Monitor; // have these two as full Booleans cos they'll be tested frequently + BOOL16 Client_only; // bit wasteful of space but it will be faster + BOOL16 Unicode; /* Flag to indicate Win32 API used to initialise */ + BOOL16 Win16; /* flag to indicate Win16 API used to initialize */ + LPDWORD Instance_id; // needed to track monitor usage + struct DDE_HANDLE_ENTRY *Next_Entry; + PFNCALLBACK32 CallBack; + DWORD CBF_Flags; + DWORD Monitor_flags; + UINT32 Txn_count; // count transactions open to simplify closure +} DDE_HANDLE_ENTRY; + +// Interface Definitions + DECL_WINELIB_TYPE(CONVCONTEXT) DECL_WINELIB_TYPE(LPCONVCONTEXT)