nporuntime.cpp
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:3k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * runtime.cpp: support for NPRuntime API for Netscape Script-able plugins
  3.  *              FYI: http://www.mozilla.org/projects/plugins/npruntime.html
  4.  *****************************************************************************
  5.  * Copyright (C) 2005 the VideoLAN team
  6.  *
  7.  * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23. #include "config.h"
  24. #include <stdio.h>
  25. #include <string.h>
  26. #include <stdlib.h>
  27. /* Mozilla stuff */
  28. #ifdef HAVE_MOZILLA_CONFIG_H
  29. #   include <mozilla-config.h>
  30. #endif
  31. #include "nporuntime.h"
  32. #include "vlcplugin.h"
  33. char* RuntimeNPObject::stringValue(const NPString &s)
  34. {
  35.     NPUTF8 *val = static_cast<NPUTF8*>(malloc((s.utf8length+1) * sizeof(*val)));
  36.     if( val )
  37.     {
  38.         strncpy(val, s.utf8characters, s.utf8length);
  39.         val[s.utf8length] = '';
  40.     }
  41.     return val;
  42. }
  43. char* RuntimeNPObject::stringValue(const NPVariant &v)
  44. {
  45.     char *s = NULL;
  46.     if( NPVARIANT_IS_STRING(v) )
  47.     {
  48.         return stringValue(NPVARIANT_TO_STRING(v));
  49.     }
  50.     return s;
  51. }
  52. RuntimeNPObject::InvokeResult RuntimeNPObject::getProperty(int index, NPVariant &result)
  53. {
  54.     /* default behaviour */
  55.     return INVOKERESULT_GENERIC_ERROR;
  56. }
  57. RuntimeNPObject::InvokeResult RuntimeNPObject::setProperty(int index, const NPVariant &value)
  58. {
  59.     /* default behaviour */
  60.     return INVOKERESULT_GENERIC_ERROR;
  61. }
  62. RuntimeNPObject::InvokeResult RuntimeNPObject::removeProperty(int index)
  63. {
  64.     /* default behaviour */
  65.     return INVOKERESULT_GENERIC_ERROR;
  66. }
  67. RuntimeNPObject::InvokeResult RuntimeNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result)
  68. {
  69.     /* default beahviour */
  70.     return INVOKERESULT_GENERIC_ERROR;
  71. }
  72. RuntimeNPObject::InvokeResult RuntimeNPObject::invokeDefault(const NPVariant *args, uint32_t argCount, NPVariant &result)
  73. {
  74.     /* return void */
  75.     VOID_TO_NPVARIANT(result);
  76.     return INVOKERESULT_NO_ERROR;
  77. }
  78. bool RuntimeNPObject::returnInvokeResult(RuntimeNPObject::InvokeResult result)
  79. {
  80.     switch( result )
  81.     {
  82.         case INVOKERESULT_NO_ERROR:
  83.             return true;
  84.         case INVOKERESULT_GENERIC_ERROR:
  85.             break;
  86.         case INVOKERESULT_NO_SUCH_METHOD:
  87.             NPN_SetException(this, "No such method or arguments mismatch");
  88.             break;
  89.         case INVOKERESULT_INVALID_ARGS:
  90.             NPN_SetException(this, "Invalid arguments");
  91.             break;
  92.         case INVOKERESULT_INVALID_VALUE:
  93.             NPN_SetException(this, "Invalid value in assignment");
  94.             break;
  95.         case INVOKERESULT_OUT_OF_MEMORY:
  96.             NPN_SetException(this, "Out of memory");
  97.             break;
  98.     }
  99.     return false;
  100. }