Initial community commit

This commit is contained in:
Jef 2024-09-24 14:54:57 +02:00
parent 537bcbc862
commit fc06254474
16440 changed files with 4239995 additions and 2 deletions

View file

@ -0,0 +1,41 @@
#include "main.h"
#include "resource.h"
#include <shlwapi.h>
#include <strsafe.h>
#include "api.h"
#define TESTKEYWORD(__keyword, __string)\
(CSTR_EQUAL == CompareStringA(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT),\
NORM_IGNORECASE, (__keyword), -1, (__string), -1))
extern "C" __declspec( dllexport ) int winampGetExtendedFileInfoW(const wchar_t *fn, const char *data, wchar_t *dest, int destlen)
{
if (TESTKEYWORD("type", data))
{
if (NULL != dest)
{
int index = 0;
if (destlen > 1)
dest[index++] = L'1';
dest[index] = L'\0';
}
return 1;
}
else if (TESTKEYWORD("family", data))
{
LPCWSTR e, p(NULL);
e = PathFindExtensionW(fn);
if (L'.' != *e) return 0;
e++;
if (CSTR_EQUAL == CompareStringW(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT),
NORM_IGNORECASE, e, -1, L"SWF", -1))
{
if (S_OK == StringCchCopyW(dest, destlen, WASABI_API_LNGSTRINGW(IDS_FAMILY_STRING))) return 1;
//p = L"Shockwave Flash";
}
//if (p && S_OK == StringCchCopyW(dest, destlen, p)) return 1;
return 0;
}
return 0;
}

View file

@ -0,0 +1,75 @@
#include "FLVExternalInterface.h"
#include "../xml/obj_xml.h"
#include "api.h"
#include "SWFParameters.h"
#include "../Winamp/wa_ipc.h"
#include "main.h"
#include <api/service/waServiceFactory.h>
#include <strsafe.h>
BSTR FLVExternalInterface::ExternalInterface_call(BSTR xml)
{
obj_xml *parser=0;
waServiceFactory *parserFactory = plugin.service->service_getServiceByGuid(obj_xmlGUID);
if (parserFactory)
parser = (obj_xml *)parserFactory->getInterface();
if (parser)
{
{ // artificial scope for SWFParameters
SWFParameters parameters(parser);
parser->xmlreader_open();
parser->xmlreader_setEncoding(L"UTF-16");
parser->xmlreader_feed(xml, wcslen(xml)*sizeof(*xml));
parser->xmlreader_feed(0, 0);
parser->xmlreader_close();
if (parameters.functionName)
{
if (!wcscmp(parameters.functionName, L"Benski"))
{
}
else if (!wcscmp(parameters.functionName, L"Ready"))
{
unsigned int width, height;
if (parameters.GetUnsigned(0, &width) && parameters.GetUnsigned(1, &height))
videoOutput->open(width, height, 0, 1.0f /*(double)x/(double)y*/, VIDEO_MAKETYPE('N','O','N','E'));
// TODO:
// Play (if not paused during buffering)
}
else if (!wcscmp(parameters.functionName, L"Complete"))
{
PostMessage(plugin.hMainWindow, WM_WA_MPEG_EOF, 0, 0);
}
else if (!wcscmp(parameters.functionName, L"Metadata"))
{
// MessageBox(NULL, xml, L"Flash ExternalInterface.call()", MB_OK);
double duration;
if (parameters.GetDouble(0, &duration))
playLength = (int)(duration * 1000.0);
}
else if (!wcscmp(parameters.functionName, L"Buffering"))
{
Nullsoft::Utility::AutoLock autolock(statusGuard);
StringCchCopy(status, 256, L"buffering");
PostMessage(plugin.hMainWindow, WM_USER, 0, IPC_UPDTITLE);
}
else if (!wcscmp(parameters.functionName, L"Playing"))
{
Nullsoft::Utility::AutoLock autolock(statusGuard);
status[0]=0;
PostMessage(plugin.hMainWindow, WM_USER, 0, IPC_UPDTITLE);
}
else if (!wcscmp(parameters.functionName, L"Playhead"))
{
double playhead;
if (parameters.GetDouble(0, &playhead))
playPosition = (int)(playhead * 1000.0);
}
}
}
parserFactory->releaseInterface(parser);
}
return 0;
}

View file

@ -0,0 +1,8 @@
#pragma once
#include "FlashDispInterface.h"
class FLVExternalInterface : public FlashDispInterface
{
private:
BSTR ExternalInterface_call(BSTR xml);
};

View file

@ -0,0 +1,7 @@
#pragma once
#include <wtypes.h>
class FlashDispInterface
{
public:
virtual BSTR ExternalInterface_call(BSTR xml) = 0;
};

View file

@ -0,0 +1,574 @@
#include "SWFContainer.h"
#include <strsafe.h>
// ---------------------------------------------------------------
IConnectionPoint *SWFContainer::GetConnectionPoint (REFIID riid)
{
IUnknown *punk = getUnknown ();
if (!punk)
return 0;
IConnectionPointContainer *pcpc;
IConnectionPoint *pcp = 0;
HRESULT hr = punk->QueryInterface (IID_IConnectionPointContainer, (void **) & pcpc);
if (SUCCEEDED (hr))
{
pcpc->FindConnectionPoint (riid, &pcp);
pcpc->Release();
}
punk->Release();
return pcp;
}
void SWFContainer::SyncSizeToWindow(HWND hwnd)
{
RECT rect;
GetClientRect(hwnd, &rect);
int height = (rect.bottom - rect.top);
// if we get a null height then hide the html control (after limiting to 1px)
// and also hide it's parent window - is mainly for ml_wire to prevent display
// glitches when resizing the bottom segment all the way to the bottom
//ShowWindow(m_hwnd,height?SW_SHOWNA:SW_HIDE);
//ShowWindow(hwnd,height?SW_SHOWNA:SW_HIDE);
setLocation(0, 0, rect.right - rect.left, height?height:1);
}
SWFContainer::SWFContainer(HWND hwnd)
: flash (0), m_cRefs(1), m_hwnd(hwnd), m_punk(NULL),
externalInterface(0)
{
bInitialized = (S_OK == CoInitializeEx(NULL, COINIT_APARTMENTTHREADED)) ? true : false;
memset(&m_rect, 0, sizeof(m_rect));
add(ShockwaveFlashObjects::CLSID_ShockwaveFlash);
IUnknown *punk = getUnknown();
if (punk)
{
if (SUCCEEDED(punk->QueryInterface (ShockwaveFlashObjects::IID_IShockwaveFlash, (void **) & flash)))
{
IConnectionPoint *icp = GetConnectionPoint(ShockwaveFlashObjects::DIID__IShockwaveFlashEvents);
if (icp)
{
m_dwCookie = 0;
HRESULT hr = icp->Advise(static_cast<IDispatch *>(this), &m_dwCookie);
icp->Release();
}
}
else
flash=0;
punk->Release();
}
}
SWFContainer::~SWFContainer()
{
close();
if (bInitialized) CoUninitialize();
}
void SWFContainer::close()
{
IOleObject *pioo;
if ( m_punk )
{
HRESULT hr = m_punk->QueryInterface(IID_IOleObject, (PVOID *) & pioo);
if (SUCCEEDED(hr))
{
pioo->Close(OLECLOSE_NOSAVE);
pioo->Release();
}
}
if (m_punk)
{
m_punk->Release();
m_punk = NULL;
}
if (flash)
{
flash->Stop();
flash->Release();
flash = 0;
}
}
STDMETHODIMP SWFContainer::QueryInterface(REFIID riid, PVOID *ppvObject)
{
if (!ppvObject)
return E_POINTER;
if (IsEqualIID(riid, IID_IOleClientSite))
*ppvObject = (IOleClientSite *)this;
else if (IsEqualIID(riid, IID_IOleInPlaceSite))
*ppvObject = (IOleInPlaceSite *)this;
else if (IsEqualIID(riid, IID_IOleInPlaceFrame))
*ppvObject = (IOleInPlaceFrame *)this;
else if (IsEqualIID(riid, IID_IOleInPlaceUIWindow))
*ppvObject = (IOleInPlaceUIWindow *)this;
// else if (IsEqualIID(riid, IID_IOleControlSite))
// *ppvObject = (IOleControlSite *)this;
else if (IsEqualIID(riid, IID_IOleWindow))
*ppvObject = this;
else if (IsEqualIID(riid, IID_IDispatch))
*ppvObject = (IDispatch *)this;
else if (IsEqualIID(riid, IID_IUnknown))
*ppvObject = this;
else if (IsEqualIID(riid, __uuidof(ShockwaveFlashObjects::_IShockwaveFlashEvents)))
*ppvObject = (IDispatch *)this;
else
{
*ppvObject = NULL;
return E_NOINTERFACE;
}
AddRef();
return S_OK;
}
ULONG SWFContainer::AddRef(void)
{
return ++m_cRefs;
}
ULONG SWFContainer::Release(void)
{
if (--m_cRefs)
return m_cRefs;
// PostQuitMessage(0);
delete this;
return 0;
}
HRESULT SWFContainer::SaveObject()
{
return E_NOTIMPL;
}
HRESULT SWFContainer::GetMoniker(DWORD dwAssign, DWORD dwWhichMoniker, LPMONIKER * ppMk)
{
return E_NOTIMPL;
}
HRESULT SWFContainer::GetContainer(LPOLECONTAINER * ppContainer)
{
return E_NOINTERFACE;
}
HRESULT SWFContainer::ShowObject()
{
return S_OK;
}
HRESULT SWFContainer::OnShowWindow(BOOL fShow)
{
return S_OK;
}
HRESULT SWFContainer::RequestNewObjectLayout()
{
return E_NOTIMPL;
}
HRESULT SWFContainer::GetWindow(HWND * lphwnd)
{
if (!IsWindow(m_hwnd))
return S_FALSE;
*lphwnd = m_hwnd;
return S_OK;
}
HRESULT SWFContainer::ContextSensitiveHelp(BOOL fEnterMode)
{
return E_NOTIMPL;
}
HRESULT SWFContainer::CanInPlaceActivate(void)
{
return S_OK;
}
HRESULT SWFContainer::OnInPlaceActivate(void)
{
return S_OK;
}
HRESULT SWFContainer::OnUIActivate(void)
{
return S_OK;
}
HRESULT SWFContainer::GetWindowContext(IOleInPlaceFrame ** ppFrame, IOleInPlaceUIWindow ** ppIIPUIWin,
LPRECT lprcPosRect, LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo)
{
*ppFrame = (IOleInPlaceFrame *)this;
*ppIIPUIWin = NULL;
RECT rect;
GetClientRect(m_hwnd, &rect);
lprcPosRect->left = 0;
lprcPosRect->top = 0;
lprcPosRect->right = rect.right;
lprcPosRect->bottom = rect.bottom;
CopyRect(lprcClipRect, lprcPosRect);
lpFrameInfo->cb = sizeof(OLEINPLACEFRAMEINFO);
lpFrameInfo->fMDIApp = FALSE;
lpFrameInfo->hwndFrame = m_hwnd;
lpFrameInfo->haccel = 0;
lpFrameInfo->cAccelEntries = 0;
(*ppFrame)->AddRef();
return S_OK;
}
HRESULT SWFContainer::Scroll(SIZE scrollExtent)
{
return E_NOTIMPL;
}
HRESULT SWFContainer::OnUIDeactivate(BOOL fUndoable)
{
return E_NOTIMPL;
}
HRESULT SWFContainer::OnInPlaceDeactivate(void)
{
return S_OK;
}
HRESULT SWFContainer::DiscardUndoState(void)
{
return E_NOTIMPL;
}
HRESULT SWFContainer::DeactivateAndUndo(void)
{
return E_NOTIMPL;
}
HRESULT SWFContainer::OnPosRectChange(LPCRECT lprcPosRect)
{
return S_OK;
}
HRESULT SWFContainer::InsertMenus(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths)
{
return E_NOTIMPL;
}
HRESULT SWFContainer::SetMenu(HMENU hmenuShared, HOLEMENU holemenu, HWND hwndActiveObject)
{
return E_NOTIMPL;
}
HRESULT SWFContainer::RemoveMenus(HMENU hmenuShared)
{
return E_NOTIMPL;
}
HRESULT SWFContainer::SetStatusText(LPCOLESTR pszStatusText)
{
return S_OK;
}
HRESULT SWFContainer::TranslateAccelerator(LPMSG lpmsg, WORD wID)
{
return S_OK;
}
HRESULT SWFContainer::EnableModeless(BOOL fEnable)
{
return E_NOTIMPL;
}
HRESULT SWFContainer::OnControlInfoChanged()
{
return E_NOTIMPL;
}
HRESULT SWFContainer::LockInPlaceActive(BOOL fLock)
{
return E_NOTIMPL;
}
HRESULT SWFContainer::GetExtendedControl(IDispatch **ppDisp)
{
if (ppDisp == NULL)
return E_INVALIDARG;
*ppDisp = (IDispatch *)this;
(*ppDisp)->AddRef();
return S_OK;
}
HRESULT SWFContainer::TransformCoords(POINTL *pptlHimetric, POINTF *pptfContainer, DWORD dwFlags)
{
return E_NOTIMPL;
}
HRESULT SWFContainer::TranslateAccelerator(LPMSG pMsg, DWORD grfModifiers)
{
return S_FALSE;
}
HRESULT SWFContainer::OnFocus(BOOL fGotFocus)
{
return E_NOTIMPL;
}
HRESULT SWFContainer::ShowPropertyFrame(void)
{
return E_NOTIMPL;
}
HRESULT SWFContainer::GetIDsOfNames(REFIID riid, OLECHAR FAR* FAR* rgszNames, unsigned int cNames, LCID lcid, DISPID FAR* rgdispid)
{
*rgdispid = DISPID_UNKNOWN;
return DISP_E_UNKNOWNNAME;
}
HRESULT SWFContainer::GetTypeInfo(unsigned int itinfo, LCID lcid, ITypeInfo FAR* FAR* pptinfo)
{
return E_NOTIMPL;
}
HRESULT SWFContainer::GetTypeInfoCount(unsigned int FAR * pctinfo)
{
return E_NOTIMPL;
}
#define GET_SAFE_DISP_BSTR(_val) ((_val.pvarVal && VT_BSTR == _val.pvarVal->vt) ? _val.pvarVal->bstrVal : NULL)
#define GET_SAFE_DISP_I4(_val) ((_val.pvarVal && VT_I4 == _val.pvarVal->vt) ? _val.pvarVal->intVal : 0)
void SWFContainer::add(CLSID clsid)
{
HRESULT hr; // return code
CoCreateInstance(clsid,
NULL,
CLSCTX_INPROC_SERVER/* | CLSCTX_LOCAL_SERVER*/,
IID_IUnknown,
(PVOID *)&m_punk);
if (!m_punk)
return ;
IOleObject *pioo;
hr = m_punk->QueryInterface(IID_IOleObject, (PVOID *) & pioo);
if (FAILED(hr))
return ;
pioo->SetClientSite(this);
pioo->Release();
IPersistStreamInit *ppsi;
hr = m_punk->QueryInterface(IID_IPersistStreamInit, (PVOID *) & ppsi);
if (SUCCEEDED(hr))
{
ppsi->InitNew();
ppsi->Release();
}
}
void SWFContainer::remove()
{
if (!m_punk)
return ;
HRESULT hr;
IOleObject *pioo;
IOleInPlaceObject *pipo;
/*
benski> enabling this makes everything lock up!
IConnectionPoint *icp = GetConnectionPoint(DIID_DWebBrowserEvents2);
if (icp)
{
// m_dwCookie = 0;
HRESULT hr = icp->Unadvise(m_dwCookie);
icp->Release();
}
*/
hr = m_punk->QueryInterface(IID_IOleObject, (PVOID *) & pioo);
if (SUCCEEDED(hr))
{
pioo->Close(OLECLOSE_NOSAVE);
pioo->SetClientSite(NULL);
pioo->Release();
}
hr = m_punk->QueryInterface(IID_IOleInPlaceObject, (PVOID *) & pipo);
if (SUCCEEDED(hr))
{
pipo->UIDeactivate();
pipo->InPlaceDeactivate();
pipo->Release();
}
m_punk->Release();
m_punk = NULL;
}
void SWFContainer::setLocation(int x, int y, int width, int height)
{
m_rect.left = x;
m_rect.top = y;
m_rect.right = x + width;
m_rect.bottom = y + height;
if (!m_punk)
return ;
HRESULT hr;
IOleInPlaceObject *pipo;
hr = m_punk->QueryInterface(IID_IOleInPlaceObject, (PVOID *) & pipo);
if (FAILED(hr))
return ;
pipo->SetObjectRects(&m_rect, &m_rect);
pipo->Release();
}
HRESULT SWFContainer::GetBorder(LPRECT lprectBorder)
{
return E_NOTIMPL;
}
HRESULT SWFContainer::RequestBorderSpace(LPCBORDERWIDTHS lpborderwidths)
{
return E_NOTIMPL;
}
HRESULT SWFContainer::SetBorderSpace(LPCBORDERWIDTHS lpborderwidths)
{
return E_NOTIMPL;
}
HRESULT SWFContainer::SetActiveObject(IOleInPlaceActiveObject * pActiveObject, LPCOLESTR lpszObjName)
{
return E_NOTIMPL;
}
void SWFContainer::setVisible(BOOL fVisible)
{
if (!m_punk)
return ;
HRESULT hr;
IOleObject *pioo;
hr = m_punk->QueryInterface(IID_IOleObject, (PVOID *) & pioo);
if (FAILED(hr))
return ;
if (fVisible)
{
pioo->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, this, 0, m_hwnd, &m_rect);
pioo->DoVerb(OLEIVERB_SHOW, NULL, this, 0, m_hwnd, &m_rect);
}
else
pioo->DoVerb(OLEIVERB_HIDE, NULL, this, 0, m_hwnd, NULL);
pioo->Release();
}
void SWFContainer::setFocus(BOOL fFocus)
{
if (!m_punk)
return ;
HRESULT hr;
IOleObject *pioo;
if (fFocus)
{
hr = m_punk->QueryInterface(IID_IOleObject, (PVOID *) & pioo);
if (FAILED(hr))
return ;
pioo->DoVerb(OLEIVERB_UIACTIVATE, NULL, this, 0, m_hwnd, &m_rect);
pioo->Release();
}
}
bool SWFContainer::translateKey(LPMSG pMsg)
{
if (!m_punk)
return false;
HRESULT hr;
IOleInPlaceActiveObject *pao;
hr = m_punk->QueryInterface(IID_IOleInPlaceActiveObject, (PVOID *) & pao);
if (FAILED(hr))
return false;
HRESULT res = pao->TranslateAccelerator(pMsg);
pao->Release();
return res == S_OK;
}
enum
{
FLASH_DISPID_EXTERNALINTERFACE_CALL = 197,
};
HRESULT SWFContainer::Invoke(
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr)
{
switch (dispIdMember)
{
case 0x000007a6 : // OnProgress
break;
case 0x00000096 : // FSCommand
break;
case FLASH_DISPID_EXTERNALINTERFACE_CALL : // ExternalInterface.call()
{
if (externalInterface)
externalInterface->ExternalInterface_call(pDispParams->rgvarg[0].bstrVal);
}
break;
}
return DISP_E_MEMBERNOTFOUND;
}
/**************************************************************************
* adContainer::getUnknown()
**************************************************************************/
IUnknown * SWFContainer::getUnknown()
{
if (!m_punk)
return NULL;
m_punk->AddRef();
return m_punk;
}

View file

@ -0,0 +1,144 @@
#ifndef NULLSOFT_HTMLCONTAINERH
#define NULLSOFT_HTMLCONTAINERH
#include <oleidl.h>
#include <ocidl.h>
//#import <system32/macromed/Flash/Flash9e.ocx> /*no_namespace, */named_guids, raw_interfaces_only, exclude("IServiceProvider")
#include "Flash9e.tlh"
#include "FlashDispInterface.h"
//#include <shlobj.h>
/**************************************************************************
class definitions
**************************************************************************/
#ifndef DOCHOSTUIFLAG_HOST_NAVIGATES
#define DOCHOSTUIFLAG_HOST_NAVIGATES 0x02000000
#endif
#ifndef DOCHOSTUIFLAG_ENABLE_REDIRECT_NOTIFICATION
#define DOCHOSTUIFLAG_ENABLE_REDIRECT_NOTIFICATION 0x04000000
#endif
#ifndef DOCHOSTUIFLAG_USE_WINDOWLESS_SELECTCONTROL
#define DOCHOSTUIFLAG_USE_WINDOWLESS_SELECTCONTROL 0x08000000
#endif
#ifndef DOCHOSTUIFLAG_USE_WINDOWED_SELECTCONTROL
#define DOCHOSTUIFLAG_USE_WINDOWED_SELECTCONTROL 0x10000000
#endif
#ifndef DOCHOSTUIFLAG_ENABLE_ACTIVEX_INACTIVATE_MODE
#define DOCHOSTUIFLAG_ENABLE_ACTIVEX_INACTIVATE_MODE 0x20000000
#endif
class SWFContainer : public IOleClientSite,
public IOleInPlaceSite,
public IOleInPlaceFrame,
public IOleControlSite,
public IDispatch
{
protected:
ULONG m_cRefs; // ref count
IUnknown *m_punk; // IUnknown of contained object
RECT m_rect; // size of control
bool bInitialized;
public:
HWND m_hwnd; // window handle of the container
SWFContainer(HWND hwnd);
virtual ~SWFContainer();
public:
// *** IUnknown Methods ***
STDMETHOD(QueryInterface)(REFIID riid, PVOID *ppvObject);
STDMETHOD_(ULONG, AddRef)(void);
STDMETHOD_(ULONG, Release)(void);
// *** IOleInPlaceUIWindow Methods ***
STDMETHOD (GetBorder)(LPRECT lprectBorder);
STDMETHOD (RequestBorderSpace)(LPCBORDERWIDTHS lpborderwidths);
STDMETHOD (SetBorderSpace)(LPCBORDERWIDTHS lpborderwidths);
STDMETHOD (SetActiveObject)(IOleInPlaceActiveObject * pActiveObject,
LPCOLESTR lpszObjName);
// *** IOleClientSite Methods ***
STDMETHOD (SaveObject)();
STDMETHOD (GetMoniker)(DWORD dwAssign, DWORD dwWhichMoniker, LPMONIKER *ppMk);
STDMETHOD (GetContainer)(LPOLECONTAINER *ppContainer);
STDMETHOD (ShowObject)();
STDMETHOD (OnShowWindow)(BOOL fShow);
STDMETHOD (RequestNewObjectLayout)();
// *** IOleWindow Methods ***
STDMETHOD (GetWindow) (HWND * phwnd);
STDMETHOD (ContextSensitiveHelp) (BOOL fEnterMode);
// *** IOleInPlaceSite Methods ***
STDMETHOD (CanInPlaceActivate) (void);
STDMETHOD (OnInPlaceActivate) (void);
STDMETHOD (OnUIActivate) (void);
STDMETHOD (GetWindowContext) (IOleInPlaceFrame ** ppFrame, IOleInPlaceUIWindow ** ppDoc, LPRECT lprcPosRect, LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo);
STDMETHOD (Scroll) (SIZE scrollExtent);
STDMETHOD (OnUIDeactivate) (BOOL fUndoable);
STDMETHOD (OnInPlaceDeactivate) (void);
STDMETHOD (DiscardUndoState) (void);
STDMETHOD (DeactivateAndUndo) (void);
STDMETHOD (OnPosRectChange) (LPCRECT lprcPosRect);
// *** IOleInPlaceFrame Methods ***
STDMETHOD (InsertMenus)(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths);
STDMETHOD (SetMenu)(HMENU hmenuShared, HOLEMENU holemenu, HWND hwndActiveObject);
STDMETHOD (RemoveMenus)(HMENU hmenuShared);
STDMETHOD (SetStatusText)(LPCOLESTR pszStatusText);
STDMETHOD (EnableModeless)(BOOL fEnable);
STDMETHOD (TranslateAccelerator)(LPMSG lpmsg, WORD wID);
// *** IOleControlSite Methods ***
STDMETHOD (OnControlInfoChanged)(void);
STDMETHOD (LockInPlaceActive)(BOOL fLock);
STDMETHOD (GetExtendedControl)(IDispatch **ppDisp);
STDMETHOD (TransformCoords)(POINTL *pptlHimetric, POINTF *pptfContainer, DWORD dwFlags);
STDMETHOD (TranslateAccelerator)(LPMSG pMsg, DWORD grfModifiers);
STDMETHOD (OnFocus)(BOOL fGotFocus);
STDMETHOD (ShowPropertyFrame)(void);
// *** IDispatch Methods ***
STDMETHOD (GetIDsOfNames)(REFIID riid, OLECHAR FAR* FAR* rgszNames, unsigned int cNames, LCID lcid, DISPID FAR* rgdispid);
STDMETHOD (GetTypeInfo)(unsigned int itinfo, LCID lcid, ITypeInfo FAR* FAR* pptinfo);
STDMETHOD (GetTypeInfoCount)(unsigned int FAR * pctinfo);
STDMETHOD (Invoke) (
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
public:
void add(CLSID clsid);
void remove();
void setLocation(int x, int y, int width, int height);
void setVisible(BOOL fVisible);
void setFocus(BOOL fFocus);
void setStatusWindow(HWND hwndStatus);
bool translateKey(LPMSG pMsg);
void close();
IUnknown * getUnknown();
void SyncSizeToWindow(HWND window);
IConnectionPoint *GetConnectionPoint(REFIID riid);
DWORD m_dwCookie;
struct ShockwaveFlashObjects::IShockwaveFlash *flash;
FlashDispInterface *externalInterface;
private:
};
#endif

View file

@ -0,0 +1,104 @@
#include "SWFParameters.h"
#include "../xml/obj_xml.h"
#include <locale.h>
/*
example:
<invoke name="Benski" returntype="xml">
<arguments>
</arguments>
</invoke>
*/
SWFParameters::SWFParameters(obj_xml *_parser)
{
parser = _parser;
parser->xmlreader_setCaseSensitive();
parser->xmlreader_registerCallback(L"invoke", this);
parser->xmlreader_registerCallback(L"invoke\farguments\f*", this);
parser->xmlreader_registerCallback(L"invoke\farguments\f*", &currentParameter);
functionName=0;
C_locale = _create_locale(LC_NUMERIC, "C");
}
SWFParameters::~SWFParameters()
{
for (ArgumentList::iterator itr=arguments.begin();itr!=arguments.end();itr++)
{
SWFArgument *argument = *itr;
free(argument->type);
free(argument->value);
free(argument);
}
arguments.clear();
parser->xmlreader_unregisterCallback(this);
parser->xmlreader_unregisterCallback(&currentParameter);
}
void SWFParameters::StartTag(const wchar_t *xmlpath, const wchar_t *xmltag, ifc_xmlreaderparams *params)
{
if (!wcscmp(xmlpath, L"invoke"))
{
const wchar_t *name = params->getItemValue(L"name");
if (name)
functionName = _wcsdup(name);
}
}
void SWFParameters::EndTag(const wchar_t *xmlpath, const wchar_t *xmltag)
{
if (!wcsncmp(xmlpath, L"invoke\farguments\f", 6 /*invoke*/+ 1/*\f*/ + 9/*arguments*/ + 1/*\f*/))
{
SWFArgument *argument = new SWFArgument;
argument->type = _wcsdup(xmltag);
const wchar_t *value = currentParameter.GetString();
if (value)
argument->value = _wcsdup(value);
else
argument->value = 0;
arguments.push_back(argument);
}
}
bool SWFParameters::GetUnsigned(size_t index, unsigned int *value)
{
if (index < arguments.size())
{
SWFArgument *argument = arguments[index];
if (argument && argument->type && !wcscmp(argument->type, L"number"))
{
const wchar_t *val = argument->value;
if (val)
{
*value = wcstoul(val, 0, 10);
return true;
}
}
}
return false;
}
bool SWFParameters::GetDouble(size_t index, double *value)
{
if (index < arguments.size())
{
SWFArgument *argument = arguments[index];
if (argument && argument->type && !wcscmp(argument->type, L"number"))
{
const wchar_t *val = argument->value;
if (val)
{
*value = _wtof_l(val, C_locale);
return true;
}
}
}
return false;
}
#define CBCLASS SWFParameters
START_DISPATCH;
VCB(ONSTARTELEMENT, StartTag)
VCB(ONENDELEMENT, EndTag)
END_DISPATCH;
#undef CBCLASS

View file

@ -0,0 +1,37 @@
#pragma once
#include "../xml/ifc_xmlreadercallback.h"
#include "XMLString.h"
#include <vector>
#include <crtdefs.h>
class obj_xml;
struct SWFArgument
{
wchar_t *type;
wchar_t *value;
};
class SWFParameters : public ifc_xmlreadercallback
{
public:
typedef std::vector<SWFArgument*> ArgumentList;
SWFParameters(obj_xml *_parser);
~SWFParameters();
wchar_t *functionName;
bool GetUnsigned(size_t index, unsigned int *value);
bool GetDouble(size_t index, double *value);
private:
void StartTag(const wchar_t *xmlpath, const wchar_t *xmltag, ifc_xmlreaderparams *params);
void EndTag(const wchar_t *xmlpath, const wchar_t *xmltag);
XMLString currentParameter;
ArgumentList arguments;
_locale_t C_locale;
obj_xml *parser;
protected:
RECVS_DISPATCH;
};

View file

@ -0,0 +1,26 @@
#include "main.h"
#include "api.h"
#include "SWFContainer.h"
SWFContainer *activeContainer=0;
WNDPROC oldVidProc=0;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_SIZE:
activeContainer->SyncSizeToWindow(hWnd);
break;
case WM_ERASEBKGND:
return 1;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
break;
}
return CallWindowProc(oldVidProc, hWnd, message, wParam, lParam);
}

View file

@ -0,0 +1,52 @@
/** (c) Nullsoft, Inc. C O N F I D E N T I A L
** Filename:
** Project:
** Description:
** Author: Ben Allison benski@nullsoft.com
** Created:
**/
#include "main.h"
#include "XMLString.h"
#include <strsafe.h>
XMLString::XMLString()
{
data[0]=0;
}
void XMLString::Reset()
{
data[0]=0;
}
const wchar_t *XMLString::GetString()
{
return data;
}
void XMLString::StartTag(const wchar_t *xmlpath, const wchar_t *xmltag, ifc_xmlreaderparams *params)
{
data[0]=0;
}
void XMLString::TextHandler(const wchar_t *xmlpath, const wchar_t *xmltag, const wchar_t *str)
{
StringCchCatW(data, XMLSTRING_SIZE, str);
}
void XMLString::ManualSet(const wchar_t *string)
{
StringCchCatW(data, XMLSTRING_SIZE, string);
}
#ifdef CBCLASS
#undef CBCLASS
#endif
#define CBCLASS XMLString
START_DISPATCH;
VCB(ONSTARTELEMENT, StartTag)
VCB(ONCHARDATA, TextHandler)
END_DISPATCH;

View file

@ -0,0 +1,29 @@
#ifndef NULLSOFT_WINAMP_XMLSTRING_H
#define NULLSOFT_WINAMP_XMLSTRING_H
#include "../xml/ifc_xmlreadercallback.h"
/*
this one is an xml callback that just saves the last encountered string
*/
#define XMLSTRING_SIZE 1024
class XMLString : public ifc_xmlreadercallback
{
public:
XMLString();
void Reset();
const wchar_t *GetString();
void ManualSet(const wchar_t *string);
private:
/* XML callbacks */
void StartTag(const wchar_t *xmlpath, const wchar_t *xmltag, ifc_xmlreaderparams *params);
void EndTag(const wchar_t *xmlpath, const wchar_t *xmltag);
void TextHandler(const wchar_t *xmlpath, const wchar_t *xmltag, const wchar_t *str);
wchar_t data[XMLSTRING_SIZE]; // for now, we'll make it dynamic later
RECVS_DISPATCH;
};
#endif

View file

@ -0,0 +1,6 @@
#pragma once
#include <api/application/api_application.h>
#define WASABI_API_APP applicationApi
#include "../Agave/Language/api_language.h"

View file

@ -0,0 +1,347 @@
// Created by Microsoft (R) C/C++ Compiler Version 13.10.6030 (0c25145a).
//
// e:\nullsoft\in_swf\release\flash9e.tlh
//
// C++ source equivalent of Win32 type library C:/windows/system32/macromed/Flash/Flash9e.ocx
// compiler-generated file created 04/17/08 at 15:29:08 - DO NOT EDIT!
#pragma once
#pragma pack(push, 8)
#include <comdef.h>
namespace ShockwaveFlashObjects {
//
// Forward references and typedefs
//
struct __declspec(uuid("d27cdb6b-ae6d-11cf-96b8-444553540000"))
/* LIBID */ __ShockwaveFlashObjects;
struct __declspec(uuid("d27cdb6c-ae6d-11cf-96b8-444553540000"))
/* dual interface */ IShockwaveFlash;
struct __declspec(uuid("d27cdb6d-ae6d-11cf-96b8-444553540000"))
/* dispinterface */ _IShockwaveFlashEvents;
struct /* coclass */ ShockwaveFlash;
struct __declspec(uuid("d27cdb70-ae6d-11cf-96b8-444553540000"))
/* interface */ IFlashFactory;
struct __declspec(uuid("d27cdb72-ae6d-11cf-96b8-444553540000"))
/* interface */ IFlashObjectInterface;
struct __declspec(uuid("a6ef9860-c720-11d0-9337-00a0c90dcaa9"))
/* interface */ IDispatchEx;
struct /* coclass */ FlashObjectInterface;
//
// Smart pointer typedef declarations
//
_COM_SMARTPTR_TYPEDEF(IShockwaveFlash, __uuidof(IShockwaveFlash));
_COM_SMARTPTR_TYPEDEF(_IShockwaveFlashEvents, __uuidof(_IShockwaveFlashEvents));
_COM_SMARTPTR_TYPEDEF(IFlashFactory, __uuidof(IFlashFactory));
_COM_SMARTPTR_TYPEDEF(IDispatchEx, __uuidof(IDispatchEx));
_COM_SMARTPTR_TYPEDEF(IFlashObjectInterface, __uuidof(IFlashObjectInterface));
//
// Type library items
//
struct __declspec(uuid("d27cdb6c-ae6d-11cf-96b8-444553540000"))
IShockwaveFlash : IDispatch
{
//
// Raw methods provided by interface
//
virtual HRESULT __stdcall get_ReadyState (
/*[out,retval]*/ long * pVal ) = 0;
virtual HRESULT __stdcall get_TotalFrames (
/*[out,retval]*/ long * pVal ) = 0;
virtual HRESULT __stdcall get_Playing (
/*[out,retval]*/ VARIANT_BOOL * pVal ) = 0;
virtual HRESULT __stdcall put_Playing (
/*[in]*/ VARIANT_BOOL pVal ) = 0;
virtual HRESULT __stdcall get_Quality (
/*[out,retval]*/ int * pVal ) = 0;
virtual HRESULT __stdcall put_Quality (
/*[in]*/ int pVal ) = 0;
virtual HRESULT __stdcall get_ScaleMode (
/*[out,retval]*/ int * pVal ) = 0;
virtual HRESULT __stdcall put_ScaleMode (
/*[in]*/ int pVal ) = 0;
virtual HRESULT __stdcall get_AlignMode (
/*[out,retval]*/ int * pVal ) = 0;
virtual HRESULT __stdcall put_AlignMode (
/*[in]*/ int pVal ) = 0;
virtual HRESULT __stdcall get_BackgroundColor (
/*[out,retval]*/ long * pVal ) = 0;
virtual HRESULT __stdcall put_BackgroundColor (
/*[in]*/ long pVal ) = 0;
virtual HRESULT __stdcall get_Loop (
/*[out,retval]*/ VARIANT_BOOL * pVal ) = 0;
virtual HRESULT __stdcall put_Loop (
/*[in]*/ VARIANT_BOOL pVal ) = 0;
virtual HRESULT __stdcall get_Movie (
/*[out,retval]*/ BSTR * pVal ) = 0;
virtual HRESULT __stdcall put_Movie (
/*[in]*/ BSTR pVal ) = 0;
virtual HRESULT __stdcall get_FrameNum (
/*[out,retval]*/ long * pVal ) = 0;
virtual HRESULT __stdcall put_FrameNum (
/*[in]*/ long pVal ) = 0;
virtual HRESULT __stdcall SetZoomRect (
/*[in]*/ long left,
/*[in]*/ long top,
/*[in]*/ long right,
/*[in]*/ long bottom ) = 0;
virtual HRESULT __stdcall Zoom (
/*[in]*/ int factor ) = 0;
virtual HRESULT __stdcall Pan (
/*[in]*/ long x,
/*[in]*/ long y,
/*[in]*/ int mode ) = 0;
virtual HRESULT __stdcall Play ( ) = 0;
virtual HRESULT __stdcall Stop ( ) = 0;
virtual HRESULT __stdcall Back ( ) = 0;
virtual HRESULT __stdcall Forward ( ) = 0;
virtual HRESULT __stdcall Rewind ( ) = 0;
virtual HRESULT __stdcall StopPlay ( ) = 0;
virtual HRESULT __stdcall GotoFrame (
/*[in]*/ long FrameNum ) = 0;
virtual HRESULT __stdcall CurrentFrame (
/*[out,retval]*/ long * FrameNum ) = 0;
virtual HRESULT __stdcall IsPlaying (
/*[out,retval]*/ VARIANT_BOOL * Playing ) = 0;
virtual HRESULT __stdcall PercentLoaded (
/*[out,retval]*/ long * percent ) = 0;
virtual HRESULT __stdcall FrameLoaded (
/*[in]*/ long FrameNum,
/*[out,retval]*/ VARIANT_BOOL * loaded ) = 0;
virtual HRESULT __stdcall FlashVersion (
/*[out,retval]*/ long * version ) = 0;
virtual HRESULT __stdcall get_WMode (
/*[out,retval]*/ BSTR * pVal ) = 0;
virtual HRESULT __stdcall put_WMode (
/*[in]*/ BSTR pVal ) = 0;
virtual HRESULT __stdcall get_SAlign (
/*[out,retval]*/ BSTR * pVal ) = 0;
virtual HRESULT __stdcall put_SAlign (
/*[in]*/ BSTR pVal ) = 0;
virtual HRESULT __stdcall get_Menu (
/*[out,retval]*/ VARIANT_BOOL * pVal ) = 0;
virtual HRESULT __stdcall put_Menu (
/*[in]*/ VARIANT_BOOL pVal ) = 0;
virtual HRESULT __stdcall get_Base (
/*[out,retval]*/ BSTR * pVal ) = 0;
virtual HRESULT __stdcall put_Base (
/*[in]*/ BSTR pVal ) = 0;
virtual HRESULT __stdcall get_Scale (
/*[out,retval]*/ BSTR * pVal ) = 0;
virtual HRESULT __stdcall put_Scale (
/*[in]*/ BSTR pVal ) = 0;
virtual HRESULT __stdcall get_DeviceFont (
/*[out,retval]*/ VARIANT_BOOL * pVal ) = 0;
virtual HRESULT __stdcall put_DeviceFont (
/*[in]*/ VARIANT_BOOL pVal ) = 0;
virtual HRESULT __stdcall get_EmbedMovie (
/*[out,retval]*/ VARIANT_BOOL * pVal ) = 0;
virtual HRESULT __stdcall put_EmbedMovie (
/*[in]*/ VARIANT_BOOL pVal ) = 0;
virtual HRESULT __stdcall get_BGColor (
/*[out,retval]*/ BSTR * pVal ) = 0;
virtual HRESULT __stdcall put_BGColor (
/*[in]*/ BSTR pVal ) = 0;
virtual HRESULT __stdcall get_Quality2 (
/*[out,retval]*/ BSTR * pVal ) = 0;
virtual HRESULT __stdcall put_Quality2 (
/*[in]*/ BSTR pVal ) = 0;
virtual HRESULT __stdcall LoadMovie (
/*[in]*/ int layer,
/*[in]*/ BSTR url ) = 0;
virtual HRESULT __stdcall TGotoFrame (
/*[in]*/ BSTR target,
/*[in]*/ long FrameNum ) = 0;
virtual HRESULT __stdcall TGotoLabel (
/*[in]*/ BSTR target,
/*[in]*/ BSTR label ) = 0;
virtual HRESULT __stdcall TCurrentFrame (
/*[in]*/ BSTR target,
/*[out,retval]*/ long * FrameNum ) = 0;
virtual HRESULT __stdcall TCurrentLabel (
/*[in]*/ BSTR target,
/*[out,retval]*/ BSTR * pVal ) = 0;
virtual HRESULT __stdcall TPlay (
/*[in]*/ BSTR target ) = 0;
virtual HRESULT __stdcall TStopPlay (
/*[in]*/ BSTR target ) = 0;
virtual HRESULT __stdcall SetVariable (
/*[in]*/ BSTR name,
/*[in]*/ BSTR value ) = 0;
virtual HRESULT __stdcall GetVariable (
/*[in]*/ BSTR name,
/*[out,retval]*/ BSTR * pVal ) = 0;
virtual HRESULT __stdcall TSetProperty (
/*[in]*/ BSTR target,
/*[in]*/ int property,
/*[in]*/ BSTR value ) = 0;
virtual HRESULT __stdcall TGetProperty (
/*[in]*/ BSTR target,
/*[in]*/ int property,
/*[out,retval]*/ BSTR * pVal ) = 0;
virtual HRESULT __stdcall TCallFrame (
/*[in]*/ BSTR target,
/*[in]*/ int FrameNum ) = 0;
virtual HRESULT __stdcall TCallLabel (
/*[in]*/ BSTR target,
/*[in]*/ BSTR label ) = 0;
virtual HRESULT __stdcall TSetPropertyNum (
/*[in]*/ BSTR target,
/*[in]*/ int property,
/*[in]*/ double value ) = 0;
virtual HRESULT __stdcall TGetPropertyNum (
/*[in]*/ BSTR target,
/*[in]*/ int property,
/*[out,retval]*/ double * pVal ) = 0;
virtual HRESULT __stdcall TGetPropertyAsNumber (
/*[in]*/ BSTR target,
/*[in]*/ int property,
/*[out,retval]*/ double * pVal ) = 0;
virtual HRESULT __stdcall get_SWRemote (
/*[out,retval]*/ BSTR * pVal ) = 0;
virtual HRESULT __stdcall put_SWRemote (
/*[in]*/ BSTR pVal ) = 0;
virtual HRESULT __stdcall get_FlashVars (
/*[out,retval]*/ BSTR * pVal ) = 0;
virtual HRESULT __stdcall put_FlashVars (
/*[in]*/ BSTR pVal ) = 0;
virtual HRESULT __stdcall get_AllowScriptAccess (
/*[out,retval]*/ BSTR * pVal ) = 0;
virtual HRESULT __stdcall put_AllowScriptAccess (
/*[in]*/ BSTR pVal ) = 0;
virtual HRESULT __stdcall get_MovieData (
/*[out,retval]*/ BSTR * pVal ) = 0;
virtual HRESULT __stdcall put_MovieData (
/*[in]*/ BSTR pVal ) = 0;
virtual HRESULT __stdcall get_InlineData (
/*[out,retval]*/ IUnknown * * ppIUnknown ) = 0;
virtual HRESULT __stdcall put_InlineData (
/*[in]*/ IUnknown * ppIUnknown ) = 0;
virtual HRESULT __stdcall get_SeamlessTabbing (
/*[out,retval]*/ VARIANT_BOOL * pVal ) = 0;
virtual HRESULT __stdcall put_SeamlessTabbing (
/*[in]*/ VARIANT_BOOL pVal ) = 0;
virtual HRESULT __stdcall EnforceLocalSecurity ( ) = 0;
virtual HRESULT __stdcall get_Profile (
/*[out,retval]*/ VARIANT_BOOL * pVal ) = 0;
virtual HRESULT __stdcall put_Profile (
/*[in]*/ VARIANT_BOOL pVal ) = 0;
virtual HRESULT __stdcall get_ProfileAddress (
/*[out,retval]*/ BSTR * pVal ) = 0;
virtual HRESULT __stdcall put_ProfileAddress (
/*[in]*/ BSTR pVal ) = 0;
virtual HRESULT __stdcall get_ProfilePort (
/*[out,retval]*/ long * pVal ) = 0;
virtual HRESULT __stdcall put_ProfilePort (
/*[in]*/ long pVal ) = 0;
virtual HRESULT __stdcall CallFunction (
/*[in]*/ BSTR request,
/*[out,retval]*/ BSTR * response ) = 0;
virtual HRESULT __stdcall SetReturnValue (
/*[in]*/ BSTR returnValue ) = 0;
virtual HRESULT __stdcall DisableLocalSecurity ( ) = 0;
virtual HRESULT __stdcall get_AllowNetworking (
/*[out,retval]*/ BSTR * pVal ) = 0;
virtual HRESULT __stdcall put_AllowNetworking (
/*[in]*/ BSTR pVal ) = 0;
virtual HRESULT __stdcall get_AllowFullScreen (
/*[out,retval]*/ BSTR * pVal ) = 0;
virtual HRESULT __stdcall put_AllowFullScreen (
/*[in]*/ BSTR pVal ) = 0;
};
struct __declspec(uuid("d27cdb6d-ae6d-11cf-96b8-444553540000"))
_IShockwaveFlashEvents : IDispatch
{};
struct __declspec(uuid("d27cdb6e-ae6d-11cf-96b8-444553540000"))
ShockwaveFlash;
// [ default ] interface IShockwaveFlash
// [ default, source ] dispinterface _IShockwaveFlashEvents
struct __declspec(uuid("d27cdb70-ae6d-11cf-96b8-444553540000"))
IFlashFactory : IUnknown
{};
struct __declspec(uuid("a6ef9860-c720-11d0-9337-00a0c90dcaa9"))
IDispatchEx : IDispatch
{
//
// Raw methods provided by interface
//
virtual HRESULT __stdcall GetDispID (
/*[in]*/ BSTR bstrName,
/*[in]*/ unsigned long grfdex,
/*[out]*/ long * pid ) = 0;
virtual HRESULT __stdcall RemoteInvokeEx (
/*[in]*/ long id,
/*[in]*/ unsigned long lcid,
/*[in]*/ unsigned long dwFlags,
/*[in]*/ struct DISPPARAMS * pdp,
/*[out]*/ VARIANT * pvarRes,
/*[out]*/ struct EXCEPINFO * pei,
/*[in]*/ struct IServiceProvider * pspCaller,
/*[in]*/ unsigned int cvarRefArg,
/*[in]*/ unsigned int * rgiRefArg,
/*[in,out]*/ VARIANT * rgvarRefArg ) = 0;
virtual HRESULT __stdcall DeleteMemberByName (
/*[in]*/ BSTR bstrName,
/*[in]*/ unsigned long grfdex ) = 0;
virtual HRESULT __stdcall DeleteMemberByDispID (
/*[in]*/ long id ) = 0;
virtual HRESULT __stdcall GetMemberProperties (
/*[in]*/ long id,
/*[in]*/ unsigned long grfdexFetch,
/*[out]*/ unsigned long * pgrfdex ) = 0;
virtual HRESULT __stdcall GetMemberName (
/*[in]*/ long id,
/*[out]*/ BSTR * pbstrName ) = 0;
virtual HRESULT __stdcall GetNextDispID (
/*[in]*/ unsigned long grfdex,
/*[in]*/ long id,
/*[out]*/ long * pid ) = 0;
virtual HRESULT __stdcall GetNameSpaceParent (
/*[out]*/ IUnknown * * ppunk ) = 0;
};
struct __declspec(uuid("d27cdb72-ae6d-11cf-96b8-444553540000"))
IFlashObjectInterface : IDispatchEx
{};
struct __declspec(uuid("d27cdb71-ae6d-11cf-96b8-444553540000"))
FlashObjectInterface;
// [ default ] interface IFlashObjectInterface
//
// Named GUID constants initializations
//
extern "C" const GUID __declspec(selectany) LIBID_ShockwaveFlashObjects =
{0xd27cdb6b,0xae6d,0x11cf,{0x96,0xb8,0x44,0x45,0x53,0x54,0x00,0x00}};
extern "C" const GUID __declspec(selectany) IID_IShockwaveFlash =
{0xd27cdb6c,0xae6d,0x11cf,{0x96,0xb8,0x44,0x45,0x53,0x54,0x00,0x00}};
extern "C" const GUID __declspec(selectany) DIID__IShockwaveFlashEvents =
{0xd27cdb6d,0xae6d,0x11cf,{0x96,0xb8,0x44,0x45,0x53,0x54,0x00,0x00}};
extern "C" const GUID __declspec(selectany) CLSID_ShockwaveFlash =
{0xd27cdb6e,0xae6d,0x11cf,{0x96,0xb8,0x44,0x45,0x53,0x54,0x00,0x00}};
extern "C" const GUID __declspec(selectany) IID_IFlashFactory =
{0xd27cdb70,0xae6d,0x11cf,{0x96,0xb8,0x44,0x45,0x53,0x54,0x00,0x00}};
extern "C" const GUID __declspec(selectany) IID_IDispatchEx =
{0xa6ef9860,0xc720,0x11d0,{0x93,0x37,0x00,0xa0,0xc9,0x0d,0xca,0xa9}};
extern "C" const GUID __declspec(selectany) IID_IFlashObjectInterface =
{0xd27cdb72,0xae6d,0x11cf,{0x96,0xb8,0x44,0x45,0x53,0x54,0x00,0x00}};
extern "C" const GUID __declspec(selectany) CLSID_FlashObjectInterface =
{0xd27cdb71,0xae6d,0x11cf,{0x96,0xb8,0x44,0x45,0x53,0x54,0x00,0x00}};
} // namespace ShockwaveFlashObjects
#pragma pack(pop)

View file

@ -0,0 +1,83 @@
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"#include ""version.rc2""\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE
BEGIN
IDS_NULLSOFT_SWF "Nullsoft Flash Control Playback v%s"
65535 "{2430A7AC-317D-4d64-B33C-E1452A6384A2}"
END
STRINGTABLE
BEGIN
IDS_NULLSOFT_SWF_OLD "Nullsoft Flash Control Playback"
IDS_SWF_FILES "Shockwave Flash Files"
IDS_FAMILY_STRING "Shockwave Flash"
IDS_ABOUT_TEXT "%s\n© 2008-2023 Winamp SA\nWritten by: Ben Allison\nBuild date: %s"
END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#include "version.rc2"
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View file

@ -0,0 +1,30 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29609.76
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "in_swf", "in_swf.vcxproj", "{2B5561EC-78EC-4FA2-A76E-BEBEF3830E80}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{2B5561EC-78EC-4FA2-A76E-BEBEF3830E80}.Debug|Win32.ActiveCfg = Debug|Win32
{2B5561EC-78EC-4FA2-A76E-BEBEF3830E80}.Debug|Win32.Build.0 = Debug|Win32
{2B5561EC-78EC-4FA2-A76E-BEBEF3830E80}.Debug|x64.ActiveCfg = Debug|x64
{2B5561EC-78EC-4FA2-A76E-BEBEF3830E80}.Debug|x64.Build.0 = Debug|x64
{2B5561EC-78EC-4FA2-A76E-BEBEF3830E80}.Release|Win32.ActiveCfg = Release|Win32
{2B5561EC-78EC-4FA2-A76E-BEBEF3830E80}.Release|Win32.Build.0 = Release|Win32
{2B5561EC-78EC-4FA2-A76E-BEBEF3830E80}.Release|x64.ActiveCfg = Release|x64
{2B5561EC-78EC-4FA2-A76E-BEBEF3830E80}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C5DFAD3B-75E6-460A-A5E4-65E1C3027572}
EndGlobalSection
EndGlobal

View file

@ -0,0 +1,258 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{2B5561EC-78EC-4FA2-A76E-BEBEF3830E80}</ProjectGuid>
<RootNamespace>in_swf</RootNamespace>
<WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
<IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
<IncludePath>$(IncludePath)</IncludePath>
<LibraryPath>$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
<IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
<IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
<IncludePath>$(IncludePath)</IncludePath>
<LibraryPath>$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
<IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Label="Vcpkg">
<VcpkgEnabled>false</VcpkgEnabled>
</PropertyGroup>
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<VcpkgConfiguration>Debug</VcpkgConfiguration>
</PropertyGroup>
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<VcpkgConfiguration>Debug</VcpkgConfiguration>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\..\..\Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;IN_SWF_EXPORTS;UNICODE_INPUT_PLUGIN;_WIN32_DCOM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
<SubSystem>Windows</SubSystem>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
<TargetMachine>MachineX86</TargetMachine>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
<PostBuildEvent>
<Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\
xcopy /Y /D $(IntDir)$(TargetName).pdb ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\ </Command>
<Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\'</Message>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\..\..\Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;_USRDLL;IN_SWF_EXPORTS;UNICODE_INPUT_PLUGIN;_WIN32_DCOM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
<SubSystem>Windows</SubSystem>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
<PostBuildEvent>
<Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\
xcopy /Y /D $(IntDir)$(TargetName).pdb ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\ </Command>
<Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\'</Message>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>MinSpace</Optimization>
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>..\..\..\Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;IN_SWF_EXPORTS;UNICODE_INPUT_PLUGIN;_WIN32_DCOM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>true</BufferSecurityCheck>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>None</DebugInformationFormat>
<ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<GenerateDebugInformation>false</GenerateDebugInformation>
<ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
<TargetMachine>MachineX86</TargetMachine>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
<PostBuildEvent>
<Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\ </Command>
<Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\'</Message>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<Optimization>MinSpace</Optimization>
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>..\..\..\Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;_USRDLL;IN_SWF_EXPORTS;UNICODE_INPUT_PLUGIN;_WIN32_DCOM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>true</BufferSecurityCheck>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>None</DebugInformationFormat>
<ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<GenerateDebugInformation>false</GenerateDebugInformation>
<ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
<PostBuildEvent>
<Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\ </Command>
<Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\'</Message>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="..\..\..\Winamp\strutil.h" />
<ClInclude Include="api.h" />
<ClInclude Include="FlashDispInterface.h" />
<ClInclude Include="FLVExternalInterface.h" />
<ClInclude Include="main.h" />
<ClInclude Include="resource.h" />
<ClInclude Include="SWFContainer.h" />
<ClInclude Include="SWFParameters.h" />
<ClInclude Include="XMLString.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\Winamp\strutil.cpp" />
<ClCompile Include="ExtendedFileInfo.cpp" />
<ClCompile Include="FLVExternalInterface.cpp" />
<ClCompile Include="main.cpp" />
<ClCompile Include="SWFContainer.cpp" />
<ClCompile Include="SWFParameters.cpp" />
<ClCompile Include="SWFThread.cpp" />
<ClCompile Include="XMLString.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="in_swf.rc" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Wasabi\Wasabi.vcxproj">
<Project>{3e0bfa8a-b86a-42e9-a33f-ec294f823f7f}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View file

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClCompile Include="ExtendedFileInfo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="FLVExternalInterface.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SWFContainer.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SWFParameters.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SWFThread.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="XMLString.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Winamp\strutil.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="XMLString.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="SWFParameters.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="SWFContainer.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="resource.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="main.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="FLVExternalInterface.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="FlashDispInterface.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="api.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Winamp\strutil.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<Filter Include="Header Files">
<UniqueIdentifier>{0f49deee-ec41-4975-9692-7c014e9aa506}</UniqueIdentifier>
</Filter>
<Filter Include="Ressource Files">
<UniqueIdentifier>{3afcd986-d90d-4cb4-bbea-d20056ada52e}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files">
<UniqueIdentifier>{3008776d-78c5-48f4-ade1-2aa45acd6338}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="in_swf.rc">
<Filter>Ressource Files</Filter>
</ResourceCompile>
</ItemGroup>
</Project>

View file

@ -0,0 +1,447 @@
#include "main.h"
#include "api.h"
#include "../Winamp/wa_ipc.h"
#include "../Winamp/strutil.h"
#include <shlwapi.h>
#include "FLVExternalInterface.h"
#include <api/service/waServiceFactory.h>
#include <strsafe.h>
#include "resource.h"
#define SWF_PLUGIN_VERSION L"1.15"
FLVExternalInterface flashExternalInterface;
IVideoOutput *videoOutput=0;
int playPosition=0;
int playLength=-1000;
api_application *WASABI_API_APP = 0;
api_language *WASABI_API_LNG = 0;
HINSTANCE WASABI_API_LNG_HINST = 0, WASABI_API_ORIG_HINST = 0;
wchar_t pluginName[256] = {0}, status[256] = {0};
Nullsoft::Utility::LockGuard statusGuard;
template <class api_T>
static void ServiceBuild(api_T *&api_t, GUID factoryGUID_t)
{
if (plugin.service)
{
waServiceFactory *factory = plugin.service->service_getServiceByGuid(factoryGUID_t);
if (factory)
api_t = reinterpret_cast<api_T *>( factory->getInterface() );
}
}
template <class api_T>
static void ServiceRelease(api_T *api_t, GUID factoryGUID_t)
{
if (plugin.service)
{
waServiceFactory *factory = plugin.service->service_getServiceByGuid(factoryGUID_t);
if (factory)
factory->releaseInterface(api_t);
}
api_t = NULL;
}
void SetFileExtensions(void)
{
static char fileExtensionsString[1200] = {0}; // "SWF\0Shockwave Flash Files\0"
char* end = 0;
StringCchCopyExA(fileExtensionsString, 1200, "SWF", &end, 0, 0);
StringCchCopyExA(end+1, 1200, WASABI_API_LNGSTRING(IDS_SWF_FILES), 0, 0, 0);
plugin.FileExtensions = fileExtensionsString;
}
int Init()
{
if (!IsWindow(plugin.hMainWindow))
return IN_INIT_FAILURE;
ServiceBuild(WASABI_API_APP, applicationApiServiceGuid);
ServiceBuild(WASABI_API_LNG, languageApiGUID);
WASABI_API_START_LANG(plugin.hDllInstance,InSwfLangGUID);
StringCchPrintfW(pluginName,256,WASABI_API_LNGSTRINGW(IDS_NULLSOFT_SWF),SWF_PLUGIN_VERSION);
plugin.description = (char*)pluginName;
SetFileExtensions();
return IN_INIT_SUCCESS;
}
void Quit()
{
ServiceRelease(WASABI_API_APP, applicationApiServiceGuid);
ServiceRelease(WASABI_API_LNG, languageApiGUID);
}
void GetFileInfo(const in_char *file, in_char *title, int *length_in_ms)
{
if (length_in_ms)
{
if (file && *file)
*length_in_ms=-1000;
else
*length_in_ms = playLength;
}
if (title)
{
if (file && *file)
*title=0;
else
{
Nullsoft::Utility::AutoLock autolock(statusGuard);
if (status[0])
StringCchPrintf(title, GETFILEINFO_TITLE_LENGTH, L"[%s]", status);
else
*title=0;
}
}
}
int InfoBox(const in_char *file, HWND hwndParent)
{
return INFOBOX_UNCHANGED;
}
int IsOurFile(const in_char *fn)
{
if (!_wcsnicmp(fn, L"rtmp://", 7))
return 1;
return 0;
}
static bool isFLV = false;
static int PlaySWF(BSTR filename)
{
#ifdef WIN64
if (!activeContainer || (unsigned long long)activeContainer < 65536)
{
isFLV = false;
return 1;
}
#else
if (!activeContainer || (unsigned long)activeContainer < 65536)
{
isFLV = false;
return 1;
}
#endif
isFLV = false;
activeContainer->externalInterface = &flashExternalInterface;
activeContainer->flash->DisableLocalSecurity();
activeContainer->flash->put_BackgroundColor(0);
activeContainer->flash->put_EmbedMovie(FALSE);
activeContainer->flash->put_Scale(L"showAll");
activeContainer->flash->put_AllowScriptAccess(L"always");
HRESULT hr = activeContainer->flash->LoadMovie(0, filename);
activeContainer->setVisible(TRUE);
plugin.is_seekable = 0; // not seekable to start, we'll find out after opening if it's really seekable or not
return 0;
}
static int PlayFLV(const wchar_t *filename)
{
#ifdef WIN64
if (!activeContainer || (unsigned long long)activeContainer < 65536)
{
isFLV = false;
return 1;
}
# else
if (!activeContainer || (unsigned long)activeContainer < 65536)
{
isFLV = false;
return 1;
}
#endif //
// if (!activeContainer || (unsigned long)activeContainer < 65536)
// {
// isFLV = false;
// return 1;
// }
isFLV = true;
activeContainer->externalInterface = &flashExternalInterface;
activeContainer->flash->DisableLocalSecurity();
activeContainer->flash->put_BackgroundColor(0);
activeContainer->flash->put_EmbedMovie(FALSE);
activeContainer->flash->put_Scale(L"showAll");
activeContainer->flash->put_AllowScriptAccess(L"always");
static wchar_t pluginPath[MAX_PATH] = {0}, swfPath[MAX_PATH+7] = {0};
if (!pluginPath[0] && !swfPath[0])
{
lstrcpynW(pluginPath, (wchar_t*)SendMessage(plugin.hMainWindow, WM_WA_IPC, 0, IPC_GETPLUGINDIRECTORYW), MAX_PATH);
PathAppend(pluginPath, L"winampFLV.swf");
for (wchar_t *itr = pluginPath; *itr; itr++)
{
if (*itr == '\\')
*itr = '/';
}
StringCchPrintf(swfPath, MAX_PATH+7, L"file://%s", pluginPath);
}
HRESULT hr = activeContainer->flash->LoadMovie(0, swfPath);
activeContainer->setVisible(TRUE);
// TODO: make filename XML-safe
wchar_t funcCall[1024] = {0};
StringCchPrintf(funcCall, 1024, L"<invoke name=\"PlayFLV\" returntype=\"xml\"><arguments><string>%s</string></arguments></invoke>", filename);
BSTR bstr_ret = 0;
activeContainer->flash->CallFunction(funcCall, &bstr_ret);
SetVolume(volume);
SetPan(pan);
plugin.is_seekable = 1; // not seekable to start, we'll find out after opening if it's really seekable or not
return 0;
}
int Play(const in_char *filename)
{
status[0]=0;
playPosition=0;
playLength=-1000;
if (!filename || !*filename)
return 1;
if (!videoOutput)
videoOutput = (IVideoOutput *)SendMessage(plugin.hMainWindow,WM_WA_IPC,0,IPC_GET_IVIDEOOUTPUT);
if (!videoOutput)
return 1;
HWND videoWnd = (HWND)videoOutput->extended(VIDUSER_GET_VIDEOHWND, 0, 0); // ask for the video hwnd
wchar_t *mangledFilename = 0;
if (PathIsURL(filename))
mangledFilename = const_cast<wchar_t *>(filename);
else
{
mangledFilename = (wchar_t *)malloc((MAX_PATH + 7)*sizeof(wchar_t));
StringCchPrintf(mangledFilename, MAX_PATH+7, L"file://%s", filename);
}
videoOutput->open(0, 0, 0, 1.0, 'ENON');
activeContainer = new SWFContainer(videoWnd);
if (!activeContainer->flash)
{
delete activeContainer;
activeContainer=0;
if (mangledFilename != filename)
free(mangledFilename);
return 1; // failed
}
oldVidProc = (WNDPROC)(LONG_PTR)SetWindowLongPtr(videoWnd, GWLP_WNDPROC, (LONG)(LONG_PTR)WndProc);
wchar_t ext[16]=L"";
extension_exW(filename, ext, 16);
if (!_wcsicmp(ext, L"swf"))
{
if (PlaySWF(mangledFilename))
{
return 1; // failed
}
}
else
{
if (PlayFLV(mangledFilename))
{
return 1; // failed
}
}
HRESULT hr = activeContainer->flash->Play();
if (mangledFilename != filename)
free(mangledFilename);
return 0;
}
int localPause=0;
void Pause()
{
localPause=1;
if (isFLV)
{
BSTR bstr_ret;
activeContainer->flash->CallFunction(L"<invoke name=\"Pause\" returntype=\"xml\"><arguments></arguments></invoke>", &bstr_ret);
}
}
void UnPause()
{
localPause=0;
if (isFLV)
{
BSTR bstr_ret;
activeContainer->flash->CallFunction(L"<invoke name=\"Resume\" returntype=\"xml\"><arguments></arguments></invoke>", &bstr_ret);
}
}
int IsPaused()
{
return localPause;
}
void Stop()
{
videoOutput->close();
HWND videoWnd = (HWND)videoOutput->extended(VIDUSER_GET_VIDEOHWND, 0, 0); // ask for the video hwnd
SetWindowLongPtr(videoWnd, GWLP_WNDPROC, (LONG)(LONG_PTR)oldVidProc);
activeContainer->close();
activeContainer->Release();
activeContainer=0;
}
int GetLength()
{
return playLength;
}
int GetOutputTime()
{
return playPosition;
}
void SetOutputTime(int time_in_ms)
{
if (activeContainer)
{
if (isFLV)
{
double seconds = time_in_ms;
seconds/=1000.0;
wchar_t funcCall[1024] = {0};
StringCchPrintf(funcCall, 1024, L"<invoke name=\"Seek\" returntype=\"xml\"><arguments><number>%.3f</number></arguments></invoke>", seconds);
BSTR bstr_ret;
activeContainer->flash->CallFunction(funcCall, &bstr_ret);
}
else
{
// TODO: maybe change the frame?
}
}
}
int pan = 0, volume = 255;
void SetVolume(int _volume)
{
volume = _volume;
if (activeContainer)
{
if (isFLV)
{
int newVolume = (volume * 100) / 255;
wchar_t funcCall[1024] = {0};
StringCchPrintf(funcCall, 1024, L"<invoke name=\"SetVolume\" returntype=\"xml\"><arguments><number>%u</number></arguments></invoke>", newVolume);
BSTR bstr_ret;
activeContainer->flash->CallFunction(funcCall, &bstr_ret);
}
}
}
void SetPan(int _pan)
{
pan = _pan;
if (activeContainer)
{
if (isFLV)
{
int left = 100;
int right = 100;
if (pan < 0)
left += (pan * 100)/127;
if (pan>0)
right-=(pan*100)/127;
wchar_t funcCall[1024] = {0};
StringCchPrintf(funcCall, 1024, L"<invoke name=\"SetPan\" returntype=\"xml\"><arguments><number>%u</number><number>%u</number></arguments></invoke>", left, right);
BSTR bstr_ret = 0;
activeContainer->flash->CallFunction(funcCall, &bstr_ret);
}
}
}
void EQSet(int on, char data[10], int preamp)
{}
int DoAboutMessageBox(HWND parent, wchar_t* title, wchar_t* message)
{
MSGBOXPARAMS msgbx = {sizeof(MSGBOXPARAMS),0};
msgbx.lpszText = message;
msgbx.lpszCaption = title;
msgbx.lpszIcon = MAKEINTRESOURCE(102);
msgbx.hInstance = GetModuleHandle(0);
msgbx.dwStyle = MB_USERICON;
msgbx.hwndOwner = parent;
return MessageBoxIndirect(&msgbx);
}
void About(HWND hwndParent);
In_Module plugin =
{
IN_VER_RET,
"nullsoft(in_swf.dll)",
0,
0,
0 /*"SWF\0Shockwave Flash Files\0"*/,
1,
1,
About,
About,
Init,
Quit,
GetFileInfo,
InfoBox,
IsOurFile,
Play,
Pause,
UnPause,
IsPaused,
Stop,
GetLength,
GetOutputTime,
SetOutputTime,
SetVolume,
SetPan,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
EQSet,
0,
0
};
void About(HWND hwndParent)
{
wchar_t message[1024] = {0}, text[1024] = {0};
WASABI_API_LNGSTRINGW_BUF(IDS_NULLSOFT_SWF_OLD,text,1024);
StringCchPrintf(message, 1024, WASABI_API_LNGSTRINGW(IDS_ABOUT_TEXT),
plugin.description, TEXT(__DATE__));
DoAboutMessageBox(hwndParent,text,message);
}
extern "C" __declspec(dllexport) In_Module * winampGetInModule2()
{
return &plugin;
}

View file

@ -0,0 +1,24 @@
#pragma once
#include "../Winamp/in2.h"
extern In_Module plugin;
#include <windows.h>
#include "../Winamp/wa_ipc.h"
extern IVideoOutput *videoOutput;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
extern WNDPROC oldVidProc;
#include "SWFContainer.h"
extern SWFContainer *activeContainer;
extern int playPosition;
extern int playLength;
extern int volume, pan;
void SetVolume(int _volume);
void SetPan(int _pan);
#include "../nu/AutoLock.h"
extern Nullsoft::Utility::LockGuard statusGuard;
extern wchar_t status[256];

View file

@ -0,0 +1,20 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by in_swf.rc
//
#define IDS_NULLSOFT_SWF_OLD 0
#define IDS_SWF_FILES 1
#define IDS_FAMILY_STRING 3
#define IDS_ABOUT_TEXT 4
#define IDS_NULLSOFT_SWF 65534
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 5
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View file

@ -0,0 +1,39 @@
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
#include "../../../Winamp/buildType.h"
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,15,0,0
PRODUCTVERSION WINAMP_PRODUCTVER
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Winamp SA"
VALUE "FileDescription", "Winamp Input Plug-in"
VALUE "FileVersion", "1,15,0,0"
VALUE "InternalName", "Nullsoft Flash Control Playback"
VALUE "LegalCopyright", "Copyright © 2008-2023 Winamp SA"
VALUE "LegalTrademarks", "Nullsoft and Winamp are trademarks of Winamp SA"
VALUE "OriginalFilename", "in_swf.dll"
VALUE "ProductName", "Winamp"
VALUE "ProductVersion", STR_WINAMP_PRODUCTVER
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END

Binary file not shown.