⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 npmac.cpp

📁 uclinux 下的vlc播放器源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://// npmac.cpp////::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::#include <string.h>#include <Processes.h>#include <Gestalt.h>#include <CodeFragments.h>#include <Timer.h>#include <Resources.h>#include <ToolUtils.h>#define XP_MACOSX 1#undef TARGET_RT_MAC_CFM//// A4Stuff.h contains the definition of EnterCodeResource and // EnterCodeResource, used for setting up the code resource’s// globals for 68K (analagous to the function SetCurrentA5// defined by the toolbox).//// A4Stuff does not exist as of CW 7. Define them to nothing.//#if (defined(__MWERKS__) && (__MWERKS__ >= 0x2400)) || defined(__GNUC__)    #define EnterCodeResource()    #define ExitCodeResource()#else    #include <A4Stuff.h>#endif#include "npapi.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 XP_UNIX#undef XP_UNIX#endif#include "npupp.h"#ifdef __MWERKS__#ifndef powerc#pragma pointers_in_A0#endif#endif// The following fix for static initializers (which fixes a previous// 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__//// Define PLUGIN_TRACE to 1 to have the wrapper functions emit// DebugStr messages whenever they are called.//#define PLUGIN_TRACE 0#if PLUGIN_TRACE#define PLUGINDEBUGSTR(msg)     ::DebugStr(msg)#else#define PLUGINDEBUGSTR(msg) {}#endif#if defined(XP_MACOSX) && defined(__POWERPC__) && (!defined(TARGET_RT_MAC_CFM))// glue for mapping outgoing Macho function pointers to TVectorsstruct TFPtoTVGlue {    void* glue[2];};static struct {    TFPtoTVGlue     newp;    TFPtoTVGlue     destroy;    TFPtoTVGlue     setwindow;    TFPtoTVGlue     newstream;    TFPtoTVGlue     destroystream;    TFPtoTVGlue     asfile;    TFPtoTVGlue     writeready;    TFPtoTVGlue     write;    TFPtoTVGlue     print;    TFPtoTVGlue     event;    TFPtoTVGlue     urlnotify;    TFPtoTVGlue     getvalue;    TFPtoTVGlue     setvalue;    TFPtoTVGlue     shutdown;} gPluginFuncsGlueTable;static inline void* SetupFPtoTVGlue(TFPtoTVGlue* functionGlue, void* fp){    functionGlue->glue[0] = fp;    functionGlue->glue[1] = 0;    return functionGlue;}#define PLUGIN_TO_HOST_GLUE(name, fp) (SetupFPtoTVGlue(&gPluginFuncsGlueTable.name, (void*)fp))// glue for mapping netscape TVectors to Macho function pointersstruct TTVtoFPGlue {    uint32 glue[6];};static struct {    TTVtoFPGlue             geturl;    TTVtoFPGlue             posturl;    TTVtoFPGlue             requestread;    TTVtoFPGlue             newstream;    TTVtoFPGlue             write;    TTVtoFPGlue             destroystream;    TTVtoFPGlue             status;    TTVtoFPGlue             uagent;    TTVtoFPGlue             memalloc;    TTVtoFPGlue             memfree;    TTVtoFPGlue             memflush;    TTVtoFPGlue             reloadplugins;    TTVtoFPGlue             getJavaEnv;    TTVtoFPGlue             getJavaPeer;    TTVtoFPGlue             geturlnotify;    TTVtoFPGlue             posturlnotify;    TTVtoFPGlue             getvalue;    TTVtoFPGlue             setvalue;    TTVtoFPGlue             invalidaterect;    TTVtoFPGlue             invalidateregion;    TTVtoFPGlue             forceredraw;    // NPRuntime support    TTVtoFPGlue             getstringidentifier;    TTVtoFPGlue             getstringidentifiers;    TTVtoFPGlue             getintidentifier;    TTVtoFPGlue             identifierisstring;    TTVtoFPGlue             utf8fromidentifier;    TTVtoFPGlue             intfromidentifier;    TTVtoFPGlue             createobject;    TTVtoFPGlue             retainobject;    TTVtoFPGlue             releaseobject;    TTVtoFPGlue             invoke;    TTVtoFPGlue             invokeDefault;    TTVtoFPGlue             evaluate;    TTVtoFPGlue             getproperty;    TTVtoFPGlue             setproperty;    TTVtoFPGlue             removeproperty;    TTVtoFPGlue             hasproperty;    TTVtoFPGlue             hasmethod;    TTVtoFPGlue             releasevariantvalue;    TTVtoFPGlue             setexception;} gNetscapeFuncsGlueTable;static void* SetupTVtoFPGlue(TTVtoFPGlue* functionGlue, void* tvp){    static const TTVtoFPGlue glueTemplate = { 0x3D800000, 0x618C0000, 0x800C0000, 0x804C0004, 0x7C0903A6, 0x4E800420 };    memcpy(functionGlue, &glueTemplate, sizeof(TTVtoFPGlue));    functionGlue->glue[0] |= ((UInt32)tvp >> 16);    functionGlue->glue[1] |= ((UInt32)tvp & 0xFFFF);    ::MakeDataExecutable(functionGlue, sizeof(TTVtoFPGlue));    return functionGlue;}#define HOST_TO_PLUGIN_GLUE(name, fp) (SetupTVtoFPGlue(&gNetscapeFuncsGlueTable.name, (void*)fp))#else#define PLUGIN_TO_HOST_GLUE(name, fp) (fp)#define HOST_TO_PLUGIN_GLUE(name, fp) (fp)#endif /* XP_MACOSX */#pragma mark -//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://// Globals////::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::#if !TARGET_API_MAC_CARBONQDGlobals*      gQDPtr;             // Pointer to Netscape’s QuickDraw globals#endifshort           gResFile;           // Refnum of the plugin’s resource fileNPNetscapeFuncs    gNetscapeFuncs;      // Function table for procs in Netscape called by plugin//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://// Wrapper functions for all calls from the plugin to Netscape.// These functions let the plugin developer just call the APIs// as documented and defined in npapi.h, without needing to know// about the function table and call macros in npupp.h.////::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::void NPN_Version(int* plugin_major, int* plugin_minor, int* netscape_major, int* netscape_minor){    *plugin_major = NP_VERSION_MAJOR;    *plugin_minor = NP_VERSION_MINOR;    *netscape_major = gNetscapeFuncs.version >> 8;      // Major version is in high byte    *netscape_minor = gNetscapeFuncs.version & 0xFF;    // Minor version is in low byte}NPError NPN_GetURLNotify(NPP instance, const char* url, const char* window, void* notifyData){    int navMinorVers = gNetscapeFuncs.version & 0xFF;    NPError err;    if( navMinorVers >= NPVERS_HAS_NOTIFICATION )    {        err = CallNPN_GetURLNotifyProc(gNetscapeFuncs.geturlnotify, instance, url, window, notifyData);    }    else    {        err = NPERR_INCOMPATIBLE_VERSION_ERROR;    }    return err;}NPError NPN_GetURL(NPP instance, const char* url, const char* window){    return CallNPN_GetURLProc(gNetscapeFuncs.geturl, instance, url, window);}NPError NPN_PostURLNotify(NPP instance, const char* url, const char* window, uint32 len, const char* buf, NPBool file, void* notifyData){    int navMinorVers = gNetscapeFuncs.version & 0xFF;    NPError err;    if( navMinorVers >= NPVERS_HAS_NOTIFICATION )    {        err = CallNPN_PostURLNotifyProc(gNetscapeFuncs.posturlnotify, instance, url,                                                         window, len, buf, file, notifyData);    }    else    {        err = NPERR_INCOMPATIBLE_VERSION_ERROR;    }    return err;}NPError NPN_PostURL(NPP instance, const char* url, const char* window, uint32 len, const char* buf, NPBool file){    return CallNPN_PostURLProc(gNetscapeFuncs.posturl, instance, url, window, len, buf, file);}NPError NPN_RequestRead(NPStream* stream, NPByteRange* rangeList){    return CallNPN_RequestReadProc(gNetscapeFuncs.requestread, stream, rangeList);}NPError NPN_NewStream(NPP instance, NPMIMEType type, const char* window, NPStream** stream){    int navMinorVers = gNetscapeFuncs.version & 0xFF;    NPError err;    if( navMinorVers >= NPVERS_HAS_STREAMOUTPUT )    {        err = CallNPN_NewStreamProc(gNetscapeFuncs.newstream, instance, type, window, stream);    }    else    {        err = NPERR_INCOMPATIBLE_VERSION_ERROR;    }    return err;}int32 NPN_Write(NPP instance, NPStream* stream, int32 len, void* buffer){    int navMinorVers = gNetscapeFuncs.version & 0xFF;    NPError err;    if( navMinorVers >= NPVERS_HAS_STREAMOUTPUT )    {        err = CallNPN_WriteProc(gNetscapeFuncs.write, instance, stream, len, buffer);    }    else    {        err = NPERR_INCOMPATIBLE_VERSION_ERROR;    }    return err;}NPError    NPN_DestroyStream(NPP instance, NPStream* stream, NPError reason){    int navMinorVers = gNetscapeFuncs.version & 0xFF;    NPError err;    if( navMinorVers >= NPVERS_HAS_STREAMOUTPUT )    {        err = CallNPN_DestroyStreamProc(gNetscapeFuncs.destroystream, instance, stream, reason);    }    else    {        err = NPERR_INCOMPATIBLE_VERSION_ERROR;    }    return err;}void NPN_Status(NPP instance, const char* message){    CallNPN_StatusProc(gNetscapeFuncs.status, instance, message);}const char* NPN_UserAgent(NPP instance){    return CallNPN_UserAgentProc(gNetscapeFuncs.uagent, instance);}void* NPN_MemAlloc(uint32 size){    return CallNPN_MemAllocProc(gNetscapeFuncs.memalloc, size);}void NPN_MemFree(void* ptr){    CallNPN_MemFreeProc(gNetscapeFuncs.memfree, ptr);}uint32 NPN_MemFlush(uint32 size){    return CallNPN_MemFlushProc(gNetscapeFuncs.memflush, size);}void NPN_ReloadPlugins(NPBool reloadPages){    CallNPN_ReloadPluginsProc(gNetscapeFuncs.reloadplugins, reloadPages);}#ifdef OJIJRIEnv* NPN_GetJavaEnv(void){    return CallNPN_GetJavaEnvProc( gNetscapeFuncs.getJavaEnv );}jobject  NPN_GetJavaPeer(NPP instance){    return CallNPN_GetJavaPeerProc( gNetscapeFuncs.getJavaPeer, instance );}#endifNPError NPN_GetValue(NPP instance, NPNVariable variable, void *value){    return CallNPN_GetValueProc( gNetscapeFuncs.getvalue, instance, variable, value);}NPError NPN_SetValue(NPP instance, NPPVariable variable, void *value){    return CallNPN_SetValueProc( gNetscapeFuncs.setvalue, instance, variable, value);}void NPN_InvalidateRect(NPP instance, NPRect *rect){    CallNPN_InvalidateRectProc( gNetscapeFuncs.invalidaterect, instance, rect);}void NPN_InvalidateRegion(NPP instance, NPRegion region){    CallNPN_InvalidateRegionProc( gNetscapeFuncs.invalidateregion, instance, region);}void NPN_ForceRedraw(NPP instance){    CallNPN_ForceRedrawProc( gNetscapeFuncs.forceredraw, instance);}NPIdentifier NPN_GetStringIdentifier(const NPUTF8 *name)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -