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

📄 npmac.cpp

📁 VLC Player Source Code
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#if !TARGET_API_MAC_CARBON    //    // Ask the system if CFM is available.    //    long response;    OSErr err = Gestalt(gestaltCFMAttr, &response);    Boolean hasCFM = BitTst(&response, 31-gestaltCFMPresent);    ProcessInfoRec infoRec;    if (hasCFM)    {        //        // GetProcessInformation takes a process serial number and        // will give us back the name and FSSpec of the application.        // See the Process Manager in IM.        //        Str63 name;        FSSpec myFSSpec;        infoRec.processInfoLength = sizeof(ProcessInfoRec);        infoRec.processName = name;        infoRec.processAppSpec = &myFSSpec;        ProcessSerialNumber PSN;        PSN.highLongOfPSN = 0;        PSN.lowLongOfPSN = kCurrentProcess;        result = GetProcessInformation(&PSN, &infoRec);        if (result != noErr)            PLUGINDEBUGSTR("\pFailed in GetProcessInformation");    }    else        //        // If no CFM installed, assume it must be a 68K app.        //        result = -1;    CFragConnectionID connID;    if (result == noErr)    {        //        // Now that we know the app name and FSSpec, we can call GetDiskFragment        // to get a connID to use in a subsequent call to FindSymbol (it will also        // return the address of “main” in app, which we ignore).  If GetDiskFragment        // returns an error, we assume the app must be 68K.        //        Ptr mainAddr;        Str255 errName;        result =  GetDiskFragment(infoRec.processAppSpec, 0L, 0L, infoRec.processName,                                  kLoadCFrag, &connID, (Ptr*)&mainAddr, errName);    }    if (result == noErr)    {        //        // The app is a PPC code fragment, so call FindSymbol        // to get the exported “qd” symbol so we can access its        // QuickDraw globals.        //        CFragSymbolClass symClass;        result = FindSymbol(connID, "\pqd", (Ptr*)&gQDPtr, &symClass);        if (result != noErr) {  // this fails if we are in NS 6            gQDPtr = &qd;       // so we default to the standard QD globals        }    }    else    {        //        // The app is 68K, so use its A5 to compute the address        // of its QuickDraw globals.        //        gQDPtr = (QDGlobals*)(*((long*)SetCurrentA5()) - (sizeof(QDGlobals) - sizeof(GrafPtr)));    }#endif}#ifdef __GNUC__// gcc requires that main have an 'int' return typeint main(NPNetscapeFuncs* nsTable, NPPluginFuncs* pluginFuncs, NPP_ShutdownUPP* unloadUpp);#elseNPError main(NPNetscapeFuncs* nsTable, NPPluginFuncs* pluginFuncs, NPP_ShutdownUPP* unloadUpp);#endif#if !TARGET_API_MAC_CARBON#pragma export on#if TARGET_RT_MAC_CFMRoutineDescriptor mainRD = BUILD_ROUTINE_DESCRIPTOR(uppNPP_MainEntryProcInfo, main);#endif#pragma export off#endif /* !TARGET_API_MAC_CARBON */#ifdef __GNUC__DEFINE_API_C(int) main(NPNetscapeFuncs* nsTable, NPPluginFuncs* pluginFuncs, NPP_ShutdownUPP* unloadUpp)#elseDEFINE_API_C(NPError) main(NPNetscapeFuncs* nsTable, NPPluginFuncs* pluginFuncs, NPP_ShutdownUPP* unloadUpp)#endif{    EnterCodeResource();    PLUGINDEBUGSTR("\pmain");#ifdef __MWERKS__    __InitCode__();#endif    NPError err = NPERR_NO_ERROR;    //    // Ensure that everything Netscape passed us is valid!    //    if ((nsTable == NULL) || (pluginFuncs == NULL) || (unloadUpp == NULL))        err = NPERR_INVALID_FUNCTABLE_ERROR;    //    // Check the “major” version passed in Netscape’s function table.    // We won’t load if the major version is newer than what we expect.    // Also check that the function tables passed in are big enough for    // all the functions we need (they could be bigger, if Netscape added    // new APIs, but that’s OK with us -- we’ll just ignore them).    //    if (err == NPERR_NO_ERROR)    {        if ((nsTable->version >> 8) > NP_VERSION_MAJOR)     // Major version is in high byte            err = NPERR_INCOMPATIBLE_VERSION_ERROR;    }    if (err == NPERR_NO_ERROR)    {        //        // Copy all the fields of Netscape’s function table into our        // copy so we can call back into Netscape later.  Note that        // we need to copy the fields one by one, rather than assigning        // the whole structure, because the Netscape function table        // could actually be bigger than what we expect.        //        int navMinorVers = nsTable->version & 0xFF;        gNetscapeFuncs.version          = nsTable->version;        gNetscapeFuncs.size             = nsTable->size;        gNetscapeFuncs.posturl          = (NPN_PostURLUPP)HOST_TO_PLUGIN_GLUE(posturl, nsTable->posturl);        gNetscapeFuncs.geturl           = (NPN_GetURLUPP)HOST_TO_PLUGIN_GLUE(geturl, nsTable->geturl);        gNetscapeFuncs.requestread      = (NPN_RequestReadUPP)HOST_TO_PLUGIN_GLUE(requestread, nsTable->requestread);        gNetscapeFuncs.newstream        = (NPN_NewStreamUPP)HOST_TO_PLUGIN_GLUE(newstream, nsTable->newstream);        gNetscapeFuncs.write            = (NPN_WriteUPP)HOST_TO_PLUGIN_GLUE(write, nsTable->write);        gNetscapeFuncs.destroystream    = (NPN_DestroyStreamUPP)HOST_TO_PLUGIN_GLUE(destroystream, nsTable->destroystream);        gNetscapeFuncs.status           = (NPN_StatusUPP)HOST_TO_PLUGIN_GLUE(status, nsTable->status);        gNetscapeFuncs.uagent           = (NPN_UserAgentUPP)HOST_TO_PLUGIN_GLUE(uagent, nsTable->uagent);        gNetscapeFuncs.memalloc         = (NPN_MemAllocUPP)HOST_TO_PLUGIN_GLUE(memalloc, nsTable->memalloc);        gNetscapeFuncs.memfree          = (NPN_MemFreeUPP)HOST_TO_PLUGIN_GLUE(memfree, nsTable->memfree);        gNetscapeFuncs.memflush         = (NPN_MemFlushUPP)HOST_TO_PLUGIN_GLUE(memflush, nsTable->memflush);        gNetscapeFuncs.reloadplugins    = (NPN_ReloadPluginsUPP)HOST_TO_PLUGIN_GLUE(reloadplugins, nsTable->reloadplugins);        if( navMinorVers >= NPVERS_HAS_LIVECONNECT )        {            gNetscapeFuncs.getJavaEnv   = (NPN_GetJavaEnvUPP)HOST_TO_PLUGIN_GLUE(getJavaEnv, nsTable->getJavaEnv);            gNetscapeFuncs.getJavaPeer  = (NPN_GetJavaPeerUPP)HOST_TO_PLUGIN_GLUE(getJavaPeer, nsTable->getJavaPeer);        }        if( navMinorVers >= NPVERS_HAS_NOTIFICATION )        {            gNetscapeFuncs.geturlnotify = (NPN_GetURLNotifyUPP)HOST_TO_PLUGIN_GLUE(geturlnotify, nsTable->geturlnotify);            gNetscapeFuncs.posturlnotify    = (NPN_PostURLNotifyUPP)HOST_TO_PLUGIN_GLUE(posturlnotify, nsTable->posturlnotify);        }        gNetscapeFuncs.getvalue         = (NPN_GetValueUPP)HOST_TO_PLUGIN_GLUE(getvalue, nsTable->getvalue);        gNetscapeFuncs.setvalue         = (NPN_SetValueUPP)HOST_TO_PLUGIN_GLUE(setvalue, nsTable->setvalue);        gNetscapeFuncs.invalidaterect   = (NPN_InvalidateRectUPP)HOST_TO_PLUGIN_GLUE(invalidaterect, nsTable->invalidaterect);        gNetscapeFuncs.invalidateregion = (NPN_InvalidateRegionUPP)HOST_TO_PLUGIN_GLUE(invalidateregion, nsTable->invalidateregion);        gNetscapeFuncs.forceredraw      = (NPN_ForceRedrawUPP)HOST_TO_PLUGIN_GLUE(forceredraw, nsTable->forceredraw);        if( navMinorVers >= 14 )        {            // NPRuntime support            gNetscapeFuncs.getstringidentifier  = (NPN_GetStringIdentifierUPP)HOST_TO_PLUGIN_GLUE(getstringidentifier, nsTable->getstringidentifier);            gNetscapeFuncs.getstringidentifiers = (NPN_GetStringIdentifiersUPP)HOST_TO_PLUGIN_GLUE(getstringidentifiers, nsTable->getstringidentifiers);            gNetscapeFuncs.getintidentifier     = (NPN_GetIntIdentifierUPP)HOST_TO_PLUGIN_GLUE(getintidentifier, nsTable->getintidentifier);            gNetscapeFuncs.identifierisstring   = (NPN_IdentifierIsStringUPP)HOST_TO_PLUGIN_GLUE(identifierisstring, nsTable->identifierisstring);            gNetscapeFuncs.utf8fromidentifier   = (NPN_UTF8FromIdentifierUPP)HOST_TO_PLUGIN_GLUE(utf8fromidentifier, nsTable->utf8fromidentifier);            gNetscapeFuncs.intfromidentifier    = (NPN_IntFromIdentifierUPP)HOST_TO_PLUGIN_GLUE(intfromidentifier, nsTable->intfromidentifier);            gNetscapeFuncs.createobject         = (NPN_CreateObjectUPP)HOST_TO_PLUGIN_GLUE(createobject, nsTable->createobject);            gNetscapeFuncs.retainobject         = (NPN_RetainObjectUPP)HOST_TO_PLUGIN_GLUE(retainobject, nsTable->retainobject);            gNetscapeFuncs.releaseobject        = (NPN_ReleaseObjectUPP)HOST_TO_PLUGIN_GLUE(releaseobject, nsTable->releaseobject);            gNetscapeFuncs.invoke               = (NPN_InvokeUPP)HOST_TO_PLUGIN_GLUE(invoke, nsTable->invoke);            gNetscapeFuncs.invokeDefault        = (NPN_InvokeDefaultUPP)HOST_TO_PLUGIN_GLUE(invokeDefault, nsTable->invokeDefault);            gNetscapeFuncs.evaluate             = (NPN_EvaluateUPP)HOST_TO_PLUGIN_GLUE(evaluate, nsTable->evaluate);            gNetscapeFuncs.getproperty          = (NPN_GetPropertyUPP)HOST_TO_PLUGIN_GLUE(getproperty, nsTable->getproperty);            gNetscapeFuncs.setproperty          = (NPN_SetPropertyUPP)HOST_TO_PLUGIN_GLUE(setproperty, nsTable->setproperty);            gNetscapeFuncs.removeproperty       = (NPN_RemovePropertyUPP)HOST_TO_PLUGIN_GLUE(removeproperty, nsTable->removeproperty);            gNetscapeFuncs.hasproperty          = (NPN_HasPropertyUPP)HOST_TO_PLUGIN_GLUE(hasproperty, nsTable->hasproperty);            gNetscapeFuncs.hasmethod            = (NPN_HasMethodUPP)HOST_TO_PLUGIN_GLUE(hasmethod, nsTable->hasmethod);            gNetscapeFuncs.releasevariantvalue  = (NPN_ReleaseVariantValueUPP)HOST_TO_PLUGIN_GLUE(releasevariantvalue, nsTable->releasevariantvalue);            gNetscapeFuncs.setexception         = (NPN_SetExceptionUPP)HOST_TO_PLUGIN_GLUE(setexception, nsTable->setexception);        }        //        // Set up the plugin function table that Netscape will use to        // call us.  Netscape needs to know about our version and size        // and have a UniversalProcPointer for every function we implement.        //        pluginFuncs->version        = (NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR;        pluginFuncs->size           = sizeof(NPPluginFuncs);        pluginFuncs->newp           = NewNPP_NewProc(PLUGIN_TO_HOST_GLUE(newp, Private_New));        pluginFuncs->destroy        = NewNPP_DestroyProc(PLUGIN_TO_HOST_GLUE(destroy, Private_Destroy));        pluginFuncs->setwindow      = NewNPP_SetWindowProc(PLUGIN_TO_HOST_GLUE(setwindow, Private_SetWindow));        pluginFuncs->newstream      = NewNPP_NewStreamProc(PLUGIN_TO_HOST_GLUE(newstream, Private_NewStream));        pluginFuncs->destroystream  = NewNPP_DestroyStreamProc(PLUGIN_TO_HOST_GLUE(destroystream, Private_DestroyStream));        pluginFuncs->asfile         = NewNPP_StreamAsFileProc(PLUGIN_TO_HOST_GLUE(asfile, Private_StreamAsFile));        pluginFuncs->writeready     = NewNPP_WriteReadyProc(PLUGIN_TO_HOST_GLUE(writeready, Private_WriteReady));        pluginFuncs->write          = NewNPP_WriteProc(PLUGIN_TO_HOST_GLUE(write, Private_Write));        pluginFuncs->print          = NewNPP_PrintProc(PLUGIN_TO_HOST_GLUE(print, Private_Print));        pluginFuncs->event          = NewNPP_HandleEventProc(PLUGIN_TO_HOST_GLUE(event, Private_HandleEvent));        pluginFuncs->getvalue       = NewNPP_GetValueProc(PLUGIN_TO_HOST_GLUE(getvalue, Private_GetValue));        if( navMinorVers >= NPVERS_HAS_NOTIFICATION )        {            pluginFuncs->urlnotify = NewNPP_URLNotifyProc(PLUGIN_TO_HOST_GLUE(urlnotify, Private_URLNotify));        }#ifdef OJI        if( navMinorVers >= NPVERS_HAS_LIVECONNECT )        {            pluginFuncs->javaClass  = (JRIGlobalRef) Private_GetJavaClass();        }#else        pluginFuncs->javaClass = NULL;#endif        *unloadUpp = NewNPP_ShutdownProc(PLUGIN_TO_HOST_GLUE(shutdown, Private_Shutdown));        SetUpQD();        err = Private_Initialize();    }    ExitCodeResource();    return err;}#ifdef __MACH__/*** netscape plugins functions when building Mach-O binary*/extern "C" {    NPError NP_Initialize(NPNetscapeFuncs* nsTable);    NPError NP_GetEntryPoints(NPPluginFuncs* pluginFuncs);    NPError NP_Shutdown(void);}/*** netscape plugins functions when using Mach-O binary*/NPError NP_Initialize(NPNetscapeFuncs* nsTable){    PLUGINDEBUGSTR("\pNP_Initialize");    /* validate input parameters */    if( NULL == nsTable  )        return NPERR_INVALID_FUNCTABLE_ERROR;    /*     * Check the major version passed in Netscape's function table.     * We won't load if the major version is newer than what we expect.     * Also check that the function tables passed in are big enough for     * all the functions we need (they could be bigger, if Netscape added     * new APIs, but that's OK with us -- we'll just ignore them).     *     */    if ((nsTable->version >> 8) > NP_VERSION_MAJOR)        return NPERR_INCOMPATIBLE_VERSION_ERROR;    if (nsTable->size < sizeof(NPNetscapeFuncs))        return NPERR_INVALID_FUNCTABLE_ERROR;    int navMinorVers = nsTable->version & 0xFF;    /*     * Copy all the fields of Netscape function table into our     * copy so we can call back into Netscape later.  Note that     * we need to copy the fields one by one, rather than assigning     * the whole structure, because the Netscape function table     * could actually be bigger than what we expect.     */    gNetscapeFuncs.version       = nsTable->version;    gNetscapeFuncs.size          = nsTable->size;    gNetscapeFuncs.posturl       = nsTable->posturl;    gNetscapeFuncs.geturl        = nsTable->geturl;    gNetscapeFuncs.requestread   = nsTable->requestread;    gNetscapeFuncs.newstream     = nsTable->newstream;    gNetscapeFuncs.write         = nsTable->write;    gNetscapeFuncs.destroystream = nsTable->destroystream;    gNetscapeFuncs.status        = nsTable->status;    gNetscapeFuncs.uagent        = nsTable->uagent;    gNetscapeFuncs.memalloc      = nsTable->memalloc;    gNetscapeFuncs.memfree       = nsTable->memfree;    gNetscapeFuncs.memflush      = nsTable->memflush;    gNetscapeFuncs.reloadplugins = nsTable->reloadplugins;    if( navMinorVers >= NPVERS_HAS_LIVECONNECT )    {        gNetscapeFuncs.getJavaEnv   = nsTable->getJavaEnv;        gNetscapeFuncs.getJavaPeer  = nsTable->getJavaPeer;    }    if( navMinorVers >= NPVERS_HAS_NOTIFICATION )    {        gNetscapeFuncs.geturlnotify     = nsTable->geturlnotify;        gNetscapeFuncs.posturlnotify    = nsTable->posturlnotify;    }    gNetscapeFuncs.getvalue         = nsTable->getvalue;    gNetscapeFuncs.setvalue         = nsTable->setvalue;    gNetscapeFuncs.invalidaterect   = nsTable->invalidaterect;    gNetscapeFuncs.invalidateregion = nsTable->invalidateregion;    gNetscapeFuncs.forceredraw      = nsTable->forceredraw;    if( navMinorVers >= 14 )    {        // NPRuntime support        gNetscapeFuncs.getstringidentifier  = nsTable->getstringidentifier;        gNetscapeFuncs.getstringidentifiers = nsTable->getstringidentifiers;        gNetscapeFuncs.getintidentifier     = nsTable->getintidentifier;        gNetscapeFuncs.identifierisstring   = nsTable->identifierisstring;        gNetscapeFuncs.utf8fromidentifier   = nsTable->utf8fromidentifier;        gNetscapeFuncs.intfromidentifier    = nsTable->intfromidentifier;        gNetscapeFuncs.createobject         = nsTable->createobject;        gNetscapeFuncs.retainobject         = nsTable->retainobject;        gNetscapeFuncs.releaseobject        = nsTable->releaseobject;        gNetscapeFuncs.invoke               = nsTable->invoke;        gNetscapeFuncs.invokeDefault        = nsTable->invokeDefault;        gNetscapeFuncs.evaluate             = nsTable->evaluate;        gNetscapeFuncs.getproperty          = nsTable->getproperty;        gNetscapeFuncs.setproperty          = nsTable->setproperty;        gNetscapeFuncs.removeproperty       = nsTable->removeproperty;        gNetscapeFuncs.hasproperty          = nsTable->hasproperty;        gNetscapeFuncs.hasmethod            = nsTable->hasmethod;        gNetscapeFuncs.releasevariantvalue  = nsTable->releasevariantvalue;        gNetscapeFuncs.setexception         = nsTable->setexception;    }    return NPP_Initialize();}NPError NP_GetEntryPoints(NPPluginFuncs* pluginFuncs){    int navMinorVers = gNetscapeFuncs.version & 0xFF;    PLUGINDEBUGSTR("\pNP_GetEntryPoints");    if( pluginFuncs == NULL )        return NPERR_INVALID_FUNCTABLE_ERROR;    /*if (pluginFuncs->size < sizeof(NPPluginFuncs))    return NPERR_INVALID_FUNCTABLE_ERROR;*/    /*     * Set up the plugin function table that Netscape will use to     * call us.  Netscape needs to know about our version and size     * and have a UniversalProcPointer for every function we     * implement.     */    pluginFuncs->version    = (NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR;    pluginFuncs->size       = sizeof(NPPluginFuncs);    pluginFuncs->newp       = NewNPP_NewProc(Private_New);    pluginFuncs->destroy    = NewNPP_DestroyProc(Private_Destroy);    pluginFuncs->setwindow  = NewNPP_SetWindowProc(Private_SetWindow);    pluginFuncs->newstream  = NewNPP_NewStreamProc(Private_NewStream);    pluginFuncs->destroystream = NewNPP_DestroyStreamProc(Private_DestroyStream);    pluginFuncs->asfile     = NewNPP_StreamAsFileProc(Private_StreamAsFile);    pluginFuncs->writeready = NewNPP_WriteReadyProc(Private_WriteReady);    pluginFuncs->write      = NewNPP_WriteProc(Private_Write);    pluginFuncs->print      = NewNPP_PrintProc(Private_Print);    pluginFuncs->event      = NewNPP_HandleEventProc(Private_HandleEvent);    pluginFuncs->getvalue   = NewNPP_GetValueProc(Private_GetValue);    pluginFuncs->setvalue   = NewNPP_SetValueProc(Private_SetValue);    if( navMinorVers >= NPVERS_HAS_NOTIFICATION )    {        pluginFuncs->urlnotify = Private_URLNotify;    }#ifdef OJI    if( navMinorVers >= NPVERS_HAS_LIVECONNECT )    {        pluginFuncs->javaClass  = (JRIGlobalRef) Private_GetJavaClass();    }#else    pluginFuncs->javaClass = NULL;#endif    return NPERR_NO_ERROR;}NPError NP_Shutdown(void){    PLUGINDEBUGSTR("\pNP_Shutdown");    NPP_Shutdown();    return NPERR_NO_ERROR;}#endif

⌨️ 快捷键说明

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