15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) consideration of your agreement to the following terms, and your use, installation,
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) modification or redistribution of this Apple software constitutes acceptance of these
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) terms.  If you do not agree with these terms, please do not use, install, modify or
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) redistribute this Apple software.
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) In consideration of your agreement to abide by the following terms, and subject to these
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) terms, Apple grants you a personal, non-exclusive license, under Apple�s copyrights in
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this original Apple software (the "Apple Software"), to use, reproduce, modify and
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) redistribute the Apple Software, with or without modifications, in source and/or binary
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) forms; provided that if you redistribute the Apple Software in its entirety and without
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) modifications, you must retain this notice and the following text and disclaimers in all
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) such redistributions of the Apple Software.  Neither the name, trademarks, service marks
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) the Apple Software without specific prior written permission from Apple. Except as expressly
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) stated in this notice, no other rights or licenses, express or implied, are granted by Apple
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) herein, including but not limited to any patent rights that may be infringed by your
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) derivative works or by other works in which the Apple Software may be incorporated.
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES,
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)          OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#import <WebKit/npapi.h>
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#import <WebKit/npfunctions.h>
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#import <WebKit/npruntime.h>
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPNetscapeFuncs *browser;
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc, char* argn[], char* argv[], NPSavedData* saved);
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPError NPP_Destroy(NPP instance, NPSavedData** save);
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPError NPP_SetWindow(NPP instance, NPWindow* window);
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16_t* stype);
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPError NPP_DestroyStream(NPP instance, NPStream* stream, NPReason reason);
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int32_t NPP_WriteReady(NPP instance, NPStream* stream);
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int32_t NPP_Write(NPP instance, NPStream* stream, int32_t offset, int32_t len, void* buffer);
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NPP_StreamAsFile(NPP instance, NPStream* stream, const char* fname);
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NPP_Print(NPP instance, NPPrint* platformPrint);
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int16_t NPP_HandleEvent(NPP instance, void* event);
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NPP_URLNotify(NPP instance, const char* URL, NPReason reason, void* notifyData);
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value);
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPError NPP_SetValue(NPP instance, NPNVariable variable, void *value);
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#pragma export on
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Mach-o entry points
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPError NP_Initialize(NPNetscapeFuncs *browserFuncs);
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPError NP_GetEntryPoints(NPPluginFuncs *pluginFuncs);
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NP_Shutdown(void);
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// For compatibility with CFM browsers.
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int main(NPNetscapeFuncs *browserFuncs, NPPluginFuncs *pluginFuncs, NPP_ShutdownProcPtr *shutdown);
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#pragma export off
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef void (* FunctionPointer) (void);
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef void (* TransitionVector) (void);
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static FunctionPointer functionPointerForTVector(TransitionVector);
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static TransitionVector tVectorForFunctionPointer(FunctionPointer);
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Mach-o entry points
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPError NP_Initialize(NPNetscapeFuncs* browserFuncs)
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser = browserFuncs;
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return NPERR_NO_ERROR;
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPError NP_GetEntryPoints(NPPluginFuncs* pluginFuncs)
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->version = 11;
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->size = sizeof(pluginFuncs);
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->newp = NPP_New;
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->destroy = NPP_Destroy;
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->setwindow = NPP_SetWindow;
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->newstream = NPP_NewStream;
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->destroystream = NPP_DestroyStream;
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->asfile = NPP_StreamAsFile;
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->writeready = NPP_WriteReady;
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->write = (NPP_WriteProcPtr)NPP_Write;
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->print = NPP_Print;
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->event = NPP_HandleEvent;
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->urlnotify = NPP_URLNotify;
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->getvalue = NPP_GetValue;
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->setvalue = NPP_SetValue;
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return NPERR_NO_ERROR;
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NP_Shutdown(void)
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// For compatibility with CFM browsers.
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int main(NPNetscapeFuncs *browserFuncs, NPPluginFuncs *pluginFuncs, NPP_ShutdownProcPtr *shutdown)
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser = malloc(sizeof(NPNetscapeFuncs));
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bzero(browser, sizeof(NPNetscapeFuncs));
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->size = browserFuncs->size;
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->version = browserFuncs->version;
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Since this is a mach-o plug-in and the browser is CFM because it is calling main, translate
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // our function points into TVectors so the browser can call them.
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->geturl = (NPN_GetURLProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->geturl);
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->posturl = (NPN_PostURLProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->posturl);
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->requestread = (NPN_RequestReadProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->requestread);
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->newstream = (NPN_NewStreamProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->newstream);
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->write = (NPN_WriteProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->write);
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->destroystream = (NPN_DestroyStreamProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->destroystream);
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->status = (NPN_StatusProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->status);
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->uagent = (NPN_UserAgentProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->uagent);
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->memalloc = (NPN_MemAllocProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->memalloc);
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->memfree = (NPN_MemFreeProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->memfree);
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->memflush = (NPN_MemFlushProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->memflush);
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->reloadplugins = (NPN_ReloadPluginsProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->reloadplugins);
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->geturlnotify = (NPN_GetURLNotifyProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->geturlnotify);
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->posturlnotify = (NPN_PostURLNotifyProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->posturlnotify);
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->getvalue = (NPN_GetValueProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->getvalue);
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->setvalue = (NPN_SetValueProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->setvalue);
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->invalidaterect = (NPN_InvalidateRectProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->invalidaterect);
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->invalidateregion = (NPN_InvalidateRegionProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->invalidateregion);
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->forceredraw = (NPN_ForceRedrawProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->forceredraw);
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->getJavaEnv = (NPN_GetJavaEnvProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->getJavaEnv);
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    browser->getJavaPeer = (NPN_GetJavaPeerProcPtr)functionPointerForTVector((TransitionVector)browserFuncs->getJavaPeer);
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->version = 11;
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->size = sizeof(pluginFuncs);
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->newp = (NPP_NewProcPtr)tVectorForFunctionPointer((FunctionPointer)NPP_New);
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->destroy = (NPP_DestroyProcPtr)tVectorForFunctionPointer((FunctionPointer)NPP_Destroy);
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->setwindow = (NPP_SetWindowProcPtr)tVectorForFunctionPointer((FunctionPointer)NPP_SetWindow);
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->newstream = (NPP_NewStreamProcPtr)tVectorForFunctionPointer((FunctionPointer)NPP_NewStream);
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->destroystream = (NPP_DestroyStreamProcPtr)tVectorForFunctionPointer((FunctionPointer)NPP_DestroyStream);
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->asfile = (NPP_StreamAsFileProcPtr)tVectorForFunctionPointer((FunctionPointer)NPP_StreamAsFile);
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->writeready = (NPP_WriteReadyProcPtr)tVectorForFunctionPointer((FunctionPointer)NPP_WriteReady);
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->write = (NPP_WriteProcPtr)tVectorForFunctionPointer((FunctionPointer)NPP_Write);
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->print = (NPP_PrintProcPtr)tVectorForFunctionPointer((FunctionPointer)NPP_Print);
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->event = (NPP_HandleEventProcPtr)tVectorForFunctionPointer((FunctionPointer)NPP_HandleEvent);
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->urlnotify = (NPP_URLNotifyProcPtr)tVectorForFunctionPointer((FunctionPointer)NPP_URLNotify);
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->getvalue = (NPP_GetValueProcPtr)tVectorForFunctionPointer((FunctionPointer)NPP_GetValue);
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pluginFuncs->setvalue = (NPP_SetValueProcPtr)tVectorForFunctionPointer((FunctionPointer)NPP_SetValue);
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *shutdown = (NPP_ShutdownProcPtr)tVectorForFunctionPointer((FunctionPointer)NP_Shutdown);
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return NPERR_NO_ERROR;
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc, char* argn[], char* argv[], NPSavedData* saved)
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Call window.alert("Success!")
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    NPError error;
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    NPObject *windowObject = NULL;
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    error = browser->getvalue(instance, NPNVWindowNPObject, &windowObject);
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (error == NPERR_NO_ERROR) {
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        NPVariant alertMessage;
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STRINGZ_TO_NPVARIANT("Success!", alertMessage);
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        NPVariant result;
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        browser->invoke(instance, windowObject, browser->getstringidentifier("alert"), &alertMessage, 1, &result);
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        browser->releaseobject(windowObject);
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return NPERR_NO_ERROR;
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPError NPP_Destroy(NPP instance, NPSavedData** save)
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return NPERR_NO_ERROR;
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPError NPP_SetWindow(NPP instance, NPWindow* window)
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return NPERR_NO_ERROR;
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16_t* stype)
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *stype = NP_ASFILEONLY;
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return NPERR_NO_ERROR;
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPError NPP_DestroyStream(NPP instance, NPStream* stream, NPReason reason)
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return NPERR_NO_ERROR;
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int32_t NPP_WriteReady(NPP instance, NPStream* stream)
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return 0;
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int32_t NPP_Write(NPP instance, NPStream* stream, int32_t offset, int32_t len, void* buffer)
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return 0;
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NPP_StreamAsFile(NPP instance, NPStream* stream, const char* fname)
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NPP_Print(NPP instance, NPPrint* platformPrint)
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int16_t NPP_HandleEvent(NPP instance, void* event)
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return 1;
2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NPP_URLNotify(NPP instance, const char* url, NPReason reason, void* notifyData)
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value)
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return NPERR_GENERIC_ERROR;
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPError NPP_SetValue(NPP instance, NPNVariable variable, void *value)
2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return NPERR_GENERIC_ERROR;
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// function pointer converters
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)FunctionPointer functionPointerForTVector(TransitionVector tvp)
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const uint32_t temp[6] = {0x3D800000, 0x618C0000, 0x800C0000, 0x804C0004, 0x7C0903A6, 0x4E800420};
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    uint32_t *newGlue = NULL;
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (tvp != NULL) {
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        newGlue = (uint32_t *)malloc(sizeof(temp));
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (newGlue != NULL) {
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            unsigned i;
2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            for (i = 0; i < 6; i++) newGlue[i] = temp[i];
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            newGlue[0] |= ((UInt32)tvp >> 16);
2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            newGlue[1] |= ((UInt32)tvp & 0xFFFF);
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            MakeDataExecutable(newGlue, sizeof(temp));
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return (FunctionPointer)newGlue;
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TransitionVector tVectorForFunctionPointer(FunctionPointer fp)
2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    FunctionPointer *newGlue = NULL;
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (fp != NULL) {
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        newGlue = (FunctionPointer *)malloc(2 * sizeof(FunctionPointer));
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (newGlue != NULL) {
2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            newGlue[0] = fp;
2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            newGlue[1] = NULL;
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return (TransitionVector)newGlue;
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
266