/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Netscape Public License * Version 1.0 (the "NPL"); you may not use this file except in * compliance with the NPL. You may obtain a copy of the NPL at * http://www.mozilla.org/NPL/ * * Software distributed under the NPL is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL * for the specific language governing rights and limitations under the * NPL. * * The Initial Developer of this code under the NPL is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All Rights * Reserved. */ #ifndef __DDE_H // Avoid include redundancy. // // #define __DDE_H // Purpose: Header file for DDE remote control #ifndef WIN32 #include "ddeml2.h" #else #include #endif // WIN32 // Constants // // Change this on each revision. Hiword is major, Loword is minor. const DWORD dwDDEVersion = 0x00030000UL; // Careful, 32bit bools will byte you. typedef short TwoByteBool; // Structures // struct CDDEWrapper { // Enumeration values which index into our static HSZ array. // Faster than list lookups. enum { m_MinHSZ = 0, m_ServiceName = 0, m_TopicStart = 1, // Where topics begin, services end m_OpenURL = 1, m_ShowFile, m_Activate, m_ListWindows, m_GetWindowInfo, m_ParseAnchor, m_Exit, m_RegisterProtocol, m_UnRegisterProtocol, m_RegisterViewer, m_QueryViewer, m_ViewDocFile, m_UnRegisterViewer, m_RegisterURLEcho, m_URLEcho, m_UnRegisterURLEcho, m_RegisterWindowChange, m_WindowChange, m_UnRegisterWindowChange, m_BeginProgress, m_SetProgressRange, m_MakingProgress, m_EndProgress, m_Alert, m_ListOptions, m_GetOption, m_SetOption, m_Version, m_CancelProgress, m_QueryURLFile, m_InternetShortcut, m_MaxHSZ, // Where all hsz strings end, and where topics end m_Timeout = 2000, // Timeout value, in milliseconds, that the we will wait as a client. m_AlertError = 0, // Possible alert box types m_AlertWarning = 1, m_AlertQuestion = 2, m_AlertStatus = 3, m_ButtonOk = 0, // Possible buttons to show in alert box m_ButtonOkCancel = 1, m_ButtonYesNo = 2, m_ButtonYesNoCancel = 3, m_PushedError = 0, m_PushedOk = 1, // The button pushed in an alert box. m_PushedCancel = 2, m_PushedNo = 3, m_PushedYes = 4 }; static DWORD m_dwidInst; // Our DDEML instance. Only 1 ever. static BOOL m_bDDEActive; // Whether or not DDEML was initialized. static HSZ m_hsz[m_MaxHSZ]; // Array of HSZs to be used by all static CMapPtrToPtr m_ConvList; // Map of current conversations static DWORD m_dwafCmd; // array of command and filter flags static FARPROC m_pfnCallBack; // Call back function after MakeProcIntance static UINT m_cfFmts[]; // array of acceptable clipboard formats CDDEWrapper(HSZ hszService, HSZ hszTopic, HCONV hConv); ~CDDEWrapper(); // Conversation instance specific members HSZ m_hszService; // The service this object represents. int m_iService; // The enumerated service number; useful. HSZ m_hszTopic; // The topic this object represents. int m_iTopic; // The enumerated topic number; very useful. HCONV m_hConv; // The conversation this object represents. CString m_csProgressApp; // The service that we will update. // General members for informational lookup static CDDEWrapper *GetConvObj(HCONV hConv); static int EnumTopic(HSZ& hsz); static void ScanArgs(HSZ& hszArgs, const char *pFormat, ...); static void ScanDataArgs(HDDEDATA& hArgs, const char *pFormat, ...); static HDDEDATA MakeArgs(const char *pFormat, ...); static HSZ MakeItemArgs(const char *pFormat, ...); static char *SkipToNextFormat(char *pCurrent); static char *ExtractArg(HSZ& hszArgs, int iArgNum); // DDE Callback handlers for a conversation HDDEDATA PokeHandler(HSZ& hszTopic, HSZ& hszItem, HDDEDATA& hData); HDDEDATA RequestHandler(HSZ& hszTopic, HSZ& hszItem); // Server Requests HDDEDATA OpenURL(HSZ& hszItem); HDDEDATA ShowFile(HSZ& hszItem); HDDEDATA Activate(HSZ& hszItem); HDDEDATA ListWindows(HSZ& hszItem); HDDEDATA GetWindowInfo(HSZ& hszItem); HDDEDATA ParseAnchor(HSZ& hszItem); HDDEDATA RegisterProtocol(HSZ& hszItem); HDDEDATA UnRegisterProtocol(HSZ& hszItem); HDDEDATA RegisterViewer(HSZ& hszItem); HDDEDATA UnRegisterViewer(HSZ& hszItem); HDDEDATA RegisterWindowChange(HSZ& hszItem); HDDEDATA UnRegisterWindowChange(HSZ& hszItem); HDDEDATA BeginProgress(HSZ& hszItem) { return(NULL); } HDDEDATA MakingProgress(HSZ& hszItem) { return(NULL); } HDDEDATA EndProgress(HSZ& hszItem) { return(NULL); } HDDEDATA ListOptions(HSZ& hszItem); HDDEDATA GetOption(HSZ& hszItem); HDDEDATA Version(HSZ& hszItem); HDDEDATA QueryURLFile(HSZ& hszItem); // Server Pokes HDDEDATA Exit(HSZ& hszItem, HDDEDATA& hData); HDDEDATA SetProgressRange(HSZ& hszItem, HDDEDATA& hData) { return(NULL); } HDDEDATA SetOption(HSZ& hszItem, HDDEDATA& hData); HDDEDATA RegisterURLEcho(HSZ& hszItem, HDDEDATA& hData); HDDEDATA UnRegisterURLEcho(HSZ& hszItem, HDDEDATA& hData); HDDEDATA WindowChange(HSZ& hszItem, HDDEDATA& hData); HDDEDATA CancelProgress(HSZ& hszItem, HDDEDATA& hData); // Client connection establisher. static CDDEWrapper *ClientConnect(const char *cpService, HSZ& hszTopic); // Client Progress static DWORD BeginProgress(CNetscapeDoc *pDoc, const char *pService, DWORD dwWindowID, const char *pMessage); static void SetProgressRange(CNetscapeDoc *pDoc, const char *pService, DWORD dwTransactionID, DWORD dwMaxRange); static TwoByteBool MakingProgress(CNetscapeDoc *pDoc, const char *pService, DWORD dwTransactionID, const char *pMessage, DWORD dwCurrent); static void EndProgress(CNetscapeDoc *pDoc, const char *pService, DWORD dwTransactionID); static DWORD AlertProgress(CNetscapeDoc *pDoc, const char *pService, const char *pMessage); // Client Viewer Commands static void QueryViewer(CDDEDownloadData *pDData); static void ViewDocFile(CDDEDownloadData *pDData); static void OpenDocument(CDDEDownloadData *pDData); // Client Protocol Commands. static TwoByteBool OpenURL(CString csProtocol, CString csServiceName, URL_Struct *pURL, MWContext *pContext, FO_Present_Types iFormatOut); // Client Echo commands. static void URLEcho(CDDEEchoItem *pItem, CString& csURL, CString& csMimeType, DWORD dwWindowID, CString& csReferrer); // Client Window change commands. static void WindowChange(CDDEWindowChangeItem *pItem, int iChange, TwoByteBool bExiting = FALSE, DWORD dwX = 0, DWORD dwY = 0, DWORD dwCX = 0, DWORD cwCY = 0); }; // Function declarations // void DDEStartup(); void DDEShutdown(); HDDEDATA CALLBACK #ifndef XP_WIN32 _export #endif // no _export in windows 32 NetscapeDDECallBack(UINT type, UINT fmt, HCONV hconv, HSZ hsz1, HSZ hsz2, HDDEDATA hData, DWORD dwData1, DWORD dwData2); #endif // __DDE_H