mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-04-26 23:05:38 +00:00
Full Template for ticket #1
This commit is contained in:
parent
74f265b3b3
commit
f439dc8dcd
2150 changed files with 286240 additions and 0 deletions
BIN
Templates/Full/web/source/activex/IEWebGameCtrl.bmp
Normal file
BIN
Templates/Full/web/source/activex/IEWebGameCtrl.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 246 B |
482
Templates/Full/web/source/activex/IEWebGameCtrl.cpp
Normal file
482
Templates/Full/web/source/activex/IEWebGameCtrl.cpp
Normal file
|
|
@ -0,0 +1,482 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "IEWebGameCtrl.h"
|
||||
|
||||
#include "../common/webCommon.h"
|
||||
|
||||
// CIEWebGameCtrl (one and only one instance please)
|
||||
CIEWebGameCtrl* CIEWebGameCtrl::sInstance = NULL;
|
||||
|
||||
// Javascript accessible methods
|
||||
|
||||
// plugin.getVariable("$MyVariable"); - get a Torque 3D console variable
|
||||
STDMETHODIMP CIEWebGameCtrl::getVariable(BSTR name, BSTR* value)
|
||||
{
|
||||
std::wstring wstr;
|
||||
std::string sstr;
|
||||
const char* astr;
|
||||
|
||||
wstr.assign(name);
|
||||
sstr = WebCommon::WStringToString(wstr);
|
||||
astr = sstr.c_str();
|
||||
|
||||
const char* avalue = NULL;
|
||||
char vinfo[256];
|
||||
vinfo[0] = 0;
|
||||
|
||||
// requesting the version information
|
||||
if (!_stricmp(astr, "$version"))
|
||||
{
|
||||
char plugin[4096];
|
||||
|
||||
GetModuleFileNameA(WebCommon::gPluginModule, plugin, 4096);
|
||||
DWORD dwHandle = 0;
|
||||
DWORD dwSize = GetFileVersionInfoSizeA(plugin, &dwHandle);
|
||||
if (dwSize >= 0)
|
||||
{
|
||||
LPBYTE lpInfo = new BYTE[dwSize];
|
||||
ZeroMemory(lpInfo, dwSize);
|
||||
if(GetFileVersionInfoA(plugin, 0, dwSize, lpInfo))
|
||||
{
|
||||
UINT valLen = MAX_PATH;
|
||||
LPVOID valPtr = NULL;
|
||||
if(::VerQueryValue(lpInfo,
|
||||
TEXT("\\"),
|
||||
&valPtr,
|
||||
&valLen))
|
||||
{
|
||||
VS_FIXEDFILEINFO* pFinfo = (VS_FIXEDFILEINFO*)valPtr;
|
||||
|
||||
sprintf(vinfo, "%i.%i", (pFinfo->dwProductVersionMS >> 16) & 0xFF, (pFinfo->dwFileVersionMS) & 0xFF);
|
||||
|
||||
}
|
||||
}
|
||||
delete[] lpInfo;
|
||||
}
|
||||
|
||||
if (!vinfo[0])
|
||||
strcpy(vinfo, "-1");
|
||||
|
||||
|
||||
avalue = vinfo;
|
||||
|
||||
}
|
||||
else
|
||||
avalue = WebCommon::GetVariable(astr);
|
||||
|
||||
sstr = avalue;
|
||||
wstr = WebCommon::StringToWString(sstr);
|
||||
|
||||
*value = SysAllocString(wstr.c_str());
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
// plugin.setVariable("$MyVariable", 42); - set a Torque 3D console variable
|
||||
STDMETHODIMP CIEWebGameCtrl::setVariable(BSTR name, BSTR value)
|
||||
{
|
||||
std::wstring wstr;
|
||||
std::string nstr, vstr;
|
||||
const char* vname;
|
||||
const char* vvalue;
|
||||
|
||||
wstr.assign(name);
|
||||
nstr = WebCommon::WStringToString(wstr);
|
||||
vname = nstr.c_str();
|
||||
|
||||
wstr.assign(value);
|
||||
vstr = WebCommon::WStringToString(wstr);
|
||||
vvalue = vstr.c_str();
|
||||
|
||||
WebCommon::SetVariable(vname, vvalue);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
// plugin.startup(); - called once web page is fully loaded and plugin (including Torque 3D) is initialized
|
||||
STDMETHODIMP CIEWebGameCtrl::startup()
|
||||
{
|
||||
|
||||
mInitialized = true;
|
||||
std::vector<JavasScriptExport>::iterator i;
|
||||
for (i = mJavaScriptExports.begin(); i != mJavaScriptExports.end();i++)
|
||||
{
|
||||
internalExportFunction(*i);
|
||||
}
|
||||
|
||||
WebCommon::AddSecureFunctions();
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
// var result = plugin.callScript("mySecureFunction('one', 'two', 'three');"); - call a TorqueScript function marked as secure in webConfig.h with supplied arguments
|
||||
// includes function parser
|
||||
STDMETHODIMP CIEWebGameCtrl::callScript(BSTR code, BSTR* value)
|
||||
{
|
||||
std::wstring wcode;
|
||||
std::string scode;
|
||||
wcode.assign(code);
|
||||
scode = WebCommon::WStringToString(wcode);
|
||||
const char* sig = scode.c_str();
|
||||
|
||||
// do not allow large strings which could be used maliciously
|
||||
if (scode.length() > 255 || !mInitialized)
|
||||
{
|
||||
*value = SysAllocString(L"");
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
// data buffers for laying out data in a Torque 3D console friendly manner
|
||||
char nameSpace[256];
|
||||
char fname[256];
|
||||
char argv[256][256];
|
||||
char* argvv[256];
|
||||
int argc = 0;
|
||||
unsigned int argBegin = 0;
|
||||
|
||||
memset(nameSpace, 0, 256);
|
||||
memset(fname, 0, 256);
|
||||
memset(argv, 0, 256 * 256);
|
||||
|
||||
for (unsigned int i = 0; i < scode.length(); i++)
|
||||
{
|
||||
if (sig[i] == ')' || sig[i] == ';')
|
||||
{
|
||||
//scan out last arg is any
|
||||
char dummy[256];
|
||||
memset(dummy, 0, 256);
|
||||
|
||||
WebCommon::StringCopy(dummy, &sig[argBegin], i - argBegin);
|
||||
|
||||
if (strlen(dummy))
|
||||
{
|
||||
strcpy_s(argv[argc], dummy);
|
||||
argvv[argc] = argv[argc];
|
||||
argc++;
|
||||
}
|
||||
|
||||
break; // done
|
||||
}
|
||||
|
||||
// namespace
|
||||
if (sig[i]==':')
|
||||
{
|
||||
if (nameSpace[0] || fname[0])
|
||||
{
|
||||
*value = SysAllocString(L"");
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
if (i > 0 && sig[i-1] == ':')
|
||||
{
|
||||
if (i - 2 > 0)
|
||||
WebCommon::StringCopy(nameSpace, sig, i - 1);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// args begin
|
||||
if (sig[i] == '(' )
|
||||
{
|
||||
if (fname[0] || i < 1)
|
||||
{
|
||||
*value = SysAllocString(L"");
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
//everything before this is function name, minus nameSpace
|
||||
if (nameSpace[0])
|
||||
{
|
||||
int nlen = strlen(nameSpace);
|
||||
WebCommon::StringCopy(fname, &sig[nlen + 2], i - nlen - 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
WebCommon::StringCopy(fname, sig, i);
|
||||
}
|
||||
|
||||
WebCommon::StringCopy(argv[0], fname, strlen(fname)+1);
|
||||
argvv[0] = argv[0];
|
||||
argc++;
|
||||
|
||||
argBegin = i + 1;
|
||||
}
|
||||
|
||||
// args
|
||||
if (sig[i] == ',' )
|
||||
{
|
||||
if (argBegin >= i || argc == 255)
|
||||
{
|
||||
*value = SysAllocString(L"");
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
WebCommon::StringCopy(argv[argc], &sig[argBegin], i - argBegin);
|
||||
argvv[argc] = argv[argc];
|
||||
|
||||
argc++;
|
||||
argBegin = i + 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const char* retVal;
|
||||
std::string sretVal;
|
||||
std::wstring wretVal;
|
||||
|
||||
if (fname[0])
|
||||
{
|
||||
// call into the Torque 3D shared library (console system) and get return value
|
||||
retVal = torque_callsecurefunction(nameSpace, fname, argc, (const char **) argvv);
|
||||
|
||||
sretVal= retVal;
|
||||
wretVal = WebCommon::StringToWString(sretVal);
|
||||
|
||||
*value = SysAllocString(wretVal.c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
*value = SysAllocString(L"");
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
// the sole entry point for Torque 3D console system into our browser plugin (handed over as a function pointer)
|
||||
static const char * MyStringCallback(void *obj, int argc, const char* argv[])
|
||||
{
|
||||
static char ret[4096];
|
||||
strcpy_s(ret,CIEWebGameCtrl::sInstance->callFunction(argv[0], argc, argv));
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Get the location we're loading the plugin from (http://, file://) including address
|
||||
// this is used by the domain locking feature to ensure that your plugin is only
|
||||
// being used from your web site
|
||||
bool CIEWebGameCtrl::checkDomain()
|
||||
{
|
||||
HRESULT hrResult = S_FALSE;
|
||||
IMoniker* pMoniker = NULL;
|
||||
LPOLESTR sDisplayName;
|
||||
|
||||
hrResult = m_spClientSite->GetMoniker(OLEGETMONIKER_TEMPFORUSER,
|
||||
OLEWHICHMK_CONTAINER,
|
||||
&pMoniker);
|
||||
|
||||
if(SUCCEEDED(hrResult))
|
||||
{
|
||||
hrResult = pMoniker->GetDisplayName(NULL,
|
||||
NULL,
|
||||
&sDisplayName);
|
||||
pMoniker->Release();
|
||||
|
||||
std::wstring wstr;
|
||||
std::string sstr;
|
||||
|
||||
wstr.assign(sDisplayName);
|
||||
sstr = WebCommon::WStringToString(wstr);
|
||||
|
||||
return WebCommon::CheckDomain(sstr.c_str());
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// handles TorqueScript -> Javascript calling including return value
|
||||
const char* CIEWebGameCtrl::callFunction(const char* name, LONG numArguments, const char* argv[])
|
||||
{
|
||||
|
||||
//sanity
|
||||
if (numArguments > 200)
|
||||
return "";
|
||||
|
||||
// A bunch of COM'esque stuff to which ultimately boils down to finding a Javascript function on the page
|
||||
|
||||
HRESULT hr;
|
||||
|
||||
LPOLECONTAINER pContainer;
|
||||
IHTMLDocument* pHTML = NULL;
|
||||
CComPtr<IDispatch> pScript;
|
||||
CComQIPtr<IHTMLWindow2> pWin;
|
||||
|
||||
|
||||
if (!m_spClientSite)
|
||||
return "";
|
||||
|
||||
hr = m_spClientSite->GetContainer(&pContainer);
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
hr = pContainer->QueryInterface(IID_IHTMLDocument, (void
|
||||
**)&pHTML);
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
pContainer->Release();
|
||||
return "";
|
||||
}
|
||||
|
||||
hr = pHTML->get_Script(&pScript);
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
pContainer->Release();
|
||||
pHTML->Release();
|
||||
return "";
|
||||
}
|
||||
|
||||
DISPID idMethod = 0;
|
||||
std::string smethod = name;
|
||||
std::wstring wmethod = WebCommon::StringToWString(smethod);
|
||||
OLECHAR FAR* sMethod = (OLECHAR FAR*)wmethod.c_str();
|
||||
hr = pScript->GetIDsOfNames(IID_NULL, &sMethod, 1, LOCALE_SYSTEM_DEFAULT,&idMethod);
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
pContainer->Release();
|
||||
pHTML->Release();
|
||||
return "";
|
||||
}
|
||||
|
||||
// setup arguments and return value variants
|
||||
|
||||
VARIANT pVarRet = {0};
|
||||
|
||||
VariantInit(&pVarRet);
|
||||
|
||||
if (numArguments <= 1)
|
||||
{
|
||||
DISPPARAMS dpNoArgs = {NULL, NULL, 0, 0};
|
||||
hr = pScript->Invoke(idMethod, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD,
|
||||
&dpNoArgs, &pVarRet, NULL, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
DISPPARAMS params;
|
||||
VARIANTARG args[256];
|
||||
std::wstring wargs[256];
|
||||
|
||||
for (LONG i = 0; i < numArguments - 1; i++ )
|
||||
{
|
||||
VariantInit(&args[i]);
|
||||
// Invoke wants these in reverse order
|
||||
std::string s = argv[numArguments - i - 1];
|
||||
wargs[i] = WebCommon::StringToWString(s);
|
||||
args[i].vt = VT_BSTR;
|
||||
args[i].bstrVal = SysAllocString(wargs[i].c_str());
|
||||
}
|
||||
|
||||
params.cArgs = numArguments - 1;
|
||||
params.rgdispidNamedArgs = NULL;
|
||||
params.cNamedArgs = 0;
|
||||
params.rgvarg = args;
|
||||
|
||||
// whew, actually call the Javascript
|
||||
hr = pScript->Invoke(idMethod, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD,
|
||||
¶ms, &pVarRet, NULL, NULL);
|
||||
|
||||
for (LONG i = 0; i < numArguments - 1; i++ )
|
||||
{
|
||||
SysFreeString(args[i].bstrVal);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
pContainer->Release();
|
||||
pHTML->Release();
|
||||
return "";
|
||||
}
|
||||
|
||||
VariantChangeType(&pVarRet, &pVarRet, 0, VT_BSTR);
|
||||
|
||||
std::wstring wstr;
|
||||
std::string sstr;
|
||||
static char ret[4096];
|
||||
|
||||
wstr.assign(pVarRet.bstrVal);
|
||||
sstr = WebCommon::WStringToString(wstr);
|
||||
strcpy_s(ret, sstr.c_str());
|
||||
|
||||
pContainer->Release();
|
||||
pHTML->Release();
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
// handle the actual export (once we're actually all ready to go)
|
||||
void CIEWebGameCtrl::internalExportFunction(const JavasScriptExport& jsexport)
|
||||
{
|
||||
torque_exportstringcallback(MyStringCallback,"JS",jsexport.jsCallback.c_str(),"",jsexport.numArguments,jsexport.numArguments);
|
||||
}
|
||||
|
||||
// plugin.exportFunction("MyJavascriptFunction",3); - export a Javascript function to the Torque 3D console system via its name and argument count
|
||||
// If we haven't initialized Torque 3D yet, cache it
|
||||
STDMETHODIMP CIEWebGameCtrl::exportFunction(BSTR callback, LONG numArguments)
|
||||
{
|
||||
JavasScriptExport jsexport;
|
||||
std::wstring wstr;
|
||||
|
||||
wstr.assign(callback);
|
||||
jsexport.jsCallback = WebCommon::WStringToString(wstr);
|
||||
jsexport.numArguments = numArguments;
|
||||
|
||||
if (!mInitialized)
|
||||
{
|
||||
//queue it up
|
||||
mJavaScriptExports.push_back(jsexport);
|
||||
}
|
||||
else
|
||||
{
|
||||
internalExportFunction(jsexport);
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
// Our web deployment is installer based, no code signing necessary
|
||||
STDMETHODIMP CIEWebGameCtrl::GetInterfaceSafetyOptions(REFIID riid,
|
||||
DWORD *pdwSupportedOptions,DWORD *pdwEnabledOptions)
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP CIEWebGameCtrl::SetInterfaceSafetyOptions(REFIID riid,
|
||||
DWORD dwOptionSetMask,DWORD dwEnabledOptions)
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
177
Templates/Full/web/source/activex/IEWebGameCtrl.h
Normal file
177
Templates/Full/web/source/activex/IEWebGameCtrl.h
Normal file
|
|
@ -0,0 +1,177 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// Torque 3D web deployment for Internet Explorer (ActiveX)
|
||||
|
||||
#pragma once
|
||||
#include "resource.h" // main symbols
|
||||
#include <atlctl.h>
|
||||
#include "IEWebGamePlugin_i.h"
|
||||
#include "IEWebGameWindow.h"
|
||||
|
||||
#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
|
||||
#error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms."
|
||||
#endif
|
||||
|
||||
// The heavy lifting is done by our game control (which inherits from WebGameWindow)
|
||||
|
||||
// CIEWebGameCtrl
|
||||
class ATL_NO_VTABLE CIEWebGameCtrl :
|
||||
public CComObjectRootEx<CComSingleThreadModel>,
|
||||
public CStockPropImpl<CIEWebGameCtrl, IIEWebGameCtrl>,
|
||||
public IPersistStreamInitImpl<CIEWebGameCtrl>,
|
||||
public IOleControlImpl<CIEWebGameCtrl>,
|
||||
public IOleObjectImpl<CIEWebGameCtrl>,
|
||||
public IOleInPlaceActiveObjectImpl<CIEWebGameCtrl>,
|
||||
public IViewObjectExImpl<CIEWebGameCtrl>,
|
||||
public IOleInPlaceObjectWindowlessImpl<CIEWebGameCtrl>,
|
||||
public IObjectSafetyImpl<CIEWebGameCtrl, INTERFACESAFE_FOR_UNTRUSTED_CALLER>,
|
||||
public CComCoClass<CIEWebGameCtrl, &CLSID_IEWebGameCtrl>,
|
||||
public CComControl<CIEWebGameCtrl, WebGameWindow>
|
||||
{
|
||||
public:
|
||||
|
||||
|
||||
|
||||
DECLARE_OLEMISC_STATUS(OLEMISC_RECOMPOSEONRESIZE |
|
||||
OLEMISC_CANTLINKINSIDE |
|
||||
OLEMISC_INSIDEOUT |
|
||||
OLEMISC_ACTIVATEWHENVISIBLE |
|
||||
OLEMISC_SETCLIENTSITEFIRST
|
||||
)
|
||||
|
||||
DECLARE_REGISTRY_RESOURCEID(IDR_IEWEBGAMECTRL)
|
||||
|
||||
|
||||
BEGIN_COM_MAP(CIEWebGameCtrl)
|
||||
COM_INTERFACE_ENTRY(IIEWebGameCtrl)
|
||||
COM_INTERFACE_ENTRY(IDispatch)
|
||||
COM_INTERFACE_ENTRY(IViewObjectEx)
|
||||
COM_INTERFACE_ENTRY(IViewObject2)
|
||||
COM_INTERFACE_ENTRY(IViewObject)
|
||||
COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless)
|
||||
COM_INTERFACE_ENTRY(IOleInPlaceObject)
|
||||
COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless)
|
||||
COM_INTERFACE_ENTRY(IOleInPlaceActiveObject)
|
||||
COM_INTERFACE_ENTRY(IOleControl)
|
||||
COM_INTERFACE_ENTRY(IOleObject)
|
||||
COM_INTERFACE_ENTRY(IPersistStreamInit)
|
||||
COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IObjectSafety, IObjectSafety)
|
||||
|
||||
END_COM_MAP()
|
||||
|
||||
BEGIN_PROP_MAP(CIEWebGameCtrl)
|
||||
PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
|
||||
PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
|
||||
// Example entries
|
||||
// PROP_ENTRY_TYPE("Property Name", dispid, clsid, vtType)
|
||||
// PROP_PAGE(CLSID_StockColorPage)
|
||||
END_PROP_MAP()
|
||||
|
||||
|
||||
BEGIN_MSG_MAP(WebGameWindow)
|
||||
CHAIN_MSG_MAP(WebGameWindow)
|
||||
DEFAULT_REFLECTION_HANDLER()
|
||||
END_MSG_MAP()
|
||||
|
||||
// Handler prototypes:
|
||||
// LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||
// LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
|
||||
// LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
|
||||
|
||||
// IViewObjectEx
|
||||
DECLARE_VIEW_STATUS(0)
|
||||
|
||||
// IIEWebGameCtrl
|
||||
public:
|
||||
|
||||
static CIEWebGameCtrl* sInstance;
|
||||
|
||||
CIEWebGameCtrl()
|
||||
{
|
||||
m_bWindowOnly = TRUE;
|
||||
sInstance = this;
|
||||
mInitialized = false;
|
||||
}
|
||||
|
||||
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
||||
|
||||
HRESULT FinalConstruct()
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
void FinalRelease()
|
||||
{
|
||||
}
|
||||
|
||||
// the javascript accessible methods which can be called our on plugin object
|
||||
|
||||
// plugin.getVariable("$MyVariable"); - get a Torque 3D console variable
|
||||
STDMETHOD(getVariable)(BSTR name, BSTR* value);
|
||||
|
||||
// plugin.setVariable("$MyVariable", 42); - set a Torque 3D console variable
|
||||
STDMETHOD(setVariable)(BSTR name, BSTR value);
|
||||
|
||||
// var result = plugin.callScript("mySecureFunction('one', 'two', 'three');"); - call a TorqueScript function marked as secure in webConfig.h with supplied arguments
|
||||
STDMETHOD(callScript)(BSTR code, BSTR* retValue);
|
||||
|
||||
// plugin.exportFunction("MyJavascriptFunction",3); - export a Javascript function to the Torque 3D console system via its name and argument count
|
||||
STDMETHOD(exportFunction)(BSTR name, LONG numArguments);
|
||||
|
||||
// plugin.startup(); - called once web page is fully loaded and plugin (including Torque 3D) is initialized
|
||||
STDMETHOD(startup)();
|
||||
|
||||
// TorqueScript -> Javascript call handling
|
||||
const char* callFunction(const char* name, LONG numArguments, const char* argv[]);
|
||||
|
||||
// our plugin requires no signing as it is installer based
|
||||
STDMETHOD(GetInterfaceSafetyOptions)(REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions);
|
||||
STDMETHOD(SetInterfaceSafetyOptions)(REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
// these can be added on the page before we're initialized, so we cache them at startup
|
||||
typedef struct JavasScriptExport
|
||||
{
|
||||
std::string jsCallback; //javascript function name
|
||||
UINT numArguments; //the number of arguments it takes
|
||||
};
|
||||
|
||||
std::vector<JavasScriptExport> mJavaScriptExports;
|
||||
|
||||
// actually handle the export (once Torque 3D is fully initialized)
|
||||
void internalExportFunction(const JavasScriptExport& jsexport);
|
||||
|
||||
|
||||
BOOL mInitialized;
|
||||
|
||||
// checks a given domain against the allowed domains in webConfig.h
|
||||
bool checkDomain();
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
OBJECT_ENTRY_AUTO(__uuidof(IEWebGameCtrl), CIEWebGameCtrl)
|
||||
34
Templates/Full/web/source/activex/IEWebGameCtrl.rgs
Normal file
34
Templates/Full/web/source/activex/IEWebGameCtrl.rgs
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
HKCR
|
||||
{
|
||||
IEFullPlugin.IEWebGameCtrl.1 = s 'IEWebGameCtrl Class'
|
||||
{
|
||||
CLSID = s '{D62D1B36-253D-4218-B033-5ACE0B42B8BF}'
|
||||
}
|
||||
IEFullPlugin.IEWebGameCtrl = s 'IEWebGameCtrl Class'
|
||||
{
|
||||
CLSID = s '{D62D1B36-253D-4218-B033-5ACE0B42B8BF}'
|
||||
CurVer = s 'IEFullPlugin.IEWebGameCtrl.1'
|
||||
}
|
||||
NoRemove CLSID
|
||||
{
|
||||
ForceRemove {D62D1B36-253D-4218-B033-5ACE0B42B8BF} = s 'IEWebGameCtrl Class'
|
||||
{
|
||||
ProgID = s 'IEFullPlugin.IEWebGameCtrl.1'
|
||||
VersionIndependentProgID = s 'IEFullPlugin.IEWebGameCtrl'
|
||||
ForceRemove 'Programmable'
|
||||
InprocServer32 = s '%MODULE%'
|
||||
{
|
||||
val ThreadingModel = s 'Apartment'
|
||||
}
|
||||
val AppID = s '%APPID%'
|
||||
ForceRemove 'Control'
|
||||
ForceRemove 'ToolboxBitmap32' = s '%MODULE%, 102'
|
||||
'MiscStatus' = s '0'
|
||||
{
|
||||
'1' = s '%OLEMISC%'
|
||||
}
|
||||
'TypeLib' = s '{5240D24D-FBCE-4AF2-99FC-4C7AD4318E91}'
|
||||
'Version' = s '1.0'
|
||||
}
|
||||
}
|
||||
}
|
||||
91
Templates/Full/web/source/activex/IEWebGamePlugin.cpp
Normal file
91
Templates/Full/web/source/activex/IEWebGamePlugin.cpp
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "resource.h"
|
||||
#include "IEWebGamePlugin_i.h"
|
||||
#include "dllmain.h"
|
||||
|
||||
// Used to determine whether the DLL can be unloaded by OLE
|
||||
STDAPI DllCanUnloadNow(void)
|
||||
{
|
||||
return _AtlModule.DllCanUnloadNow();
|
||||
}
|
||||
|
||||
|
||||
// Returns a class factory to create an object of the requested type
|
||||
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
|
||||
{
|
||||
return _AtlModule.DllGetClassObject(rclsid, riid, ppv);
|
||||
}
|
||||
|
||||
|
||||
// DllRegisterServer - Adds entries to the system registry
|
||||
STDAPI DllRegisterServer(void)
|
||||
{
|
||||
// registers object, typelib and all interfaces in typelib
|
||||
HRESULT hr = _AtlModule.DllRegisterServer();
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
||||
// DllUnregisterServer - Removes entries from the system registry
|
||||
STDAPI DllUnregisterServer(void)
|
||||
{
|
||||
HRESULT hr = _AtlModule.DllUnregisterServer();
|
||||
return hr;
|
||||
}
|
||||
|
||||
// DllInstall - Adds/Removes entries to the system registry per user
|
||||
// per machine.
|
||||
STDAPI DllInstall(BOOL bInstall, LPCWSTR pszCmdLine)
|
||||
{
|
||||
HRESULT hr = E_FAIL;
|
||||
static const wchar_t szUserSwitch[] = _T("user");
|
||||
|
||||
if (pszCmdLine != NULL)
|
||||
{
|
||||
if (_wcsnicmp(pszCmdLine, szUserSwitch, _countof(szUserSwitch)) == 0)
|
||||
{
|
||||
#if (_MSC_VER >= 1500) //vs2008 or higher
|
||||
AtlSetPerUserRegistration(true);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
if (bInstall)
|
||||
{
|
||||
hr = DllRegisterServer();
|
||||
if (FAILED(hr))
|
||||
{
|
||||
DllUnregisterServer();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
hr = DllUnregisterServer();
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
||||
8
Templates/Full/web/source/activex/IEWebGamePlugin.def
Normal file
8
Templates/Full/web/source/activex/IEWebGamePlugin.def
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
; IEWebGamePlugin.def : Declares the module parameters.
|
||||
|
||||
EXPORTS
|
||||
DllCanUnloadNow PRIVATE
|
||||
DllGetClassObject PRIVATE
|
||||
DllRegisterServer PRIVATE
|
||||
DllUnregisterServer PRIVATE
|
||||
DllInstall PRIVATE
|
||||
46
Templates/Full/web/source/activex/IEWebGamePlugin.idl
Normal file
46
Templates/Full/web/source/activex/IEWebGamePlugin.idl
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
// IEWebGamePlugin.idl : IDL source for IEWebGamePlugin
|
||||
//
|
||||
|
||||
// This file will be processed by the MIDL tool to
|
||||
// produce the type library (IEWebGamePlugin.tlb) and marshalling code.
|
||||
|
||||
#include "olectl.h"
|
||||
import "oaidl.idl";
|
||||
import "ocidl.idl";
|
||||
|
||||
[
|
||||
object,
|
||||
uuid(5240D24D-FBCE-4AF2-99FC-4C7AD4318E91),
|
||||
dual,
|
||||
nonextensible,
|
||||
helpstring("IIEWebGameCtrl Interface"),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IIEWebGameCtrl : IDispatch{
|
||||
[propget, bindable, requestedit, id(DISPID_HWND)]
|
||||
HRESULT HWND([out, retval]LONG_PTR* pHWND);
|
||||
[id(1), helpstring("method getVariable")] HRESULT getVariable([in] BSTR name, [out, retval] BSTR* value);
|
||||
[id(2), helpstring("method setVariable")] HRESULT setVariable([in] BSTR name, [in] BSTR value);
|
||||
[id(3), helpstring("method export")] HRESULT exportFunction([in] BSTR callback, [in] LONG numArguments);
|
||||
[id(4), helpstring("method callScript")] HRESULT callScript([in] BSTR code, [out, retval] BSTR* retValue);
|
||||
[id(5), helpstring("method startup")] HRESULT startup();
|
||||
};
|
||||
|
||||
[
|
||||
uuid(FC143328-E29C-4BC4-8C83-618FEB562532),
|
||||
version(1.0),
|
||||
helpstring("IEFullPlugin 1.0 Type Library")
|
||||
]
|
||||
library IEFullPluginLib
|
||||
{
|
||||
importlib("stdole2.tlb");
|
||||
[
|
||||
uuid(D62D1B36-253D-4218-B033-5ACE0B42B8BF),
|
||||
control,
|
||||
helpstring("IEWebGameCtrl Class")
|
||||
]
|
||||
coclass IEWebGameCtrl
|
||||
{
|
||||
[default] interface IIEWebGameCtrl;
|
||||
};
|
||||
};
|
||||
135
Templates/Full/web/source/activex/IEWebGamePlugin.rc
Normal file
135
Templates/Full/web/source/activex/IEWebGamePlugin.rc
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
#include "targetver.h"
|
||||
#endif
|
||||
#include "winres.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
|
||||
"#ifndef APSTUDIO_INVOKED\r\n"
|
||||
"#include ""targetver.h""\r\n"
|
||||
"#endif\r\n"
|
||||
"#include ""winres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"1 TYPELIB ""IEWebGamePlugin.tlb""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 1,0,0,1
|
||||
PRODUCTVERSION 1,0
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x4L
|
||||
FILETYPE 0x2L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904e4"
|
||||
BEGIN
|
||||
VALUE "PluginType", "ActiveX"
|
||||
VALUE "CompanyName", "My Game Company"
|
||||
VALUE "FileDescription", "ActiveX Web Game Plugin"
|
||||
VALUE "FileVersion", "1.0.0.1"
|
||||
VALUE "LegalCopyright", "(c) My Game Company. All rights reserved."
|
||||
VALUE "InternalName", "IE Full Plugin.dll"
|
||||
VALUE "OriginalFilename", "IE Full Plugin.dll"
|
||||
VALUE "ProductName", "My Web Game"
|
||||
VALUE "ProductVersion", "1.0"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1252
|
||||
END
|
||||
END
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// REGISTRY
|
||||
//
|
||||
|
||||
IDR_IEWEBGAMEPLUGIN REGISTRY "IEWebGamePlugin.rgs"
|
||||
IDR_IEWEBGAMECTRL REGISTRY "IEWebGameCtrl.rgs"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Bitmap
|
||||
//
|
||||
|
||||
IDB_IEWEBGAMECTRL BITMAP "IEWebGameCtrl.bmp"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// String Table
|
||||
//
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_PROJNAME "IEFullPlugin"
|
||||
END
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
1 TYPELIB "IEWebGamePlugin.tlb"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
||||
11
Templates/Full/web/source/activex/IEWebGamePlugin.rgs
Normal file
11
Templates/Full/web/source/activex/IEWebGamePlugin.rgs
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
HKCR
|
||||
{
|
||||
NoRemove AppID
|
||||
{
|
||||
'%APPID%' = s 'IEFullPlugin'
|
||||
'IEFullPlugin.DLL'
|
||||
{
|
||||
val AppID = s '%APPID%'
|
||||
}
|
||||
}
|
||||
}
|
||||
182
Templates/Full/web/source/activex/IEWebGameWindow.cpp
Normal file
182
Templates/Full/web/source/activex/IEWebGameWindow.cpp
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include "StdAfx.h"
|
||||
#include <shlobj.h>
|
||||
#include "IEWebGameWindow.h"
|
||||
#include "../common/webCommon.h"
|
||||
|
||||
|
||||
// We hook the keyboard at application level so we TAB, Backspace, other accelerator combos
|
||||
// are captured and don't cause us grief
|
||||
static HHOOK hHook = NULL;
|
||||
|
||||
// Hook procedure for WH_GETMESSAGE hook type.
|
||||
LRESULT CALLBACK GetMessageProc(int nCode, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
// If this is a keystrokes message, translate it in controls'
|
||||
LPMSG lpMsg = (LPMSG) lParam;
|
||||
if( (nCode >= 0) &&
|
||||
PM_REMOVE == wParam &&
|
||||
(lpMsg->message >= WM_KEYFIRST && lpMsg->message <= WM_KEYLAST) )
|
||||
{
|
||||
if (torque_directmessage)
|
||||
{
|
||||
// call directly into the Torque 3D message queue, bypassing the windows event queue
|
||||
// as we're hooking into the application level processing, this would cause a hang
|
||||
torque_directmessage(lpMsg->message, lpMsg->wParam, lpMsg->lParam);
|
||||
|
||||
// The value returned from this hookproc is ignored, and it cannot
|
||||
// be used to tell Windows the message has been handled. To avoid
|
||||
// further processing, convert the message to WM_NULL before
|
||||
// returning.
|
||||
lpMsg->message = WM_NULL;
|
||||
lpMsg->lParam = 0L;
|
||||
lpMsg->wParam = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Passes the hook information to the next hook procedure in
|
||||
// the current hook chain.
|
||||
return ::CallNextHookEx(hHook, nCode, wParam, lParam);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
WebGameWindow::WebGameWindow(void)
|
||||
{
|
||||
mTimer = false;
|
||||
mInitialized = false;
|
||||
}
|
||||
|
||||
WebGameWindow::~WebGameWindow(void)
|
||||
{
|
||||
//handling threads in event callbacks (onDestroy for instance) seems to cause loads of problems (deadlocks, etc)
|
||||
if (mInitialized)
|
||||
WebCommon::ShutdownTorque3D();
|
||||
}
|
||||
|
||||
// we use a timer to update the Torque 3D game loop (tick) and handle rendering
|
||||
VOID CALLBACK MyTimerProc(
|
||||
HWND hwnd, // handle to window for timer messages
|
||||
UINT message, // WM_TIMER message
|
||||
UINT idTimer, // timer identifier
|
||||
DWORD dwTime) // current system time
|
||||
{
|
||||
static bool reentrant = false;
|
||||
|
||||
if (!reentrant)
|
||||
{
|
||||
reentrant = true;
|
||||
torque_enginetick();
|
||||
reentrant = false;
|
||||
}
|
||||
}
|
||||
|
||||
LRESULT
|
||||
WebGameWindow::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||
{
|
||||
|
||||
bHandled = TRUE;
|
||||
|
||||
// check that the domain we're loading the plugin from is allowed
|
||||
if (!checkDomain())
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
// load up the Torque 3D shared library and initialize it
|
||||
if (!WebCommon::InitTorque3D(this->m_hWnd))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
mTimer = true;
|
||||
mInitialized = true;
|
||||
|
||||
// fire up timer for ticking Torque 3D update
|
||||
SetTimer( 1, // timer identifier
|
||||
1, // 1 millisecond
|
||||
(TIMERPROC) MyTimerProc); // timer callback
|
||||
|
||||
hHook = ::SetWindowsHookEx(
|
||||
WH_GETMESSAGE,
|
||||
GetMessageProc,
|
||||
WebCommon::gPluginModule,
|
||||
GetCurrentThreadId());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/**
|
||||
*/
|
||||
LRESULT
|
||||
WebGameWindow::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||
{
|
||||
// let the default handler run
|
||||
bHandled = FALSE;
|
||||
|
||||
// kill update timer
|
||||
if (mTimer)
|
||||
KillTimer( 1);
|
||||
mTimer = false;
|
||||
|
||||
if (hHook)
|
||||
::UnhookWindowsHookEx (hHook);
|
||||
|
||||
hHook = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/**
|
||||
*/
|
||||
|
||||
LRESULT
|
||||
WebGameWindow::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||
{
|
||||
// let the default handler run
|
||||
bHandled = FALSE;
|
||||
|
||||
// resize the Torque 3D child window depending on our browser's parent window
|
||||
if (mInitialized && torque_resizewindow)
|
||||
{
|
||||
int width = (int) LOWORD( lParam );
|
||||
int height = (int) HIWORD( lParam );
|
||||
torque_resizewindow(width,height);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/**
|
||||
*/
|
||||
LRESULT
|
||||
WebGameWindow::OnMouseActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||
{
|
||||
return MA_ACTIVATE;
|
||||
}
|
||||
|
||||
65
Templates/Full/web/source/activex/IEWebGameWindow.h
Normal file
65
Templates/Full/web/source/activex/IEWebGameWindow.h
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
// "Platform" window specifics to keep IE plugin consistent with Safari/Firefox/Chrome
|
||||
|
||||
class WebGameWindow : public CWindowImpl<WebGameWindow>
|
||||
{
|
||||
public:
|
||||
WebGameWindow();
|
||||
virtual ~WebGameWindow();
|
||||
|
||||
DECLARE_WND_CLASS(_T("WebGameCtrl:WebGameWindow"))
|
||||
|
||||
BEGIN_MSG_MAP(WebGameWindow)
|
||||
MESSAGE_HANDLER(WM_CREATE, OnCreate)
|
||||
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
|
||||
MESSAGE_HANDLER(WM_MOUSEACTIVATE, OnMouseActivate);
|
||||
MESSAGE_HANDLER(WM_SIZE, OnSize);
|
||||
END_MSG_MAP()
|
||||
|
||||
public:
|
||||
|
||||
// message handlers (all window based)
|
||||
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||
LRESULT OnMouseActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||
|
||||
protected:
|
||||
|
||||
// // checks a given domain against the allowed domains in webConfig.h (defined in IEWebGamePlugin)
|
||||
virtual bool checkDomain() = 0;
|
||||
|
||||
private:
|
||||
|
||||
bool mTimer;
|
||||
bool mInitialized;
|
||||
|
||||
};
|
||||
|
||||
38
Templates/Full/web/source/activex/dllmain.cpp
Normal file
38
Templates/Full/web/source/activex/dllmain.cpp
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// dllmain.cpp : Implementation of DllMain.
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "resource.h"
|
||||
#include "IEWebGamePlugin_i.h"
|
||||
#include "dllmain.h"
|
||||
#include "../common/webCommon.h"
|
||||
|
||||
CIEWebGamePluginModule _AtlModule;
|
||||
|
||||
// DLL Entry Point
|
||||
extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
|
||||
{
|
||||
WebCommon::gPluginModule = (HMODULE) hInstance;
|
||||
return _AtlModule.DllMain(dwReason, lpReserved);
|
||||
}
|
||||
32
Templates/Full/web/source/activex/dllmain.h
Normal file
32
Templates/Full/web/source/activex/dllmain.h
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// dllmain.h : Declaration of module class.
|
||||
|
||||
class CIEWebGamePluginModule : public CAtlDllModuleT< CIEWebGamePluginModule >
|
||||
{
|
||||
public :
|
||||
DECLARE_LIBID(LIBID_IEFullPluginLib)
|
||||
DECLARE_REGISTRY_APPID_RESOURCEID(IDR_IEWEBGAMEPLUGIN, "{AB7615A3-A918-488B-B128-96DD62D0AE36}")
|
||||
};
|
||||
|
||||
extern class CIEWebGamePluginModule _AtlModule;
|
||||
19
Templates/Full/web/source/activex/resource.h
Normal file
19
Templates/Full/web/source/activex/resource.h
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by IEWebGamePlugin.rc
|
||||
//
|
||||
#define IDS_PROJNAME 100
|
||||
#define IDR_IEWEBGAMEPLUGIN 101
|
||||
#define IDB_IEWEBGAMECTRL 102
|
||||
#define IDR_IEWEBGAMECTRL 103
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 201
|
||||
#define _APS_NEXT_COMMAND_VALUE 32768
|
||||
#define _APS_NEXT_CONTROL_VALUE 201
|
||||
#define _APS_NEXT_SYMED_VALUE 104
|
||||
#endif
|
||||
#endif
|
||||
27
Templates/Full/web/source/activex/stdafx.cpp
Normal file
27
Templates/Full/web/source/activex/stdafx.cpp
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// stdafx.cpp : source file that includes just the standard includes
|
||||
// IEWebGamePlugin.pch will be the pre-compiled header
|
||||
// stdafx.obj will contain the pre-compiled type information
|
||||
|
||||
#include "stdafx.h"
|
||||
45
Templates/Full/web/source/activex/stdafx.h
Normal file
45
Templates/Full/web/source/activex/stdafx.h
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// stdafx.h : include file for standard system include files,
|
||||
// or project specific include files that are used frequently,
|
||||
// but are changed infrequently
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef STRICT
|
||||
#define STRICT
|
||||
#endif
|
||||
|
||||
#include "targetver.h"
|
||||
|
||||
#define _ATL_APARTMENT_THREADED
|
||||
#define _ATL_NO_AUTOMATIC_NAMESPACE
|
||||
|
||||
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit
|
||||
|
||||
#include "resource.h"
|
||||
#include <atlbase.h>
|
||||
#include <atlcom.h>
|
||||
#include <atlctl.h>
|
||||
|
||||
using namespace ATL;
|
||||
47
Templates/Full/web/source/activex/targetver.h
Normal file
47
Templates/Full/web/source/activex/targetver.h
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
// The following macros define the minimum required platform. The minimum required platform
|
||||
// is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run
|
||||
// your application. The macros work by enabling all features available on platform versions up to and
|
||||
// including the version specified.
|
||||
|
||||
// Modify the following defines if you have to target a platform prior to the ones specified below.
|
||||
// Refer to MSDN for the latest info on corresponding values for different platforms.
|
||||
#ifndef WINVER // Specifies that the minimum required platform is Windows Vista.
|
||||
#define WINVER 0x0600 // Change this to the appropriate value to target other versions of Windows.
|
||||
#endif
|
||||
|
||||
#ifndef _WIN32_WINNT // Specifies that the minimum required platform is Windows Vista.
|
||||
#define _WIN32_WINNT 0x0600 // Change this to the appropriate value to target other versions of Windows.
|
||||
#endif
|
||||
|
||||
#ifndef _WIN32_WINDOWS // Specifies that the minimum required platform is Windows 98.
|
||||
#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.
|
||||
#endif
|
||||
|
||||
#ifndef _WIN32_IE // Specifies that the minimum required platform is Internet Explorer 7.0.
|
||||
#define _WIN32_IE 0x0700 // Change this to the appropriate value to target other versions of IE.
|
||||
#endif
|
||||
|
||||
727
Templates/Full/web/source/common/webCommon.cpp
Normal file
727
Templates/Full/web/source/common/webCommon.cpp
Normal file
|
|
@ -0,0 +1,727 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include "webConfig.h"
|
||||
#include "webCommon.h"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
// Platform specific shared library handling
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
#pragma warning( disable : 4996)
|
||||
|
||||
#define TORQUE_OPEN LoadLibraryA
|
||||
#define TORQUE_FUNCTION GetProcAddress
|
||||
#define TORQUE_CLOSE FreeLibrary
|
||||
|
||||
#define strncasecmp strnicmp
|
||||
#define strcasecmp stricmp
|
||||
|
||||
#else // Mac
|
||||
|
||||
#define TORQUE_OPEN(path) dlopen(path, RTLD_LAZY | RTLD_LOCAL)
|
||||
#define TORQUE_FUNCTION dlsym
|
||||
#define TORQUE_CLOSE dlclose
|
||||
|
||||
#endif
|
||||
|
||||
// C Interface exported from the Torque 3D DLL (or Bundle on Mac)
|
||||
|
||||
extern "C"
|
||||
{
|
||||
// initialize Torque 3D including argument handling
|
||||
bool (*torque_engineinit)(int argc, const char **argv) = NULL;
|
||||
|
||||
// tick Torque 3D's main loop
|
||||
int (*torque_enginetick)() = NULL;
|
||||
|
||||
// set Torque 3D into web deployment mode (disable fullscreen exlusive mode, etc)
|
||||
int (*torque_setwebdeployment)() = NULL;
|
||||
|
||||
// shutdown the engine
|
||||
bool (*torque_engineshutdown)() = NULL;
|
||||
|
||||
// signal an engine shutdown (as with the quit(); console command)
|
||||
void (*torque_enginesignalshutdown)() = NULL;
|
||||
|
||||
// reset the engine, unloading any current level and returning to the main menu
|
||||
void (*torque_reset)() = NULL;
|
||||
|
||||
// Evaluate arbitrary TorqueScript (ONLY CALL torque_evaluate FROM TRUSTED CODE!!!)
|
||||
const char* (*torque_evaluate)(const char* code) = NULL;
|
||||
|
||||
// Get a console variable
|
||||
const char* (*torque_getvariable)(const char* name) = NULL;
|
||||
// Set a console variable
|
||||
void (*torque_setvariable)(const char* name, const char* value) = NULL;
|
||||
|
||||
// Export a function to the Torque 3D console system which matches the StringCallback function prototype
|
||||
// specify the nameSpace, functionName, usage, min and max arguments
|
||||
void (*torque_exportstringcallback)(StringCallback cb, const char *nameSpace, const char *funcName, const char* usage, int minArgs, int maxArgs) = NULL;
|
||||
|
||||
// Set a TorqueScript console function as secure and available for JavaScript via the callScript plugin method
|
||||
void (*torque_addsecurefunction)(const char* nameSpace, const char* fname) = NULL;
|
||||
// Call a TorqueScript console function that has been marked as secure
|
||||
const char* (*torque_callsecurefunction)(const char* nameSpace, const char* name, int argc, const char ** argv) = NULL;
|
||||
|
||||
// resize the Torque 3D child window to the specified width and height
|
||||
void (*torque_resizewindow)(int width, int height) = NULL;
|
||||
|
||||
#ifndef WIN32
|
||||
// On Mac, handle the parent safari window
|
||||
void (*torque_setsafariwindow)(NSWindow* window, int32 x, int32 y, int32 width, int32 height) = NULL;
|
||||
// On Mac, sets the executable path
|
||||
void (*torque_setexecutablepath)(const char *path) = NULL;
|
||||
#else
|
||||
// retrieve the render windows hwnd
|
||||
void* (*torque_gethwnd)() = NULL;
|
||||
|
||||
// directly add a message to the Torque 3D event queue, bypassing the Windows event queue
|
||||
// this is useful in the case of the IE plugin, where we are hooking into an application
|
||||
// level message, and posting to the windows queue would cause a hang
|
||||
void (*torque_directmessage)(unsigned int message, unsigned int wparam, unsigned int lparam) = NULL;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
namespace WebCommon
|
||||
{
|
||||
|
||||
std::string gPluginMIMEType;
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
HMODULE gTorque3DModule = NULL;
|
||||
HMODULE gPluginModule = 0;
|
||||
|
||||
// bring up a platform specific message box (used for error reporting)
|
||||
void MessageBox(void* parentWindow, const char* msg, const char* caption )
|
||||
{
|
||||
::MessageBoxA( (HWND) parentWindow, msg, caption, MB_OK|MB_ICONWARNING);
|
||||
}
|
||||
|
||||
// retrieve the game directory using the filename (which includes the full path) of the plugin DLL
|
||||
const char* GetGameDirectory()
|
||||
{
|
||||
static char dir[4096];
|
||||
|
||||
GetModuleFileNameA(gPluginModule, dir, 4096);
|
||||
|
||||
int i = strlen(dir) - 1;
|
||||
while (i>=0)
|
||||
{
|
||||
if (dir[i] == '\\' || dir[i] == '/')
|
||||
{
|
||||
dir[i] = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
i--;
|
||||
}
|
||||
|
||||
return dir;
|
||||
|
||||
}
|
||||
|
||||
// retrieve the name of our game DLL (includes Torque 3D engine) based on naming convention
|
||||
const char* GetGameLibrary()
|
||||
{
|
||||
char dir[4096];
|
||||
static char lib[4096];
|
||||
|
||||
lib[0] = 0;
|
||||
|
||||
GetModuleFileNameA(gPluginModule, dir, 4096);
|
||||
|
||||
int i = strlen(dir) - 1;
|
||||
while (i>=0)
|
||||
{
|
||||
if (dir[i] == '\\' || dir[i] == '/')
|
||||
{
|
||||
// copy, minus the "NP " or "IE " of plugin name
|
||||
#ifdef _DEBUG
|
||||
sprintf(lib, "%s_DEBUG.dll", &dir[i+4]);
|
||||
#else
|
||||
sprintf(lib, "%s.dll", &dir[i+4]);
|
||||
#endif
|
||||
return lib;
|
||||
}
|
||||
|
||||
// strip off end
|
||||
if (!strncmp(&dir[i], " Plugin", 7))
|
||||
dir[i] = 0;
|
||||
|
||||
i--;
|
||||
}
|
||||
|
||||
return lib;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
void* gTorque3DModule = NULL;
|
||||
NSBundle* gPluginBundle = NULL;
|
||||
|
||||
// bring up a platform specific message box (used for error reporting)
|
||||
void MessageBox(void* parentWindow, const char* msg, const char* caption )
|
||||
{
|
||||
|
||||
// convert title and message to NSStrings
|
||||
NSString *nsTitle = [NSString stringWithUTF8String:caption];
|
||||
NSString *nsMessage = [NSString stringWithUTF8String:msg];
|
||||
|
||||
|
||||
NSAlert *alert = [NSAlert alertWithMessageText:nsTitle
|
||||
defaultButton:@"OK"
|
||||
alternateButton:nil
|
||||
otherButton:nil
|
||||
informativeTextWithFormat:nsMessage];
|
||||
[alert runModal];
|
||||
}
|
||||
|
||||
NSBundle* GetPluginBundle()
|
||||
{
|
||||
if (gPluginBundle)
|
||||
return gPluginBundle;
|
||||
|
||||
NSDictionary *mimeTypes;
|
||||
NSString *mime;
|
||||
NSEnumerator *f;
|
||||
|
||||
NSArray *bundles = [NSBundle allBundles];
|
||||
for (int i = 0; i < [bundles count]; i++) {
|
||||
NSBundle *b = [bundles objectAtIndex:i];
|
||||
|
||||
mimeTypes=[b objectForInfoDictionaryKey:@"WebPluginMIMETypes"];
|
||||
|
||||
if (!mimeTypes)
|
||||
continue;
|
||||
|
||||
f=[mimeTypes keyEnumerator];
|
||||
|
||||
while((mime=[f nextObject]))
|
||||
{
|
||||
if (gPluginMIMEType == std::string([mime UTF8String]))
|
||||
{
|
||||
gPluginBundle = b;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return gPluginBundle;
|
||||
|
||||
}
|
||||
|
||||
// retrieve the game's install folder based on entries from our plugin's Info.plist
|
||||
const char* GetGameDirectory()
|
||||
{
|
||||
static char gamePath[2048] = {'\0'};
|
||||
|
||||
if (gamePath[0])
|
||||
return gamePath;
|
||||
|
||||
NSBundle* pluginBundle = GetPluginBundle();
|
||||
|
||||
if (!pluginBundle)
|
||||
return NULL;
|
||||
|
||||
NSString *gameInstallPathKey = [NSString stringWithUTF8String:"GameInstallPath"];
|
||||
NSString *gameInstallPath = [pluginBundle objectForInfoDictionaryKey: gameInstallPathKey];
|
||||
|
||||
if (!gameInstallPath)
|
||||
return NULL;
|
||||
|
||||
strcpy(gamePath, [gameInstallPath UTF8String]);
|
||||
|
||||
if (!gamePath[0])
|
||||
return NULL;
|
||||
|
||||
return gamePath;
|
||||
}
|
||||
|
||||
// retrieve the game bundle (including Torque 3D engine) from the plugin Info.plist
|
||||
const char* GetGameLibrary()
|
||||
{
|
||||
static char libPath[2048] = {'\0'};
|
||||
|
||||
if (libPath[0])
|
||||
return libPath;
|
||||
|
||||
const char* gamePath = GetGameDirectory();
|
||||
|
||||
if (!gamePath)
|
||||
return NULL;
|
||||
|
||||
NSBundle* pluginBundle = GetPluginBundle();
|
||||
|
||||
if (!pluginBundle)
|
||||
return NULL;
|
||||
|
||||
// NSString* bundleIdentifier = [pluginBundle bundleIdentifier];
|
||||
|
||||
NSString *gameNameKey = [NSString stringWithUTF8String:"GameName"];
|
||||
NSString *gameName = [pluginBundle objectForInfoDictionaryKey: gameNameKey];
|
||||
|
||||
if (!gameName)
|
||||
return NULL;
|
||||
|
||||
const char* cgameName = [gameName UTF8String];
|
||||
|
||||
if (!cgameName[0])
|
||||
return NULL;
|
||||
|
||||
#ifdef DEBUG
|
||||
sprintf(libPath, "%s%s_DEBUG.app/Contents/Frameworks/%s Bundle.bundle/Contents/MacOS/%s Bundle", gamePath, cgameName, cgameName, cgameName);
|
||||
#else
|
||||
sprintf(libPath, "%s%s.app/Contents/Frameworks/%s Bundle.bundle/Contents/MacOS/%s Bundle", gamePath, cgameName, cgameName, cgameName);
|
||||
#endif
|
||||
|
||||
return libPath;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
bool ChangeToGameDirectory()
|
||||
{
|
||||
const char* gameDir = GetGameDirectory();
|
||||
|
||||
if (!gameDir)
|
||||
return false;
|
||||
|
||||
#ifdef WIN32
|
||||
return SetCurrentDirectoryA(gameDir);
|
||||
#else
|
||||
return (chdir(gameDir) == 0);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
// loads the Torque 3D shared library, sets web deployment mode, retrieves engine "C" interface
|
||||
bool InitTorque3D(void* platformWindow, int clipLeft, int clipTop, int clipRight, int clipBottom)
|
||||
{
|
||||
const char* gameDir = GetGameDirectory();
|
||||
const char* gameLib = GetGameLibrary();
|
||||
|
||||
if (gTorque3DModule)
|
||||
{
|
||||
WebCommon::MessageBox( 0, "This plugin allows only one instance", "Error");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!gameDir || !gameLib)
|
||||
{
|
||||
WebCommon::MessageBox( 0, "Unable to get game plugin information", "Error");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!ChangeToGameDirectory())
|
||||
return false;
|
||||
|
||||
std::string gameLibStr = gameLib;
|
||||
#ifdef WIN32
|
||||
// We want to use an absolute path to the game library
|
||||
gameLibStr = gameDir;
|
||||
WebCommon::ConvertToWindowsPathSep(gameLibStr);
|
||||
gameLibStr += "\\";
|
||||
gameLibStr += gameLib;
|
||||
#endif
|
||||
|
||||
gTorque3DModule = TORQUE_OPEN(gameLibStr.c_str());
|
||||
|
||||
if (!gTorque3DModule)
|
||||
{
|
||||
char error[4096];
|
||||
#ifdef WIN32
|
||||
sprintf(error, "Could not load game library: %s/%s. Please make sure you have the latest DirectX installed.", gameDir, gameLib);
|
||||
#else
|
||||
sprintf(error, "Could not load game library: %s/%s. ", gameDir, gameLib);
|
||||
#endif
|
||||
WebCommon::MessageBox( 0, error, "Error");
|
||||
return false;
|
||||
}
|
||||
|
||||
// snag all the exported functions of the "C" interface
|
||||
|
||||
torque_engineinit = (bool (*)(int argc, const char **argv))TORQUE_FUNCTION(gTorque3DModule, "torque_engineinit");
|
||||
torque_enginetick = (int (*)())TORQUE_FUNCTION(gTorque3DModule, "torque_enginetick");
|
||||
torque_setwebdeployment = (int (*)())TORQUE_FUNCTION(gTorque3DModule, "torque_setwebdeployment");
|
||||
torque_engineshutdown = (bool (*)())TORQUE_FUNCTION(gTorque3DModule, "torque_engineshutdown");
|
||||
torque_enginesignalshutdown = (void (*)())TORQUE_FUNCTION(gTorque3DModule, "torque_enginesignalshutdown");
|
||||
torque_reset = (void (*)())TORQUE_FUNCTION(gTorque3DModule, "torque_reset");
|
||||
torque_evaluate = (const char* (*)(const char* code))TORQUE_FUNCTION(gTorque3DModule, "torque_evaluate");
|
||||
|
||||
torque_getvariable = (const char* (*)(const char* name))TORQUE_FUNCTION(gTorque3DModule, "torque_getvariable");
|
||||
torque_setvariable = (void (*)(const char* name, const char* value))TORQUE_FUNCTION(gTorque3DModule, "torque_setvariable");
|
||||
torque_exportstringcallback = (void (*)(StringCallback cb, const char *nameSpace, const char *funcName, const char* usage, int minArgs, int maxArgs))TORQUE_FUNCTION(gTorque3DModule, "torque_exportstringcallback");
|
||||
|
||||
torque_addsecurefunction = (void (*)(const char* nameSpace, const char* name))TORQUE_FUNCTION(gTorque3DModule, "torque_addsecurefunction");
|
||||
torque_callsecurefunction = (const char* (*)(const char* nameSpace, const char* name, int argc, const char ** argv))TORQUE_FUNCTION(gTorque3DModule, "torque_callsecurefunction");
|
||||
|
||||
torque_resizewindow = (void (*)(int width, int height))TORQUE_FUNCTION(gTorque3DModule, "torque_resizewindow");
|
||||
|
||||
// check that we got them all
|
||||
|
||||
if (!torque_engineinit ||
|
||||
!torque_enginetick ||
|
||||
!torque_setwebdeployment ||
|
||||
!torque_engineshutdown ||
|
||||
!torque_enginesignalshutdown ||
|
||||
!torque_reset ||
|
||||
!torque_evaluate ||
|
||||
!torque_getvariable ||
|
||||
!torque_setvariable ||
|
||||
!torque_exportstringcallback ||
|
||||
!torque_addsecurefunction ||
|
||||
!torque_callsecurefunction ||
|
||||
!torque_resizewindow )
|
||||
{
|
||||
WebCommon::MessageBox( platformWindow, "The plugin could not be initialized (missing function exports)", "Error");
|
||||
TORQUE_CLOSE(gTorque3DModule);
|
||||
gTorque3DModule = NULL;
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifndef WIN32
|
||||
torque_setexecutablepath = (void (*)(const char *path)) dlsym(gTorque3DModule, "torque_setexecutablepath");
|
||||
torque_setsafariwindow = (void (*)(NSWindow* nswnd, int32, int32, int32, int32)) dlsym(gTorque3DModule, "torque_setsafariwindow");
|
||||
|
||||
if (!torque_setexecutablepath || !torque_setsafariwindow)
|
||||
{
|
||||
WebCommon::MessageBox( platformWindow, "The plugin could not be initialized (missing function exports)", "Error");
|
||||
TORQUE_CLOSE(gTorque3DModule);
|
||||
gTorque3DModule = NULL;
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
torque_gethwnd = (void* (*)())TORQUE_FUNCTION(gTorque3DModule, "torque_gethwnd");
|
||||
torque_directmessage = (void (*)(unsigned int message, unsigned int wparam, unsigned int lparam))TORQUE_FUNCTION(gTorque3DModule, "torque_directmessage");
|
||||
if (!torque_gethwnd || !torque_directmessage)
|
||||
{
|
||||
WebCommon::MessageBox( platformWindow, "The plugin could not be initialized (missing function exports)", "Error");
|
||||
TORQUE_CLOSE(gTorque3DModule);
|
||||
gTorque3DModule = NULL;
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
//tell Torque3D that we're a browser plugin
|
||||
torque_setwebdeployment();
|
||||
|
||||
const char* args[3];
|
||||
int argc;
|
||||
|
||||
#ifdef WIN32
|
||||
// windows uses a command line arg for parent window
|
||||
char parentWindow[256];
|
||||
argc = 3;
|
||||
sprintf(parentWindow, "%I64u", (unsigned __int64)platformWindow);
|
||||
args[0] = "game.exe"; //just to satisfy command line parsing
|
||||
args[1] = "-window";
|
||||
args[2] = parentWindow;
|
||||
#else
|
||||
|
||||
NSWindow* browserWindow = (NSWindow*) platformWindow;
|
||||
|
||||
// tell Torque 3D about our parent browser window
|
||||
// we initialize with zero size as the page hasn't completely loaded yet
|
||||
// so, the plugin hasn't been resized by the page and it is better to not show
|
||||
// anything than wrong extents
|
||||
torque_setsafariwindow( browserWindow, 0, 0, 0, 0);
|
||||
|
||||
argc = 1;
|
||||
args[0] = gameDir; // just to satisfy command line parsing
|
||||
|
||||
#endif
|
||||
|
||||
// initialize Torque 3D!
|
||||
if (!torque_engineinit(argc, args))
|
||||
{
|
||||
WebCommon::MessageBox( platformWindow, "The plugin could not be initialized (internal initialization error)", "Error");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// unloads the Torque 3D shared library (first signaling a shutdown for clean exit)
|
||||
void ShutdownTorque3D()
|
||||
{
|
||||
if (gTorque3DModule)
|
||||
{
|
||||
ChangeToGameDirectory();
|
||||
torque_enginesignalshutdown();
|
||||
torque_enginetick();
|
||||
torque_engineshutdown();
|
||||
TORQUE_CLOSE(gTorque3DModule);
|
||||
}
|
||||
|
||||
gTorque3DModule = NULL;
|
||||
|
||||
}
|
||||
|
||||
// checks a given domain against the allowed domains in webConfig.h
|
||||
bool CheckDomain(const char* url)
|
||||
{
|
||||
bool domainCheck = true;
|
||||
|
||||
#ifndef WEBDEPLOY_DOMAIN_CHECK
|
||||
domainCheck = false;
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
# ifdef WEBDEPLOY_DOMAIN_ALLOW_DEBUG
|
||||
domainCheck = false;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
if (!domainCheck)
|
||||
return true; // gets rid of "unreachable code" warning
|
||||
|
||||
if (strlen(url) > 512)
|
||||
return false;
|
||||
|
||||
if (strlen(url) < 5)
|
||||
return false;
|
||||
|
||||
//do not allow file when using domain checking
|
||||
if (!strncasecmp(url,"file",4))
|
||||
return false;
|
||||
|
||||
char curl[512] = {0};
|
||||
|
||||
unsigned int begin = 0;
|
||||
while(url[begin])
|
||||
{
|
||||
if (url[begin] == ':')
|
||||
{
|
||||
if (begin + 3 > strlen(url))
|
||||
return false;
|
||||
begin+=3; //skip ://
|
||||
break;
|
||||
}
|
||||
begin++;
|
||||
}
|
||||
|
||||
unsigned int end = begin;
|
||||
|
||||
while(end < strlen(url))
|
||||
{
|
||||
if (url[end] == '/')
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
end++;
|
||||
}
|
||||
|
||||
strcpy(curl, &url[begin]);
|
||||
curl[end-begin] = 0;
|
||||
|
||||
// iterate checking against our allowed domains
|
||||
for (int i = 0; gAllowedDomains[i]; i++)
|
||||
if (!strcasecmp(curl, gAllowedDomains[i]))
|
||||
return true;
|
||||
|
||||
WebCommon::MessageBox( 0 , "This plugin cannot be executed from the domain specified", "Error");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// exposes TorqueScript functions marked as secure in webConfig.h, these functions can then be called on the page via Javascript
|
||||
void AddSecureFunctions()
|
||||
{
|
||||
char snamespace[256];
|
||||
char fname[256];
|
||||
|
||||
//define secure functions here
|
||||
for (unsigned int i = 0; gSecureScript[i]; i++)
|
||||
{
|
||||
snamespace[0] = 0;
|
||||
strcpy(fname, gSecureScript[i]);
|
||||
|
||||
//scan through looking for namespace
|
||||
for (unsigned int j = 1; j < strlen(fname)-2; j++)
|
||||
{
|
||||
if (fname[j] == ':' && fname[j+1] == ':')
|
||||
{
|
||||
strcpy(snamespace, gSecureScript[i]);
|
||||
snamespace[j] = 0;
|
||||
strcpy(fname,&gSecureScript[i][j+2]);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
torque_addsecurefunction(snamespace, fname);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//simple string copy that eats white space
|
||||
void StringCopy(char* dst, const char* src, int count)
|
||||
{
|
||||
int i, j;
|
||||
bool eat = true;
|
||||
for (i = 0, j = 0; i < count ; i++)
|
||||
{
|
||||
if (src[i] == 0)
|
||||
{
|
||||
dst[j] = 0;
|
||||
return;
|
||||
}
|
||||
if (src[i] != '"' && src[i] != '\t' && src[i] != '\n' && src[i] != ')' && src[i] != '(')
|
||||
{
|
||||
if (eat && src[i] == ' ')
|
||||
continue;
|
||||
|
||||
if (src[i] == '\'')
|
||||
{
|
||||
eat = !eat;
|
||||
continue;
|
||||
}
|
||||
|
||||
dst[j++] = src[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SetVariable(const char* variable, const char* value)
|
||||
{
|
||||
char mvar[1024];
|
||||
char mvar2[1024];
|
||||
|
||||
if (strlen(variable) > 1023)
|
||||
{
|
||||
WebCommon::MessageBox( 0, "WebCommon::SetVariable - buffer overrun", "Error");
|
||||
return;
|
||||
}
|
||||
|
||||
// make local copies stripping off $ decorator is needed
|
||||
if (variable[0] == '$')
|
||||
strcpy(mvar, &variable[1]);
|
||||
else
|
||||
strcpy(mvar, variable);
|
||||
|
||||
const char* js = "javascript::";
|
||||
|
||||
if (strncasecmp(js, mvar, 12))
|
||||
sprintf(mvar2, "Javascript::%s", mvar);
|
||||
else
|
||||
strcpy(mvar2, mvar);
|
||||
|
||||
torque_setvariable(mvar2, value);
|
||||
}
|
||||
|
||||
const char* GetVariable(const char* variable)
|
||||
{
|
||||
char mvar[1024];
|
||||
char mvar2[1024];
|
||||
|
||||
if (strlen(variable) > 1023)
|
||||
{
|
||||
WebCommon::MessageBox( 0, "WebCommon::GetVariable - buffer overrun", "Error");
|
||||
return "0";
|
||||
}
|
||||
|
||||
// make local copies stripping off $ decorator is needed
|
||||
if (variable[0] == '$')
|
||||
strcpy(mvar, &variable[1]);
|
||||
else
|
||||
strcpy(mvar, variable);
|
||||
|
||||
const char* js = "javascript::";
|
||||
|
||||
if (strncasecmp(js, mvar, 12))
|
||||
sprintf(mvar2, "Javascript::%s", mvar);
|
||||
else
|
||||
strcpy(mvar2, mvar);
|
||||
|
||||
return torque_getvariable(mvar2);
|
||||
|
||||
}
|
||||
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
// string conversion to/from wstring and string
|
||||
std::wstring StringToWString( const std::string& str )
|
||||
{
|
||||
size_t size = str.length();
|
||||
wchar_t* w = new wchar_t[size+1];
|
||||
|
||||
memset( w, 0, sizeof(wchar_t) * (size+1) );
|
||||
|
||||
MultiByteToWideChar( CP_ACP,
|
||||
0,
|
||||
str.c_str(),
|
||||
size,
|
||||
w,
|
||||
size );
|
||||
|
||||
std::wstring ws(w);
|
||||
delete[] w;
|
||||
return ws;
|
||||
}
|
||||
|
||||
std::string WStringToString( const std::wstring& wstr )
|
||||
{
|
||||
size_t size = wstr.length();
|
||||
char* s = new char[size+1];
|
||||
|
||||
memset( s, 0, sizeof(char) * (size+1) );
|
||||
|
||||
WideCharToMultiByte( CP_ACP,
|
||||
0,
|
||||
wstr.c_str(),
|
||||
size,
|
||||
s,
|
||||
size,
|
||||
NULL,
|
||||
NULL );
|
||||
|
||||
std::string str(s);
|
||||
delete[] s;
|
||||
return str;
|
||||
}
|
||||
|
||||
void ConvertToWindowsPathSep(std::string& path)
|
||||
{
|
||||
size_t pos = 0;
|
||||
while(pos < path.size() || pos != std::string::npos)
|
||||
{
|
||||
pos = path.find("/", pos);
|
||||
if(pos != std::string::npos)
|
||||
{
|
||||
path.replace(pos, 1, "\\");
|
||||
++pos;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
} //namespace WebCommon
|
||||
166
Templates/Full/web/source/common/webCommon.h
Normal file
166
Templates/Full/web/source/common/webCommon.h
Normal file
|
|
@ -0,0 +1,166 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#ifndef _webcommon_h
|
||||
#define _webcommon_h
|
||||
|
||||
// Common web functionality between IE/Safari/Firefox/Chrome
|
||||
|
||||
// Platform specific includes
|
||||
#ifdef WIN32
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#else // Mac
|
||||
|
||||
#include <Cocoa/Cocoa.h>
|
||||
#include <WebKit/npapi.h>
|
||||
#include <WebKit/npfunctions.h>
|
||||
#include <WebKit/npruntime.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
#define OSCALL
|
||||
|
||||
#endif
|
||||
|
||||
// common includes
|
||||
#include <string>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
// Function prototype matching Torque 3D console callback convention
|
||||
typedef const char * (*StringCallback)(void *obj, int argc, const char *argv[]);
|
||||
|
||||
namespace WebCommon
|
||||
{
|
||||
// loads the Torque 3D shared library, sets web deployment mode, retrieves engine "C" interface
|
||||
bool InitTorque3D(void *platformWindow, int clipLeft = 0, int clipTop= 0, int clipRight = 0, int clipBottom = 0);
|
||||
|
||||
// sets the current directory to the game install path
|
||||
bool ChangeToGameDirectory();
|
||||
|
||||
// unloads the Torque 3D shared library (first signaling a shutdown for clean exit)
|
||||
void ShutdownTorque3D();
|
||||
|
||||
// checks a given domain against the allowed domains in webConfig.h
|
||||
bool CheckDomain(const char* url);
|
||||
|
||||
// exposes TorqueScript functions marked as secure in webConfig.h, these functions can then be called on the page via Javascript
|
||||
void AddSecureFunctions();
|
||||
|
||||
// bring up a platform specific message box (used for error reporting)
|
||||
void MessageBox(void* parentWindow, const char* msg, const char* caption);
|
||||
|
||||
// a handy string function that eats white space
|
||||
void StringCopy(char* dst, const char* src, int count);
|
||||
|
||||
void SetVariable(const char* variable, const char* value);
|
||||
const char* GetVariable(const char* variable);
|
||||
|
||||
extern std::string gPluginMIMEType;
|
||||
|
||||
#ifdef WIN32
|
||||
// the handle of our plugin's DLL
|
||||
extern HMODULE gPluginModule;
|
||||
// the handle of the Torque 3D DLL
|
||||
extern HMODULE gTorque3DModule;
|
||||
|
||||
//string conversion to/from wstring and string
|
||||
std::string WStringToString( const std::wstring& wstr);
|
||||
std::wstring StringToWString( const std::string& str);
|
||||
|
||||
void ConvertToWindowsPathSep(std::string& path);
|
||||
#else //Mac
|
||||
// ptr to the Torque 3D Bundle
|
||||
extern void* gTorque3DModule;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
// C Interface exported from the Torque 3D DLL (or Bundle on Mac)
|
||||
|
||||
extern "C"
|
||||
{
|
||||
// initialize Torque 3D including argument handling
|
||||
extern bool (*torque_engineinit)(int argc, const char **argv);
|
||||
|
||||
// tick Torque 3D's main loop
|
||||
extern int (*torque_enginetick)();
|
||||
|
||||
// set Torque 3D into web deployment mode (disable fullscreen exlusive mode, etc)
|
||||
extern int (*torque_setwebdeployment)();
|
||||
|
||||
// shutdown the engine
|
||||
extern bool (*torque_engineshutdown)();
|
||||
|
||||
// signal an engine shutdown (as with the quit(); console command)
|
||||
extern void (*torque_enginesignalshutdown)();
|
||||
|
||||
// reset the engine, unloading any current level and returning to the main menu
|
||||
extern void (*torque_reset)();
|
||||
|
||||
// Evaluate arbitrary TorqueScript (ONLY CALL torque_evaluate FROM TRUSTED CODE!!!)
|
||||
extern const char* (*torque_evaluate)(const char* code);
|
||||
|
||||
// Get a console variable
|
||||
// For security, restricted to "Javascript::" namespace
|
||||
extern const char* (*torque_getvariable)(const char* name);
|
||||
// Set a console variable
|
||||
// For security, restricted to "Javascript::" namespace
|
||||
extern void (*torque_setvariable)(const char* name, const char* value);
|
||||
|
||||
// Export a function to the Torque 3D console system which matches the StringCallback function prototype
|
||||
// specify the nameSpace, functionName, usage, min and max arguments
|
||||
extern void (*torque_exportstringcallback)(StringCallback cb, const char *nameSpace, const char *funcName, const char* usage, int minArgs, int maxArgs);
|
||||
|
||||
// Set a TorqueScript console function as secure and available for JavaScript via the callScript plugin method
|
||||
extern void (*torque_addsecurefunction)(const char* nameSpace, const char* fname);
|
||||
// Call a TorqueScript console function that has been marked as secure
|
||||
extern const char* (*torque_callsecurefunction)(const char* nameSpace, const char* name, int argc, const char ** argv);
|
||||
|
||||
// resize the Torque 3D child window to the specified width and height
|
||||
extern void (*torque_resizewindow)(int width, int height);
|
||||
|
||||
#ifndef WIN32
|
||||
// On Mac, handle the parent safari window
|
||||
extern void (*torque_setsafariwindow)(NSWindow* window, int32 x, int32 y, int32 width, int32 height);
|
||||
|
||||
// On Mac, sets the executable path
|
||||
extern void (*torque_setexecutablepath)(const char *path);
|
||||
#else
|
||||
// retrieve the render windows hwnd
|
||||
extern void* (*torque_gethwnd)();
|
||||
|
||||
// directly add a message to the Torque 3D event queue, bypassing the Windows event queue
|
||||
// this is useful in the case of the IE plugin, where we are hooking into an application
|
||||
// level message, and posting to the windows queue would cause a hang
|
||||
extern void (*torque_directmessage)(unsigned int message, unsigned int wparam, unsigned int lparam);
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
44
Templates/Full/web/source/common/webConfig.h
Normal file
44
Templates/Full/web/source/common/webConfig.h
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// Define secure TorqueScript calls by adding them here.
|
||||
// This list defines the calls that can be made by JavaScript into your game, so be very careful.
|
||||
|
||||
const char* gSecureScript[] = {
|
||||
"echo",
|
||||
"testJavaScriptBridge",
|
||||
//"MyNamespace::myfunction",
|
||||
0 //SENTINEL
|
||||
};
|
||||
|
||||
// Define the domains which are allowed to run your game via the web
|
||||
// Your game plugin will refuse to run from any other domain for security reasons.
|
||||
// You can turn this off during development and/or for debug builds
|
||||
|
||||
//#define WEBDEPLOY_DOMAIN_CHECK
|
||||
//#define WEBDEPLOY_DOMAIN_ALLOW_DEBUG
|
||||
|
||||
const char* gAllowedDomains[] = {
|
||||
//"www.mydomain.com",
|
||||
//"games.myotherdomain.com",
|
||||
0 //SENTINEL
|
||||
};
|
||||
Binary file not shown.
|
|
@ -0,0 +1,5 @@
|
|||
//
|
||||
// Prefix header for all source files of the 'WebGamePlugin' target in the 'WebGamePlugin' project.
|
||||
//
|
||||
|
||||
#include <Carbon/Carbon.h>
|
||||
44
Templates/Full/web/source/npplugin/mac/npWebGamePlugin.h
Normal file
44
Templates/Full/web/source/npplugin/mac/npWebGamePlugin.h
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../../common/webCommon.h"
|
||||
|
||||
class NPWebGamePlugin
|
||||
{
|
||||
public:
|
||||
|
||||
NPWebGamePlugin(NPP aInstance);
|
||||
~NPWebGamePlugin();
|
||||
|
||||
NPBool Open(NPWindow* aWindow);
|
||||
void Close();
|
||||
NPBool IsOpen();
|
||||
|
||||
NPP mInstance;
|
||||
bool mOpen;
|
||||
|
||||
static NPWebGamePlugin* sInstance;
|
||||
};
|
||||
|
||||
|
||||
136
Templates/Full/web/source/npplugin/mac/npWebGamePlugin.mm
Normal file
136
Templates/Full/web/source/npplugin/mac/npWebGamePlugin.mm
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "npWebGamePlugin.h"
|
||||
|
||||
// Timer which ticks/renders Torque3D
|
||||
static CFRunLoopTimerRef gTimer = NULL;
|
||||
|
||||
static bool gHidden = false;
|
||||
|
||||
static void timer_callback(CFRunLoopRef timer, void *info)
|
||||
{
|
||||
|
||||
if (gHidden)
|
||||
return;
|
||||
|
||||
if (!torque_enginetick())
|
||||
{
|
||||
//TODO: undefined when get quit from Torque 3D under Safari
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
NPWebGamePlugin* NPWebGamePlugin::sInstance = NULL;
|
||||
|
||||
NPWebGamePlugin::NPWebGamePlugin(NPP aInstance)
|
||||
{
|
||||
mOpen = FALSE;
|
||||
mInstance = aInstance;
|
||||
sInstance = this;
|
||||
}
|
||||
|
||||
NPWebGamePlugin::~NPWebGamePlugin()
|
||||
{
|
||||
Close();
|
||||
sInstance = NULL;
|
||||
}
|
||||
|
||||
NPBool NPWebGamePlugin::Open(NPWindow* aWindow)
|
||||
{
|
||||
gHidden = false;
|
||||
|
||||
WebCommon::ChangeToGameDirectory();
|
||||
|
||||
if (mOpen || WebCommon::gTorque3DModule)
|
||||
{
|
||||
NP_CGContext *npcontext = reinterpret_cast<NP_CGContext *> (aWindow->window);
|
||||
NSWindow* browserWindow = [[NSWindow alloc] initWithWindowRef:npcontext->window];
|
||||
torque_setsafariwindow( browserWindow, aWindow->clipRect.left, aWindow->clipRect.top, aWindow->clipRect.right - aWindow->clipRect.left, aWindow->clipRect.bottom - aWindow->clipRect.top );
|
||||
[browserWindow release];
|
||||
|
||||
mOpen = TRUE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
if (!aWindow)
|
||||
return FALSE;
|
||||
|
||||
mOpen = true;
|
||||
|
||||
NP_CGContext *npcontext = reinterpret_cast<NP_CGContext *> (aWindow->window);
|
||||
|
||||
// You may want to resize the browser window or set minimum sizes here for your web content
|
||||
NSWindow* browserWindow = [[NSWindow alloc] initWithWindowRef:npcontext->window];
|
||||
|
||||
if (!browserWindow)
|
||||
{
|
||||
WebCommon::MessageBox( 0, "Web plugin unable to get browser window", "Error");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!WebCommon::InitTorque3D(browserWindow, aWindow->clipRect.left, aWindow->clipRect.top, aWindow->clipRect.right - aWindow->clipRect.left, aWindow->clipRect.bottom - aWindow->clipRect.top))
|
||||
return false;
|
||||
|
||||
//setup high speed timer to tick Torque 3D
|
||||
CFAllocatorRef allocator = kCFAllocatorDefault;
|
||||
CFAbsoluteTime fireDate = CFAbsoluteTimeGetCurrent() + .001;
|
||||
CFTimeInterval interval = .001;
|
||||
CFOptionFlags flags = 0;
|
||||
CFIndex order = 0;
|
||||
CFRunLoopTimerCallBack callback = (CFRunLoopTimerCallBack)timer_callback;
|
||||
CFRunLoopTimerContext context = { 0, NULL, NULL, NULL, NULL };
|
||||
gTimer = CFRunLoopTimerCreate(allocator, fireDate, interval, flags, order, callback, &context);
|
||||
CFRunLoopAddTimer(CFRunLoopGetCurrent(), gTimer, kCFRunLoopDefaultMode);
|
||||
|
||||
[browserWindow release];
|
||||
|
||||
return mOpen;
|
||||
}
|
||||
|
||||
void NPWebGamePlugin::Close()
|
||||
{
|
||||
|
||||
if (!mOpen)
|
||||
return;
|
||||
|
||||
if (WebCommon::gTorque3DModule)
|
||||
{
|
||||
gHidden = true;
|
||||
torque_setsafariwindow(NULL, 0, 0, 0, 0);
|
||||
torque_reset();
|
||||
}
|
||||
|
||||
//WebCommon::ShutdownTorque3D();
|
||||
|
||||
mOpen = false;
|
||||
}
|
||||
|
||||
NPBool NPWebGamePlugin::IsOpen()
|
||||
{
|
||||
return mOpen;
|
||||
}
|
||||
|
||||
|
||||
813
Templates/Full/web/source/npplugin/npPlugin.cpp
Normal file
813
Templates/Full/web/source/npplugin/npPlugin.cpp
Normal file
|
|
@ -0,0 +1,813 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "npWebGamePlugin.h"
|
||||
#include "../common/webCommon.h"
|
||||
|
||||
// Functions exported from the browser to our plugin
|
||||
static NPNetscapeFuncs NPNFuncs;
|
||||
|
||||
// Set once both the web page and plugin are fully loaded (including any possible Javascript <-> TorqueScript exports/imports)
|
||||
static BOOL gInitialized = false;
|
||||
|
||||
#ifndef WIN32
|
||||
// Entry points into our plugin for Safari
|
||||
extern "C" {
|
||||
|
||||
#pragma GCC visibility push(default)
|
||||
|
||||
NPError NP_Initialize (NPNetscapeFuncs *browser);
|
||||
NPError NP_GetEntryPoints (NPPluginFuncs *plugin);
|
||||
NPError NP_Shutdown();
|
||||
|
||||
#pragma GCC visibility pop
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
// Converts a NPVARIANT variable to a C string representation
|
||||
const char* MY_NPVARIANT_TO_STRING(const NPVariant& f)
|
||||
{
|
||||
static std::string result;
|
||||
char r[1024] = {0};
|
||||
|
||||
if (NPVARIANT_IS_VOID(f) || NPVARIANT_IS_NULL(f))
|
||||
return "";
|
||||
|
||||
if (NPVARIANT_IS_STRING(f))
|
||||
{
|
||||
NPString str = NPVARIANT_TO_STRING(f);
|
||||
result = std::string(str.UTF8Characters, str.UTF8Length);
|
||||
return result.c_str();
|
||||
}
|
||||
|
||||
if (NPVARIANT_IS_BOOLEAN(f))
|
||||
{
|
||||
if (NPVARIANT_TO_BOOLEAN(f))
|
||||
return "1";
|
||||
return "0";
|
||||
}
|
||||
|
||||
if (NPVARIANT_IS_INT32(f))
|
||||
{
|
||||
sprintf(r, "%i", NPVARIANT_TO_INT32(f));
|
||||
result = r;
|
||||
return result.c_str();
|
||||
}
|
||||
|
||||
if (NPVARIANT_IS_DOUBLE(f))
|
||||
{
|
||||
sprintf(r, "%f", NPVARIANT_TO_DOUBLE(f));
|
||||
result = r;
|
||||
return result.c_str();
|
||||
}
|
||||
|
||||
return "";
|
||||
|
||||
}
|
||||
|
||||
// Javascript -> TorqueScript function calling (with parser)
|
||||
const char* CallScript(const char* code)
|
||||
{
|
||||
std::string scode = code;
|
||||
const char* sig = scode.c_str();
|
||||
|
||||
// do not allow large strings which could be used maliciously
|
||||
if (scode.length() > 255 || !gInitialized)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
// data buffers for laying out data in a Torque 3D console friendly manner
|
||||
char nameSpace[256];
|
||||
char fname[256];
|
||||
char argv[256][256];
|
||||
char* argvv[256];
|
||||
int argc = 0;
|
||||
int argBegin = 0;
|
||||
|
||||
memset(nameSpace, 0, 256);
|
||||
memset(fname, 0, 256);
|
||||
memset(argv, 0, 256 * 256);
|
||||
|
||||
for (int i = 0; i < scode.length(); i++)
|
||||
{
|
||||
if (sig[i] == ')' || sig[i] == ';')
|
||||
{
|
||||
//scan out last arg is any
|
||||
char dummy[256];
|
||||
memset(dummy, 0, 256);
|
||||
|
||||
WebCommon::StringCopy(dummy, &sig[argBegin], i - argBegin);
|
||||
|
||||
if (strlen(dummy))
|
||||
{
|
||||
strcpy(argv[argc], dummy);
|
||||
argvv[argc] = argv[argc];
|
||||
argc++;
|
||||
}
|
||||
|
||||
break; // done
|
||||
}
|
||||
|
||||
// handle namespace
|
||||
if (sig[i]==':')
|
||||
{
|
||||
if (nameSpace[0] || fname[0])
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
if (i > 0 && sig[i-1] == ':')
|
||||
{
|
||||
if (i - 2 > 0)
|
||||
WebCommon::StringCopy(nameSpace, sig, i - 1);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// arguments begin
|
||||
if (sig[i] == '(' )
|
||||
{
|
||||
if (fname[0] || i < 1)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
//everything before this is function name, minus nameSpace
|
||||
if (nameSpace[0])
|
||||
{
|
||||
int nlen = strlen(nameSpace);
|
||||
WebCommon::StringCopy(fname, &sig[nlen + 2], i - nlen - 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
WebCommon::StringCopy(fname, sig, i);
|
||||
}
|
||||
|
||||
WebCommon::StringCopy(argv[0], fname, strlen(fname)+1);
|
||||
argvv[0] = argv[0];
|
||||
argc++;
|
||||
|
||||
argBegin = i + 1;
|
||||
}
|
||||
|
||||
// argument
|
||||
if (sig[i] == ',' )
|
||||
{
|
||||
if (argBegin >= i || argc == 255)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
WebCommon::StringCopy(argv[argc], &sig[argBegin], i - argBegin);
|
||||
argvv[argc] = argv[argc];
|
||||
|
||||
argc++;
|
||||
argBegin = i + 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static std::string retVal;
|
||||
|
||||
if (fname[0])
|
||||
{
|
||||
// call into the Torque 3D shared library (console system) and get return value
|
||||
retVal = torque_callsecurefunction(nameSpace, fname, argc, (const char **) argvv);
|
||||
return retVal.c_str();
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
// TorqueScript -> JavaScript
|
||||
const char* CallJavaScriptFunction(const char* name, int numArguments, const char* argv[])
|
||||
{
|
||||
// our plugin instance
|
||||
NPP pNPInstance = NPWebGamePlugin::sInstance->mInstance;
|
||||
|
||||
// holds the generated Javascript encoded as a NPString
|
||||
NPString npScript;
|
||||
|
||||
// retrieve our plugin object from the browser
|
||||
NPObject* pluginObject;
|
||||
|
||||
if (NPERR_NO_ERROR != NPNFuncs.getvalue(pNPInstance, NPNVPluginElementNPObject, &pluginObject))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// generate Javascript to be evaluated
|
||||
std::string script = name;
|
||||
script += "(";
|
||||
for (int i = 1; i < numArguments; i++)
|
||||
{
|
||||
script += "\"";
|
||||
script += argv[i];
|
||||
script += "\"";
|
||||
if ( i + 1 < numArguments)
|
||||
script += ", ";
|
||||
}
|
||||
script += ");";
|
||||
|
||||
//encode as a NPString
|
||||
npScript.UTF8Characters = script.c_str();
|
||||
npScript.UTF8Length = script.length();
|
||||
|
||||
// finally, have browser evaluate our script and get the return value
|
||||
NPVariant result;
|
||||
NPNFuncs.evaluate(pNPInstance,pluginObject,&npScript,&result);
|
||||
|
||||
return MY_NPVARIANT_TO_STRING(result);
|
||||
|
||||
}
|
||||
|
||||
// the sole entry point for Torque 3D console system into our browser plugin (handed over as a function pointer)
|
||||
static const char * MyStringCallback(void *obj, int argc, const char* argv[])
|
||||
{
|
||||
static char ret[4096];
|
||||
strcpy(ret,CallJavaScriptFunction(argv[0], argc, argv));
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
// these can be added on the page before we're initialized, so we cache until we're ready for them
|
||||
typedef struct
|
||||
{
|
||||
std::string jsCallback; //javascript function name
|
||||
unsigned int numArguments; //the number of arguments it takes
|
||||
} JavasScriptExport;
|
||||
|
||||
static std::vector<JavasScriptExport> gJavaScriptExports;
|
||||
|
||||
// this actually exports the function to the Torque 3D console system
|
||||
// we do this in two steps as we can't guarantee that Torque 3D is initialized on web page
|
||||
// before JavaScript calls are made
|
||||
void ExportFunctionInternal(const JavasScriptExport& jsexport)
|
||||
{
|
||||
torque_exportstringcallback(MyStringCallback,"JS",jsexport.jsCallback.c_str(),"",jsexport.numArguments,jsexport.numArguments);
|
||||
}
|
||||
|
||||
// invoked via the Javascript plugin object startup() method once the page/plugin are fully loaded
|
||||
void Startup()
|
||||
{
|
||||
if (gInitialized)
|
||||
return;
|
||||
|
||||
// actually do the export on any cached functions
|
||||
gInitialized = true;
|
||||
std::vector<JavasScriptExport>::iterator i;
|
||||
for (i = gJavaScriptExports.begin(); i != gJavaScriptExports.end();i++)
|
||||
{
|
||||
ExportFunctionInternal(*i);
|
||||
}
|
||||
|
||||
// setup the secure TorqueScript function calls we can call from Javascript (see webConfig.h)
|
||||
WebCommon::AddSecureFunctions();
|
||||
}
|
||||
|
||||
// Export a Javascript function to the Torque 3D console system, possibly caching it
|
||||
void ExportFunction(const char* callback, int numArguments)
|
||||
{
|
||||
JavasScriptExport jsexport;
|
||||
jsexport.jsCallback = callback;
|
||||
jsexport.numArguments = numArguments;
|
||||
|
||||
if (!gInitialized)
|
||||
{
|
||||
//queue it up
|
||||
gJavaScriptExports.push_back(jsexport);
|
||||
}
|
||||
else
|
||||
{
|
||||
ExportFunctionInternal(jsexport);
|
||||
}
|
||||
}
|
||||
|
||||
// NP Plugin Interface
|
||||
|
||||
|
||||
// Our plugin object structure "inherited" from NPObject
|
||||
typedef struct
|
||||
{
|
||||
// NPObject fields
|
||||
NPClass *_class;
|
||||
uint32_t referenceCount;
|
||||
|
||||
// Here begins our custom fields (well, field)
|
||||
|
||||
// Platform specific game plugin class (handles refresh, sizing, initialization of Torque 3D, etc)
|
||||
NPWebGamePlugin* webPlugin;
|
||||
|
||||
} PluginObject;
|
||||
|
||||
static PluginObject* gPluginObject = NULL;
|
||||
|
||||
// interface exports for our plugin that are expected to the browser
|
||||
|
||||
void pluginInvalidate ();
|
||||
bool pluginHasProperty (NPClass *theClass, NPIdentifier name);
|
||||
bool pluginHasMethod (NPObject *npobj, NPIdentifier name);
|
||||
bool pluginGetProperty (PluginObject *obj, NPIdentifier name, NPVariant *variant);
|
||||
bool pluginSetProperty (PluginObject *obj, NPIdentifier name, const NPVariant *variant);
|
||||
bool pluginInvoke (PluginObject *obj, NPIdentifier name, NPVariant *args, uint32_t argCount, NPVariant *result);
|
||||
bool pluginInvokeDefault (PluginObject *obj, NPVariant *args, uint32_t argCount, NPVariant *result);
|
||||
NPObject *pluginAllocate (NPP npp, NPClass *theClass);
|
||||
void pluginDeallocate (PluginObject *obj);
|
||||
|
||||
static NPClass _pluginFunctionPtrs = {
|
||||
NP_CLASS_STRUCT_VERSION,
|
||||
(NPAllocateFunctionPtr) pluginAllocate,
|
||||
(NPDeallocateFunctionPtr) pluginDeallocate,
|
||||
(NPInvalidateFunctionPtr) pluginInvalidate,
|
||||
(NPHasMethodFunctionPtr) pluginHasMethod,
|
||||
(NPInvokeFunctionPtr) pluginInvoke,
|
||||
(NPInvokeDefaultFunctionPtr) pluginInvokeDefault,
|
||||
(NPHasPropertyFunctionPtr) pluginHasProperty,
|
||||
(NPGetPropertyFunctionPtr) pluginGetProperty,
|
||||
(NPSetPropertyFunctionPtr) pluginSetProperty,
|
||||
};
|
||||
|
||||
// versioning information
|
||||
|
||||
static bool identifiersInitialized = false;
|
||||
|
||||
#define ID_VERSION_PROPERTY 0
|
||||
#define NUM_PROPERTY_IDENTIFIERS 1
|
||||
|
||||
static NPIdentifier pluginPropertyIdentifiers[NUM_PROPERTY_IDENTIFIERS];
|
||||
static const NPUTF8 *pluginPropertyIdentifierNames[NUM_PROPERTY_IDENTIFIERS] = {
|
||||
"version",
|
||||
};
|
||||
|
||||
// methods that are callable on the plugin from Javascript
|
||||
|
||||
#define ID_SETVARIABLE_METHOD 0
|
||||
#define ID_GETVARIABLE_METHOD 1
|
||||
#define ID_EXPORTFUNCTION_METHOD 2
|
||||
#define ID_CALLSCRIPT_METHOD 3
|
||||
#define ID_STARTUP_METHOD 4
|
||||
#define NUM_METHOD_IDENTIFIERS 5
|
||||
|
||||
static NPIdentifier pluginMethodIdentifiers[NUM_METHOD_IDENTIFIERS];
|
||||
static const NPUTF8 *pluginMethodIdentifierNames[NUM_METHOD_IDENTIFIERS] = {
|
||||
"setVariable",
|
||||
"getVariable",
|
||||
"exportFunction",
|
||||
"callScript",
|
||||
"startup",
|
||||
};
|
||||
|
||||
NPClass *getPluginClass(void)
|
||||
{
|
||||
return &_pluginFunctionPtrs;
|
||||
}
|
||||
|
||||
// Sets up the property and method identifier arrays used by the browser
|
||||
// via the hasProperty and hasMethod fuction pointers
|
||||
static void initializeIdentifiers()
|
||||
{
|
||||
// fill the property identifier array
|
||||
NPNFuncs.getstringidentifiers(pluginPropertyIdentifierNames,
|
||||
NUM_PROPERTY_IDENTIFIERS,
|
||||
pluginPropertyIdentifiers);
|
||||
|
||||
// fill the method identifier array
|
||||
NPNFuncs.getstringidentifiers(pluginMethodIdentifierNames,
|
||||
NUM_METHOD_IDENTIFIERS,
|
||||
pluginMethodIdentifiers);
|
||||
};
|
||||
|
||||
bool pluginHasProperty (NPClass *theClass, NPIdentifier name)
|
||||
{
|
||||
for (int i = 0; i < NUM_PROPERTY_IDENTIFIERS; i++) {
|
||||
if (name == pluginPropertyIdentifiers[i]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool pluginHasMethod(NPObject *npobj, NPIdentifier name)
|
||||
{
|
||||
for (int i = 0; i < NUM_METHOD_IDENTIFIERS; i++) {
|
||||
if (name == pluginMethodIdentifiers[i]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// utility function that sets up a NPVariant from a std::string
|
||||
void FillString(const std::string& src, NPVariant* variant)
|
||||
{
|
||||
variant->type = NPVariantType_String;
|
||||
variant->value.stringValue.UTF8Length = static_cast<uint32_t>(src.length());
|
||||
variant->value.stringValue.UTF8Characters = reinterpret_cast<NPUTF8 *>(NPNFuncs.memalloc(src.size()));
|
||||
memcpy((void*)variant->value.stringValue.UTF8Characters, src.c_str(), src.size());
|
||||
}
|
||||
|
||||
|
||||
bool pluginGetProperty (PluginObject *obj, NPIdentifier name, NPVariant *variant)
|
||||
{
|
||||
VOID_TO_NPVARIANT(*variant);
|
||||
|
||||
if (name == pluginPropertyIdentifiers[ID_VERSION_PROPERTY]) {
|
||||
FillString(std::string("1.0"), variant);
|
||||
return true;
|
||||
}
|
||||
|
||||
//unknown property
|
||||
return false;
|
||||
}
|
||||
|
||||
bool pluginSetProperty (PluginObject *obj, NPIdentifier name, const NPVariant *variant)
|
||||
{
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// handle our plugin methods using standard np plugin conventions.
|
||||
bool pluginInvoke (PluginObject *obj, NPIdentifier name, NPVariant *args, unsigned argCount, NPVariant *result)
|
||||
{
|
||||
VOID_TO_NPVARIANT(*result);
|
||||
|
||||
// sanity check
|
||||
if (argCount > 16)
|
||||
return false;
|
||||
|
||||
// plugin.startup(); - called once web page is fully loaded and plugin (including Torque 3D) is initialized
|
||||
if (name == pluginMethodIdentifiers[ID_STARTUP_METHOD]) {
|
||||
result->type = NPVariantType_Void;
|
||||
|
||||
Startup();
|
||||
return true;
|
||||
}
|
||||
// plugin.setVariable("$MyVariable", 42); - set a Torque 3D console variable
|
||||
else if (name == pluginMethodIdentifiers[ID_SETVARIABLE_METHOD]) {
|
||||
result->type = NPVariantType_Void;
|
||||
if (argCount != 2)
|
||||
return false;
|
||||
|
||||
std::string arg0(MY_NPVARIANT_TO_STRING(args[0]));
|
||||
std::string arg1(MY_NPVARIANT_TO_STRING(args[1]));
|
||||
WebCommon::SetVariable(arg0.c_str(), arg1.c_str());
|
||||
return true;
|
||||
}
|
||||
// plugin.getVariable("$MyVariable"); - get a Torque 3D console variable
|
||||
else if (name == pluginMethodIdentifiers[ID_GETVARIABLE_METHOD]) {
|
||||
if (argCount != 1)
|
||||
return false;
|
||||
|
||||
std::string value;
|
||||
std::string arg0(MY_NPVARIANT_TO_STRING(args[0]));
|
||||
value = WebCommon::GetVariable(arg0.c_str());
|
||||
FillString(value, result);
|
||||
|
||||
return true;
|
||||
}
|
||||
// plugin.exportFunction("MyJavascriptFunction",3); - export a Javascript function to the Torque 3D console system via its name and argument count
|
||||
else if (name == pluginMethodIdentifiers[ID_EXPORTFUNCTION_METHOD]) {
|
||||
result->type = NPVariantType_Void;
|
||||
if (argCount != 2)
|
||||
return false;
|
||||
|
||||
std::string fname(MY_NPVARIANT_TO_STRING(args[0]));
|
||||
|
||||
int argCount = 0;
|
||||
|
||||
if (NPVARIANT_IS_DOUBLE(args[1]))
|
||||
argCount = NPVARIANT_TO_DOUBLE(args[1]);
|
||||
else
|
||||
argCount = NPVARIANT_TO_INT32(args[1]);
|
||||
|
||||
ExportFunction(fname.c_str(), argCount);
|
||||
return true;
|
||||
}
|
||||
// var result = plugin.callScript("mySecureFunction('one', 'two', 'three');"); - call a TorqueScript function marked as secure in webConfig.h with supplied arguments
|
||||
else if (name == pluginMethodIdentifiers[ID_CALLSCRIPT_METHOD]) {
|
||||
|
||||
if (argCount != 1)
|
||||
return false;
|
||||
|
||||
std::string value;
|
||||
std::string code(MY_NPVARIANT_TO_STRING(args[0]));
|
||||
value = CallScript(code.c_str());
|
||||
FillString(value, result);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool pluginInvokeDefault (PluginObject *obj, NPVariant *args, unsigned argCount, NPVariant *result)
|
||||
{
|
||||
VOID_TO_NPVARIANT(*result);
|
||||
return false;
|
||||
}
|
||||
|
||||
void pluginInvalidate ()
|
||||
{
|
||||
// Make sure we've released any remaining references to JavaScript
|
||||
// objects.
|
||||
}
|
||||
|
||||
NPObject *pluginAllocate (NPP npp, NPClass *theClass)
|
||||
{
|
||||
|
||||
PluginObject *newInstance = new PluginObject;
|
||||
|
||||
gPluginObject = newInstance;
|
||||
|
||||
if (!identifiersInitialized)
|
||||
{
|
||||
identifiersInitialized = true;
|
||||
initializeIdentifiers();
|
||||
}
|
||||
|
||||
// platform specific NPWebGamePlugin instantiation
|
||||
newInstance->webPlugin = new NPWebGamePlugin(npp);
|
||||
|
||||
gInitialized = false;
|
||||
gJavaScriptExports.clear();
|
||||
|
||||
return (NPObject *)newInstance;
|
||||
}
|
||||
|
||||
void pluginDeallocate (PluginObject *obj)
|
||||
{
|
||||
delete obj;
|
||||
gPluginObject = NULL;
|
||||
}
|
||||
|
||||
int32 NPP_Write (NPP instance, NPStream *stream, int32_t offset, int32_t len, void *buffer);
|
||||
|
||||
|
||||
NPError OSCALL NP_GetEntryPoints(NPPluginFuncs* pFuncs)
|
||||
{
|
||||
if (pFuncs == NULL) {
|
||||
return NPERR_INVALID_FUNCTABLE_ERROR;
|
||||
}
|
||||
|
||||
// Safari sets the size field of pFuncs to 0
|
||||
if (pFuncs->size == 0)
|
||||
pFuncs->size = sizeof(NPPluginFuncs);
|
||||
if (pFuncs->size < sizeof(NPPluginFuncs)) {
|
||||
return NPERR_INVALID_FUNCTABLE_ERROR;
|
||||
}
|
||||
|
||||
pFuncs->version = (NP_VERSION_MAJOR << 8) | NP_VERSION_MINOR;
|
||||
pFuncs->newp = NPP_New;
|
||||
pFuncs->destroy = NPP_Destroy;
|
||||
pFuncs->setwindow = NPP_SetWindow;
|
||||
pFuncs->newstream = NPP_NewStream;
|
||||
pFuncs->destroystream = NPP_DestroyStream;
|
||||
pFuncs->asfile = NPP_StreamAsFile;
|
||||
pFuncs->writeready = NPP_WriteReady;
|
||||
pFuncs->write = NPP_Write;
|
||||
pFuncs->print = NPP_Print;
|
||||
pFuncs->event = NPP_HandleEvent;
|
||||
pFuncs->urlnotify = NPP_URLNotify;
|
||||
pFuncs->getvalue = NPP_GetValue;
|
||||
pFuncs->setvalue = NPP_SetValue;
|
||||
pFuncs->javaClass = NULL;
|
||||
|
||||
return NPERR_NO_ERROR;
|
||||
}
|
||||
|
||||
NPError OSCALL NP_Initialize(NPNetscapeFuncs* pFuncs)
|
||||
{
|
||||
static bool _initialized = false;
|
||||
if (!_initialized) {
|
||||
_initialized = true;
|
||||
}
|
||||
|
||||
if (pFuncs == NULL)
|
||||
return NPERR_INVALID_FUNCTABLE_ERROR;
|
||||
|
||||
if ((pFuncs->version >> 8) > NP_VERSION_MAJOR)
|
||||
return NPERR_INCOMPATIBLE_VERSION_ERROR;
|
||||
|
||||
// Safari sets the pfuncs size to 0
|
||||
if (pFuncs->size == 0)
|
||||
pFuncs->size = sizeof(NPNetscapeFuncs);
|
||||
if (pFuncs->size < sizeof (NPNetscapeFuncs))
|
||||
return NPERR_INVALID_FUNCTABLE_ERROR;
|
||||
|
||||
NPNFuncs = *pFuncs;
|
||||
|
||||
return NPERR_NO_ERROR;
|
||||
}
|
||||
|
||||
NPError OSCALL NP_Shutdown()
|
||||
{
|
||||
if (WebCommon::gTorque3DModule)
|
||||
WebCommon::ShutdownTorque3D();
|
||||
|
||||
return NPERR_NO_ERROR;
|
||||
}
|
||||
|
||||
|
||||
NPError NPP_New(NPMIMEType pluginType,
|
||||
NPP instance, uint16 mode,
|
||||
int16 argc, char *argn[],
|
||||
char *argv[], NPSavedData *saved)
|
||||
{
|
||||
WebCommon::gPluginMIMEType = pluginType;
|
||||
|
||||
if (gPluginObject)
|
||||
{
|
||||
WebCommon::MessageBox( 0, "This plugin allows only one instance", "Error");
|
||||
return NPERR_GENERIC_ERROR;
|
||||
}
|
||||
|
||||
// Get the location we're loading the plugin from (http://, file://) including address
|
||||
// this is used by the domain locking feature to ensure that your plugin is only
|
||||
// being used from your web site
|
||||
|
||||
NPObject* windowObject = NULL;
|
||||
NPNFuncs.getvalue( instance, NPNVWindowNPObject, &windowObject );
|
||||
|
||||
NPVariant variantValue;
|
||||
NPIdentifier identifier = NPNFuncs.getstringidentifier( "location" );
|
||||
|
||||
if (!NPNFuncs.getproperty( instance, windowObject, identifier, &variantValue ))
|
||||
return NPERR_GENERIC_ERROR;
|
||||
|
||||
NPObject *locationObj = variantValue.value.objectValue;
|
||||
|
||||
identifier = NPNFuncs.getstringidentifier( "href" );
|
||||
|
||||
if (!NPNFuncs.getproperty( instance, locationObj, identifier, &variantValue ))
|
||||
return NPERR_GENERIC_ERROR;
|
||||
|
||||
std::string url = MY_NPVARIANT_TO_STRING(variantValue);
|
||||
|
||||
if (!WebCommon::CheckDomain(url.c_str()))
|
||||
return NPERR_GENERIC_ERROR;
|
||||
|
||||
// everything checks out, let's rock
|
||||
|
||||
if (NPNFuncs.version >= 14) {
|
||||
// this calls pluginAllocate
|
||||
instance->pdata = NPNFuncs.createobject(instance, getPluginClass());
|
||||
}
|
||||
|
||||
#ifndef WIN32
|
||||
// On Mac, make sure we're using CoreGraphics (otherwise 3D rendering fails)
|
||||
NPNFuncs.setvalue(instance, (NPPVariable)NPNVpluginDrawingModel, (void *) NPDrawingModelCoreGraphics);
|
||||
#endif
|
||||
|
||||
//PluginObject *plugin = (PluginObject*)instance->pdata;
|
||||
|
||||
return NPERR_NO_ERROR;
|
||||
}
|
||||
|
||||
// here is the place to clean up and destroy the object
|
||||
NPError NPP_Destroy (NPP instance, NPSavedData** save)
|
||||
{
|
||||
if (instance == NULL)
|
||||
return NPERR_INVALID_INSTANCE_ERROR;
|
||||
|
||||
if (instance->pdata != NULL) {
|
||||
PluginObject *plugin = (PluginObject *)instance->pdata;
|
||||
delete plugin->webPlugin;
|
||||
|
||||
NPNFuncs.releaseobject((NPObject*) instance->pdata);
|
||||
instance->pdata = NULL;
|
||||
}
|
||||
return NPERR_NO_ERROR;
|
||||
}
|
||||
|
||||
NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value)
|
||||
{
|
||||
if (variable == NPPVpluginScriptableNPObject) {
|
||||
|
||||
if (instance->pdata == NULL) {
|
||||
instance->pdata = NPNFuncs.createobject(instance, getPluginClass());
|
||||
}
|
||||
|
||||
NPObject* obj = reinterpret_cast<NPObject*>(instance->pdata);
|
||||
NPNFuncs.retainobject(obj);
|
||||
void **v = (void **)value;
|
||||
*v = obj;
|
||||
return NPERR_NO_ERROR;
|
||||
}
|
||||
|
||||
return NPERR_GENERIC_ERROR;
|
||||
}
|
||||
|
||||
NPError NPP_SetValue(NPP instance, NPNVariable variable, void *value)
|
||||
{
|
||||
return NPERR_GENERIC_ERROR;
|
||||
}
|
||||
|
||||
NPError NPP_NewStream(NPP instance,
|
||||
NPMIMEType type,
|
||||
NPStream* stream,
|
||||
NPBool seekable,
|
||||
uint16* stype)
|
||||
{
|
||||
if(instance == NULL)
|
||||
return NPERR_INVALID_INSTANCE_ERROR;
|
||||
|
||||
return NPERR_NO_ERROR;
|
||||
}
|
||||
|
||||
int32 NPP_WriteReady (NPP instance, NPStream *stream)
|
||||
{
|
||||
if (instance == NULL)
|
||||
return NPERR_INVALID_INSTANCE_ERROR;
|
||||
|
||||
return 0x0fffffff;
|
||||
}
|
||||
|
||||
int32 NPP_Write (NPP instance, NPStream *stream, int32_t offset, int32_t len, void *buffer)
|
||||
{
|
||||
if (instance == NULL)
|
||||
return NPERR_INVALID_INSTANCE_ERROR;
|
||||
|
||||
return NPERR_NO_ERROR;
|
||||
}
|
||||
|
||||
NPError NPP_DestroyStream (NPP instance, NPStream *stream, NPError reason)
|
||||
{
|
||||
if(instance == NULL)
|
||||
return NPERR_INVALID_INSTANCE_ERROR;
|
||||
|
||||
return NPERR_NO_ERROR;
|
||||
}
|
||||
|
||||
|
||||
void NPP_URLNotify(NPP instance, const char* url, NPReason reason, void* notifyData)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void NPP_StreamAsFile (NPP instance, NPStream* stream, const char* fname)
|
||||
{
|
||||
}
|
||||
|
||||
void NPP_Print (NPP instance, NPPrint* printInfo)
|
||||
{
|
||||
}
|
||||
|
||||
int16 NPP_HandleEvent(NPP instance, void* event)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
// browser communicated window changes (creation, etc) here
|
||||
NPError NPP_SetWindow(NPP instance, NPWindow* window)
|
||||
{
|
||||
// strange...
|
||||
if (!window || !window->window)
|
||||
return NPERR_GENERIC_ERROR;
|
||||
// strange...
|
||||
if (!instance)
|
||||
return NPERR_INVALID_INSTANCE_ERROR;
|
||||
|
||||
// get back the plugin instance object
|
||||
PluginObject *plugin = (PluginObject *)instance->pdata;
|
||||
NPWebGamePlugin* webPlugin = plugin->webPlugin;
|
||||
if (webPlugin) {
|
||||
if (!window->window) {
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
// handle platform specific window and Torque 3D initialization
|
||||
webPlugin->Open(window);
|
||||
}
|
||||
|
||||
return NPERR_NO_ERROR;
|
||||
}
|
||||
|
||||
// return an error if no object defined
|
||||
return NPERR_GENERIC_ERROR;
|
||||
}
|
||||
106
Templates/Full/web/source/npplugin/windows/NPWebGamePlugin.rc
Normal file
106
Templates/Full/web/source/npplugin/windows/NPWebGamePlugin.rc
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "windows.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
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 1,0
|
||||
PRODUCTVERSION 1,0
|
||||
FILEFLAGSMASK 0x17L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x4L
|
||||
FILETYPE 0x2L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904e4"
|
||||
BEGIN
|
||||
VALUE "PluginType", "Mozilla"
|
||||
VALUE "FileDescription", "My Web Game Plugin 1.0"
|
||||
VALUE "FileExtents", "*"
|
||||
VALUE "FileVersion", "1,0"
|
||||
VALUE "InternalName", "My Web Game"
|
||||
VALUE "MIMEType", "application/x-fulltemplateplugin"
|
||||
VALUE "OriginalFilename", "NP Full Plugin.dll"
|
||||
VALUE "ProductName", "My Web Game"
|
||||
VALUE "ProductVersion", "1,0"
|
||||
VALUE "CompanyName", "My Game Company"
|
||||
VALUE "CompanyKey", "mygamecompany"
|
||||
VALUE "Plugin", "WebFullTemplate"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1252
|
||||
END
|
||||
END
|
||||
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""windows.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
||||
1973
Templates/Full/web/source/npplugin/windows/jni.h
Normal file
1973
Templates/Full/web/source/npplugin/windows/jni.h
Normal file
File diff suppressed because it is too large
Load diff
215
Templates/Full/web/source/npplugin/windows/jni_md.h
Normal file
215
Templates/Full/web/source/npplugin/windows/jni_md.h
Normal file
|
|
@ -0,0 +1,215 @@
|
|||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK *****
|
||||
*
|
||||
*
|
||||
* This Original Code has been modified by IBM Corporation.
|
||||
* Modifications made by IBM described herein are
|
||||
* Copyright (c) International Business Machines
|
||||
* Corporation, 2000
|
||||
*
|
||||
* Modifications to Mozilla code or documentation
|
||||
* identified per MPL Section 3.3
|
||||
*
|
||||
* Date Modified by Description of modification
|
||||
* 03/27/2000 IBM Corp. Set JNICALL to Optlink for
|
||||
* use in OS2
|
||||
*/
|
||||
|
||||
/*******************************************************************************
|
||||
* Netscape version of jni_md.h -- depends on jri_md.h
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef JNI_MD_H
|
||||
#define JNI_MD_H
|
||||
|
||||
#include "prtypes.h" /* needed for _declspec */
|
||||
|
||||
/*******************************************************************************
|
||||
* WHAT'S UP WITH THIS FILE?
|
||||
*
|
||||
* This is where we define the mystical JNI_PUBLIC_API macro that works on all
|
||||
* platforms. If you're running with Visual C++, Symantec C, or Borland's
|
||||
* development environment on the PC, you're all set. Or if you're on the Mac
|
||||
* with Metrowerks, Symantec or MPW with SC you're ok too. For UNIX it shouldn't
|
||||
* matter.
|
||||
|
||||
* Changes by sailesh on 9/26
|
||||
|
||||
* There are two symbols used in the declaration of the JNI functions
|
||||
* and native code that uses the JNI:
|
||||
* JNICALL - specifies the calling convention
|
||||
* JNIEXPORT - specifies export status of the function
|
||||
*
|
||||
* The syntax to specify calling conventions is different in Win16 and
|
||||
* Win32 - the brains at Micro$oft at work here. JavaSoft in their
|
||||
* infinite wisdom cares for no platform other than Win32, and so they
|
||||
* just define these two symbols as:
|
||||
|
||||
#define JNIEXPORT __declspec(dllexport)
|
||||
#define JNICALL __stdcall
|
||||
|
||||
* We deal with this, in the way JRI defines the JRI_PUBLIC_API, by
|
||||
* defining a macro called JNI_PUBLIC_API. Any of our developers who
|
||||
* wish to use code for Win16 and Win32, _must_ use JNI_PUBLIC_API to
|
||||
* be able to export functions properly.
|
||||
|
||||
* Since we must also maintain compatibility with JavaSoft, we
|
||||
* continue to define the symbol JNIEXPORT. However, use of this
|
||||
* internally is deprecated, since it will cause a mess on Win16.
|
||||
|
||||
* We _do not_ need a new symbol called JNICALL. Instead we
|
||||
* redefine JNICALL in the same way JRI_CALLBACK was defined.
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
/* DLL Entry modifiers... */
|
||||
/* Win32 */
|
||||
#if defined(XP_WIN) || defined(_WINDOWS) || defined(WIN32) || defined(_WIN32)
|
||||
# include <windows.h>
|
||||
# if defined(_MSC_VER) || defined(__GNUC__)
|
||||
# if defined(WIN32) || defined(_WIN32)
|
||||
# define JNI_PUBLIC_API(ResultType) _declspec(dllexport) ResultType __stdcall
|
||||
# define JNI_PUBLIC_VAR(VarType) VarType
|
||||
# define JNI_NATIVE_STUB(ResultType) _declspec(dllexport) ResultType
|
||||
# define JNICALL __stdcall
|
||||
# else /* !_WIN32 */
|
||||
# if defined(_WINDLL)
|
||||
# define JNI_PUBLIC_API(ResultType) ResultType __cdecl __export __loadds
|
||||
# define JNI_PUBLIC_VAR(VarType) VarType
|
||||
# define JNI_NATIVE_STUB(ResultType) ResultType __cdecl __loadds
|
||||
# define JNICALL __loadds
|
||||
# else /* !WINDLL */
|
||||
# define JNI_PUBLIC_API(ResultType) ResultType __cdecl __export
|
||||
# define JNI_PUBLIC_VAR(VarType) VarType
|
||||
# define JNI_NATIVE_STUB(ResultType) ResultType __cdecl __export
|
||||
# define JNICALL __export
|
||||
# endif /* !WINDLL */
|
||||
# endif /* !_WIN32 */
|
||||
# elif defined(__BORLANDC__)
|
||||
# if defined(WIN32) || defined(_WIN32)
|
||||
# define JNI_PUBLIC_API(ResultType) __export ResultType
|
||||
# define JNI_PUBLIC_VAR(VarType) VarType
|
||||
# define JNI_NATIVE_STUB(ResultType) __export ResultType
|
||||
# define JNICALL
|
||||
# else /* !_WIN32 */
|
||||
# define JNI_PUBLIC_API(ResultType) ResultType _cdecl _export _loadds
|
||||
# define JNI_PUBLIC_VAR(VarType) VarType
|
||||
# define JNI_NATIVE_STUB(ResultType) ResultType _cdecl _loadds
|
||||
# define JNICALL _loadds
|
||||
# endif
|
||||
# else
|
||||
# error Unsupported PC development environment.
|
||||
# endif
|
||||
# ifndef IS_LITTLE_ENDIAN
|
||||
# define IS_LITTLE_ENDIAN
|
||||
# endif
|
||||
/* This is the stuff inherited from JavaSoft .. */
|
||||
# define JNIEXPORT __declspec(dllexport)
|
||||
# define JNIIMPORT __declspec(dllimport)
|
||||
|
||||
/* OS/2 */
|
||||
#elif defined(XP_OS2)
|
||||
# ifdef XP_OS2_VACPP
|
||||
# define JNI_PUBLIC_API(ResultType) ResultType _System
|
||||
# define JNI_PUBLIC_VAR(VarType) VarType
|
||||
# define JNICALL _Optlink
|
||||
# define JNIEXPORT
|
||||
# define JNIIMPORT
|
||||
# elif defined(__declspec)
|
||||
# define JNI_PUBLIC_API(ResultType) __declspec(dllexport) ResultType
|
||||
# define JNI_PUBLIC_VAR(VarType) VarType
|
||||
# define JNI_NATIVE_STUB(ResultType) __declspec(dllexport) ResultType
|
||||
# define JNICALL
|
||||
# define JNIEXPORT
|
||||
# define JNIIMPORT
|
||||
# else
|
||||
# define JNI_PUBLIC_API(ResultType) ResultType
|
||||
# define JNI_PUBLIC_VAR(VarType) VarType
|
||||
# define JNICALL
|
||||
# define JNIEXPORT
|
||||
# define JNIIMPORT
|
||||
# endif
|
||||
# ifndef IS_LITTLE_ENDIAN
|
||||
# define IS_LITTLE_ENDIAN
|
||||
# endif
|
||||
|
||||
/* Mac */
|
||||
#elif macintosh || Macintosh || THINK_C
|
||||
# if defined(__MWERKS__) /* Metrowerks */
|
||||
# if !__option(enumsalwaysint)
|
||||
# error You need to define 'Enums Always Int' for your project.
|
||||
# endif
|
||||
# if defined(TARGET_CPU_68K) && !TARGET_RT_MAC_CFM
|
||||
# if !__option(fourbyteints)
|
||||
# error You need to define 'Struct Alignment: 68k' for your project.
|
||||
# endif
|
||||
# endif /* !GENERATINGCFM */
|
||||
# define JNI_PUBLIC_API(ResultType) __declspec(export) ResultType
|
||||
# define JNI_PUBLIC_VAR(VarType) JNI_PUBLIC_API(VarType)
|
||||
# define JNI_NATIVE_STUB(ResultType) JNI_PUBLIC_API(ResultType)
|
||||
# elif defined(__SC__) /* Symantec */
|
||||
# error What are the Symantec defines? (warren@netscape.com)
|
||||
# elif macintosh && applec /* MPW */
|
||||
# error Please upgrade to the latest MPW compiler (SC).
|
||||
# else
|
||||
# error Unsupported Mac development environment.
|
||||
# endif
|
||||
# define JNICALL
|
||||
/* This is the stuff inherited from JavaSoft .. */
|
||||
# define JNIEXPORT
|
||||
# define JNIIMPORT
|
||||
|
||||
/* Unix or else */
|
||||
#else
|
||||
# define JNI_PUBLIC_API(ResultType) ResultType
|
||||
# define JNI_PUBLIC_VAR(VarType) VarType
|
||||
# define JNI_NATIVE_STUB(ResultType) ResultType
|
||||
# define JNICALL
|
||||
/* This is the stuff inherited from JavaSoft .. */
|
||||
# define JNIEXPORT
|
||||
# define JNIIMPORT
|
||||
#endif
|
||||
|
||||
#ifndef FAR /* for non-Win16 */
|
||||
#define FAR
|
||||
#endif
|
||||
|
||||
/* Get the rest of the stuff from jri_md.h */
|
||||
#include "jri_md.h"
|
||||
|
||||
#endif /* JNI_MD_H */
|
||||
689
Templates/Full/web/source/npplugin/windows/jri.h
Normal file
689
Templates/Full/web/source/npplugin/windows/jri.h
Normal file
|
|
@ -0,0 +1,689 @@
|
|||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/*******************************************************************************
|
||||
* Java Runtime Interface
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef JRI_H
|
||||
#define JRI_H
|
||||
|
||||
#include "jritypes.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/*******************************************************************************
|
||||
* JRIEnv
|
||||
******************************************************************************/
|
||||
|
||||
/* The type of the JRIEnv interface. */
|
||||
typedef struct JRIEnvInterface JRIEnvInterface;
|
||||
|
||||
/* The type of a JRIEnv instance. */
|
||||
typedef const JRIEnvInterface* JRIEnv;
|
||||
|
||||
/*******************************************************************************
|
||||
* JRIEnv Operations
|
||||
******************************************************************************/
|
||||
|
||||
#define JRI_DefineClass(env, classLoader, buf, bufLen) \
|
||||
(((*(env))->DefineClass)(env, JRI_DefineClass_op, classLoader, buf, bufLen))
|
||||
|
||||
#define JRI_FindClass(env, name) \
|
||||
(((*(env))->FindClass)(env, JRI_FindClass_op, name))
|
||||
|
||||
#define JRI_Throw(env, obj) \
|
||||
(((*(env))->Throw)(env, JRI_Throw_op, obj))
|
||||
|
||||
#define JRI_ThrowNew(env, clazz, message) \
|
||||
(((*(env))->ThrowNew)(env, JRI_ThrowNew_op, clazz, message))
|
||||
|
||||
#define JRI_ExceptionOccurred(env) \
|
||||
(((*(env))->ExceptionOccurred)(env, JRI_ExceptionOccurred_op))
|
||||
|
||||
#define JRI_ExceptionDescribe(env) \
|
||||
(((*(env))->ExceptionDescribe)(env, JRI_ExceptionDescribe_op))
|
||||
|
||||
#define JRI_ExceptionClear(env) \
|
||||
(((*(env))->ExceptionClear)(env, JRI_ExceptionClear_op))
|
||||
|
||||
#define JRI_NewGlobalRef(env, ref) \
|
||||
(((*(env))->NewGlobalRef)(env, JRI_NewGlobalRef_op, ref))
|
||||
|
||||
#define JRI_DisposeGlobalRef(env, gref) \
|
||||
(((*(env))->DisposeGlobalRef)(env, JRI_DisposeGlobalRef_op, gref))
|
||||
|
||||
#define JRI_GetGlobalRef(env, gref) \
|
||||
(((*(env))->GetGlobalRef)(env, JRI_GetGlobalRef_op, gref))
|
||||
|
||||
#define JRI_SetGlobalRef(env, gref, ref) \
|
||||
(((*(env))->SetGlobalRef)(env, JRI_SetGlobalRef_op, gref, ref))
|
||||
|
||||
#define JRI_IsSameObject(env, a, b) \
|
||||
(((*(env))->IsSameObject)(env, JRI_IsSameObject_op, a, b))
|
||||
|
||||
#define JRI_NewObject(env) ((*(env))->NewObject)
|
||||
#define JRI_NewObjectV(env, clazz, methodID, args) \
|
||||
(((*(env))->NewObjectV)(env, JRI_NewObject_op_va_list, clazz, methodID, args))
|
||||
#define JRI_NewObjectA(env, clazz, method, args) \
|
||||
(((*(env))->NewObjectA)(env, JRI_NewObject_op_array, clazz, methodID, args))
|
||||
|
||||
#define JRI_GetObjectClass(env, obj) \
|
||||
(((*(env))->GetObjectClass)(env, JRI_GetObjectClass_op, obj))
|
||||
|
||||
#define JRI_IsInstanceOf(env, obj, clazz) \
|
||||
(((*(env))->IsInstanceOf)(env, JRI_IsInstanceOf_op, obj, clazz))
|
||||
|
||||
#define JRI_GetMethodID(env, clazz, name, sig) \
|
||||
(((*(env))->GetMethodID)(env, JRI_GetMethodID_op, clazz, name, sig))
|
||||
|
||||
#define JRI_CallMethod(env) ((*(env))->CallMethod)
|
||||
#define JRI_CallMethodV(env, obj, methodID, args) \
|
||||
(((*(env))->CallMethodV)(env, JRI_CallMethod_op_va_list, obj, methodID, args))
|
||||
#define JRI_CallMethodA(env, obj, methodID, args) \
|
||||
(((*(env))->CallMethodA)(env, JRI_CallMethod_op_array, obj, methodID, args))
|
||||
|
||||
#define JRI_CallMethodBoolean(env) ((*(env))->CallMethodBoolean)
|
||||
#define JRI_CallMethodBooleanV(env, obj, methodID, args) \
|
||||
(((*(env))->CallMethodBooleanV)(env, JRI_CallMethodBoolean_op_va_list, obj, methodID, args))
|
||||
#define JRI_CallMethodBooleanA(env, obj, methodID, args) \
|
||||
(((*(env))->CallMethodBooleanA)(env, JRI_CallMethodBoolean_op_array, obj, methodID, args))
|
||||
|
||||
#define JRI_CallMethodByte(env) ((*(env))->CallMethodByte)
|
||||
#define JRI_CallMethodByteV(env, obj, methodID, args) \
|
||||
(((*(env))->CallMethodByteV)(env, JRI_CallMethodByte_op_va_list, obj, methodID, args))
|
||||
#define JRI_CallMethodByteA(env, obj, methodID, args) \
|
||||
(((*(env))->CallMethodByteA)(env, JRI_CallMethodByte_op_array, obj, methodID, args))
|
||||
|
||||
#define JRI_CallMethodChar(env) ((*(env))->CallMethodChar)
|
||||
#define JRI_CallMethodCharV(env, obj, methodID, args) \
|
||||
(((*(env))->CallMethodCharV)(env, JRI_CallMethodChar_op_va_list, obj, methodID, args))
|
||||
#define JRI_CallMethodCharA(env, obj, methodID, args) \
|
||||
(((*(env))->CallMethodCharA)(env, JRI_CallMethodChar_op_array, obj, methodID, args))
|
||||
|
||||
#define JRI_CallMethodShort(env) ((*(env))->CallMethodShort)
|
||||
#define JRI_CallMethodShortV(env, obj, methodID, args) \
|
||||
(((*(env))->CallMethodShortV)(env, JRI_CallMethodShort_op_va_list, obj, methodID, args))
|
||||
#define JRI_CallMethodShortA(env, obj, methodID, args) \
|
||||
(((*(env))->CallMethodShortA)(env, JRI_CallMethodShort_op_array, obj, methodID, args))
|
||||
|
||||
#define JRI_CallMethodInt(env) ((*(env))->CallMethodInt)
|
||||
#define JRI_CallMethodIntV(env, obj, methodID, args) \
|
||||
(((*(env))->CallMethodIntV)(env, JRI_CallMethodInt_op_va_list, obj, methodID, args))
|
||||
#define JRI_CallMethodIntA(env, obj, methodID, args) \
|
||||
(((*(env))->CallMethodIntA)(env, JRI_CallMethodInt_op_array, obj, methodID, args))
|
||||
|
||||
#define JRI_CallMethodLong(env) ((*(env))->CallMethodLong)
|
||||
#define JRI_CallMethodLongV(env, obj, methodID, args) \
|
||||
(((*(env))->CallMethodLongV)(env, JRI_CallMethodLong_op_va_list, obj, methodID, args))
|
||||
#define JRI_CallMethodLongA(env, obj, methodID, args) \
|
||||
(((*(env))->CallMethodLongA)(env, JRI_CallMethodLong_op_array, obj, methodID, args))
|
||||
|
||||
#define JRI_CallMethodFloat(env) ((*(env))->CallMethodFloat)
|
||||
#define JRI_CallMethodFloatV(env, obj, methodID, args) \
|
||||
(((*(env))->CallMethodFloatV)(env, JRI_CallMethodFloat_op_va_list, obj, methodID, args))
|
||||
#define JRI_CallMethodFloatA(env, obj, methodID, args) \
|
||||
(((*(env))->CallMethodFloatA)(env, JRI_CallMethodFloat_op_array, obj, methodID, args))
|
||||
|
||||
#define JRI_CallMethodDouble(env) ((*(env))->CallMethodDouble)
|
||||
#define JRI_CallMethodDoubleV(env, obj, methodID, args) \
|
||||
(((*(env))->CallMethodDoubleV)(env, JRI_CallMethodDouble_op_va_list, obj, methodID, args))
|
||||
#define JRI_CallMethodDoubleA(env, obj, methodID, args) \
|
||||
(((*(env))->CallMethodDoubleA)(env, JRI_CallMethodDouble_op_array, obj, methodID, args))
|
||||
|
||||
#define JRI_GetFieldID(env, clazz, name, sig) \
|
||||
(((*(env))->GetFieldID)(env, JRI_GetFieldID_op, clazz, name, sig))
|
||||
|
||||
#define JRI_GetField(env, obj, fieldID) \
|
||||
(((*(env))->GetField)(env, JRI_GetField_op, obj, fieldID))
|
||||
|
||||
#define JRI_GetFieldBoolean(env, obj, fieldID) \
|
||||
(((*(env))->GetFieldBoolean)(env, JRI_GetFieldBoolean_op, obj, fieldID))
|
||||
|
||||
#define JRI_GetFieldByte(env, obj, fieldID) \
|
||||
(((*(env))->GetFieldByte)(env, JRI_GetFieldByte_op, obj, fieldID))
|
||||
|
||||
#define JRI_GetFieldChar(env, obj, fieldID) \
|
||||
(((*(env))->GetFieldChar)(env, JRI_GetFieldChar_op, obj, fieldID))
|
||||
|
||||
#define JRI_GetFieldShort(env, obj, fieldID) \
|
||||
(((*(env))->GetFieldShort)(env, JRI_GetFieldShort_op, obj, fieldID))
|
||||
|
||||
#define JRI_GetFieldInt(env, obj, fieldID) \
|
||||
(((*(env))->GetFieldInt)(env, JRI_GetFieldInt_op, obj, fieldID))
|
||||
|
||||
#define JRI_GetFieldLong(env, obj, fieldID) \
|
||||
(((*(env))->GetFieldLong)(env, JRI_GetFieldLong_op, obj, fieldID))
|
||||
|
||||
#define JRI_GetFieldFloat(env, obj, fieldID) \
|
||||
(((*(env))->GetFieldFloat)(env, JRI_GetFieldFloat_op, obj, fieldID))
|
||||
|
||||
#define JRI_GetFieldDouble(env, obj, fieldID) \
|
||||
(((*(env))->GetFieldDouble)(env, JRI_GetFieldDouble_op, obj, fieldID))
|
||||
|
||||
#define JRI_SetField(env, obj, fieldID, value) \
|
||||
(((*(env))->SetField)(env, JRI_SetField_op, obj, fieldID, value))
|
||||
|
||||
#define JRI_SetFieldBoolean(env, obj, fieldID, value) \
|
||||
(((*(env))->SetFieldBoolean)(env, JRI_SetFieldBoolean_op, obj, fieldID, value))
|
||||
|
||||
#define JRI_SetFieldByte(env, obj, fieldID, value) \
|
||||
(((*(env))->SetFieldByte)(env, JRI_SetFieldByte_op, obj, fieldID, value))
|
||||
|
||||
#define JRI_SetFieldChar(env, obj, fieldID, value) \
|
||||
(((*(env))->SetFieldChar)(env, JRI_SetFieldChar_op, obj, fieldID, value))
|
||||
|
||||
#define JRI_SetFieldShort(env, obj, fieldID, value) \
|
||||
(((*(env))->SetFieldShort)(env, JRI_SetFieldShort_op, obj, fieldID, value))
|
||||
|
||||
#define JRI_SetFieldInt(env, obj, fieldID, value) \
|
||||
(((*(env))->SetFieldInt)(env, JRI_SetFieldInt_op, obj, fieldID, value))
|
||||
|
||||
#define JRI_SetFieldLong(env, obj, fieldID, value) \
|
||||
(((*(env))->SetFieldLong)(env, JRI_SetFieldLong_op, obj, fieldID, value))
|
||||
|
||||
#define JRI_SetFieldFloat(env, obj, fieldID, value) \
|
||||
(((*(env))->SetFieldFloat)(env, JRI_SetFieldFloat_op, obj, fieldID, value))
|
||||
|
||||
#define JRI_SetFieldDouble(env, obj, fieldID, value) \
|
||||
(((*(env))->SetFieldDouble)(env, JRI_SetFieldDouble_op, obj, fieldID, value))
|
||||
|
||||
#define JRI_IsSubclassOf(env, a, b) \
|
||||
(((*(env))->IsSubclassOf)(env, JRI_IsSubclassOf_op, a, b))
|
||||
|
||||
#define JRI_GetStaticMethodID(env, clazz, name, sig) \
|
||||
(((*(env))->GetStaticMethodID)(env, JRI_GetStaticMethodID_op, clazz, name, sig))
|
||||
|
||||
#define JRI_CallStaticMethod(env) ((*(env))->CallStaticMethod)
|
||||
#define JRI_CallStaticMethodV(env, clazz, methodID, args) \
|
||||
(((*(env))->CallStaticMethodV)(env, JRI_CallStaticMethod_op_va_list, clazz, methodID, args))
|
||||
#define JRI_CallStaticMethodA(env, clazz, methodID, args) \
|
||||
(((*(env))->CallStaticMethodA)(env, JRI_CallStaticMethod_op_array, clazz, methodID, args))
|
||||
|
||||
#define JRI_CallStaticMethodBoolean(env) ((*(env))->CallStaticMethodBoolean)
|
||||
#define JRI_CallStaticMethodBooleanV(env, clazz, methodID, args) \
|
||||
(((*(env))->CallStaticMethodBooleanV)(env, JRI_CallStaticMethodBoolean_op_va_list, clazz, methodID, args))
|
||||
#define JRI_CallStaticMethodBooleanA(env, clazz, methodID, args) \
|
||||
(((*(env))->CallStaticMethodBooleanA)(env, JRI_CallStaticMethodBoolean_op_array, clazz, methodID, args))
|
||||
|
||||
#define JRI_CallStaticMethodByte(env) ((*(env))->CallStaticMethodByte)
|
||||
#define JRI_CallStaticMethodByteV(env, clazz, methodID, args) \
|
||||
(((*(env))->CallStaticMethodByteV)(env, JRI_CallStaticMethodByte_op_va_list, clazz, methodID, args))
|
||||
#define JRI_CallStaticMethodByteA(env, clazz, methodID, args) \
|
||||
(((*(env))->CallStaticMethodByteA)(env, JRI_CallStaticMethodByte_op_array, clazz, methodID, args))
|
||||
|
||||
#define JRI_CallStaticMethodChar(env) ((*(env))->CallStaticMethodChar)
|
||||
#define JRI_CallStaticMethodCharV(env, clazz, methodID, args) \
|
||||
(((*(env))->CallStaticMethodCharV)(env, JRI_CallStaticMethodChar_op_va_list, clazz, methodID, args))
|
||||
#define JRI_CallStaticMethodCharA(env, clazz, methodID, args) \
|
||||
(((*(env))->CallStaticMethodCharA)(env, JRI_CallStaticMethodChar_op_array, clazz, methodID, args))
|
||||
|
||||
#define JRI_CallStaticMethodShort(env) ((*(env))->CallStaticMethodShort)
|
||||
#define JRI_CallStaticMethodShortV(env, clazz, methodID, args) \
|
||||
(((*(env))->CallStaticMethodShortV)(env, JRI_CallStaticMethodShort_op_va_list, clazz, methodID, args))
|
||||
#define JRI_CallStaticMethodShortA(env, clazz, methodID, args) \
|
||||
(((*(env))->CallStaticMethodShortA)(env, JRI_CallStaticMethodShort_op_array, clazz, methodID, args))
|
||||
|
||||
#define JRI_CallStaticMethodInt(env) ((*(env))->CallStaticMethodInt)
|
||||
#define JRI_CallStaticMethodIntV(env, clazz, methodID, args) \
|
||||
(((*(env))->CallStaticMethodIntV)(env, JRI_CallStaticMethodInt_op_va_list, clazz, methodID, args))
|
||||
#define JRI_CallStaticMethodIntA(env, clazz, methodID, args) \
|
||||
(((*(env))->CallStaticMethodIntA)(env, JRI_CallStaticMethodInt_op_array, clazz, methodID, args))
|
||||
|
||||
#define JRI_CallStaticMethodLong(env) ((*(env))->CallStaticMethodLong)
|
||||
#define JRI_CallStaticMethodLongV(env, clazz, methodID, args) \
|
||||
(((*(env))->CallStaticMethodLongV)(env, JRI_CallStaticMethodLong_op_va_list, clazz, methodID, args))
|
||||
#define JRI_CallStaticMethodLongA(env, clazz, methodID, args) \
|
||||
(((*(env))->CallStaticMethodLongA)(env, JRI_CallStaticMethodLong_op_array, clazz, methodID, args))
|
||||
|
||||
#define JRI_CallStaticMethodFloat(env) ((*(env))->CallStaticMethodFloat)
|
||||
#define JRI_CallStaticMethodFloatV(env, clazz, methodID, args) \
|
||||
(((*(env))->CallStaticMethodFloatV)(env, JRI_CallStaticMethodFloat_op_va_list, clazz, methodID, args))
|
||||
#define JRI_CallStaticMethodFloatA(env, clazz, methodID, args) \
|
||||
(((*(env))->CallStaticMethodFloatA)(env, JRI_CallStaticMethodFloat_op_array, clazz, methodID, args))
|
||||
|
||||
#define JRI_CallStaticMethodDouble(env) ((*(env))->CallStaticMethodDouble)
|
||||
#define JRI_CallStaticMethodDoubleV(env, clazz, methodID, args) \
|
||||
(((*(env))->CallStaticMethodDoubleV)(env, JRI_CallStaticMethodDouble_op_va_list, clazz, methodID, args))
|
||||
#define JRI_CallStaticMethodDoubleA(env, clazz, methodID, args) \
|
||||
(((*(env))->CallStaticMethodDoubleA)(env, JRI_CallStaticMethodDouble_op_array, clazz, methodID, args))
|
||||
|
||||
#define JRI_GetStaticFieldID(env, clazz, name, sig) \
|
||||
(((*(env))->GetStaticFieldID)(env, JRI_GetStaticFieldID_op, clazz, name, sig))
|
||||
|
||||
#define JRI_GetStaticField(env, clazz, fieldID) \
|
||||
(((*(env))->GetStaticField)(env, JRI_GetStaticField_op, clazz, fieldID))
|
||||
|
||||
#define JRI_GetStaticFieldBoolean(env, clazz, fieldID) \
|
||||
(((*(env))->GetStaticFieldBoolean)(env, JRI_GetStaticFieldBoolean_op, clazz, fieldID))
|
||||
|
||||
#define JRI_GetStaticFieldByte(env, clazz, fieldID) \
|
||||
(((*(env))->GetStaticFieldByte)(env, JRI_GetStaticFieldByte_op, clazz, fieldID))
|
||||
|
||||
#define JRI_GetStaticFieldChar(env, clazz, fieldID) \
|
||||
(((*(env))->GetStaticFieldChar)(env, JRI_GetStaticFieldChar_op, clazz, fieldID))
|
||||
|
||||
#define JRI_GetStaticFieldShort(env, clazz, fieldID) \
|
||||
(((*(env))->GetStaticFieldShort)(env, JRI_GetStaticFieldShort_op, clazz, fieldID))
|
||||
|
||||
#define JRI_GetStaticFieldInt(env, clazz, fieldID) \
|
||||
(((*(env))->GetStaticFieldInt)(env, JRI_GetStaticFieldInt_op, clazz, fieldID))
|
||||
|
||||
#define JRI_GetStaticFieldLong(env, clazz, fieldID) \
|
||||
(((*(env))->GetStaticFieldLong)(env, JRI_GetStaticFieldLong_op, clazz, fieldID))
|
||||
|
||||
#define JRI_GetStaticFieldFloat(env, clazz, fieldID) \
|
||||
(((*(env))->GetStaticFieldFloat)(env, JRI_GetStaticFieldFloat_op, clazz, fieldID))
|
||||
|
||||
#define JRI_GetStaticFieldDouble(env, clazz, fieldID) \
|
||||
(((*(env))->GetStaticFieldDouble)(env, JRI_GetStaticFieldDouble_op, clazz, fieldID))
|
||||
|
||||
#define JRI_SetStaticField(env, clazz, fieldID, value) \
|
||||
(((*(env))->SetStaticField)(env, JRI_SetStaticField_op, clazz, fieldID, value))
|
||||
|
||||
#define JRI_SetStaticFieldBoolean(env, clazz, fieldID, value) \
|
||||
(((*(env))->SetStaticFieldBoolean)(env, JRI_SetStaticFieldBoolean_op, clazz, fieldID, value))
|
||||
|
||||
#define JRI_SetStaticFieldByte(env, clazz, fieldID, value) \
|
||||
(((*(env))->SetStaticFieldByte)(env, JRI_SetStaticFieldByte_op, clazz, fieldID, value))
|
||||
|
||||
#define JRI_SetStaticFieldChar(env, clazz, fieldID, value) \
|
||||
(((*(env))->SetStaticFieldChar)(env, JRI_SetStaticFieldChar_op, clazz, fieldID, value))
|
||||
|
||||
#define JRI_SetStaticFieldShort(env, clazz, fieldID, value) \
|
||||
(((*(env))->SetStaticFieldShort)(env, JRI_SetStaticFieldShort_op, clazz, fieldID, value))
|
||||
|
||||
#define JRI_SetStaticFieldInt(env, clazz, fieldID, value) \
|
||||
(((*(env))->SetStaticFieldInt)(env, JRI_SetStaticFieldInt_op, clazz, fieldID, value))
|
||||
|
||||
#define JRI_SetStaticFieldLong(env, clazz, fieldID, value) \
|
||||
(((*(env))->SetStaticFieldLong)(env, JRI_SetStaticFieldLong_op, clazz, fieldID, value))
|
||||
|
||||
#define JRI_SetStaticFieldFloat(env, clazz, fieldID, value) \
|
||||
(((*(env))->SetStaticFieldFloat)(env, JRI_SetStaticFieldFloat_op, clazz, fieldID, value))
|
||||
|
||||
#define JRI_SetStaticFieldDouble(env, clazz, fieldID, value) \
|
||||
(((*(env))->SetStaticFieldDouble)(env, JRI_SetStaticFieldDouble_op, clazz, fieldID, value))
|
||||
|
||||
#define JRI_NewString(env, unicode, len) \
|
||||
(((*(env))->NewString)(env, JRI_NewString_op, unicode, len))
|
||||
|
||||
#define JRI_GetStringLength(env, string) \
|
||||
(((*(env))->GetStringLength)(env, JRI_GetStringLength_op, string))
|
||||
|
||||
#define JRI_GetStringChars(env, string) \
|
||||
(((*(env))->GetStringChars)(env, JRI_GetStringChars_op, string))
|
||||
|
||||
#define JRI_NewStringUTF(env, utf, len) \
|
||||
(((*(env))->NewStringUTF)(env, JRI_NewStringUTF_op, utf, len))
|
||||
|
||||
#define JRI_GetStringUTFLength(env, string) \
|
||||
(((*(env))->GetStringUTFLength)(env, JRI_GetStringUTFLength_op, string))
|
||||
|
||||
#define JRI_GetStringUTFChars(env, string) \
|
||||
(((*(env))->GetStringUTFChars)(env, JRI_GetStringUTFChars_op, string))
|
||||
|
||||
#define JRI_NewScalarArray(env, length, elementSig, initialElements) \
|
||||
(((*(env))->NewScalarArray)(env, JRI_NewScalarArray_op, length, elementSig, initialElements))
|
||||
|
||||
#define JRI_GetScalarArrayLength(env, array) \
|
||||
(((*(env))->GetScalarArrayLength)(env, JRI_GetScalarArrayLength_op, array))
|
||||
|
||||
#define JRI_GetScalarArrayElements(env, array) \
|
||||
(((*(env))->GetScalarArrayElements)(env, JRI_GetScalarArrayElements_op, array))
|
||||
|
||||
#define JRI_NewObjectArray(env, length, elementClass, initialElement) \
|
||||
(((*(env))->NewObjectArray)(env, JRI_NewObjectArray_op, length, elementClass, initialElement))
|
||||
|
||||
#define JRI_GetObjectArrayLength(env, array) \
|
||||
(((*(env))->GetObjectArrayLength)(env, JRI_GetObjectArrayLength_op, array))
|
||||
|
||||
#define JRI_GetObjectArrayElement(env, array, index) \
|
||||
(((*(env))->GetObjectArrayElement)(env, JRI_GetObjectArrayElement_op, array, index))
|
||||
|
||||
#define JRI_SetObjectArrayElement(env, array, index, value) \
|
||||
(((*(env))->SetObjectArrayElement)(env, JRI_SetObjectArrayElement_op, array, index, value))
|
||||
|
||||
#define JRI_RegisterNatives(env, clazz, nameAndSigArray, nativeProcArray) \
|
||||
(((*(env))->RegisterNatives)(env, JRI_RegisterNatives_op, clazz, nameAndSigArray, nativeProcArray))
|
||||
|
||||
#define JRI_UnregisterNatives(env, clazz) \
|
||||
(((*(env))->UnregisterNatives)(env, JRI_UnregisterNatives_op, clazz))
|
||||
|
||||
#define JRI_NewStringPlatform(env, string, len, encoding, encodingLength) \
|
||||
(((*(env))->NewStringPlatform)(env, JRI_NewStringPlatform_op, string, len, encoding, encodingLength))
|
||||
|
||||
#define JRI_GetStringPlatformChars(env, string, encoding, encodingLength) \
|
||||
(((*(env))->GetStringPlatformChars)(env, JRI_GetStringPlatformChars_op, string, encoding, encodingLength))
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* JRIEnv Interface
|
||||
******************************************************************************/
|
||||
|
||||
struct java_lang_ClassLoader;
|
||||
struct java_lang_Class;
|
||||
struct java_lang_Throwable;
|
||||
struct java_lang_Object;
|
||||
struct java_lang_String;
|
||||
|
||||
struct JRIEnvInterface {
|
||||
void* reserved0;
|
||||
void* reserved1;
|
||||
void* reserved2;
|
||||
void* reserved3;
|
||||
struct java_lang_Class* (*FindClass)(JRIEnv* env, jint op, const char* a);
|
||||
void (*Throw)(JRIEnv* env, jint op, struct java_lang_Throwable* a);
|
||||
void (*ThrowNew)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b);
|
||||
struct java_lang_Throwable* (*ExceptionOccurred)(JRIEnv* env, jint op);
|
||||
void (*ExceptionDescribe)(JRIEnv* env, jint op);
|
||||
void (*ExceptionClear)(JRIEnv* env, jint op);
|
||||
jglobal (*NewGlobalRef)(JRIEnv* env, jint op, void* a);
|
||||
void (*DisposeGlobalRef)(JRIEnv* env, jint op, jglobal a);
|
||||
void* (*GetGlobalRef)(JRIEnv* env, jint op, jglobal a);
|
||||
void (*SetGlobalRef)(JRIEnv* env, jint op, jglobal a, void* b);
|
||||
jbool (*IsSameObject)(JRIEnv* env, jint op, void* a, void* b);
|
||||
void* (*NewObject)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
|
||||
void* (*NewObjectV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
|
||||
void* (*NewObjectA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
|
||||
struct java_lang_Class* (*GetObjectClass)(JRIEnv* env, jint op, void* a);
|
||||
jbool (*IsInstanceOf)(JRIEnv* env, jint op, void* a, struct java_lang_Class* b);
|
||||
jint (*GetMethodID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c);
|
||||
void* (*CallMethod)(JRIEnv* env, jint op, void* a, jint b, ...);
|
||||
void* (*CallMethodV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
|
||||
void* (*CallMethodA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
|
||||
jbool (*CallMethodBoolean)(JRIEnv* env, jint op, void* a, jint b, ...);
|
||||
jbool (*CallMethodBooleanV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
|
||||
jbool (*CallMethodBooleanA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
|
||||
jbyte (*CallMethodByte)(JRIEnv* env, jint op, void* a, jint b, ...);
|
||||
jbyte (*CallMethodByteV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
|
||||
jbyte (*CallMethodByteA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
|
||||
jchar (*CallMethodChar)(JRIEnv* env, jint op, void* a, jint b, ...);
|
||||
jchar (*CallMethodCharV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
|
||||
jchar (*CallMethodCharA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
|
||||
jshort (*CallMethodShort)(JRIEnv* env, jint op, void* a, jint b, ...);
|
||||
jshort (*CallMethodShortV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
|
||||
jshort (*CallMethodShortA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
|
||||
jint (*CallMethodInt)(JRIEnv* env, jint op, void* a, jint b, ...);
|
||||
jint (*CallMethodIntV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
|
||||
jint (*CallMethodIntA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
|
||||
jlong (*CallMethodLong)(JRIEnv* env, jint op, void* a, jint b, ...);
|
||||
jlong (*CallMethodLongV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
|
||||
jlong (*CallMethodLongA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
|
||||
jfloat (*CallMethodFloat)(JRIEnv* env, jint op, void* a, jint b, ...);
|
||||
jfloat (*CallMethodFloatV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
|
||||
jfloat (*CallMethodFloatA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
|
||||
jdouble (*CallMethodDouble)(JRIEnv* env, jint op, void* a, jint b, ...);
|
||||
jdouble (*CallMethodDoubleV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
|
||||
jdouble (*CallMethodDoubleA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
|
||||
jint (*GetFieldID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c);
|
||||
void* (*GetField)(JRIEnv* env, jint op, void* a, jint b);
|
||||
jbool (*GetFieldBoolean)(JRIEnv* env, jint op, void* a, jint b);
|
||||
jbyte (*GetFieldByte)(JRIEnv* env, jint op, void* a, jint b);
|
||||
jchar (*GetFieldChar)(JRIEnv* env, jint op, void* a, jint b);
|
||||
jshort (*GetFieldShort)(JRIEnv* env, jint op, void* a, jint b);
|
||||
jint (*GetFieldInt)(JRIEnv* env, jint op, void* a, jint b);
|
||||
jlong (*GetFieldLong)(JRIEnv* env, jint op, void* a, jint b);
|
||||
jfloat (*GetFieldFloat)(JRIEnv* env, jint op, void* a, jint b);
|
||||
jdouble (*GetFieldDouble)(JRIEnv* env, jint op, void* a, jint b);
|
||||
void (*SetField)(JRIEnv* env, jint op, void* a, jint b, void* c);
|
||||
void (*SetFieldBoolean)(JRIEnv* env, jint op, void* a, jint b, jbool c);
|
||||
void (*SetFieldByte)(JRIEnv* env, jint op, void* a, jint b, jbyte c);
|
||||
void (*SetFieldChar)(JRIEnv* env, jint op, void* a, jint b, jchar c);
|
||||
void (*SetFieldShort)(JRIEnv* env, jint op, void* a, jint b, jshort c);
|
||||
void (*SetFieldInt)(JRIEnv* env, jint op, void* a, jint b, jint c);
|
||||
void (*SetFieldLong)(JRIEnv* env, jint op, void* a, jint b, jlong c);
|
||||
void (*SetFieldFloat)(JRIEnv* env, jint op, void* a, jint b, jfloat c);
|
||||
void (*SetFieldDouble)(JRIEnv* env, jint op, void* a, jint b, jdouble c);
|
||||
jbool (*IsSubclassOf)(JRIEnv* env, jint op, struct java_lang_Class* a, struct java_lang_Class* b);
|
||||
jint (*GetStaticMethodID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c);
|
||||
void* (*CallStaticMethod)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
|
||||
void* (*CallStaticMethodV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
|
||||
void* (*CallStaticMethodA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
|
||||
jbool (*CallStaticMethodBoolean)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
|
||||
jbool (*CallStaticMethodBooleanV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
|
||||
jbool (*CallStaticMethodBooleanA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
|
||||
jbyte (*CallStaticMethodByte)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
|
||||
jbyte (*CallStaticMethodByteV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
|
||||
jbyte (*CallStaticMethodByteA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
|
||||
jchar (*CallStaticMethodChar)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
|
||||
jchar (*CallStaticMethodCharV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
|
||||
jchar (*CallStaticMethodCharA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
|
||||
jshort (*CallStaticMethodShort)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
|
||||
jshort (*CallStaticMethodShortV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
|
||||
jshort (*CallStaticMethodShortA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
|
||||
jint (*CallStaticMethodInt)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
|
||||
jint (*CallStaticMethodIntV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
|
||||
jint (*CallStaticMethodIntA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
|
||||
jlong (*CallStaticMethodLong)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
|
||||
jlong (*CallStaticMethodLongV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
|
||||
jlong (*CallStaticMethodLongA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
|
||||
jfloat (*CallStaticMethodFloat)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
|
||||
jfloat (*CallStaticMethodFloatV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
|
||||
jfloat (*CallStaticMethodFloatA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
|
||||
jdouble (*CallStaticMethodDouble)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
|
||||
jdouble (*CallStaticMethodDoubleV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
|
||||
jdouble (*CallStaticMethodDoubleA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
|
||||
jint (*GetStaticFieldID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c);
|
||||
void* (*GetStaticField)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
|
||||
jbool (*GetStaticFieldBoolean)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
|
||||
jbyte (*GetStaticFieldByte)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
|
||||
jchar (*GetStaticFieldChar)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
|
||||
jshort (*GetStaticFieldShort)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
|
||||
jint (*GetStaticFieldInt)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
|
||||
jlong (*GetStaticFieldLong)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
|
||||
jfloat (*GetStaticFieldFloat)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
|
||||
jdouble (*GetStaticFieldDouble)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
|
||||
void (*SetStaticField)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, void* c);
|
||||
void (*SetStaticFieldBoolean)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jbool c);
|
||||
void (*SetStaticFieldByte)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jbyte c);
|
||||
void (*SetStaticFieldChar)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jchar c);
|
||||
void (*SetStaticFieldShort)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jshort c);
|
||||
void (*SetStaticFieldInt)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jint c);
|
||||
void (*SetStaticFieldLong)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jlong c);
|
||||
void (*SetStaticFieldFloat)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jfloat c);
|
||||
void (*SetStaticFieldDouble)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jdouble c);
|
||||
struct java_lang_String* (*NewString)(JRIEnv* env, jint op, const jchar* a, jint b);
|
||||
jint (*GetStringLength)(JRIEnv* env, jint op, struct java_lang_String* a);
|
||||
const jchar* (*GetStringChars)(JRIEnv* env, jint op, struct java_lang_String* a);
|
||||
struct java_lang_String* (*NewStringUTF)(JRIEnv* env, jint op, const jbyte* a, jint b);
|
||||
jint (*GetStringUTFLength)(JRIEnv* env, jint op, struct java_lang_String* a);
|
||||
const jbyte* (*GetStringUTFChars)(JRIEnv* env, jint op, struct java_lang_String* a);
|
||||
void* (*NewScalarArray)(JRIEnv* env, jint op, jint a, const char* b, const jbyte* c);
|
||||
jint (*GetScalarArrayLength)(JRIEnv* env, jint op, void* a);
|
||||
jbyte* (*GetScalarArrayElements)(JRIEnv* env, jint op, void* a);
|
||||
void* (*NewObjectArray)(JRIEnv* env, jint op, jint a, struct java_lang_Class* b, void* c);
|
||||
jint (*GetObjectArrayLength)(JRIEnv* env, jint op, void* a);
|
||||
void* (*GetObjectArrayElement)(JRIEnv* env, jint op, void* a, jint b);
|
||||
void (*SetObjectArrayElement)(JRIEnv* env, jint op, void* a, jint b, void* c);
|
||||
void (*RegisterNatives)(JRIEnv* env, jint op, struct java_lang_Class* a, char** b, void** c);
|
||||
void (*UnregisterNatives)(JRIEnv* env, jint op, struct java_lang_Class* a);
|
||||
struct java_lang_Class* (*DefineClass)(JRIEnv* env, jint op, struct java_lang_ClassLoader* a, jbyte* b, jsize bLen);
|
||||
struct java_lang_String* (*NewStringPlatform)(JRIEnv* env, jint op, const jbyte* a, jint b, const jbyte* c, jint d);
|
||||
const jbyte* (*GetStringPlatformChars)(JRIEnv* env, jint op, struct java_lang_String* a, const jbyte* b, jint c);
|
||||
};
|
||||
|
||||
/*
|
||||
** ****************************************************************************
|
||||
** JRIEnv Operation IDs
|
||||
** ***************************************************************************
|
||||
*/
|
||||
|
||||
typedef enum JRIEnvOperations {
|
||||
JRI_Reserved0_op,
|
||||
JRI_Reserved1_op,
|
||||
JRI_Reserved2_op,
|
||||
JRI_Reserved3_op,
|
||||
JRI_FindClass_op,
|
||||
JRI_Throw_op,
|
||||
JRI_ThrowNew_op,
|
||||
JRI_ExceptionOccurred_op,
|
||||
JRI_ExceptionDescribe_op,
|
||||
JRI_ExceptionClear_op,
|
||||
JRI_NewGlobalRef_op,
|
||||
JRI_DisposeGlobalRef_op,
|
||||
JRI_GetGlobalRef_op,
|
||||
JRI_SetGlobalRef_op,
|
||||
JRI_IsSameObject_op,
|
||||
JRI_NewObject_op,
|
||||
JRI_NewObject_op_va_list,
|
||||
JRI_NewObject_op_array,
|
||||
JRI_GetObjectClass_op,
|
||||
JRI_IsInstanceOf_op,
|
||||
JRI_GetMethodID_op,
|
||||
JRI_CallMethod_op,
|
||||
JRI_CallMethod_op_va_list,
|
||||
JRI_CallMethod_op_array,
|
||||
JRI_CallMethodBoolean_op,
|
||||
JRI_CallMethodBoolean_op_va_list,
|
||||
JRI_CallMethodBoolean_op_array,
|
||||
JRI_CallMethodByte_op,
|
||||
JRI_CallMethodByte_op_va_list,
|
||||
JRI_CallMethodByte_op_array,
|
||||
JRI_CallMethodChar_op,
|
||||
JRI_CallMethodChar_op_va_list,
|
||||
JRI_CallMethodChar_op_array,
|
||||
JRI_CallMethodShort_op,
|
||||
JRI_CallMethodShort_op_va_list,
|
||||
JRI_CallMethodShort_op_array,
|
||||
JRI_CallMethodInt_op,
|
||||
JRI_CallMethodInt_op_va_list,
|
||||
JRI_CallMethodInt_op_array,
|
||||
JRI_CallMethodLong_op,
|
||||
JRI_CallMethodLong_op_va_list,
|
||||
JRI_CallMethodLong_op_array,
|
||||
JRI_CallMethodFloat_op,
|
||||
JRI_CallMethodFloat_op_va_list,
|
||||
JRI_CallMethodFloat_op_array,
|
||||
JRI_CallMethodDouble_op,
|
||||
JRI_CallMethodDouble_op_va_list,
|
||||
JRI_CallMethodDouble_op_array,
|
||||
JRI_GetFieldID_op,
|
||||
JRI_GetField_op,
|
||||
JRI_GetFieldBoolean_op,
|
||||
JRI_GetFieldByte_op,
|
||||
JRI_GetFieldChar_op,
|
||||
JRI_GetFieldShort_op,
|
||||
JRI_GetFieldInt_op,
|
||||
JRI_GetFieldLong_op,
|
||||
JRI_GetFieldFloat_op,
|
||||
JRI_GetFieldDouble_op,
|
||||
JRI_SetField_op,
|
||||
JRI_SetFieldBoolean_op,
|
||||
JRI_SetFieldByte_op,
|
||||
JRI_SetFieldChar_op,
|
||||
JRI_SetFieldShort_op,
|
||||
JRI_SetFieldInt_op,
|
||||
JRI_SetFieldLong_op,
|
||||
JRI_SetFieldFloat_op,
|
||||
JRI_SetFieldDouble_op,
|
||||
JRI_IsSubclassOf_op,
|
||||
JRI_GetStaticMethodID_op,
|
||||
JRI_CallStaticMethod_op,
|
||||
JRI_CallStaticMethod_op_va_list,
|
||||
JRI_CallStaticMethod_op_array,
|
||||
JRI_CallStaticMethodBoolean_op,
|
||||
JRI_CallStaticMethodBoolean_op_va_list,
|
||||
JRI_CallStaticMethodBoolean_op_array,
|
||||
JRI_CallStaticMethodByte_op,
|
||||
JRI_CallStaticMethodByte_op_va_list,
|
||||
JRI_CallStaticMethodByte_op_array,
|
||||
JRI_CallStaticMethodChar_op,
|
||||
JRI_CallStaticMethodChar_op_va_list,
|
||||
JRI_CallStaticMethodChar_op_array,
|
||||
JRI_CallStaticMethodShort_op,
|
||||
JRI_CallStaticMethodShort_op_va_list,
|
||||
JRI_CallStaticMethodShort_op_array,
|
||||
JRI_CallStaticMethodInt_op,
|
||||
JRI_CallStaticMethodInt_op_va_list,
|
||||
JRI_CallStaticMethodInt_op_array,
|
||||
JRI_CallStaticMethodLong_op,
|
||||
JRI_CallStaticMethodLong_op_va_list,
|
||||
JRI_CallStaticMethodLong_op_array,
|
||||
JRI_CallStaticMethodFloat_op,
|
||||
JRI_CallStaticMethodFloat_op_va_list,
|
||||
JRI_CallStaticMethodFloat_op_array,
|
||||
JRI_CallStaticMethodDouble_op,
|
||||
JRI_CallStaticMethodDouble_op_va_list,
|
||||
JRI_CallStaticMethodDouble_op_array,
|
||||
JRI_GetStaticFieldID_op,
|
||||
JRI_GetStaticField_op,
|
||||
JRI_GetStaticFieldBoolean_op,
|
||||
JRI_GetStaticFieldByte_op,
|
||||
JRI_GetStaticFieldChar_op,
|
||||
JRI_GetStaticFieldShort_op,
|
||||
JRI_GetStaticFieldInt_op,
|
||||
JRI_GetStaticFieldLong_op,
|
||||
JRI_GetStaticFieldFloat_op,
|
||||
JRI_GetStaticFieldDouble_op,
|
||||
JRI_SetStaticField_op,
|
||||
JRI_SetStaticFieldBoolean_op,
|
||||
JRI_SetStaticFieldByte_op,
|
||||
JRI_SetStaticFieldChar_op,
|
||||
JRI_SetStaticFieldShort_op,
|
||||
JRI_SetStaticFieldInt_op,
|
||||
JRI_SetStaticFieldLong_op,
|
||||
JRI_SetStaticFieldFloat_op,
|
||||
JRI_SetStaticFieldDouble_op,
|
||||
JRI_NewString_op,
|
||||
JRI_GetStringLength_op,
|
||||
JRI_GetStringChars_op,
|
||||
JRI_NewStringUTF_op,
|
||||
JRI_GetStringUTFLength_op,
|
||||
JRI_GetStringUTFChars_op,
|
||||
JRI_NewScalarArray_op,
|
||||
JRI_GetScalarArrayLength_op,
|
||||
JRI_GetScalarArrayElements_op,
|
||||
JRI_NewObjectArray_op,
|
||||
JRI_GetObjectArrayLength_op,
|
||||
JRI_GetObjectArrayElement_op,
|
||||
JRI_SetObjectArrayElement_op,
|
||||
JRI_RegisterNatives_op,
|
||||
JRI_UnregisterNatives_op,
|
||||
JRI_DefineClass_op,
|
||||
JRI_NewStringPlatform_op,
|
||||
JRI_GetStringPlatformChars_op
|
||||
} JRIEnvOperations;
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* JRI_H */
|
||||
/******************************************************************************/
|
||||
574
Templates/Full/web/source/npplugin/windows/jri_md.h
Normal file
574
Templates/Full/web/source/npplugin/windows/jri_md.h
Normal file
|
|
@ -0,0 +1,574 @@
|
|||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/*******************************************************************************
|
||||
* Java Runtime Interface - Machine Dependent Types
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef JRI_MD_H
|
||||
#define JRI_MD_H
|
||||
|
||||
#include <assert.h>
|
||||
#include "prtypes.h" /* Needed for HAS_LONG_LONG ifdefs */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
* WHAT'S UP WITH THIS FILE?
|
||||
*
|
||||
* This is where we define the mystical JRI_PUBLIC_API macro that works on all
|
||||
* platforms. If you're running with Visual C++, Symantec C, or Borland's
|
||||
* development environment on the PC, you're all set. Or if you're on the Mac
|
||||
* with Metrowerks, Symantec or MPW with SC you're ok too. For UNIX it shouldn't
|
||||
* matter.
|
||||
*
|
||||
* On UNIX though you probably care about a couple of other symbols though:
|
||||
* IS_LITTLE_ENDIAN must be defined for little-endian systems
|
||||
* HAVE_LONG_LONG must be defined on systems that have 'long long' integers
|
||||
* HAVE_ALIGNED_LONGLONGS must be defined if long-longs must be 8 byte aligned
|
||||
* HAVE_ALIGNED_DOUBLES must be defined if doubles must be 8 byte aligned
|
||||
* IS_64 must be defined on 64-bit machines (like Dec Alpha)
|
||||
******************************************************************************/
|
||||
|
||||
/* DLL Entry modifiers... */
|
||||
|
||||
/* Windows */
|
||||
#if defined(XP_WIN) || defined(_WINDOWS) || defined(WIN32) || defined(_WIN32)
|
||||
# include <windows.h>
|
||||
# if defined(_MSC_VER) || defined(__GNUC__)
|
||||
# if defined(WIN32) || defined(_WIN32)
|
||||
# define JRI_PUBLIC_API(ResultType) __declspec(dllexport) ResultType
|
||||
# define JRI_PUBLIC_VAR(VarType) VarType
|
||||
# define JRI_PUBLIC_VAR_EXP(VarType) __declspec(dllexport) VarType
|
||||
# define JRI_PUBLIC_VAR_IMP(VarType) __declspec(dllimport) VarType
|
||||
# define JRI_NATIVE_STUB(ResultType) __declspec(dllexport) ResultType
|
||||
# define JRI_CALLBACK
|
||||
# else /* !_WIN32 */
|
||||
# if defined(_WINDLL)
|
||||
# define JRI_PUBLIC_API(ResultType) ResultType __cdecl __export __loadds
|
||||
# define JRI_PUBLIC_VAR(VarType) VarType
|
||||
# define JRI_PUBLIC_VAR_EXP(VarType) JRI_PUBLIC_VAR(VarType)
|
||||
# define JRI_PUBLIC_VAR_IMP(VarType) JRI_PUBLIC_VAR(VarType)
|
||||
# define JRI_NATIVE_STUB(ResultType) ResultType __cdecl __loadds
|
||||
# define JRI_CALLBACK __loadds
|
||||
# else /* !WINDLL */
|
||||
# define JRI_PUBLIC_API(ResultType) ResultType __cdecl __export
|
||||
# define JRI_PUBLIC_VAR(VarType) VarType
|
||||
# define JRI_PUBLIC_VAR_EXP(VarType) JRI_PUBLIC_VAR(VarType)
|
||||
# define JRI_PUBLIC_VAR_IMP(VarType) JRI_PUBLIC_VAR(VarType)
|
||||
# define JRI_NATIVE_STUB(ResultType) ResultType __cdecl __export
|
||||
# define JRI_CALLBACK __export
|
||||
# endif /* !WINDLL */
|
||||
# endif /* !_WIN32 */
|
||||
# elif defined(__BORLANDC__)
|
||||
# if defined(WIN32) || defined(_WIN32)
|
||||
# define JRI_PUBLIC_API(ResultType) __export ResultType
|
||||
# define JRI_PUBLIC_VAR(VarType) VarType
|
||||
# define JRI_PUBLIC_VAR_EXP(VarType) __export VarType
|
||||
# define JRI_PUBLIC_VAR_IMP(VarType) __import VarType
|
||||
# define JRI_NATIVE_STUB(ResultType) __export ResultType
|
||||
# define JRI_CALLBACK
|
||||
# else /* !_WIN32 */
|
||||
# define JRI_PUBLIC_API(ResultType) ResultType _cdecl _export _loadds
|
||||
# define JRI_PUBLIC_VAR(VarType) VarType
|
||||
# define JRI_PUBLIC_VAR_EXP(VarType) __cdecl __export VarType
|
||||
# define JRI_PUBLIC_VAR_IMP(VarType) __cdecl __import VarType
|
||||
# define JRI_NATIVE_STUB(ResultType) ResultType _cdecl _loadds
|
||||
# define JRI_CALLBACK _loadds
|
||||
# endif
|
||||
# else
|
||||
# error Unsupported PC development environment.
|
||||
# endif
|
||||
# ifndef IS_LITTLE_ENDIAN
|
||||
# define IS_LITTLE_ENDIAN
|
||||
# endif
|
||||
|
||||
/* OS/2 */
|
||||
#elif defined(XP_OS2)
|
||||
# ifdef XP_OS2_VACPP
|
||||
# define JRI_PUBLIC_API(ResultType) ResultType _Optlink
|
||||
# define JRI_PUBLIC_VAR(VarType) VarType
|
||||
# define JRI_CALLBACK
|
||||
# elif defined(__declspec)
|
||||
# define JRI_PUBLIC_API(ResultType) __declspec(dllexport) ResultType
|
||||
# define JRI_PUBLIC_VAR(VarType) VarType
|
||||
# define JRI_PUBLIC_VAR_EXP(VarType) __declspec(dllexport) VarType
|
||||
# define JRI_PUBLIC_VAR_IMP(VarType) __declspec(dllimport) VarType
|
||||
# define JRI_NATIVE_STUB(ResultType) __declspec(dllexport) ResultType
|
||||
# define JRI_CALLBACK
|
||||
# else
|
||||
# define JRI_PUBLIC_API(ResultType) ResultType
|
||||
# define JRI_PUBLIC_VAR(VarType) VarType
|
||||
# define JRI_CALLBACK
|
||||
# endif
|
||||
|
||||
/* Mac */
|
||||
#elif defined (macintosh) || Macintosh || THINK_C
|
||||
# if defined(__MWERKS__) /* Metrowerks */
|
||||
# if !__option(enumsalwaysint)
|
||||
# error You need to define 'Enums Always Int' for your project.
|
||||
# endif
|
||||
# if defined(TARGET_CPU_68K) && !TARGET_RT_MAC_CFM
|
||||
# if !__option(fourbyteints)
|
||||
# error You need to define 'Struct Alignment: 68k' for your project.
|
||||
# endif
|
||||
# endif /* !GENERATINGCFM */
|
||||
# define JRI_PUBLIC_API(ResultType) __declspec(export) ResultType
|
||||
# define JRI_PUBLIC_VAR(VarType) JRI_PUBLIC_API(VarType)
|
||||
# define JRI_PUBLIC_VAR_EXP(VarType) JRI_PUBLIC_API(VarType)
|
||||
# define JRI_PUBLIC_VAR_IMP(VarType) JRI_PUBLIC_API(VarType)
|
||||
# define JRI_NATIVE_STUB(ResultType) JRI_PUBLIC_API(ResultType)
|
||||
# elif defined(__SC__) /* Symantec */
|
||||
# error What are the Symantec defines? (warren@netscape.com)
|
||||
# elif macintosh && applec /* MPW */
|
||||
# error Please upgrade to the latest MPW compiler (SC).
|
||||
# else
|
||||
# error Unsupported Mac development environment.
|
||||
# endif
|
||||
# define JRI_CALLBACK
|
||||
|
||||
/* Unix or else */
|
||||
#else
|
||||
# define JRI_PUBLIC_API(ResultType) ResultType
|
||||
# define JRI_PUBLIC_VAR(VarType) VarType
|
||||
# define JRI_PUBLIC_VAR_EXP(VarType) JRI_PUBLIC_VAR(VarType)
|
||||
# define JRI_PUBLIC_VAR_IMP(VarType) JRI_PUBLIC_VAR(VarType)
|
||||
# define JRI_NATIVE_STUB(ResultType) ResultType
|
||||
# define JRI_CALLBACK
|
||||
#endif
|
||||
|
||||
#ifndef FAR /* for non-Win16 */
|
||||
#define FAR
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
/* Java Scalar Types */
|
||||
|
||||
#if 0 /* now in jni.h */
|
||||
typedef short jchar;
|
||||
typedef short jshort;
|
||||
typedef float jfloat;
|
||||
typedef double jdouble;
|
||||
typedef juint jsize;
|
||||
#endif
|
||||
|
||||
/* moved from jni.h -- Sun's new jni.h doesn't have this anymore */
|
||||
#ifdef __cplusplus
|
||||
typedef class _jobject *jref;
|
||||
#else
|
||||
typedef struct _jobject *jref;
|
||||
#endif
|
||||
|
||||
typedef unsigned char jbool;
|
||||
typedef signed char jbyte;
|
||||
#ifdef IS_64 /* XXX ok for alpha, but not right on all 64-bit architectures */
|
||||
typedef unsigned int juint;
|
||||
typedef int jint;
|
||||
#else
|
||||
typedef unsigned long juint;
|
||||
typedef long jint;
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
* jlong : long long (64-bit signed integer type) support.
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
** Bit masking macros. (n must be <= 31 to be portable)
|
||||
*/
|
||||
#define JRI_BIT(n) ((juint)1 << (n))
|
||||
#define JRI_BITMASK(n) (JRI_BIT(n) - 1)
|
||||
|
||||
#ifdef HAVE_LONG_LONG
|
||||
|
||||
#ifdef OSF1
|
||||
|
||||
/* long is default 64-bit on OSF1, -std1 does not allow long long */
|
||||
typedef long jlong;
|
||||
typedef unsigned long julong;
|
||||
#define jlong_MAXINT 0x7fffffffffffffffL
|
||||
#define jlong_MININT 0x8000000000000000L
|
||||
#define jlong_ZERO 0x0L
|
||||
|
||||
#elif (defined(WIN32) || defined(_WIN32))
|
||||
|
||||
typedef LONGLONG jlong;
|
||||
typedef DWORDLONG julong;
|
||||
#define jlong_MAXINT 0x7fffffffffffffffi64
|
||||
#define jlong_MININT 0x8000000000000000i64
|
||||
#define jlong_ZERO 0x0i64
|
||||
|
||||
#else
|
||||
|
||||
typedef long long jlong;
|
||||
typedef unsigned long long julong;
|
||||
#define jlong_MAXINT 0x7fffffffffffffffLL
|
||||
#define jlong_MININT 0x8000000000000000LL
|
||||
#define jlong_ZERO 0x0LL
|
||||
|
||||
#endif
|
||||
|
||||
#define jlong_IS_ZERO(a) ((a) == 0)
|
||||
#define jlong_EQ(a, b) ((a) == (b))
|
||||
#define jlong_NE(a, b) ((a) != (b))
|
||||
#define jlong_GE_ZERO(a) ((a) >= 0)
|
||||
#define jlong_CMP(a, op, b) ((a) op (b))
|
||||
|
||||
#define jlong_AND(r, a, b) ((r) = (a) & (b))
|
||||
#define jlong_OR(r, a, b) ((r) = (a) | (b))
|
||||
#define jlong_XOR(r, a, b) ((r) = (a) ^ (b))
|
||||
#define jlong_OR2(r, a) ((r) = (r) | (a))
|
||||
#define jlong_NOT(r, a) ((r) = ~(a))
|
||||
|
||||
#define jlong_NEG(r, a) ((r) = -(a))
|
||||
#define jlong_ADD(r, a, b) ((r) = (a) + (b))
|
||||
#define jlong_SUB(r, a, b) ((r) = (a) - (b))
|
||||
|
||||
#define jlong_MUL(r, a, b) ((r) = (a) * (b))
|
||||
#define jlong_DIV(r, a, b) ((r) = (a) / (b))
|
||||
#define jlong_MOD(r, a, b) ((r) = (a) % (b))
|
||||
|
||||
#define jlong_SHL(r, a, b) ((r) = (a) << (b))
|
||||
#define jlong_SHR(r, a, b) ((r) = (a) >> (b))
|
||||
#define jlong_USHR(r, a, b) ((r) = (julong)(a) >> (b))
|
||||
#define jlong_ISHL(r, a, b) ((r) = ((jlong)(a)) << (b))
|
||||
|
||||
#define jlong_L2I(i, l) ((i) = (int)(l))
|
||||
#define jlong_L2UI(ui, l) ((ui) =(unsigned int)(l))
|
||||
#define jlong_L2F(f, l) ((f) = (l))
|
||||
#define jlong_L2D(d, l) ((d) = (l))
|
||||
|
||||
#define jlong_I2L(l, i) ((l) = (i))
|
||||
#define jlong_UI2L(l, ui) ((l) = (ui))
|
||||
#define jlong_F2L(l, f) ((l) = (f))
|
||||
#define jlong_D2L(l, d) ((l) = (d))
|
||||
|
||||
#define jlong_UDIVMOD(qp, rp, a, b) \
|
||||
(*(qp) = ((julong)(a) / (b)), \
|
||||
*(rp) = ((julong)(a) % (b)))
|
||||
|
||||
#else /* !HAVE_LONG_LONG */
|
||||
|
||||
typedef struct {
|
||||
#ifdef IS_LITTLE_ENDIAN
|
||||
juint lo, hi;
|
||||
#else
|
||||
juint hi, lo;
|
||||
#endif
|
||||
} jlong;
|
||||
typedef jlong julong;
|
||||
|
||||
extern jlong jlong_MAXINT, jlong_MININT, jlong_ZERO;
|
||||
|
||||
#define jlong_IS_ZERO(a) (((a).hi == 0) && ((a).lo == 0))
|
||||
#define jlong_EQ(a, b) (((a).hi == (b).hi) && ((a).lo == (b).lo))
|
||||
#define jlong_NE(a, b) (((a).hi != (b).hi) || ((a).lo != (b).lo))
|
||||
#define jlong_GE_ZERO(a) (((a).hi >> 31) == 0)
|
||||
|
||||
/*
|
||||
* NB: jlong_CMP and jlong_UCMP work only for strict relationals (<, >).
|
||||
*/
|
||||
#define jlong_CMP(a, op, b) (((int32)(a).hi op (int32)(b).hi) || \
|
||||
(((a).hi == (b).hi) && ((a).lo op (b).lo)))
|
||||
#define jlong_UCMP(a, op, b) (((a).hi op (b).hi) || \
|
||||
(((a).hi == (b).hi) && ((a).lo op (b).lo)))
|
||||
|
||||
#define jlong_AND(r, a, b) ((r).lo = (a).lo & (b).lo, \
|
||||
(r).hi = (a).hi & (b).hi)
|
||||
#define jlong_OR(r, a, b) ((r).lo = (a).lo | (b).lo, \
|
||||
(r).hi = (a).hi | (b).hi)
|
||||
#define jlong_XOR(r, a, b) ((r).lo = (a).lo ^ (b).lo, \
|
||||
(r).hi = (a).hi ^ (b).hi)
|
||||
#define jlong_OR2(r, a) ((r).lo = (r).lo | (a).lo, \
|
||||
(r).hi = (r).hi | (a).hi)
|
||||
#define jlong_NOT(r, a) ((r).lo = ~(a).lo, \
|
||||
(r).hi = ~(a).hi)
|
||||
|
||||
#define jlong_NEG(r, a) ((r).lo = -(int32)(a).lo, \
|
||||
(r).hi = -(int32)(a).hi - ((r).lo != 0))
|
||||
#define jlong_ADD(r, a, b) { \
|
||||
jlong _a, _b; \
|
||||
_a = a; _b = b; \
|
||||
(r).lo = _a.lo + _b.lo; \
|
||||
(r).hi = _a.hi + _b.hi + ((r).lo < _b.lo); \
|
||||
}
|
||||
|
||||
#define jlong_SUB(r, a, b) { \
|
||||
jlong _a, _b; \
|
||||
_a = a; _b = b; \
|
||||
(r).lo = _a.lo - _b.lo; \
|
||||
(r).hi = _a.hi - _b.hi - (_a.lo < _b.lo); \
|
||||
} \
|
||||
|
||||
/*
|
||||
* Multiply 64-bit operands a and b to get 64-bit result r.
|
||||
* First multiply the low 32 bits of a and b to get a 64-bit result in r.
|
||||
* Then add the outer and inner products to r.hi.
|
||||
*/
|
||||
#define jlong_MUL(r, a, b) { \
|
||||
jlong _a, _b; \
|
||||
_a = a; _b = b; \
|
||||
jlong_MUL32(r, _a.lo, _b.lo); \
|
||||
(r).hi += _a.hi * _b.lo + _a.lo * _b.hi; \
|
||||
}
|
||||
|
||||
/* XXX _jlong_lo16(a) = ((a) << 16 >> 16) is better on some archs (not on mips) */
|
||||
#define _jlong_lo16(a) ((a) & JRI_BITMASK(16))
|
||||
#define _jlong_hi16(a) ((a) >> 16)
|
||||
|
||||
/*
|
||||
* Multiply 32-bit operands a and b to get 64-bit result r.
|
||||
* Use polynomial expansion based on primitive field element (1 << 16).
|
||||
*/
|
||||
#define jlong_MUL32(r, a, b) { \
|
||||
juint _a1, _a0, _b1, _b0, _y0, _y1, _y2, _y3; \
|
||||
_a1 = _jlong_hi16(a), _a0 = _jlong_lo16(a); \
|
||||
_b1 = _jlong_hi16(b), _b0 = _jlong_lo16(b); \
|
||||
_y0 = _a0 * _b0; \
|
||||
_y1 = _a0 * _b1; \
|
||||
_y2 = _a1 * _b0; \
|
||||
_y3 = _a1 * _b1; \
|
||||
_y1 += _jlong_hi16(_y0); /* can't carry */ \
|
||||
_y1 += _y2; /* might carry */ \
|
||||
if (_y1 < _y2) _y3 += 1 << 16; /* propagate */ \
|
||||
(r).lo = (_jlong_lo16(_y1) << 16) + _jlong_lo16(_y0); \
|
||||
(r).hi = _y3 + _jlong_hi16(_y1); \
|
||||
}
|
||||
|
||||
/*
|
||||
* Divide 64-bit unsigned operand a by 64-bit unsigned operand b, setting *qp
|
||||
* to the 64-bit unsigned quotient, and *rp to the 64-bit unsigned remainder.
|
||||
* Minimize effort if one of qp and rp is null.
|
||||
*/
|
||||
#define jlong_UDIVMOD(qp, rp, a, b) jlong_udivmod(qp, rp, a, b)
|
||||
|
||||
extern JRI_PUBLIC_API(void)
|
||||
jlong_udivmod(julong *qp, julong *rp, julong a, julong b);
|
||||
|
||||
#define jlong_DIV(r, a, b) { \
|
||||
jlong _a, _b; \
|
||||
juint _negative = (int32)(a).hi < 0; \
|
||||
if (_negative) { \
|
||||
jlong_NEG(_a, a); \
|
||||
} else { \
|
||||
_a = a; \
|
||||
} \
|
||||
if ((int32)(b).hi < 0) { \
|
||||
_negative ^= 1; \
|
||||
jlong_NEG(_b, b); \
|
||||
} else { \
|
||||
_b = b; \
|
||||
} \
|
||||
jlong_UDIVMOD(&(r), 0, _a, _b); \
|
||||
if (_negative) \
|
||||
jlong_NEG(r, r); \
|
||||
}
|
||||
|
||||
#define jlong_MOD(r, a, b) { \
|
||||
jlong _a, _b; \
|
||||
juint _negative = (int32)(a).hi < 0; \
|
||||
if (_negative) { \
|
||||
jlong_NEG(_a, a); \
|
||||
} else { \
|
||||
_a = a; \
|
||||
} \
|
||||
if ((int32)(b).hi < 0) { \
|
||||
jlong_NEG(_b, b); \
|
||||
} else { \
|
||||
_b = b; \
|
||||
} \
|
||||
jlong_UDIVMOD(0, &(r), _a, _b); \
|
||||
if (_negative) \
|
||||
jlong_NEG(r, r); \
|
||||
}
|
||||
|
||||
/*
|
||||
* NB: b is a juint, not jlong or julong, for the shift ops.
|
||||
*/
|
||||
#define jlong_SHL(r, a, b) { \
|
||||
if (b) { \
|
||||
jlong _a; \
|
||||
_a = a; \
|
||||
if ((b) < 32) { \
|
||||
(r).lo = _a.lo << (b); \
|
||||
(r).hi = (_a.hi << (b)) | (_a.lo >> (32 - (b))); \
|
||||
} else { \
|
||||
(r).lo = 0; \
|
||||
(r).hi = _a.lo << ((b) & 31); \
|
||||
} \
|
||||
} else { \
|
||||
(r) = (a); \
|
||||
} \
|
||||
}
|
||||
|
||||
/* a is an int32, b is int32, r is jlong */
|
||||
#define jlong_ISHL(r, a, b) { \
|
||||
if (b) { \
|
||||
jlong _a; \
|
||||
_a.lo = (a); \
|
||||
_a.hi = 0; \
|
||||
if ((b) < 32) { \
|
||||
(r).lo = (a) << (b); \
|
||||
(r).hi = ((a) >> (32 - (b))); \
|
||||
} else { \
|
||||
(r).lo = 0; \
|
||||
(r).hi = (a) << ((b) & 31); \
|
||||
} \
|
||||
} else { \
|
||||
(r).lo = (a); \
|
||||
(r).hi = 0; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define jlong_SHR(r, a, b) { \
|
||||
if (b) { \
|
||||
jlong _a; \
|
||||
_a = a; \
|
||||
if ((b) < 32) { \
|
||||
(r).lo = (_a.hi << (32 - (b))) | (_a.lo >> (b)); \
|
||||
(r).hi = (int32)_a.hi >> (b); \
|
||||
} else { \
|
||||
(r).lo = (int32)_a.hi >> ((b) & 31); \
|
||||
(r).hi = (int32)_a.hi >> 31; \
|
||||
} \
|
||||
} else { \
|
||||
(r) = (a); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define jlong_USHR(r, a, b) { \
|
||||
if (b) { \
|
||||
jlong _a; \
|
||||
_a = a; \
|
||||
if ((b) < 32) { \
|
||||
(r).lo = (_a.hi << (32 - (b))) | (_a.lo >> (b)); \
|
||||
(r).hi = _a.hi >> (b); \
|
||||
} else { \
|
||||
(r).lo = _a.hi >> ((b) & 31); \
|
||||
(r).hi = 0; \
|
||||
} \
|
||||
} else { \
|
||||
(r) = (a); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define jlong_L2I(i, l) ((i) = (l).lo)
|
||||
#define jlong_L2UI(ui, l) ((ui) = (l).lo)
|
||||
#define jlong_L2F(f, l) { double _d; jlong_L2D(_d, l); (f) = (float) _d; }
|
||||
|
||||
#define jlong_L2D(d, l) { \
|
||||
int32 _negative; \
|
||||
jlong _absval; \
|
||||
\
|
||||
_negative = (l).hi >> 31; \
|
||||
if (_negative) { \
|
||||
jlong_NEG(_absval, l); \
|
||||
} else { \
|
||||
_absval = l; \
|
||||
} \
|
||||
(d) = (double)_absval.hi * 4.294967296e9 + _absval.lo; \
|
||||
if (_negative) \
|
||||
(d) = -(d); \
|
||||
}
|
||||
|
||||
#define jlong_I2L(l, i) ((l).hi = (i) >> 31, (l).lo = (i))
|
||||
#define jlong_UI2L(l, ui) ((l).hi = 0, (l).lo = (ui))
|
||||
#define jlong_F2L(l, f) { double _d = (double) f; jlong_D2L(l, _d); }
|
||||
|
||||
#define jlong_D2L(l, d) { \
|
||||
int _negative; \
|
||||
double _absval, _d_hi; \
|
||||
jlong _lo_d; \
|
||||
\
|
||||
_negative = ((d) < 0); \
|
||||
_absval = _negative ? -(d) : (d); \
|
||||
\
|
||||
(l).hi = (juint)(_absval / 4.294967296e9); \
|
||||
(l).lo = 0; \
|
||||
jlong_L2D(_d_hi, l); \
|
||||
_absval -= _d_hi; \
|
||||
_lo_d.hi = 0; \
|
||||
if (_absval < 0) { \
|
||||
_lo_d.lo = (juint) -_absval; \
|
||||
jlong_SUB(l, l, _lo_d); \
|
||||
} else { \
|
||||
_lo_d.lo = (juint) _absval; \
|
||||
jlong_ADD(l, l, _lo_d); \
|
||||
} \
|
||||
\
|
||||
if (_negative) \
|
||||
jlong_NEG(l, l); \
|
||||
}
|
||||
|
||||
#endif /* !HAVE_LONG_LONG */
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
#ifdef HAVE_ALIGNED_LONGLONGS
|
||||
#define JRI_GET_INT64(_t,_addr) ( ((_t).x[0] = ((jint*)(_addr))[0]), \
|
||||
((_t).x[1] = ((jint*)(_addr))[1]), \
|
||||
(_t).l )
|
||||
#define JRI_SET_INT64(_t, _addr, _v) ( (_t).l = (_v), \
|
||||
((jint*)(_addr))[0] = (_t).x[0], \
|
||||
((jint*)(_addr))[1] = (_t).x[1] )
|
||||
#else
|
||||
#define JRI_GET_INT64(_t,_addr) (*(jlong*)(_addr))
|
||||
#define JRI_SET_INT64(_t, _addr, _v) (*(jlong*)(_addr) = (_v))
|
||||
#endif
|
||||
|
||||
/* If double's must be aligned on doubleword boundaries then define this */
|
||||
#ifdef HAVE_ALIGNED_DOUBLES
|
||||
#define JRI_GET_DOUBLE(_t,_addr) ( ((_t).x[0] = ((jint*)(_addr))[0]), \
|
||||
((_t).x[1] = ((jint*)(_addr))[1]), \
|
||||
(_t).d )
|
||||
#define JRI_SET_DOUBLE(_t, _addr, _v) ( (_t).d = (_v), \
|
||||
((jint*)(_addr))[0] = (_t).x[0], \
|
||||
((jint*)(_addr))[1] = (_t).x[1] )
|
||||
#else
|
||||
#define JRI_GET_DOUBLE(_t,_addr) (*(jdouble*)(_addr))
|
||||
#define JRI_SET_DOUBLE(_t, _addr, _v) (*(jdouble*)(_addr) = (_v))
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* JRI_MD_H */
|
||||
/******************************************************************************/
|
||||
243
Templates/Full/web/source/npplugin/windows/jritypes.h
Normal file
243
Templates/Full/web/source/npplugin/windows/jritypes.h
Normal file
|
|
@ -0,0 +1,243 @@
|
|||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/*******************************************************************************
|
||||
* Java Runtime Interface
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef JRITYPES_H
|
||||
#define JRITYPES_H
|
||||
|
||||
#include "jri_md.h"
|
||||
#include "jni.h"
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
* Types
|
||||
******************************************************************************/
|
||||
|
||||
struct JRIEnvInterface;
|
||||
|
||||
typedef void* JRIRef;
|
||||
typedef void* JRIGlobalRef;
|
||||
|
||||
typedef jint JRIFieldID;
|
||||
typedef jint JRIMethodID;
|
||||
|
||||
/* synonyms: */
|
||||
typedef JRIGlobalRef jglobal;
|
||||
|
||||
typedef union JRIValue {
|
||||
jbool z;
|
||||
jbyte b;
|
||||
jchar c;
|
||||
jshort s;
|
||||
jint i;
|
||||
jlong l;
|
||||
jfloat f;
|
||||
jdouble d;
|
||||
jref r;
|
||||
} JRIValue;
|
||||
|
||||
typedef enum JRIBoolean {
|
||||
JRIFalse = 0,
|
||||
JRITrue = 1
|
||||
} JRIBoolean;
|
||||
|
||||
typedef enum JRIConstant {
|
||||
JRIUninitialized = -1
|
||||
} JRIConstant;
|
||||
|
||||
/* convenience types (these must be distinct struct types for c++ overloading): */
|
||||
#if 0 /* now in jni.h */
|
||||
typedef struct jbooleanArrayStruct* jbooleanArray;
|
||||
typedef struct jbyteArrayStruct* jbyteArray;
|
||||
typedef struct jcharArrayStruct* jcharArray;
|
||||
typedef struct jshortArrayStruct* jshortArray;
|
||||
typedef struct jintArrayStruct* jintArray;
|
||||
typedef struct jlongArrayStruct* jlongArray;
|
||||
typedef struct jfloatArrayStruct* jfloatArray;
|
||||
typedef struct jdoubleArrayStruct* jdoubleArray;
|
||||
typedef struct jobjectArrayStruct* jobjectArray;
|
||||
#endif
|
||||
typedef struct jstringArrayStruct* jstringArray;
|
||||
typedef struct jarrayArrayStruct* jarrayArray;
|
||||
|
||||
#define JRIConstructorMethodName "<init>"
|
||||
|
||||
/*******************************************************************************
|
||||
* Signature Construction Macros
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
** These macros can be used to construct signature strings. Hopefully their names
|
||||
** are a little easier to remember than the single character they correspond to.
|
||||
** For example, to specify the signature of the method:
|
||||
**
|
||||
** public int read(byte b[], int off, int len);
|
||||
**
|
||||
** you could write something like this in C:
|
||||
**
|
||||
** char* readSig = JRISigMethod(JRISigArray(JRISigByte)
|
||||
** JRISigInt
|
||||
** JRISigInt) JRISigInt;
|
||||
**
|
||||
** Of course, don't put commas between the types.
|
||||
*/
|
||||
#define JRISigArray(T) "[" T
|
||||
#define JRISigByte "B"
|
||||
#define JRISigChar "C"
|
||||
#define JRISigClass(name) "L" name ";"
|
||||
#define JRISigFloat "F"
|
||||
#define JRISigDouble "D"
|
||||
#define JRISigMethod(args) "(" args ")"
|
||||
#define JRISigNoArgs ""
|
||||
#define JRISigInt "I"
|
||||
#define JRISigLong "J"
|
||||
#define JRISigShort "S"
|
||||
#define JRISigVoid "V"
|
||||
#define JRISigBoolean "Z"
|
||||
|
||||
/*******************************************************************************
|
||||
* Environments
|
||||
******************************************************************************/
|
||||
|
||||
extern JRI_PUBLIC_API(const struct JRIEnvInterface**)
|
||||
JRI_GetCurrentEnv(void);
|
||||
|
||||
/*******************************************************************************
|
||||
* Specific Scalar Array Types
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
** The JRI Native Method Interface does not support boolean arrays. This
|
||||
** is to allow Java runtime implementations to optimize boolean array
|
||||
** storage. Using the ScalarArray operations on boolean arrays is bound
|
||||
** to fail, so convert any boolean arrays to byte arrays in Java before
|
||||
** passing them to a native method.
|
||||
*/
|
||||
|
||||
#define JRI_NewByteArray(env, length, initialValues) \
|
||||
JRI_NewScalarArray(env, length, JRISigByte, (jbyte*)(initialValues))
|
||||
#define JRI_GetByteArrayLength(env, array) \
|
||||
JRI_GetScalarArrayLength(env, array)
|
||||
#define JRI_GetByteArrayElements(env, array) \
|
||||
JRI_GetScalarArrayElements(env, array)
|
||||
|
||||
#define JRI_NewCharArray(env, length, initialValues) \
|
||||
JRI_NewScalarArray(env, ((length) * sizeof(jchar)), JRISigChar, (jbyte*)(initialValues))
|
||||
#define JRI_GetCharArrayLength(env, array) \
|
||||
JRI_GetScalarArrayLength(env, array)
|
||||
#define JRI_GetCharArrayElements(env, array) \
|
||||
((jchar*)JRI_GetScalarArrayElements(env, array))
|
||||
|
||||
#define JRI_NewShortArray(env, length, initialValues) \
|
||||
JRI_NewScalarArray(env, ((length) * sizeof(jshort)), JRISigShort, (jbyte*)(initialValues))
|
||||
#define JRI_GetShortArrayLength(env, array) \
|
||||
JRI_GetScalarArrayLength(env, array)
|
||||
#define JRI_GetShortArrayElements(env, array) \
|
||||
((jshort*)JRI_GetScalarArrayElements(env, array))
|
||||
|
||||
#define JRI_NewIntArray(env, length, initialValues) \
|
||||
JRI_NewScalarArray(env, ((length) * sizeof(jint)), JRISigInt, (jbyte*)(initialValues))
|
||||
#define JRI_GetIntArrayLength(env, array) \
|
||||
JRI_GetScalarArrayLength(env, array)
|
||||
#define JRI_GetIntArrayElements(env, array) \
|
||||
((jint*)JRI_GetScalarArrayElements(env, array))
|
||||
|
||||
#define JRI_NewLongArray(env, length, initialValues) \
|
||||
JRI_NewScalarArray(env, ((length) * sizeof(jlong)), JRISigLong, (jbyte*)(initialValues))
|
||||
#define JRI_GetLongArrayLength(env, array) \
|
||||
JRI_GetScalarArrayLength(env, array)
|
||||
#define JRI_GetLongArrayElements(env, array) \
|
||||
((jlong*)JRI_GetScalarArrayElements(env, array))
|
||||
|
||||
#define JRI_NewFloatArray(env, length, initialValues) \
|
||||
JRI_NewScalarArray(env, ((length) * sizeof(jfloat)), JRISigFloat, (jbyte*)(initialValues))
|
||||
#define JRI_GetFloatArrayLength(env, array) \
|
||||
JRI_GetScalarArrayLength(env, array)
|
||||
#define JRI_GetFloatArrayElements(env, array) \
|
||||
((jfloat*)JRI_GetScalarArrayElements(env, array))
|
||||
|
||||
#define JRI_NewDoubleArray(env, length, initialValues) \
|
||||
JRI_NewScalarArray(env, ((length) * sizeof(jdouble)), JRISigDouble, (jbyte*)(initialValues))
|
||||
#define JRI_GetDoubleArrayLength(env, array) \
|
||||
JRI_GetScalarArrayLength(env, array)
|
||||
#define JRI_GetDoubleArrayElements(env, array) \
|
||||
((jdouble*)JRI_GetScalarArrayElements(env, array))
|
||||
|
||||
/******************************************************************************/
|
||||
/*
|
||||
** JDK Stuff -- This stuff is still needed while we're using the JDK
|
||||
** dynamic linking strategy to call native methods.
|
||||
*/
|
||||
|
||||
typedef union JRI_JDK_stack_item {
|
||||
/* Non pointer items */
|
||||
jint i;
|
||||
jfloat f;
|
||||
jint o;
|
||||
/* Pointer items */
|
||||
void *h;
|
||||
void *p;
|
||||
unsigned char *addr;
|
||||
#ifdef IS_64
|
||||
double d;
|
||||
long l; /* == 64bits! */
|
||||
#endif
|
||||
} JRI_JDK_stack_item;
|
||||
|
||||
typedef union JRI_JDK_Java8Str {
|
||||
jint x[2];
|
||||
jdouble d;
|
||||
jlong l;
|
||||
void *p;
|
||||
float f;
|
||||
} JRI_JDK_Java8;
|
||||
|
||||
/******************************************************************************/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* JRITYPES_H */
|
||||
/******************************************************************************/
|
||||
173
Templates/Full/web/source/npplugin/windows/npWebGamePlugin.cpp
Normal file
173
Templates/Full/web/source/npplugin/windows/npWebGamePlugin.cpp
Normal file
|
|
@ -0,0 +1,173 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "npWebGamePlugin.h"
|
||||
#include "../../common/webCommon.h"
|
||||
|
||||
NPWebGamePlugin* NPWebGamePlugin::sInstance = NULL;
|
||||
|
||||
|
||||
// we use a timer to update the Torque 3D game loop (tick) and handle rendering
|
||||
VOID CALLBACK MyTimerProc( HWND hwnd, // handle to window for timer messages
|
||||
UINT message, // WM_TIMER message
|
||||
UINT idTimer, // timer identifier
|
||||
DWORD dwTime) // current system time
|
||||
{
|
||||
static bool reentrant = false;
|
||||
|
||||
if (!reentrant)
|
||||
{
|
||||
reentrant = true;
|
||||
torque_enginetick();
|
||||
reentrant = false;
|
||||
}
|
||||
}
|
||||
|
||||
// custom window proc for our plugin's rendering window
|
||||
static LRESULT CALLBACK NPWebGamePluginWinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
NPWebGamePlugin* plugin = (NPWebGamePlugin*)GetWindowLongPtr(hWnd, GWL_USERDATA);
|
||||
if (plugin)
|
||||
{
|
||||
switch (msg)
|
||||
{
|
||||
case WM_MOUSEACTIVATE:
|
||||
break;
|
||||
case WM_SIZE:
|
||||
// handle resize of browser (sub)window updating our Torque 3D child window accordingly
|
||||
int width = (int) LOWORD( lParam );
|
||||
int height = (int) HIWORD( lParam );
|
||||
torque_resizewindow(width,height);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return CallWindowProc((WNDPROC)plugin->mOriginalWinProc, hWnd, msg, wParam, lParam);
|
||||
}
|
||||
else
|
||||
{
|
||||
return DefWindowProc(hWnd, msg, wParam, lParam);
|
||||
}
|
||||
}
|
||||
|
||||
// DLL Entry Point
|
||||
extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
|
||||
{
|
||||
WebCommon::gPluginModule = (HMODULE) hInstance;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
NPWebGamePlugin::NPWebGamePlugin(NPP aInstance)
|
||||
{
|
||||
|
||||
mOpen = FALSE;
|
||||
mInstance = aInstance;
|
||||
sInstance = this;
|
||||
|
||||
mOriginalWinProc = NULL;
|
||||
mHwnd = NULL;
|
||||
|
||||
}
|
||||
|
||||
NPWebGamePlugin::~NPWebGamePlugin()
|
||||
{
|
||||
Close();
|
||||
sInstance = NULL;
|
||||
}
|
||||
|
||||
|
||||
NPBool NPWebGamePlugin::Open(NPWindow* aWindow)
|
||||
{
|
||||
if (mOpen)
|
||||
{
|
||||
return TRUE; //firefox tries to open 2x
|
||||
}
|
||||
|
||||
if (!aWindow)
|
||||
return FALSE;
|
||||
|
||||
void* platformWindow = NULL;
|
||||
|
||||
mHwnd = (HWND)aWindow->window;
|
||||
|
||||
if (!mHwnd)
|
||||
return FALSE;
|
||||
|
||||
platformWindow = mHwnd;
|
||||
|
||||
// replace our plugin window proc with a custom one (for handling resizing,etc)
|
||||
mOriginalWinProc = SetWindowLongPtr(mHwnd, GWLP_WNDPROC, (LONG_PTR)NPWebGamePluginWinProc);
|
||||
|
||||
LONG lStyle = GetWindowLong(mHwnd, GWL_STYLE);
|
||||
SetWindowLong(mHwnd, GWL_STYLE, lStyle | WS_CLIPCHILDREN);
|
||||
|
||||
SetWindowLongPtr(mHwnd, GWL_USERDATA, (LONG_PTR)this);
|
||||
|
||||
|
||||
// load up the Torque 3D shared library and initialize it
|
||||
if (!WebCommon::InitTorque3D(platformWindow))
|
||||
return false;
|
||||
|
||||
mOpen = true;
|
||||
|
||||
// fire up our tick/update timer
|
||||
SetTimer( mHwnd, 1, // timer identifier
|
||||
1, // 1 millisecond
|
||||
(TIMERPROC) MyTimerProc); // timer callback
|
||||
|
||||
return mOpen;
|
||||
}
|
||||
|
||||
void NPWebGamePlugin::Close()
|
||||
{
|
||||
|
||||
if (!mOpen)
|
||||
return;
|
||||
|
||||
if (mOriginalWinProc)
|
||||
{
|
||||
// restore original window proc
|
||||
SetWindowLongPtr(mHwnd, GWLP_WNDPROC, mOriginalWinProc);
|
||||
mOriginalWinProc = NULL;
|
||||
}
|
||||
|
||||
if (mHwnd)
|
||||
{
|
||||
// no more ticks please
|
||||
KillTimer( mHwnd, 1);
|
||||
}
|
||||
|
||||
mHwnd = NULL;
|
||||
|
||||
// shutdown and unload the Torque 3D DLL
|
||||
WebCommon::ShutdownTorque3D();
|
||||
|
||||
mOpen = false;
|
||||
}
|
||||
|
||||
NPBool NPWebGamePlugin::IsOpen()
|
||||
{
|
||||
return mOpen;
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
|
||||
|
||||
EXPORTS
|
||||
NP_GetEntryPoints @1
|
||||
NP_Initialize @2
|
||||
NP_Shutdown @3
|
||||
52
Templates/Full/web/source/npplugin/windows/npWebGamePlugin.h
Normal file
52
Templates/Full/web/source/npplugin/windows/npWebGamePlugin.h
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "np_pluginbase.h"
|
||||
|
||||
// Windows specific NP plugin interface for handling platform window integration with Torque 3D
|
||||
class NPWebGamePlugin
|
||||
{
|
||||
public:
|
||||
|
||||
NPWebGamePlugin(NPP aInstance);
|
||||
~NPWebGamePlugin();
|
||||
|
||||
// very simple interface based on browser window opening/closing
|
||||
NPBool Open(NPWindow* aWindow);
|
||||
void Close();
|
||||
NPBool IsOpen();
|
||||
|
||||
// plugin instance
|
||||
NPP mInstance;
|
||||
bool mOpen;
|
||||
|
||||
static NPWebGamePlugin* sInstance;
|
||||
|
||||
// Browser platform native window handle
|
||||
HWND mHwnd;
|
||||
LONG_PTR mOriginalWinProc;
|
||||
|
||||
};
|
||||
|
||||
|
||||
166
Templates/Full/web/source/npplugin/windows/np_plat.h
Normal file
166
Templates/Full/web/source/npplugin/windows/np_plat.h
Normal file
|
|
@ -0,0 +1,166 @@
|
|||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifndef _NPPLAT_H_
|
||||
#define _NPPLAT_H_
|
||||
|
||||
#ifdef XP_WIN
|
||||
|
||||
// Modify the following defines if you have to target a platform prior to the ones specified below.
|
||||
// Refer to MSDN for the latest info on corresponding values for different platforms.
|
||||
#ifndef WINVER // Allow use of features specific to Windows XP or later.
|
||||
#define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows.
|
||||
#endif
|
||||
|
||||
#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
|
||||
#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
|
||||
#endif
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
#include <windows.h>
|
||||
#include <windowsx.h>
|
||||
|
||||
#endif // XP_WIN
|
||||
|
||||
#include "npapi.h"
|
||||
#include "npupp.h"
|
||||
|
||||
/**************************************************/
|
||||
/* */
|
||||
/* Windows */
|
||||
/* */
|
||||
/**************************************************/
|
||||
#ifdef XP_WIN
|
||||
|
||||
//#include "windows.h"
|
||||
|
||||
#endif //XP_WIN
|
||||
|
||||
/**************************************************/
|
||||
/* */
|
||||
/* Unix */
|
||||
/* */
|
||||
/**************************************************/
|
||||
#ifdef XP_UNIX
|
||||
#include <stdio.h>
|
||||
#endif //XP_UNIX
|
||||
|
||||
/**************************************************/
|
||||
/* */
|
||||
/* Mac */
|
||||
/* */
|
||||
/**************************************************/
|
||||
#ifdef XP_MAC
|
||||
|
||||
#include <Processes.h>
|
||||
#include <Gestalt.h>
|
||||
#include <CodeFragments.h>
|
||||
#include <Timer.h>
|
||||
#include <Resources.h>
|
||||
#include <ToolUtils.h>
|
||||
|
||||
// The Mixed Mode procInfos defined in npupp.h assume Think C-
|
||||
// style calling conventions. These conventions are used by
|
||||
// Metrowerks with the exception of pointer return types, which
|
||||
// in Metrowerks 68K are returned in A0, instead of the standard
|
||||
// D0. Thus, since NPN_MemAlloc and NPN_UserAgent return pointers,
|
||||
// Mixed Mode will return the values to a 68K plugin in D0, but
|
||||
// a 68K plugin compiled by Metrowerks will expect the result in
|
||||
// A0. The following pragma forces Metrowerks to use D0 instead.
|
||||
//
|
||||
#ifdef __MWERKS__
|
||||
#ifndef powerc
|
||||
#pragma pointers_in_D0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __MWERKS__
|
||||
#ifndef powerc
|
||||
#pragma pointers_in_A0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// The following fix for static initializers (which fixes a preious
|
||||
// incompatibility with some parts of PowerPlant, was submitted by
|
||||
// Jan Ulbrich.
|
||||
#ifdef __MWERKS__
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#ifndef powerc
|
||||
extern void __InitCode__(void);
|
||||
#else
|
||||
extern void __sinit(void);
|
||||
#define __InitCode__ __sinit
|
||||
#endif
|
||||
extern void __destroy_global_chain(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
||||
#endif // __MWERKS__
|
||||
|
||||
// Wrapper functions for all calls from Netscape to the plugin.
|
||||
// These functions let the plugin developer just create the APIs
|
||||
// as documented and defined in npapi.h, without needing to
|
||||
// install those functions in the function table or worry about
|
||||
// setting up globals for 68K plugins.
|
||||
NPError Private_Initialize(void);
|
||||
void Private_Shutdown(void);
|
||||
NPError Private_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved);
|
||||
NPError Private_Destroy(NPP instance, NPSavedData** save);
|
||||
NPError Private_SetWindow(NPP instance, NPWindow* window);
|
||||
NPError Private_NewStream(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16* stype);
|
||||
NPError Private_DestroyStream(NPP instance, NPStream* stream, NPError reason);
|
||||
int32 Private_WriteReady(NPP instance, NPStream* stream);
|
||||
int32 Private_Write(NPP instance, NPStream* stream, int32 offset, int32 len, void* buffer);
|
||||
void Private_StreamAsFile(NPP instance, NPStream* stream, const char* fname);
|
||||
void Private_Print(NPP instance, NPPrint* platformPrint);
|
||||
int16 Private_HandleEvent(NPP instance, void* event);
|
||||
void Private_URLNotify(NPP instance, const char* url, NPReason reason, void* notifyData);
|
||||
NPError Private_GetValue(NPP instance, NPPVariable variable, void *result);
|
||||
NPError Private_SetValue(NPP instance, NPNVariable variable, void *value);
|
||||
|
||||
#endif //XP_MAC
|
||||
|
||||
#ifndef HIBYTE
|
||||
#define HIBYTE(i) (i >> 8)
|
||||
#endif
|
||||
|
||||
#ifndef LOBYTE
|
||||
#define LOBYTE(i) (i & 0xff)
|
||||
#endif
|
||||
|
||||
#endif //_NPPLAT_H_
|
||||
94
Templates/Full/web/source/npplugin/windows/np_pluginbase.h
Normal file
94
Templates/Full/web/source/npplugin/windows/np_pluginbase.h
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifndef N_NP_PLUGIN_BASE_H
|
||||
#define N_NP_PLUGIN_BASE_H
|
||||
|
||||
#include "np_plat.h"
|
||||
|
||||
struct NPPluginCreateData
|
||||
{
|
||||
NPP instance;
|
||||
NPMIMEType type;
|
||||
uint16 mode;
|
||||
int16 argc;
|
||||
char** argn;
|
||||
char** argv;
|
||||
NPSavedData* saved;
|
||||
};
|
||||
|
||||
class NPPluginBase
|
||||
{
|
||||
public:
|
||||
// these three methods must be implemented in the derived
|
||||
// class platform specific way
|
||||
virtual NPBool Open(NPWindow* aWindow) = 0;
|
||||
virtual void Close() = 0;
|
||||
virtual NPBool IsOpen() = 0;
|
||||
|
||||
// implement all or part of those methods in the derived
|
||||
// class as needed
|
||||
virtual NPError SetWindow(NPWindow* pNPWindow) { return NPERR_NO_ERROR; }
|
||||
virtual NPError NewStream(NPMIMEType type, NPStream* stream,
|
||||
NPBool seekable, uint16* stype) { return NPERR_NO_ERROR; }
|
||||
virtual NPError DestroyStream(NPStream *stream, NPError reason) { return NPERR_NO_ERROR; }
|
||||
virtual void StreamAsFile(NPStream* stream, const char* fname) { return; }
|
||||
virtual int32 WriteReady(NPStream *stream) { return 0x0fffffff; }
|
||||
virtual int32 Write(NPStream *stream, int32 offset,
|
||||
int32 len, void *buffer) { return len; }
|
||||
virtual void Print(NPPrint* printInfo) { return; }
|
||||
virtual uint16 HandleEvent(void* event) { return 0; }
|
||||
virtual void URLNotify(const char* url, NPReason reason,
|
||||
void* notifyData) { return; }
|
||||
virtual NPError GetValue(NPPVariable variable, void *value) { return NPERR_NO_ERROR; }
|
||||
virtual NPError SetValue(NPNVariable variable, void *value) { return NPERR_NO_ERROR; }
|
||||
};
|
||||
|
||||
// functions that should be implemented for each specific plugin
|
||||
|
||||
NPError NS_PluginInitialize();
|
||||
void NS_PluginShutdown();
|
||||
|
||||
// creation and destruction of the object of the derived class
|
||||
NPPluginBase* NS_NewPluginInstance(NPPluginCreateData * aCreateDataStruct);
|
||||
void NS_DestroyPluginInstance(NPPluginBase * aPlugin);
|
||||
|
||||
#ifdef XP_UNIX
|
||||
// global to get plugins name & description
|
||||
NPError NS_PluginGetValue(NPPVariable aVariable, void *aValue);
|
||||
#endif
|
||||
|
||||
#endif // N_NP_PLUGIN_BASE_H
|
||||
766
Templates/Full/web/source/npplugin/windows/npapi.h
Normal file
766
Templates/Full/web/source/npplugin/windows/npapi.h
Normal file
|
|
@ -0,0 +1,766 @@
|
|||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
|
||||
/*
|
||||
* npapi.h $Revision: 3.48 $
|
||||
* Netscape client plug-in API spec
|
||||
*/
|
||||
|
||||
#ifndef _NPAPI_H_
|
||||
#define _NPAPI_H_
|
||||
|
||||
#ifdef __OS2__
|
||||
#pragma pack(1)
|
||||
#endif
|
||||
|
||||
#include "prtypes.h"
|
||||
/* Copied from xp_core.h */
|
||||
/* removed #ifdef for hpux defined in /usr/include/model.h */
|
||||
#ifndef _INT16
|
||||
#define _INT16
|
||||
#endif
|
||||
#ifndef _INT32
|
||||
#define _INT32
|
||||
#endif
|
||||
#ifndef _UINT16
|
||||
#define _UINT16
|
||||
#endif
|
||||
#ifndef _UINT32
|
||||
#define _UINT32
|
||||
#endif
|
||||
|
||||
/*
|
||||
* NO_NSPR_10_SUPPORT disables the inclusion
|
||||
* of obsolete/protypes.h, whose int16, uint16,
|
||||
* int32, and uint32 typedefs conflict with those
|
||||
* in this file.
|
||||
*/
|
||||
#ifndef NO_NSPR_10_SUPPORT
|
||||
#define NO_NSPR_10_SUPPORT
|
||||
#endif
|
||||
#ifdef OJI
|
||||
#include "jri.h" /* Java Runtime Interface */
|
||||
#endif
|
||||
|
||||
#if defined (__OS2__ ) || defined (OS2)
|
||||
# ifndef XP_OS2
|
||||
# define XP_OS2 1
|
||||
# endif /* XP_OS2 */
|
||||
#endif /* __OS2__ */
|
||||
|
||||
#ifdef _WINDOWS
|
||||
# include <windef.h>
|
||||
# ifndef XP_WIN
|
||||
# define XP_WIN 1
|
||||
# endif /* XP_WIN */
|
||||
#endif /* _WINDOWS */
|
||||
|
||||
#ifdef __MWERKS__
|
||||
# define _declspec __declspec
|
||||
# ifdef __INTEL__
|
||||
# undef NULL
|
||||
# ifndef XP_WIN
|
||||
# define XP_WIN 1
|
||||
# endif /* XP_WIN */
|
||||
# endif /* __INTEL__ */
|
||||
#endif /* __MWERKS__ */
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
#include <Carbon/Carbon.h>
|
||||
#ifdef __LP64__
|
||||
#define NP_NO_QUICKDRAW
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(XP_UNIX)
|
||||
# include <stdio.h>
|
||||
# if defined(MOZ_X11)
|
||||
# include <X11/Xlib.h>
|
||||
# include <X11/Xutil.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
/* Plugin Version Constants */
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
#define NP_VERSION_MAJOR 0
|
||||
#define NP_VERSION_MINOR 19
|
||||
|
||||
|
||||
/* The OS/2 version of Netscape uses RC_DATA to define the
|
||||
mime types, file extensions, etc that are required.
|
||||
Use a vertical bar to separate types, end types with \0.
|
||||
FileVersion and ProductVersion are 32bit ints, all other
|
||||
entries are strings the MUST be terminated wwith a \0.
|
||||
|
||||
AN EXAMPLE:
|
||||
|
||||
RCDATA NP_INFO_ProductVersion { 1,0,0,1,}
|
||||
|
||||
RCDATA NP_INFO_MIMEType { "video/x-video|",
|
||||
"video/x-flick\0" }
|
||||
RCDATA NP_INFO_FileExtents { "avi|",
|
||||
"flc\0" }
|
||||
RCDATA NP_INFO_FileOpenName{ "MMOS2 video player(*.avi)|",
|
||||
"MMOS2 Flc/Fli player(*.flc)\0" }
|
||||
|
||||
RCDATA NP_INFO_FileVersion { 1,0,0,1 }
|
||||
RCDATA NP_INFO_CompanyName { "Netscape Communications\0" }
|
||||
RCDATA NP_INFO_FileDescription { "NPAVI32 Extension DLL\0"
|
||||
RCDATA NP_INFO_InternalName { "NPAVI32\0" )
|
||||
RCDATA NP_INFO_LegalCopyright { "Copyright Netscape Communications \251 1996\0"
|
||||
RCDATA NP_INFO_OriginalFilename { "NVAPI32.DLL" }
|
||||
RCDATA NP_INFO_ProductName { "NPAVI32 Dynamic Link Library\0" }
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/* RC_DATA types for version info - required */
|
||||
#define NP_INFO_ProductVersion 1
|
||||
#define NP_INFO_MIMEType 2
|
||||
#define NP_INFO_FileOpenName 3
|
||||
#define NP_INFO_FileExtents 4
|
||||
|
||||
/* RC_DATA types for version info - used if found */
|
||||
#define NP_INFO_FileDescription 5
|
||||
#define NP_INFO_ProductName 6
|
||||
|
||||
/* RC_DATA types for version info - optional */
|
||||
#define NP_INFO_CompanyName 7
|
||||
#define NP_INFO_FileVersion 8
|
||||
#define NP_INFO_InternalName 9
|
||||
#define NP_INFO_LegalCopyright 10
|
||||
#define NP_INFO_OriginalFilename 11
|
||||
|
||||
#ifndef RC_INVOKED
|
||||
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
/* Definition of Basic Types */
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
#ifndef _UINT16
|
||||
typedef unsigned short uint16;
|
||||
#endif
|
||||
|
||||
#ifndef _UINT32
|
||||
# if defined(__alpha) || defined(__amd64__) || defined(__x86_64__)
|
||||
typedef unsigned int uint32;
|
||||
# else /* __alpha */
|
||||
typedef unsigned long uint32;
|
||||
# endif /* __alpha */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* AIX defines these in sys/inttypes.h included from sys/types.h
|
||||
*/
|
||||
#ifndef AIX
|
||||
#ifndef _INT16
|
||||
typedef short int16;
|
||||
#endif
|
||||
|
||||
#ifndef _INT32
|
||||
# if defined(__alpha) || defined(__amd64__) || defined(__x86_64__)
|
||||
typedef int int32;
|
||||
# else /* __alpha */
|
||||
typedef long int32;
|
||||
# endif /* __alpha */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef FALSE
|
||||
#define FALSE (0)
|
||||
#endif
|
||||
#ifndef TRUE
|
||||
#define TRUE (1)
|
||||
#endif
|
||||
#ifndef NULL
|
||||
#define NULL (0L)
|
||||
#endif
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
typedef enum {
|
||||
#ifndef NP_NO_QUICKDRAW
|
||||
NPDrawingModelQuickDraw = 0,
|
||||
#endif
|
||||
NPDrawingModelCoreGraphics = 1
|
||||
} NPDrawingModel;
|
||||
#endif
|
||||
|
||||
typedef unsigned char NPBool;
|
||||
typedef int16 NPError;
|
||||
typedef int16 NPReason;
|
||||
typedef char* NPMIMEType;
|
||||
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
/* Structures and definitions */
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* NPP is a plug-in's opaque instance handle
|
||||
*/
|
||||
typedef struct _NPP
|
||||
{
|
||||
void* pdata; /* plug-in private data */
|
||||
void* ndata; /* netscape private data */
|
||||
} NPP_t;
|
||||
|
||||
typedef NPP_t* NPP;
|
||||
|
||||
|
||||
typedef struct _NPStream
|
||||
{
|
||||
void* pdata; /* plug-in private data */
|
||||
void* ndata; /* netscape private data */
|
||||
const char* url;
|
||||
uint32 end;
|
||||
uint32 lastmodified;
|
||||
void* notifyData;
|
||||
const char* headers; /* Response headers from host.
|
||||
* Exists only for >= NPVERS_HAS_RESPONSE_HEADERS.
|
||||
* Used for HTTP only; NULL for non-HTTP.
|
||||
* Available from NPP_NewStream onwards.
|
||||
* Plugin should copy this data before storing it.
|
||||
* Includes HTTP status line and all headers,
|
||||
* preferably verbatim as received from server,
|
||||
* headers formatted as in HTTP ("Header: Value"),
|
||||
* and newlines (\n, NOT \r\n) separating lines.
|
||||
* Terminated by \n\0 (NOT \n\n\0). */
|
||||
} NPStream;
|
||||
|
||||
|
||||
typedef struct _NPByteRange
|
||||
{
|
||||
int32 offset; /* negative offset means from the end */
|
||||
uint32 length;
|
||||
struct _NPByteRange* next;
|
||||
} NPByteRange;
|
||||
|
||||
|
||||
typedef struct _NPSavedData
|
||||
{
|
||||
int32 len;
|
||||
void* buf;
|
||||
} NPSavedData;
|
||||
|
||||
|
||||
typedef struct _NPRect
|
||||
{
|
||||
uint16 top;
|
||||
uint16 left;
|
||||
uint16 bottom;
|
||||
uint16 right;
|
||||
} NPRect;
|
||||
|
||||
typedef struct _NPSize
|
||||
{
|
||||
int32 width;
|
||||
int32 height;
|
||||
} NPSize;
|
||||
|
||||
#ifdef XP_UNIX
|
||||
/*
|
||||
* Unix specific structures and definitions
|
||||
*/
|
||||
|
||||
/*
|
||||
* Callback Structures.
|
||||
*
|
||||
* These are used to pass additional platform specific information.
|
||||
*/
|
||||
enum {
|
||||
NP_SETWINDOW = 1,
|
||||
NP_PRINT
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int32 type;
|
||||
} NPAnyCallbackStruct;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int32 type;
|
||||
#ifdef MOZ_X11
|
||||
Display* display;
|
||||
Visual* visual;
|
||||
Colormap colormap;
|
||||
unsigned int depth;
|
||||
#endif
|
||||
} NPSetWindowCallbackStruct;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int32 type;
|
||||
FILE* fp;
|
||||
} NPPrintCallbackStruct;
|
||||
|
||||
#endif /* XP_UNIX */
|
||||
|
||||
|
||||
/*
|
||||
* The following masks are applied on certain platforms to NPNV and
|
||||
* NPPV selectors that pass around pointers to COM interfaces. Newer
|
||||
* compilers on some platforms may generate vtables that are not
|
||||
* compatible with older compilers. To prevent older plugins from
|
||||
* not understanding a new browser's ABI, these masks change the
|
||||
* values of those selectors on those platforms. To remain backwards
|
||||
* compatible with differenet versions of the browser, plugins can
|
||||
* use these masks to dynamically determine and use the correct C++
|
||||
* ABI that the browser is expecting. This does not apply to Windows
|
||||
* as Microsoft's COM ABI will likely not change.
|
||||
*/
|
||||
|
||||
#define NP_ABI_GCC3_MASK 0x10000000
|
||||
/*
|
||||
* gcc 3.x generated vtables on UNIX and OSX are incompatible with
|
||||
* previous compilers.
|
||||
*/
|
||||
#if (defined (XP_UNIX) && defined(__GNUC__) && (__GNUC__ >= 3))
|
||||
#define _NP_ABI_MIXIN_FOR_GCC3 NP_ABI_GCC3_MASK
|
||||
#else
|
||||
#define _NP_ABI_MIXIN_FOR_GCC3 0
|
||||
#endif
|
||||
|
||||
|
||||
#define NP_ABI_MACHO_MASK 0x01000000
|
||||
/*
|
||||
* On OSX, the Mach-O executable format is significantly
|
||||
* different than CFM. In addition to having a different
|
||||
* C++ ABI, it also has has different C calling convention.
|
||||
* You must use glue code when calling between CFM and
|
||||
* Mach-O C functions.
|
||||
*/
|
||||
#if (defined(TARGET_RT_MAC_MACHO))
|
||||
#define _NP_ABI_MIXIN_FOR_MACHO NP_ABI_MACHO_MASK
|
||||
#else
|
||||
#define _NP_ABI_MIXIN_FOR_MACHO 0
|
||||
#endif
|
||||
|
||||
|
||||
#define NP_ABI_MASK (_NP_ABI_MIXIN_FOR_GCC3 | _NP_ABI_MIXIN_FOR_MACHO)
|
||||
|
||||
/*
|
||||
* List of variable names for which NPP_GetValue shall be implemented
|
||||
*/
|
||||
typedef enum {
|
||||
NPPVpluginNameString = 1,
|
||||
NPPVpluginDescriptionString,
|
||||
NPPVpluginWindowBool,
|
||||
NPPVpluginTransparentBool,
|
||||
NPPVjavaClass, /* Not implemented in Mozilla 1.0 */
|
||||
NPPVpluginWindowSize,
|
||||
NPPVpluginTimerInterval,
|
||||
|
||||
NPPVpluginScriptableInstance = (10 | NP_ABI_MASK),
|
||||
NPPVpluginScriptableIID = 11,
|
||||
|
||||
/* Introduced in Mozilla 0.9.9 */
|
||||
NPPVjavascriptPushCallerBool = 12,
|
||||
|
||||
/* Introduced in Mozilla 1.0 */
|
||||
NPPVpluginKeepLibraryInMemory = 13,
|
||||
NPPVpluginNeedsXEmbed = 14,
|
||||
|
||||
/* Get the NPObject for scripting the plugin. Introduced in Firefox
|
||||
* 1.0 (NPAPI minor version 14).
|
||||
*/
|
||||
NPPVpluginScriptableNPObject = 15,
|
||||
|
||||
/* Get the plugin value (as \0-terminated UTF-8 string data) for
|
||||
* form submission if the plugin is part of a form. Use
|
||||
* NPN_MemAlloc() to allocate memory for the string data. Introduced
|
||||
* in Mozilla 1.8b2 (NPAPI minor version 15).
|
||||
*/
|
||||
NPPVformValue = 16
|
||||
#ifdef XP_MACOSX
|
||||
/* Used for negotiating drawing models */
|
||||
, NPPVpluginDrawingModel = 1000
|
||||
#endif
|
||||
} NPPVariable;
|
||||
|
||||
/*
|
||||
* List of variable names for which NPN_GetValue is implemented by Mozilla
|
||||
*/
|
||||
typedef enum {
|
||||
NPNVxDisplay = 1,
|
||||
NPNVxtAppContext,
|
||||
NPNVnetscapeWindow,
|
||||
NPNVjavascriptEnabledBool,
|
||||
NPNVasdEnabledBool,
|
||||
NPNVisOfflineBool,
|
||||
|
||||
/* 10 and over are available on Mozilla builds starting with 0.9.4 */
|
||||
NPNVserviceManager = (10 | NP_ABI_MASK),
|
||||
NPNVDOMElement = (11 | NP_ABI_MASK), /* available in Mozilla 1.2 */
|
||||
NPNVDOMWindow = (12 | NP_ABI_MASK),
|
||||
NPNVToolkit = (13 | NP_ABI_MASK),
|
||||
NPNVSupportsXEmbedBool = 14,
|
||||
|
||||
/* Get the NPObject wrapper for the browser window. */
|
||||
NPNVWindowNPObject = 15,
|
||||
|
||||
/* Get the NPObject wrapper for the plugins DOM element. */
|
||||
NPNVPluginElementNPObject = 16,
|
||||
|
||||
NPNVSupportsWindowless = 17
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
/* Used for negotiating drawing models */
|
||||
, NPNVpluginDrawingModel = 1000
|
||||
#ifndef NP_NO_QUICKDRAW
|
||||
, NPNVsupportsQuickDrawBool = 2000
|
||||
#endif
|
||||
, NPNVsupportsCoreGraphicsBool = 2001
|
||||
#endif
|
||||
} NPNVariable;
|
||||
|
||||
/*
|
||||
* The type of Tookkit the widgets use
|
||||
*/
|
||||
typedef enum {
|
||||
NPNVGtk12 = 1,
|
||||
NPNVGtk2
|
||||
} NPNToolkitType;
|
||||
|
||||
/*
|
||||
* The type of a NPWindow - it specifies the type of the data structure
|
||||
* returned in the window field.
|
||||
*/
|
||||
typedef enum {
|
||||
NPWindowTypeWindow = 1,
|
||||
NPWindowTypeDrawable
|
||||
} NPWindowType;
|
||||
|
||||
typedef struct _NPWindow
|
||||
{
|
||||
void* window; /* Platform specific window handle */
|
||||
/* OS/2: x - Position of bottom left corner */
|
||||
/* OS/2: y - relative to visible netscape window */
|
||||
int32 x; /* Position of top left corner relative */
|
||||
int32 y; /* to a netscape page. */
|
||||
uint32 width; /* Maximum window size */
|
||||
uint32 height;
|
||||
NPRect clipRect; /* Clipping rectangle in port coordinates */
|
||||
/* Used by MAC only. */
|
||||
#if defined(XP_UNIX) && !defined(XP_MACOSX)
|
||||
void * ws_info; /* Platform-dependent additonal data */
|
||||
#endif /* XP_UNIX */
|
||||
NPWindowType type; /* Is this a window or a drawable? */
|
||||
} NPWindow;
|
||||
|
||||
|
||||
typedef struct _NPFullPrint
|
||||
{
|
||||
NPBool pluginPrinted;/* Set TRUE if plugin handled fullscreen printing */
|
||||
NPBool printOne; /* TRUE if plugin should print one copy to default printer */
|
||||
void* platformPrint; /* Platform-specific printing info */
|
||||
} NPFullPrint;
|
||||
|
||||
typedef struct _NPEmbedPrint
|
||||
{
|
||||
NPWindow window;
|
||||
void* platformPrint; /* Platform-specific printing info */
|
||||
} NPEmbedPrint;
|
||||
|
||||
typedef struct _NPPrint
|
||||
{
|
||||
uint16 mode; /* NP_FULL or NP_EMBED */
|
||||
union
|
||||
{
|
||||
NPFullPrint fullPrint; /* if mode is NP_FULL */
|
||||
NPEmbedPrint embedPrint; /* if mode is NP_EMBED */
|
||||
} print;
|
||||
} NPPrint;
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
typedef EventRecord NPEvent;
|
||||
#elif defined(XP_WIN)
|
||||
typedef struct _NPEvent
|
||||
{
|
||||
uint16 event;
|
||||
uint32 wParam;
|
||||
uint32 lParam;
|
||||
} NPEvent;
|
||||
#elif defined(XP_OS2)
|
||||
typedef struct _NPEvent
|
||||
{
|
||||
uint32 event;
|
||||
uint32 wParam;
|
||||
uint32 lParam;
|
||||
} NPEvent;
|
||||
#elif defined (XP_UNIX) && defined(MOZ_X11)
|
||||
typedef XEvent NPEvent;
|
||||
#else
|
||||
typedef void* NPEvent;
|
||||
#endif /* XP_MACOSX */
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
typedef void* NPRegion;
|
||||
#ifndef NP_NO_QUICKDRAW
|
||||
typedef RgnHandle NPQDRegion;
|
||||
#endif
|
||||
typedef CGPathRef NPCGRegion;
|
||||
#elif defined(XP_WIN)
|
||||
typedef HRGN NPRegion;
|
||||
#elif defined(XP_UNIX) && defined(MOZ_X11)
|
||||
typedef Region NPRegion;
|
||||
#else
|
||||
typedef void *NPRegion;
|
||||
#endif /* XP_MACOSX */
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
/*
|
||||
* Mac-specific structures and definitions.
|
||||
*/
|
||||
|
||||
typedef struct NP_Port
|
||||
{
|
||||
CGrafPtr port; /* Grafport */
|
||||
int32 portx; /* position inside the topmost window */
|
||||
int32 porty;
|
||||
} NP_Port;
|
||||
|
||||
typedef struct NP_CGContext
|
||||
{
|
||||
CGContextRef context;
|
||||
WindowRef window;
|
||||
} NP_CGContext;
|
||||
|
||||
/*
|
||||
* Non-standard event types that can be passed to HandleEvent
|
||||
*/
|
||||
|
||||
enum NPEventType {
|
||||
NPEventType_GetFocusEvent = (osEvt + 16),
|
||||
NPEventType_LoseFocusEvent,
|
||||
NPEventType_AdjustCursorEvent,
|
||||
NPEventType_MenuCommandEvent,
|
||||
NPEventType_ClippingChangedEvent,
|
||||
NPEventType_ScrollingBeginsEvent = 1000,
|
||||
NPEventType_ScrollingEndsEvent
|
||||
};
|
||||
|
||||
#ifdef OBSOLETE
|
||||
#define getFocusEvent (osEvt + 16)
|
||||
#define loseFocusEvent (osEvt + 17)
|
||||
#define adjustCursorEvent (osEvt + 18)
|
||||
#endif
|
||||
#endif /* XP_MACOSX */
|
||||
|
||||
/*
|
||||
* Values for mode passed to NPP_New:
|
||||
*/
|
||||
#define NP_EMBED 1
|
||||
#define NP_FULL 2
|
||||
|
||||
/*
|
||||
* Values for stream type passed to NPP_NewStream:
|
||||
*/
|
||||
#define NP_NORMAL 1
|
||||
#define NP_SEEK 2
|
||||
#define NP_ASFILE 3
|
||||
#define NP_ASFILEONLY 4
|
||||
|
||||
#define NP_MAXREADY (((unsigned)(~0)<<1)>>1)
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
/* Error and Reason Code definitions */
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* Values of type NPError:
|
||||
*/
|
||||
#define NPERR_BASE 0
|
||||
#define NPERR_NO_ERROR (NPERR_BASE + 0)
|
||||
#define NPERR_GENERIC_ERROR (NPERR_BASE + 1)
|
||||
#define NPERR_INVALID_INSTANCE_ERROR (NPERR_BASE + 2)
|
||||
#define NPERR_INVALID_FUNCTABLE_ERROR (NPERR_BASE + 3)
|
||||
#define NPERR_MODULE_LOAD_FAILED_ERROR (NPERR_BASE + 4)
|
||||
#define NPERR_OUT_OF_MEMORY_ERROR (NPERR_BASE + 5)
|
||||
#define NPERR_INVALID_PLUGIN_ERROR (NPERR_BASE + 6)
|
||||
#define NPERR_INVALID_PLUGIN_DIR_ERROR (NPERR_BASE + 7)
|
||||
#define NPERR_INCOMPATIBLE_VERSION_ERROR (NPERR_BASE + 8)
|
||||
#define NPERR_INVALID_PARAM (NPERR_BASE + 9)
|
||||
#define NPERR_INVALID_URL (NPERR_BASE + 10)
|
||||
#define NPERR_FILE_NOT_FOUND (NPERR_BASE + 11)
|
||||
#define NPERR_NO_DATA (NPERR_BASE + 12)
|
||||
#define NPERR_STREAM_NOT_SEEKABLE (NPERR_BASE + 13)
|
||||
|
||||
/*
|
||||
* Values of type NPReason:
|
||||
*/
|
||||
#define NPRES_BASE 0
|
||||
#define NPRES_DONE (NPRES_BASE + 0)
|
||||
#define NPRES_NETWORK_ERR (NPRES_BASE + 1)
|
||||
#define NPRES_USER_BREAK (NPRES_BASE + 2)
|
||||
|
||||
/*
|
||||
* Don't use these obsolete error codes any more.
|
||||
*/
|
||||
#define NP_NOERR NP_NOERR_is_obsolete_use_NPERR_NO_ERROR
|
||||
#define NP_EINVAL NP_EINVAL_is_obsolete_use_NPERR_GENERIC_ERROR
|
||||
#define NP_EABORT NP_EABORT_is_obsolete_use_NPRES_USER_BREAK
|
||||
|
||||
/*
|
||||
* Version feature information
|
||||
*/
|
||||
#define NPVERS_HAS_STREAMOUTPUT 8
|
||||
#define NPVERS_HAS_NOTIFICATION 9
|
||||
#define NPVERS_HAS_LIVECONNECT 9
|
||||
#define NPVERS_WIN16_HAS_LIVECONNECT 9
|
||||
#define NPVERS_68K_HAS_LIVECONNECT 11
|
||||
#define NPVERS_HAS_WINDOWLESS 11
|
||||
#define NPVERS_HAS_XPCONNECT_SCRIPTING 13
|
||||
#define NPVERS_HAS_NPRUNTIME_SCRIPTING 14
|
||||
#define NPVERS_HAS_FORM_VALUES 15
|
||||
#define NPVERS_HAS_POPUPS_ENABLED_STATE 16
|
||||
#define NPVERS_HAS_RESPONSE_HEADERS 17
|
||||
#define NPVERS_HAS_NPOBJECT_ENUM 18
|
||||
#define NPVERS_HAS_PLUGIN_THREAD_ASYNC_CALL 19
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
/* Function Prototypes */
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
#if defined(_WINDOWS) && !defined(WIN32)
|
||||
#define NP_LOADDS _loadds
|
||||
#else
|
||||
#if defined(__OS2__)
|
||||
#define NP_LOADDS _System
|
||||
#else
|
||||
#define NP_LOADDS
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* NPP_* functions are provided by the plugin and called by the navigator.
|
||||
*/
|
||||
|
||||
#ifdef XP_UNIX
|
||||
char* NPP_GetMIMEDescription(void);
|
||||
#endif /* XP_UNIX */
|
||||
|
||||
NPError NP_LOADDS NPP_Initialize(void);
|
||||
void NP_LOADDS NPP_Shutdown(void);
|
||||
NPError NP_LOADDS NPP_New(NPMIMEType pluginType, NPP instance,
|
||||
uint16 mode, int16 argc, char* argn[],
|
||||
char* argv[], NPSavedData* saved);
|
||||
NPError NP_LOADDS NPP_Destroy(NPP instance, NPSavedData** save);
|
||||
NPError NP_LOADDS NPP_SetWindow(NPP instance, NPWindow* window);
|
||||
NPError NP_LOADDS NPP_NewStream(NPP instance, NPMIMEType type,
|
||||
NPStream* stream, NPBool seekable,
|
||||
uint16* stype);
|
||||
NPError NP_LOADDS NPP_DestroyStream(NPP instance, NPStream* stream,
|
||||
NPReason reason);
|
||||
int32 NP_LOADDS NPP_WriteReady(NPP instance, NPStream* stream);
|
||||
int32 NP_LOADDS NPP_Write(NPP instance, NPStream* stream, int32 offset,
|
||||
int32 len, void* buffer);
|
||||
void NP_LOADDS NPP_StreamAsFile(NPP instance, NPStream* stream,
|
||||
const char* fname);
|
||||
void NP_LOADDS NPP_Print(NPP instance, NPPrint* platformPrint);
|
||||
int16 NP_LOADDS NPP_HandleEvent(NPP instance, void* event);
|
||||
void NP_LOADDS NPP_URLNotify(NPP instance, const char* url,
|
||||
NPReason reason, void* notifyData);
|
||||
#ifdef OJI
|
||||
jref NP_LOADDS NPP_GetJavaClass(void);
|
||||
#endif
|
||||
NPError NP_LOADDS NPP_GetValue(NPP instance, NPPVariable variable, void *value);
|
||||
NPError NP_LOADDS NPP_SetValue(NPP instance, NPNVariable variable, void *value);
|
||||
|
||||
/*
|
||||
* NPN_* functions are provided by the navigator and called by the plugin.
|
||||
*/
|
||||
void NP_LOADDS NPN_Version(int* plugin_major, int* plugin_minor,
|
||||
int* netscape_major, int* netscape_minor);
|
||||
NPError NP_LOADDS NPN_GetURLNotify(NPP instance, const char* url,
|
||||
const char* target, void* notifyData);
|
||||
NPError NP_LOADDS NPN_GetURL(NPP instance, const char* url,
|
||||
const char* target);
|
||||
NPError NP_LOADDS NPN_PostURLNotify(NPP instance, const char* url,
|
||||
const char* target, uint32 len,
|
||||
const char* buf, NPBool file,
|
||||
void* notifyData);
|
||||
NPError NP_LOADDS NPN_PostURL(NPP instance, const char* url,
|
||||
const char* target, uint32 len,
|
||||
const char* buf, NPBool file);
|
||||
NPError NP_LOADDS NPN_RequestRead(NPStream* stream, NPByteRange* rangeList);
|
||||
NPError NP_LOADDS NPN_NewStream(NPP instance, NPMIMEType type,
|
||||
const char* target, NPStream** stream);
|
||||
int32 NP_LOADDS NPN_Write(NPP instance, NPStream* stream, int32 len, void* buffer);
|
||||
NPError NP_LOADDS NPN_DestroyStream(NPP instance, NPStream* stream, NPReason reason);
|
||||
void NP_LOADDS NPN_Status(NPP instance, const char* message);
|
||||
const char* NP_LOADDS NPN_UserAgent(NPP instance);
|
||||
void* NP_LOADDS NPN_MemAlloc(uint32 size);
|
||||
void NP_LOADDS NPN_MemFree(void* ptr);
|
||||
uint32 NP_LOADDS NPN_MemFlush(uint32 size);
|
||||
void NP_LOADDS NPN_ReloadPlugins(NPBool reloadPages);
|
||||
#ifdef OJI
|
||||
JRIEnv* NP_LOADDS NPN_GetJavaEnv(void);
|
||||
jref NP_LOADDS NPN_GetJavaPeer(NPP instance);
|
||||
#endif
|
||||
NPError NP_LOADDS NPN_GetValue(NPP instance, NPNVariable variable, void *value);
|
||||
NPError NP_LOADDS NPN_SetValue(NPP instance, NPPVariable variable, void *value);
|
||||
void NP_LOADDS NPN_InvalidateRect(NPP instance, NPRect *invalidRect);
|
||||
void NP_LOADDS NPN_InvalidateRegion(NPP instance, NPRegion invalidRegion);
|
||||
void NP_LOADDS NPN_ForceRedraw(NPP instance);
|
||||
void NP_LOADDS NPN_PushPopupsEnabledState(NPP instance, NPBool enabled);
|
||||
void NP_LOADDS NPN_PopPopupsEnabledState(NPP instance);
|
||||
void NP_LOADDS NPN_PluginThreadAsyncCall(NPP instance,
|
||||
void (*func) (void *),
|
||||
void *userData);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* end extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* RC_INVOKED */
|
||||
#ifdef __OS2__
|
||||
#pragma pack()
|
||||
#endif
|
||||
|
||||
#endif /* _NPAPI_H_ */
|
||||
423
Templates/Full/web/source/npplugin/windows/npruntime.h
Normal file
423
Templates/Full/web/source/npplugin/windows/npruntime.h
Normal file
|
|
@ -0,0 +1,423 @@
|
|||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/*
|
||||
* Copyright © 2004, Apple Computer, Inc. and The Mozilla Foundation.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the names of Apple Computer, Inc. ("Apple") or The Mozilla
|
||||
* Foundation ("Mozilla") nor the names of their contributors may be used
|
||||
* to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY APPLE, MOZILLA AND THEIR CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE, MOZILLA OR
|
||||
* THEIR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* Revision 1 (March 4, 2004):
|
||||
* Initial proposal.
|
||||
*
|
||||
* Revision 2 (March 10, 2004):
|
||||
* All calls into script were made asynchronous. Results are
|
||||
* provided via the NPScriptResultFunctionPtr callback.
|
||||
*
|
||||
* Revision 3 (March 10, 2004):
|
||||
* Corrected comments to not refer to class retain/release FunctionPtrs.
|
||||
*
|
||||
* Revision 4 (March 11, 2004):
|
||||
* Added additional convenience NPN_SetExceptionWithUTF8().
|
||||
* Changed NPHasPropertyFunctionPtr and NPHasMethodFunctionPtr to take NPClass
|
||||
* pointers instead of NPObject pointers.
|
||||
* Added NPIsValidIdentifier().
|
||||
*
|
||||
* Revision 5 (March 17, 2004):
|
||||
* Added context parameter to result callbacks from ScriptObject functions.
|
||||
*
|
||||
* Revision 6 (March 29, 2004):
|
||||
* Renamed functions implemented by user agent to NPN_*. Removed _ from
|
||||
* type names.
|
||||
* Renamed "JavaScript" types to "Script".
|
||||
*
|
||||
* Revision 7 (April 21, 2004):
|
||||
* NPIdentifier becomes a void*, was int32_t
|
||||
* Remove NP_IsValidIdentifier, renamed NP_IdentifierFromUTF8 to NP_GetIdentifier
|
||||
* Added NPVariant and modified functions to use this new type.
|
||||
*
|
||||
* Revision 8 (July 9, 2004):
|
||||
* Updated to joint Apple-Mozilla license.
|
||||
*
|
||||
*/
|
||||
#ifndef _NP_RUNTIME_H_
|
||||
#define _NP_RUNTIME_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "nptypes.h"
|
||||
|
||||
/*
|
||||
This API is used to facilitate binding code written in C to script
|
||||
objects. The API in this header does not assume the presence of a
|
||||
user agent. That is, it can be used to bind C code to scripting
|
||||
environments outside of the context of a user agent.
|
||||
|
||||
However, the normal use of the this API is in the context of a
|
||||
scripting environment running in a browser or other user agent.
|
||||
In particular it is used to support the extended Netscape
|
||||
script-ability API for plugins (NP-SAP). NP-SAP is an extension
|
||||
of the Netscape plugin API. As such we have adopted the use of
|
||||
the "NP" prefix for this API.
|
||||
|
||||
The following NP{N|P}Variables were added to the Netscape plugin
|
||||
API (in npapi.h):
|
||||
|
||||
NPNVWindowNPObject
|
||||
NPNVPluginElementNPObject
|
||||
NPPVpluginScriptableNPObject
|
||||
|
||||
These variables are exposed through NPN_GetValue() and
|
||||
NPP_GetValue() (respectively) and are used to establish the
|
||||
initial binding between the user agent and native code. The DOM
|
||||
objects in the user agent can be examined and manipulated using
|
||||
the NPN_ functions that operate on NPObjects described in this
|
||||
header.
|
||||
|
||||
To the extent possible the assumptions about the scripting
|
||||
language used by the scripting environment have been minimized.
|
||||
*/
|
||||
|
||||
#define NP_BEGIN_MACRO do {
|
||||
#define NP_END_MACRO } while (0)
|
||||
|
||||
/*
|
||||
Objects (non-primitive data) passed between 'C' and script is
|
||||
always wrapped in an NPObject. The 'interface' of an NPObject is
|
||||
described by an NPClass.
|
||||
*/
|
||||
typedef struct NPObject NPObject;
|
||||
typedef struct NPClass NPClass;
|
||||
|
||||
typedef char NPUTF8;
|
||||
typedef struct _NPString {
|
||||
const NPUTF8 *UTF8Characters;
|
||||
uint32_t UTF8Length;
|
||||
} NPString;
|
||||
|
||||
typedef enum {
|
||||
NPVariantType_Void,
|
||||
NPVariantType_Null,
|
||||
NPVariantType_Bool,
|
||||
NPVariantType_Int32,
|
||||
NPVariantType_Double,
|
||||
NPVariantType_String,
|
||||
NPVariantType_Object
|
||||
} NPVariantType;
|
||||
|
||||
typedef struct _NPVariant {
|
||||
NPVariantType type;
|
||||
union {
|
||||
bool boolValue;
|
||||
int32_t intValue;
|
||||
double doubleValue;
|
||||
NPString stringValue;
|
||||
NPObject *objectValue;
|
||||
} value;
|
||||
} NPVariant;
|
||||
|
||||
/*
|
||||
NPN_ReleaseVariantValue is called on all 'out' parameters
|
||||
references. Specifically it is to be called on variants that own
|
||||
their value, as is the case with all non-const NPVariant*
|
||||
arguments after a successful call to any methods (except this one)
|
||||
in this API.
|
||||
|
||||
After calling NPN_ReleaseVariantValue, the type of the variant
|
||||
will be NPVariantType_Void.
|
||||
*/
|
||||
void NPN_ReleaseVariantValue(NPVariant *variant);
|
||||
|
||||
#define NPVARIANT_IS_VOID(_v) ((_v).type == NPVariantType_Void)
|
||||
#define NPVARIANT_IS_NULL(_v) ((_v).type == NPVariantType_Null)
|
||||
#define NPVARIANT_IS_BOOLEAN(_v) ((_v).type == NPVariantType_Bool)
|
||||
#define NPVARIANT_IS_INT32(_v) ((_v).type == NPVariantType_Int32)
|
||||
#define NPVARIANT_IS_DOUBLE(_v) ((_v).type == NPVariantType_Double)
|
||||
#define NPVARIANT_IS_STRING(_v) ((_v).type == NPVariantType_String)
|
||||
#define NPVARIANT_IS_OBJECT(_v) ((_v).type == NPVariantType_Object)
|
||||
|
||||
#define NPVARIANT_TO_BOOLEAN(_v) ((_v).value.boolValue)
|
||||
#define NPVARIANT_TO_INT32(_v) ((_v).value.intValue)
|
||||
#define NPVARIANT_TO_DOUBLE(_v) ((_v).value.doubleValue)
|
||||
#define NPVARIANT_TO_STRING(_v) ((_v).value.stringValue)
|
||||
#define NPVARIANT_TO_OBJECT(_v) ((_v).value.objectValue)
|
||||
|
||||
#define VOID_TO_NPVARIANT(_v) \
|
||||
NP_BEGIN_MACRO \
|
||||
(_v).type = NPVariantType_Void; \
|
||||
(_v).value.objectValue = NULL; \
|
||||
NP_END_MACRO
|
||||
|
||||
#define NULL_TO_NPVARIANT(_v) \
|
||||
NP_BEGIN_MACRO \
|
||||
(_v).type = NPVariantType_Null; \
|
||||
(_v).value.objectValue = NULL; \
|
||||
NP_END_MACRO
|
||||
|
||||
#define BOOLEAN_TO_NPVARIANT(_val, _v) \
|
||||
NP_BEGIN_MACRO \
|
||||
(_v).type = NPVariantType_Bool; \
|
||||
(_v).value.boolValue = !!(_val); \
|
||||
NP_END_MACRO
|
||||
|
||||
#define INT32_TO_NPVARIANT(_val, _v) \
|
||||
NP_BEGIN_MACRO \
|
||||
(_v).type = NPVariantType_Int32; \
|
||||
(_v).value.intValue = _val; \
|
||||
NP_END_MACRO
|
||||
|
||||
#define DOUBLE_TO_NPVARIANT(_val, _v) \
|
||||
NP_BEGIN_MACRO \
|
||||
(_v).type = NPVariantType_Double; \
|
||||
(_v).value.doubleValue = _val; \
|
||||
NP_END_MACRO
|
||||
|
||||
#define STRINGZ_TO_NPVARIANT(_val, _v) \
|
||||
NP_BEGIN_MACRO \
|
||||
(_v).type = NPVariantType_String; \
|
||||
NPString str = { _val, strlen(_val) }; \
|
||||
(_v).value.stringValue = str; \
|
||||
NP_END_MACRO
|
||||
|
||||
#define STRINGN_TO_NPVARIANT(_val, _len, _v) \
|
||||
NP_BEGIN_MACRO \
|
||||
(_v).type = NPVariantType_String; \
|
||||
NPString str = { _val, _len }; \
|
||||
(_v).value.stringValue = str; \
|
||||
NP_END_MACRO
|
||||
|
||||
#define OBJECT_TO_NPVARIANT(_val, _v) \
|
||||
NP_BEGIN_MACRO \
|
||||
(_v).type = NPVariantType_Object; \
|
||||
(_v).value.objectValue = _val; \
|
||||
NP_END_MACRO
|
||||
|
||||
|
||||
/*
|
||||
Type mappings (JavaScript types have been used for illustration
|
||||
purposes):
|
||||
|
||||
JavaScript to C (NPVariant with type:)
|
||||
undefined NPVariantType_Void
|
||||
null NPVariantType_Null
|
||||
Boolean NPVariantType_Bool
|
||||
Number NPVariantType_Double or NPVariantType_Int32
|
||||
String NPVariantType_String
|
||||
Object NPVariantType_Object
|
||||
|
||||
C (NPVariant with type:) to JavaScript
|
||||
NPVariantType_Void undefined
|
||||
NPVariantType_Null null
|
||||
NPVariantType_Bool Boolean
|
||||
NPVariantType_Int32 Number
|
||||
NPVariantType_Double Number
|
||||
NPVariantType_String String
|
||||
NPVariantType_Object Object
|
||||
*/
|
||||
|
||||
typedef void *NPIdentifier;
|
||||
|
||||
/*
|
||||
NPObjects have methods and properties. Methods and properties are
|
||||
identified with NPIdentifiers. These identifiers may be reflected
|
||||
in script. NPIdentifiers can be either strings or integers, IOW,
|
||||
methods and properties can be identified by either strings or
|
||||
integers (i.e. foo["bar"] vs foo[1]). NPIdentifiers can be
|
||||
compared using ==. In case of any errors, the requested
|
||||
NPIdentifier(s) will be NULL.
|
||||
*/
|
||||
NPIdentifier NPN_GetStringIdentifier(const NPUTF8 *name);
|
||||
void NPN_GetStringIdentifiers(const NPUTF8 **names, int32_t nameCount,
|
||||
NPIdentifier *identifiers);
|
||||
NPIdentifier NPN_GetIntIdentifier(int32_t intid);
|
||||
bool NPN_IdentifierIsString(NPIdentifier identifier);
|
||||
|
||||
/*
|
||||
The NPUTF8 returned from NPN_UTF8FromIdentifier SHOULD be freed.
|
||||
*/
|
||||
NPUTF8 *NPN_UTF8FromIdentifier(NPIdentifier identifier);
|
||||
|
||||
/*
|
||||
Get the integer represented by identifier. If identifier is not an
|
||||
integer identifier, the behaviour is undefined.
|
||||
*/
|
||||
int32_t NPN_IntFromIdentifier(NPIdentifier identifier);
|
||||
|
||||
/*
|
||||
NPObject behavior is implemented using the following set of
|
||||
callback functions.
|
||||
|
||||
The NPVariant *result argument of these functions (where
|
||||
applicable) should be released using NPN_ReleaseVariantValue().
|
||||
*/
|
||||
typedef NPObject *(*NPAllocateFunctionPtr)(NPP npp, NPClass *aClass);
|
||||
typedef void (*NPDeallocateFunctionPtr)(NPObject *npobj);
|
||||
typedef void (*NPInvalidateFunctionPtr)(NPObject *npobj);
|
||||
typedef bool (*NPHasMethodFunctionPtr)(NPObject *npobj, NPIdentifier name);
|
||||
typedef bool (*NPInvokeFunctionPtr)(NPObject *npobj, NPIdentifier name,
|
||||
const NPVariant *args, uint32_t argCount,
|
||||
NPVariant *result);
|
||||
typedef bool (*NPInvokeDefaultFunctionPtr)(NPObject *npobj,
|
||||
const NPVariant *args,
|
||||
uint32_t argCount,
|
||||
NPVariant *result);
|
||||
typedef bool (*NPHasPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name);
|
||||
typedef bool (*NPGetPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name,
|
||||
NPVariant *result);
|
||||
typedef bool (*NPSetPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name,
|
||||
const NPVariant *value);
|
||||
typedef bool (*NPRemovePropertyFunctionPtr)(NPObject *npobj,
|
||||
NPIdentifier name);
|
||||
typedef bool (*NPEnumerationFunctionPtr)(NPObject *npobj, NPIdentifier **value,
|
||||
uint32_t *count);
|
||||
typedef bool (*NPConstructFunctionPtr)(NPObject *npobj,
|
||||
const NPVariant *args,
|
||||
uint32_t argCount,
|
||||
NPVariant *result);
|
||||
|
||||
/*
|
||||
NPObjects returned by create, retain, invoke, and getProperty pass
|
||||
a reference count to the caller. That is, the callee adds a
|
||||
reference count which passes to the caller. It is the caller's
|
||||
responsibility to release the returned object.
|
||||
|
||||
NPInvokeFunctionPtr function may return 0 to indicate a void
|
||||
result.
|
||||
|
||||
NPInvalidateFunctionPtr is called by the scripting environment
|
||||
when the native code is shutdown. Any attempt to message a
|
||||
NPObject instance after the invalidate callback has been
|
||||
called will result in undefined behavior, even if the native code
|
||||
is still retaining those NPObject instances. (The runtime
|
||||
will typically return immediately, with 0 or NULL, from an attempt
|
||||
to dispatch to a NPObject, but this behavior should not be
|
||||
depended upon.)
|
||||
|
||||
The NPEnumerationFunctionPtr function may pass an array of
|
||||
NPIdentifiers back to the caller. The callee allocs the memory of
|
||||
the array using NPN_MemAlloc(), and it's the caller's responsibility
|
||||
to release it using NPN_MemFree().
|
||||
*/
|
||||
struct NPClass
|
||||
{
|
||||
uint32_t structVersion;
|
||||
NPAllocateFunctionPtr allocate;
|
||||
NPDeallocateFunctionPtr deallocate;
|
||||
NPInvalidateFunctionPtr invalidate;
|
||||
NPHasMethodFunctionPtr hasMethod;
|
||||
NPInvokeFunctionPtr invoke;
|
||||
NPInvokeDefaultFunctionPtr invokeDefault;
|
||||
NPHasPropertyFunctionPtr hasProperty;
|
||||
NPGetPropertyFunctionPtr getProperty;
|
||||
NPSetPropertyFunctionPtr setProperty;
|
||||
NPRemovePropertyFunctionPtr removeProperty;
|
||||
NPEnumerationFunctionPtr enumerate;
|
||||
NPConstructFunctionPtr construct;
|
||||
};
|
||||
|
||||
#define NP_CLASS_STRUCT_VERSION 3
|
||||
|
||||
#define NP_CLASS_STRUCT_VERSION_ENUM 2
|
||||
#define NP_CLASS_STRUCT_VERSION_CTOR 3
|
||||
|
||||
#define NP_CLASS_STRUCT_VERSION_HAS_ENUM(npclass) \
|
||||
((npclass)->structVersion >= NP_CLASS_STRUCT_VERSION_ENUM)
|
||||
|
||||
#define NP_CLASS_STRUCT_VERSION_HAS_CTOR(npclass) \
|
||||
((npclass)->structVersion >= NP_CLASS_STRUCT_VERSION_CTOR)
|
||||
|
||||
struct NPObject {
|
||||
NPClass *_class;
|
||||
uint32_t referenceCount;
|
||||
/*
|
||||
* Additional space may be allocated here by types of NPObjects
|
||||
*/
|
||||
};
|
||||
|
||||
/*
|
||||
If the class has an allocate function, NPN_CreateObject invokes
|
||||
that function, otherwise a NPObject is allocated and
|
||||
returned. This method will initialize the referenceCount member of
|
||||
the NPObject to 1.
|
||||
*/
|
||||
NPObject *NPN_CreateObject(NPP npp, NPClass *aClass);
|
||||
|
||||
/*
|
||||
Increment the NPObject's reference count.
|
||||
*/
|
||||
NPObject *NPN_RetainObject(NPObject *npobj);
|
||||
|
||||
/*
|
||||
Decremented the NPObject's reference count. If the reference
|
||||
count goes to zero, the class's destroy function is invoke if
|
||||
specified, otherwise the object is freed directly.
|
||||
*/
|
||||
void NPN_ReleaseObject(NPObject *npobj);
|
||||
|
||||
/*
|
||||
Functions to access script objects represented by NPObject.
|
||||
|
||||
Calls to script objects are synchronous. If a function returns a
|
||||
value, it will be supplied via the result NPVariant
|
||||
argument. Successful calls will return true, false will be
|
||||
returned in case of an error.
|
||||
|
||||
Calls made from plugin code to script must be made from the thread
|
||||
on which the plugin was initialized.
|
||||
*/
|
||||
|
||||
bool NPN_Invoke(NPP npp, NPObject *npobj, NPIdentifier methodName,
|
||||
const NPVariant *args, uint32_t argCount, NPVariant *result);
|
||||
bool NPN_InvokeDefault(NPP npp, NPObject *npobj, const NPVariant *args,
|
||||
uint32_t argCount, NPVariant *result);
|
||||
bool NPN_Evaluate(NPP npp, NPObject *npobj, NPString *script,
|
||||
NPVariant *result);
|
||||
bool NPN_GetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName,
|
||||
NPVariant *result);
|
||||
bool NPN_SetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName,
|
||||
const NPVariant *value);
|
||||
bool NPN_RemoveProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName);
|
||||
bool NPN_HasProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName);
|
||||
bool NPN_HasMethod(NPP npp, NPObject *npobj, NPIdentifier methodName);
|
||||
bool NPN_Enumerate(NPP npp, NPObject *npobj, NPIdentifier **identifier,
|
||||
uint32_t *count);
|
||||
bool NPN_Construct(NPP npp, NPObject *npobj, const NPVariant *args,
|
||||
uint32_t argCount, NPVariant *result);
|
||||
|
||||
/*
|
||||
NPN_SetException may be called to trigger a script exception upon
|
||||
return from entry points into NPObjects. Typical usage:
|
||||
|
||||
NPN_SetException (npobj, message);
|
||||
*/
|
||||
void NPN_SetException(NPObject *npobj, const NPUTF8 *message);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
105
Templates/Full/web/source/npplugin/windows/nptypes.h
Normal file
105
Templates/Full/web/source/npplugin/windows/nptypes.h
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* mozilla.org.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2004
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Johnny Stenback <jst@mozilla.org> (Original author)
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/*
|
||||
* Header file for ensuring that C99 types ([u]int32_t and bool) are
|
||||
* available.
|
||||
*/
|
||||
|
||||
#if defined(WIN32) || defined(OS2)
|
||||
/*
|
||||
* Win32 and OS/2 don't know C99, so define [u]int_32 here. The bool
|
||||
* is predefined tho, both in C and C++.
|
||||
*/
|
||||
typedef int int32_t;
|
||||
typedef unsigned int uint32_t;
|
||||
#elif defined(_AIX) || defined(__sun) || defined(__osf__) || defined(IRIX) || defined(HPUX)
|
||||
/*
|
||||
* AIX and SunOS ship a inttypes.h header that defines [u]int32_t,
|
||||
* but not bool for C.
|
||||
*/
|
||||
#include <inttypes.h>
|
||||
|
||||
#ifndef __cplusplus
|
||||
typedef int bool;
|
||||
#endif
|
||||
#elif defined(bsdi) || defined(FREEBSD) || defined(OPENBSD)
|
||||
/*
|
||||
* BSD/OS, FreeBSD, and OpenBSD ship sys/types.h that define int32_t and
|
||||
* u_int32_t.
|
||||
*/
|
||||
#include <sys/types.h>
|
||||
|
||||
/*
|
||||
* BSD/OS ships no header that defines uint32_t, nor bool (for C)
|
||||
*/
|
||||
#if defined(bsdi)
|
||||
typedef u_int32_t uint32_t;
|
||||
|
||||
#if !defined(__cplusplus)
|
||||
typedef int bool;
|
||||
#endif
|
||||
#else
|
||||
/*
|
||||
* FreeBSD and OpenBSD define uint32_t and bool.
|
||||
*/
|
||||
#include <inttypes.h>
|
||||
#include <stdbool.h>
|
||||
#endif
|
||||
#elif defined(BEOS)
|
||||
#include <inttypes.h>
|
||||
#else
|
||||
/*
|
||||
* For those that ship a standard C99 stdint.h header file, include
|
||||
* it. Can't do the same for stdbool.h tho, since some systems ship
|
||||
* with a stdbool.h file that doesn't compile!
|
||||
*/
|
||||
#include <stdint.h>
|
||||
|
||||
#ifndef __cplusplus
|
||||
#if !defined(__GNUC__) || (__GNUC__ > 2 || __GNUC_MINOR__ > 95)
|
||||
#include <stdbool.h>
|
||||
#else
|
||||
/*
|
||||
* GCC 2.91 can't deal with a typedef for bool, but a #define
|
||||
* works.
|
||||
*/
|
||||
#define bool int
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
715
Templates/Full/web/source/npplugin/windows/npupp.h
Normal file
715
Templates/Full/web/source/npplugin/windows/npupp.h
Normal file
|
|
@ -0,0 +1,715 @@
|
|||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
|
||||
/*
|
||||
* npupp.h $Revision: 3.26 $
|
||||
* function call mecahnics needed by platform specific glue code.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _NPUPP_H_
|
||||
#define _NPUPP_H_
|
||||
|
||||
#if defined(__OS2__)
|
||||
#pragma pack(1)
|
||||
#endif
|
||||
|
||||
#ifndef GENERATINGCFM
|
||||
#define GENERATINGCFM 0
|
||||
#endif
|
||||
|
||||
#ifndef _NPAPI_H_
|
||||
#include "npapi.h"
|
||||
#endif
|
||||
|
||||
#include "npruntime.h"
|
||||
|
||||
#include "jri.h"
|
||||
|
||||
|
||||
/******************************************************************************************
|
||||
plug-in function table macros
|
||||
for each function in and out of the plugin API we define
|
||||
typedef NPP_FooUPP
|
||||
#define NewNPP_FooProc
|
||||
#define CallNPP_FooProc
|
||||
*******************************************************************************************/
|
||||
|
||||
|
||||
/* NPP_Initialize */
|
||||
typedef void (* NP_LOADDS NPP_InitializeUPP)(void);
|
||||
#define NewNPP_InitializeProc(FUNC) \
|
||||
((NPP_InitializeUPP) (FUNC))
|
||||
#define CallNPP_InitializeProc(FUNC) \
|
||||
(*(FUNC))()
|
||||
|
||||
/* NPP_Shutdown */
|
||||
typedef void (* NP_LOADDS NPP_ShutdownUPP)(void);
|
||||
#define NewNPP_ShutdownProc(FUNC) \
|
||||
((NPP_ShutdownUPP) (FUNC))
|
||||
#define CallNPP_ShutdownProc(FUNC) \
|
||||
(*(FUNC))()
|
||||
|
||||
/* NPP_New */
|
||||
typedef NPError (* NP_LOADDS NPP_NewUPP)(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved);
|
||||
#define NewNPP_NewProc(FUNC) \
|
||||
((NPP_NewUPP) (FUNC))
|
||||
#define CallNPP_NewProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6), (ARG7))
|
||||
|
||||
/* NPP_Destroy */
|
||||
typedef NPError (* NP_LOADDS NPP_DestroyUPP)(NPP instance, NPSavedData** save);
|
||||
#define NewNPP_DestroyProc(FUNC) \
|
||||
((NPP_DestroyUPP) (FUNC))
|
||||
#define CallNPP_DestroyProc(FUNC, ARG1, ARG2) \
|
||||
(*(FUNC))((ARG1), (ARG2))
|
||||
|
||||
/* NPP_SetWindow */
|
||||
typedef NPError (* NP_LOADDS NPP_SetWindowUPP)(NPP instance, NPWindow* window);
|
||||
#define NewNPP_SetWindowProc(FUNC) \
|
||||
((NPP_SetWindowUPP) (FUNC))
|
||||
#define CallNPP_SetWindowProc(FUNC, ARG1, ARG2) \
|
||||
(*(FUNC))((ARG1), (ARG2))
|
||||
|
||||
/* NPP_NewStream */
|
||||
typedef NPError (* NP_LOADDS NPP_NewStreamUPP)(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16* stype);
|
||||
#define NewNPP_NewStreamProc(FUNC) \
|
||||
((NPP_NewStreamUPP) (FUNC))
|
||||
#define CallNPP_NewStreamProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5))
|
||||
|
||||
/* NPP_DestroyStream */
|
||||
typedef NPError (* NP_LOADDS NPP_DestroyStreamUPP)(NPP instance, NPStream* stream, NPReason reason);
|
||||
#define NewNPP_DestroyStreamProc(FUNC) \
|
||||
((NPP_DestroyStreamUPP) (FUNC))
|
||||
#define CallNPP_DestroyStreamProc(FUNC, NPParg, NPStreamPtr, NPReasonArg) \
|
||||
(*(FUNC))((NPParg), (NPStreamPtr), (NPReasonArg))
|
||||
|
||||
/* NPP_WriteReady */
|
||||
typedef int32 (* NP_LOADDS NPP_WriteReadyUPP)(NPP instance, NPStream* stream);
|
||||
#define NewNPP_WriteReadyProc(FUNC) \
|
||||
((NPP_WriteReadyUPP) (FUNC))
|
||||
#define CallNPP_WriteReadyProc(FUNC, NPParg, NPStreamPtr) \
|
||||
(*(FUNC))((NPParg), (NPStreamPtr))
|
||||
|
||||
/* NPP_Write */
|
||||
typedef int32 (* NP_LOADDS NPP_WriteUPP)(NPP instance, NPStream* stream, int32_t offset, int32_t len, void* buffer);
|
||||
#define NewNPP_WriteProc(FUNC) \
|
||||
((NPP_WriteUPP) (FUNC))
|
||||
#define CallNPP_WriteProc(FUNC, NPParg, NPStreamPtr, offsetArg, lenArg, bufferPtr) \
|
||||
(*(FUNC))((NPParg), (NPStreamPtr), (offsetArg), (lenArg), (bufferPtr))
|
||||
|
||||
/* NPP_StreamAsFile */
|
||||
typedef void (* NP_LOADDS NPP_StreamAsFileUPP)(NPP instance, NPStream* stream, const char* fname);
|
||||
#define NewNPP_StreamAsFileProc(FUNC) \
|
||||
((NPP_StreamAsFileUPP) (FUNC))
|
||||
#define CallNPP_StreamAsFileProc(FUNC, ARG1, ARG2, ARG3) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||
|
||||
/* NPP_Print */
|
||||
typedef void (* NP_LOADDS NPP_PrintUPP)(NPP instance, NPPrint* platformPrint);
|
||||
#define NewNPP_PrintProc(FUNC) \
|
||||
((NPP_PrintUPP) (FUNC))
|
||||
#define CallNPP_PrintProc(FUNC, NPParg, NPPrintArg) \
|
||||
(*(FUNC))((NPParg), (NPPrintArg))
|
||||
|
||||
/* NPP_HandleEvent */
|
||||
typedef int16 (* NP_LOADDS NPP_HandleEventUPP)(NPP instance, void* event);
|
||||
#define NewNPP_HandleEventProc(FUNC) \
|
||||
((NPP_HandleEventUPP) (FUNC))
|
||||
#define CallNPP_HandleEventProc(FUNC, NPParg, voidPtr) \
|
||||
(*(FUNC))((NPParg), (voidPtr))
|
||||
|
||||
/* NPP_URLNotify */
|
||||
typedef void (* NP_LOADDS NPP_URLNotifyUPP)(NPP instance, const char* url, NPReason reason, void* notifyData);
|
||||
#define NewNPP_URLNotifyProc(FUNC) \
|
||||
((NPP_URLNotifyUPP) (FUNC))
|
||||
#define CallNPP_URLNotifyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
|
||||
|
||||
/* NPP_GetValue */
|
||||
typedef NPError (* NP_LOADDS NPP_GetValueUPP)(NPP instance, NPPVariable variable, void *ret_alue);
|
||||
#define NewNPP_GetValueProc(FUNC) \
|
||||
((NPP_GetValueUPP) (FUNC))
|
||||
#define CallNPP_GetValueProc(FUNC, ARG1, ARG2, ARG3) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||
|
||||
/* NPP_SetValue */
|
||||
typedef NPError (* NP_LOADDS NPP_SetValueUPP)(NPP instance, NPNVariable variable, void *ret_alue);
|
||||
#define NewNPP_SetValueProc(FUNC) \
|
||||
((NPP_SetValueUPP) (FUNC))
|
||||
#define CallNPP_SetValueProc(FUNC, ARG1, ARG2, ARG3) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||
|
||||
/*
|
||||
* Netscape entry points
|
||||
*/
|
||||
|
||||
|
||||
/* NPN_GetValue */
|
||||
typedef NPError (* NP_LOADDS NPN_GetValueUPP)(NPP instance, NPNVariable variable, void *ret_alue);
|
||||
#define NewNPN_GetValueProc(FUNC) \
|
||||
((NPN_GetValueUPP) (FUNC))
|
||||
#define CallNPN_GetValueProc(FUNC, ARG1, ARG2, ARG3) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||
|
||||
/* NPN_SetValue */
|
||||
typedef NPError (* NP_LOADDS NPN_SetValueUPP)(NPP instance, NPPVariable variable, void *ret_alue);
|
||||
#define NewNPN_SetValueProc(FUNC) \
|
||||
((NPN_SetValueUPP) (FUNC))
|
||||
#define CallNPN_SetValueProc(FUNC, ARG1, ARG2, ARG3) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||
|
||||
/* NPN_GetUrlNotify */
|
||||
typedef NPError (* NP_LOADDS NPN_GetURLNotifyUPP)(NPP instance, const char* url, const char* window, void* notifyData);
|
||||
#define NewNPN_GetURLNotifyProc(FUNC) \
|
||||
((NPN_GetURLNotifyUPP) (FUNC))
|
||||
#define CallNPN_GetURLNotifyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
|
||||
|
||||
/* NPN_PostUrlNotify */
|
||||
typedef NPError (* NP_LOADDS NPN_PostURLNotifyUPP)(NPP instance, const char* url, const char* window, uint32 len, const char* buf, NPBool file, void* notifyData);
|
||||
#define NewNPN_PostURLNotifyProc(FUNC) \
|
||||
((NPN_PostURLNotifyUPP) (FUNC))
|
||||
#define CallNPN_PostURLNotifyProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6), (ARG7))
|
||||
|
||||
/* NPN_GetUrl */
|
||||
typedef NPError (* NP_LOADDS NPN_GetURLUPP)(NPP instance, const char* url, const char* window);
|
||||
#define NewNPN_GetURLProc(FUNC) \
|
||||
((NPN_GetURLUPP) (FUNC))
|
||||
#define CallNPN_GetURLProc(FUNC, ARG1, ARG2, ARG3) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||
|
||||
/* NPN_PostUrl */
|
||||
typedef NPError (* NP_LOADDS NPN_PostURLUPP)(NPP instance, const char* url, const char* window, uint32 len, const char* buf, NPBool file);
|
||||
#define NewNPN_PostURLProc(FUNC) \
|
||||
((NPN_PostURLUPP) (FUNC))
|
||||
#define CallNPN_PostURLProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6))
|
||||
|
||||
/* NPN_RequestRead */
|
||||
typedef NPError (* NP_LOADDS NPN_RequestReadUPP)(NPStream* stream, NPByteRange* rangeList);
|
||||
#define NewNPN_RequestReadProc(FUNC) \
|
||||
((NPN_RequestReadUPP) (FUNC))
|
||||
#define CallNPN_RequestReadProc(FUNC, stream, range) \
|
||||
(*(FUNC))((stream), (range))
|
||||
|
||||
/* NPN_NewStream */
|
||||
typedef NPError (* NP_LOADDS NPN_NewStreamUPP)(NPP instance, NPMIMEType type, const char* window, NPStream** stream);
|
||||
#define NewNPN_NewStreamProc(FUNC) \
|
||||
((NPN_NewStreamUPP) (FUNC))
|
||||
#define CallNPN_NewStreamProc(FUNC, npp, type, window, stream) \
|
||||
(*(FUNC))((npp), (type), (window), (stream))
|
||||
|
||||
/* NPN_Write */
|
||||
typedef int32 (* NP_LOADDS NPN_WriteUPP)(NPP instance, NPStream* stream, int32 len, void* buffer);
|
||||
#define NewNPN_WriteProc(FUNC) \
|
||||
((NPN_WriteUPP) (FUNC))
|
||||
#define CallNPN_WriteProc(FUNC, npp, stream, len, buffer) \
|
||||
(*(FUNC))((npp), (stream), (len), (buffer))
|
||||
|
||||
/* NPN_DestroyStream */
|
||||
typedef NPError (* NP_LOADDS NPN_DestroyStreamUPP)(NPP instance, NPStream* stream, NPReason reason);
|
||||
#define NewNPN_DestroyStreamProc(FUNC) \
|
||||
((NPN_DestroyStreamUPP) (FUNC))
|
||||
#define CallNPN_DestroyStreamProc(FUNC, npp, stream, reason) \
|
||||
(*(FUNC))((npp), (stream), (reason))
|
||||
|
||||
/* NPN_Status */
|
||||
typedef void (* NP_LOADDS NPN_StatusUPP)(NPP instance, const char* message);
|
||||
#define NewNPN_StatusProc(FUNC) \
|
||||
((NPN_StatusUPP) (FUNC))
|
||||
#define CallNPN_StatusProc(FUNC, npp, msg) \
|
||||
(*(FUNC))((npp), (msg))
|
||||
|
||||
/* NPN_UserAgent */
|
||||
typedef const char* (* NP_LOADDS NPN_UserAgentUPP)(NPP instance);
|
||||
#define NewNPN_UserAgentProc(FUNC) \
|
||||
((NPN_UserAgentUPP) (FUNC))
|
||||
#define CallNPN_UserAgentProc(FUNC, ARG1) \
|
||||
(*(FUNC))((ARG1))
|
||||
|
||||
/* NPN_MemAlloc */
|
||||
typedef void* (* NP_LOADDS NPN_MemAllocUPP)(uint32 size);
|
||||
#define NewNPN_MemAllocProc(FUNC) \
|
||||
((NPN_MemAllocUPP) (FUNC))
|
||||
#define CallNPN_MemAllocProc(FUNC, ARG1) \
|
||||
(*(FUNC))((ARG1))
|
||||
|
||||
/* NPN__MemFree */
|
||||
typedef void (* NP_LOADDS NPN_MemFreeUPP)(void* ptr);
|
||||
#define NewNPN_MemFreeProc(FUNC) \
|
||||
((NPN_MemFreeUPP) (FUNC))
|
||||
#define CallNPN_MemFreeProc(FUNC, ARG1) \
|
||||
(*(FUNC))((ARG1))
|
||||
|
||||
/* NPN_MemFlush */
|
||||
typedef uint32 (* NP_LOADDS NPN_MemFlushUPP)(uint32 size);
|
||||
#define NewNPN_MemFlushProc(FUNC) \
|
||||
((NPN_MemFlushUPP) (FUNC))
|
||||
#define CallNPN_MemFlushProc(FUNC, ARG1) \
|
||||
(*(FUNC))((ARG1))
|
||||
|
||||
/* NPN_ReloadPlugins */
|
||||
typedef void (* NP_LOADDS NPN_ReloadPluginsUPP)(NPBool reloadPages);
|
||||
#define NewNPN_ReloadPluginsProc(FUNC) \
|
||||
((NPN_ReloadPluginsUPP) (FUNC))
|
||||
#define CallNPN_ReloadPluginsProc(FUNC, ARG1) \
|
||||
(*(FUNC))((ARG1))
|
||||
|
||||
/* NPN_GetJavaEnv */
|
||||
typedef JRIEnv* (* NP_LOADDS NPN_GetJavaEnvUPP)(void);
|
||||
#define NewNPN_GetJavaEnvProc(FUNC) \
|
||||
((NPN_GetJavaEnvUPP) (FUNC))
|
||||
#define CallNPN_GetJavaEnvProc(FUNC) \
|
||||
(*(FUNC))()
|
||||
|
||||
/* NPN_GetJavaPeer */
|
||||
typedef jref (* NP_LOADDS NPN_GetJavaPeerUPP)(NPP instance);
|
||||
#define NewNPN_GetJavaPeerProc(FUNC) \
|
||||
((NPN_GetJavaPeerUPP) (FUNC))
|
||||
#define CallNPN_GetJavaPeerProc(FUNC, ARG1) \
|
||||
(*(FUNC))((ARG1))
|
||||
|
||||
/* NPN_InvalidateRect */
|
||||
typedef void (* NP_LOADDS NPN_InvalidateRectUPP)(NPP instance, NPRect *rect);
|
||||
#define NewNPN_InvalidateRectProc(FUNC) \
|
||||
((NPN_InvalidateRectUPP) (FUNC))
|
||||
#define CallNPN_InvalidateRectProc(FUNC, ARG1, ARG2) \
|
||||
(*(FUNC))((ARG1), (ARG2))
|
||||
|
||||
/* NPN_InvalidateRegion */
|
||||
typedef void (* NP_LOADDS NPN_InvalidateRegionUPP)(NPP instance, NPRegion region);
|
||||
#define NewNPN_InvalidateRegionProc(FUNC) \
|
||||
((NPN_InvalidateRegionUPP) (FUNC))
|
||||
#define CallNPN_InvalidateRegionProc(FUNC, ARG1, ARG2) \
|
||||
(*(FUNC))((ARG1), (ARG2))
|
||||
|
||||
/* NPN_ForceRedraw */
|
||||
typedef void (* NP_LOADDS NPN_ForceRedrawUPP)(NPP instance);
|
||||
#define NewNPN_ForceRedrawProc(FUNC) \
|
||||
((NPN_ForceRedrawUPP) (FUNC))
|
||||
#define CallNPN_ForceRedrawProc(FUNC, ARG1) \
|
||||
(*(FUNC))((ARG1))
|
||||
|
||||
/* NPN_GetStringIdentifier */
|
||||
typedef NPIdentifier (* NP_LOADDS NPN_GetStringIdentifierUPP)(const NPUTF8* name);
|
||||
#define NewNPN_GetStringIdentifierProc(FUNC) \
|
||||
((NPN_GetStringIdentifierUPP) (FUNC))
|
||||
#define CallNPN_GetStringIdentifierProc(FUNC, ARG1) \
|
||||
(*(FUNC))((ARG1))
|
||||
|
||||
/* NPN_GetStringIdentifiers */
|
||||
typedef void (* NP_LOADDS NPN_GetStringIdentifiersUPP)(const NPUTF8** names,
|
||||
int32_t nameCount,
|
||||
NPIdentifier* identifiers);
|
||||
#define NewNPN_GetStringIdentifiersProc(FUNC) \
|
||||
((NPN_GetStringIdentifiersUPP) (FUNC))
|
||||
#define CallNPN_GetStringIdentifiersProc(FUNC, ARG1, ARG2, ARG3) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||
|
||||
/* NPN_GetIntIdentifier */
|
||||
typedef NPIdentifier (* NP_LOADDS NPN_GetIntIdentifierUPP)(int32_t intid);
|
||||
#define NewNPN_GetIntIdentifierProc(FUNC) \
|
||||
((NPN_GetIntIdentifierUPP) (FUNC))
|
||||
#define CallNPN_GetIntIdentifierProc(FUNC, ARG1) \
|
||||
(*(FUNC))((ARG1))
|
||||
|
||||
/* NPN_IdentifierIsString */
|
||||
typedef bool (* NP_LOADDS NPN_IdentifierIsStringUPP)(NPIdentifier identifier);
|
||||
#define NewNPN_IdentifierIsStringProc(FUNC) \
|
||||
((NPN_IdentifierIsStringUPP) (FUNC))
|
||||
#define CallNPN_IdentifierIsStringProc(FUNC, ARG1) \
|
||||
(*(FUNC))((ARG1))
|
||||
|
||||
/* NPN_UTF8FromIdentifier */
|
||||
typedef NPUTF8* (* NP_LOADDS NPN_UTF8FromIdentifierUPP)(NPIdentifier identifier);
|
||||
#define NewNPN_UTF8FromIdentifierProc(FUNC) \
|
||||
((NPN_UTF8FromIdentifierUPP) (FUNC))
|
||||
#define CallNPN_UTF8FromIdentifierProc(FUNC, ARG1) \
|
||||
(*(FUNC))((ARG1))
|
||||
|
||||
/* NPN_IntFromIdentifier */
|
||||
typedef int32_t (* NP_LOADDS NPN_IntFromIdentifierUPP)(NPIdentifier identifier);
|
||||
#define NewNPN_IntFromIdentifierProc(FUNC) \
|
||||
((NPN_IntFromIdentifierUPP) (FUNC))
|
||||
#define CallNPN_IntFromIdentifierProc(FUNC, ARG1) \
|
||||
(*(FUNC))((ARG1))
|
||||
|
||||
/* NPN_CreateObject */
|
||||
typedef NPObject* (* NP_LOADDS NPN_CreateObjectUPP)(NPP npp, NPClass *aClass);
|
||||
#define NewNPN_CreateObjectProc(FUNC) \
|
||||
((NPN_CreateObjectUPP) (FUNC))
|
||||
#define CallNPN_CreateObjectProc(FUNC, ARG1, ARG2) \
|
||||
(*(FUNC))((ARG1), (ARG2))
|
||||
|
||||
/* NPN_RetainObject */
|
||||
typedef NPObject* (* NP_LOADDS NPN_RetainObjectUPP)(NPObject *obj);
|
||||
#define NewNPN_RetainObjectProc(FUNC) \
|
||||
((NPN_RetainObjectUPP) (FUNC))
|
||||
#define CallNPN_RetainObjectProc(FUNC, ARG1) \
|
||||
(*(FUNC))((ARG1))
|
||||
|
||||
/* NPN_ReleaseObject */
|
||||
typedef void (* NP_LOADDS NPN_ReleaseObjectUPP)(NPObject *obj);
|
||||
#define NewNPN_ReleaseObjectProc(FUNC) \
|
||||
((NPN_ReleaseObjectUPP) (FUNC))
|
||||
#define CallNPN_ReleaseObjectProc(FUNC, ARG1) \
|
||||
(*(FUNC))((ARG1))
|
||||
|
||||
/* NPN_Invoke */
|
||||
typedef bool (* NP_LOADDS NPN_InvokeUPP)(NPP npp, NPObject* obj, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result);
|
||||
#define NewNPN_InvokeProc(FUNC) \
|
||||
((NPN_InvokeUPP) (FUNC))
|
||||
#define CallNPN_InvokeProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6))
|
||||
|
||||
/* NPN_InvokeDefault */
|
||||
typedef bool (* NP_LOADDS NPN_InvokeDefaultUPP)(NPP npp, NPObject* obj, const NPVariant *args, uint32_t argCount, NPVariant *result);
|
||||
#define NewNPN_InvokeDefaultProc(FUNC) \
|
||||
((NPN_InvokeDefaultUPP) (FUNC))
|
||||
#define CallNPN_InvokeDefaultProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5))
|
||||
|
||||
/* NPN_Evaluate */
|
||||
typedef bool (* NP_LOADDS NPN_EvaluateUPP)(NPP npp, NPObject *obj, NPString *script, NPVariant *result);
|
||||
#define NewNPN_EvaluateProc(FUNC) \
|
||||
((NPN_EvaluateUPP) (FUNC))
|
||||
#define CallNPN_EvaluateProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
|
||||
|
||||
/* NPN_GetProperty */
|
||||
typedef bool (* NP_LOADDS NPN_GetPropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName, NPVariant *result);
|
||||
#define NewNPN_GetPropertyProc(FUNC) \
|
||||
((NPN_GetPropertyUPP) (FUNC))
|
||||
#define CallNPN_GetPropertyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
|
||||
|
||||
/* NPN_SetProperty */
|
||||
typedef bool (* NP_LOADDS NPN_SetPropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName, const NPVariant *value);
|
||||
#define NewNPN_SetPropertyProc(FUNC) \
|
||||
((NPN_SetPropertyUPP) (FUNC))
|
||||
#define CallNPN_SetPropertyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
|
||||
|
||||
/* NPN_RemoveProperty */
|
||||
typedef bool (* NP_LOADDS NPN_RemovePropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName);
|
||||
#define NewNPN_RemovePropertyProc(FUNC) \
|
||||
((NPN_RemovePropertyUPP) (FUNC))
|
||||
#define CallNPN_RemovePropertyProc(FUNC, ARG1, ARG2, ARG3) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||
|
||||
/* NPN_HasProperty */
|
||||
typedef bool (* NP_LOADDS NPN_HasPropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName);
|
||||
#define NewNPN_HasPropertyProc(FUNC) \
|
||||
((NPN_HasPropertyUPP) (FUNC))
|
||||
#define CallNPN_HasPropertyProc(FUNC, ARG1, ARG2, ARG3) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||
|
||||
/* NPN_HasMethod */
|
||||
typedef bool (* NP_LOADDS NPN_HasMethodUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName);
|
||||
#define NewNPN_HasMethodProc(FUNC) \
|
||||
((NPN_HasMethodUPP) (FUNC))
|
||||
#define CallNPN_HasMethodProc(FUNC, ARG1, ARG2, ARG3) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||
|
||||
/* NPN_ReleaseVariantValue */
|
||||
typedef void (* NP_LOADDS NPN_ReleaseVariantValueUPP)(NPVariant *variant);
|
||||
#define NewNPN_ReleaseVariantValueProc(FUNC) \
|
||||
((NPN_ReleaseVariantValueUPP) (FUNC))
|
||||
#define CallNPN_ReleaseVariantValueProc(FUNC, ARG1) \
|
||||
(*(FUNC))((ARG1))
|
||||
|
||||
/* NPN_SetException */
|
||||
typedef void (* NP_LOADDS NPN_SetExceptionUPP)(NPObject *obj, const NPUTF8 *message);
|
||||
#define NewNPN_SetExceptionProc(FUNC) \
|
||||
((NPN_SetExceptionUPP) (FUNC))
|
||||
#define CallNPN_SetExceptionProc(FUNC, ARG1, ARG2) \
|
||||
(*(FUNC))((ARG1), (ARG2))
|
||||
|
||||
/* NPN_PushPopupsEnabledStateUPP */
|
||||
typedef bool (* NP_LOADDS NPN_PushPopupsEnabledStateUPP)(NPP npp, NPBool enabled);
|
||||
#define NewNPN_PushPopupsEnabledStateProc(FUNC) \
|
||||
((NPN_PushPopupsEnabledStateUPP) (FUNC))
|
||||
#define CallNPN_PushPopupsEnabledStateProc(FUNC, ARG1, ARG2) \
|
||||
(*(FUNC))((ARG1), (ARG2))
|
||||
|
||||
/* NPN_PopPopupsEnabledState */
|
||||
typedef bool (* NP_LOADDS NPN_PopPopupsEnabledStateUPP)(NPP npp);
|
||||
#define NewNPN_PopPopupsEnabledStateProc(FUNC) \
|
||||
((NPN_PopPopupsEnabledStateUPP) (FUNC))
|
||||
#define CallNPN_PopPopupsEnabledStateProc(FUNC, ARG1) \
|
||||
(*(FUNC))((ARG1))
|
||||
|
||||
/* NPN_Enumerate */
|
||||
typedef bool (* NP_LOADDS NPN_EnumerateUPP)(NPP npp, NPObject *obj, NPIdentifier **identifier, uint32_t *count);
|
||||
#define NewNPN_EnumerateProc(FUNC) \
|
||||
((NPN_EnumerateUPP) (FUNC))
|
||||
#define CallNPN_EnumerateProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
|
||||
|
||||
/* NPN_PluginThreadAsyncCall */
|
||||
typedef void (* NP_LOADDS NPN_PluginThreadAsyncCallUPP)(NPP instance, void (*func)(void *), void *userData);
|
||||
#define NewNPN_PluginThreadAsyncCallProc(FUNC) \
|
||||
((NPN_PluginThreadAsyncCallUPP) (FUNC))
|
||||
#define CallNPN_PluginThreadAsyncCallProc(FUNC, ARG1, ARG2, ARG3) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||
|
||||
/* NPN_Construct */
|
||||
typedef bool (* NP_LOADDS NPN_ConstructUPP)(NPP npp, NPObject* obj, const NPVariant *args, uint32_t argCount, NPVariant *result);
|
||||
#define NewNPN_ConstructProc(FUNC) \
|
||||
((NPN_ConstructUPP) (FUNC))
|
||||
#define CallNPN_ConstructProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5) \
|
||||
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5))
|
||||
|
||||
|
||||
|
||||
/******************************************************************************************
|
||||
* The actual plugin function table definitions
|
||||
*******************************************************************************************/
|
||||
|
||||
typedef struct _NPPluginFuncs {
|
||||
uint16 size;
|
||||
uint16 version;
|
||||
NPP_NewUPP newp;
|
||||
NPP_DestroyUPP destroy;
|
||||
NPP_SetWindowUPP setwindow;
|
||||
NPP_NewStreamUPP newstream;
|
||||
NPP_DestroyStreamUPP destroystream;
|
||||
NPP_StreamAsFileUPP asfile;
|
||||
NPP_WriteReadyUPP writeready;
|
||||
NPP_WriteUPP write;
|
||||
NPP_PrintUPP print;
|
||||
NPP_HandleEventUPP event;
|
||||
NPP_URLNotifyUPP urlnotify;
|
||||
JRIGlobalRef javaClass;
|
||||
NPP_GetValueUPP getvalue;
|
||||
NPP_SetValueUPP setvalue;
|
||||
} NPPluginFuncs;
|
||||
|
||||
typedef struct _NPNetscapeFuncs {
|
||||
uint16 size;
|
||||
uint16 version;
|
||||
NPN_GetURLUPP geturl;
|
||||
NPN_PostURLUPP posturl;
|
||||
NPN_RequestReadUPP requestread;
|
||||
NPN_NewStreamUPP newstream;
|
||||
NPN_WriteUPP write;
|
||||
NPN_DestroyStreamUPP destroystream;
|
||||
NPN_StatusUPP status;
|
||||
NPN_UserAgentUPP uagent;
|
||||
NPN_MemAllocUPP memalloc;
|
||||
NPN_MemFreeUPP memfree;
|
||||
NPN_MemFlushUPP memflush;
|
||||
NPN_ReloadPluginsUPP reloadplugins;
|
||||
NPN_GetJavaEnvUPP getJavaEnv;
|
||||
NPN_GetJavaPeerUPP getJavaPeer;
|
||||
NPN_GetURLNotifyUPP geturlnotify;
|
||||
NPN_PostURLNotifyUPP posturlnotify;
|
||||
NPN_GetValueUPP getvalue;
|
||||
NPN_SetValueUPP setvalue;
|
||||
NPN_InvalidateRectUPP invalidaterect;
|
||||
NPN_InvalidateRegionUPP invalidateregion;
|
||||
NPN_ForceRedrawUPP forceredraw;
|
||||
NPN_GetStringIdentifierUPP getstringidentifier;
|
||||
NPN_GetStringIdentifiersUPP getstringidentifiers;
|
||||
NPN_GetIntIdentifierUPP getintidentifier;
|
||||
NPN_IdentifierIsStringUPP identifierisstring;
|
||||
NPN_UTF8FromIdentifierUPP utf8fromidentifier;
|
||||
NPN_IntFromIdentifierUPP intfromidentifier;
|
||||
NPN_CreateObjectUPP createobject;
|
||||
NPN_RetainObjectUPP retainobject;
|
||||
NPN_ReleaseObjectUPP releaseobject;
|
||||
NPN_InvokeUPP invoke;
|
||||
NPN_InvokeDefaultUPP invokeDefault;
|
||||
NPN_EvaluateUPP evaluate;
|
||||
NPN_GetPropertyUPP getproperty;
|
||||
NPN_SetPropertyUPP setproperty;
|
||||
NPN_RemovePropertyUPP removeproperty;
|
||||
NPN_HasPropertyUPP hasproperty;
|
||||
NPN_HasMethodUPP hasmethod;
|
||||
NPN_ReleaseVariantValueUPP releasevariantvalue;
|
||||
NPN_SetExceptionUPP setexception;
|
||||
NPN_PushPopupsEnabledStateUPP pushpopupsenabledstate;
|
||||
NPN_PopPopupsEnabledStateUPP poppopupsenabledstate;
|
||||
NPN_EnumerateUPP enumerate;
|
||||
NPN_PluginThreadAsyncCallUPP pluginthreadasynccall;
|
||||
NPN_ConstructUPP construct;
|
||||
} NPNetscapeFuncs;
|
||||
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
/******************************************************************************************
|
||||
* Mac platform-specific plugin glue stuff
|
||||
*******************************************************************************************/
|
||||
|
||||
/*
|
||||
* Main entry point of the plugin.
|
||||
* This routine will be called when the plugin is loaded. The function
|
||||
* tables are passed in and the plugin fills in the NPPluginFuncs table
|
||||
* and NPPShutdownUPP for Netscape's use.
|
||||
*/
|
||||
typedef NPError (* NP_LOADDS NPP_MainEntryUPP)(NPNetscapeFuncs*, NPPluginFuncs*, NPP_ShutdownUPP*);
|
||||
#define NewNPP_MainEntryProc(FUNC) \
|
||||
((NPP_MainEntryUPP) (FUNC))
|
||||
#define CallNPP_MainEntryProc(FUNC, netscapeFunc, pluginFunc, shutdownUPP) \
|
||||
(*(FUNC))((netscapeFunc), (pluginFunc), (shutdownUPP))
|
||||
|
||||
/*
|
||||
* Mac OS X version(s) of NP_GetMIMEDescription(const char *)
|
||||
* These can be called to retreive MIME information from the plugin dynamically
|
||||
*
|
||||
* Note: For compatibility with Quicktime, BPSupportedMIMEtypes is another way
|
||||
* to get mime info from the plugin only on OSX and may not be supported
|
||||
* in furture version -- use NP_GetMIMEDescription instead
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
kBPSupportedMIMETypesStructVers_1 = 1
|
||||
};
|
||||
|
||||
typedef struct _BPSupportedMIMETypes
|
||||
{
|
||||
SInt32 structVersion; /* struct version */
|
||||
Handle typeStrings; /* STR# formated handle, allocated by plug-in */
|
||||
Handle infoStrings; /* STR# formated handle, allocated by plug-in */
|
||||
} BPSupportedMIMETypes;
|
||||
OSErr BP_GetSupportedMIMETypes(BPSupportedMIMETypes *mimeInfo, UInt32 flags);
|
||||
|
||||
/* NP_GetMIMEDescription */
|
||||
#define NP_GETMIMEDESCRIPTION_NAME "NP_GetMIMEDescription"
|
||||
typedef const char* (* NP_LOADDS NP_GetMIMEDescriptionUPP)();
|
||||
#define NewNP_GetMIMEDescEntryProc(FUNC) \
|
||||
((NP_GetMIMEDescriptionUPP) (FUNC))
|
||||
#define CallNP_GetMIMEDescEntryProc(FUNC) \
|
||||
(*(FUNC))()
|
||||
|
||||
/* BP_GetSupportedMIMETypes */
|
||||
typedef OSErr (* NP_LOADDS BP_GetSupportedMIMETypesUPP)(BPSupportedMIMETypes*, UInt32);
|
||||
#define NewBP_GetSupportedMIMETypesEntryProc(FUNC) \
|
||||
((BP_GetSupportedMIMETypesUPP) (FUNC))
|
||||
#define CallBP_GetMIMEDescEntryProc(FUNC, mimeInfo, flags) \
|
||||
(*(FUNC))((mimeInfo), (flags))
|
||||
|
||||
#endif /* XP_MACOSX */
|
||||
|
||||
#if defined(_WINDOWS)
|
||||
#define OSCALL WINAPI
|
||||
#else
|
||||
#if defined(__OS2__)
|
||||
#define OSCALL _System
|
||||
#else
|
||||
#define OSCALL
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(XP_UNIX)
|
||||
/* GCC 3.3 and later support the visibility attribute. */
|
||||
#if defined(__GNUC__) && \
|
||||
((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
|
||||
#define NP_VISIBILITY_DEFAULT __attribute__((visibility("default")))
|
||||
#else
|
||||
#define NP_VISIBILITY_DEFAULT
|
||||
#endif
|
||||
|
||||
#define NP_EXPORT(__type) NP_VISIBILITY_DEFAULT __type
|
||||
#endif
|
||||
|
||||
#if defined( _WINDOWS ) || defined (__OS2__)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* plugin meta member functions */
|
||||
#if defined(__OS2__)
|
||||
|
||||
typedef struct _NPPluginData { /* Alternate OS2 Plugin interface */
|
||||
char *pMimeTypes;
|
||||
char *pFileExtents;
|
||||
char *pFileOpenTemplate;
|
||||
char *pProductName;
|
||||
char *pProductDescription;
|
||||
unsigned long dwProductVersionMS;
|
||||
unsigned long dwProductVersionLS;
|
||||
} NPPluginData;
|
||||
|
||||
NPError OSCALL NP_GetPluginData(NPPluginData * pPluginData);
|
||||
|
||||
#endif
|
||||
|
||||
NPError OSCALL NP_GetEntryPoints(NPPluginFuncs* pFuncs);
|
||||
|
||||
NPError OSCALL NP_Initialize(NPNetscapeFuncs* pFuncs);
|
||||
|
||||
NPError OSCALL NP_Shutdown();
|
||||
|
||||
char* NP_GetMIMEDescription();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _WINDOWS || __OS2__ */
|
||||
|
||||
#if defined(__OS2__)
|
||||
#pragma pack()
|
||||
#endif
|
||||
|
||||
#ifdef XP_UNIX
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* plugin meta member functions */
|
||||
|
||||
NP_EXPORT(char*) NP_GetMIMEDescription(void);
|
||||
NP_EXPORT(NPError) NP_Initialize(NPNetscapeFuncs*, NPPluginFuncs*);
|
||||
NP_EXPORT(NPError) NP_Shutdown(void);
|
||||
NP_EXPORT(NPError) NP_GetValue(void *future, NPPVariable aVariable, void *aValue);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* XP_UNIX */
|
||||
|
||||
#endif /* _NPUPP_H_ */
|
||||
252
Templates/Full/web/source/npplugin/windows/obsolete/protypes.h
Normal file
252
Templates/Full/web/source/npplugin/windows/obsolete/protypes.h
Normal file
|
|
@ -0,0 +1,252 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is the Netscape Portable Runtime (NSPR).
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998-2000
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/*
|
||||
* This header typedefs the old 'native' types to the new PR<type>s.
|
||||
* These definitions are scheduled to be eliminated at the earliest
|
||||
* possible time. The NSPR API is implemented and documented using
|
||||
* the new definitions.
|
||||
*/
|
||||
|
||||
#if !defined(PROTYPES_H)
|
||||
#define PROTYPES_H
|
||||
|
||||
typedef PRUintn uintn;
|
||||
#ifndef _XP_Core_
|
||||
typedef PRIntn intn;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* It is trickier to define uint, int8, uint8, int16, uint16,
|
||||
* int32, uint32, int64, and uint64 because some of these int
|
||||
* types are defined by standard header files on some platforms.
|
||||
* Our strategy here is to include all such standard headers
|
||||
* first, and then define these int types only if they are not
|
||||
* defined by those standard headers.
|
||||
*/
|
||||
|
||||
/*
|
||||
* BeOS defines all the int types below in its standard header
|
||||
* file SupportDefs.h.
|
||||
*/
|
||||
#ifdef XP_BEOS
|
||||
#include <support/SupportDefs.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* OpenVMS defines all the int types below in its standard
|
||||
* header files ints.h and types.h.
|
||||
*/
|
||||
#ifdef VMS
|
||||
#include <ints.h>
|
||||
#include <types.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* SVR4 typedef of uint is commonly found on UNIX machines.
|
||||
*
|
||||
* On AIX 4.3, sys/inttypes.h (which is included by sys/types.h)
|
||||
* defines the types int8, int16, int32, and int64.
|
||||
*/
|
||||
#ifdef XP_UNIX
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
/* model.h on HP-UX defines int8, int16, and int32. */
|
||||
#ifdef HPUX
|
||||
#include <model.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* uint
|
||||
*/
|
||||
|
||||
#if !defined(XP_BEOS) && !defined(VMS) \
|
||||
&& !defined(XP_UNIX) || defined(NTO)
|
||||
typedef PRUintn uint;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* uint64
|
||||
*/
|
||||
|
||||
#if !defined(XP_BEOS) && !defined(VMS)
|
||||
typedef PRUint64 uint64;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* uint32
|
||||
*/
|
||||
|
||||
#if !defined(XP_BEOS) && !defined(VMS)
|
||||
#if !defined(XP_MAC) && !defined(_WIN32) && !defined(XP_OS2) && !defined(NTO)
|
||||
typedef PRUint32 uint32;
|
||||
#else
|
||||
typedef unsigned long uint32;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* uint16
|
||||
*/
|
||||
|
||||
#if !defined(XP_BEOS) && !defined(VMS)
|
||||
typedef PRUint16 uint16;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* uint8
|
||||
*/
|
||||
|
||||
#if !defined(XP_BEOS) && !defined(VMS)
|
||||
typedef PRUint8 uint8;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* int64
|
||||
*/
|
||||
|
||||
#if !defined(XP_BEOS) && !defined(VMS) \
|
||||
&& !defined(_PR_AIX_HAVE_BSD_INT_TYPES)
|
||||
typedef PRInt64 int64;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* int32
|
||||
*/
|
||||
|
||||
#if !defined(XP_BEOS) && !defined(VMS) \
|
||||
&& !defined(_PR_AIX_HAVE_BSD_INT_TYPES) \
|
||||
&& !defined(HPUX)
|
||||
#if !defined(XP_MAC) && !defined(_WIN32) && !defined(XP_OS2) && !defined(NTO)
|
||||
typedef PRInt32 int32;
|
||||
#else
|
||||
typedef long int32;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* int16
|
||||
*/
|
||||
|
||||
#if !defined(XP_BEOS) && !defined(VMS) \
|
||||
&& !defined(_PR_AIX_HAVE_BSD_INT_TYPES) \
|
||||
&& !defined(HPUX)
|
||||
typedef PRInt16 int16;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* int8
|
||||
*/
|
||||
|
||||
#if !defined(XP_BEOS) && !defined(VMS) \
|
||||
&& !defined(_PR_AIX_HAVE_BSD_INT_TYPES) \
|
||||
&& !defined(HPUX)
|
||||
typedef PRInt8 int8;
|
||||
#endif
|
||||
|
||||
typedef PRFloat64 float64;
|
||||
typedef PRUptrdiff uptrdiff_t;
|
||||
typedef PRUword uprword_t;
|
||||
typedef PRWord prword_t;
|
||||
|
||||
|
||||
/* Re: prbit.h */
|
||||
#define TEST_BIT PR_TEST_BIT
|
||||
#define SET_BIT PR_SET_BIT
|
||||
#define CLEAR_BIT PR_CLEAR_BIT
|
||||
|
||||
/* Re: prarena.h->plarena.h */
|
||||
#define PRArena PLArena
|
||||
#define PRArenaPool PLArenaPool
|
||||
#define PRArenaStats PLArenaStats
|
||||
#define PR_ARENA_ALIGN PL_ARENA_ALIGN
|
||||
#define PR_INIT_ARENA_POOL PL_INIT_ARENA_POOL
|
||||
#define PR_ARENA_ALLOCATE PL_ARENA_ALLOCATE
|
||||
#define PR_ARENA_GROW PL_ARENA_GROW
|
||||
#define PR_ARENA_MARK PL_ARENA_MARK
|
||||
#define PR_CLEAR_UNUSED PL_CLEAR_UNUSED
|
||||
#define PR_CLEAR_ARENA PL_CLEAR_ARENA
|
||||
#define PR_ARENA_RELEASE PL_ARENA_RELEASE
|
||||
#define PR_COUNT_ARENA PL_COUNT_ARENA
|
||||
#define PR_ARENA_DESTROY PL_ARENA_DESTROY
|
||||
#define PR_InitArenaPool PL_InitArenaPool
|
||||
#define PR_FreeArenaPool PL_FreeArenaPool
|
||||
#define PR_FinishArenaPool PL_FinishArenaPool
|
||||
#define PR_CompactArenaPool PL_CompactArenaPool
|
||||
#define PR_ArenaFinish PL_ArenaFinish
|
||||
#define PR_ArenaAllocate PL_ArenaAllocate
|
||||
#define PR_ArenaGrow PL_ArenaGrow
|
||||
#define PR_ArenaRelease PL_ArenaRelease
|
||||
#define PR_ArenaCountAllocation PL_ArenaCountAllocation
|
||||
#define PR_ArenaCountInplaceGrowth PL_ArenaCountInplaceGrowth
|
||||
#define PR_ArenaCountGrowth PL_ArenaCountGrowth
|
||||
#define PR_ArenaCountRelease PL_ArenaCountRelease
|
||||
#define PR_ArenaCountRetract PL_ArenaCountRetract
|
||||
|
||||
/* Re: prhash.h->plhash.h */
|
||||
#define PRHashEntry PLHashEntry
|
||||
#define PRHashTable PLHashTable
|
||||
#define PRHashNumber PLHashNumber
|
||||
#define PRHashFunction PLHashFunction
|
||||
#define PRHashComparator PLHashComparator
|
||||
#define PRHashEnumerator PLHashEnumerator
|
||||
#define PRHashAllocOps PLHashAllocOps
|
||||
#define PR_NewHashTable PL_NewHashTable
|
||||
#define PR_HashTableDestroy PL_HashTableDestroy
|
||||
#define PR_HashTableRawLookup PL_HashTableRawLookup
|
||||
#define PR_HashTableRawAdd PL_HashTableRawAdd
|
||||
#define PR_HashTableRawRemove PL_HashTableRawRemove
|
||||
#define PR_HashTableAdd PL_HashTableAdd
|
||||
#define PR_HashTableRemove PL_HashTableRemove
|
||||
#define PR_HashTableEnumerateEntries PL_HashTableEnumerateEntries
|
||||
#define PR_HashTableLookup PL_HashTableLookup
|
||||
#define PR_HashTableDump PL_HashTableDump
|
||||
#define PR_HashString PL_HashString
|
||||
#define PR_CompareStrings PL_CompareStrings
|
||||
#define PR_CompareValues PL_CompareValues
|
||||
|
||||
#if defined(XP_MAC)
|
||||
#ifndef TRUE /* Mac standard is lower case true */
|
||||
#define TRUE 1
|
||||
#endif
|
||||
#ifndef FALSE /* Mac standard is lower case false */
|
||||
#define FALSE 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* !defined(PROTYPES_H) */
|
||||
300
Templates/Full/web/source/npplugin/windows/prcpucfg.h
Normal file
300
Templates/Full/web/source/npplugin/windows/prcpucfg.h
Normal file
|
|
@ -0,0 +1,300 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is the Netscape Portable Runtime (NSPR).
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998-2000
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifndef nspr_cpucfg___
|
||||
#define nspr_cpucfg___
|
||||
|
||||
#ifndef XP_PC
|
||||
#define XP_PC
|
||||
#endif
|
||||
|
||||
#ifndef WIN32
|
||||
#define WIN32
|
||||
#endif
|
||||
|
||||
#ifndef WIN95
|
||||
#define WIN95
|
||||
#endif
|
||||
|
||||
#define PR_AF_INET6 23 /* same as AF_INET6 */
|
||||
|
||||
#if defined(_M_IX86) || defined(_X86_)
|
||||
|
||||
#define IS_LITTLE_ENDIAN 1
|
||||
#undef IS_BIG_ENDIAN
|
||||
|
||||
#define PR_BYTES_PER_BYTE 1
|
||||
#define PR_BYTES_PER_SHORT 2
|
||||
#define PR_BYTES_PER_INT 4
|
||||
#define PR_BYTES_PER_INT64 8
|
||||
#define PR_BYTES_PER_LONG 4
|
||||
#define PR_BYTES_PER_FLOAT 4
|
||||
#define PR_BYTES_PER_WORD 4
|
||||
#define PR_BYTES_PER_DWORD 8
|
||||
#define PR_BYTES_PER_DOUBLE 8
|
||||
|
||||
#define PR_BITS_PER_BYTE 8
|
||||
#define PR_BITS_PER_SHORT 16
|
||||
#define PR_BITS_PER_INT 32
|
||||
#define PR_BITS_PER_INT64 64
|
||||
#define PR_BITS_PER_LONG 32
|
||||
#define PR_BITS_PER_FLOAT 32
|
||||
#define PR_BITS_PER_WORD 32
|
||||
#define PR_BITS_PER_DWORD 64
|
||||
#define PR_BITS_PER_DOUBLE 64
|
||||
|
||||
#define PR_BITS_PER_BYTE_LOG2 3
|
||||
#define PR_BITS_PER_SHORT_LOG2 4
|
||||
#define PR_BITS_PER_INT_LOG2 5
|
||||
#define PR_BITS_PER_INT64_LOG2 6
|
||||
#define PR_BITS_PER_LONG_LOG2 5
|
||||
#define PR_BITS_PER_FLOAT_LOG2 5
|
||||
#define PR_BITS_PER_WORD_LOG2 5
|
||||
#define PR_BITS_PER_DWORD_LOG2 6
|
||||
#define PR_BITS_PER_DOUBLE_LOG2 6
|
||||
|
||||
#define PR_ALIGN_OF_SHORT 2
|
||||
#define PR_ALIGN_OF_INT 4
|
||||
#define PR_ALIGN_OF_LONG 4
|
||||
#define PR_ALIGN_OF_INT64 8
|
||||
#define PR_ALIGN_OF_FLOAT 4
|
||||
#define PR_ALIGN_OF_WORD 4
|
||||
#define PR_ALIGN_OF_DWORD 8
|
||||
#define PR_ALIGN_OF_DOUBLE 4
|
||||
#define PR_ALIGN_OF_POINTER 4
|
||||
|
||||
#define PR_BYTES_PER_WORD_LOG2 2
|
||||
#define PR_BYTES_PER_DWORD_LOG2 2
|
||||
|
||||
#elif defined(_ALPHA_)
|
||||
|
||||
#define IS_LITTLE_ENDIAN 1
|
||||
#undef IS_BIG_ENDIAN
|
||||
|
||||
#define PR_BYTES_PER_BYTE 1
|
||||
#define PR_BYTES_PER_SHORT 2
|
||||
#define PR_BYTES_PER_INT 4
|
||||
#define PR_BYTES_PER_INT64 8
|
||||
#define PR_BYTES_PER_LONG 4
|
||||
#define PR_BYTES_PER_FLOAT 4
|
||||
#define PR_BYTES_PER_DOUBLE 8
|
||||
#define PR_BYTES_PER_WORD 4
|
||||
#define PR_BYTES_PER_DWORD 8
|
||||
|
||||
#define PR_BITS_PER_BYTE 8
|
||||
#define PR_BITS_PER_SHORT 16
|
||||
#define PR_BITS_PER_INT 32
|
||||
#define PR_BITS_PER_INT64 64
|
||||
#define PR_BITS_PER_LONG 32
|
||||
#define PR_BITS_PER_FLOAT 32
|
||||
#define PR_BITS_PER_DOUBLE 64
|
||||
#define PR_BITS_PER_WORD 32
|
||||
|
||||
#define PR_BITS_PER_BYTE_LOG2 3
|
||||
#define PR_BITS_PER_SHORT_LOG2 4
|
||||
#define PR_BITS_PER_INT_LOG2 5
|
||||
#define PR_BITS_PER_INT64_LOG2 6
|
||||
#define PR_BITS_PER_LONG_LOG2 5
|
||||
#define PR_BITS_PER_FLOAT_LOG2 5
|
||||
#define PR_BITS_PER_DOUBLE_LOG2 6
|
||||
#define PR_BITS_PER_WORD_LOG2 5
|
||||
|
||||
#define PR_BYTES_PER_WORD_LOG2 2
|
||||
#define PR_BYTES_PER_DWORD_LOG2 3
|
||||
|
||||
#define PR_ALIGN_OF_SHORT 2
|
||||
#define PR_ALIGN_OF_INT 4
|
||||
#define PR_ALIGN_OF_LONG 4
|
||||
#define PR_ALIGN_OF_INT64 8
|
||||
#define PR_ALIGN_OF_FLOAT 4
|
||||
#define PR_ALIGN_OF_DOUBLE 8
|
||||
#define PR_ALIGN_OF_POINTER 4
|
||||
|
||||
#elif defined(_AMD64_)
|
||||
|
||||
#define IS_LITTLE_ENDIAN 1
|
||||
#undef IS_BIG_ENDIAN
|
||||
#define IS_64
|
||||
|
||||
#define PR_BYTES_PER_BYTE 1
|
||||
#define PR_BYTES_PER_SHORT 2
|
||||
#define PR_BYTES_PER_INT 4
|
||||
#define PR_BYTES_PER_INT64 8
|
||||
#define PR_BYTES_PER_LONG 4
|
||||
#define PR_BYTES_PER_FLOAT 4
|
||||
#define PR_BYTES_PER_WORD 8
|
||||
#define PR_BYTES_PER_DWORD 8
|
||||
#define PR_BYTES_PER_DOUBLE 8
|
||||
|
||||
#define PR_BITS_PER_BYTE 8
|
||||
#define PR_BITS_PER_SHORT 16
|
||||
#define PR_BITS_PER_INT 32
|
||||
#define PR_BITS_PER_INT64 64
|
||||
#define PR_BITS_PER_LONG 32
|
||||
#define PR_BITS_PER_FLOAT 32
|
||||
#define PR_BITS_PER_WORD 64
|
||||
#define PR_BITS_PER_DWORD 64
|
||||
#define PR_BITS_PER_DOUBLE 64
|
||||
|
||||
#define PR_BITS_PER_BYTE_LOG2 3
|
||||
#define PR_BITS_PER_SHORT_LOG2 4
|
||||
#define PR_BITS_PER_INT_LOG2 5
|
||||
#define PR_BITS_PER_INT64_LOG2 6
|
||||
#define PR_BITS_PER_LONG_LOG2 5
|
||||
#define PR_BITS_PER_FLOAT_LOG2 5
|
||||
#define PR_BITS_PER_WORD_LOG2 6
|
||||
#define PR_BITS_PER_DWORD_LOG2 6
|
||||
#define PR_BITS_PER_DOUBLE_LOG2 6
|
||||
|
||||
#define PR_ALIGN_OF_SHORT 2
|
||||
#define PR_ALIGN_OF_INT 4
|
||||
#define PR_ALIGN_OF_LONG 4
|
||||
#define PR_ALIGN_OF_INT64 8
|
||||
#define PR_ALIGN_OF_FLOAT 4
|
||||
#define PR_ALIGN_OF_WORD 8
|
||||
#define PR_ALIGN_OF_DWORD 8
|
||||
#define PR_ALIGN_OF_DOUBLE 8
|
||||
#define PR_ALIGN_OF_POINTER 8
|
||||
|
||||
#define PR_BYTES_PER_WORD_LOG2 3
|
||||
#define PR_BYTES_PER_DWORD_LOG2 3
|
||||
|
||||
#elif defined(_IA64_)
|
||||
|
||||
#define IS_LITTLE_ENDIAN 1
|
||||
#undef IS_BIG_ENDIAN
|
||||
#define IS_64
|
||||
|
||||
#define PR_BYTES_PER_BYTE 1
|
||||
#define PR_BYTES_PER_SHORT 2
|
||||
#define PR_BYTES_PER_INT 4
|
||||
#define PR_BYTES_PER_INT64 8
|
||||
#define PR_BYTES_PER_LONG 4
|
||||
#define PR_BYTES_PER_FLOAT 4
|
||||
#define PR_BYTES_PER_WORD 8
|
||||
#define PR_BYTES_PER_DWORD 8
|
||||
#define PR_BYTES_PER_DOUBLE 8
|
||||
|
||||
#define PR_BITS_PER_BYTE 8
|
||||
#define PR_BITS_PER_SHORT 16
|
||||
#define PR_BITS_PER_INT 32
|
||||
#define PR_BITS_PER_INT64 64
|
||||
#define PR_BITS_PER_LONG 32
|
||||
#define PR_BITS_PER_FLOAT 32
|
||||
#define PR_BITS_PER_WORD 64
|
||||
#define PR_BITS_PER_DWORD 64
|
||||
#define PR_BITS_PER_DOUBLE 64
|
||||
|
||||
#define PR_BITS_PER_BYTE_LOG2 3
|
||||
#define PR_BITS_PER_SHORT_LOG2 4
|
||||
#define PR_BITS_PER_INT_LOG2 5
|
||||
#define PR_BITS_PER_INT64_LOG2 6
|
||||
#define PR_BITS_PER_LONG_LOG2 5
|
||||
#define PR_BITS_PER_FLOAT_LOG2 5
|
||||
#define PR_BITS_PER_WORD_LOG2 6
|
||||
#define PR_BITS_PER_DWORD_LOG2 6
|
||||
#define PR_BITS_PER_DOUBLE_LOG2 6
|
||||
|
||||
#define PR_ALIGN_OF_SHORT 2
|
||||
#define PR_ALIGN_OF_INT 4
|
||||
#define PR_ALIGN_OF_LONG 4
|
||||
#define PR_ALIGN_OF_INT64 8
|
||||
#define PR_ALIGN_OF_FLOAT 4
|
||||
#define PR_ALIGN_OF_WORD 8
|
||||
#define PR_ALIGN_OF_DWORD 8
|
||||
#define PR_ALIGN_OF_DOUBLE 8
|
||||
#define PR_ALIGN_OF_POINTER 8
|
||||
|
||||
#define PR_BYTES_PER_WORD_LOG2 3
|
||||
#define PR_BYTES_PER_DWORD_LOG2 3
|
||||
|
||||
#else /* defined(_M_IX86) || defined(_X86_) */
|
||||
|
||||
#error unknown processor architecture
|
||||
|
||||
#endif /* defined(_M_IX86) || defined(_X86_) */
|
||||
|
||||
#ifndef HAVE_LONG_LONG
|
||||
#define HAVE_LONG_LONG
|
||||
#endif
|
||||
|
||||
#ifndef NO_NSPR_10_SUPPORT
|
||||
|
||||
#define BYTES_PER_BYTE PR_BYTES_PER_BYTE
|
||||
#define BYTES_PER_SHORT PR_BYTES_PER_SHORT
|
||||
#define BYTES_PER_INT PR_BYTES_PER_INT
|
||||
#define BYTES_PER_INT64 PR_BYTES_PER_INT64
|
||||
#define BYTES_PER_LONG PR_BYTES_PER_LONG
|
||||
#define BYTES_PER_FLOAT PR_BYTES_PER_FLOAT
|
||||
#define BYTES_PER_DOUBLE PR_BYTES_PER_DOUBLE
|
||||
#define BYTES_PER_WORD PR_BYTES_PER_WORD
|
||||
#define BYTES_PER_DWORD PR_BYTES_PER_DWORD
|
||||
|
||||
#define BITS_PER_BYTE PR_BITS_PER_BYTE
|
||||
#define BITS_PER_SHORT PR_BITS_PER_SHORT
|
||||
#define BITS_PER_INT PR_BITS_PER_INT
|
||||
#define BITS_PER_INT64 PR_BITS_PER_INT64
|
||||
#define BITS_PER_LONG PR_BITS_PER_LONG
|
||||
#define BITS_PER_FLOAT PR_BITS_PER_FLOAT
|
||||
#define BITS_PER_DOUBLE PR_BITS_PER_DOUBLE
|
||||
#define BITS_PER_WORD PR_BITS_PER_WORD
|
||||
|
||||
#define BITS_PER_BYTE_LOG2 PR_BITS_PER_BYTE_LOG2
|
||||
#define BITS_PER_SHORT_LOG2 PR_BITS_PER_SHORT_LOG2
|
||||
#define BITS_PER_INT_LOG2 PR_BITS_PER_INT_LOG2
|
||||
#define BITS_PER_INT64_LOG2 PR_BITS_PER_INT64_LOG2
|
||||
#define BITS_PER_LONG_LOG2 PR_BITS_PER_LONG_LOG2
|
||||
#define BITS_PER_FLOAT_LOG2 PR_BITS_PER_FLOAT_LOG2
|
||||
#define BITS_PER_DOUBLE_LOG2 PR_BITS_PER_DOUBLE_LOG2
|
||||
#define BITS_PER_WORD_LOG2 PR_BITS_PER_WORD_LOG2
|
||||
|
||||
#define ALIGN_OF_SHORT PR_ALIGN_OF_SHORT
|
||||
#define ALIGN_OF_INT PR_ALIGN_OF_INT
|
||||
#define ALIGN_OF_LONG PR_ALIGN_OF_LONG
|
||||
#define ALIGN_OF_INT64 PR_ALIGN_OF_INT64
|
||||
#define ALIGN_OF_FLOAT PR_ALIGN_OF_FLOAT
|
||||
#define ALIGN_OF_DOUBLE PR_ALIGN_OF_DOUBLE
|
||||
#define ALIGN_OF_POINTER PR_ALIGN_OF_POINTER
|
||||
#define ALIGN_OF_WORD PR_ALIGN_OF_WORD
|
||||
|
||||
#define BYTES_PER_WORD_LOG2 PR_BYTES_PER_WORD_LOG2
|
||||
#define BYTES_PER_DWORD_LOG2 PR_BYTES_PER_DWORD_LOG2
|
||||
#define WORDS_PER_DWORD_LOG2 PR_WORDS_PER_DWORD_LOG2
|
||||
|
||||
#endif /* NO_NSPR_10_SUPPORT */
|
||||
|
||||
#endif /* nspr_cpucfg___ */
|
||||
569
Templates/Full/web/source/npplugin/windows/prtypes.h
Normal file
569
Templates/Full/web/source/npplugin/windows/prtypes.h
Normal file
|
|
@ -0,0 +1,569 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is the Netscape Portable Runtime (NSPR).
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998-2000
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/*
|
||||
** File: prtypes.h
|
||||
** Description: Definitions of NSPR's basic types
|
||||
**
|
||||
** Prototypes and macros used to make up for deficiencies that we have found
|
||||
** in ANSI environments.
|
||||
**
|
||||
** Since we do not wrap <stdlib.h> and all the other standard headers, authors
|
||||
** of portable code will not know in general that they need these definitions.
|
||||
** Instead of requiring these authors to find the dependent uses in their code
|
||||
** and take the following steps only in those C files, we take steps once here
|
||||
** for all C files.
|
||||
**/
|
||||
|
||||
#ifndef prtypes_h___
|
||||
#define prtypes_h___
|
||||
|
||||
#ifdef MDCPUCFG
|
||||
#include MDCPUCFG
|
||||
#else
|
||||
#include "prcpucfg.h"
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
/***********************************************************************
|
||||
** MACROS: PR_EXTERN
|
||||
** PR_IMPLEMENT
|
||||
** DESCRIPTION:
|
||||
** These are only for externally visible routines and globals. For
|
||||
** internal routines, just use "extern" for type checking and that
|
||||
** will not export internal cross-file or forward-declared symbols.
|
||||
** Define a macro for declaring procedures return types. We use this to
|
||||
** deal with windoze specific type hackery for DLL definitions. Use
|
||||
** PR_EXTERN when the prototype for the method is declared. Use
|
||||
** PR_IMPLEMENT for the implementation of the method.
|
||||
**
|
||||
** Example:
|
||||
** in dowhim.h
|
||||
** PR_EXTERN( void ) DoWhatIMean( void );
|
||||
** in dowhim.c
|
||||
** PR_IMPLEMENT( void ) DoWhatIMean( void ) { return; }
|
||||
**
|
||||
**
|
||||
***********************************************************************/
|
||||
#if defined(WIN32)
|
||||
|
||||
#define PR_EXPORT(__type) extern __declspec(dllexport) __type
|
||||
#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type
|
||||
#define PR_IMPORT(__type) __declspec(dllimport) __type
|
||||
#define PR_IMPORT_DATA(__type) __declspec(dllimport) __type
|
||||
|
||||
#define PR_EXTERN(__type) extern __declspec(dllexport) __type
|
||||
#define PR_IMPLEMENT(__type) __declspec(dllexport) __type
|
||||
#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type
|
||||
#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type
|
||||
|
||||
#define PR_CALLBACK
|
||||
#define PR_CALLBACK_DECL
|
||||
#define PR_STATIC_CALLBACK(__x) static __x
|
||||
|
||||
#elif defined(XP_BEOS)
|
||||
|
||||
#define PR_EXPORT(__type) extern __declspec(dllexport) __type
|
||||
#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type
|
||||
#define PR_IMPORT(__type) extern __declspec(dllexport) __type
|
||||
#define PR_IMPORT_DATA(__type) extern __declspec(dllexport) __type
|
||||
|
||||
#define PR_EXTERN(__type) extern __declspec(dllexport) __type
|
||||
#define PR_IMPLEMENT(__type) __declspec(dllexport) __type
|
||||
#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type
|
||||
#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type
|
||||
|
||||
#define PR_CALLBACK
|
||||
#define PR_CALLBACK_DECL
|
||||
#define PR_STATIC_CALLBACK(__x) static __x
|
||||
|
||||
#elif defined(WIN16)
|
||||
|
||||
#define PR_CALLBACK_DECL __cdecl
|
||||
|
||||
#if defined(_WINDLL)
|
||||
#define PR_EXPORT(__type) extern __type _cdecl _export _loadds
|
||||
#define PR_IMPORT(__type) extern __type _cdecl _export _loadds
|
||||
#define PR_EXPORT_DATA(__type) extern __type _export
|
||||
#define PR_IMPORT_DATA(__type) extern __type _export
|
||||
|
||||
#define PR_EXTERN(__type) extern __type _cdecl _export _loadds
|
||||
#define PR_IMPLEMENT(__type) __type _cdecl _export _loadds
|
||||
#define PR_EXTERN_DATA(__type) extern __type _export
|
||||
#define PR_IMPLEMENT_DATA(__type) __type _export
|
||||
|
||||
#define PR_CALLBACK __cdecl __loadds
|
||||
#define PR_STATIC_CALLBACK(__x) static __x PR_CALLBACK
|
||||
|
||||
#else /* this must be .EXE */
|
||||
#define PR_EXPORT(__type) extern __type _cdecl _export
|
||||
#define PR_IMPORT(__type) extern __type _cdecl _export
|
||||
#define PR_EXPORT_DATA(__type) extern __type _export
|
||||
#define PR_IMPORT_DATA(__type) extern __type _export
|
||||
|
||||
#define PR_EXTERN(__type) extern __type _cdecl _export
|
||||
#define PR_IMPLEMENT(__type) __type _cdecl _export
|
||||
#define PR_EXTERN_DATA(__type) extern __type _export
|
||||
#define PR_IMPLEMENT_DATA(__type) __type _export
|
||||
|
||||
#define PR_CALLBACK __cdecl __loadds
|
||||
#define PR_STATIC_CALLBACK(__x) __x PR_CALLBACK
|
||||
#endif /* _WINDLL */
|
||||
|
||||
#elif defined(XP_MAC)
|
||||
|
||||
#define PR_EXPORT(__type) extern __declspec(export) __type
|
||||
#define PR_EXPORT_DATA(__type) extern __declspec(export) __type
|
||||
#define PR_IMPORT(__type) extern __declspec(export) __type
|
||||
#define PR_IMPORT_DATA(__type) extern __declspec(export) __type
|
||||
|
||||
#define PR_EXTERN(__type) extern __declspec(export) __type
|
||||
#define PR_IMPLEMENT(__type) __declspec(export) __type
|
||||
#define PR_EXTERN_DATA(__type) extern __declspec(export) __type
|
||||
#define PR_IMPLEMENT_DATA(__type) __declspec(export) __type
|
||||
|
||||
#define PR_CALLBACK
|
||||
#define PR_CALLBACK_DECL
|
||||
#define PR_STATIC_CALLBACK(__x) static __x
|
||||
|
||||
#elif defined(XP_OS2) && defined(__declspec)
|
||||
|
||||
#define PR_EXPORT(__type) extern __declspec(dllexport) __type
|
||||
#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type
|
||||
#define PR_IMPORT(__type) extern __declspec(dllimport) __type
|
||||
#define PR_IMPORT_DATA(__type) extern __declspec(dllimport) __type
|
||||
|
||||
#define PR_EXTERN(__type) extern __declspec(dllexport) __type
|
||||
#define PR_IMPLEMENT(__type) __declspec(dllexport) __type
|
||||
#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type
|
||||
#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type
|
||||
|
||||
#define PR_CALLBACK
|
||||
#define PR_CALLBACK_DECL
|
||||
#define PR_STATIC_CALLBACK(__x) static __x
|
||||
|
||||
#elif defined(XP_OS2_VACPP)
|
||||
|
||||
#define PR_EXPORT(__type) extern __type
|
||||
#define PR_EXPORT_DATA(__type) extern __type
|
||||
#define PR_IMPORT(__type) extern __type
|
||||
#define PR_IMPORT_DATA(__type) extern __type
|
||||
|
||||
#define PR_EXTERN(__type) extern __type
|
||||
#define PR_IMPLEMENT(__type) __type
|
||||
#define PR_EXTERN_DATA(__type) extern __type
|
||||
#define PR_IMPLEMENT_DATA(__type) __type
|
||||
#define PR_CALLBACK _Optlink
|
||||
#define PR_CALLBACK_DECL
|
||||
#define PR_STATIC_CALLBACK(__x) static __x PR_CALLBACK
|
||||
|
||||
#else /* Unix */
|
||||
|
||||
/* GCC 3.3 and later support the visibility attribute. */
|
||||
#if (__GNUC__ >= 4) || \
|
||||
(__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
|
||||
#define PR_VISIBILITY_DEFAULT __attribute__((visibility("default")))
|
||||
#else
|
||||
#define PR_VISIBILITY_DEFAULT
|
||||
#endif
|
||||
|
||||
#define PR_EXPORT(__type) extern PR_VISIBILITY_DEFAULT __type
|
||||
#define PR_EXPORT_DATA(__type) extern PR_VISIBILITY_DEFAULT __type
|
||||
#define PR_IMPORT(__type) extern PR_VISIBILITY_DEFAULT __type
|
||||
#define PR_IMPORT_DATA(__type) extern PR_VISIBILITY_DEFAULT __type
|
||||
|
||||
#define PR_EXTERN(__type) extern PR_VISIBILITY_DEFAULT __type
|
||||
#define PR_IMPLEMENT(__type) PR_VISIBILITY_DEFAULT __type
|
||||
#define PR_EXTERN_DATA(__type) extern PR_VISIBILITY_DEFAULT __type
|
||||
#define PR_IMPLEMENT_DATA(__type) PR_VISIBILITY_DEFAULT __type
|
||||
#define PR_CALLBACK
|
||||
#define PR_CALLBACK_DECL
|
||||
#define PR_STATIC_CALLBACK(__x) static __x
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(_NSPR_BUILD_)
|
||||
#define NSPR_API(__type) PR_EXPORT(__type)
|
||||
#define NSPR_DATA_API(__type) PR_EXPORT_DATA(__type)
|
||||
#else
|
||||
#define NSPR_API(__type) PR_IMPORT(__type)
|
||||
#define NSPR_DATA_API(__type) PR_IMPORT_DATA(__type)
|
||||
#endif
|
||||
|
||||
/***********************************************************************
|
||||
** MACROS: PR_BEGIN_MACRO
|
||||
** PR_END_MACRO
|
||||
** DESCRIPTION:
|
||||
** Macro body brackets so that macros with compound statement definitions
|
||||
** behave syntactically more like functions when called.
|
||||
***********************************************************************/
|
||||
#define PR_BEGIN_MACRO do {
|
||||
#define PR_END_MACRO } while (0)
|
||||
|
||||
/***********************************************************************
|
||||
** MACROS: PR_BEGIN_EXTERN_C
|
||||
** PR_END_EXTERN_C
|
||||
** DESCRIPTION:
|
||||
** Macro shorthands for conditional C++ extern block delimiters.
|
||||
***********************************************************************/
|
||||
#ifdef __cplusplus
|
||||
#define PR_BEGIN_EXTERN_C extern "C" {
|
||||
#define PR_END_EXTERN_C }
|
||||
#else
|
||||
#define PR_BEGIN_EXTERN_C
|
||||
#define PR_END_EXTERN_C
|
||||
#endif
|
||||
|
||||
/***********************************************************************
|
||||
** MACROS: PR_BIT
|
||||
** PR_BITMASK
|
||||
** DESCRIPTION:
|
||||
** Bit masking macros. XXX n must be <= 31 to be portable
|
||||
***********************************************************************/
|
||||
#define PR_BIT(n) ((PRUint32)1 << (n))
|
||||
#define PR_BITMASK(n) (PR_BIT(n) - 1)
|
||||
|
||||
/***********************************************************************
|
||||
** MACROS: PR_ROUNDUP
|
||||
** PR_MIN
|
||||
** PR_MAX
|
||||
** PR_ABS
|
||||
** DESCRIPTION:
|
||||
** Commonly used macros for operations on compatible types.
|
||||
***********************************************************************/
|
||||
#define PR_ROUNDUP(x,y) ((((x)+((y)-1))/(y))*(y))
|
||||
#define PR_MIN(x,y) ((x)<(y)?(x):(y))
|
||||
#define PR_MAX(x,y) ((x)>(y)?(x):(y))
|
||||
#define PR_ABS(x) ((x)<0?-(x):(x))
|
||||
|
||||
PR_BEGIN_EXTERN_C
|
||||
|
||||
/************************************************************************
|
||||
** TYPES: PRUint8
|
||||
** PRInt8
|
||||
** DESCRIPTION:
|
||||
** The int8 types are known to be 8 bits each. There is no type that
|
||||
** is equivalent to a plain "char".
|
||||
************************************************************************/
|
||||
#if PR_BYTES_PER_BYTE == 1
|
||||
typedef unsigned char PRUint8;
|
||||
/*
|
||||
** Some cfront-based C++ compilers do not like 'signed char' and
|
||||
** issue the warning message:
|
||||
** warning: "signed" not implemented (ignored)
|
||||
** For these compilers, we have to define PRInt8 as plain 'char'.
|
||||
** Make sure that plain 'char' is indeed signed under these compilers.
|
||||
*/
|
||||
#if (defined(HPUX) && defined(__cplusplus) \
|
||||
&& !defined(__GNUC__) && __cplusplus < 199707L) \
|
||||
|| (defined(SCO) && defined(__cplusplus) \
|
||||
&& !defined(__GNUC__) && __cplusplus == 1L)
|
||||
typedef char PRInt8;
|
||||
#else
|
||||
typedef signed char PRInt8;
|
||||
#endif
|
||||
#else
|
||||
#error No suitable type for PRInt8/PRUint8
|
||||
#endif
|
||||
|
||||
/************************************************************************
|
||||
* MACROS: PR_INT8_MAX
|
||||
* PR_INT8_MIN
|
||||
* PR_UINT8_MAX
|
||||
* DESCRIPTION:
|
||||
* The maximum and minimum values of a PRInt8 or PRUint8.
|
||||
************************************************************************/
|
||||
|
||||
#define PR_INT8_MAX 127
|
||||
#define PR_INT8_MIN (-128)
|
||||
#define PR_UINT8_MAX 255U
|
||||
|
||||
/************************************************************************
|
||||
** TYPES: PRUint16
|
||||
** PRInt16
|
||||
** DESCRIPTION:
|
||||
** The int16 types are known to be 16 bits each.
|
||||
************************************************************************/
|
||||
#if PR_BYTES_PER_SHORT == 2
|
||||
typedef unsigned short PRUint16;
|
||||
typedef short PRInt16;
|
||||
#else
|
||||
#error No suitable type for PRInt16/PRUint16
|
||||
#endif
|
||||
|
||||
/************************************************************************
|
||||
* MACROS: PR_INT16_MAX
|
||||
* PR_INT16_MIN
|
||||
* PR_UINT16_MAX
|
||||
* DESCRIPTION:
|
||||
* The maximum and minimum values of a PRInt16 or PRUint16.
|
||||
************************************************************************/
|
||||
|
||||
#define PR_INT16_MAX 32767
|
||||
#define PR_INT16_MIN (-32768)
|
||||
#define PR_UINT16_MAX 65535U
|
||||
|
||||
/************************************************************************
|
||||
** TYPES: PRUint32
|
||||
** PRInt32
|
||||
** DESCRIPTION:
|
||||
** The int32 types are known to be 32 bits each.
|
||||
************************************************************************/
|
||||
#if PR_BYTES_PER_INT == 4
|
||||
typedef unsigned int PRUint32;
|
||||
typedef int PRInt32;
|
||||
#define PR_INT32(x) x
|
||||
#define PR_UINT32(x) x ## U
|
||||
#elif PR_BYTES_PER_LONG == 4
|
||||
typedef unsigned long PRUint32;
|
||||
typedef long PRInt32;
|
||||
#define PR_INT32(x) x ## L
|
||||
#define PR_UINT32(x) x ## UL
|
||||
#else
|
||||
#error No suitable type for PRInt32/PRUint32
|
||||
#endif
|
||||
|
||||
/************************************************************************
|
||||
* MACROS: PR_INT32_MAX
|
||||
* PR_INT32_MIN
|
||||
* PR_UINT32_MAX
|
||||
* DESCRIPTION:
|
||||
* The maximum and minimum values of a PRInt32 or PRUint32.
|
||||
************************************************************************/
|
||||
|
||||
#define PR_INT32_MAX PR_INT32(2147483647)
|
||||
#define PR_INT32_MIN (-PR_INT32_MAX - 1)
|
||||
#define PR_UINT32_MAX PR_UINT32(4294967295)
|
||||
|
||||
/************************************************************************
|
||||
** TYPES: PRUint64
|
||||
** PRInt64
|
||||
** DESCRIPTION:
|
||||
** The int64 types are known to be 64 bits each. Care must be used when
|
||||
** declaring variables of type PRUint64 or PRInt64. Different hardware
|
||||
** architectures and even different compilers have varying support for
|
||||
** 64 bit values. The only guaranteed portability requires the use of
|
||||
** the LL_ macros (see prlong.h).
|
||||
************************************************************************/
|
||||
#ifdef HAVE_LONG_LONG
|
||||
#if PR_BYTES_PER_LONG == 8
|
||||
typedef long PRInt64;
|
||||
typedef unsigned long PRUint64;
|
||||
#elif defined(WIN16)
|
||||
typedef __int64 PRInt64;
|
||||
typedef unsigned __int64 PRUint64;
|
||||
#elif defined(WIN32) && !defined(__GNUC__)
|
||||
typedef __int64 PRInt64;
|
||||
typedef unsigned __int64 PRUint64;
|
||||
#else
|
||||
typedef long long PRInt64;
|
||||
typedef unsigned long long PRUint64;
|
||||
#endif /* PR_BYTES_PER_LONG == 8 */
|
||||
#else /* !HAVE_LONG_LONG */
|
||||
typedef struct {
|
||||
#ifdef IS_LITTLE_ENDIAN
|
||||
PRUint32 lo, hi;
|
||||
#else
|
||||
PRUint32 hi, lo;
|
||||
#endif
|
||||
} PRInt64;
|
||||
typedef PRInt64 PRUint64;
|
||||
#endif /* !HAVE_LONG_LONG */
|
||||
|
||||
/************************************************************************
|
||||
** TYPES: PRUintn
|
||||
** PRIntn
|
||||
** DESCRIPTION:
|
||||
** The PRIntn types are most appropriate for automatic variables. They are
|
||||
** guaranteed to be at least 16 bits, though various architectures may
|
||||
** define them to be wider (e.g., 32 or even 64 bits). These types are
|
||||
** never valid for fields of a structure.
|
||||
************************************************************************/
|
||||
#if PR_BYTES_PER_INT >= 2
|
||||
typedef int PRIntn;
|
||||
typedef unsigned int PRUintn;
|
||||
#else
|
||||
#error 'sizeof(int)' not sufficient for platform use
|
||||
#endif
|
||||
|
||||
/************************************************************************
|
||||
** TYPES: PRFloat64
|
||||
** DESCRIPTION:
|
||||
** NSPR's floating point type is always 64 bits.
|
||||
************************************************************************/
|
||||
typedef double PRFloat64;
|
||||
|
||||
/************************************************************************
|
||||
** TYPES: PRSize
|
||||
** DESCRIPTION:
|
||||
** A type for representing the size of objects.
|
||||
************************************************************************/
|
||||
typedef size_t PRSize;
|
||||
|
||||
|
||||
/************************************************************************
|
||||
** TYPES: PROffset32, PROffset64
|
||||
** DESCRIPTION:
|
||||
** A type for representing byte offsets from some location.
|
||||
************************************************************************/
|
||||
typedef PRInt32 PROffset32;
|
||||
typedef PRInt64 PROffset64;
|
||||
|
||||
/************************************************************************
|
||||
** TYPES: PRPtrDiff
|
||||
** DESCRIPTION:
|
||||
** A type for pointer difference. Variables of this type are suitable
|
||||
** for storing a pointer or pointer subtraction.
|
||||
************************************************************************/
|
||||
typedef ptrdiff_t PRPtrdiff;
|
||||
|
||||
/************************************************************************
|
||||
** TYPES: PRUptrdiff
|
||||
** DESCRIPTION:
|
||||
** A type for pointer difference. Variables of this type are suitable
|
||||
** for storing a pointer or pointer sutraction.
|
||||
************************************************************************/
|
||||
#ifdef _WIN64
|
||||
typedef unsigned __int64 PRUptrdiff;
|
||||
#else
|
||||
typedef unsigned long PRUptrdiff;
|
||||
#endif
|
||||
|
||||
/************************************************************************
|
||||
** TYPES: PRBool
|
||||
** DESCRIPTION:
|
||||
** Use PRBool for variables and parameter types. Use PR_FALSE and PR_TRUE
|
||||
** for clarity of target type in assignments and actual arguments. Use
|
||||
** 'if (bool)', 'while (!bool)', '(bool) ? x : y' etc., to test booleans
|
||||
** just as you would C int-valued conditions.
|
||||
************************************************************************/
|
||||
typedef PRIntn PRBool;
|
||||
#define PR_TRUE 1
|
||||
#define PR_FALSE 0
|
||||
|
||||
/************************************************************************
|
||||
** TYPES: PRPackedBool
|
||||
** DESCRIPTION:
|
||||
** Use PRPackedBool within structs where bitfields are not desirable
|
||||
** but minimum and consistant overhead matters.
|
||||
************************************************************************/
|
||||
typedef PRUint8 PRPackedBool;
|
||||
|
||||
/*
|
||||
** Status code used by some routines that have a single point of failure or
|
||||
** special status return.
|
||||
*/
|
||||
typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus;
|
||||
|
||||
#ifndef __PRUNICHAR__
|
||||
#define __PRUNICHAR__
|
||||
#if defined(WIN32) || defined(XP_MAC)
|
||||
typedef wchar_t PRUnichar;
|
||||
#else
|
||||
typedef PRUint16 PRUnichar;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
** WARNING: The undocumented data types PRWord and PRUword are
|
||||
** only used in the garbage collection and arena code. Do not
|
||||
** use PRWord and PRUword in new code.
|
||||
**
|
||||
** A PRWord is an integer that is the same size as a void*.
|
||||
** It implements the notion of a "word" in the Java Virtual
|
||||
** Machine. (See Sec. 3.4 "Words", The Java Virtual Machine
|
||||
** Specification, Addison-Wesley, September 1996.
|
||||
** http://java.sun.com/docs/books/vmspec/index.html.)
|
||||
*/
|
||||
#ifdef _WIN64
|
||||
typedef __int64 PRWord;
|
||||
typedef unsigned __int64 PRUword;
|
||||
#else
|
||||
typedef long PRWord;
|
||||
typedef unsigned long PRUword;
|
||||
#endif
|
||||
|
||||
#if defined(NO_NSPR_10_SUPPORT)
|
||||
#else
|
||||
/********* ???????????????? FIX ME ??????????????????????????? *****/
|
||||
/********************** Some old definitions until pr=>ds transition is done ***/
|
||||
/********************** Also, we are still using NSPR 1.0. GC ******************/
|
||||
/*
|
||||
** Fundamental NSPR macros, used nearly everywhere.
|
||||
*/
|
||||
|
||||
#define PR_PUBLIC_API PR_IMPLEMENT
|
||||
|
||||
/*
|
||||
** Macro body brackets so that macros with compound statement definitions
|
||||
** behave syntactically more like functions when called.
|
||||
*/
|
||||
#define NSPR_BEGIN_MACRO do {
|
||||
#define NSPR_END_MACRO } while (0)
|
||||
|
||||
/*
|
||||
** Macro shorthands for conditional C++ extern block delimiters.
|
||||
*/
|
||||
#ifdef NSPR_BEGIN_EXTERN_C
|
||||
#undef NSPR_BEGIN_EXTERN_C
|
||||
#endif
|
||||
#ifdef NSPR_END_EXTERN_C
|
||||
#undef NSPR_END_EXTERN_C
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define NSPR_BEGIN_EXTERN_C extern "C" {
|
||||
#define NSPR_END_EXTERN_C }
|
||||
#else
|
||||
#define NSPR_BEGIN_EXTERN_C
|
||||
#define NSPR_END_EXTERN_C
|
||||
#endif
|
||||
|
||||
#ifdef XP_MAC
|
||||
#include "protypes.h"
|
||||
#else
|
||||
#include "obsolete/protypes.h"
|
||||
#endif
|
||||
|
||||
/********* ????????????? End Fix me ?????????????????????????????? *****/
|
||||
#endif /* NO_NSPR_10_SUPPORT */
|
||||
|
||||
PR_END_EXTERN_C
|
||||
|
||||
#endif /* prtypes_h___ */
|
||||
|
||||
15
Templates/Full/web/source/npplugin/windows/resource.h
Normal file
15
Templates/Full/web/source/npplugin/windows/resource.h
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by webgameplugin.rc
|
||||
//
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 101
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue