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

midi

开发平台:

Unix_Linux

  1. /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  2.  *
  3.  * Mozilla/Firefox plugin for VLC
  4.  * Copyright (C) 2009, Jean-Paul Saman <jpsaman@videolan.org>
  5.  *
  6.  * This library is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU Lesser General Public
  8.  * License as published by the Free Software Foundation; either
  9.  * version 2.1 of the License, or (at your option) any later version.
  10.  *
  11.  * This library is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14.  * Lesser General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU Lesser General Public
  17.  * License along with this library; if not, write to the Free Software
  18.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  19.  *
  20.  * The Original Code is mozilla.org code.
  21.  *
  22.  * The Initial Developer of the Original Code is
  23.  * Netscape Communications Corporation.
  24.  * Portions created by the Initial Developer are Copyright (C) 1998
  25.  * the Initial Developer. All Rights Reserved.
  26.  *
  27.  * Contributor(s):
  28.  *   Stephen Mak <smak@sun.com>
  29.  *
  30.  */
  31. /*
  32.  * npunix.c
  33.  *
  34.  * Netscape Client Plugin API
  35.  * - Wrapper function to interface with the Netscape Navigator
  36.  *
  37.  * dp Suresh <dp@netscape.com>
  38.  *
  39.  *----------------------------------------------------------------------
  40.  * PLUGIN DEVELOPERS:
  41.  *  YOU WILL NOT NEED TO EDIT THIS FILE.
  42.  *----------------------------------------------------------------------
  43.  */
  44. #include "config.h"
  45. #define XP_UNIX 1
  46. #define OJI 1
  47. #include <npapi.h>
  48. #ifdef HAVE_NPFUNCTIONS_H
  49. #include <npfunctions.h>
  50. #else
  51. #include <npupp.h>
  52. #endif
  53. #include "../vlcshell.h"
  54. /*
  55.  * Define PLUGIN_TRACE to have the wrapper functions print
  56.  * messages to stderr whenever they are called.
  57.  */
  58. #ifdef PLUGIN_TRACE
  59. #include <stdio.h>
  60. #define PLUGINDEBUGSTR(msg) fprintf(stderr, "%sn", msg)
  61. #else
  62. #define PLUGINDEBUGSTR(msg)
  63. #endif
  64. /***********************************************************************
  65.  *
  66.  * Globals
  67.  *
  68.  ***********************************************************************/
  69. static NPNetscapeFuncs   gNetscapeFuncs;    /* Netscape Function table */
  70. /***********************************************************************
  71.  *
  72.  * Wrapper functions : plugin calling Netscape Navigator
  73.  *
  74.  * These functions let the plugin developer just call the APIs
  75.  * as documented and defined in npapi.h, without needing to know
  76.  * about the function table and call macros in npupp.h.
  77.  *
  78.  ***********************************************************************/
  79. void
  80. NPN_Version(int* plugin_major, int* plugin_minor,
  81.          int* netscape_major, int* netscape_minor)
  82. {
  83.     *plugin_major = NP_VERSION_MAJOR;
  84.     *plugin_minor = NP_VERSION_MINOR;
  85.     /* Major version is in high byte */
  86.     *netscape_major = gNetscapeFuncs.version >> 8;
  87.     /* Minor version is in low byte */
  88.     *netscape_minor = gNetscapeFuncs.version & 0xFF;
  89. }
  90. NPError
  91. NPN_GetValue(NPP instance, NPNVariable variable, void *r_value)
  92. {
  93. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  94.     return CallNPN_GetValueProc(gNetscapeFuncs.getvalue,
  95.                     instance, variable, r_value);
  96. #else
  97.     return (*gNetscapeFuncs.getvalue)(instance, variable, r_value);
  98. #endif
  99. }
  100. NPError
  101. NPN_SetValue(NPP instance, NPPVariable variable, void *value)
  102. {
  103. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  104.     return CallNPN_SetValueProc(gNetscapeFuncs.setvalue,
  105.                     instance, variable, value);
  106. #else
  107.     return (*gNetscapeFuncs.setvalue)(instance, variable, value);
  108. #endif
  109. }
  110. NPError
  111. NPN_GetURL(NPP instance, const char* url, const char* window)
  112. {
  113. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  114.     return CallNPN_GetURLProc(gNetscapeFuncs.geturl, instance, url, window);
  115. #else
  116.     return (*gNetscapeFuncs.geturl)(instance, url, window);
  117. #endif
  118. }
  119. NPError
  120. NPN_GetURLNotify(NPP instance, const char* url, const char* window, void* notifyData)
  121. {
  122. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  123.     return CallNPN_GetURLNotifyProc(gNetscapeFuncs.geturlnotify, instance, url, window, notifyData);
  124. #else
  125.     return (*gNetscapeFuncs.geturlnotify)(instance, url, window, notifyData);
  126. #endif
  127. }
  128. NPError
  129. NPN_PostURL(NPP instance, const char* url, const char* window,
  130.          uint32_t len, const char* buf, NPBool file)
  131. {
  132. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  133.     return CallNPN_PostURLProc(gNetscapeFuncs.posturl, instance,
  134.                     url, window, len, buf, file);
  135. #else
  136.     return (*gNetscapeFuncs.posturl)(instance, url, window, len, buf, file);
  137. #endif
  138. }
  139. NPError
  140. NPN_PostURLNotify(NPP instance, const char* url, const char* window, uint32_t len,
  141.                   const char* buf, NPBool file, void* notifyData)
  142. {
  143. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  144.     return CallNPN_PostURLNotifyProc(gNetscapeFuncs.posturlnotify,
  145.             instance, url, window, len, buf, file, notifyData);
  146. #else
  147.     return (*gNetscapeFuncs.posturlnotify)(instance, url, window, len, buf, file, notifyData);
  148. #endif
  149. }
  150. NPError
  151. NPN_RequestRead(NPStream* stream, NPByteRange* rangeList)
  152. {
  153. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  154.     return CallNPN_RequestReadProc(gNetscapeFuncs.requestread,
  155.                     stream, rangeList);
  156. #else
  157.     return (*gNetscapeFuncs.requestread)(stream, rangeList);
  158. #endif
  159. }
  160. NPError
  161. NPN_NewStream(NPP instance, NPMIMEType type, const char *window,
  162.           NPStream** stream_ptr)
  163. {
  164. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  165.     return CallNPN_NewStreamProc(gNetscapeFuncs.newstream, instance,
  166.                     type, window, stream_ptr);
  167. #else
  168.     return (*gNetscapeFuncs.newstream)(instance, type, window, stream_ptr);
  169. #endif
  170. }
  171. int32_t
  172. NPN_Write(NPP instance, NPStream* stream, int32_t len, void* buffer)
  173. {
  174. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  175.     return CallNPN_WriteProc(gNetscapeFuncs.write, instance,
  176.                     stream, len, buffer);
  177. #else
  178.     return (*gNetscapeFuncs.write)(instance, stream, len, buffer);
  179. #endif
  180. }
  181. NPError
  182. NPN_DestroyStream(NPP instance, NPStream* stream, NPError reason)
  183. {
  184. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  185.     return CallNPN_DestroyStreamProc(gNetscapeFuncs.destroystream,
  186.                         instance, stream, reason);
  187. #else
  188.     return (*gNetscapeFuncs.destroystream)(instance, stream, reason);
  189. #endif
  190. }
  191. void
  192. NPN_Status(NPP instance, const char* message)
  193. {
  194. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  195.     CallNPN_StatusProc(gNetscapeFuncs.status, instance, message);
  196. #else
  197.     (*gNetscapeFuncs.status)(instance, message);
  198. #endif
  199. }
  200. const char*
  201. NPN_UserAgent(NPP instance)
  202. {
  203. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  204.     return CallNPN_UserAgentProc(gNetscapeFuncs.uagent, instance);
  205. #else
  206.     return (*gNetscapeFuncs.uagent)(instance);
  207. #endif
  208. }
  209. void *NPN_MemAlloc(uint32_t size)
  210. {
  211. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  212.     return CallNPN_MemAllocProc(gNetscapeFuncs.memalloc, size);
  213. #else
  214.     return (*gNetscapeFuncs.memalloc)(size);
  215. #endif
  216. }
  217. void NPN_MemFree(void* ptr)
  218. {
  219. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  220.     CallNPN_MemFreeProc(gNetscapeFuncs.memfree, ptr);
  221. #else
  222.     (*gNetscapeFuncs.memfree)(ptr);
  223. #endif
  224. }
  225. uint32_t NPN_MemFlush(uint32_t size)
  226. {
  227. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  228.     return CallNPN_MemFlushProc(gNetscapeFuncs.memflush, size);
  229. #else
  230.     return (*gNetscapeFuncs.memflush)(size);
  231. #endif
  232. }
  233. void NPN_ReloadPlugins(NPBool reloadPages)
  234. {
  235. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  236.     CallNPN_ReloadPluginsProc(gNetscapeFuncs.reloadplugins, reloadPages);
  237. #else
  238.     (*gNetscapeFuncs.reloadplugins)(reloadPages);
  239. #endif
  240. }
  241. #ifdef OJI
  242. JRIEnv* NPN_GetJavaEnv()
  243. {
  244. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  245.     return CallNPN_GetJavaEnvProc(gNetscapeFuncs.getJavaEnv);
  246. #else
  247.     return (*gNetscapeFuncs.getJavaEnv);
  248. #endif
  249. }
  250. jref NPN_GetJavaPeer(NPP instance)
  251. {
  252. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  253.     return CallNPN_GetJavaPeerProc(gNetscapeFuncs.getJavaPeer,
  254.                        instance);
  255. #else
  256.     return (*gNetscapeFuncs.getJavaPeer)(instance);
  257. #endif
  258. }
  259. #endif
  260. void
  261. NPN_InvalidateRect(NPP instance, NPRect *invalidRect)
  262. {
  263. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  264.     CallNPN_InvalidateRectProc(gNetscapeFuncs.invalidaterect, instance,
  265.         invalidRect);
  266. #else
  267.     (*gNetscapeFuncs.invalidaterect)(instance, invalidRect);
  268. #endif
  269. }
  270. void
  271. NPN_InvalidateRegion(NPP instance, NPRegion invalidRegion)
  272. {
  273. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  274.     CallNPN_InvalidateRegionProc(gNetscapeFuncs.invalidateregion, instance,
  275.         invalidRegion);
  276. #else
  277.     (*gNetscapeFuncs.invalidateregion)(instance, invalidRegion);
  278. #endif
  279. }
  280. void
  281. NPN_ForceRedraw(NPP instance)
  282. {
  283. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  284.     CallNPN_ForceRedrawProc(gNetscapeFuncs.forceredraw, instance);
  285. #else
  286.     (*gNetscapeFuncs.forceredraw)(instance);
  287. #endif
  288. }
  289. void NPN_PushPopupsEnabledState(NPP instance, NPBool enabled)
  290. {
  291. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  292.     CallNPN_PushPopupsEnabledStateProc(gNetscapeFuncs.pushpopupsenabledstate,
  293.         instance, enabled);
  294. #else
  295.     (*gNetscapeFuncs.pushpopupsenabledstate)(instance, enabled);
  296. #endif
  297. }
  298. void NPN_PopPopupsEnabledState(NPP instance)
  299. {
  300. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  301.     CallNPN_PopPopupsEnabledStateProc(gNetscapeFuncs.poppopupsenabledstate,
  302.         instance);
  303. #else
  304.     (*gNetscapeFuncs.poppopupsenabledstate)(instance);
  305. #endif
  306. }
  307. NPIdentifier NPN_GetStringIdentifier(const NPUTF8 *name)
  308. {
  309.     int minor = gNetscapeFuncs.version & 0xFF;
  310.     if( minor >= 14 )
  311.     {
  312. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  313.         return CallNPN_GetStringIdentifierProc(
  314.                         gNetscapeFuncs.getstringidentifier, name);
  315. #else
  316.         return (*gNetscapeFuncs.getstringidentifier)(name);
  317. #endif
  318.     }
  319.     return NULL;
  320. }
  321. void NPN_GetStringIdentifiers(const NPUTF8 **names, int32_t nameCount,
  322.                               NPIdentifier *identifiers)
  323. {
  324.     int minor = gNetscapeFuncs.version & 0xFF;
  325.     if( minor >= 14 )
  326.     {
  327. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  328.         CallNPN_GetStringIdentifiersProc(gNetscapeFuncs.getstringidentifiers,
  329.                                          names, nameCount, identifiers);
  330. #else
  331.         (*gNetscapeFuncs.getstringidentifiers)(names, nameCount, identifiers);
  332. #endif
  333.     }
  334. }
  335. NPIdentifier NPN_GetIntIdentifier(int32_t intid)
  336. {
  337.     int minor = gNetscapeFuncs.version & 0xFF;
  338.     if( minor >= 14 )
  339.     {
  340. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  341.         return CallNPN_GetIntIdentifierProc(gNetscapeFuncs.getintidentifier, intid);
  342. #else
  343.         return (*gNetscapeFuncs.getintidentifier)(intid);
  344. #endif
  345.     }
  346.     return NULL;
  347. }
  348. bool NPN_IdentifierIsString(NPIdentifier identifier)
  349. {
  350.     int minor = gNetscapeFuncs.version & 0xFF;
  351.     if( minor >= 14 )
  352.     {
  353. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  354.         return CallNPN_IdentifierIsStringProc(
  355.                         gNetscapeFuncs.identifierisstring,
  356.                         identifier);
  357. #else
  358.         return (*gNetscapeFuncs.identifierisstring)(identifier);
  359. #endif
  360.     }
  361.     return false;
  362. }
  363. NPUTF8 *NPN_UTF8FromIdentifier(NPIdentifier identifier)
  364. {
  365.     int minor = gNetscapeFuncs.version & 0xFF;
  366.     if( minor >= 14 )
  367.     {
  368. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  369.         return CallNPN_UTF8FromIdentifierProc(
  370.                             gNetscapeFuncs.utf8fromidentifier,
  371.                             identifier);
  372. #else
  373.         return (*gNetscapeFuncs.utf8fromidentifier)(identifier);
  374. #endif
  375.     }
  376.     return NULL;
  377. }
  378. int32_t NPN_IntFromIdentifier(NPIdentifier identifier)
  379. {
  380.     int minor = gNetscapeFuncs.version & 0xFF;
  381.     if( minor >= 14 )
  382.     {
  383. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  384.         return CallNPN_IntFromIdentifierProc(
  385.                         gNetscapeFuncs.intfromidentifier,
  386.                         identifier);
  387. #else
  388.         return (*gNetscapeFuncs.intfromidentifier)(identifier);
  389. #endif
  390.     }
  391.     return 0;
  392. }
  393. NPObject *NPN_CreateObject(NPP npp, NPClass *aClass)
  394. {
  395.     int minor = gNetscapeFuncs.version & 0xFF;
  396.     if( minor >= 14 )
  397. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  398.         return CallNPN_CreateObjectProc(gNetscapeFuncs.createobject, npp, aClass);
  399. #else
  400.         return (*gNetscapeFuncs.createobject)(npp, aClass);
  401. #endif
  402.     return NULL;
  403. }
  404. NPObject *NPN_RetainObject(NPObject *obj)
  405. {
  406.     int minor = gNetscapeFuncs.version & 0xFF;
  407.     if( minor >= 14 )
  408. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  409.         return CallNPN_RetainObjectProc(gNetscapeFuncs.retainobject, obj);
  410. #else
  411.         return (*gNetscapeFuncs.retainobject)(obj);
  412. #endif
  413.     return NULL;
  414. }
  415. void NPN_ReleaseObject(NPObject *obj)
  416. {
  417.     int minor = gNetscapeFuncs.version & 0xFF;
  418.     if( minor >= 14 )
  419. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  420.         CallNPN_ReleaseObjectProc(gNetscapeFuncs.releaseobject, obj);
  421. #else
  422.         (*gNetscapeFuncs.releaseobject)(obj);
  423. #endif
  424. }
  425. bool NPN_Invoke(NPP npp, NPObject* obj, NPIdentifier methodName,
  426.                 const NPVariant *args, uint32_t argCount, NPVariant *result)
  427. {
  428.     int minor = gNetscapeFuncs.version & 0xFF;
  429.     if( minor >= 14 )
  430. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  431.         return CallNPN_InvokeProc(gNetscapeFuncs.invoke, npp, obj, methodName,
  432.                                   args, argCount, result);
  433. #else
  434.         return (*gNetscapeFuncs.invoke)(npp, obj, methodName, args, argCount, result);
  435. #endif
  436.     return false;
  437. }
  438. bool NPN_InvokeDefault(NPP npp, NPObject* obj, const NPVariant *args,
  439.                        uint32_t argCount, NPVariant *result)
  440. {
  441.     int minor = gNetscapeFuncs.version & 0xFF;
  442.     if( minor >= 14 )
  443. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  444.         return CallNPN_InvokeDefaultProc(gNetscapeFuncs.invokeDefault, npp, obj,
  445.                                          args, argCount, result);
  446. #else
  447.         return (*gNetscapeFuncs.invokeDefault)(npp, obj, args, argCount, result);
  448. #endif
  449.     return false;
  450. }
  451. bool NPN_Evaluate(NPP npp, NPObject* obj, NPString *script,
  452.                   NPVariant *result)
  453. {
  454.     int minor = gNetscapeFuncs.version & 0xFF;
  455.     if( minor >= 14 )
  456. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  457.         return CallNPN_EvaluateProc(gNetscapeFuncs.evaluate, npp, obj,
  458.                                     script, result);
  459. #else
  460.         return (*gNetscapeFuncs.evaluate)(npp, obj, script, result);
  461. #endif
  462.     return false;
  463. }
  464. bool NPN_GetProperty(NPP npp, NPObject* obj, NPIdentifier propertyName,
  465.                      NPVariant *result)
  466. {
  467.     int minor = gNetscapeFuncs.version & 0xFF;
  468.     if( minor >= 14 )
  469. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  470.         return CallNPN_GetPropertyProc(gNetscapeFuncs.getproperty, npp, obj,
  471.                                        propertyName, result);
  472. #else
  473.         return (*gNetscapeFuncs.getproperty)(npp, obj, propertyName, result);
  474. #endif
  475.     return false;
  476. }
  477. bool NPN_SetProperty(NPP npp, NPObject* obj, NPIdentifier propertyName,
  478.                      const NPVariant *value)
  479. {
  480.     int minor = gNetscapeFuncs.version & 0xFF;
  481.     if( minor >= 14 )
  482. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  483.         return CallNPN_SetPropertyProc(gNetscapeFuncs.setproperty, npp, obj,
  484.                                        propertyName, value);
  485. #else
  486.         return (*gNetscapeFuncs.setproperty)(npp, obj, propertyName, value);
  487. #endif
  488.     return false;
  489. }
  490. bool NPN_RemoveProperty(NPP npp, NPObject* obj, NPIdentifier propertyName)
  491. {
  492.     int minor = gNetscapeFuncs.version & 0xFF;
  493.     if( minor >= 14 )
  494. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  495.         return CallNPN_RemovePropertyProc(gNetscapeFuncs.removeproperty, npp, obj,
  496.                                           propertyName);
  497. #else
  498.         return (*gNetscapeFuncs.removeproperty)(npp, obj, propertyName);
  499. #endif
  500.     return false;
  501. }
  502. bool NPN_HasProperty(NPP npp, NPObject* obj, NPIdentifier propertyName)
  503. {
  504.     int minor = gNetscapeFuncs.version & 0xFF;
  505.     if( minor >= 14 )
  506. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  507.         return CallNPN_HasPropertyProc(gNetscapeFuncs.hasproperty, npp, obj,
  508.                                        propertyName);
  509. #else
  510.         return (*gNetscapeFuncs.hasproperty)(npp, obj, propertyName);
  511. #endif
  512.     return false;
  513. }
  514. bool NPN_HasMethod(NPP npp, NPObject* obj, NPIdentifier methodName)
  515. {
  516.     int minor = gNetscapeFuncs.version & 0xFF;
  517.     if( minor >= 14 )
  518. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  519.         return CallNPN_HasMethodProc(gNetscapeFuncs.hasmethod, npp,
  520.                                      obj, methodName);
  521. #else
  522.         return (*gNetscapeFuncs.hasmethod)(npp, obj, methodName);
  523. #endif
  524.     return false;
  525. }
  526. void NPN_ReleaseVariantValue(NPVariant *variant)
  527. {
  528.     int minor = gNetscapeFuncs.version & 0xFF;
  529.     if( minor >= 14 )
  530. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  531.         CallNPN_ReleaseVariantValueProc(gNetscapeFuncs.releasevariantvalue, variant);
  532. #else
  533.         (*gNetscapeFuncs.releasevariantvalue)(variant);
  534. #endif
  535. }
  536. void NPN_SetException(NPObject* obj, const NPUTF8 *message)
  537. {
  538.     int minor = gNetscapeFuncs.version & 0xFF;
  539.     if( minor >= 14 )
  540. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  541.         CallNPN_SetExceptionProc(gNetscapeFuncs.setexception, obj, message);
  542. #else
  543.         (*gNetscapeFuncs.setexception)(obj, message);
  544. #endif
  545. }
  546. /***********************************************************************
  547.  *
  548.  * Wrapper functions : Netscape Navigator -> plugin
  549.  *
  550.  * These functions let the plugin developer just create the APIs
  551.  * as documented and defined in npapi.h, without needing to 
  552.  * install those functions in the function table or worry about
  553.  * setting up globals for 68K plugins.
  554.  *
  555.  ***********************************************************************/
  556. /* Function prototypes */
  557. NPError Private_New(NPMIMEType pluginType, NPP instance, uint16_t mode,
  558.         int16_t argc, char* argn[], char* argv[], NPSavedData* saved);
  559. NPError Private_Destroy(NPP instance, NPSavedData** save);
  560. NPError Private_SetWindow(NPP instance, NPWindow* window);
  561. NPError Private_NewStream(NPP instance, NPMIMEType type, NPStream* stream,
  562.                           NPBool seekable, uint16_t* stype);
  563. int32_t Private_WriteReady(NPP instance, NPStream* stream);
  564. int32_t Private_Write(NPP instance, NPStream* stream, int32_t offset,
  565.                     int32_t len, void* buffer);
  566. void Private_StreamAsFile(NPP instance, NPStream* stream, const char* fname);
  567. NPError Private_DestroyStream(NPP instance, NPStream* stream, NPError reason);
  568. void Private_URLNotify(NPP instance, const char* url,
  569.                        NPReason reason, void* notifyData);
  570. void Private_Print(NPP instance, NPPrint* platformPrint);
  571. NPError Private_GetValue(NPP instance, NPPVariable variable, void *r_value);
  572. NPError Private_SetValue(NPP instance, NPPVariable variable, void *r_value);
  573. #ifdef OJI
  574. JRIGlobalRef Private_GetJavaClass(void);
  575. #endif
  576. /* function implementations */
  577. NPError
  578. Private_New(NPMIMEType pluginType, NPP instance, uint16_t mode,
  579.         int16_t argc, char* argn[], char* argv[], NPSavedData* saved)
  580. {
  581.     NPError ret;
  582.     PLUGINDEBUGSTR("New");
  583.     ret = NPP_New(pluginType, instance, mode, argc, argn, argv, saved);
  584.     return ret; 
  585. }
  586. NPError
  587. Private_Destroy(NPP instance, NPSavedData** save)
  588. {
  589.     PLUGINDEBUGSTR("Destroy");
  590.     return NPP_Destroy(instance, save);
  591. }
  592. NPError
  593. Private_SetWindow(NPP instance, NPWindow* window)
  594. {
  595.     NPError err;
  596.     PLUGINDEBUGSTR("SetWindow");
  597.     err = NPP_SetWindow(instance, window);
  598.     return err;
  599. }
  600. NPError
  601. Private_NewStream(NPP instance, NPMIMEType type, NPStream* stream,
  602.             NPBool seekable, uint16_t* stype)
  603. {
  604.     NPError err;
  605.     PLUGINDEBUGSTR("NewStream");
  606.     err = NPP_NewStream(instance, type, stream, seekable, stype);
  607.     return err;
  608. }
  609. int32_t
  610. Private_WriteReady(NPP instance, NPStream* stream)
  611. {
  612.     unsigned int result;
  613.     PLUGINDEBUGSTR("WriteReady");
  614.     result = NPP_WriteReady(instance, stream);
  615.     return result;
  616. }
  617. int32_t
  618. Private_Write(NPP instance, NPStream* stream, int32_t offset, int32_t len,
  619.         void* buffer)
  620. {
  621.     unsigned int result;
  622.     PLUGINDEBUGSTR("Write");
  623.     result = NPP_Write(instance, stream, offset, len, buffer);
  624.     return result;
  625. }
  626. void
  627. Private_StreamAsFile(NPP instance, NPStream* stream, const char* fname)
  628. {
  629.     PLUGINDEBUGSTR("StreamAsFile");
  630.     NPP_StreamAsFile(instance, stream, fname);
  631. }
  632. NPError
  633. Private_DestroyStream(NPP instance, NPStream* stream, NPError reason)
  634. {
  635.     NPError err;
  636.     PLUGINDEBUGSTR("DestroyStream");
  637.     err = NPP_DestroyStream(instance, stream, reason);
  638.     return err;
  639. }
  640. void
  641. Private_URLNotify(NPP instance, const char* url,
  642.                 NPReason reason, void* notifyData)
  643. {
  644.     PLUGINDEBUGSTR("URLNotify");
  645.     NPP_URLNotify(instance, url, reason, notifyData);
  646. }
  647. void
  648. Private_Print(NPP instance, NPPrint* platformPrint)
  649. {
  650.     PLUGINDEBUGSTR("Print");
  651.     NPP_Print(instance, platformPrint);
  652. }
  653. NPError
  654. Private_GetValue(NPP instance, NPPVariable variable, void *r_value)
  655. {
  656.     PLUGINDEBUGSTR("GetValue");
  657.     return NPP_GetValue(instance, variable, r_value);
  658. }
  659. NPError
  660. Private_SetValue(NPP instance, NPPVariable variable, void *r_value)
  661. {
  662.     PLUGINDEBUGSTR("SetValue");
  663.     return NPP_SetValue(instance, variable, r_value);
  664. }
  665. #ifdef OJI
  666. JRIGlobalRef
  667. Private_GetJavaClass(void)
  668. {
  669.     jref clazz = NPP_GetJavaClass();
  670.     if (clazz) {
  671.     JRIEnv* env = NPN_GetJavaEnv();
  672.     return JRI_NewGlobalRef(env, clazz);
  673.     }
  674.     return NULL;
  675. }
  676. #endif
  677. /*********************************************************************** 
  678.  *
  679.  * These functions are located automagically by netscape.
  680.  *
  681.  ***********************************************************************/
  682. /*
  683.  * NP_GetMIMEDescription
  684.  *  - Netscape needs to know about this symbol
  685.  *  - Netscape uses the return value to identify when an object instance
  686.  *    of this plugin should be created.
  687.  */
  688. char *
  689. NP_GetMIMEDescription(void)
  690. {
  691.     return NPP_GetMIMEDescription();
  692. }
  693. /*
  694.  * NP_GetValue [optional]
  695.  *  - Netscape needs to know about this symbol.
  696.  *  - Interfaces with plugin to get values for predefined variables
  697.  *    that the navigator needs.
  698.  */
  699. NPError
  700. NP_GetValue(void* future, NPPVariable variable, void *value)
  701. {
  702.     return NPP_GetValue(future, variable, value);
  703. }
  704. /*
  705.  * NP_Initialize
  706.  *  - Netscape needs to know about this symbol.
  707.  *  - It calls this function after looking up its symbol before it
  708.  *    is about to create the first ever object of this kind.
  709.  *
  710.  * PARAMETERS
  711.  *    nsTable   - The netscape function table. If developers just use these
  712.  *        wrappers, they don't need to worry about all these function
  713.  *        tables.
  714.  * RETURN
  715.  *    pluginFuncs
  716.  *      - This functions needs to fill the plugin function table
  717.  *        pluginFuncs and return it. Netscape Navigator plugin
  718.  *        library will use this function table to call the plugin.
  719.  *
  720.  */
  721. NPError
  722. NP_Initialize(NPNetscapeFuncs* nsTable, NPPluginFuncs* pluginFuncs)
  723. {
  724.     NPError err = NPERR_NO_ERROR;
  725.     PLUGINDEBUGSTR("NP_Initialize");
  726.     /* validate input parameters */
  727.     if ((nsTable == NULL) || (pluginFuncs == NULL))
  728.         err = NPERR_INVALID_FUNCTABLE_ERROR;
  729.     /*
  730.      * Check the major version passed in Netscape's function table.
  731.      * We won't load if the major version is newer than what we expect.
  732.      * Also check that the function tables passed in are big enough for
  733.      * all the functions we need (they could be bigger, if Netscape added
  734.      * new APIs, but that's OK with us -- we'll just ignore them).
  735.      *
  736.      */
  737.     if (err == NPERR_NO_ERROR) {
  738.         if ((nsTable->version >> 8) > NP_VERSION_MAJOR)
  739.             err = NPERR_INCOMPATIBLE_VERSION_ERROR;
  740.         if (nsTable->size < ((char *)&nsTable->posturlnotify - (char *)nsTable))
  741.             err = NPERR_INVALID_FUNCTABLE_ERROR;
  742.         if (pluginFuncs->size < sizeof(NPPluginFuncs))
  743.             err = NPERR_INVALID_FUNCTABLE_ERROR;
  744.     }
  745.     if (err == NPERR_NO_ERROR)
  746.     {
  747.         /*
  748.          * Copy all the fields of Netscape function table into our
  749.          * copy so we can call back into Netscape later.  Note that
  750.          * we need to copy the fields one by one, rather than assigning
  751.          * the whole structure, because the Netscape function table
  752.          * could actually be bigger than what we expect.
  753.          */
  754.         int minor = nsTable->version & 0xFF;
  755.         gNetscapeFuncs.version       = nsTable->version;
  756.         gNetscapeFuncs.size          = nsTable->size;
  757.         gNetscapeFuncs.posturl       = nsTable->posturl;
  758.         gNetscapeFuncs.geturl        = nsTable->geturl;
  759.         gNetscapeFuncs.requestread   = nsTable->requestread;
  760.         gNetscapeFuncs.newstream     = nsTable->newstream;
  761.         gNetscapeFuncs.write         = nsTable->write;
  762.         gNetscapeFuncs.destroystream = nsTable->destroystream;
  763.         gNetscapeFuncs.status        = nsTable->status;
  764.         gNetscapeFuncs.uagent        = nsTable->uagent;
  765.         gNetscapeFuncs.memalloc      = nsTable->memalloc;
  766.         gNetscapeFuncs.memfree       = nsTable->memfree;
  767.         gNetscapeFuncs.memflush      = nsTable->memflush;
  768.         gNetscapeFuncs.reloadplugins = nsTable->reloadplugins;
  769. #ifdef OJI
  770.         if( minor >= NPVERS_HAS_LIVECONNECT )
  771.         {
  772.             gNetscapeFuncs.getJavaEnv    = nsTable->getJavaEnv;
  773.             gNetscapeFuncs.getJavaPeer   = nsTable->getJavaPeer;
  774.         }
  775. #endif
  776.         gNetscapeFuncs.getvalue      = nsTable->getvalue;
  777.         gNetscapeFuncs.setvalue      = nsTable->setvalue;
  778.         if( minor >= NPVERS_HAS_NOTIFICATION )
  779.         {
  780.             gNetscapeFuncs.geturlnotify  = nsTable->geturlnotify;
  781.             gNetscapeFuncs.posturlnotify = nsTable->posturlnotify;
  782.         }
  783.         if (nsTable->size >= ((char *)&nsTable->setexception - (char *)nsTable))
  784.         {
  785.             gNetscapeFuncs.invalidaterect = nsTable->invalidaterect;
  786.             gNetscapeFuncs.invalidateregion = nsTable->invalidateregion;
  787.             gNetscapeFuncs.forceredraw = nsTable->forceredraw;
  788.             /* npruntime support */
  789.             if (minor >= 14)
  790.             {
  791.                 gNetscapeFuncs.getstringidentifier = nsTable->getstringidentifier;
  792.                 gNetscapeFuncs.getstringidentifiers = nsTable->getstringidentifiers;
  793.                 gNetscapeFuncs.getintidentifier = nsTable->getintidentifier;
  794.                 gNetscapeFuncs.identifierisstring = nsTable->identifierisstring;
  795.                 gNetscapeFuncs.utf8fromidentifier = nsTable->utf8fromidentifier;
  796.                 gNetscapeFuncs.intfromidentifier = nsTable->intfromidentifier;
  797.                 gNetscapeFuncs.createobject = nsTable->createobject;
  798.                 gNetscapeFuncs.retainobject = nsTable->retainobject;
  799.                 gNetscapeFuncs.releaseobject = nsTable->releaseobject;
  800.                 gNetscapeFuncs.invoke = nsTable->invoke;
  801.                 gNetscapeFuncs.invokeDefault = nsTable->invokeDefault;
  802.                 gNetscapeFuncs.evaluate = nsTable->evaluate;
  803.                 gNetscapeFuncs.getproperty = nsTable->getproperty;
  804.                 gNetscapeFuncs.setproperty = nsTable->setproperty;
  805.                 gNetscapeFuncs.removeproperty = nsTable->removeproperty;
  806.                 gNetscapeFuncs.hasproperty = nsTable->hasproperty;
  807.                 gNetscapeFuncs.hasmethod = nsTable->hasmethod;
  808.                 gNetscapeFuncs.releasevariantvalue = nsTable->releasevariantvalue;
  809.                 gNetscapeFuncs.setexception = nsTable->setexception;
  810.             }
  811.         }
  812.         else
  813.         {
  814.             gNetscapeFuncs.invalidaterect = NULL;
  815.             gNetscapeFuncs.invalidateregion = NULL;
  816.             gNetscapeFuncs.forceredraw = NULL;
  817.             gNetscapeFuncs.getstringidentifier = NULL;
  818.             gNetscapeFuncs.getstringidentifiers = NULL;
  819.             gNetscapeFuncs.getintidentifier = NULL;
  820.             gNetscapeFuncs.identifierisstring = NULL;
  821.             gNetscapeFuncs.utf8fromidentifier = NULL;
  822.             gNetscapeFuncs.intfromidentifier = NULL;
  823.             gNetscapeFuncs.createobject = NULL;
  824.             gNetscapeFuncs.retainobject = NULL;
  825.             gNetscapeFuncs.releaseobject = NULL;
  826.             gNetscapeFuncs.invoke = NULL;
  827.             gNetscapeFuncs.invokeDefault = NULL;
  828.             gNetscapeFuncs.evaluate = NULL;
  829.             gNetscapeFuncs.getproperty = NULL;
  830.             gNetscapeFuncs.setproperty = NULL;
  831.             gNetscapeFuncs.removeproperty = NULL;
  832.             gNetscapeFuncs.hasproperty = NULL;
  833.             gNetscapeFuncs.releasevariantvalue = NULL;
  834.             gNetscapeFuncs.setexception = NULL;
  835.         }
  836.         if (nsTable->size >=
  837.             ((char *)&nsTable->poppopupsenabledstate - (char *)nsTable))
  838.         {
  839.             gNetscapeFuncs.pushpopupsenabledstate = nsTable->pushpopupsenabledstate;
  840.             gNetscapeFuncs.poppopupsenabledstate  = nsTable->poppopupsenabledstate;
  841.         }
  842.         else
  843.         {
  844.             gNetscapeFuncs.pushpopupsenabledstate = NULL;
  845.             gNetscapeFuncs.poppopupsenabledstate  = NULL;
  846.         }
  847.         /*
  848.          * Set up the plugin function table that Netscape will use to
  849.          * call us.  Netscape needs to know about our version and size
  850.          * and have a UniversalProcPointer for every function we
  851.          * implement.
  852.          */
  853.         pluginFuncs->version    = (NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR;
  854.         pluginFuncs->size       = sizeof(NPPluginFuncs);
  855. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  856.         pluginFuncs->newp       = NewNPP_NewProc(Private_New);
  857.         pluginFuncs->destroy    = NewNPP_DestroyProc(Private_Destroy);
  858.         pluginFuncs->setwindow  = NewNPP_SetWindowProc(Private_SetWindow);
  859.         pluginFuncs->newstream  = NewNPP_NewStreamProc(Private_NewStream);
  860.         pluginFuncs->destroystream = NewNPP_DestroyStreamProc(Private_DestroyStream);
  861.         pluginFuncs->asfile     = NewNPP_StreamAsFileProc(Private_StreamAsFile);
  862.         pluginFuncs->writeready = NewNPP_WriteReadyProc(Private_WriteReady);
  863.         pluginFuncs->write      = NewNPP_WriteProc(Private_Write);
  864.         pluginFuncs->print      = NewNPP_PrintProc(Private_Print);
  865.         pluginFuncs->getvalue   = NewNPP_GetValueProc(Private_GetValue);
  866.         pluginFuncs->setvalue   = NewNPP_SetValueProc(Private_SetValue);
  867. #else
  868.         pluginFuncs->newp       = (NPP_NewProcPtr)(Private_New);
  869.         pluginFuncs->destroy    = (NPP_DestroyProcPtr)(Private_Destroy);
  870.         pluginFuncs->setwindow  = (NPP_SetWindowProcPtr)(Private_SetWindow);
  871.         pluginFuncs->newstream  = (NPP_NewStreamProcPtr)(Private_NewStream);
  872.         pluginFuncs->destroystream = (NPP_DestroyStreamProcPtr)(Private_DestroyStream);
  873.         pluginFuncs->asfile     = (NPP_StreamAsFileProcPtr)(Private_StreamAsFile);
  874.         pluginFuncs->writeready = (NPP_WriteReadyProcPtr)(Private_WriteReady);
  875.         pluginFuncs->write      = (NPP_WriteProcPtr)(Private_Write);
  876.         pluginFuncs->print      = (NPP_PrintProcPtr)(Private_Print);
  877.         pluginFuncs->getvalue   = (NPP_GetValueProcPtr)(Private_GetValue);
  878.         pluginFuncs->setvalue   = (NPP_SetValueProcPtr)(Private_SetValue);
  879. #endif
  880.         pluginFuncs->event      = NULL;
  881.         if( minor >= NPVERS_HAS_NOTIFICATION )
  882.         {
  883. #if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20)
  884.             pluginFuncs->urlnotify = NewNPP_URLNotifyProc(Private_URLNotify);
  885. #else
  886.             pluginFuncs->urlnotify = (NPP_URLNotifyProcPtr)(Private_URLNotify);
  887. #endif
  888.         }
  889. #ifdef OJI
  890.         if( minor >= NPVERS_HAS_LIVECONNECT )
  891.             pluginFuncs->javaClass  = Private_GetJavaClass();
  892.         else
  893.             pluginFuncs->javaClass = NULL;
  894. #else
  895.         pluginFuncs->javaClass = NULL;
  896. #endif
  897.         err = NPP_Initialize();
  898.     }
  899.     return err;
  900. }
  901. /*
  902.  * NP_Shutdown [optional]
  903.  *  - Netscape needs to know about this symbol.
  904.  *  - It calls this function after looking up its symbol after
  905.  *    the last object of this kind has been destroyed.
  906.  *
  907.  */
  908. NPError
  909. NP_Shutdown(void)
  910. {
  911.     PLUGINDEBUGSTR("NP_Shutdown");
  912.     NPP_Shutdown();
  913.     return NPERR_NO_ERROR;
  914. }